@shipit-ai/cli 1.165.0 → 1.166.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 (742) hide show
  1. package/LICENSE +2 -1
  2. package/README.md +6 -0
  3. package/apis/json-schema/AgentSession.yaml +1 -1
  4. package/apis/json-schema/AgentType.yaml +2 -0
  5. package/dist/eslint.config.mjs +2 -0
  6. package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts +1 -1
  7. package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.js +1 -1
  8. package/dist/packages/core/src/application/use-cases/agents/delete-agent-run.use-case.js +1 -1
  9. package/dist/packages/core/src/domain/generated/output.d.ts +3 -1
  10. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  11. package/dist/packages/core/src/domain/generated/output.js +2 -0
  12. package/dist/packages/core/src/infrastructure/di/modules/agents.module.d.ts.map +1 -1
  13. package/dist/packages/core/src/infrastructure/di/modules/agents.module.js +6 -0
  14. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts.map +1 -1
  15. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.js +33 -0
  16. package/dist/packages/core/src/infrastructure/services/agents/common/agent-validator.service.d.ts.map +1 -1
  17. package/dist/packages/core/src/infrastructure/services/agents/common/agent-validator.service.js +2 -0
  18. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.d.ts +1 -1
  19. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.js +1 -1
  20. package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.d.ts +34 -0
  21. package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.d.ts.map +1 -0
  22. package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.js +149 -0
  23. package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.js +2 -2
  24. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/research.fixture.d.ts +1 -1
  25. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/research.fixture.d.ts.map +1 -1
  26. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/research.fixture.js +2 -2
  27. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/tasks.fixture.d.ts +1 -1
  28. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/tasks.fixture.d.ts.map +1 -1
  29. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/tasks.fixture.js +1 -1
  30. package/dist/packages/core/src/infrastructure/services/agents/common/executors/rovo-dev-executor.service.d.ts +37 -0
  31. package/dist/packages/core/src/infrastructure/services/agents/common/executors/rovo-dev-executor.service.d.ts.map +1 -0
  32. package/dist/packages/core/src/infrastructure/services/agents/common/executors/rovo-dev-executor.service.js +150 -0
  33. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +1 -1
  34. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +1 -1
  35. package/dist/packages/core/src/infrastructure/services/git/merge-strategy.service.js +1 -1
  36. package/dist/packages/core/src/infrastructure/services/interactive/feature-context.builder.js +1 -1
  37. package/dist/packages/core/src/infrastructure/services/notifications/notification-bus.js +1 -1
  38. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts +1 -1
  39. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.js +3 -3
  40. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/copilot-cli.json +31 -0
  41. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/rovo-dev.json +31 -0
  42. package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts.map +1 -1
  43. package/dist/src/presentation/web/app/actions/check-agent-auth.js +35 -0
  44. package/dist/src/presentation/web/app/actions/check-agent-tool.d.ts.map +1 -1
  45. package/dist/src/presentation/web/app/actions/check-agent-tool.js +4 -0
  46. package/dist/src/presentation/web/app/actions/get-all-agent-models.d.ts.map +1 -1
  47. package/dist/src/presentation/web/app/actions/get-all-agent-models.js +8 -2
  48. package/dist/src/presentation/web/components/assistant-ui/thread.js +2 -2
  49. package/dist/src/presentation/web/components/common/action-button/action-button.js +2 -2
  50. package/dist/src/presentation/web/components/common/action-button/action-button.stories.d.ts +1 -1
  51. package/dist/src/presentation/web/components/common/action-button/action-button.stories.d.ts.map +1 -1
  52. package/dist/src/presentation/web/components/common/add-repository-button/add-repository-button.d.ts.map +1 -1
  53. package/dist/src/presentation/web/components/common/add-repository-button/add-repository-button.js +3 -2
  54. package/dist/src/presentation/web/components/common/add-repository-button/add-repository-button.stories.d.ts +1 -1
  55. package/dist/src/presentation/web/components/common/add-repository-button/add-repository-button.stories.d.ts.map +1 -1
  56. package/dist/src/presentation/web/components/common/add-repository-button/add-repository-button.stories.js +1 -1
  57. package/dist/src/presentation/web/components/common/attachment-card/attachment-card.d.ts.map +1 -1
  58. package/dist/src/presentation/web/components/common/attachment-card/attachment-card.js +2 -2
  59. package/dist/src/presentation/web/components/common/attachment-card/attachment-card.stories.d.ts +1 -1
  60. package/dist/src/presentation/web/components/common/attachment-card/attachment-card.stories.d.ts.map +1 -1
  61. package/dist/src/presentation/web/components/common/attachment-card/attachment-card.stories.js +1 -1
  62. package/dist/src/presentation/web/components/common/attachment-chip/attachment-chip.js +2 -2
  63. package/dist/src/presentation/web/components/common/attachment-chip/attachment-chip.stories.d.ts +1 -1
  64. package/dist/src/presentation/web/components/common/attachment-chip/attachment-chip.stories.d.ts.map +1 -1
  65. package/dist/src/presentation/web/components/common/attachment-chip/attachment-chip.stories.js +1 -1
  66. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.d.ts +1 -1
  67. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.d.ts.map +1 -1
  68. package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.js +4 -4
  69. package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.stories.d.ts +1 -1
  70. package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.stories.d.ts.map +1 -1
  71. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.js +3 -3
  72. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.d.ts +1 -1
  73. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.d.ts.map +1 -1
  74. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.js +1 -1
  75. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-drawer-client.stories.d.ts +1 -1
  76. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-drawer-client.stories.d.ts.map +1 -1
  77. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  78. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +3 -3
  79. package/dist/src/presentation/web/components/common/control-center-drawer/global-chat-drawer-client.stories.d.ts +1 -1
  80. package/dist/src/presentation/web/components/common/control-center-drawer/global-chat-drawer-client.stories.d.ts.map +1 -1
  81. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.js +5 -5
  82. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.stories.d.ts +1 -1
  83. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.stories.d.ts.map +1 -1
  84. package/dist/src/presentation/web/components/common/delete-feature-dialog/delete-feature-dialog.js +2 -2
  85. package/dist/src/presentation/web/components/common/delete-feature-dialog/delete-feature-dialog.stories.d.ts +1 -1
  86. package/dist/src/presentation/web/components/common/delete-feature-dialog/delete-feature-dialog.stories.d.ts.map +1 -1
  87. package/dist/src/presentation/web/components/common/delete-feature-dialog/delete-feature-dialog.stories.js +1 -1
  88. package/dist/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.js +2 -2
  89. package/dist/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.stories.d.ts +1 -1
  90. package/dist/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.stories.d.ts.map +1 -1
  91. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.js +2 -2
  92. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.d.ts +1 -1
  93. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.d.ts.map +1 -1
  94. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.js +1 -1
  95. package/dist/src/presentation/web/components/common/drawer-revision-input/drawer-revision-input.stories.d.ts +1 -1
  96. package/dist/src/presentation/web/components/common/drawer-revision-input/drawer-revision-input.stories.d.ts.map +1 -1
  97. package/dist/src/presentation/web/components/common/drawer-revision-input/drawer-revision-input.stories.js +1 -1
  98. package/dist/src/presentation/web/components/common/editor-type-icons.stories.d.ts +1 -1
  99. package/dist/src/presentation/web/components/common/editor-type-icons.stories.d.ts.map +1 -1
  100. package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.stories.d.ts +1 -1
  101. package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.stories.d.ts.map +1 -1
  102. package/dist/src/presentation/web/components/common/empty-state/empty-state.stories.d.ts +1 -1
  103. package/dist/src/presentation/web/components/common/empty-state/empty-state.stories.d.ts.map +1 -1
  104. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +1 -1
  105. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
  106. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +1 -1
  107. package/dist/src/presentation/web/components/common/feature-create-drawer/parent-feature-combobox.stories.d.ts +1 -1
  108. package/dist/src/presentation/web/components/common/feature-create-drawer/parent-feature-combobox.stories.d.ts.map +1 -1
  109. package/dist/src/presentation/web/components/common/feature-create-drawer/prompt-section.stories.d.ts +1 -1
  110. package/dist/src/presentation/web/components/common/feature-create-drawer/prompt-section.stories.d.ts.map +1 -1
  111. package/dist/src/presentation/web/components/common/feature-create-drawer/prompt-section.stories.js +1 -1
  112. package/dist/src/presentation/web/components/common/feature-create-drawer/repository-combobox.js +2 -2
  113. package/dist/src/presentation/web/components/common/feature-create-drawer/repository-combobox.stories.d.ts +1 -1
  114. package/dist/src/presentation/web/components/common/feature-create-drawer/repository-combobox.stories.d.ts.map +1 -1
  115. package/dist/src/presentation/web/components/common/feature-create-drawer/workflow-options-section.stories.d.ts +1 -1
  116. package/dist/src/presentation/web/components/common/feature-create-drawer/workflow-options-section.stories.d.ts.map +1 -1
  117. package/dist/src/presentation/web/components/common/feature-create-drawer/workflow-options-section.stories.js +1 -1
  118. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +7 -7
  119. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts +1 -1
  120. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts.map +1 -1
  121. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.js +2 -2
  122. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.stories.d.ts +1 -1
  123. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.stories.d.ts.map +1 -1
  124. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.stories.js +1 -1
  125. package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.js +4 -6
  126. package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.stories.d.ts +1 -1
  127. package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.stories.d.ts.map +1 -1
  128. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +2 -2
  129. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.d.ts +1 -1
  130. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.d.ts.map +1 -1
  131. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.js +2 -2
  132. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts +1 -1
  133. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts.map +1 -1
  134. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +4 -4
  135. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts +1 -1
  136. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts.map +1 -1
  137. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.js +1 -1
  138. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.js +4 -4
  139. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts +1 -1
  140. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts.map +1 -1
  141. package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.d.ts +1 -1
  142. package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.d.ts.map +1 -1
  143. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.stories.d.ts +1 -1
  144. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.stories.d.ts.map +1 -1
  145. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +3 -3
  146. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +5 -11
  147. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts +1 -1
  148. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
  149. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +1 -1
  150. package/dist/src/presentation/web/components/common/feature-node/feature-sessions-dropdown.stories.d.ts +1 -1
  151. package/dist/src/presentation/web/components/common/feature-node/feature-sessions-dropdown.stories.d.ts.map +1 -1
  152. package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.stories.d.ts +1 -1
  153. package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.stories.d.ts.map +1 -1
  154. package/dist/src/presentation/web/components/common/feature-status-config.js +2 -2
  155. package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.stories.d.ts +1 -1
  156. package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.stories.d.ts.map +1 -1
  157. package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.js +2 -2
  158. package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.stories.d.ts +1 -1
  159. package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.stories.d.ts.map +1 -1
  160. package/dist/src/presentation/web/components/common/github-import-dialog/github-import-dialog.stories.d.ts +1 -1
  161. package/dist/src/presentation/web/components/common/github-import-dialog/github-import-dialog.stories.d.ts.map +1 -1
  162. package/dist/src/presentation/web/components/common/github-import-dialog/github-import-dialog.stories.js +1 -1
  163. package/dist/src/presentation/web/components/common/github-import-dialog/github-repo-browser.js +3 -3
  164. package/dist/src/presentation/web/components/common/github-import-dialog/github-repo-browser.stories.d.ts +1 -1
  165. package/dist/src/presentation/web/components/common/github-import-dialog/github-repo-browser.stories.d.ts.map +1 -1
  166. package/dist/src/presentation/web/components/common/github-import-dialog/github-repo-browser.stories.js +1 -1
  167. package/dist/src/presentation/web/components/common/github-import-dialog/github-url-input.js +2 -2
  168. package/dist/src/presentation/web/components/common/github-import-dialog/github-url-input.stories.d.ts +1 -1
  169. package/dist/src/presentation/web/components/common/github-import-dialog/github-url-input.stories.d.ts.map +1 -1
  170. package/dist/src/presentation/web/components/common/github-import-dialog/github-url-input.stories.js +1 -1
  171. package/dist/src/presentation/web/components/common/inline-attachments/inline-attachments.stories.d.ts +1 -1
  172. package/dist/src/presentation/web/components/common/inline-attachments/inline-attachments.stories.d.ts.map +1 -1
  173. package/dist/src/presentation/web/components/common/loading-skeleton/loading-skeleton.stories.d.ts +1 -1
  174. package/dist/src/presentation/web/components/common/loading-skeleton/loading-skeleton.stories.d.ts.map +1 -1
  175. package/dist/src/presentation/web/components/common/merge-review/diff-view.stories.d.ts +1 -1
  176. package/dist/src/presentation/web/components/common/merge-review/diff-view.stories.d.ts.map +1 -1
  177. package/dist/src/presentation/web/components/common/merge-review/merge-review.js +3 -5
  178. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts +1 -1
  179. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts.map +1 -1
  180. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.js +1 -1
  181. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.js +2 -2
  182. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.d.ts +1 -1
  183. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.d.ts.map +1 -1
  184. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.js +1 -1
  185. package/dist/src/presentation/web/components/common/page-header/page-header.stories.d.ts +1 -1
  186. package/dist/src/presentation/web/components/common/page-header/page-header.stories.d.ts.map +1 -1
  187. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts +1 -1
  188. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts.map +1 -1
  189. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.js +1 -1
  190. package/dist/src/presentation/web/components/common/product-decisions-summary/product-decisions-summary.stories.d.ts +1 -1
  191. package/dist/src/presentation/web/components/common/product-decisions-summary/product-decisions-summary.stories.d.ts.map +1 -1
  192. package/dist/src/presentation/web/components/common/react-file-manager-dialog/react-file-manager-dialog.js +2 -2
  193. package/dist/src/presentation/web/components/common/react-file-manager-dialog/react-file-manager-dialog.stories.d.ts +1 -1
  194. package/dist/src/presentation/web/components/common/react-file-manager-dialog/react-file-manager-dialog.stories.d.ts.map +1 -1
  195. package/dist/src/presentation/web/components/common/react-file-manager-dialog/react-file-manager-dialog.stories.js +1 -1
  196. package/dist/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog.js +2 -2
  197. package/dist/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog.stories.d.ts +1 -1
  198. package/dist/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog.stories.d.ts.map +1 -1
  199. package/dist/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog.stories.js +1 -1
  200. package/dist/src/presentation/web/components/common/repo-group/repo-group.stories.d.ts +1 -1
  201. package/dist/src/presentation/web/components/common/repo-group/repo-group.stories.d.ts.map +1 -1
  202. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts +1 -1
  203. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts.map +1 -1
  204. package/dist/src/presentation/web/components/common/repository-node/repository-node.js +4 -7
  205. package/dist/src/presentation/web/components/common/repository-node/repository-node.stories.d.ts +1 -1
  206. package/dist/src/presentation/web/components/common/repository-node/repository-node.stories.d.ts.map +1 -1
  207. package/dist/src/presentation/web/components/common/server-log-viewer/server-log-viewer.stories.d.ts +1 -1
  208. package/dist/src/presentation/web/components/common/server-log-viewer/server-log-viewer.stories.d.ts.map +1 -1
  209. package/dist/src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.stories.d.ts +1 -1
  210. package/dist/src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.stories.d.ts.map +1 -1
  211. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.d.ts +1 -1
  212. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.d.ts.map +1 -1
  213. package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.d.ts +1 -1
  214. package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.d.ts.map +1 -1
  215. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.d.ts +1 -1
  216. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.d.ts.map +1 -1
  217. package/dist/src/presentation/web/components/common/sound-toggle/sound-toggle.stories.d.ts +1 -1
  218. package/dist/src/presentation/web/components/common/sound-toggle/sound-toggle.stories.d.ts.map +1 -1
  219. package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.js +4 -4
  220. package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.stories.d.ts +1 -1
  221. package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.stories.d.ts.map +1 -1
  222. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts +1 -1
  223. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts.map +1 -1
  224. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.js +1 -1
  225. package/dist/src/presentation/web/components/common/theme-toggle/theme-toggle.stories.d.ts +1 -1
  226. package/dist/src/presentation/web/components/common/theme-toggle/theme-toggle.stories.d.ts.map +1 -1
  227. package/dist/src/presentation/web/components/common/version-badge/version-badge.stories.d.ts +1 -1
  228. package/dist/src/presentation/web/components/common/version-badge/version-badge.stories.d.ts.map +1 -1
  229. package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.js +7 -7
  230. package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.stories.d.ts +1 -1
  231. package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.stories.d.ts.map +1 -1
  232. package/dist/src/presentation/web/components/features/chat/ChatComposer.stories.d.ts +1 -1
  233. package/dist/src/presentation/web/components/features/chat/ChatComposer.stories.d.ts.map +1 -1
  234. package/dist/src/presentation/web/components/features/chat/ChatComposer.stories.js +1 -1
  235. package/dist/src/presentation/web/components/features/chat/ChatDotIndicator.stories.d.ts +1 -1
  236. package/dist/src/presentation/web/components/features/chat/ChatDotIndicator.stories.d.ts.map +1 -1
  237. package/dist/src/presentation/web/components/features/chat/ChatInput.stories.d.ts +1 -1
  238. package/dist/src/presentation/web/components/features/chat/ChatInput.stories.d.ts.map +1 -1
  239. package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.stories.d.ts +1 -1
  240. package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.stories.d.ts.map +1 -1
  241. package/dist/src/presentation/web/components/features/chat/ChatMessageList.stories.d.ts +2 -2
  242. package/dist/src/presentation/web/components/features/chat/ChatMessageList.stories.d.ts.map +1 -1
  243. package/dist/src/presentation/web/components/features/chat/ChatSheet.stories.d.ts +2 -2
  244. package/dist/src/presentation/web/components/features/chat/ChatSheet.stories.d.ts.map +1 -1
  245. package/dist/src/presentation/web/components/features/chat/ChatTab.stories.d.ts +1 -1
  246. package/dist/src/presentation/web/components/features/chat/ChatTab.stories.d.ts.map +1 -1
  247. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +9 -13
  248. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts +1 -1
  249. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts.map +1 -1
  250. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  251. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +3 -2
  252. package/dist/src/presentation/web/components/features/control-center/control-center-inner.stories.d.ts +2 -2
  253. package/dist/src/presentation/web/components/features/control-center/control-center-inner.stories.d.ts.map +1 -1
  254. package/dist/src/presentation/web/components/features/control-center/control-center.stories.d.ts +1 -1
  255. package/dist/src/presentation/web/components/features/control-center/control-center.stories.d.ts.map +1 -1
  256. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.js +3 -3
  257. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.stories.d.ts +1 -1
  258. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.stories.d.ts.map +1 -1
  259. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.stories.js +1 -1
  260. package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.stories.d.ts +2 -2
  261. package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.stories.d.ts.map +1 -1
  262. package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.stories.js +1 -1
  263. package/dist/src/presentation/web/components/features/features-canvas/dependency-edge.stories.d.ts +1 -1
  264. package/dist/src/presentation/web/components/features/features-canvas/dependency-edge.stories.d.ts.map +1 -1
  265. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts +1 -1
  266. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts.map +1 -1
  267. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.js +1 -4
  268. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.d.ts +1 -1
  269. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.d.ts.map +1 -1
  270. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.js +1 -1
  271. package/dist/src/presentation/web/components/features/settings/ModelPicker/ModelPicker.stories.d.ts +1 -1
  272. package/dist/src/presentation/web/components/features/settings/ModelPicker/ModelPicker.stories.d.ts.map +1 -1
  273. package/dist/src/presentation/web/components/features/settings/ModelPicker/ModelPicker.stories.js +1 -1
  274. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts +1 -1
  275. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts.map +1 -1
  276. package/dist/src/presentation/web/components/features/settings/ci-settings-section.stories.d.ts +1 -1
  277. package/dist/src/presentation/web/components/features/settings/ci-settings-section.stories.d.ts.map +1 -1
  278. package/dist/src/presentation/web/components/features/settings/database-settings-section.stories.d.ts +1 -1
  279. package/dist/src/presentation/web/components/features/settings/database-settings-section.stories.d.ts.map +1 -1
  280. package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.d.ts +1 -1
  281. package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.d.ts.map +1 -1
  282. package/dist/src/presentation/web/components/features/settings/fab-layout-settings-section.stories.d.ts +1 -1
  283. package/dist/src/presentation/web/components/features/settings/fab-layout-settings-section.stories.d.ts.map +1 -1
  284. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts +1 -1
  285. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +1 -1
  286. package/dist/src/presentation/web/components/features/settings/interactive-agent-settings-section.stories.d.ts +1 -1
  287. package/dist/src/presentation/web/components/features/settings/interactive-agent-settings-section.stories.d.ts.map +1 -1
  288. package/dist/src/presentation/web/components/features/settings/language-settings-section.stories.d.ts +1 -1
  289. package/dist/src/presentation/web/components/features/settings/language-settings-section.stories.d.ts.map +1 -1
  290. package/dist/src/presentation/web/components/features/settings/notification-settings-section.stories.d.ts +1 -1
  291. package/dist/src/presentation/web/components/features/settings/notification-settings-section.stories.d.ts.map +1 -1
  292. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts +1 -1
  293. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
  294. package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.d.ts +1 -1
  295. package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.d.ts.map +1 -1
  296. package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.js +1 -1
  297. package/dist/src/presentation/web/components/features/settings/stage-timeouts-settings-section.stories.d.ts +1 -1
  298. package/dist/src/presentation/web/components/features/settings/stage-timeouts-settings-section.stories.d.ts.map +1 -1
  299. package/dist/src/presentation/web/components/features/settings/timeout-slider.stories.d.ts +1 -1
  300. package/dist/src/presentation/web/components/features/settings/timeout-slider.stories.d.ts.map +1 -1
  301. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts +1 -1
  302. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts.map +1 -1
  303. package/dist/src/presentation/web/components/features/skills/category-filter.stories.d.ts +1 -1
  304. package/dist/src/presentation/web/components/features/skills/category-filter.stories.d.ts.map +1 -1
  305. package/dist/src/presentation/web/components/features/skills/skill-card.stories.d.ts +1 -1
  306. package/dist/src/presentation/web/components/features/skills/skill-card.stories.d.ts.map +1 -1
  307. package/dist/src/presentation/web/components/features/skills/skill-card.stories.js +3 -3
  308. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.stories.d.ts +1 -1
  309. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.stories.d.ts.map +1 -1
  310. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.stories.js +3 -3
  311. package/dist/src/presentation/web/components/features/skills/skill-list.stories.d.ts +1 -1
  312. package/dist/src/presentation/web/components/features/skills/skill-list.stories.d.ts.map +1 -1
  313. package/dist/src/presentation/web/components/features/skills/skill-list.stories.js +4 -4
  314. package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.d.ts +1 -1
  315. package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.d.ts.map +1 -1
  316. package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.js +8 -8
  317. package/dist/src/presentation/web/components/features/tools/tool-card.js +3 -5
  318. package/dist/src/presentation/web/components/features/tools/tool-card.stories.d.ts +1 -1
  319. package/dist/src/presentation/web/components/features/tools/tool-card.stories.d.ts.map +1 -1
  320. package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.js +3 -7
  321. package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.stories.d.ts +1 -1
  322. package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.stories.d.ts.map +1 -1
  323. package/dist/src/presentation/web/components/features/tools/tools-page-client.stories.d.ts +1 -1
  324. package/dist/src/presentation/web/components/features/tools/tools-page-client.stories.d.ts.map +1 -1
  325. package/dist/src/presentation/web/components/features/version/version-page-client.stories.d.ts +1 -1
  326. package/dist/src/presentation/web/components/features/version/version-page-client.stories.d.ts.map +1 -1
  327. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.stories.d.ts +1 -1
  328. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.stories.d.ts.map +1 -1
  329. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts +1 -1
  330. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
  331. package/dist/src/presentation/web/components/layouts/dashboard-layout/dashboard-layout.stories.d.ts +1 -1
  332. package/dist/src/presentation/web/components/layouts/dashboard-layout/dashboard-layout.stories.d.ts.map +1 -1
  333. package/dist/src/presentation/web/components/layouts/header/header.stories.d.ts +1 -1
  334. package/dist/src/presentation/web/components/layouts/header/header.stories.d.ts.map +1 -1
  335. package/dist/src/presentation/web/components/layouts/sidebar/sidebar.stories.d.ts +1 -1
  336. package/dist/src/presentation/web/components/layouts/sidebar/sidebar.stories.d.ts.map +1 -1
  337. package/dist/src/presentation/web/components/ui/accordion.stories.d.ts +1 -1
  338. package/dist/src/presentation/web/components/ui/accordion.stories.d.ts.map +1 -1
  339. package/dist/src/presentation/web/components/ui/alert-dialog.stories.d.ts +1 -1
  340. package/dist/src/presentation/web/components/ui/alert-dialog.stories.d.ts.map +1 -1
  341. package/dist/src/presentation/web/components/ui/alert.stories.d.ts +1 -1
  342. package/dist/src/presentation/web/components/ui/alert.stories.d.ts.map +1 -1
  343. package/dist/src/presentation/web/components/ui/alert.stories.js +2 -2
  344. package/dist/src/presentation/web/components/ui/badge.stories.d.ts +1 -1
  345. package/dist/src/presentation/web/components/ui/badge.stories.d.ts.map +1 -1
  346. package/dist/src/presentation/web/components/ui/button.stories.d.ts +1 -1
  347. package/dist/src/presentation/web/components/ui/button.stories.d.ts.map +1 -1
  348. package/dist/src/presentation/web/components/ui/card.stories.d.ts +1 -1
  349. package/dist/src/presentation/web/components/ui/card.stories.d.ts.map +1 -1
  350. package/dist/src/presentation/web/components/ui/checkbox-group-item.stories.d.ts +1 -1
  351. package/dist/src/presentation/web/components/ui/checkbox-group-item.stories.d.ts.map +1 -1
  352. package/dist/src/presentation/web/components/ui/checkbox-group.stories.d.ts +1 -1
  353. package/dist/src/presentation/web/components/ui/checkbox-group.stories.d.ts.map +1 -1
  354. package/dist/src/presentation/web/components/ui/checkbox.stories.d.ts +1 -1
  355. package/dist/src/presentation/web/components/ui/checkbox.stories.d.ts.map +1 -1
  356. package/dist/src/presentation/web/components/ui/comet-spinner.stories.d.ts +1 -1
  357. package/dist/src/presentation/web/components/ui/comet-spinner.stories.d.ts.map +1 -1
  358. package/dist/src/presentation/web/components/ui/command.stories.d.ts +2 -2
  359. package/dist/src/presentation/web/components/ui/command.stories.d.ts.map +1 -1
  360. package/dist/src/presentation/web/components/ui/dialog.stories.d.ts +1 -1
  361. package/dist/src/presentation/web/components/ui/dialog.stories.d.ts.map +1 -1
  362. package/dist/src/presentation/web/components/ui/drawer.stories.d.ts +1 -1
  363. package/dist/src/presentation/web/components/ui/drawer.stories.d.ts.map +1 -1
  364. package/dist/src/presentation/web/components/ui/dropdown-menu.stories.d.ts +1 -1
  365. package/dist/src/presentation/web/components/ui/dropdown-menu.stories.d.ts.map +1 -1
  366. package/dist/src/presentation/web/components/ui/github-icon.d.ts +13 -0
  367. package/dist/src/presentation/web/components/ui/github-icon.d.ts.map +1 -0
  368. package/dist/src/presentation/web/components/ui/github-icon.js +15 -0
  369. package/dist/src/presentation/web/components/ui/github-icon.stories.d.ts +10 -0
  370. package/dist/src/presentation/web/components/ui/github-icon.stories.d.ts.map +1 -0
  371. package/dist/src/presentation/web/components/ui/github-icon.stories.js +22 -0
  372. package/dist/src/presentation/web/components/ui/input.stories.d.ts +1 -1
  373. package/dist/src/presentation/web/components/ui/input.stories.d.ts.map +1 -1
  374. package/dist/src/presentation/web/components/ui/label.stories.d.ts +1 -1
  375. package/dist/src/presentation/web/components/ui/label.stories.d.ts.map +1 -1
  376. package/dist/src/presentation/web/components/ui/popover.stories.d.ts +1 -1
  377. package/dist/src/presentation/web/components/ui/popover.stories.d.ts.map +1 -1
  378. package/dist/src/presentation/web/components/ui/scroll-area.stories.d.ts +1 -1
  379. package/dist/src/presentation/web/components/ui/scroll-area.stories.d.ts.map +1 -1
  380. package/dist/src/presentation/web/components/ui/select.stories.d.ts +1 -1
  381. package/dist/src/presentation/web/components/ui/select.stories.d.ts.map +1 -1
  382. package/dist/src/presentation/web/components/ui/separator.stories.d.ts +1 -1
  383. package/dist/src/presentation/web/components/ui/separator.stories.d.ts.map +1 -1
  384. package/dist/src/presentation/web/components/ui/sheet.stories.d.ts +1 -1
  385. package/dist/src/presentation/web/components/ui/sheet.stories.d.ts.map +1 -1
  386. package/dist/src/presentation/web/components/ui/sidebar.stories.d.ts +1 -1
  387. package/dist/src/presentation/web/components/ui/sidebar.stories.d.ts.map +1 -1
  388. package/dist/src/presentation/web/components/ui/skeleton.stories.d.ts +1 -1
  389. package/dist/src/presentation/web/components/ui/skeleton.stories.d.ts.map +1 -1
  390. package/dist/src/presentation/web/components/ui/slider.stories.d.ts +1 -1
  391. package/dist/src/presentation/web/components/ui/slider.stories.d.ts.map +1 -1
  392. package/dist/src/presentation/web/components/ui/sonner.stories.d.ts +1 -1
  393. package/dist/src/presentation/web/components/ui/sonner.stories.d.ts.map +1 -1
  394. package/dist/src/presentation/web/components/ui/spinner.stories.d.ts +1 -1
  395. package/dist/src/presentation/web/components/ui/spinner.stories.d.ts.map +1 -1
  396. package/dist/src/presentation/web/components/ui/switch.stories.d.ts +1 -1
  397. package/dist/src/presentation/web/components/ui/switch.stories.d.ts.map +1 -1
  398. package/dist/src/presentation/web/components/ui/tabs.stories.d.ts +1 -1
  399. package/dist/src/presentation/web/components/ui/tabs.stories.d.ts.map +1 -1
  400. package/dist/src/presentation/web/components/ui/textarea.stories.d.ts +1 -1
  401. package/dist/src/presentation/web/components/ui/textarea.stories.d.ts.map +1 -1
  402. package/dist/src/presentation/web/components/ui/tooltip.stories.d.ts +2 -2
  403. package/dist/src/presentation/web/components/ui/tooltip.stories.d.ts.map +1 -1
  404. package/dist/src/presentation/web/hooks/use-notifications.stories.d.ts +1 -1
  405. package/dist/src/presentation/web/hooks/use-notifications.stories.d.ts.map +1 -1
  406. package/dist/src/presentation/web/hooks/use-sound-action.stories.d.ts +1 -1
  407. package/dist/src/presentation/web/hooks/use-sound-action.stories.d.ts.map +1 -1
  408. package/dist/src/presentation/web/hooks/use-sound.stories.d.ts +1 -1
  409. package/dist/src/presentation/web/hooks/use-sound.stories.d.ts.map +1 -1
  410. package/dist/src/presentation/web/lib/session-scanner.js +2 -2
  411. package/dist/src/presentation/web/lib/skills.js +2 -2
  412. package/dist/tsconfig.build.tsbuildinfo +1 -1
  413. package/package.json +21 -24
  414. package/web/.next/BUILD_ID +1 -1
  415. package/web/.next/build-manifest.json +5 -5
  416. package/web/.next/fallback-build-manifest.json +3 -3
  417. package/web/.next/prerender-manifest.json +3 -3
  418. package/web/.next/required-server-files.js +2 -2
  419. package/web/.next/required-server-files.json +2 -2
  420. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/build-manifest.json +2 -2
  421. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/react-loadable-manifest.json +3 -3
  422. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  423. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  424. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  425. package/web/.next/server/app/(dashboard)/@drawer/chat/page/build-manifest.json +2 -2
  426. package/web/.next/server/app/(dashboard)/@drawer/chat/page/react-loadable-manifest.json +3 -3
  427. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  428. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  429. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  430. package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +2 -2
  431. package/web/.next/server/app/(dashboard)/@drawer/create/page/react-loadable-manifest.json +3 -3
  432. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
  433. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  434. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  435. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/build-manifest.json +2 -2
  436. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/react-loadable-manifest.json +3 -3
  437. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  438. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -1
  439. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  440. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  441. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +2 -2
  442. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/react-loadable-manifest.json +3 -3
  443. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +37 -37
  444. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  445. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  446. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  447. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/build-manifest.json +2 -2
  448. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/react-loadable-manifest.json +3 -3
  449. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  450. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  451. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  452. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +2 -2
  453. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/react-loadable-manifest.json +3 -3
  454. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  455. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  456. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  457. package/web/.next/server/app/(dashboard)/chat/page/build-manifest.json +2 -2
  458. package/web/.next/server/app/(dashboard)/chat/page/react-loadable-manifest.json +3 -3
  459. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  460. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  461. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  462. package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +2 -2
  463. package/web/.next/server/app/(dashboard)/create/page/react-loadable-manifest.json +3 -3
  464. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
  465. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  466. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  467. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/build-manifest.json +2 -2
  468. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/react-loadable-manifest.json +3 -3
  469. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  470. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -1
  471. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  472. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  473. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +2 -2
  474. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/react-loadable-manifest.json +3 -3
  475. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +37 -37
  476. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  477. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  478. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  479. package/web/.next/server/app/(dashboard)/page/build-manifest.json +2 -2
  480. package/web/.next/server/app/(dashboard)/page/react-loadable-manifest.json +3 -3
  481. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  482. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  483. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  484. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/build-manifest.json +2 -2
  485. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/react-loadable-manifest.json +3 -3
  486. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  487. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  488. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  489. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +2 -2
  490. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/react-loadable-manifest.json +3 -3
  491. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  492. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  493. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  494. package/web/.next/server/app/_global-error/page/build-manifest.json +2 -2
  495. package/web/.next/server/app/_global-error.html +1 -1
  496. package/web/.next/server/app/_global-error.rsc +1 -1
  497. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  498. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  499. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  500. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  501. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  502. package/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
  503. package/web/.next/server/app/_not-found/page/react-loadable-manifest.json +3 -3
  504. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  505. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  506. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  507. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  508. package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
  509. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  510. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  511. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  512. package/web/.next/server/app/api/sessions/route.js +2 -2
  513. package/web/.next/server/app/settings/page/build-manifest.json +2 -2
  514. package/web/.next/server/app/settings/page/react-loadable-manifest.json +3 -3
  515. package/web/.next/server/app/settings/page/server-reference-manifest.json +11 -11
  516. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  517. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  518. package/web/.next/server/app/skills/page/build-manifest.json +2 -2
  519. package/web/.next/server/app/skills/page/react-loadable-manifest.json +3 -3
  520. package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
  521. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  522. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  523. package/web/.next/server/app/tools/page/build-manifest.json +2 -2
  524. package/web/.next/server/app/tools/page/react-loadable-manifest.json +3 -3
  525. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  526. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  527. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  528. package/web/.next/server/app/version/page/build-manifest.json +2 -2
  529. package/web/.next/server/app/version/page/react-loadable-manifest.json +3 -3
  530. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  531. package/web/.next/server/app/version/page.js.nft.json +1 -1
  532. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  533. package/web/.next/server/chunks/0n.o_server_app_api_interactive_chat_[featureId]_stop_route_actions_09da~zt.js +1 -1
  534. package/web/.next/server/chunks/11es_next_dist_esm_build_templates_app-route_067cwst.js +1 -1
  535. package/web/.next/server/chunks/11es_next_dist_esm_build_templates_app-route_067cwst.js.map +1 -1
  536. package/web/.next/server/chunks/[root-of-the-server]__07suer1._.js.map +1 -1
  537. package/web/.next/server/chunks/[root-of-the-server]__0_.w-eb._.js +1 -1
  538. package/web/.next/server/chunks/[root-of-the-server]__0_.w-eb._.js.map +1 -1
  539. package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
  540. package/web/.next/server/chunks/[root-of-the-server]__13ni_ow._.js +1 -1
  541. package/web/.next/server/chunks/ssr/{0lyk_lucide-react_dist_esm_icons_0shxsmr._.js → 08qz_lucide-react_dist_esm_icons_0_gqlce._.js} +2 -2
  542. package/web/.next/server/chunks/ssr/08qz_lucide-react_dist_esm_icons_0_gqlce._.js.map +1 -0
  543. package/web/.next/server/chunks/ssr/08qz_lucide-react_dist_esm_icons_0zwb4s4._.js +3 -0
  544. package/web/.next/server/chunks/ssr/08qz_lucide-react_dist_esm_icons_0zwb4s4._.js.map +1 -0
  545. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js +1 -1
  546. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js.map +1 -1
  547. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js +1 -1
  548. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js.map +1 -1
  549. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.js +1 -1
  550. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.js.map +1 -1
  551. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js +1 -1
  552. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js.map +1 -1
  553. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js +3 -3
  554. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js.map +1 -1
  555. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js +1 -1
  556. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js.map +1 -1
  557. package/web/.next/server/chunks/ssr/11es_next_dist_0e36~wi._.js +2 -2
  558. package/web/.next/server/chunks/ssr/11es_next_dist_client_components_058~c_t._.js +1 -1
  559. package/web/.next/server/chunks/ssr/11es_next_dist_esm_build_templates_app-page_0l-25e2.js +1 -1
  560. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_global-chat-drawer-client_tsx_03s32.q._.js +1 -1
  561. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
  562. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
  563. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0uxn6-j._.js → [root-of-the-server]__045sv4b._.js} +2 -2
  564. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0uxn6-j._.js.map → [root-of-the-server]__045sv4b._.js.map} +1 -1
  565. package/web/.next/server/chunks/ssr/[root-of-the-server]__0brje6_._.js +1 -1
  566. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0np51e2._.js → [root-of-the-server]__0d_0_fp._.js} +2 -2
  567. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0np51e2._.js.map → [root-of-the-server]__0d_0_fp._.js.map} +1 -1
  568. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0~h382a._.js → [root-of-the-server]__0l4d7e.._.js} +2 -2
  569. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0~h382a._.js.map → [root-of-the-server]__0l4d7e.._.js.map} +1 -1
  570. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0_ag.8y._.js → [root-of-the-server]__0lslgap._.js} +3 -3
  571. package/web/.next/server/chunks/ssr/[root-of-the-server]__0lslgap._.js.map +1 -0
  572. package/web/.next/server/chunks/ssr/[root-of-the-server]__0o3qggc._.js +3 -0
  573. package/web/.next/server/chunks/ssr/[root-of-the-server]__0o3qggc._.js.map +1 -0
  574. package/web/.next/server/chunks/ssr/{[root-of-the-server]__01~y8wi._.js → [root-of-the-server]__0r32z03._.js} +2 -2
  575. package/web/.next/server/chunks/ssr/{[root-of-the-server]__01~y8wi._.js.map → [root-of-the-server]__0r32z03._.js.map} +1 -1
  576. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js +1 -1
  577. package/web/.next/server/chunks/ssr/[root-of-the-server]__122xqm6._.js +1 -1
  578. package/web/.next/server/chunks/ssr/[root-of-the-server]__12g8h3_._.js +1 -1
  579. package/web/.next/server/chunks/ssr/[root-of-the-server]__12g8h3_._.js.map +1 -1
  580. package/web/.next/server/chunks/ssr/{_0d-pkk0._.js → _0-09vq7._.js} +2 -2
  581. package/web/.next/server/chunks/ssr/_0-09vq7._.js.map +1 -0
  582. package/web/.next/server/chunks/ssr/_0.rsra~._.js.map +1 -1
  583. package/web/.next/server/chunks/ssr/_00k65h-._.js +3 -0
  584. package/web/.next/server/chunks/ssr/_00k65h-._.js.map +1 -0
  585. package/web/.next/server/chunks/ssr/_01mq~sm._.js +2 -2
  586. package/web/.next/server/chunks/ssr/_01mq~sm._.js.map +1 -1
  587. package/web/.next/server/chunks/ssr/_01sesw0._.js +3 -0
  588. package/web/.next/server/chunks/ssr/_01sesw0._.js.map +1 -0
  589. package/web/.next/server/chunks/ssr/_04s_q5r._.js +1 -1
  590. package/web/.next/server/chunks/ssr/_04s_q5r._.js.map +1 -1
  591. package/web/.next/server/chunks/ssr/{_0xtds88._.js → _08i-c2n._.js} +2 -2
  592. package/web/.next/server/chunks/ssr/_08i-c2n._.js.map +1 -0
  593. package/web/.next/server/chunks/ssr/{_0jk5q_z._.js → _09di2m~._.js} +2 -2
  594. package/web/.next/server/chunks/ssr/_09di2m~._.js.map +1 -0
  595. package/web/.next/server/chunks/ssr/_0gdghcr._.js +3 -0
  596. package/web/.next/server/chunks/ssr/_0gdghcr._.js.map +1 -0
  597. package/web/.next/server/chunks/ssr/_0hwjfpu._.js +3 -0
  598. package/web/.next/server/chunks/ssr/_0hwjfpu._.js.map +1 -0
  599. package/web/.next/server/chunks/ssr/_0hw~zvl._.js +3 -0
  600. package/web/.next/server/chunks/ssr/_0hw~zvl._.js.map +1 -0
  601. package/web/.next/server/chunks/ssr/_0jpbsh_._.js +1 -1
  602. package/web/.next/server/chunks/ssr/_0jpbsh_._.js.map +1 -1
  603. package/web/.next/server/chunks/ssr/_0phryzt._.js +3 -0
  604. package/web/.next/server/chunks/ssr/_0phryzt._.js.map +1 -0
  605. package/web/.next/server/chunks/ssr/_0r~xv6k._.js +3 -0
  606. package/web/.next/server/chunks/ssr/_0r~xv6k._.js.map +1 -0
  607. package/web/.next/server/chunks/ssr/_0vyfc4b._.js +3 -0
  608. package/web/.next/server/chunks/ssr/_0vyfc4b._.js.map +1 -0
  609. package/web/.next/server/chunks/ssr/_0w-_hww._.js +1 -1
  610. package/web/.next/server/chunks/ssr/_0w-_hww._.js.map +1 -1
  611. package/web/.next/server/chunks/ssr/{_0j9vx-1._.js → _0y8u4.e._.js} +3 -3
  612. package/web/.next/server/chunks/ssr/_0y8u4.e._.js.map +1 -0
  613. package/web/.next/server/chunks/ssr/_0~7lwu_._.js +3 -0
  614. package/web/.next/server/chunks/ssr/_0~7lwu_._.js.map +1 -0
  615. package/web/.next/server/chunks/ssr/{_0rvaoj4._.js → _109n-y4._.js} +2 -2
  616. package/web/.next/server/chunks/ssr/_109n-y4._.js.map +1 -0
  617. package/web/.next/server/chunks/ssr/{_13bl-l1._.js → _12104w0._.js} +2 -2
  618. package/web/.next/server/chunks/ssr/_12104w0._.js.map +1 -0
  619. package/web/.next/server/chunks/ssr/{_09g41d0._.js → _12un22l._.js} +3 -3
  620. package/web/.next/server/chunks/ssr/_12un22l._.js.map +1 -0
  621. package/web/.next/server/chunks/ssr/node_modules__pnpm_0l8_ov3._.js +3 -0
  622. package/web/.next/server/chunks/ssr/node_modules__pnpm_0l8_ov3._.js.map +1 -0
  623. package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js +1 -1
  624. package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js.map +1 -1
  625. package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js +1 -1
  626. package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js.map +1 -1
  627. package/web/.next/server/chunks/ssr/src_presentation_web_05-w-~v._.js +1 -1
  628. package/web/.next/server/chunks/ssr/src_presentation_web_05-w-~v._.js.map +1 -1
  629. package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js +2 -2
  630. package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js.map +1 -1
  631. package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js +1 -1
  632. package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js.map +1 -1
  633. package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js +1 -1
  634. package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js.map +1 -1
  635. package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js +2 -2
  636. package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js.map +1 -1
  637. package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js +1 -1
  638. package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js.map +1 -1
  639. package/web/.next/server/chunks/ssr/src_presentation_web_0y11iiz._.js +1 -1
  640. package/web/.next/server/chunks/ssr/src_presentation_web_0y11iiz._.js.map +1 -1
  641. package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js +1 -1
  642. package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js.map +1 -1
  643. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js +1 -1
  644. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js.map +1 -1
  645. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js +1 -1
  646. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js.map +1 -1
  647. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js +1 -1
  648. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js.map +1 -1
  649. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_load-settings_ts_0b8f3pf._.js +1 -1
  650. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js +1 -1
  651. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js.map +1 -1
  652. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js +1 -1
  653. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js.map +1 -1
  654. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_0aji.op._.js +1 -1
  655. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_0aji.op._.js.map +1 -1
  656. package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_select_tsx_0b.-59k._.js +1 -1
  657. package/web/.next/server/middleware-build-manifest.js +5 -5
  658. package/web/.next/server/pages/500.html +1 -1
  659. package/web/.next/server/server-reference-manifest.js +1 -1
  660. package/web/.next/server/server-reference-manifest.json +49 -49
  661. package/web/.next/static/chunks/0-lu0b1ewsb0_.js +1 -0
  662. package/web/.next/static/chunks/00uywouqbytc0.js +5 -0
  663. package/web/.next/static/chunks/{0t_48qc0x7bhs.js → 01hf_nf2ge.tn.js} +3 -3
  664. package/web/.next/static/chunks/01~dudieyb7wl.js +5 -0
  665. package/web/.next/static/chunks/{0riti1bs-erm~.js → 02kpdawdtqcxm.js} +1 -1
  666. package/web/.next/static/chunks/{0~er~22zwvx0i.js → 09_oo_kc.j.df.js} +1 -1
  667. package/web/.next/static/chunks/0b01fd0lkhnzf.js +1 -0
  668. package/web/.next/static/chunks/0b_anwzlzr9p7.js +1 -0
  669. package/web/.next/static/chunks/0fg~vc93spa9c.js +1 -0
  670. package/web/.next/static/chunks/0fmbl3o08a~-h.js +1 -0
  671. package/web/.next/static/chunks/0j_0i2qsrwh-c.js +1 -0
  672. package/web/.next/static/chunks/{07yqyvabetyrh.js → 0l.kymg3jmf7n.js} +2 -2
  673. package/web/.next/static/chunks/0m5~9kij3s~81.js +1 -0
  674. package/web/.next/static/chunks/0ntps8p7wo1re.js +1 -0
  675. package/web/.next/static/chunks/{0wmckrtphfa12.js → 0odlgm-ixqorl.js} +1 -1
  676. package/web/.next/static/chunks/0q~uf2s33.48w.js +1 -0
  677. package/web/.next/static/chunks/0rfap2l5xz_-p.js +1 -0
  678. package/web/.next/static/chunks/0rhoh5o1y7grf.js +7 -0
  679. package/web/.next/static/chunks/0sywjtf8m0_fb.js +1 -0
  680. package/web/.next/static/chunks/{071_2_.sfp-im.js → 0tutcr7trd_7d.js} +1 -1
  681. package/web/.next/static/chunks/11bi612fz8agh.js +1 -0
  682. package/web/.next/static/chunks/121l3o3vd~hvn.js +1 -0
  683. package/web/.next/static/chunks/13ryk8qc9y3qu.js +1 -0
  684. package/web/.next/static/chunks/164dnpi666fv_.js +5 -0
  685. package/web/.next/static/chunks/16jcg65-2mxc..js +1 -0
  686. package/web/.next/static/chunks/{turbopack-0ve8f54_veg.u.js → turbopack-0wsav6to5abtk.js} +1 -1
  687. package/web/package.json +5 -5
  688. package/web/.next/server/chunks/ssr/0lyk_lucide-react_dist_esm_icons_06zrfq4._.js +0 -3
  689. package/web/.next/server/chunks/ssr/0lyk_lucide-react_dist_esm_icons_06zrfq4._.js.map +0 -1
  690. package/web/.next/server/chunks/ssr/0lyk_lucide-react_dist_esm_icons_0shxsmr._.js.map +0 -1
  691. package/web/.next/server/chunks/ssr/[root-of-the-server]__0_ag.8y._.js.map +0 -1
  692. package/web/.next/server/chunks/ssr/[root-of-the-server]__12qqi.~._.js +0 -3
  693. package/web/.next/server/chunks/ssr/[root-of-the-server]__12qqi.~._.js.map +0 -1
  694. package/web/.next/server/chunks/ssr/_0.gy.n8._.js +0 -3
  695. package/web/.next/server/chunks/ssr/_0.gy.n8._.js.map +0 -1
  696. package/web/.next/server/chunks/ssr/_0.k7wl.._.js +0 -3
  697. package/web/.next/server/chunks/ssr/_0.k7wl.._.js.map +0 -1
  698. package/web/.next/server/chunks/ssr/_09g41d0._.js.map +0 -1
  699. package/web/.next/server/chunks/ssr/_0aa~oer._.js +0 -3
  700. package/web/.next/server/chunks/ssr/_0aa~oer._.js.map +0 -1
  701. package/web/.next/server/chunks/ssr/_0d-pkk0._.js.map +0 -1
  702. package/web/.next/server/chunks/ssr/_0ez.1o4._.js +0 -3
  703. package/web/.next/server/chunks/ssr/_0ez.1o4._.js.map +0 -1
  704. package/web/.next/server/chunks/ssr/_0j9vx-1._.js.map +0 -1
  705. package/web/.next/server/chunks/ssr/_0jk5q_z._.js.map +0 -1
  706. package/web/.next/server/chunks/ssr/_0n.xy38._.js +0 -3
  707. package/web/.next/server/chunks/ssr/_0n.xy38._.js.map +0 -1
  708. package/web/.next/server/chunks/ssr/_0rvaoj4._.js.map +0 -1
  709. package/web/.next/server/chunks/ssr/_0v.yfmg._.js +0 -3
  710. package/web/.next/server/chunks/ssr/_0v.yfmg._.js.map +0 -1
  711. package/web/.next/server/chunks/ssr/_0vl.03w._.js +0 -3
  712. package/web/.next/server/chunks/ssr/_0vl.03w._.js.map +0 -1
  713. package/web/.next/server/chunks/ssr/_0xtds88._.js.map +0 -1
  714. package/web/.next/server/chunks/ssr/_11kuznh._.js +0 -3
  715. package/web/.next/server/chunks/ssr/_11kuznh._.js.map +0 -1
  716. package/web/.next/server/chunks/ssr/_13bl-l1._.js.map +0 -1
  717. package/web/.next/server/chunks/ssr/_13euo-f._.js +0 -3
  718. package/web/.next/server/chunks/ssr/_13euo-f._.js.map +0 -1
  719. package/web/.next/server/chunks/ssr/node_modules__pnpm_0xyo1be._.js +0 -3
  720. package/web/.next/server/chunks/ssr/node_modules__pnpm_0xyo1be._.js.map +0 -1
  721. package/web/.next/static/chunks/00racug7sobut.js +0 -1
  722. package/web/.next/static/chunks/06sdx5zm71_u5.js +0 -1
  723. package/web/.next/static/chunks/08iq.j3rbmhbm.js +0 -1
  724. package/web/.next/static/chunks/08iuksm8rvb09.js +0 -1
  725. package/web/.next/static/chunks/08se-_opmk~.7.js +0 -1
  726. package/web/.next/static/chunks/09b2usag59_bi.js +0 -5
  727. package/web/.next/static/chunks/0icjwdqytqa_8.js +0 -5
  728. package/web/.next/static/chunks/0qjoc4x5q-aeg.js +0 -1
  729. package/web/.next/static/chunks/0rhzqh.-6e6k7.js +0 -1
  730. package/web/.next/static/chunks/0s-e-ekdbgoqa.js +0 -1
  731. package/web/.next/static/chunks/0u5.s.lv2bae5.js +0 -1
  732. package/web/.next/static/chunks/0vgbvqu82ac1x.js +0 -1
  733. package/web/.next/static/chunks/0w~84g7r9307~.js +0 -1
  734. package/web/.next/static/chunks/0y1nwnouroh6k.js +0 -1
  735. package/web/.next/static/chunks/0zz.xgsd83.3n.js +0 -1
  736. package/web/.next/static/chunks/0~wymq55b2bn3.js +0 -1
  737. package/web/.next/static/chunks/10wo3waalauct.js +0 -5
  738. package/web/.next/static/chunks/15lcx-697j_3z.js +0 -7
  739. package/web/.next/static/chunks/176x256xw_viv.js +0 -1
  740. /package/web/.next/static/{xP_-L4TLYvd3i_sEmljLs → 21GZVGanhwKlq9p5dtTCB}/_buildManifest.js +0 -0
  741. /package/web/.next/static/{xP_-L4TLYvd3i_sEmljLs → 21GZVGanhwKlq9p5dtTCB}/_clientMiddlewareManifest.js +0 -0
  742. /package/web/.next/static/{xP_-L4TLYvd3i_sEmljLs → 21GZVGanhwKlq9p5dtTCB}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[66560,a=>{"use strict";var b=a.i(53083),c=a.i(11321),d=a.i(40674);a.i(67999);var e=a.i(89246),f=a.i(24780),g=a.i(55003),h=a.i(25700);let i=(0,h.default)("house",[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"r6nss1"}]]),j=(0,h.default)("moon",[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]]),k=(0,h.default)("sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]),l=(0,h.default)("volume-2",[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["path",{d:"M16 9a5 5 0 0 1 0 6",key:"1q6k2b"}],["path",{d:"M19.364 18.364a9 9 0 0 0 0-12.728",key:"ijwkga"}]]),m=(0,h.default)("volume-off",[["path",{d:"M16 9a5 5 0 0 1 .95 2.293",key:"1fgyg8"}],["path",{d:"M19.364 5.636a9 9 0 0 1 1.889 9.96",key:"l3zxae"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"m7 7-.587.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298V11",key:"1gbwow"}],["path",{d:"M9.828 4.172A.686.686 0 0 1 11 4.657v.686",key:"s2je0y"}]]);var n=a.i(3942);let o=(0,h.default)("zap-off",[["path",{d:"M10.513 4.856 13.12 2.17a.5.5 0 0 1 .86.46l-1.377 4.317",key:"193nxd"}],["path",{d:"M15.656 10H20a1 1 0 0 1 .78 1.63l-1.72 1.773",key:"27a7lr"}],["path",{d:"M16.273 16.273 10.88 21.83a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14H4a1 1 0 0 1-.78-1.63l4.507-4.643",key:"1e0qe9"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);var p=a.i(17300),q=a.i(67424),r=a.i(32703),s=a.i(30419),t=a.i(73490),u=a.i(95819),v=a.i(80303),w=a.i(8725),x=a.i(60380),y=a.i(18867),z=a.i(48972),A=a.i(59653),B="ScrollArea",[C,D]=(0,u.createContextScope)(B),[E,F]=C(B),G=c.forwardRef((a,d)=>{let{__scopeScrollArea:e,type:f="hover",dir:g,scrollHideDelay:h=600,...i}=a,[j,k]=c.useState(null),[l,m]=c.useState(null),[n,o]=c.useState(null),[p,q]=c.useState(null),[r,t]=c.useState(null),[u,w]=c.useState(0),[y,z]=c.useState(0),[A,B]=c.useState(!1),[C,D]=c.useState(!1),F=(0,v.useComposedRefs)(d,a=>k(a)),G=(0,x.useDirection)(g);return(0,b.jsx)(E,{scope:e,type:f,dir:G,scrollHideDelay:h,scrollArea:j,viewport:l,onViewportChange:m,content:n,onContentChange:o,scrollbarX:p,onScrollbarXChange:q,scrollbarXEnabled:A,onScrollbarXEnabledChange:B,scrollbarY:r,onScrollbarYChange:t,scrollbarYEnabled:C,onScrollbarYEnabledChange:D,onCornerWidthChange:w,onCornerHeightChange:z,children:(0,b.jsx)(s.Primitive.div,{dir:G,...i,ref:F,style:{position:"relative","--radix-scroll-area-corner-width":u+"px","--radix-scroll-area-corner-height":y+"px",...a.style}})})});G.displayName=B;var H="ScrollAreaViewport",I=c.forwardRef((a,d)=>{let{__scopeScrollArea:e,children:f,nonce:g,...h}=a,i=F(H,e),j=c.useRef(null),k=(0,v.useComposedRefs)(d,j,i.onViewportChange);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"},nonce:g}),(0,b.jsx)(s.Primitive.div,{"data-radix-scroll-area-viewport":"",...h,ref:k,style:{overflowX:i.scrollbarXEnabled?"scroll":"hidden",overflowY:i.scrollbarYEnabled?"scroll":"hidden",...a.style},children:(0,b.jsx)("div",{ref:i.onContentChange,style:{minWidth:"100%",display:"table"},children:f})})]})});I.displayName=H;var J="ScrollAreaScrollbar",K=c.forwardRef((a,d)=>{let{forceMount:e,...f}=a,g=F(J,a.__scopeScrollArea),{onScrollbarXEnabledChange:h,onScrollbarYEnabledChange:i}=g,j="horizontal"===a.orientation;return c.useEffect(()=>(j?h(!0):i(!0),()=>{j?h(!1):i(!1)}),[j,h,i]),"hover"===g.type?(0,b.jsx)(L,{...f,ref:d,forceMount:e}):"scroll"===g.type?(0,b.jsx)(M,{...f,ref:d,forceMount:e}):"auto"===g.type?(0,b.jsx)(N,{...f,ref:d,forceMount:e}):"always"===g.type?(0,b.jsx)(O,{...f,ref:d}):null});K.displayName=J;var L=c.forwardRef((a,d)=>{let{forceMount:e,...f}=a,g=F(J,a.__scopeScrollArea),[h,i]=c.useState(!1);return c.useEffect(()=>{let a=g.scrollArea,b=0;if(a){let c=()=>{window.clearTimeout(b),i(!0)},d=()=>{b=window.setTimeout(()=>i(!1),g.scrollHideDelay)};return a.addEventListener("pointerenter",c),a.addEventListener("pointerleave",d),()=>{window.clearTimeout(b),a.removeEventListener("pointerenter",c),a.removeEventListener("pointerleave",d)}}},[g.scrollArea,g.scrollHideDelay]),(0,b.jsx)(t.Presence,{present:e||h,children:(0,b.jsx)(N,{"data-state":h?"visible":"hidden",...f,ref:d})})}),M=c.forwardRef((a,d)=>{var e;let{forceMount:f,...g}=a,h=F(J,a.__scopeScrollArea),i="horizontal"===a.orientation,j=ae(()=>l("SCROLL_END"),100),[k,l]=(e={hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}},c.useReducer((a,b)=>e[a][b]??a,"hidden"));return c.useEffect(()=>{if("idle"===k){let a=window.setTimeout(()=>l("HIDE"),h.scrollHideDelay);return()=>window.clearTimeout(a)}},[k,h.scrollHideDelay,l]),c.useEffect(()=>{let a=h.viewport,b=i?"scrollLeft":"scrollTop";if(a){let c=a[b],d=()=>{let d=a[b];c!==d&&(l("SCROLL"),j()),c=d};return a.addEventListener("scroll",d),()=>a.removeEventListener("scroll",d)}},[h.viewport,i,l,j]),(0,b.jsx)(t.Presence,{present:f||"hidden"!==k,children:(0,b.jsx)(O,{"data-state":"hidden"===k?"hidden":"visible",...g,ref:d,onPointerEnter:(0,A.composeEventHandlers)(a.onPointerEnter,()=>l("POINTER_ENTER")),onPointerLeave:(0,A.composeEventHandlers)(a.onPointerLeave,()=>l("POINTER_LEAVE"))})})}),N=c.forwardRef((a,d)=>{let e=F(J,a.__scopeScrollArea),{forceMount:f,...g}=a,[h,i]=c.useState(!1),j="horizontal"===a.orientation,k=ae(()=>{if(e.viewport){let a=e.viewport.offsetWidth<e.viewport.scrollWidth,b=e.viewport.offsetHeight<e.viewport.scrollHeight;i(j?a:b)}},10);return af(e.viewport,k),af(e.content,k),(0,b.jsx)(t.Presence,{present:f||h,children:(0,b.jsx)(O,{"data-state":h?"visible":"hidden",...g,ref:d})})}),O=c.forwardRef((a,d)=>{let{orientation:e="vertical",...f}=a,g=F(J,a.__scopeScrollArea),h=c.useRef(null),i=c.useRef(0),[j,k]=c.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),l=_(j.viewport,j.content),m={...f,sizes:j,onSizesChange:k,hasThumb:!!(l>0&&l<1),onThumbChange:a=>h.current=a,onThumbPointerUp:()=>i.current=0,onThumbPointerDown:a=>i.current=a};function n(a,b){return function(a,b,c,d="ltr"){let e=aa(c),f=b||e/2,g=c.scrollbar.paddingStart+f,h=c.scrollbar.size-c.scrollbar.paddingEnd-(e-f),i=c.content-c.viewport;return ac([g,h],"ltr"===d?[0,i]:[-1*i,0])(a)}(a,i.current,j,b)}return"horizontal"===e?(0,b.jsx)(P,{...m,ref:d,onThumbPositionChange:()=>{if(g.viewport&&h.current){let a=ab(g.viewport.scrollLeft,j,g.dir);h.current.style.transform=`translate3d(${a}px, 0, 0)`}},onWheelScroll:a=>{g.viewport&&(g.viewport.scrollLeft=a)},onDragScroll:a=>{g.viewport&&(g.viewport.scrollLeft=n(a,g.dir))}}):"vertical"===e?(0,b.jsx)(Q,{...m,ref:d,onThumbPositionChange:()=>{if(g.viewport&&h.current){let a=ab(g.viewport.scrollTop,j);h.current.style.transform=`translate3d(0, ${a}px, 0)`}},onWheelScroll:a=>{g.viewport&&(g.viewport.scrollTop=a)},onDragScroll:a=>{g.viewport&&(g.viewport.scrollTop=n(a))}}):null}),P=c.forwardRef((a,d)=>{let{sizes:e,onSizesChange:f,...g}=a,h=F(J,a.__scopeScrollArea),[i,j]=c.useState(),k=c.useRef(null),l=(0,v.useComposedRefs)(d,k,h.onScrollbarXChange);return c.useEffect(()=>{k.current&&j(getComputedStyle(k.current))},[k]),(0,b.jsx)(T,{"data-orientation":"horizontal",...g,ref:l,sizes:e,style:{bottom:0,left:"rtl"===h.dir?"var(--radix-scroll-area-corner-width)":0,right:"ltr"===h.dir?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":aa(e)+"px",...a.style},onThumbPointerDown:b=>a.onThumbPointerDown(b.x),onDragScroll:b=>a.onDragScroll(b.x),onWheelScroll:(b,c)=>{if(h.viewport){var d,e;let f=h.viewport.scrollLeft+b.deltaX;a.onWheelScroll(f),d=f,e=c,d>0&&d<e&&b.preventDefault()}},onResize:()=>{k.current&&h.viewport&&i&&f({content:h.viewport.scrollWidth,viewport:h.viewport.offsetWidth,scrollbar:{size:k.current.clientWidth,paddingStart:$(i.paddingLeft),paddingEnd:$(i.paddingRight)}})}})}),Q=c.forwardRef((a,d)=>{let{sizes:e,onSizesChange:f,...g}=a,h=F(J,a.__scopeScrollArea),[i,j]=c.useState(),k=c.useRef(null),l=(0,v.useComposedRefs)(d,k,h.onScrollbarYChange);return c.useEffect(()=>{k.current&&j(getComputedStyle(k.current))},[k]),(0,b.jsx)(T,{"data-orientation":"vertical",...g,ref:l,sizes:e,style:{top:0,right:"ltr"===h.dir?0:void 0,left:"rtl"===h.dir?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":aa(e)+"px",...a.style},onThumbPointerDown:b=>a.onThumbPointerDown(b.y),onDragScroll:b=>a.onDragScroll(b.y),onWheelScroll:(b,c)=>{if(h.viewport){var d,e;let f=h.viewport.scrollTop+b.deltaY;a.onWheelScroll(f),d=f,e=c,d>0&&d<e&&b.preventDefault()}},onResize:()=>{k.current&&h.viewport&&i&&f({content:h.viewport.scrollHeight,viewport:h.viewport.offsetHeight,scrollbar:{size:k.current.clientHeight,paddingStart:$(i.paddingTop),paddingEnd:$(i.paddingBottom)}})}})}),[R,S]=C(J),T=c.forwardRef((a,d)=>{let{__scopeScrollArea:e,sizes:f,hasThumb:g,onThumbChange:h,onThumbPointerUp:i,onThumbPointerDown:j,onThumbPositionChange:k,onDragScroll:l,onWheelScroll:m,onResize:n,...o}=a,p=F(J,e),[q,r]=c.useState(null),t=(0,v.useComposedRefs)(d,a=>r(a)),u=c.useRef(null),x=c.useRef(""),y=p.viewport,z=f.content-f.viewport,B=(0,w.useCallbackRef)(m),C=(0,w.useCallbackRef)(k),D=ae(n,10);function E(a){u.current&&l({x:a.clientX-u.current.left,y:a.clientY-u.current.top})}return c.useEffect(()=>{let a=a=>{let b=a.target;q?.contains(b)&&B(a,z)};return document.addEventListener("wheel",a,{passive:!1}),()=>document.removeEventListener("wheel",a,{passive:!1})},[y,q,z,B]),c.useEffect(C,[f,C]),af(q,D),af(p.content,D),(0,b.jsx)(R,{scope:e,scrollbar:q,hasThumb:g,onThumbChange:(0,w.useCallbackRef)(h),onThumbPointerUp:(0,w.useCallbackRef)(i),onThumbPositionChange:C,onThumbPointerDown:(0,w.useCallbackRef)(j),children:(0,b.jsx)(s.Primitive.div,{...o,ref:t,style:{position:"absolute",...o.style},onPointerDown:(0,A.composeEventHandlers)(a.onPointerDown,a=>{0===a.button&&(a.target.setPointerCapture(a.pointerId),u.current=q.getBoundingClientRect(),x.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",p.viewport&&(p.viewport.style.scrollBehavior="auto"),E(a))}),onPointerMove:(0,A.composeEventHandlers)(a.onPointerMove,E),onPointerUp:(0,A.composeEventHandlers)(a.onPointerUp,a=>{let b=a.target;b.hasPointerCapture(a.pointerId)&&b.releasePointerCapture(a.pointerId),document.body.style.webkitUserSelect=x.current,p.viewport&&(p.viewport.style.scrollBehavior=""),u.current=null})})})}),U="ScrollAreaThumb",V=c.forwardRef((a,c)=>{let{forceMount:d,...e}=a,f=S(U,a.__scopeScrollArea);return(0,b.jsx)(t.Presence,{present:d||f.hasThumb,children:(0,b.jsx)(W,{ref:c,...e})})}),W=c.forwardRef((a,d)=>{let{__scopeScrollArea:e,style:f,...g}=a,h=F(U,e),i=S(U,e),{onThumbPositionChange:j}=i,k=(0,v.useComposedRefs)(d,a=>i.onThumbChange(a)),l=c.useRef(void 0),m=ae(()=>{l.current&&(l.current(),l.current=void 0)},100);return c.useEffect(()=>{let a=h.viewport;if(a){let b=()=>{m(),l.current||(l.current=ad(a,j),j())};return j(),a.addEventListener("scroll",b),()=>a.removeEventListener("scroll",b)}},[h.viewport,m,j]),(0,b.jsx)(s.Primitive.div,{"data-state":i.hasThumb?"visible":"hidden",...g,ref:k,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...f},onPointerDownCapture:(0,A.composeEventHandlers)(a.onPointerDownCapture,a=>{let b=a.target.getBoundingClientRect(),c=a.clientX-b.left,d=a.clientY-b.top;i.onThumbPointerDown({x:c,y:d})}),onPointerUp:(0,A.composeEventHandlers)(a.onPointerUp,i.onThumbPointerUp)})});V.displayName=U;var X="ScrollAreaCorner",Y=c.forwardRef((a,c)=>{let d=F(X,a.__scopeScrollArea),e=!!(d.scrollbarX&&d.scrollbarY);return"scroll"!==d.type&&e?(0,b.jsx)(Z,{...a,ref:c}):null});Y.displayName=X;var Z=c.forwardRef((a,d)=>{let{__scopeScrollArea:e,...f}=a,g=F(X,e),[h,i]=c.useState(0),[j,k]=c.useState(0),l=!!(h&&j);return af(g.scrollbarX,()=>{let a=g.scrollbarX?.offsetHeight||0;g.onCornerHeightChange(a),k(a)}),af(g.scrollbarY,()=>{let a=g.scrollbarY?.offsetWidth||0;g.onCornerWidthChange(a),i(a)}),l?(0,b.jsx)(s.Primitive.div,{...f,ref:d,style:{width:h,height:j,position:"absolute",right:"ltr"===g.dir?0:void 0,left:"rtl"===g.dir?0:void 0,bottom:0,...a.style}}):null});function $(a){return a?parseInt(a,10):0}function _(a,b){let c=a/b;return isNaN(c)?0:c}function aa(a){let b=_(a.viewport,a.content),c=a.scrollbar.paddingStart+a.scrollbar.paddingEnd;return Math.max((a.scrollbar.size-c)*b,18)}function ab(a,b,c="ltr"){let d=aa(b),e=b.scrollbar.paddingStart+b.scrollbar.paddingEnd,f=b.scrollbar.size-e,g=b.content-b.viewport,h=(0,z.clamp)(a,"ltr"===c?[0,g]:[-1*g,0]);return ac([0,g],[0,f-d])(h)}function ac(a,b){return c=>{if(a[0]===a[1]||b[0]===b[1])return b[0];let d=(b[1]-b[0])/(a[1]-a[0]);return b[0]+d*(c-a[0])}}var ad=(a,b=()=>{})=>{let c={left:a.scrollLeft,top:a.scrollTop},d=0;return!function e(){let f={left:a.scrollLeft,top:a.scrollTop},g=c.left!==f.left,h=c.top!==f.top;(g||h)&&b(),c=f,d=window.requestAnimationFrame(e)}(),()=>window.cancelAnimationFrame(d)};function ae(a,b){let d=(0,w.useCallbackRef)(a),e=c.useRef(0);return c.useEffect(()=>()=>window.clearTimeout(e.current),[]),c.useCallback(()=>{window.clearTimeout(e.current),e.current=window.setTimeout(d,b)},[d,b])}function af(a,b){let c=(0,w.useCallbackRef)(b);(0,y.useLayoutEffect)(()=>{let b=0;if(a){let d=new ResizeObserver(()=>{cancelAnimationFrame(b),b=window.requestAnimationFrame(c)});return d.observe(a),()=>{window.cancelAnimationFrame(b),d.unobserve(a)}}},[a,c])}a.s(["Corner",0,Y,"Root",0,G,"ScrollArea",0,G,"ScrollAreaCorner",0,Y,"ScrollAreaScrollbar",0,K,"ScrollAreaThumb",0,V,"ScrollAreaViewport",0,I,"Scrollbar",0,K,"Thumb",0,V,"Viewport",0,I,"createScrollAreaScope",0,D],69480);var ag=a.i(69480),ag=ag,ah=a.i(85536);function ai({className:a,children:c,...d}){return(0,b.jsxs)(ag.Root,{"data-slot":"scroll-area",className:(0,ah.cn)("relative",a),...d,children:[(0,b.jsx)(ag.Viewport,{"data-slot":"scroll-area-viewport",className:"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&>div]:block!",children:c}),(0,b.jsx)(aj,{}),(0,b.jsx)(ag.Corner,{})]})}function aj({className:a,orientation:c="vertical",...d}){return(0,b.jsx)(ag.ScrollAreaScrollbar,{"data-slot":"scroll-area-scrollbar",orientation:c,className:(0,ah.cn)("flex touch-none p-px transition-colors select-none","vertical"===c&&"h-full w-2.5 border-s border-s-transparent","horizontal"===c&&"h-2.5 flex-col border-t border-t-transparent",a),...d,children:(0,b.jsx)(ag.ScrollAreaThumb,{"data-slot":"scroll-area-thumb",className:"bg-border relative flex-1 rounded-full"})})}var ak=a.i(89982),al=a.i(19884);function am({icon:a,label:c,href:d,active:e=!1}){let f=(0,al.useSoundAction)("navigate");return(0,b.jsx)(g.SidebarMenuItem,{"data-testid":"sidebar-nav-item",children:(0,b.jsx)(g.SidebarMenuButton,{asChild:!0,isActive:e,tooltip:c,children:(0,b.jsxs)(ak.default,{href:d,onClick:()=>f.play(),children:[(0,b.jsx)(a,{}),(0,b.jsx)("span",{children:c})]})})})}var an=a.i(81589),an=an,ao=a.i(18948);function ap({className:a}){let{toggleSidebar:c,open:d}=(0,g.useSidebar)(),e=(0,al.useSoundAction)("expand"),f=(0,al.useSoundAction)("collapse");return(0,b.jsx)("div",{className:(0,ah.cn)("flex",a),children:(0,b.jsx)(ao.Button,{"data-testid":"sidebar-collapse-toggle",variant:"ghost",size:"icon",className:"size-7 cursor-pointer group-data-[collapsible=icon]:size-8!",onClick:()=>{d?f.play():e.play(),c()},"aria-label":d?"Collapse sidebar":"Expand sidebar",children:(0,b.jsx)(an.default,{className:"size-4"})})})}var aq=a.i(7077);let ar=194/319;function as({className:a,size:c=24,variant:d="default"}){return(0,b.jsx)(aq.default,{src:"/shipit-brain.png",alt:"ShipIT AI",width:c,height:Math.round(c*ar),className:(0,ah.cn)("shrink-0 object-contain dark:brightness-125","dev"===d&&"opacity-80",a),style:{width:c,height:"auto"},"aria-hidden":!0})}var at=a.i(82934);function au({version:a,branch:d,commitHash:f,isDev:g=!1,packageName:h="@shipit-ai/cli",description:i,instancePath:j}){let{t:k}=(0,e.useTranslation)("web"),l=f?.slice(0,7),{latest:m,updateAvailable:n}=function(a){let[b,d]=(0,c.useState)(null),[e,f]=(0,c.useState)(!0);(0,c.useEffect)(()=>{let a=!1;return async function(){try{let b=await fetch("/api/npm-version");if(!b.ok)return;let c=await b.json();!a&&c.latest&&d(c.latest)}catch{}finally{a||f(!1)}}(),()=>{a=!0}},[]);let g=null!==b&&function(a,b){let c=a=>a.split("-")[0].split(".").map(Number),d=c(a),e=c(b);for(let a=0;a<3;a++){let b=d[a]??0,c=e[a]??0;if(b>c)return 1;if(b<c)return -1}return 0}(b,a)>0;return{latest:b,updateAvailable:g,loading:e}}(a),{status:o,startUpgrade:p}=function(){let[a,b]=(0,c.useState)("idle"),[d,e]=(0,c.useState)(""),[f,g]=(0,c.useState)(),h=(0,c.useRef)(null),i=(0,c.useRef)(!1),j=(0,c.useCallback)(()=>{if("upgrading"===a||"restarting"===a)return;b("upgrading"),e(""),g(void 0),i.current=!1;let c=new AbortController;return h.current=c,fetch("/api/cli-upgrade",{method:"POST",signal:c.signal}).then(async a=>{if(!a.ok||!a.body){b("error"),g(`Server returned ${a.status}`);return}let c=a.body.getReader(),d=new TextDecoder,f="";for(;;){let{done:a,value:h}=await c.read();if(a)break;let j=(f+=d.decode(h,{stream:!0})).split("\n");for(let a of(f=j.pop()??"",j)){if(a.startsWith("event: restarting")){i.current=!0,b("restarting"),function(){let a=Date.now()+3e4,b=()=>{Date.now()>a||fetch("/api/version",{method:"GET",cache:"no-store"}).then(a=>{a.ok?window.location.reload():setTimeout(b,500)}).catch(()=>{setTimeout(b,500)})};setTimeout(b,500)}();continue}if(!a.startsWith("event: done")&&a.startsWith("data: ")){let c=a.slice(6);try{let a=JSON.parse(c);"upgraded"===a.status?b("upgraded"):"up-to-date"===a.status?b("up-to-date"):"error"===a.status&&(b("error"),g(a.errorMessage))}catch{e(a=>a+c)}}}}}).catch(a=>{i.current||a instanceof DOMException&&"AbortError"===a.name||(b("error"),g(a instanceof Error?a.message:"Upgrade failed"))}),()=>{c.abort()}},[a]);return{status:a,output:d,errorMessage:f,startUpgrade:j}}(),q=g?`${a}-dev`:`v${a}`,r="upgrading"===o,s="restarting"===o,t="upgraded"===o;return(0,b.jsx)(at.TooltipProvider,{delayDuration:200,children:(0,b.jsxs)(at.Tooltip,{children:[(0,b.jsx)(at.TooltipTrigger,{asChild:!0,children:(0,b.jsxs)("span",{className:"text-muted-foreground/80 hover:text-muted-foreground relative cursor-default text-[11px] leading-tight transition-colors","data-testid":"version-label",children:[q,!n||t||s?null:(0,b.jsx)("span",{className:"absolute -top-0.5 -right-1.5 size-1.5 rounded-full bg-emerald-400","data-testid":"update-dot"})]})}),(0,b.jsxs)(at.TooltipContent,{side:"right",className:"max-w-[280px] space-y-1 p-3 text-start",children:[(0,b.jsx)("div",{className:"mb-1.5 text-xs font-semibold",children:h}),i?(0,b.jsx)("div",{className:"text-[10px] leading-snug opacity-70",children:i}):null,(0,b.jsxs)("div",{className:"border-t border-white/10 pt-1.5",children:[(0,b.jsx)(av,{label:k("versionBadge.version"),value:q}),g&&d?(0,b.jsx)(av,{label:k("versionBadge.branch"),value:d}):null,g&&l?(0,b.jsx)(av,{label:k("versionBadge.commit"),value:l,mono:!0}):null,g&&j?(0,b.jsx)(av,{label:k("versionBadge.path"),value:j,mono:!0}):null,m?(0,b.jsx)(av,{label:"Latest",value:`v${m}`,highlight:n}):null]}),s?(0,b.jsx)("div",{className:"border-t border-white/10 pt-1.5",children:(0,b.jsx)("span",{className:"text-[10px] font-medium text-emerald-400","data-testid":"upgrade-restarting",children:"Restarting..."})}):t?(0,b.jsx)("div",{className:"border-t border-white/10 pt-1.5",children:(0,b.jsx)("span",{className:"text-[10px] font-medium text-emerald-400","data-testid":"upgrade-success",children:"Upgraded successfully"})}):"error"===o?(0,b.jsx)("div",{className:"border-t border-white/10 pt-1.5",children:(0,b.jsx)("span",{className:"text-[10px] font-medium text-red-400","data-testid":"upgrade-error",children:"Upgrade failed"})}):n?(0,b.jsx)("div",{className:"border-t border-white/10 pt-1.5",children:(0,b.jsx)("button",{type:"button",onClick:p,disabled:r||s,className:"inline-flex items-center gap-1 text-[10px] font-medium text-emerald-400 transition-colors hover:text-emerald-300 disabled:opacity-50","data-testid":"upgrade-button",children:r?"Upgrading...":s?"Restarting...":`Upgrade to v${m}`})}):null]})]})})}function av({label:a,value:c,highlight:d,mono:e}){return(0,b.jsxs)("div",{className:"flex items-center justify-between gap-4 text-[10px]",children:[(0,b.jsx)("span",{className:"opacity-60",children:a}),(0,b.jsx)("span",{className:[d?"font-medium text-emerald-400":"",e||!d?"font-mono":""].filter(Boolean).join(" "),children:c})]})}function aw({startedAt:a}){let[d,e]=(0,c.useState)(()=>Date.now()-a);return(0,c.useEffect)(()=>{let b=setInterval(()=>{(0,c.startTransition)(()=>e(Date.now()-a))},1e3);return()=>clearInterval(b)},[a]),(0,b.jsx)("span",{"data-testid":"elapsed-time",className:"tabular-nums",children:function(a){let b=Math.floor(a/1e3);if(b>=3600){let a=Math.floor(b/3600);return`${a}h`}let c=Math.floor(b/60);return`${String(c).padStart(2,"0")}:${String(b%60).padStart(2,"0")}`}(d)})}var ax=a.i(82697),ay=a.i(88064),az=a.i(67273),aA=a.i(93866),aB=a.i(56926),aC=a.i(46168);let aD={"action-needed":{icon:ax.CircleAlert,iconClass:"text-amber-500",bgClass:"bg-amber-500/10",labelKey:"sidebar.statusActionNeeded"},"in-progress":{icon:ay.Loader2,iconClass:"text-blue-500 animate-spin",bgClass:"bg-blue-500/10",labelKey:"sidebar.statusInProgress"},pending:{icon:aC.Clock,iconClass:"text-slate-400",bgClass:"bg-slate-400/10",labelKey:"sidebar.statusPending"},blocked:{icon:aA.Ban,iconClass:"text-gray-400",bgClass:"bg-gray-400/10",labelKey:"sidebar.statusBlocked"},error:{icon:aB.CircleX,iconClass:"text-red-500",bgClass:"bg-red-500/10",labelKey:"sidebar.statusError"},done:{icon:az.CircleCheck,iconClass:"text-emerald-500",bgClass:"bg-emerald-500/10",labelKey:"sidebar.statusDone"}},aE=["action-needed","error","blocked","in-progress","pending","done"];var aF=a.i(17606),aG=a.i(83852);function aH({name:a,status:c,startedAt:d,duration:e,agentType:f,modelId:h,onClick:i}){let{icon:j,iconClass:k}=aD[c],l=f?(0,aF.getAgentTypeIcon)(f):null;return(0,b.jsx)(g.SidebarMenuItem,{"data-testid":"feature-list-item",children:(0,b.jsxs)(g.SidebarMenuButton,{size:"sm",onClick:i,tooltip:a,className:"cursor-pointer",children:[(0,b.jsx)(j,{className:k}),(0,b.jsx)("span",{className:"flex-1 truncate font-medium",children:a}),"in-progress"===c&&null!=d?(0,b.jsx)("span",{"data-testid":"feature-list-item-meta",className:"text-muted-foreground ml-auto text-xs tabular-nums",children:(0,b.jsx)(aw,{startedAt:d})}):null,"done"===c&&e?(0,b.jsx)("span",{"data-testid":"feature-list-item-meta",className:"text-muted-foreground ml-auto text-xs tabular-nums",children:e}):null,l?(0,b.jsx)(at.TooltipProvider,{children:(0,b.jsxs)(at.Tooltip,{children:[(0,b.jsx)(at.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("span",{className:"ml-auto shrink-0",children:(0,b.jsx)(l,{className:"h-3.5 w-3.5"})})}),(0,b.jsxs)(at.TooltipContent,{side:"right",children:[(0,b.jsx)("span",{className:"font-medium",children:aF.agentTypeLabels[f]??f}),h?(0,b.jsxs)("span",{className:"ms-1 opacity-70",children:["· ",(0,aG.getModelMeta)(h).displayName||h]}):null]})]})}):null]})})}var aI=a.i(2103);let aJ="shipit-ai-animations-enabled",aK="shipit-ai:animations-toggle",aL="no-animations",aM="shipit-ai-theme";function aN({label:a,count:c,children:d}){return(0,b.jsxs)(g.SidebarGroup,{"data-testid":"feature-status-group",className:"px-2 py-1",children:[(0,b.jsxs)(g.SidebarGroupLabel,{className:"text-muted-foreground h-6 px-2 text-[0.65rem] font-semibold tracking-wider uppercase",children:[a,(0,b.jsx)("span",{"aria-label":`${c} items`,className:"bg-sidebar-accent text-sidebar-accent-foreground ms-1.5 inline-flex h-4 min-w-4 items-center justify-center rounded-full px-1 text-[0.6rem] font-medium tabular-nums",role:"img",children:c})]}),(0,b.jsx)(g.SidebarGroupContent,{children:(0,b.jsx)(g.SidebarMenu,{className:"gap-0.5",children:d})})]})}var aO=a.i(71716),aP=a.i(73708);function aQ({repoName:a,featureCount:d,children:e,defaultOpen:f=!0}){let[g,h]=(0,c.useState)(f);return(0,b.jsxs)("div",{"data-testid":"repo-group",className:"mb-1",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>h(!g),className:(0,ah.cn)("text-sidebar-foreground hover:bg-sidebar-accent flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 text-left text-xs font-semibold","transition-colors duration-100"),"aria-expanded":g,children:[(0,b.jsx)(aO.ChevronDown,{className:(0,ah.cn)("text-muted-foreground h-3.5 w-3.5 shrink-0 transition-transform duration-200",!g&&"-rotate-90")}),(0,b.jsx)(aP.GitFork,{className:"text-muted-foreground h-3.5 w-3.5 shrink-0"}),(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate",children:a}),(0,b.jsx)("span",{"aria-label":`${d} features`,className:"bg-sidebar-accent text-sidebar-accent-foreground ml-auto inline-flex h-4 min-w-4 shrink-0 items-center justify-center rounded-full px-1 text-[0.6rem] font-medium tabular-nums",role:"img",children:d})]}),g?(0,b.jsx)("div",{className:"pl-2",children:e}):null]})}function aR({label:a,className:c}){return(0,b.jsx)(g.SidebarGroup,{"data-testid":"sidebar-section-header",className:(0,ah.cn)("px-2 py-1",c),children:(0,b.jsx)("div",{className:"text-sidebar-foreground flex h-7 w-full shrink-0 items-center px-2 text-sm font-medium",children:(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate",children:a})})})}let aS={version:"unknown",packageName:"@shipit-ai/cli",description:"Autonomous AI Native SDLC Platform",branch:"",commitHash:"",instancePath:"",isDev:!1};function aT({features:a,featureFlags:f,onFeatureClick:h}){let{t:s,i18n:t}=(0,e.useTranslation)("web"),u=(0,d.usePathname)(),{state:v}=(0,g.useSidebar)(),w="collapsed"===v,{mounted:x,visible:y}=function(a){let[b,d]=(0,c.useState)(!a),[e,f]=(0,c.useState)(!a);return(0,c.useEffect)(()=>{if(!a){d(!0);let a=requestAnimationFrame(()=>f(!0));return()=>cancelAnimationFrame(a)}f(!1);let b=window.setTimeout(()=>d(!1),200);return()=>window.clearTimeout(b)},[a,200]),{mounted:b,visible:e}}(w),z=function(){let[a,b]=(0,c.useState)(aS);return(0,c.useEffect)(()=>{let a=!1;return async function(){try{let c=await fetch("/api/version");if(!c.ok)return;let d=await c.json();a||b(d)}catch{}}(),()=>{a=!0}},[]),a}(),{enabled:A,toggle:B}=(0,aI.useSoundEnabled)(),{enabled:C,toggle:D}=function(){let[a,b]=(0,c.useState)(!0);(0,c.useEffect)(()=>{"false"===localStorage.getItem(aJ)&&(b(!1),document.body.classList.add(aL));let a=a=>{let c=a.detail;b(c),document.body.classList.toggle(aL,!c)};return window.addEventListener(aK,a),()=>window.removeEventListener(aK,a)},[]);let d=(0,c.useCallback)(()=>{let c=!a;localStorage.setItem(aJ,String(c)),b(c),document.body.classList.toggle(aL,!c),window.dispatchEvent(new CustomEvent(aK,{detail:c}))},[a]);return{enabled:a,toggle:d}}(),{resolvedTheme:E,theme:F,setTheme:G}=function(){let[a,b]=(0,c.useState)("system"),[d,e]=(0,c.useState)("light"),f=(0,c.useCallback)(()=>"light",[]),g=(0,c.useCallback)(a=>"system"===a?f():a,[f]),h=(0,c.useCallback)(a=>{if("u"<typeof document)return;let b=document.documentElement;b.classList.remove("light","dark"),b.classList.add(a),e(a)},[]),i=(0,c.useCallback)(a=>{b(a),"u">typeof localStorage&&localStorage.setItem(aM,a),h(g(a))},[g,h]);return(0,c.useEffect)(()=>{let a=localStorage.getItem(aM)??"system";b(a),h(g(a))},[g,h]),(0,c.useEffect)(()=>{},[a,g,h]),{theme:a,resolvedTheme:d,setTheme:i}}(),H=(0,al.useSoundAction)("toggle-on"),I=(0,al.useSoundAction)("toggle-off"),J=(0,al.useSoundAction)("navigate"),K=(0,c.useMemo)(()=>{let b=new Map;for(let c of a){let a=c.repositoryPath,d=b.get(a);d||(d={repoName:c.repositoryName,features:[]},b.set(a,d)),d.features.push(c)}return Array.from(b.entries()).map(([a,{repoName:b,features:c}])=>({repoPath:a,repoName:b,featureCount:c.length,statusGroups:aE.map(a=>({statusKey:a,label:s(aD[a].labelKey),items:c.filter(b=>b.status===a)})).filter(a=>a.items.length>0)}))},[a,s]);return(0,b.jsxs)(g.Sidebar,{"data-testid":"app-sidebar","data-no-drawer-close":!0,collapsible:"icon",side:"rtl"===t.dir()?"right":"left",children:[(0,b.jsx)(g.SidebarHeader,{children:(0,b.jsxs)(g.SidebarMenu,{children:[(0,b.jsx)(g.SidebarMenuItem,{children:(0,b.jsxs)("div",{className:"flex h-8 items-center group-data-[collapsible=icon]:justify-center",children:[x?(0,b.jsxs)("div",{className:["flex min-w-0 flex-1 items-center gap-2 overflow-hidden px-2 transition-opacity duration-200 ease-out",y?"opacity-100":"opacity-0"].join(" "),"aria-hidden":!y,children:[(0,b.jsx)(as,{className:"shrink-0 drop-shadow-[0_0_4px_rgba(34,211,238,0.4)]",size:28,variant:z.isDev?"dev":"default"}),(0,b.jsx)("span",{className:"truncate text-sm font-semibold tracking-tight",children:"ShipIT"}),(0,b.jsx)(au,{version:z.version,branch:z.branch||void 0,commitHash:z.commitHash||void 0,isDev:z.isDev,packageName:z.packageName,description:z.description,instancePath:z.instancePath||void 0})]}):null,(0,b.jsx)(ap,{className:"shrink-0 transition-all duration-200"})]})}),(0,b.jsx)(am,{icon:i,label:s("navigation.controlCenter"),href:"/",active:"/"===u}),(0,b.jsx)(am,{icon:p.Wrench,label:s("navigation.tools"),href:"/tools",active:"/tools"===u}),f.skills?(0,b.jsx)(am,{icon:q.Puzzle,label:s("navigation.skills"),href:"/skills",active:"/skills"===u}):null,(0,b.jsx)(am,{icon:r.Settings,label:s("navigation.settings"),href:"/settings",active:"/settings"===u})]})}),(0,b.jsx)(g.SidebarContent,{children:x?(0,b.jsx)("div",{className:["flex min-h-0 flex-1 flex-col overflow-hidden transition-opacity duration-200 ease-out [&_[data-sidebar=group-label]]:!mt-0 [&_[data-sidebar=group-label]]:!opacity-100 [&_[data-sidebar=group-label]]:!transition-none",y?"opacity-100":"opacity-0"].join(" "),children:K.length>0&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(aR,{label:s("sidebar.features")}),(0,b.jsx)(ai,{className:"min-h-0 flex-1",children:K.map(({repoPath:a,repoName:c,featureCount:d,statusGroups:e})=>(0,b.jsx)(aQ,{repoName:c,featureCount:d,children:e.map(({statusKey:a,label:c,items:d})=>(0,b.jsx)(aN,{label:c,count:d.length,children:d.map(a=>(0,b.jsx)(aH,{name:a.name,status:a.status,startedAt:a.startedAt,duration:a.duration,agentType:a.agentType,modelId:a.modelId,onClick:h?()=>h(a.featureId):void 0},a.featureId))},a))},a))})]})}):null}),(0,b.jsx)(g.SidebarFooter,{className:"border-t p-2",children:(0,b.jsx)(g.SidebarMenu,{children:(0,b.jsx)(g.SidebarMenuItem,{children:(0,b.jsx)("div",{className:"flex items-center gap-1",children:(0,b.jsxs)(at.TooltipProvider,{children:[(0,b.jsxs)(at.Tooltip,{children:[(0,b.jsx)(at.TooltipTrigger,{asChild:!0,children:(0,b.jsxs)(g.SidebarMenuButton,{className:"w-auto flex-none",onClick:a=>{let b="system"===F?"dark"===E?"light":"dark":"dark"===F?"light":"dark";("dark"!==("system"===F?E:F)?H.play():I.play(),"startViewTransition"in document)?(document.documentElement.style.setProperty("--x",`${a.clientX}px`),document.documentElement.style.setProperty("--y",`${a.clientY}px`),document.startViewTransition(()=>{G(b)})):G(b)},"aria-label":"dark"===E?s("sidebar.switchToLight"):s("sidebar.switchToDark"),children:[(0,b.jsx)(k,{className:"h-4 w-4 scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90"}),(0,b.jsx)(j,{className:"absolute h-4 w-4 scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0"})]})}),(0,b.jsx)(at.TooltipContent,{side:"top",children:"dark"===E?s("sidebar.switchToLight"):s("sidebar.switchToDark")})]}),!w&&(0,b.jsxs)(at.Tooltip,{children:[(0,b.jsx)(at.TooltipTrigger,{asChild:!0,children:(0,b.jsx)(g.SidebarMenuButton,{className:"w-auto flex-none",onClick:()=>{J.play(),B()},"aria-label":A?s("sidebar.muteSounds"):s("sidebar.unmuteSounds"),children:A?(0,b.jsx)(l,{className:"h-4 w-4"}):(0,b.jsx)(m,{className:"h-4 w-4"})})}),(0,b.jsx)(at.TooltipContent,{side:"top",children:A?s("sidebar.muteSounds"):s("sidebar.unmuteSounds")})]}),!w&&(0,b.jsxs)(at.Tooltip,{children:[(0,b.jsx)(at.TooltipTrigger,{asChild:!0,children:(0,b.jsx)(g.SidebarMenuButton,{className:"w-auto flex-none",onClick:()=>{J.play(),D()},"aria-label":C?"Disable animations":"Enable animations",children:C?(0,b.jsx)(n.Zap,{className:"h-4 w-4"}):(0,b.jsx)(o,{className:"h-4 w-4"})})}),(0,b.jsx)(at.TooltipContent,{side:"top",children:C?"Disable animations":"Enable animations"})]})]})})})})}),(0,b.jsx)(g.SidebarRail,{})]})}a.i(21434);var aU=a.i(34379),aV=a.i(12882),aW=a.i(2807),aX=a.i(34644);let aY=(0,h.default)("grip-vertical",[["circle",{cx:"9",cy:"12",r:"1",key:"1vctgf"}],["circle",{cx:"9",cy:"5",r:"1",key:"hp0tcf"}],["circle",{cx:"9",cy:"19",r:"1",key:"fkjjf6"}],["circle",{cx:"15",cy:"12",r:"1",key:"1tmaij"}],["circle",{cx:"15",cy:"5",r:"1",key:"19l28e"}],["circle",{cx:"15",cy:"19",r:"1",key:"f4zoj3"}]]);var aZ=a.i(73068);let a$=(0,h.default)("minimize-2",[["path",{d:"m14 10 7-7",key:"oa77jy"}],["path",{d:"M20 10h-6V4",key:"mjg0md"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M4 14h6v6",key:"rmj7iw"}]]);var a_=a.i(61544),a0=a.i(5555),a1=a.i(33419),a2=a.i(48265);let a3="shipit-ai-global-chat";function a4(){try{let a=localStorage.getItem(a3);if(!a)return{pos:null,size:null};let b=JSON.parse(a),c=b.size??null;return c&&(c.w<360||c.h<300)&&(c={w:Math.max(360,c.w),h:Math.max(300,c.h)}),{pos:b.pos??null,size:c}}catch{return{pos:null,size:null}}}function a5(){let{t:a}=(0,e.useTranslation)("web"),[d,f]=(0,c.useState)(!1),[h,i]=(0,c.useState)(!1),[j,k]=(0,c.useState)(!1),l=(0,a1.useTurnStatus)("global"),{swapPosition:m}=(0,a2.useFabLayout)(),{state:n}=(0,g.useSidebar)(),[o,p]=(0,c.useState)(()=>a4().pos),[q,r]=(0,c.useState)(()=>a4().size),s=(0,c.useCallback)(a=>{p(b=>"function"==typeof a?a(b):a)},[]),t=(0,c.useCallback)(a=>{r(b=>"function"==typeof a?a(b):a)},[]),u=(0,c.useRef)(null),v=(0,c.useRef)(null),w=(0,c.useRef)(null),x=(0,c.useCallback)(()=>{f(a=>(a||i(!0),!a))},[]),y=(0,c.useRef)({pos:null,size:null}),z=(0,c.useCallback)(()=>{d||(f(!0),i(!0)),k(a=>(a?(s(y.current.pos),t(y.current.size)):y.current={pos:o,size:q},!a))},[d,o,q,s,t]);(0,c.useEffect)(()=>{let a=a=>{(a.metaKey||a.ctrlKey)&&a.shiftKey&&("k"===a.key||"K"===a.key)&&(a.preventDefault(),j&&k(!1),x(),requestAnimationFrame(()=>{setTimeout(()=>{let a=u.current?.querySelector("textarea");a?.focus()},100)})),(a.metaKey||a.ctrlKey)&&a.shiftKey&&("m"===a.key||"M"===a.key)&&(a.preventDefault(),z())};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[x,z,j]),(0,c.useEffect)(()=>{let a=setTimeout(()=>(function(a,b){try{localStorage.setItem(a3,JSON.stringify({pos:a,size:b}))}catch{}})(o,q),300);return()=>clearTimeout(a)},[o,q]);let A=(0,c.useCallback)((a,b,c)=>({x:Math.max(-c+100,Math.min(a,window.innerWidth-100)),y:Math.max(0,Math.min(b,window.innerHeight-48))}),[]),B=(0,c.useCallback)(a=>{a.preventDefault();let b=u.current;if(!b)return;let c=b.getBoundingClientRect(),d=o?.x??c.left,e=o?.y??c.top;v.current={startX:a.clientX,startY:a.clientY,startPosX:d,startPosY:e};let f=q?.w??c.width,g=a=>{if(!v.current)return;let b=a.clientX-v.current.startX,c=a.clientY-v.current.startY;s(A(v.current.startPosX+b,v.current.startPosY+c,f))},h=()=>{v.current=null,document.removeEventListener("mousemove",g),document.removeEventListener("mouseup",h)};document.addEventListener("mousemove",g),document.addEventListener("mouseup",h)},[o,q,s,A]),C=(0,c.useCallback)(a=>{a.preventDefault(),a.stopPropagation();let b=u.current;if(!b)return;let c=b.getBoundingClientRect(),d=q?.w??c.width,e=q?.h??c.height,f=a.clientX,g=a.clientY,h=o?.y??c.top;w.current={startX:f,startY:g,startW:d,startH:e},o||s({x:c.left,y:c.top});let i=a=>{if(!w.current)return;let b=a.clientX-f,i=a.clientY-g,j=Math.max(360,d+b),k=Math.max(300,e-i),l=Math.max(0,h+i);t({w:j,h:k}),s(a=>A(a?.x??c.left,l,j))},j=()=>{w.current=null,document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",j)};document.addEventListener("mousemove",i),document.addEventListener("mouseup",j)},[q,o,s,t,A]),D=(0,c.useCallback)(()=>{f(!1),k(!1)},[]),E=j?{}:o?{position:"fixed",left:o.x,top:o.y,width:q?.w??520,height:q?.h??"70vh"}:{width:q?.w??520,height:q?.h??"70vh"};return(0,b.jsxs)(b.Fragment,{children:[h?(0,b.jsxs)("div",{ref:u,className:(0,ah.cn)(j?"bg-background fixed inset-0 z-[60] flex flex-col overflow-hidden dark:bg-neutral-900":(0,ah.cn)(!o&&(m?"fixed start-8 bottom-24":"fixed end-8 bottom-24"),"z-[60] flex flex-col overflow-hidden rounded-lg","border-border/60 border dark:border-white/10","bg-background dark:bg-neutral-900","shadow-[0_8px_40px_-8px_rgba(0,0,0,0.2)] dark:shadow-[0_8px_40px_-8px_rgba(0,0,0,0.6)]"),"transition-opacity duration-300 ease-out",d?"pointer-events-auto opacity-100":"pointer-events-none opacity-0"),style:E,children:[j?null:(0,b.jsx)("div",{className:"h-[2px] shrink-0 bg-gradient-to-r from-transparent via-violet-500/50 to-transparent"}),j?null:(0,b.jsx)("div",{onMouseDown:C,className:"absolute end-0 top-0 z-10 h-4 w-4 cursor-ne-resize"}),(0,b.jsxs)("div",{onMouseDown:j?void 0:B,className:(0,ah.cn)("relative flex h-11 shrink-0 items-center gap-2.5 border-b border-black/[0.06] px-3.5 dark:border-white/[0.06]",!j&&"cursor-grab active:cursor-grabbing"),children:[(0,b.jsx)("div",{className:"from-foreground/[0.02] to-foreground/[0.02] pointer-events-none absolute inset-0 bg-gradient-to-r via-transparent"}),j?null:(0,b.jsx)(aY,{className:"text-foreground/15 relative h-3.5 w-3.5 shrink-0"}),(0,b.jsx)("div",{className:"relative flex h-5 w-5 items-center justify-center",children:(0,b.jsx)(aX.Bot,{className:"text-foreground/50 h-4 w-4"})}),(0,b.jsxs)("div",{className:"relative flex items-baseline gap-2",children:[(0,b.jsx)("span",{className:"text-foreground/90 text-base font-bold tracking-tight",children:"ShipIT"}),(0,b.jsx)("span",{className:"text-foreground/30 text-xs font-medium tracking-widest uppercase",children:"global"})]}),(0,b.jsxs)("div",{className:"relative ms-auto flex items-center gap-0.5",children:[(0,b.jsx)("button",{type:"button",onClick:z,className:"text-foreground/30 hover:text-foreground/60 rounded-md p-1 transition-colors",title:j?"Restore (⌘⇧M)":"Maximize (⌘⇧M)",children:j?(0,b.jsx)(a$,{className:"h-3.5 w-3.5"}):(0,b.jsx)(aZ.Maximize2,{className:"h-3.5 w-3.5"})}),(0,b.jsx)("button",{type:"button",onClick:D,className:"text-foreground/30 hover:text-foreground/60 rounded-md p-1 transition-colors",title:"Close (⌘⇧K)",children:(0,b.jsx)(aW.X,{className:"h-3.5 w-3.5"})})]})]}),(0,b.jsx)("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden",children:(0,b.jsx)(a_.ChatTab,{featureId:"global"})}),j?null:(0,b.jsx)("div",{onMouseDown:a=>{a.preventDefault(),a.stopPropagation();let b=u.current;if(!b)return;let c=b.getBoundingClientRect(),d=a.clientX,e=a.clientY,f=q?.w??c.width,g=q?.h??c.height;o||s({x:c.left,y:c.top});let h=a=>{let b=window.innerHeight-(o?.y??c.top);t({w:Math.max(360,f+(a.clientX-d)),h:Math.max(300,Math.min(g+(a.clientY-e),b))})},i=()=>{document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",i)};document.addEventListener("mousemove",h),document.addEventListener("mouseup",i)},className:"absolute end-0 bottom-0 z-10 h-4 w-4 cursor-se-resize"})]}):null,(0,b.jsxs)(a6,{swapPosition:m,sidebarState:n,isMaximized:j,children:[(0,b.jsxs)(ao.Button,{size:"icon",onClick:x,className:(0,ah.cn)("relative h-14 w-14 rounded-full shadow-lg","transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95",d?"bg-violet-600 text-white hover:bg-violet-500":"bg-violet-500 text-white hover:bg-violet-400 dark:bg-violet-500 dark:hover:bg-violet-400"),children:[(0,b.jsx)(aV.MessageSquare,{className:(0,ah.cn)("absolute h-7 w-7 stroke-[2.5] transition-all duration-200",d?"scale-0 rotate-90 opacity-0":"scale-100 rotate-0 opacity-100")}),(0,b.jsx)(aW.X,{className:(0,ah.cn)("absolute h-6 w-6 stroke-[2.5] transition-all duration-200",d?"scale-100 rotate-0 opacity-100":"scale-0 -rotate-90 opacity-0")}),!d&&(0,b.jsx)(a0.ChatDotIndicator,{status:l,className:"end-0 top-0"})]}),(0,b.jsx)("div",{className:"pointer-events-none absolute bottom-[calc(100%+8px)] left-1/2 -translate-x-1/2 translate-y-1 opacity-0 transition-all duration-200 group-hover/fab:translate-y-0 group-hover/fab:opacity-100",children:(0,b.jsxs)("div",{className:"bg-foreground rounded-lg px-3 py-1.5 text-center shadow-lg",children:[(0,b.jsx)("p",{className:"text-background text-xs font-medium whitespace-nowrap",children:a("chat.shipitAiChat")}),(0,b.jsxs)("p",{className:"text-background/50 mt-0.5 flex items-center justify-center gap-1 text-[10px]",children:[(0,b.jsx)("kbd",{className:"bg-background/15 rounded px-1 py-px font-mono",children:"⌘"}),(0,b.jsx)("kbd",{className:"bg-background/15 rounded px-1 py-px font-mono",children:"⇧"}),(0,b.jsx)("kbd",{className:"bg-background/15 rounded px-1 py-px font-mono",children:"K"})]})]})})]})]})}function a6({swapPosition:a,sidebarState:c,isMaximized:d,children:f}){let{i18n:g}=(0,e.useTranslation)("web"),h="rtl"===g.dir();if(!a)return(0,b.jsx)("div",{className:(0,ah.cn)("group/fab fixed end-8 bottom-6 z-30",d&&"hidden"),children:f});let i="expanded"===c?"calc(var(--sidebar-width) + 32px)":"calc(var(--sidebar-width-icon) + 32px)";return(0,b.jsx)("div",{className:(0,ah.cn)("group/fab fixed bottom-6 z-30",d&&"hidden"),style:h?{right:i,transition:"right 200ms ease-in-out"}:{left:i,transition:"left 200ms ease-in-out"},children:f})}var a7=a.i(1377),a8=a.i(45670),a9=a.i(41305),ba=a.i(90920),bb=a.i(584);let bc=/^(?:https:\/\/github\.com\/([a-zA-Z0-9._-]+)\/([a-zA-Z0-9._-]+?)(?:\.git)?|git@github\.com:([a-zA-Z0-9._-]+)\/([a-zA-Z0-9._-]+?)(?:\.git)?|([a-zA-Z0-9._-]+)\/([a-zA-Z0-9._-]+))$/;function bd({onSubmit:a,loading:d=!1}){let[e,f]=(0,c.useState)(""),[g,h]=(0,c.useState)("");function i(){let b=e.trim();b?bc.test(b.trim())?(h(""),a(b)):h("Enter a valid GitHub URL (e.g. owner/repo or https://github.com/owner/repo)"):h("Please enter a GitHub URL")}return(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)(bb.Label,{htmlFor:"github-url-input",children:"GitHub URL"}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(ba.Input,{id:"github-url-input",placeholder:"owner/repo or https://github.com/owner/repo",value:e,onChange:a=>{f(a.target.value),g&&h("")},onKeyDown:function(a){"Enter"===a.key&&(a.preventDefault(),i())},disabled:d,"aria-invalid":!!g,"aria-describedby":g?"github-url-error":void 0}),(0,b.jsx)(ao.Button,{onClick:i,disabled:d||!e.trim(),size:"sm",children:d?(0,b.jsx)(ay.Loader2,{className:"h-4 w-4 animate-spin"}):"Import"})]}),g?(0,b.jsx)("p",{id:"github-url-error",className:"text-destructive text-sm",role:"alert",children:g}):null]})}let be=(0,h.default)("lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);var bf=a.i(84494),bg=a.i(31378),bh=a.i(72980),bi=a.i(58339),bj=a.i(55837),bk=a.i(59175),bl=a.i(6120);let bm=(0,bl.createServerReference)("40efc2baa0a6db0221a22e5c16b2b95ad046acd2aa",bl.callServer,void 0,bl.findSourceMapURL,"listGitHubRepositories"),bn=(0,bl.createServerReference)("0012936437cfcc8d5635b3f78d243bfb3e8ada75d0",bl.callServer,void 0,bl.findSourceMapURL,"listGitHubOrganizations"),bo="__personal__";function bp({onSelect:a,loading:d=!1,fetchRepos:e=bm,fetchOrgs:f=bn}){let[g,h]=(0,c.useState)([]),[i,j]=(0,c.useState)([]),[k,l]=(0,c.useState)(!0),[m,n]=(0,c.useState)(""),[o,p]=(0,c.useState)(""),[q,r]=(0,c.useState)(bo),s=(0,c.useRef)(null);(0,c.useEffect)(()=>{!async function(){try{let a=await f();a.orgs&&j(a.orgs)}catch{}}()},[f]);let t=(0,c.useCallback)(async(a,b)=>{l(!0),n("");try{let c={};a&&(c.search=a),b&&b!==bo&&(c.owner=b);let d=await e(Object.keys(c).length>0?c:void 0);d.error?(n(d.error),h([])):h(d.repos??[])}catch{n("Failed to fetch repositories"),h([])}finally{l(!1)}},[e]);return((0,c.useEffect)(()=>{t(o||void 0,q)},[t,q]),m&&!k)?(0,b.jsxs)("div",{className:"flex flex-col items-center gap-2 py-8 text-center","data-testid":"repo-browser-error",children:[(0,b.jsx)(bh.AlertCircle,{className:"text-destructive h-8 w-8"}),(0,b.jsx)("p",{className:"text-destructive text-sm",children:m})]}):(0,b.jsxs)("div",{className:"flex flex-col gap-3",children:[i.length>0?(0,b.jsxs)(bk.Select,{value:q,onValueChange:function(a){r(a),p("")},disabled:d,children:[(0,b.jsx)(bk.SelectTrigger,{"aria-label":"Select owner",children:(0,b.jsx)(bk.SelectValue,{placeholder:"Select owner"})}),(0,b.jsxs)(bk.SelectContent,{children:[(0,b.jsx)(bk.SelectItem,{value:bo,children:"My repositories"}),i.map(a=>(0,b.jsx)(bk.SelectItem,{value:a.login,children:a.login},a.login))]})]}):null,(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)(bg.Search,{className:"text-muted-foreground absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2"}),(0,b.jsx)(ba.Input,{placeholder:"Search repositories...",value:o,onChange:a=>{var b;p(b=a.target.value),s.current&&clearTimeout(s.current),s.current=setTimeout(()=>{t(b||void 0,q)},300)},className:"ps-9",disabled:d,"aria-label":"Search repositories"})]}),(0,b.jsx)("div",{className:"max-h-64 overflow-x-hidden overflow-y-auto rounded-md border",role:"listbox","aria-label":"GitHub repositories",children:k?(0,b.jsx)("div",{className:"flex flex-col gap-2 p-3","data-testid":"repo-browser-loading",children:Array.from({length:5}).map((a,c)=>(0,b.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,b.jsx)(bj.Skeleton,{className:"h-4 w-48"}),(0,b.jsx)(bj.Skeleton,{className:"h-3 w-72"})]},`skeleton-${String(c)}`))}):0===g.length?(0,b.jsx)("div",{className:"text-muted-foreground py-8 text-center text-sm","data-testid":"repo-browser-empty",children:"No repositories found"}):g.map(c=>(0,b.jsxs)("button",{type:"button",role:"option","aria-selected":!1,className:"hover:bg-accent flex w-full items-start gap-2 border-b px-3 py-2.5 text-start last:border-b-0 disabled:opacity-50",onClick:()=>a(c.nameWithOwner),disabled:d,children:[(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"truncate text-sm font-medium",children:c.nameWithOwner}),(0,b.jsx)(bi.Badge,{variant:c.isPrivate?"secondary":"outline",className:"shrink-0 text-xs",children:c.isPrivate?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(be,{className:"me-1 h-3 w-3"}),"Private"]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(bf.Globe,{className:"me-1 h-3 w-3"}),"Public"]})})]}),c.description?(0,b.jsx)("p",{className:"text-muted-foreground mt-0.5 truncate text-xs",children:c.description}):null]}),d?(0,b.jsx)(ay.Loader2,{className:"mt-0.5 h-4 w-4 shrink-0 animate-spin"}):null]},c.nameWithOwner))})]})}let bq=(0,bl.createServerReference)("40d809e4dafbc43bebc406df33c2d204cc2305ee05",bl.callServer,void 0,bl.findSourceMapURL,"importGitHubRepository");function br({open:a,onOpenChange:d,onImportComplete:e}){let[f,g]=(0,c.useState)(!1),[h,i]=(0,c.useState)("");async function j(a){g(!0),i("");try{let b=await bq({url:a});b.error?i(b.error):b.repository&&(e(b.repository),d(!1))}catch{i("An unexpected error occurred")}finally{g(!1)}}return(0,b.jsx)(a8.Dialog,{open:a,onOpenChange:d,children:(0,b.jsxs)(a8.DialogContent,{className:"overflow-hidden sm:max-w-lg",children:[(0,b.jsxs)(a8.DialogHeader,{children:[(0,b.jsx)(a8.DialogTitle,{children:"Import from GitHub"}),(0,b.jsx)(a8.DialogDescription,{children:"Clone a GitHub repository and add it to ShipIT."})]}),(0,b.jsxs)(a9.Tabs,{defaultValue:"url",className:"min-w-0",children:[(0,b.jsxs)(a9.TabsList,{className:"grid w-full grid-cols-2",children:[(0,b.jsx)(a9.TabsTrigger,{value:"url",children:"URL"}),(0,b.jsx)(a9.TabsTrigger,{value:"browse",children:"Browse"})]}),(0,b.jsx)(a9.TabsContent,{value:"url",className:"mt-4",children:(0,b.jsx)(bd,{onSubmit:j,loading:f})}),(0,b.jsx)(a9.TabsContent,{value:"browse",className:"mt-4",children:(0,b.jsx)(bp,{onSelect:j,loading:f})})]}),h?(0,b.jsx)("p",{className:"text-destructive text-sm",role:"alert",children:h}):null]})})}var bs=a.i(84871),bt=a.i(96213),bu=a.i(1356),bv=a.i(52313),bw=a.i(46847);let bx={[bw.NotificationSeverity.Success]:"success",[bw.NotificationSeverity.Error]:"error",[bw.NotificationSeverity.Warning]:"warning",[bw.NotificationSeverity.Info]:"info"},by={[bw.NotificationSeverity.Success]:"notification-success",[bw.NotificationSeverity.Error]:"notification-error",[bw.NotificationSeverity.Warning]:"notification-warning",[bw.NotificationSeverity.Info]:"notification-info"};var bz=a.i(21333);function bA({children:a,sidebarOpen:e}){let f=(0,d.useRouter)(),{guardedNavigate:h}=(0,bt.useDrawerCloseGuard)(),i=(0,bz.useFeatureFlags)();!function(){let a=(0,d.useRouter)(),{events:b}=(0,bs.useAgentEventsContext)(),e=(0,al.useSoundAction)("notification-success"),f=(0,al.useSoundAction)("notification-error"),g=(0,al.useSoundAction)("notification-warning"),h=(0,al.useSoundAction)("notification-info"),i=(0,c.useMemo)(()=>({"notification-success":e,"notification-error":f,"notification-warning":g,"notification-info":h}),[e,f,g,h]),j=(0,c.useRef)(0);(0,c.useEffect)(()=>{if(b.length<=j.current)return;let c=b.slice(j.current);for(let d of(j.current=b.length,c)){if(d.eventType!==bw.NotificationEventType.MergeReviewReady&&d.severity!==bw.NotificationSeverity.Error&&d.severity!==bw.NotificationSeverity.Warning&&d.severity!==bw.NotificationSeverity.Success)continue;!function(a,b){let c=bx[a.severity]??"info",d=a.eventType===bw.NotificationEventType.WaitingApproval||a.eventType===bw.NotificationEventType.MergeReviewReady;bv.toast[c](a.featureName,{description:a.message,...d&&b&&{action:{label:"Review",onClick:()=>{b(`/feature/${a.featureId}`)}}}})}(d,b=>a.push(b));let b=by[d.severity];i[b]?.play()}},[b,i,a])}();let{features:j}=(0,bu.useSidebarFeaturesContext)(),k=(0,c.useCallback)(a=>{h(()=>f.push(`/feature/${a}`))},[f,h]),[l,m]=(0,c.useState)(!1),[n,o]=(0,c.useState)(!1),[p,q]=(0,c.useState)(!1),r=(0,c.useCallback)(async()=>{if(!l){if(i.reactFileManager)return void q(!0);m(!0);try{let a=await (0,a7.pickFolder)();a&&window.dispatchEvent(new CustomEvent("shipit-ai:add-repository",{detail:{path:a}}))}catch{q(!0)}finally{m(!1)}}},[l,i.reactFileManager]);(0,c.useEffect)(()=>{let a=()=>{r()};return window.addEventListener("shipit-ai:pick-folder",a),()=>window.removeEventListener("shipit-ai:pick-folder",a)},[r]),(0,c.useEffect)(()=>{let a=()=>o(!0);return window.addEventListener("shipit-ai:open-github-import",a),()=>window.removeEventListener("shipit-ai:open-github-import",a)},[]);let s=(0,c.useCallback)(a=>{a&&window.dispatchEvent(new CustomEvent("shipit-ai:add-repository",{detail:{path:a}})),q(!1)},[]),t=(0,c.useCallback)(a=>{a.path&&window.dispatchEvent(new CustomEvent("shipit-ai:add-repository",{detail:{path:a.path}}))},[]);return(0,b.jsxs)(g.SidebarProvider,{defaultOpen:e??!1,children:[(0,b.jsx)(aT,{features:j,featureFlags:i,onFeatureClick:k}),(0,b.jsx)(g.SidebarInset,{children:(0,b.jsxs)("div",{className:"relative h-full",children:[(0,b.jsx)("main",{className:"h-full",children:a}),(0,b.jsx)(a5,{}),i.githubImport?(0,b.jsx)(br,{open:n,onOpenChange:o,onImportComplete:t}):null]})}),(0,b.jsx)(aU.ReactFileManagerDialog,{open:p,onOpenChange:a=>{a||q(!1)},onSelect:s})]})}function bB({children:a}){return(0,b.jsx)(a1.TurnStatusesProvider,{children:a})}a.s(["AppShell",0,function({children:a,sidebarOpen:c}){let{i18n:d}=(0,e.useTranslation)(),g=d.dir();return(0,b.jsx)(f.Direction.Provider,{dir:g,children:(0,b.jsx)(bs.AgentEventsProvider,{children:(0,b.jsx)(bt.DrawerCloseGuardProvider,{children:(0,b.jsx)(bu.SidebarFeaturesProvider,{children:(0,b.jsx)(bB,{children:(0,b.jsx)(bA,{sidebarOpen:c,children:a})})})})})})}],66560)},58313,a=>{"use strict";var b=a.i(53083),c=a.i(52313);a.s(["Toaster",0,({...a})=>(0,b.jsx)(c.Toaster,{className:"toaster group",toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground",actionButton:"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",cancelButton:"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"}},...a})])},41835,a=>{"use strict";var b=a.i(53083),c=a.i(89734),d=a.i(88111),e=a.i(54646),f=a.i(32591),g=class extends f.Subscribable{constructor(a={}){super(),this.config=a,this.#a=new Map}#a;build(a,b,e){let f=b.queryKey,g=b.queryHash??(0,c.hashQueryKeyByOptions)(f,b),h=this.get(g);return h||(h=new d.Query({client:a,queryKey:f,queryHash:g,options:a.defaultQueryOptions(b),state:e,defaultOptions:a.getQueryDefaults(f)}),this.add(h)),h}add(a){this.#a.has(a.queryHash)||(this.#a.set(a.queryHash,a),this.notify({type:"added",query:a}))}remove(a){let b=this.#a.get(a.queryHash);b&&(a.destroy(),b===a&&this.#a.delete(a.queryHash),this.notify({type:"removed",query:a}))}clear(){e.notifyManager.batch(()=>{this.getAll().forEach(a=>{this.remove(a)})})}get(a){return this.#a.get(a)}getAll(){return[...this.#a.values()]}find(a){let b={exact:!0,...a};return this.getAll().find(a=>(0,c.matchQuery)(b,a))}findAll(a={}){let b=this.getAll();return Object.keys(a).length>0?b.filter(b=>(0,c.matchQuery)(a,b)):b}notify(a){e.notifyManager.batch(()=>{this.listeners.forEach(b=>{b(a)})})}onFocus(){e.notifyManager.batch(()=>{this.getAll().forEach(a=>{a.onFocus()})})}onOnline(){e.notifyManager.batch(()=>{this.getAll().forEach(a=>{a.onOnline()})})}},h=a.i(62207),i=f,j=class extends i.Subscribable{constructor(a={}){super(),this.config=a,this.#b=new Set,this.#c=new Map,this.#d=0}#b;#c;#d;build(a,b,c){let d=new h.Mutation({client:a,mutationCache:this,mutationId:++this.#d,options:a.defaultMutationOptions(b),state:c});return this.add(d),d}add(a){this.#b.add(a);let b=k(a);if("string"==typeof b){let c=this.#c.get(b);c?c.push(a):this.#c.set(b,[a])}this.notify({type:"added",mutation:a})}remove(a){if(this.#b.delete(a)){let b=k(a);if("string"==typeof b){let c=this.#c.get(b);if(c)if(c.length>1){let b=c.indexOf(a);-1!==b&&c.splice(b,1)}else c[0]===a&&this.#c.delete(b)}}this.notify({type:"removed",mutation:a})}canRun(a){let b=k(a);if("string"!=typeof b)return!0;{let c=this.#c.get(b),d=c?.find(a=>"pending"===a.state.status);return!d||d===a}}runNext(a){let b=k(a);if("string"!=typeof b)return Promise.resolve();{let c=this.#c.get(b)?.find(b=>b!==a&&b.state.isPaused);return c?.continue()??Promise.resolve()}}clear(){e.notifyManager.batch(()=>{this.#b.forEach(a=>{this.notify({type:"removed",mutation:a})}),this.#b.clear(),this.#c.clear()})}getAll(){return Array.from(this.#b)}find(a){let b={exact:!0,...a};return this.getAll().find(a=>(0,c.matchMutation)(b,a))}findAll(a={}){return this.getAll().filter(b=>(0,c.matchMutation)(a,b))}notify(a){e.notifyManager.batch(()=>{this.listeners.forEach(b=>{b(a)})})}resumePausedMutations(){let a=this.getAll().filter(a=>a.state.isPaused);return e.notifyManager.batch(()=>Promise.all(a.map(a=>a.continue().catch(c.noop))))}};function k(a){return a.options.scope?.id}var l=a.i(42241),m=a.i(68486);function n(a){return{onFetch:(b,d)=>{let e=b.options,f=b.fetchOptions?.meta?.fetchMore?.direction,g=b.state.data?.pages||[],h=b.state.data?.pageParams||[],i={pages:[],pageParams:[]},j=0,k=async()=>{let d=!1,k=(0,c.ensureQueryFn)(b.options,b.fetchOptions),l=async(a,e,f)=>{let g;if(d)return Promise.reject();if(null==e&&a.pages.length)return Promise.resolve(a);let h=(g={client:b.client,queryKey:b.queryKey,pageParam:e,direction:f?"backward":"forward",meta:b.options.meta},(0,c.addConsumeAwareSignal)(g,()=>b.signal,()=>d=!0),g),i=await k(h),{maxPages:j}=b.options,l=f?c.addToStart:c.addToEnd;return{pages:l(a.pages,i,j),pageParams:l(a.pageParams,e,j)}};if(f&&g.length){let a="backward"===f,b={pages:g,pageParams:h},c=(a?function(a,{pages:b,pageParams:c}){return b.length>0?a.getPreviousPageParam?.(b[0],b,c[0],c):void 0}:o)(e,b);i=await l(b,c,a)}else{let b=a??g.length;do{let a=0===j?h[0]??e.initialPageParam:o(e,i);if(j>0&&null==a)break;i=await l(i,a),j++}while(j<b)}return i};b.options.persister?b.fetchFn=()=>b.options.persister?.(k,{client:b.client,queryKey:b.queryKey,meta:b.options.meta,signal:b.signal},d):b.fetchFn=k}}}function o(a,{pages:b,pageParams:c}){let d=b.length-1;return b.length>0?a.getNextPageParam(b[d],b,c[d],c):void 0}var p=class{#e;#f;#g;#h;#i;#j;#k;#l;constructor(a={}){this.#e=a.queryCache||new g,this.#f=a.mutationCache||new j,this.#g=a.defaultOptions||{},this.#h=new Map,this.#i=new Map,this.#j=0}mount(){this.#j++,1===this.#j&&(this.#k=l.focusManager.subscribe(async a=>{a&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#l=m.onlineManager.subscribe(async a=>{a&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#j--,0===this.#j&&(this.#k?.(),this.#k=void 0,this.#l?.(),this.#l=void 0)}isFetching(a){return this.#e.findAll({...a,fetchStatus:"fetching"}).length}isMutating(a){return this.#f.findAll({...a,status:"pending"}).length}getQueryData(a){let b=this.defaultQueryOptions({queryKey:a});return this.#e.get(b.queryHash)?.state.data}ensureQueryData(a){let b=this.defaultQueryOptions(a),d=this.#e.build(this,b),e=d.state.data;return void 0===e?this.fetchQuery(a):(a.revalidateIfStale&&d.isStaleByTime((0,c.resolveStaleTime)(b.staleTime,d))&&this.prefetchQuery(b),Promise.resolve(e))}getQueriesData(a){return this.#e.findAll(a).map(({queryKey:a,state:b})=>[a,b.data])}setQueryData(a,b,d){let e=this.defaultQueryOptions({queryKey:a}),f=this.#e.get(e.queryHash),g=f?.state.data,h=(0,c.functionalUpdate)(b,g);if(void 0!==h)return this.#e.build(this,e).setData(h,{...d,manual:!0})}setQueriesData(a,b,c){return e.notifyManager.batch(()=>this.#e.findAll(a).map(({queryKey:a})=>[a,this.setQueryData(a,b,c)]))}getQueryState(a){let b=this.defaultQueryOptions({queryKey:a});return this.#e.get(b.queryHash)?.state}removeQueries(a){let b=this.#e;e.notifyManager.batch(()=>{b.findAll(a).forEach(a=>{b.remove(a)})})}resetQueries(a,b){let c=this.#e;return e.notifyManager.batch(()=>(c.findAll(a).forEach(a=>{a.reset()}),this.refetchQueries({type:"active",...a},b)))}cancelQueries(a,b={}){let d={revert:!0,...b};return Promise.all(e.notifyManager.batch(()=>this.#e.findAll(a).map(a=>a.cancel(d)))).then(c.noop).catch(c.noop)}invalidateQueries(a,b={}){return e.notifyManager.batch(()=>(this.#e.findAll(a).forEach(a=>{a.invalidate()}),a?.refetchType==="none")?Promise.resolve():this.refetchQueries({...a,type:a?.refetchType??a?.type??"active"},b))}refetchQueries(a,b={}){let d={...b,cancelRefetch:b.cancelRefetch??!0};return Promise.all(e.notifyManager.batch(()=>this.#e.findAll(a).filter(a=>!a.isDisabled()&&!a.isStatic()).map(a=>{let b=a.fetch(void 0,d);return d.throwOnError||(b=b.catch(c.noop)),"paused"===a.state.fetchStatus?Promise.resolve():b}))).then(c.noop)}fetchQuery(a){let b=this.defaultQueryOptions(a);void 0===b.retry&&(b.retry=!1);let d=this.#e.build(this,b);return d.isStaleByTime((0,c.resolveStaleTime)(b.staleTime,d))?d.fetch(b):Promise.resolve(d.state.data)}prefetchQuery(a){return this.fetchQuery(a).then(c.noop).catch(c.noop)}fetchInfiniteQuery(a){return a.behavior=n(a.pages),this.fetchQuery(a)}prefetchInfiniteQuery(a){return this.fetchInfiniteQuery(a).then(c.noop).catch(c.noop)}ensureInfiniteQueryData(a){return a.behavior=n(a.pages),this.ensureQueryData(a)}resumePausedMutations(){return m.onlineManager.isOnline()?this.#f.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#f}getDefaultOptions(){return this.#g}setDefaultOptions(a){this.#g=a}setQueryDefaults(a,b){this.#h.set((0,c.hashKey)(a),{queryKey:a,defaultOptions:b})}getQueryDefaults(a){let b=[...this.#h.values()],d={};return b.forEach(b=>{(0,c.partialMatchKey)(a,b.queryKey)&&Object.assign(d,b.defaultOptions)}),d}setMutationDefaults(a,b){this.#i.set((0,c.hashKey)(a),{mutationKey:a,defaultOptions:b})}getMutationDefaults(a){let b=[...this.#i.values()],d={};return b.forEach(b=>{(0,c.partialMatchKey)(a,b.mutationKey)&&Object.assign(d,b.defaultOptions)}),d}defaultQueryOptions(a){if(a._defaulted)return a;let b={...this.#g.queries,...this.getQueryDefaults(a.queryKey),...a,_defaulted:!0};return b.queryHash||(b.queryHash=(0,c.hashQueryKeyByOptions)(b.queryKey,b)),void 0===b.refetchOnReconnect&&(b.refetchOnReconnect="always"!==b.networkMode),void 0===b.throwOnError&&(b.throwOnError=!!b.suspense),!b.networkMode&&b.persister&&(b.networkMode="offlineFirst"),b.queryFn===c.skipToken&&(b.enabled=!1),b}defaultMutationOptions(a){return a?._defaulted?a:{...this.#g.mutations,...a?.mutationKey&&this.getMutationDefaults(a.mutationKey),...a,_defaulted:!0}}clear(){this.#e.clear(),this.#f.clear()}},q=a.i(19301),r=a.i(11321);a.s(["QueryProvider",0,function({children:a}){let[c]=(0,r.useState)(()=>new p({defaultOptions:{queries:{staleTime:1e3,refetchOnWindowFocus:!1}}}));return(0,b.jsx)(q.QueryClientProvider,{client:c,children:a})}],41835)},36099,(a,b,c)=>{b.exports={errors:{notFound:"Not found",unauthorized:"Unauthorized",forbidden:"Forbidden",internal:"Internal error",unknown:"An unknown error occurred",failedToLoad:"Failed to load {{resource}}",failedToSave:"Failed to save {{resource}}"},labels:{save:"Save",cancel:"Cancel",confirm:"Confirm",delete:"Delete",edit:"Edit",close:"Close",back:"Back",next:"Next",yes:"Yes",no:"No",enabled:"Enabled",disabled:"Disabled",loading:"Loading...",saving:"Saving...",saved:"Saved",none:"None",default:"Default",custom:"Custom"},status:{success:"Success",error:"Error",warning:"Warning",info:"Info",pending:"Pending",inProgress:"In Progress",completed:"Completed",failed:"Failed"},confirmation:{areYouSure:"Are you sure?",cannotBeUndone:"This action cannot be undone."},language:{en:"English",ru:"Russian",pt:"Portuguese",es:"Spanish",ar:"Arabic",he:"Hebrew",fr:"French",de:"German"}}},94214,(a,b,c)=>{b.exports=JSON.parse('{"settings":{"title":"Settings","saving":"Saving...","saved":"Saved","failedToSave":"Failed to save settings","sections":{"language":"Language","agent":"Agent","environment":"Environment","workflow":"Workflow","ci":"CI","timeouts":"Timeouts","notifications":"Notifications","flags":"Flags","chat":"Chat","layout":"Layout","database":"Database"},"language":{"title":"Language","description":"Choose your preferred display language","label":"Display Language","placeholder":"Select a language","failedToSave":"Failed to save language settings"},"agent":{"title":"Preferred Agent","sectionTitle":"Agent","description":"Choose your AI coding agent and authentication method","sectionDescription":"AI coding agent and authentication","agentType":"Agent Type","agentAndModel":"Agent & Model","agentAndModelDescription":"Provider and model for all operations","authMethod":"Authentication Method","apiToken":"API Token","apiTokenPlaceholder":"Enter your API token","apiTokenHelper":"Saves automatically when you leave the field","failedToSave":"Failed to save agent settings","hint":"Choose which AI coding agent powers your features. Each agent supports different models and capabilities. Authentication is resolved automatically via your active session.","links":{"agentSystem":"Agent system","addingAgents":"Adding agents","configurationGuide":"Configuration guide"}},"environment":{"title":"IDE & Terminal","sectionTitle":"Environment","description":"Configure your default editor, shell, and terminal preferences","sectionDescription":"Editor, shell, and terminal preferences","defaultEditor":"Default Editor","defaultEditorDescription":"Editor launched for file operations","shellPreference":"Shell Preference","shell":"Shell","shellDescription":"Default shell for generated scripts","terminalEmulator":"Terminal Emulator","terminal":"Terminal","terminalDescription":"Terminal emulator for shell sessions","systemTerminal":"System Terminal","installed":"Installed","notInstalled":"Not Installed","failedToSave":"Failed to save IDE & Terminal settings","hint":"Your preferred editor opens files for review. The shell setting controls generated scripts. The terminal emulator is launched when opening shell sessions from the web UI.","links":{"configurationGuide":"Configuration guide"}},"workflow":{"title":"Workflow","description":"Configure PR behavior, approval gates, and CI settings","sectionDescription":"Automation behavior after implementation","defaultFastMode":"Fast mode by default","defaultFastModeDescription":"Skip SDLC phases and implement directly from prompt","subsections":{"approve":"Approve","evidence":"Evidence","git":"Git"},"autoApprovePrd":"Auto-approve PRD","autoApprovePrdDescription":"Skip manual review of requirements","autoApprovePlan":"Auto-approve Plan","autoApprovePlanDescription":"Skip manual review of implementation plan","autoApproveMerge":"Auto-approve Merge","autoApproveMergeDescription":"Merge without manual review","collectEvidence":"Collect evidence","collectEvidenceDescription":"Capture screenshots and artifacts after implementation","addEvidenceToPr":"Add evidence to PR","addEvidenceToPrDescription":"Include evidence in the pull request body","pushOnComplete":"Push on complete","pushOnCompleteDescription":"Push to remote when implementation finishes","openPrOnComplete":"Open PR on complete","openPrOnCompleteDescription":"Create a pull request when done","watchCiAfterPush":"Watch CI after push","watchCiAfterPushDescription":"Monitor CI and auto-fix failures. Disable to avoid rate limits.","approvalGates":"Approval Gates","prdAutoApproval":"PRD auto-approval","planAutoApproval":"Plan auto-approval","mergeAutoApproval":"Merge auto-approval","ciSettings":"CI Settings","ciWatchFixLoop":"CI watch/fix loop","maxFixAttempts":"Max fix attempts","watchTimeout":"Watch timeout (seconds)","maxLogCharacters":"Max log characters","pollInterval":"Poll interval (seconds)","hideCiStatus":"Hide CI Status","stageTimeouts":"Stage Timeouts","failedToSave":"Failed to save workflow settings","hint":"Control how autonomous each feature run is. Auto-approve skips the human review pause at each phase. Push and PR options control what happens after successful implementation.","links":{"approvalGates":"Approval gates","pushAndPrFlags":"Push & PR flags"}},"ci":{"title":"Continuous Integration","description":"Limits and timeouts for CI monitoring","maxFixAttempts":"Max fix attempts","maxFixAttemptsDescription":"Agent retries on failing CI","watchTimeout":"Watch timeout","watchTimeoutDescription":"Max wait for CI completion","maxLogSize":"Max log size","maxLogSizeDescription":"Truncate CI logs beyond this limit","pollInterval":"Poll interval","pollIntervalDescription":"How often to check GitHub for CI status updates","hideCiStatus":"Hide CI status","hideCiStatusDescription":"Hide CI status badges from feature drawer and merge review","hint":"When a feature completes, the agent can watch CI and auto-fix failures. These limits prevent runaway retries and control how much log output is sent to the agent for analysis.","links":{"cicdPipeline":"CI/CD pipeline","ciSecurityGates":"CI security gates"}},"stageTimeouts":{"title":"Stage Timeouts","description":"Maximum execution time per agent stage","subsections":{"featureAgent":"Feature Agent","analyzeRepoAgent":"Analyze Repository Agent"},"analyze":"Analyze","analyzeDescription":"Repository analysis timeout","requirements":"Requirements","requirementsDescription":"Requirements gathering timeout","research":"Research","researchDescription":"Technical research timeout","plan":"Plan","planDescription":"Implementation planning timeout","implement":"Implement","implementDescription":"Code implementation timeout","merge":"Merge","mergeDescription":"PR creation and merge timeout","hint":"Each agent has independently configurable stage timeouts. When a stage exceeds its timeout, the agent is terminated. Longer timeouts are useful for complex implementations. Feature agent defaults to 30 minutes per stage. Analyze repository agent defaults to 10 minutes."},"notifications":{"title":"Notifications","description":"Configure notification channels and event preferences","sectionDescription":"How and when you get notified","channels":"Channels","inApp":"In-App","inAppLabel":"In-app","inAppDescription":"Notifications inside the ShipIT AI UI","subsections":{"agentEvents":"Agent Events","pullRequestEvents":"Pull Request Events"},"events":{"agentStarted":"Agent started","phaseCompleted":"Phase completed","waitingApproval":"Waiting approval","agentCompleted":"Agent completed","agentFailed":"Agent failed","mergeReviewReady":"Merge review ready","prMerged":"PR merged","prClosed":"PR closed","prChecksPassed":"PR checks passed","prChecksFailed":"PR checks failed","prBlocked":"PR blocked"},"failedToSave":"Failed to save notification settings","hint":"In-app toast notifications keep you in the loop. Fine-tune which agent lifecycle events trigger a notification.","links":{"notificationSystem":"Notification system"}},"featureFlags":{"title":"Feature Flags","description":"Toggle experimental and beta features","sectionDescription":"Enable or disable experimental features","badge":"Experimental","skills":"Skills","skillsDescription":"Enable the skills system for agent capabilities","deployments":"Deployments","deploymentsDescription":"Enable environment deployment workflows","debug":"Debug","debugDescription":"Show debug panels and verbose logging","githubImport":"GitHub Import","githubImportDescription":"Enable GitHub repository import in the web UI","adoptBranch":"Adopt Branch","adoptBranchDescription":"Import existing branches as tracked features","gitRebaseSync":"Git Rebase & Sync","gitRebaseSyncDescription":"Enable git rebase-on-main and sync-main operations","reactFileManager":"React File Manager","reactFileManagerDescription":"Use the built-in React file manager instead of the native OS folder picker","hint":"Experimental features that are still under development. Enable at your own risk — they may change or be removed in future versions. Debug mode adds verbose logging useful for troubleshooting."},"interactiveAgent":{"title":"Interactive Agent","description":"Chat tab settings for per-feature interactive agent sessions","enableChatTab":"Enable Chat tab","enableChatTabDescription":"Show the Chat tab on all feature detail pages","autoTimeout":"Auto-timeout","autoTimeoutDescription":"Minutes of inactivity before the agent is stopped automatically (1–120)","maxConcurrentSessions":"Max concurrent sessions","maxConcurrentSessionsDescription":"Maximum number of active interactive agent sessions at once (1–10)","hint":"The Chat tab spawns a persistent agent process per feature. Auto-timeout stops idle sessions automatically to conserve resources. The concurrent session cap prevents runaway resource usage on developer machines."},"fabLayout":{"title":"Layout","description":"Control the position of floating action buttons in the control center","swapPosition":"Swap FAB positions","swapPositionDescription":"Move the Chat button to the left and the Create button to the right","hint":"The two floating action buttons (Create and Chat) sit in the bottom corners of the control center. Enable this toggle to swap their positions."},"database":{"title":"Database","description":"Database path and management","sectionDescription":"Local storage information","location":"Location","locationDescription":"Path to the local SQLite database","size":"Size","hint":"All settings are stored in a local SQLite database at ~/.shipit-ai/data. The database uses a singleton record pattern with automatic migrations on startup.","links":{"settingsService":"Settings service","settingsSpec":"Settings spec"}}},"navigation":{"controlCenter":"Control Center","dashboard":"Dashboard","features":"Features","repositories":"Repositories","settings":"Settings","sessions":"Sessions","tools":"Tools","skills":"Skills"},"sidebar":{"features":"Features","switchToLight":"Light mode","switchToDark":"Dark mode","muteSounds":"Mute sounds","unmuteSounds":"Unmute sounds","statusActionNeeded":"Action Needed","statusInProgress":"In Progress","statusPending":"Pending","statusBlocked":"Blocked","statusError":"Error","statusDone":"Done"},"deleteFeature":{"title":"Delete feature?","description":"This will permanently delete <strong>{{featureName}}</strong> ({{featureId}}). This action cannot be undone.","cleanupLabel":"Clean up worktree and branches","deleteSubFeatures":"Delete sub-features","closePullRequest":"Close pull request","cancel":"Cancel","deleting":"Deleting…","delete":"Delete"},"rejectFeedback":{"defaultTitle":"Reject Requirements","defaultDescription":"Provide feedback for the agent to address in the next iteration. Feedback is required.","ariaLabel":"Rejection feedback","placeholder":"Describe what needs to change...","cancel":"Cancel","rejecting":"Rejecting…","confirmReject":"Confirm Reject"},"emptyState":{"addProject":"Add a project","addProjectDescription":"Add your project folder to unlock feature creation.","addProjectDescriptionLine2":"Describe what you need — ShipIT AI handles the rest.","checkingSetup":"Checking setup…","ready":"{{label}} ready","notInstalled":"{{label}} not installed","reCheck":"Re-check","needsAuth":"{{label}} needs authentication","open":"Open {{label}}","checking":"Checking {{label}}…","notFound":"{{label}} not found","docs":"Docs","opening":"Opening…","chooseFolder":"Choose a Folder","folderHint":"Any folder works — git will be initialized automatically if needed.","orUseCli":"or use the CLI","copyCommands":"Copy commands","git":"Git","gitRequired":"Required for all phases","githubCli":"GitHub CLI","githubCliRequired":"Required for pull requests"},"welcome":{"loadingAgents":"Loading agents…","chooseAgent":"Choose your agent","pickModel":"Pick a model","selectAgentSubtitle":"Select the AI coding agent you want ShipIT AI to use.","chooseModelSubtitle":"Choose which {{label}} model to run.","ghCliNotice":"<0>GitHub CLI (gh)</0> is required for full CI/CD self-healing capabilities. <1>Install it here</1>.","ghCliRequired":"GitHub CLI (gh)","ghCliRequiredText":"is required for full CI/CD self-healing capabilities.","installHere":"Install it here","back":"Back"},"canvas":{"noFeatures":"No features yet","noFeaturesDescription":"Get started by creating your first feature.","newFeature":"New Feature","hideArchived":"Hide archived","showArchived":"Show archived","hideArchivedLabel":"Hide Archived","showArchivedLabel":"Show Archived","zoomOut":"Zoom out","zoomIn":"Zoom in","fitView":"Fit view","resetView":"Reset view"},"common":{"noData":"No data available","retry":"Retry","saving":"Saving...","saved":"Saved","decrease":"Decrease","increase":"Increase","cancel":"Cancel"},"featureNode":{"archiveFeature":"Archive feature","deleteFeature":"Delete feature","unarchiveFeature":"Unarchive feature","archiveConfirmTitle":"Archive feature?","archiveConfirmDescription":"<strong>{{name}}</strong> will be hidden from the canvas. You can unarchive it later to restore it.","cancel":"Cancel","archive":"Archive","fastMode":"Fast Mode","specDriven":"Spec Driven","copied":"Copied!","chatWithAgent":"Chat with agent","stopDevServer":"Stop Dev Server","startDevServer":"Start Dev Server","retryDevServer":"Retry Dev Server","starting":"Starting…","retry":"Retry","start":"Start","failed":"Failed","deleting":"Deleting…","addFeature":"Add feature","reviewRequirements":"Review Requirements","reviewTechnicalPlan":"Review Technical Plan","reviewChanges":"Review Changes","review":"Review","creating":"Creating...","completedIn":"Completed in {{runtime}}","completed":"Completed","waitingOn":"Waiting on {{blockedBy}}","blocked":"Blocked","pending":"Pending","somethingWentWrong":"Something went wrong","openChat":"Open chat","viewSessions":"View sessions","sessionsActive":"Sessions (active)","sessions":"Sessions","agentSessions":"Agent Sessions","noSessionsFound":"No sessions found","showLess":"Show less","showMore":"Show {{count}} more"},"repositoryNode":{"removeRepository":"Remove repository","removeConfirmTitle":"Remove repository?","removeConfirmDescription":"This will remove <strong>{{name}}</strong> and all its features from your workspace. The repository files on disk won\'t be affected.","cancel":"Cancel","remove":"Remove","openInIde":"Open in IDE","openInShell":"Open in Shell","openFolder":"Open Folder","chatWithAgent":"Chat with agent","newFeature":"New feature","new":"New","behind":"{{count}} behind","notAGitRepository":"Not a git repository","starting":"Starting...","run":"Run","startLocalEnvironment":"start local environment","stopDevServer":"Stop Dev Server","startDevServer":"Start Dev Server","retry":"Retry"},"fab":{"closeActions":"Close actions","createNew":"Create new","newFeature":"New Feature","localFolder":"Local Folder","adoptBranch":"Adopt Branch","fromGithub":"From GitHub"},"chat":{"shipitAiChat":"ShipIT AI Chat","writeMessage":"Write a message...","attachFiles":"Attach files","forceStopAgent":"Force stop agent process","stop":"Stop","clearChatHistory":"Clear chat history","clear":"Clear","noSession":"No session","yourMessage":"Your message","agentMessage":"Agent message","agentIsTyping":"Agent is typing","showMore":"Show more","showLess":"Show less","code":"Code","preview":"Preview","openFullscreen":"Open fullscreen","htmlPreview":"HTML Preview","htmlPreviewFullscreen":"HTML Preview Fullscreen"},"createDrawer":{"title":"NEW FEATURE","creating":"Creating...","cancel":"Cancel","createFeature":"+ Create Feature","repository":"REPOSITORY","describeFeature":"DESCRIBE YOUR FEATURE","featurePlaceholder":"e.g. Add GitHub OAuth login with callback handling and token refresh...","parentFeature":"PARENT FEATURE","selectParent":"Select parent feature...","searchFeatures":"Search features...","noParent":"No parent","noFeaturesFound":"No features found.","searchRepositories":"Search repositories...","approve":"APPROVE","approveDescription":"Auto-approve phase transitions without manual review.","skippedInFastMode":"Skipped in Fast Mode","all":"All","toggleAllApprovalGates":"Toggle all approval gates","evidence":"EVIDENCE","evidenceDescription":"Collect and attach evidence after implementation.","collect":"Collect","collectDescription":"Capture screenshots and artifacts after implementation.","addToPr":"Add to PR","requiresPr":"Requires PR to be enabled","requiresEvidence":"Requires evidence collection to be enabled","addToPrDescription":"Include evidence in the pull request body.","git":"GIT","push":"Push","pushDescription":"Push branch to remote after implementation.","pr":"PR","prDescription":"Open a pull request after pushing.","watch":"Watch","watchDescription":"Watch CI and auto-fix after push.","sync":"Sync","syncDescription":"Pull latest main from remote before creating the feature branch.","commitSpecs":"Commit Specs","commitSpecsDescription":"Commit specs to repository.","forkAndPr":"Fork & PR","forkAndPrDescription":"Contribute via fork (PR to upstream).","pendingMode":"Pending","pendingModeDescription":"Create without starting — start manually later.","fastModeLabel":"Fast Mode","fastModeDescription":"Skip SDLC phases and implement directly from your prompt.","fileDropZone":"File drop zone","prd":"PRD","prdDescription":"Auto-approve requirements move to planning.","plan":"Plan","planDescription":"Auto-approve planning move to implementation.","merge":"Merge","mergeDescription":"Auto-approve merge move to Done."},"featureDrawer":{"copyFeatureId":"Copy feature ID","unarchiveFeature":"Unarchive feature","archiveFeature":"Archive feature","deleteFeature":"Delete feature","stopDevServer":"Stop Dev Server","startDevServer":"Start Dev Server","failedToReject":"Failed to reject {{label}}","rejected":"{{label}} rejected — agent re-iterating (iteration {{n}})","excessiveIterations":"Iteration {{n}} — consider approving or adjusting feedback to avoid excessive iterations","failedToApprove":"Failed to approve {{label}}","approved":"{{label}} approved — agent resuming","failedToApproveRequirements":"Failed to approve requirements","requirementsApproved":"Requirements approved — agent resuming","featureResumed":"Feature resumed — agent restarting","featureStarted":"Feature started","approvePlan":"Approve Plan","sendRevisionFeedback":"Send revision feedback"},"overviewTab":{"created":"Created","runtime":"Runtime","runningFor":"Running for","blockedBy":"Blocked by","error":"Error","prd":"PRD","plan":"Plan","merge":"Merge","collect":"Collect","addToPr":"Add to PR","push":"Push","pr":"PR","watch":"Watch","commitSpecs":"Commit Specs","forkAndPr":"Fork & PR"},"activityTab":{"copyPromptToClipboard":"Copy prompt to clipboard","execution":"Execution","wait":"Wait","cost":"Cost","noActivityRecorded":"No activity recorded yet"},"logTab":{"structuredView":"Structured view","rawView":"Raw view","noLogOutput":"No log output yet"},"planTab":{"noPlanCreated":"No plan created yet"},"branchSyncStatus":{"refreshSyncStatus":"Refresh sync status","rebaseOnMain":"Rebase on Main"},"drawerActionBar":{"fileDropZone":"File drop zone","askAiToRevise":"Ask AI to revise...","attachFiles":"Attach files","reject":"Reject","sendRevisionFeedback":"Send revision feedback","approve":"Approve","fileTooLarge":"\\"{{name}}\\" exceeds 10 MB limit","fileTypeNotAllowed":"File type \\"{{ext}}\\" is not allowed","uploadFailed":"Upload failed"},"taskProgress":{"done":"Done","inProgress":"In Progress","review":"Review","todo":"Todo","noTasksDefined":"No tasks defined yet"},"repositoryDrawer":{"openInIde":"Open in IDE","openInShell":"Open in Shell","openFolder":"Open Folder","syncMain":"Sync Main"},"adoptBranch":{"failedToAdopt":"Failed to adopt branch","repository":"Repository","branchName":"Branch name","searchRepositories":"Search repositories...","searchBranches":"Search branches..."},"githubImport":{"title":"Import from GitHub","description":"Clone a GitHub repository and add it to ShipIT AI.","githubUrl":"GitHub URL","urlPlaceholder":"owner/repo or https://github.com/owner/repo","searchRepositories":"Search repositories..."},"versionBadge":{"version":"Version","branch":"Branch","commit":"Commit","path":"Path"},"mergeReview":{"download":"Download","dataUnavailable":"Merge review data unavailable"},"baseDrawer":{"close":"Close","stopDevServer":"Stop Dev Server","startDevServer":"Start Dev Server"},"addRepository":{"addRepository":"Add Repository"},"modelPicker":{"searchPlaceholder":"Search or type a model ID…"},"skills":{"searchPlaceholder":"Search skills..."},"tools":{"noCategoryTools":"No tools in this category."},"accessibility":{"close":"Close","loading":"Loading","send":"Send","imageNotes":"Image notes","viewServerLogs":"View server logs","toggleSidebar":"Toggle Sidebar"}}')},86355,(a,b,c)=>{b.exports={errors:{notFound:"Не найдено",unauthorized:"Не авторизован",forbidden:"Доступ запрещён",internal:"Внутренняя ошибка",unknown:"Произошла неизвестная ошибка",failedToLoad:"Не удалось загрузить {{resource}}",failedToSave:"Не удалось сохранить {{resource}}"},labels:{save:"Сохранить",cancel:"Отмена",confirm:"Подтвердить",delete:"Удалить",edit:"Редактировать",close:"Закрыть",back:"Назад",next:"Далее",yes:"Да",no:"Нет",enabled:"Включено",disabled:"Отключено",loading:"Загрузка...",saving:"Сохранение...",saved:"Сохранено",none:"Нет",default:"По умолчанию",custom:"Пользовательский"},status:{success:"Успешно",error:"Ошибка",warning:"Предупреждение",info:"Информация",pending:"Ожидание",inProgress:"В процессе",completed:"Завершено",failed:"Не удалось"},confirmation:{areYouSure:"Вы уверены?",cannotBeUndone:"Это действие нельзя отменить."},language:{en:"Английский",ru:"Русский",pt:"Португальский",es:"Испанский",ar:"Арабский",he:"Иврит",fr:"Французский",de:"Немецкий"}}},75861,(a,b,c)=>{b.exports=JSON.parse('{"settings":{"title":"Настройки","saving":"Сохранение...","saved":"Сохранено","failedToSave":"Не удалось сохранить настройки","sections":{"language":"Язык","agent":"Агент","environment":"Окружение","workflow":"Рабочий процесс","ci":"CI","timeouts":"Таймауты","notifications":"Уведомления","flags":"Флаги","chat":"Чат","layout":"Расположение","database":"База данных"},"language":{"title":"Язык","description":"Выберите предпочитаемый язык интерфейса","label":"Язык интерфейса","placeholder":"Выберите язык","failedToSave":"Не удалось сохранить настройки языка"},"agent":{"title":"Предпочитаемый агент","sectionTitle":"Агент","description":"Выберите AI-агента для кодирования и метод аутентификации","sectionDescription":"AI-агент для кодирования и аутентификация","agentType":"Тип агента","agentAndModel":"Агент и модель","agentAndModelDescription":"Провайдер и модель для всех операций","authMethod":"Метод аутентификации","apiToken":"API-токен","apiTokenPlaceholder":"Введите ваш API-токен","apiTokenHelper":"Сохраняется автоматически при выходе из поля","failedToSave":"Не удалось сохранить настройки агента","hint":"Выберите, какой AI-агент для кодирования будет использоваться для ваших функций. Каждый агент поддерживает разные модели и возможности. Аутентификация разрешается автоматически через вашу активную сессию.","links":{"agentSystem":"Система агентов","addingAgents":"Добавление агентов","configurationGuide":"Руководство по настройке"}},"environment":{"title":"IDE и терминал","sectionTitle":"Окружение","description":"Настройте редактор по умолчанию, оболочку и параметры терминала","sectionDescription":"Редактор, оболочка и параметры терминала","defaultEditor":"Редактор по умолчанию","defaultEditorDescription":"Редактор для операций с файлами","shellPreference":"Предпочитаемая оболочка","shell":"Оболочка","shellDescription":"Оболочка по умолчанию для сгенерированных скриптов","terminalEmulator":"Эмулятор терминала","terminal":"Терминал","terminalDescription":"Эмулятор терминала для сессий оболочки","systemTerminal":"Системный терминал","installed":"Установлено","notInstalled":"Не установлено","failedToSave":"Не удалось сохранить настройки IDE и терминала","hint":"Ваш предпочитаемый редактор открывает файлы для проверки. Настройка оболочки управляет сгенерированными скриптами. Эмулятор терминала запускается при открытии сессий оболочки из веб-интерфейса.","links":{"configurationGuide":"Руководство по настройке"}},"workflow":{"title":"Рабочий процесс","description":"Настройте поведение PR, этапы одобрения и параметры CI","sectionDescription":"Поведение автоматизации после реализации","defaultFastMode":"Быстрый режим по умолчанию","defaultFastModeDescription":"Пропустить фазы SDLC и реализовать напрямую из промпта","subsections":{"approve":"Одобрение","evidence":"Подтверждение","git":"Git"},"autoApprovePrd":"Автоодобрение PRD","autoApprovePrdDescription":"Пропустить ручную проверку требований","autoApprovePlan":"Автоодобрение плана","autoApprovePlanDescription":"Пропустить ручную проверку плана реализации","autoApproveMerge":"Автоодобрение слияния","autoApproveMergeDescription":"Сливать без ручной проверки","collectEvidence":"Сбор подтверждений","collectEvidenceDescription":"Делать скриншоты и сохранять артефакты после реализации","addEvidenceToPr":"Добавить подтверждения в PR","addEvidenceToPrDescription":"Включить подтверждения в тело запроса на слияние","pushOnComplete":"Отправить по завершении","pushOnCompleteDescription":"Отправить на удалённый сервер после завершения реализации","openPrOnComplete":"Открыть PR по завершении","openPrOnCompleteDescription":"Создать запрос на слияние по готовности","watchCiAfterPush":"Следить за CI после отправки","watchCiAfterPushDescription":"Отслеживать CI и автоматически исправлять ошибки. Отключите для избежания превышения лимитов.","approvalGates":"Этапы одобрения","prdAutoApproval":"Автоодобрение PRD","planAutoApproval":"Автоодобрение плана","mergeAutoApproval":"Автоодобрение слияния","ciSettings":"Настройки CI","ciWatchFixLoop":"Цикл наблюдения/исправления CI","maxFixAttempts":"Максимум попыток исправления","watchTimeout":"Таймаут наблюдения (секунды)","maxLogCharacters":"Максимум символов журнала","pollInterval":"Интервал опроса (секунды)","hideCiStatus":"Скрыть статус CI","stageTimeouts":"Таймауты этапов","failedToSave":"Не удалось сохранить настройки рабочего процесса","hint":"Управляйте степенью автономности каждого запуска функции. Автоодобрение пропускает паузу для ручной проверки на каждой фазе. Параметры отправки и PR определяют действия после успешной реализации.","links":{"approvalGates":"Этапы одобрения","pushAndPrFlags":"Флаги отправки и PR"}},"ci":{"title":"Непрерывная интеграция","description":"Лимиты и таймауты для мониторинга CI","maxFixAttempts":"Максимум попыток исправления","maxFixAttemptsDescription":"Повторные попытки агента при ошибках CI","watchTimeout":"Таймаут наблюдения","watchTimeoutDescription":"Максимальное ожидание завершения CI","maxLogSize":"Максимальный размер журнала","maxLogSizeDescription":"Обрезать журналы CI при превышении этого лимита","pollInterval":"Интервал опроса","pollIntervalDescription":"Частота проверки статуса CI на GitHub","hideCiStatus":"Скрыть статус CI","hideCiStatusDescription":"Скрыть значки статуса CI в панели функции и при проверке слияния","hint":"Когда функция завершается, агент может отслеживать CI и автоматически исправлять ошибки. Эти лимиты предотвращают бесконечные повторы и контролируют объём журналов, отправляемых агенту для анализа.","links":{"cicdPipeline":"Конвейер CI/CD","ciSecurityGates":"Этапы безопасности CI"}},"stageTimeouts":{"title":"Таймауты этапов","description":"Максимальное время выполнения на каждый этап агента","subsections":{"featureAgent":"Агент функции","analyzeRepoAgent":"Агент анализа репозитория"},"analyze":"Анализ","analyzeDescription":"Таймаут анализа репозитория","requirements":"Требования","requirementsDescription":"Таймаут сбора требований","research":"Исследование","researchDescription":"Таймаут технического исследования","plan":"План","planDescription":"Таймаут планирования реализации","implement":"Реализация","implementDescription":"Таймаут реализации кода","merge":"Слияние","mergeDescription":"Таймаут создания PR и слияния","hint":"Каждый агент имеет независимо настраиваемые таймауты этапов. При превышении таймаута агент завершается. Более длительные таймауты полезны для сложных реализаций. Агент функции по умолчанию использует 30 минут на этап. Агент анализа репозитория по умолчанию использует 10 минут."},"notifications":{"title":"Уведомления","description":"Настройте каналы уведомлений и предпочтения событий","sectionDescription":"Как и когда вы получаете уведомления","channels":"Каналы","inApp":"В приложении","inAppLabel":"В приложении","inAppDescription":"Уведомления внутри интерфейса ShipIT AI","subsections":{"agentEvents":"События агента","pullRequestEvents":"События запросов на слияние"},"events":{"agentStarted":"Агент запущен","phaseCompleted":"Фаза завершена","waitingApproval":"Ожидание одобрения","agentCompleted":"Агент завершил работу","agentFailed":"Ошибка агента","mergeReviewReady":"Проверка слияния готова","prMerged":"PR слит","prClosed":"PR закрыт","prChecksPassed":"Проверки PR пройдены","prChecksFailed":"Проверки PR не пройдены","prBlocked":"PR заблокирован"},"failedToSave":"Не удалось сохранить настройки уведомлений","hint":"Всплывающие уведомления в приложении держат вас в курсе. Тонко настройте, какие события жизненного цикла агента вызывают уведомление.","links":{"notificationSystem":"Система уведомлений"}},"featureFlags":{"title":"Флаги функций","description":"Включить или отключить экспериментальные и бета-функции","sectionDescription":"Включение или отключение экспериментальных функций","badge":"Экспериментальный","skills":"Навыки","skillsDescription":"Включить систему навыков для возможностей агента","deployments":"Развёртывания","deploymentsDescription":"Включить рабочие процессы развёртывания окружений","debug":"Отладка","debugDescription":"Показать панели отладки и подробное логирование","githubImport":"Импорт из GitHub","githubImportDescription":"Включить импорт репозиториев GitHub в веб-интерфейсе","adoptBranch":"Принять ветку","adoptBranchDescription":"Импортировать существующие ветки как отслеживаемые функции","gitRebaseSync":"Git Rebase и синхронизация","gitRebaseSyncDescription":"Включить операции git rebase-on-main и sync-main","reactFileManager":"Файловый менеджер React","reactFileManagerDescription":"Использовать встроенный файловый менеджер React вместо системного выбора папок","hint":"Экспериментальные функции, которые ещё находятся в разработке. Включайте на свой страх и риск — они могут измениться или быть удалены в будущих версиях. Режим отладки добавляет подробное логирование, полезное для устранения неполадок."},"interactiveAgent":{"title":"Интерактивный агент","description":"Настройки вкладки чата для интерактивных сессий агента по функциям","enableChatTab":"Включить вкладку чата","enableChatTabDescription":"Показать вкладку чата на всех страницах деталей функций","autoTimeout":"Автоматический таймаут","autoTimeoutDescription":"Минуты неактивности перед автоматической остановкой агента (1-120)","maxConcurrentSessions":"Максимум параллельных сессий","maxConcurrentSessionsDescription":"Максимальное количество активных интерактивных сессий агента одновременно (1-10)","hint":"Вкладка чата запускает постоянный процесс агента для каждой функции. Автоматический таймаут останавливает неактивные сессии для экономии ресурсов. Ограничение параллельных сессий предотвращает чрезмерное использование ресурсов на машинах разработчиков."},"fabLayout":{"title":"Расположение","description":"Управление положением плавающих кнопок действий в центре управления","swapPosition":"Поменять местами кнопки","swapPositionDescription":"Переместить кнопку чата влево, а кнопку создания вправо","hint":"Две плавающие кнопки действий (Создать и Чат) расположены в нижних углах центра управления. Включите эту опцию, чтобы поменять их местами."},"database":{"title":"База данных","description":"Путь к базе данных и управление","sectionDescription":"Информация о локальном хранилище","location":"Расположение","locationDescription":"Путь к локальной базе данных SQLite","size":"Размер","hint":"Все настройки хранятся в локальной базе данных SQLite по пути ~/.shipit-ai/data. База данных использует шаблон единственной записи с автоматическими миграциями при запуске.","links":{"settingsService":"Сервис настроек","settingsSpec":"Спецификация настроек"}}},"navigation":{"controlCenter":"Центр управления","dashboard":"Панель управления","features":"Функции","repositories":"Репозитории","settings":"Настройки","sessions":"Сессии","tools":"Инструменты","skills":"Навыки"},"sidebar":{"features":"Функции","switchToLight":"Светлая тема","switchToDark":"Тёмная тема","muteSounds":"Отключить звуки","unmuteSounds":"Включить звуки","statusActionNeeded":"Требуется действие","statusInProgress":"В процессе","statusPending":"Ожидание","statusBlocked":"Заблокировано","statusError":"Ошибка","statusDone":"Завершено"},"deleteFeature":{"title":"Удалить функцию?","description":"Это навсегда удалит <strong>{{featureName}}</strong> ({{featureId}}). Это действие нельзя отменить.","cleanupLabel":"Очистить рабочее дерево и ветки","deleteSubFeatures":"Удалить подфункции","closePullRequest":"Закрыть запрос на слияние","cancel":"Отмена","deleting":"Удаление…","delete":"Удалить"},"rejectFeedback":{"defaultTitle":"Отклонить требования","defaultDescription":"Предоставьте обратную связь для агента к следующей итерации. Обратная связь обязательна.","ariaLabel":"Обратная связь при отклонении","placeholder":"Опишите, что нужно изменить...","cancel":"Отмена","rejecting":"Отклонение…","confirmReject":"Подтвердить отклонение"},"emptyState":{"addProject":"Добавить проект","addProjectDescription":"Добавьте папку проекта для создания функций.","addProjectDescriptionLine2":"Опишите, что вам нужно — ShipIT AI сделает остальное.","checkingSetup":"Проверка настройки…","ready":"{{label}} готов","notInstalled":"{{label}} не установлен","reCheck":"Проверить снова","needsAuth":"{{label}} требует аутентификации","open":"Открыть {{label}}","checking":"Проверка {{label}}…","notFound":"{{label}} не найден","docs":"Документация","opening":"Открытие…","chooseFolder":"Выбрать папку","folderHint":"Подойдёт любая папка — git будет инициализирован автоматически при необходимости.","orUseCli":"или используйте CLI","copyCommands":"Копировать команды","git":"Git","gitRequired":"Необходим для всех фаз","githubCli":"GitHub CLI","githubCliRequired":"Необходим для запросов на слияние"},"welcome":{"loadingAgents":"Загрузка агентов…","chooseAgent":"Выберите вашего агента","pickModel":"Выберите модель","selectAgentSubtitle":"Выберите AI-агента для кодирования, который будет использовать ShipIT AI.","chooseModelSubtitle":"Выберите модель {{label}} для запуска.","ghCliNotice":"<0>GitHub CLI (gh)</0> необходим для полноценных возможностей CI/CD самовосстановления. <1>Установите здесь</1>.","ghCliRequired":"GitHub CLI (gh)","ghCliRequiredText":"необходим для полноценных возможностей CI/CD самовосстановления.","installHere":"Установите здесь","back":"Назад"},"canvas":{"noFeatures":"Функций пока нет","noFeaturesDescription":"Начните с создания вашей первой функции.","newFeature":"Новая функция","hideArchived":"Скрыть архивные","showArchived":"Показать архивные","hideArchivedLabel":"Скрыть архивные","showArchivedLabel":"Показать архивные","zoomOut":"Уменьшить","zoomIn":"Увеличить","fitView":"Вписать в экран","resetView":"Сбросить вид"},"common":{"noData":"Нет данных","retry":"Повторить","saving":"Сохранение...","saved":"Сохранено","decrease":"Уменьшить","increase":"Увеличить","cancel":"Отмена"},"featureNode":{"archiveFeature":"Архивировать функцию","deleteFeature":"Удалить функцию","unarchiveFeature":"Разархивировать функцию","archiveConfirmTitle":"Архивировать функцию?","archiveConfirmDescription":"<strong>{{name}}</strong> будет скрыта с канвы. Вы сможете разархивировать её позже.","cancel":"Отмена","archive":"Архивировать","fastMode":"Быстрый режим","specDriven":"По спецификации","copied":"Скопировано!","chatWithAgent":"Чат с агентом","stopDevServer":"Остановить сервер","startDevServer":"Запустить сервер","retryDevServer":"Перезапустить сервер","starting":"Запуск…","retry":"Повторить","start":"Запуск","failed":"Ошибка","deleting":"Удаление…","addFeature":"Добавить функцию","reviewRequirements":"Проверить требования","reviewTechnicalPlan":"Проверить технический план","reviewChanges":"Проверить изменения","review":"Проверка","creating":"Создание...","completedIn":"Завершено за {{runtime}}","completed":"Завершено","waitingOn":"Ожидание {{blockedBy}}","blocked":"Заблокировано","pending":"Ожидает","somethingWentWrong":"Что-то пошло не так","openChat":"Открыть чат","viewSessions":"Просмотр сессий","sessionsActive":"Сессии (активные)","sessions":"Сессии","agentSessions":"Сессии агента","noSessionsFound":"Сессии не найдены","showLess":"Показать меньше","showMore":"Показать ещё {{count}}"},"repositoryNode":{"removeRepository":"Удалить репозиторий","removeConfirmTitle":"Удалить репозиторий?","removeConfirmDescription":"Это удалит <strong>{{name}}</strong> и все его функции из рабочего пространства. Файлы на диске не будут затронуты.","cancel":"Отмена","remove":"Удалить","openInIde":"Открыть в IDE","openInShell":"Открыть в терминале","openFolder":"Открыть папку","chatWithAgent":"Чат с агентом","newFeature":"Новая функция","new":"Новая","behind":"{{count}} позади","notAGitRepository":"Не является git-репозиторием","starting":"Запуск...","run":"Запуск","startLocalEnvironment":"запустить локальное окружение","stopDevServer":"Остановить сервер","startDevServer":"Запустить сервер","retry":"Повторить"},"fab":{"closeActions":"Закрыть действия","createNew":"Создать новое","newFeature":"Новая функция","localFolder":"Локальная папка","adoptBranch":"Принять ветку","fromGithub":"Из GitHub"},"chat":{"shipitAiChat":"ShipIT AI Чат","writeMessage":"Напишите сообщение...","attachFiles":"Прикрепить файлы","forceStopAgent":"Принудительно остановить агента","stop":"Стоп","clearChatHistory":"Очистить историю чата","clear":"Очистить","noSession":"Нет сессии","yourMessage":"Ваше сообщение","agentMessage":"Сообщение агента","agentIsTyping":"Агент печатает","showMore":"Показать больше","showLess":"Показать меньше","code":"Код","preview":"Предпросмотр","openFullscreen":"Открыть на весь экран","htmlPreview":"HTML-предпросмотр","htmlPreviewFullscreen":"HTML-предпросмотр на весь экран"},"createDrawer":{"title":"НОВАЯ ФУНКЦИЯ","creating":"Создание...","cancel":"Отмена","createFeature":"+ Создать функцию","repository":"РЕПОЗИТОРИЙ","describeFeature":"ОПИШИТЕ ВАШУ ФУНКЦИЮ","featurePlaceholder":"напр. Добавить авторизацию через GitHub OAuth с обработкой обратного вызова и обновлением токена...","parentFeature":"РОДИТЕЛЬСКАЯ ФУНКЦИЯ","selectParent":"Выберите родительскую функцию...","searchFeatures":"Поиск функций...","noParent":"Без родителя","noFeaturesFound":"Функции не найдены.","searchRepositories":"Поиск репозиториев...","approve":"ОДОБРЕНИЕ","approveDescription":"Автоодобрение переходов между фазами без ручной проверки.","skippedInFastMode":"Пропущено в быстром режиме","all":"Все","toggleAllApprovalGates":"Переключить все этапы одобрения","evidence":"ПОДТВЕРЖДЕНИЯ","evidenceDescription":"Сбор и прикрепление подтверждений после реализации.","collect":"Сбор","collectDescription":"Делать скриншоты и сохранять артефакты после реализации.","addToPr":"Добавить в PR","requiresPr":"Требуется включённый PR","requiresEvidence":"Требуется включённый сбор подтверждений","addToPrDescription":"Включить подтверждения в тело запроса на слияние.","git":"GIT","push":"Отправить","pushDescription":"Отправить ветку на удалённый сервер после реализации.","pr":"PR","prDescription":"Открыть запрос на слияние после отправки.","watch":"Наблюдение","watchDescription":"Следить за CI и автоматически исправлять ошибки.","sync":"Sync","syncDescription":"Pull latest main from remote before creating the feature branch.","commitSpecs":"Коммит спецификаций","commitSpecsDescription":"Закоммитить спецификации в репозиторий.","forkAndPr":"Форк и PR","forkAndPrDescription":"Внести вклад через форк (PR в upstream).","pendingMode":"Ожидание","pendingModeDescription":"Создать без запуска — запустить вручную позже.","fastModeLabel":"Быстрый режим","fastModeDescription":"Пропустить фазы SDLC и реализовать напрямую из промпта.","fileDropZone":"Зона перетаскивания файлов","prd":"PRD","prdDescription":"Автоодобрение перехода требований к планированию.","plan":"План","planDescription":"Автоодобрение перехода планирования к реализации.","merge":"Слияние","mergeDescription":"Автоодобрение перехода слияния к завершению."},"featureDrawer":{"copyFeatureId":"Копировать ID функции","unarchiveFeature":"Разархивировать функцию","archiveFeature":"Архивировать функцию","deleteFeature":"Удалить функцию","stopDevServer":"Остановить сервер","startDevServer":"Запустить сервер","failedToReject":"Не удалось отклонить {{label}}","rejected":"{{label}} отклонено — агент повторяет (итерация {{n}})","excessiveIterations":"Итерация {{n}} — рассмотрите одобрение или корректировку отзыва","failedToApprove":"Не удалось одобрить {{label}}","approved":"{{label}} одобрено — агент продолжает","failedToApproveRequirements":"Не удалось одобрить требования","requirementsApproved":"Требования одобрены — агент продолжает","featureResumed":"Функция возобновлена — агент перезапускается","featureStarted":"Функция запущена","approvePlan":"Одобрить план","sendRevisionFeedback":"Отправить отзыв для доработки"},"overviewTab":{"created":"Создано","runtime":"Время выполнения","runningFor":"Работает","blockedBy":"Заблокировано","error":"Ошибка","prd":"PRD","plan":"План","merge":"Слияние","collect":"Сбор","addToPr":"Добавить в PR","push":"Отправка","pr":"PR","watch":"Наблюдение","commitSpecs":"Коммит спецификаций","forkAndPr":"Форк и PR"},"activityTab":{"copyPromptToClipboard":"Копировать промпт в буфер обмена","execution":"Выполнение","wait":"Ожидание","cost":"Стоимость","noActivityRecorded":"Активность пока не зафиксирована"},"logTab":{"structuredView":"Структурированный вид","rawView":"Исходный вид","noLogOutput":"Журнал пока пуст"},"planTab":{"noPlanCreated":"План пока не создан"},"branchSyncStatus":{"refreshSyncStatus":"Обновить статус синхронизации","rebaseOnMain":"Rebase на Main"},"drawerActionBar":{"fileDropZone":"Зона перетаскивания файлов","askAiToRevise":"Попросить AI доработать...","attachFiles":"Прикрепить файлы","reject":"Отклонить","sendRevisionFeedback":"Отправить отзыв для доработки","approve":"Одобрить","fileTooLarge":"\\"{{name}}\\" превышает лимит 10 МБ","fileTypeNotAllowed":"Тип файла \\"{{ext}}\\" не разрешён","uploadFailed":"Ошибка загрузки"},"taskProgress":{"done":"Готово","inProgress":"В процессе","review":"На проверке","todo":"К выполнению","noTasksDefined":"Задачи пока не определены"},"repositoryDrawer":{"openInIde":"Открыть в IDE","openInShell":"Открыть в терминале","openFolder":"Открыть папку","syncMain":"Синхронизировать Main"},"adoptBranch":{"failedToAdopt":"Не удалось принять ветку","repository":"Репозиторий","branchName":"Имя ветки","searchRepositories":"Поиск репозиториев...","searchBranches":"Поиск веток..."},"githubImport":{"title":"Импорт из GitHub","description":"Клонировать репозиторий GitHub и добавить в ShipIT AI.","githubUrl":"URL GitHub","urlPlaceholder":"owner/repo или https://github.com/owner/repo","searchRepositories":"Поиск репозиториев..."},"versionBadge":{"version":"Версия","branch":"Ветка","commit":"Коммит","path":"Путь"},"mergeReview":{"download":"Скачать","dataUnavailable":"Данные проверки слияния недоступны"},"baseDrawer":{"close":"Закрыть","stopDevServer":"Остановить сервер","startDevServer":"Запустить сервер"},"addRepository":{"addRepository":"Добавить репозиторий"},"modelPicker":{"searchPlaceholder":"Поиск или введите ID модели…"},"skills":{"searchPlaceholder":"Поиск навыков..."},"tools":{"noCategoryTools":"Нет инструментов в этой категории."},"accessibility":{"close":"Закрыть","loading":"Загрузка","send":"Отправить","imageNotes":"Заметки к изображению","viewServerLogs":"Просмотр журналов сервера","toggleSidebar":"Переключить боковую панель"}}')},66609,(a,b,c)=>{b.exports={errors:{notFound:"Não encontrado",unauthorized:"Não autorizado",forbidden:"Proibido",internal:"Erro interno",unknown:"Ocorreu um erro desconhecido",failedToLoad:"Falha ao carregar {{resource}}",failedToSave:"Falha ao salvar {{resource}}"},labels:{save:"Salvar",cancel:"Cancelar",confirm:"Confirmar",delete:"Excluir",edit:"Editar",close:"Fechar",back:"Voltar",next:"Próximo",yes:"Sim",no:"Não",enabled:"Ativado",disabled:"Desativado",loading:"Carregando...",saving:"Salvando...",saved:"Salvo",none:"Nenhum",default:"Padrão",custom:"Personalizado"},status:{success:"Sucesso",error:"Erro",warning:"Aviso",info:"Informação",pending:"Pendente",inProgress:"Em Andamento",completed:"Concluído",failed:"Falhou"},confirmation:{areYouSure:"Tem certeza?",cannotBeUndone:"Esta ação não pode ser desfeita."},language:{en:"Inglês",ru:"Russo",pt:"Português",es:"Espanhol",ar:"Árabe",he:"Hebraico",fr:"Francês",de:"Alemão"}}},20366,(a,b,c)=>{b.exports=JSON.parse('{"settings":{"title":"Configurações","saving":"Salvando...","saved":"Salvo","failedToSave":"Falha ao salvar configurações","sections":{"language":"Idioma","agent":"Agente","environment":"Ambiente","workflow":"Fluxo de Trabalho","ci":"CI","timeouts":"Tempos Limite","notifications":"Notificações","flags":"Flags","chat":"Chat","layout":"Layout","database":"Banco de Dados"},"language":{"title":"Idioma","description":"Escolha seu idioma de exibição preferido","label":"Idioma de Exibição","placeholder":"Selecione um idioma","failedToSave":"Falha ao salvar configurações de idioma"},"agent":{"title":"Agente Preferido","sectionTitle":"Agente","description":"Escolha seu agente de codificação AI e método de autenticação","sectionDescription":"Agente de codificação AI e autenticação","agentType":"Tipo de Agente","agentAndModel":"Agente e Modelo","agentAndModelDescription":"Provedor e modelo para todas as operações","authMethod":"Método de Autenticação","apiToken":"Token de API","apiTokenPlaceholder":"Insira seu token de API","apiTokenHelper":"Salva automaticamente quando você sai do campo","failedToSave":"Falha ao salvar configurações do agente","hint":"Escolha qual agente de codificação AI alimenta seus recursos. Cada agente suporta diferentes modelos e capacidades. A autenticação é resolvida automaticamente via sua sessão ativa.","links":{"agentSystem":"Sistema de agentes","addingAgents":"Adicionando agentes","configurationGuide":"Guia de configuração"}},"environment":{"title":"IDE e Terminal","sectionTitle":"Ambiente","description":"Configure seu editor, shell e preferências de terminal padrão","sectionDescription":"Preferências de editor, shell e terminal","defaultEditor":"Editor Padrão","defaultEditorDescription":"Editor aberto para operações com arquivos","shellPreference":"Preferência de Shell","shell":"Shell","shellDescription":"Shell padrão para scripts gerados","terminalEmulator":"Emulador de Terminal","terminal":"Terminal","terminalDescription":"Emulador de terminal para sessões de shell","systemTerminal":"Terminal do Sistema","installed":"Instalado","notInstalled":"Não instalado","failedToSave":"Falha ao salvar configurações de IDE e Terminal","hint":"Seu editor preferido abre arquivos para revisão. A configuração de shell controla scripts gerados. O emulador de terminal é aberto ao iniciar sessões de shell pela interface web.","links":{"configurationGuide":"Guia de configuração"}},"workflow":{"title":"Fluxo de Trabalho","description":"Configure o comportamento de PR, portas de aprovação e configurações de CI","sectionDescription":"Comportamento de automação após a implementação","defaultFastMode":"Modo rápido por padrão","defaultFastModeDescription":"Pular fases SDLC e implementar direto do prompt","subsections":{"approve":"Aprovar","evidence":"Evidência","git":"Git"},"autoApprovePrd":"Aprovar PRD automaticamente","autoApprovePrdDescription":"Pular revisão manual dos requisitos","autoApprovePlan":"Aprovar Plano automaticamente","autoApprovePlanDescription":"Pular revisão manual do plano de implementação","autoApproveMerge":"Aprovar Merge automaticamente","autoApproveMergeDescription":"Fazer merge sem revisão manual","collectEvidence":"Coletar evidências","collectEvidenceDescription":"Capturar screenshots e artefatos após a implementação","addEvidenceToPr":"Adicionar evidências ao PR","addEvidenceToPrDescription":"Incluir evidências no corpo do pull request","pushOnComplete":"Push ao concluir","pushOnCompleteDescription":"Enviar para o remoto quando a implementação terminar","openPrOnComplete":"Abrir PR ao concluir","openPrOnCompleteDescription":"Criar um pull request quando terminar","watchCiAfterPush":"Monitorar CI após push","watchCiAfterPushDescription":"Monitorar CI e corrigir falhas automaticamente. Desative para evitar limites de taxa.","approvalGates":"Portas de Aprovação","prdAutoApproval":"Aprovação automática de PRD","planAutoApproval":"Aprovação automática de plano","mergeAutoApproval":"Aprovação automática de merge","ciSettings":"Configurações de CI","ciWatchFixLoop":"Loop de monitoramento/correção de CI","maxFixAttempts":"Máximo de tentativas de correção","watchTimeout":"Tempo limite de monitoramento (segundos)","maxLogCharacters":"Máximo de caracteres no log","pollInterval":"Intervalo de consulta (segundos)","hideCiStatus":"Ocultar Status de CI","stageTimeouts":"Tempos Limite por Estágio","failedToSave":"Falha ao salvar configurações de fluxo de trabalho","hint":"Controle quão autônoma é cada execução de recurso. Aprovação automática pula a pausa de revisão humana em cada fase. As opções de push e PR controlam o que acontece após uma implementação bem-sucedida.","links":{"approvalGates":"Portas de aprovação","pushAndPrFlags":"Flags de push e PR"}},"ci":{"title":"Integração Contínua","description":"Limites e tempos limite para monitoramento de CI","maxFixAttempts":"Máximo de tentativas de correção","maxFixAttemptsDescription":"Tentativas do agente em CI com falha","watchTimeout":"Tempo limite de monitoramento","watchTimeoutDescription":"Espera máxima para conclusão do CI","maxLogSize":"Tamanho máximo do log","maxLogSizeDescription":"Truncar logs de CI além deste limite","pollInterval":"Intervalo de consulta","pollIntervalDescription":"Frequência de verificação do status de CI no GitHub","hideCiStatus":"Ocultar status de CI","hideCiStatusDescription":"Ocultar badges de status de CI no painel de recurso e revisão de merge","hint":"Quando um recurso é concluído, o agente pode monitorar o CI e corrigir falhas automaticamente. Estes limites evitam repetições descontroladas e controlam quanto da saída de log é enviada ao agente para análise.","links":{"cicdPipeline":"Pipeline CI/CD","ciSecurityGates":"Portas de segurança CI"}},"stageTimeouts":{"title":"Tempos Limite por Estágio","description":"Tempo máximo de execução por estágio do agente","subsections":{"featureAgent":"Agente de Recurso","analyzeRepoAgent":"Agente de Análise de Repositório"},"analyze":"Analisar","analyzeDescription":"Tempo limite para análise de repositório","requirements":"Requisitos","requirementsDescription":"Tempo limite para coleta de requisitos","research":"Pesquisa","researchDescription":"Tempo limite para pesquisa técnica","plan":"Plano","planDescription":"Tempo limite para planejamento de implementação","implement":"Implementar","implementDescription":"Tempo limite para implementação de código","merge":"Merge","mergeDescription":"Tempo limite para criação e merge de PR","hint":"Cada agente tem tempos limite de estágio configuráveis independentemente. Quando um estágio excede seu tempo limite, o agente é encerrado. Tempos limite maiores são úteis para implementações complexas. O agente de recurso tem padrão de 30 minutos por estágio. O agente de análise de repositório tem padrão de 10 minutos."},"notifications":{"title":"Notificações","description":"Configure canais de notificação e preferências de eventos","sectionDescription":"Como e quando você é notificado","channels":"Canais","inApp":"No Aplicativo","inAppLabel":"No aplicativo","inAppDescription":"Notificações dentro da interface do ShipIT AI","subsections":{"agentEvents":"Eventos do Agente","pullRequestEvents":"Eventos de Pull Request"},"events":{"agentStarted":"Agente iniciado","phaseCompleted":"Fase concluída","waitingApproval":"Aguardando aprovação","agentCompleted":"Agente concluído","agentFailed":"Agente falhou","mergeReviewReady":"Revisão de merge pronta","prMerged":"PR mergeado","prClosed":"PR fechado","prChecksPassed":"Verificações do PR aprovadas","prChecksFailed":"Verificações do PR falharam","prBlocked":"PR bloqueado"},"failedToSave":"Falha ao salvar configurações de notificação","hint":"Notificações toast no aplicativo mantêm você informado. Ajuste quais eventos do ciclo de vida do agente disparam uma notificação.","links":{"notificationSystem":"Sistema de notificações"}},"featureFlags":{"title":"Feature Flags","description":"Alternar recursos experimentais e beta","sectionDescription":"Ativar ou desativar recursos experimentais","badge":"Experimental","skills":"Skills","skillsDescription":"Ativar o sistema de skills para capacidades do agente","deployments":"Implantações","deploymentsDescription":"Ativar fluxos de trabalho de implantação em ambientes","debug":"Debug","debugDescription":"Mostrar painéis de debug e logs detalhados","githubImport":"Importação do GitHub","githubImportDescription":"Ativar importação de repositório GitHub na interface web","adoptBranch":"Adotar Branch","adoptBranchDescription":"Importar branches existentes como recursos rastreados","gitRebaseSync":"Git Rebase e Sync","gitRebaseSyncDescription":"Ativar operações de git rebase-on-main e sync-main","reactFileManager":"Gerenciador de Arquivos React","reactFileManagerDescription":"Usar o gerenciador de arquivos React integrado em vez do seletor de pastas nativo do SO","hint":"Recursos experimentais que ainda estão em desenvolvimento. Ative por sua conta e risco — podem mudar ou ser removidos em versões futuras. O modo debug adiciona logs detalhados úteis para solução de problemas."},"interactiveAgent":{"title":"Agente Interativo","description":"Configurações da aba Chat para sessões de agente interativo por recurso","enableChatTab":"Ativar aba Chat","enableChatTabDescription":"Mostrar a aba Chat em todas as páginas de detalhes de recurso","autoTimeout":"Tempo limite automático","autoTimeoutDescription":"Minutos de inatividade antes do agente ser parado automaticamente (1-120)","maxConcurrentSessions":"Máximo de sessões simultâneas","maxConcurrentSessionsDescription":"Número máximo de sessões de agente interativo ativas ao mesmo tempo (1-10)","hint":"A aba Chat inicia um processo de agente persistente por recurso. O tempo limite automático para sessões ociosas automaticamente para economizar recursos. O limite de sessões simultâneas evita uso excessivo de recursos em máquinas de desenvolvimento."},"fabLayout":{"title":"Layout","description":"Controlar a posição dos botões de ação flutuantes no centro de controle","swapPosition":"Trocar posições dos FABs","swapPositionDescription":"Mover o botão de Chat para a esquerda e o de Criar para a direita","hint":"Os dois botões de ação flutuantes (Criar e Chat) ficam nos cantos inferiores do centro de controle. Ative esta opção para trocar suas posições."},"database":{"title":"Banco de Dados","description":"Caminho e gerenciamento do banco de dados","sectionDescription":"Informações de armazenamento local","location":"Localização","locationDescription":"Caminho para o banco de dados SQLite local","size":"Tamanho","hint":"Todas as configurações são armazenadas em um banco de dados SQLite local em ~/.shipit-ai/data. O banco de dados usa um padrão de registro único com migrações automáticas na inicialização.","links":{"settingsService":"Serviço de configurações","settingsSpec":"Especificação de configurações"}}},"navigation":{"controlCenter":"Centro de Controle","dashboard":"Painel","features":"Recursos","repositories":"Repositórios","settings":"Configurações","sessions":"Sessões","tools":"Ferramentas","skills":"Skills"},"sidebar":{"features":"Recursos","switchToLight":"Modo claro","switchToDark":"Modo escuro","muteSounds":"Silenciar sons","unmuteSounds":"Ativar sons","statusActionNeeded":"Ação necessária","statusInProgress":"Em andamento","statusPending":"Pendente","statusBlocked":"Bloqueado","statusError":"Erro","statusDone":"Concluído"},"deleteFeature":{"title":"Excluir recurso?","description":"Isso excluirá permanentemente <strong>{{featureName}}</strong> ({{featureId}}). Esta ação não pode ser desfeita.","cleanupLabel":"Limpar worktree e branches","deleteSubFeatures":"Excluir sub-recursos","closePullRequest":"Fechar pull request","cancel":"Cancelar","deleting":"Excluindo…","delete":"Excluir"},"rejectFeedback":{"defaultTitle":"Rejeitar Requisitos","defaultDescription":"Forneça feedback para o agente abordar na próxima iteração. Feedback é obrigatório.","ariaLabel":"Feedback de rejeição","placeholder":"Descreva o que precisa mudar...","cancel":"Cancelar","rejecting":"Rejeitando…","confirmReject":"Confirmar Rejeição"},"emptyState":{"addProject":"Adicionar um projeto","addProjectDescription":"Adicione sua pasta de projeto para desbloquear a criação de recursos.","addProjectDescriptionLine2":"Descreva o que você precisa — o ShipIT AI cuida do resto.","checkingSetup":"Verificando configuração…","ready":"{{label}} pronto","notInstalled":"{{label}} não instalado","reCheck":"Verificar novamente","needsAuth":"{{label}} precisa de autenticação","open":"Abrir {{label}}","checking":"Verificando {{label}}…","notFound":"{{label}} não encontrado","docs":"Docs","opening":"Abrindo…","chooseFolder":"Escolha uma Pasta","folderHint":"Qualquer pasta funciona — o git será inicializado automaticamente se necessário.","orUseCli":"ou use o CLI","copyCommands":"Copiar comandos","git":"Git","gitRequired":"Necessário para todas as fases","githubCli":"GitHub CLI","githubCliRequired":"Necessário para pull requests"},"welcome":{"loadingAgents":"Carregando agentes…","chooseAgent":"Escolha seu agente","pickModel":"Escolha um modelo","selectAgentSubtitle":"Selecione o agente de codificação AI que você quer que o ShipIT AI use.","chooseModelSubtitle":"Escolha qual modelo {{label}} executar.","ghCliNotice":"<0>GitHub CLI (gh)</0> é necessário para recursos completos de autocorreção CI/CD. <1>Instale aqui</1>.","ghCliRequired":"GitHub CLI (gh)","ghCliRequiredText":"é necessário para recursos completos de autocorreção CI/CD.","installHere":"Instale aqui","back":"Voltar"},"canvas":{"noFeatures":"Nenhum recurso ainda","noFeaturesDescription":"Comece criando seu primeiro recurso.","newFeature":"Novo Recurso","hideArchived":"Ocultar arquivados","showArchived":"Mostrar arquivados","hideArchivedLabel":"Ocultar Arquivados","showArchivedLabel":"Mostrar Arquivados","zoomOut":"Diminuir zoom","zoomIn":"Aumentar zoom","fitView":"Ajustar à tela","resetView":"Redefinir visualização"},"common":{"noData":"Nenhum dado disponível","retry":"Tentar novamente","saving":"Salvando...","saved":"Salvo","decrease":"Diminuir","increase":"Aumentar","cancel":"Cancelar"},"featureNode":{"archiveFeature":"Arquivar funcionalidade","deleteFeature":"Excluir funcionalidade","unarchiveFeature":"Desarquivar funcionalidade","archiveConfirmTitle":"Arquivar funcionalidade?","archiveConfirmDescription":"<strong>{{name}}</strong> será ocultada do canvas. Você pode desarquivá-la depois.","cancel":"Cancelar","archive":"Arquivar","fastMode":"Modo rápido","specDriven":"Baseado em especificação","copied":"Copiado!","chatWithAgent":"Chat com agente","stopDevServer":"Parar servidor","startDevServer":"Iniciar servidor","retryDevServer":"Reiniciar servidor","starting":"Iniciando…","retry":"Tentar novamente","start":"Iniciar","failed":"Falhou","deleting":"Excluindo…","addFeature":"Adicionar funcionalidade","reviewRequirements":"Revisar requisitos","reviewTechnicalPlan":"Revisar plano técnico","reviewChanges":"Revisar alterações","review":"Revisão","creating":"Criando...","completedIn":"Concluído em {{runtime}}","completed":"Concluído","waitingOn":"Aguardando {{blockedBy}}","blocked":"Bloqueado","pending":"Pendente","somethingWentWrong":"Algo deu errado","openChat":"Abrir chat","viewSessions":"Ver sessões","sessionsActive":"Sessões (ativas)","sessions":"Sessões","agentSessions":"Sessões do agente","noSessionsFound":"Nenhuma sessão encontrada","showLess":"Mostrar menos","showMore":"Mostrar mais {{count}}"},"repositoryNode":{"removeRepository":"Remover repositório","removeConfirmTitle":"Remover repositório?","removeConfirmDescription":"Isso removerá <strong>{{name}}</strong> e todas as suas funcionalidades do workspace. Os arquivos no disco não serão afetados.","cancel":"Cancelar","remove":"Remover","openInIde":"Abrir no IDE","openInShell":"Abrir no terminal","openFolder":"Abrir pasta","chatWithAgent":"Chat com agente","newFeature":"Nova funcionalidade","new":"Nova","behind":"{{count}} atrás","notAGitRepository":"Não é um repositório git","starting":"Iniciando...","run":"Executar","startLocalEnvironment":"iniciar ambiente local","stopDevServer":"Parar servidor","startDevServer":"Iniciar servidor","retry":"Tentar novamente"},"fab":{"closeActions":"Fechar ações","createNew":"Criar novo","newFeature":"Nova funcionalidade","localFolder":"Pasta local","adoptBranch":"Adotar branch","fromGithub":"Do GitHub"},"chat":{"shipitAiChat":"ShipIT AI Chat","writeMessage":"Escreva uma mensagem...","attachFiles":"Anexar arquivos","forceStopAgent":"Forçar parada do agente","stop":"Parar","clearChatHistory":"Limpar histórico do chat","clear":"Limpar","noSession":"Sem sessão","yourMessage":"Sua mensagem","agentMessage":"Mensagem do agente","agentIsTyping":"Agente digitando","showMore":"Mostrar mais","showLess":"Mostrar menos","code":"Código","preview":"Visualização","openFullscreen":"Abrir tela cheia","htmlPreview":"Visualização HTML","htmlPreviewFullscreen":"Visualização HTML tela cheia"},"createDrawer":{"title":"NOVA FUNCIONALIDADE","creating":"Criando...","cancel":"Cancelar","createFeature":"+ Criar funcionalidade","repository":"REPOSITÓRIO","describeFeature":"DESCREVA SUA FUNCIONALIDADE","featurePlaceholder":"ex. Adicionar login com GitHub OAuth com tratamento de callback e renovação de token...","parentFeature":"FUNCIONALIDADE PAI","selectParent":"Selecionar funcionalidade pai...","searchFeatures":"Buscar funcionalidades...","noParent":"Sem pai","noFeaturesFound":"Nenhuma funcionalidade encontrada.","searchRepositories":"Buscar repositórios...","approve":"APROVAÇÃO","approveDescription":"Auto-aprovar transições de fase sem revisão manual.","skippedInFastMode":"Ignorado no modo rápido","all":"Todos","toggleAllApprovalGates":"Alternar todas as aprovações","evidence":"EVIDÊNCIA","evidenceDescription":"Coletar e anexar evidências após implementação.","collect":"Coletar","collectDescription":"Capturar screenshots e artefatos após implementação.","addToPr":"Adicionar ao PR","requiresPr":"Requer PR habilitado","requiresEvidence":"Requer coleta de evidências habilitada","addToPrDescription":"Incluir evidências no corpo do pull request.","git":"GIT","push":"Enviar","pushDescription":"Enviar branch para o remoto após implementação.","pr":"PR","prDescription":"Abrir um pull request após enviar.","watch":"Monitorar","watchDescription":"Monitorar CI e auto-corrigir erros.","sync":"Sync","syncDescription":"Pull latest main from remote before creating the feature branch.","commitSpecs":"Commit de specs","commitSpecsDescription":"Fazer commit de specs no repositório.","forkAndPr":"Fork e PR","forkAndPrDescription":"Contribuir via fork (PR para upstream).","pendingMode":"Pendente","pendingModeDescription":"Criar sem iniciar — iniciar manualmente depois.","fastModeLabel":"Modo rápido","fastModeDescription":"Pular fases SDLC e implementar direto do prompt.","fileDropZone":"Zona de arraste de arquivos","prd":"PRD","prdDescription":"Auto-aprovar transição de requisitos para planejamento.","plan":"Plano","planDescription":"Auto-aprovar transição de planejamento para implementação.","merge":"Merge","mergeDescription":"Auto-aprovar transição de merge para concluído."},"featureDrawer":{"copyFeatureId":"Copiar ID da funcionalidade","unarchiveFeature":"Desarquivar funcionalidade","archiveFeature":"Arquivar funcionalidade","deleteFeature":"Excluir funcionalidade","stopDevServer":"Parar servidor","startDevServer":"Iniciar servidor","failedToReject":"Falha ao rejeitar {{label}}","rejected":"{{label}} rejeitado — agente re-iterando (iteração {{n}})","excessiveIterations":"Iteração {{n}} — considere aprovar ou ajustar o feedback","failedToApprove":"Falha ao aprovar {{label}}","approved":"{{label}} aprovado — agente retomando","failedToApproveRequirements":"Falha ao aprovar requisitos","requirementsApproved":"Requisitos aprovados — agente retomando","featureResumed":"Funcionalidade retomada — agente reiniciando","featureStarted":"Funcionalidade iniciada","approvePlan":"Aprovar plano","sendRevisionFeedback":"Enviar feedback de revisão"},"overviewTab":{"created":"Criado","runtime":"Tempo de execução","runningFor":"Em execução","blockedBy":"Bloqueado por","error":"Erro","prd":"PRD","plan":"Plano","merge":"Merge","collect":"Coletar","addToPr":"Adicionar ao PR","push":"Enviar","pr":"PR","watch":"Monitorar","commitSpecs":"Commit de specs","forkAndPr":"Fork e PR"},"activityTab":{"copyPromptToClipboard":"Copiar prompt para área de transferência","execution":"Execução","wait":"Espera","cost":"Custo","noActivityRecorded":"Nenhuma atividade registrada"},"logTab":{"structuredView":"Vista estruturada","rawView":"Vista bruta","noLogOutput":"Sem saída de log"},"planTab":{"noPlanCreated":"Plano ainda não criado"},"branchSyncStatus":{"refreshSyncStatus":"Atualizar status de sincronização","rebaseOnMain":"Rebase no Main"},"drawerActionBar":{"fileDropZone":"Zona de arraste de arquivos","askAiToRevise":"Pedir à IA para revisar...","attachFiles":"Anexar arquivos","reject":"Rejeitar","sendRevisionFeedback":"Enviar feedback de revisão","approve":"Aprovar","fileTooLarge":"\\"{{name}}\\" excede o limite de 10 MB","fileTypeNotAllowed":"Tipo de arquivo \\"{{ext}}\\" não permitido","uploadFailed":"Falha no upload"},"taskProgress":{"done":"Concluído","inProgress":"Em progresso","review":"Em revisão","todo":"A fazer","noTasksDefined":"Nenhuma tarefa definida"},"repositoryDrawer":{"openInIde":"Abrir no IDE","openInShell":"Abrir no terminal","openFolder":"Abrir pasta","syncMain":"Sincronizar Main"},"adoptBranch":{"failedToAdopt":"Falha ao adotar branch","repository":"Repositório","branchName":"Nome do branch","searchRepositories":"Buscar repositórios...","searchBranches":"Buscar branches..."},"githubImport":{"title":"Importar do GitHub","description":"Clonar um repositório GitHub e adicionar ao ShipIT AI.","githubUrl":"URL do GitHub","urlPlaceholder":"owner/repo ou https://github.com/owner/repo","searchRepositories":"Buscar repositórios..."},"versionBadge":{"version":"Versão","branch":"Branch","commit":"Commit","path":"Caminho"},"mergeReview":{"download":"Baixar","dataUnavailable":"Dados de revisão de merge indisponíveis"},"baseDrawer":{"close":"Fechar","stopDevServer":"Parar servidor","startDevServer":"Iniciar servidor"},"addRepository":{"addRepository":"Adicionar repositório"},"modelPicker":{"searchPlaceholder":"Buscar ou digitar um ID de modelo…"},"skills":{"searchPlaceholder":"Buscar habilidades..."},"tools":{"noCategoryTools":"Sem ferramentas nesta categoria."},"accessibility":{"close":"Fechar","loading":"Carregando","send":"Enviar","imageNotes":"Notas da imagem","viewServerLogs":"Ver logs do servidor","toggleSidebar":"Alternar barra lateral"}}')},26414,(a,b,c)=>{b.exports={errors:{notFound:"No encontrado",unauthorized:"No autorizado",forbidden:"Prohibido",internal:"Error interno",unknown:"Ocurrió un error desconocido",failedToLoad:"Error al cargar {{resource}}",failedToSave:"Error al guardar {{resource}}"},labels:{save:"Guardar",cancel:"Cancelar",confirm:"Confirmar",delete:"Eliminar",edit:"Editar",close:"Cerrar",back:"Atrás",next:"Siguiente",yes:"Sí",no:"No",enabled:"Habilitado",disabled:"Deshabilitado",loading:"Cargando...",saving:"Guardando...",saved:"Guardado",none:"Ninguno",default:"Predeterminado",custom:"Personalizado"},status:{success:"Éxito",error:"Error",warning:"Advertencia",info:"Información",pending:"Pendiente",inProgress:"En progreso",completed:"Completado",failed:"Fallido"},confirmation:{areYouSure:"¿Estás seguro?",cannotBeUndone:"Esta acción no se puede deshacer."},language:{en:"Inglés",ru:"Ruso",pt:"Portugués",es:"Español",ar:"Árabe",he:"Hebreo",fr:"Francés",de:"Alemán"}}},87484,(a,b,c)=>{b.exports=JSON.parse('{"settings":{"title":"Configuración","saving":"Guardando...","saved":"Guardado","failedToSave":"Error al guardar la configuración","sections":{"language":"Idioma","agent":"Agente","environment":"Entorno","workflow":"Flujo de trabajo","ci":"CI","timeouts":"Tiempos límite","notifications":"Notificaciones","flags":"Opciones","chat":"Chat","layout":"Diseño","database":"Base de datos"},"language":{"title":"Idioma","description":"Elige tu idioma de visualización preferido","label":"Idioma de visualización","placeholder":"Selecciona un idioma","failedToSave":"Error al guardar la configuración de idioma"},"agent":{"title":"Agente preferido","sectionTitle":"Agente","description":"Elige tu agente de codificación AI y método de autenticación","sectionDescription":"Agente de codificación AI y autenticación","agentType":"Tipo de agente","agentAndModel":"Agente y modelo","agentAndModelDescription":"Proveedor y modelo para todas las operaciones","authMethod":"Método de autenticación","apiToken":"Token de API","apiTokenPlaceholder":"Ingresa tu token de API","apiTokenHelper":"Se guarda automáticamente al salir del campo","failedToSave":"Error al guardar la configuración del agente","hint":"Elige qué agente de codificación AI impulsa tus funcionalidades. Cada agente admite diferentes modelos y capacidades. La autenticación se resuelve automáticamente a través de tu sesión activa.","links":{"agentSystem":"Sistema de agentes","addingAgents":"Agregar agentes","configurationGuide":"Guía de configuración"}},"environment":{"title":"IDE y terminal","sectionTitle":"Entorno","description":"Configura tu editor, shell y preferencias de terminal predeterminados","sectionDescription":"Preferencias de editor, shell y terminal","defaultEditor":"Editor predeterminado","defaultEditorDescription":"Editor que se abre para operaciones de archivos","shellPreference":"Preferencia de shell","shell":"Shell","shellDescription":"Shell predeterminado para scripts generados","terminalEmulator":"Emulador de terminal","terminal":"Terminal","terminalDescription":"Emulador de terminal para sesiones de shell","systemTerminal":"Terminal del sistema","installed":"Instalado","notInstalled":"No instalado","failedToSave":"Error al guardar la configuración de IDE y terminal","hint":"Tu editor preferido abre archivos para revisión. La configuración de shell controla los scripts generados. El emulador de terminal se abre al iniciar sesiones de shell desde la interfaz web.","links":{"configurationGuide":"Guía de configuración"}},"workflow":{"title":"Flujo de trabajo","description":"Configura el comportamiento de PR, puertas de aprobación y configuración de CI","sectionDescription":"Comportamiento de automatización después de la implementación","defaultFastMode":"Modo rápido por defecto","defaultFastModeDescription":"Omitir fases SDLC e implementar directamente desde el prompt","subsections":{"approve":"Aprobar","evidence":"Evidencia","git":"Git"},"autoApprovePrd":"Auto-aprobar PRD","autoApprovePrdDescription":"Omitir la revisión manual de requisitos","autoApprovePlan":"Auto-aprobar plan","autoApprovePlanDescription":"Omitir la revisión manual del plan de implementación","autoApproveMerge":"Auto-aprobar fusión","autoApproveMergeDescription":"Fusionar sin revisión manual","collectEvidence":"Recopilar evidencia","collectEvidenceDescription":"Capturar capturas de pantalla y artefactos después de la implementación","addEvidenceToPr":"Agregar evidencia al PR","addEvidenceToPrDescription":"Incluir evidencia en el cuerpo del pull request","pushOnComplete":"Push al completar","pushOnCompleteDescription":"Enviar al remoto cuando la implementación termine","openPrOnComplete":"Abrir PR al completar","openPrOnCompleteDescription":"Crear un pull request al terminar","watchCiAfterPush":"Monitorear CI después del push","watchCiAfterPushDescription":"Monitorear CI y auto-corregir fallos. Deshabilita para evitar límites de velocidad.","approvalGates":"Puertas de aprobación","prdAutoApproval":"Auto-aprobación de PRD","planAutoApproval":"Auto-aprobación de plan","mergeAutoApproval":"Auto-aprobación de fusión","ciSettings":"Configuración de CI","ciWatchFixLoop":"Ciclo de monitoreo/corrección de CI","maxFixAttempts":"Máximo de intentos de corrección","watchTimeout":"Tiempo límite de monitoreo (segundos)","maxLogCharacters":"Máximo de caracteres de registro","pollInterval":"Intervalo de consulta (segundos)","hideCiStatus":"Ocultar estado de CI","stageTimeouts":"Tiempos límite por etapa","failedToSave":"Error al guardar la configuración del flujo de trabajo","hint":"Controla qué tan autónoma es cada ejecución de funcionalidad. Auto-aprobar omite la pausa de revisión humana en cada fase. Las opciones de push y PR controlan qué sucede después de una implementación exitosa.","links":{"approvalGates":"Puertas de aprobación","pushAndPrFlags":"Opciones de push y PR"}},"ci":{"title":"Integración continua","description":"Límites y tiempos límite para el monitoreo de CI","maxFixAttempts":"Máximo de intentos de corrección","maxFixAttemptsDescription":"Reintentos del agente en CI fallido","watchTimeout":"Tiempo límite de monitoreo","watchTimeoutDescription":"Espera máxima para la finalización de CI","maxLogSize":"Tamaño máximo de registro","maxLogSizeDescription":"Truncar registros de CI más allá de este límite","pollInterval":"Intervalo de consulta","pollIntervalDescription":"Con qué frecuencia consultar GitHub para actualizaciones de estado de CI","hideCiStatus":"Ocultar estado de CI","hideCiStatusDescription":"Ocultar las insignias de estado de CI del cajón de funcionalidades y la revisión de fusión","hint":"Cuando una funcionalidad se completa, el agente puede monitorear CI y auto-corregir fallos. Estos límites previenen reintentos descontrolados y controlan cuánta salida de registro se envía al agente para análisis.","links":{"cicdPipeline":"Pipeline de CI/CD","ciSecurityGates":"Puertas de seguridad de CI"}},"stageTimeouts":{"title":"Tiempos límite por etapa","description":"Tiempo máximo de ejecución por etapa del agente","subsections":{"featureAgent":"Agente de funcionalidad","analyzeRepoAgent":"Agente de análisis de repositorio"},"analyze":"Analizar","analyzeDescription":"Tiempo límite de análisis de repositorio","requirements":"Requisitos","requirementsDescription":"Tiempo límite de recopilación de requisitos","research":"Investigación","researchDescription":"Tiempo límite de investigación técnica","plan":"Plan","planDescription":"Tiempo límite de planificación de implementación","implement":"Implementar","implementDescription":"Tiempo límite de implementación de código","merge":"Fusión","mergeDescription":"Tiempo límite de creación y fusión de PR","hint":"Cada agente tiene tiempos límite de etapa configurables independientemente. Cuando una etapa excede su tiempo límite, el agente es terminado. Tiempos límite más largos son útiles para implementaciones complejas. El agente de funcionalidad tiene un valor predeterminado de 30 minutos por etapa. El agente de análisis de repositorio tiene un valor predeterminado de 10 minutos."},"notifications":{"title":"Notificaciones","description":"Configura los canales de notificación y preferencias de eventos","sectionDescription":"Cómo y cuándo te notificamos","channels":"Canales","inApp":"En la aplicación","inAppLabel":"En la aplicación","inAppDescription":"Notificaciones dentro de la interfaz de ShipIT AI","subsections":{"agentEvents":"Eventos del agente","pullRequestEvents":"Eventos de Pull Request"},"events":{"agentStarted":"Agente iniciado","phaseCompleted":"Fase completada","waitingApproval":"Esperando aprobación","agentCompleted":"Agente completado","agentFailed":"Agente fallido","mergeReviewReady":"Revisión de fusión lista","prMerged":"PR fusionado","prClosed":"PR cerrado","prChecksPassed":"Verificaciones de PR aprobadas","prChecksFailed":"Verificaciones de PR fallidas","prBlocked":"PR bloqueado"},"failedToSave":"Error al guardar la configuración de notificaciones","hint":"Las notificaciones de la aplicación te mantienen al tanto. Ajusta qué eventos del ciclo de vida del agente generan una notificación.","links":{"notificationSystem":"Sistema de notificaciones"}},"featureFlags":{"title":"Opciones experimentales","description":"Activa o desactiva funcionalidades experimentales y beta","sectionDescription":"Habilitar o deshabilitar funcionalidades experimentales","badge":"Experimental","skills":"Habilidades","skillsDescription":"Habilitar el sistema de habilidades para capacidades del agente","deployments":"Despliegues","deploymentsDescription":"Habilitar flujos de trabajo de despliegue en entornos","debug":"Depuración","debugDescription":"Mostrar paneles de depuración y registro detallado","githubImport":"Importación de GitHub","githubImportDescription":"Habilitar la importación de repositorios de GitHub en la interfaz web","adoptBranch":"Adoptar rama","adoptBranchDescription":"Importar ramas existentes como funcionalidades rastreadas","gitRebaseSync":"Git Rebase y sincronización","gitRebaseSyncDescription":"Habilitar operaciones de rebase-on-main y sync-main de git","reactFileManager":"Administrador de archivos React","reactFileManagerDescription":"Usar el administrador de archivos React integrado en lugar del selector de carpetas nativo del SO","hint":"Funcionalidades experimentales que aún están en desarrollo. Habilítalas bajo tu propio riesgo — pueden cambiar o ser eliminadas en versiones futuras. El modo de depuración agrega registro detallado útil para la resolución de problemas."},"interactiveAgent":{"title":"Agente interactivo","description":"Configuración de la pestaña de chat para sesiones de agente interactivo por funcionalidad","enableChatTab":"Habilitar pestaña de chat","enableChatTabDescription":"Mostrar la pestaña de chat en todas las páginas de detalle de funcionalidad","autoTimeout":"Tiempo de espera automático","autoTimeoutDescription":"Minutos de inactividad antes de que el agente se detenga automáticamente (1-120)","maxConcurrentSessions":"Máximo de sesiones concurrentes","maxConcurrentSessionsDescription":"Número máximo de sesiones de agente interactivo activas a la vez (1-10)","hint":"La pestaña de chat genera un proceso de agente persistente por funcionalidad. El tiempo de espera automático detiene las sesiones inactivas automáticamente para conservar recursos. El límite de sesiones concurrentes previene el uso excesivo de recursos en las máquinas de los desarrolladores."},"fabLayout":{"title":"Diseño","description":"Controlar la posición de los botones de acción flotantes en el centro de control","swapPosition":"Intercambiar posiciones de FAB","swapPositionDescription":"Mover el botón de Chat a la izquierda y el de Crear a la derecha","hint":"Los dos botones de acción flotantes (Crear y Chat) se ubican en las esquinas inferiores del centro de control. Active esta opción para intercambiar sus posiciones."},"database":{"title":"Base de datos","description":"Ruta de la base de datos y administración","sectionDescription":"Información de almacenamiento local","location":"Ubicación","locationDescription":"Ruta a la base de datos SQLite local","size":"Tamaño","hint":"Toda la configuración se almacena en una base de datos SQLite local en ~/.shipit-ai/data. La base de datos usa un patrón de registro único con migraciones automáticas al inicio.","links":{"settingsService":"Servicio de configuración","settingsSpec":"Especificación de configuración"}}},"navigation":{"controlCenter":"Centro de control","dashboard":"Panel","features":"Funcionalidades","repositories":"Repositorios","settings":"Configuración","sessions":"Sesiones","tools":"Herramientas","skills":"Habilidades"},"sidebar":{"features":"Funcionalidades","switchToLight":"Modo claro","switchToDark":"Modo oscuro","muteSounds":"Silenciar sonidos","unmuteSounds":"Activar sonidos","statusActionNeeded":"Acción necesaria","statusInProgress":"En progreso","statusPending":"Pendiente","statusBlocked":"Bloqueado","statusError":"Error","statusDone":"Completado"},"deleteFeature":{"title":"¿Eliminar funcionalidad?","description":"Esto eliminará permanentemente <strong>{{featureName}}</strong> ({{featureId}}). Esta acción no se puede deshacer.","cleanupLabel":"Limpiar worktree y ramas","deleteSubFeatures":"Eliminar sub-funcionalidades","closePullRequest":"Cerrar pull request","cancel":"Cancelar","deleting":"Eliminando…","delete":"Eliminar"},"rejectFeedback":{"defaultTitle":"Rechazar requisitos","defaultDescription":"Proporciona comentarios para que el agente los aborde en la próxima iteración. Los comentarios son obligatorios.","ariaLabel":"Comentarios de rechazo","placeholder":"Describe qué necesita cambiar...","cancel":"Cancelar","rejecting":"Rechazando…","confirmReject":"Confirmar rechazo"},"emptyState":{"addProject":"Agregar un proyecto","addProjectDescription":"Agrega tu carpeta de proyecto para desbloquear la creación de funcionalidades.","addProjectDescriptionLine2":"Describe lo que necesitas — ShipIT AI se encarga del resto.","checkingSetup":"Verificando configuración…","ready":"{{label}} listo","notInstalled":"{{label}} no está instalado","reCheck":"Verificar de nuevo","needsAuth":"{{label}} necesita autenticación","open":"Abrir {{label}}","checking":"Verificando {{label}}…","notFound":"{{label}} no encontrado","docs":"Documentación","opening":"Abriendo…","chooseFolder":"Elige una carpeta","folderHint":"Cualquier carpeta funciona — git se inicializará automáticamente si es necesario.","orUseCli":"o usa el CLI","copyCommands":"Copiar comandos","git":"Git","gitRequired":"Requerido para todas las fases","githubCli":"GitHub CLI","githubCliRequired":"Requerido para pull requests"},"welcome":{"loadingAgents":"Cargando agentes…","chooseAgent":"Elige tu agente","pickModel":"Elige un modelo","selectAgentSubtitle":"Selecciona el agente de codificación AI que quieres que ShipIT AI use.","chooseModelSubtitle":"Elige qué modelo de {{label}} ejecutar.","ghCliNotice":"<0>GitHub CLI (gh)</0> es necesario para las capacidades completas de auto-reparación de CI/CD. <1>Instálalo aquí</1>.","ghCliRequired":"GitHub CLI (gh)","ghCliRequiredText":"es necesario para las capacidades completas de auto-reparación de CI/CD.","installHere":"Instálalo aquí","back":"Atrás"},"canvas":{"noFeatures":"Aún no hay funcionalidades","noFeaturesDescription":"Comienza creando tu primera funcionalidad.","newFeature":"Nueva funcionalidad","hideArchived":"Ocultar archivadas","showArchived":"Mostrar archivadas","hideArchivedLabel":"Ocultar archivadas","showArchivedLabel":"Mostrar archivadas","zoomOut":"Alejar","zoomIn":"Acercar","fitView":"Ajustar vista","resetView":"Restablecer vista"},"common":{"noData":"No hay datos disponibles","retry":"Reintentar","saving":"Guardando...","saved":"Guardado","decrease":"Disminuir","increase":"Aumentar","cancel":"Cancelar"},"featureNode":{"archiveFeature":"Archivar función","deleteFeature":"Eliminar función","unarchiveFeature":"Desarchivar función","archiveConfirmTitle":"¿Archivar función?","archiveConfirmDescription":"<strong>{{name}}</strong> se ocultará del lienzo. Puedes desarchivarla más tarde.","cancel":"Cancelar","archive":"Archivar","fastMode":"Modo rápido","specDriven":"Basado en especificación","copied":"¡Copiado!","chatWithAgent":"Chat con agente","stopDevServer":"Detener servidor","startDevServer":"Iniciar servidor","retryDevServer":"Reintentar servidor","starting":"Iniciando…","retry":"Reintentar","start":"Iniciar","failed":"Error","deleting":"Eliminando…","addFeature":"Agregar función","reviewRequirements":"Revisar requisitos","reviewTechnicalPlan":"Revisar plan técnico","reviewChanges":"Revisar cambios","review":"Revisar","creating":"Creando...","completedIn":"Completado en {{runtime}}","completed":"Completado","waitingOn":"Esperando {{blockedBy}}","blocked":"Bloqueado","pending":"Pendiente","somethingWentWrong":"Algo salió mal","openChat":"Abrir chat","viewSessions":"Ver sesiones","sessionsActive":"Sesiones (activas)","sessions":"Sesiones","agentSessions":"Sesiones del agente","noSessionsFound":"No se encontraron sesiones","showLess":"Mostrar menos","showMore":"Mostrar {{count}} más"},"repositoryNode":{"removeRepository":"Eliminar repositorio","removeConfirmTitle":"¿Eliminar repositorio?","removeConfirmDescription":"Esto eliminará <strong>{{name}}</strong> y todas sus funciones del espacio de trabajo. Los archivos en disco no se verán afectados.","cancel":"Cancelar","remove":"Eliminar","openInIde":"Abrir en IDE","openInShell":"Abrir en terminal","openFolder":"Abrir carpeta","chatWithAgent":"Chat con agente","newFeature":"Nueva función","new":"Nueva","behind":"{{count}} atrás","notAGitRepository":"No es un repositorio git","starting":"Iniciando...","run":"Ejecutar","startLocalEnvironment":"iniciar entorno local","stopDevServer":"Detener servidor","startDevServer":"Iniciar servidor","retry":"Reintentar"},"fab":{"closeActions":"Cerrar acciones","createNew":"Crear nuevo","newFeature":"Nueva función","localFolder":"Carpeta local","adoptBranch":"Adoptar rama","fromGithub":"Desde GitHub"},"chat":{"shipitAiChat":"ShipIT AI Chat","writeMessage":"Escribe un mensaje...","attachFiles":"Adjuntar archivos","forceStopAgent":"Forzar detención del agente","stop":"Detener","clearChatHistory":"Limpiar historial del chat","clear":"Limpiar","noSession":"Sin sesión","yourMessage":"Tu mensaje","agentMessage":"Mensaje del agente","agentIsTyping":"El agente está escribiendo","showMore":"Mostrar más","showLess":"Mostrar menos","code":"Código","preview":"Vista previa","openFullscreen":"Abrir pantalla completa","htmlPreview":"Vista previa HTML","htmlPreviewFullscreen":"Vista previa HTML pantalla completa"},"createDrawer":{"title":"NUEVA FUNCIÓN","creating":"Creando...","cancel":"Cancelar","createFeature":"+ Crear función","repository":"REPOSITORIO","describeFeature":"DESCRIBE TU FUNCIÓN","featurePlaceholder":"ej. Agregar login con GitHub OAuth con manejo de callback y renovación de token...","parentFeature":"FUNCIÓN PADRE","selectParent":"Seleccionar función padre...","searchFeatures":"Buscar funciones...","noParent":"Sin padre","noFeaturesFound":"No se encontraron funciones.","searchRepositories":"Buscar repositorios...","approve":"APROBACIÓN","approveDescription":"Auto-aprobar transiciones de fase sin revisión manual.","skippedInFastMode":"Omitido en modo rápido","all":"Todos","toggleAllApprovalGates":"Alternar todas las puertas de aprobación","evidence":"EVIDENCIA","evidenceDescription":"Recopilar y adjuntar evidencia después de la implementación.","collect":"Recopilar","collectDescription":"Capturar capturas de pantalla y artefactos después de la implementación.","addToPr":"Agregar al PR","requiresPr":"Requiere PR habilitado","requiresEvidence":"Requiere recopilación de evidencia habilitada","addToPrDescription":"Incluir evidencia en el cuerpo del pull request.","git":"GIT","push":"Enviar","pushDescription":"Enviar rama al remoto después de la implementación.","pr":"PR","prDescription":"Abrir un pull request después de enviar.","watch":"Vigilar","watchDescription":"Vigilar CI y auto-corregir errores.","sync":"Sync","syncDescription":"Pull latest main from remote before creating the feature branch.","commitSpecs":"Commit de specs","commitSpecsDescription":"Hacer commit de specs al repositorio.","forkAndPr":"Fork y PR","forkAndPrDescription":"Contribuir mediante fork (PR al upstream).","pendingMode":"Pendiente","pendingModeDescription":"Crear sin iniciar — iniciar manualmente después.","fastModeLabel":"Modo rápido","fastModeDescription":"Omitir fases SDLC e implementar directamente desde tu prompt.","fileDropZone":"Zona de arrastre de archivos","prd":"PRD","prdDescription":"Auto-aprobar transición de requisitos a planificación.","plan":"Plan","planDescription":"Auto-aprobar transición de planificación a implementación.","merge":"Merge","mergeDescription":"Auto-aprobar transición de merge a completado."},"featureDrawer":{"copyFeatureId":"Copiar ID de función","unarchiveFeature":"Desarchivar función","archiveFeature":"Archivar función","deleteFeature":"Eliminar función","stopDevServer":"Detener servidor","startDevServer":"Iniciar servidor","failedToReject":"Error al rechazar {{label}}","rejected":"{{label}} rechazado — agente re-iterando (iteración {{n}})","excessiveIterations":"Iteración {{n}} — considera aprobar o ajustar el feedback","failedToApprove":"Error al aprobar {{label}}","approved":"{{label}} aprobado — agente reanudando","failedToApproveRequirements":"Error al aprobar requisitos","requirementsApproved":"Requisitos aprobados — agente reanudando","featureResumed":"Función reanudada — agente reiniciando","featureStarted":"Función iniciada","approvePlan":"Aprobar plan","sendRevisionFeedback":"Enviar feedback de revisión"},"overviewTab":{"created":"Creado","runtime":"Tiempo de ejecución","runningFor":"En ejecución","blockedBy":"Bloqueado por","error":"Error","prd":"PRD","plan":"Plan","merge":"Merge","collect":"Recopilar","addToPr":"Agregar al PR","push":"Enviar","pr":"PR","watch":"Vigilar","commitSpecs":"Commit de specs","forkAndPr":"Fork y PR"},"activityTab":{"copyPromptToClipboard":"Copiar prompt al portapapeles","execution":"Ejecución","wait":"Espera","cost":"Costo","noActivityRecorded":"Sin actividad registrada"},"logTab":{"structuredView":"Vista estructurada","rawView":"Vista sin formato","noLogOutput":"Sin salida de log"},"planTab":{"noPlanCreated":"Plan aún no creado"},"branchSyncStatus":{"refreshSyncStatus":"Actualizar estado de sincronización","rebaseOnMain":"Rebase en Main"},"drawerActionBar":{"fileDropZone":"Zona de arrastre de archivos","askAiToRevise":"Pedir a la IA que revise...","attachFiles":"Adjuntar archivos","reject":"Rechazar","sendRevisionFeedback":"Enviar feedback de revisión","approve":"Aprobar","fileTooLarge":"\\"{{name}}\\" excede el límite de 10 MB","fileTypeNotAllowed":"Tipo de archivo \\"{{ext}}\\" no permitido","uploadFailed":"Error en la carga"},"taskProgress":{"done":"Hecho","inProgress":"En progreso","review":"En revisión","todo":"Pendiente","noTasksDefined":"Sin tareas definidas"},"repositoryDrawer":{"openInIde":"Abrir en IDE","openInShell":"Abrir en terminal","openFolder":"Abrir carpeta","syncMain":"Sincronizar Main"},"adoptBranch":{"failedToAdopt":"Error al adoptar rama","repository":"Repositorio","branchName":"Nombre de rama","searchRepositories":"Buscar repositorios...","searchBranches":"Buscar ramas..."},"githubImport":{"title":"Importar desde GitHub","description":"Clonar un repositorio GitHub y agregarlo a ShipIT AI.","githubUrl":"URL de GitHub","urlPlaceholder":"owner/repo o https://github.com/owner/repo","searchRepositories":"Buscar repositorios..."},"versionBadge":{"version":"Versión","branch":"Rama","commit":"Commit","path":"Ruta"},"mergeReview":{"download":"Descargar","dataUnavailable":"Datos de revisión de merge no disponibles"},"baseDrawer":{"close":"Cerrar","stopDevServer":"Detener servidor","startDevServer":"Iniciar servidor"},"addRepository":{"addRepository":"Agregar repositorio"},"modelPicker":{"searchPlaceholder":"Buscar o escribir un ID de modelo…"},"skills":{"searchPlaceholder":"Buscar habilidades..."},"tools":{"noCategoryTools":"Sin herramientas en esta categoría."},"accessibility":{"close":"Cerrar","loading":"Cargando","send":"Enviar","imageNotes":"Notas de imagen","viewServerLogs":"Ver logs del servidor","toggleSidebar":"Alternar barra lateral"}}')},63541,(a,b,c)=>{b.exports={errors:{notFound:"غير موجود",unauthorized:"غير مصرح",forbidden:"محظور",internal:"خطأ داخلي",unknown:"حدث خطأ غير معروف",failedToLoad:"فشل تحميل {{resource}}",failedToSave:"فشل حفظ {{resource}}"},labels:{save:"حفظ",cancel:"إلغاء",confirm:"تأكيد",delete:"حذف",edit:"تعديل",close:"إغلاق",back:"رجوع",next:"التالي",yes:"نعم",no:"لا",enabled:"مفعّل",disabled:"معطّل",loading:"جارٍ التحميل...",saving:"جارٍ الحفظ...",saved:"تم الحفظ",none:"لا شيء",default:"افتراضي",custom:"مخصص"},status:{success:"نجاح",error:"خطأ",warning:"تحذير",info:"معلومات",pending:"قيد الانتظار",inProgress:"قيد التنفيذ",completed:"مكتمل",failed:"فشل"},confirmation:{areYouSure:"هل أنت متأكد؟",cannotBeUndone:"لا يمكن التراجع عن هذا الإجراء."},language:{en:"الإنجليزية",ru:"الروسية",pt:"البرتغالية",es:"الإسبانية",ar:"العربية",he:"العبرية",fr:"الفرنسية",de:"الألمانية"}}},3324,(a,b,c)=>{b.exports=JSON.parse('{"settings":{"title":"الإعدادات","saving":"جارٍ الحفظ...","saved":"تم الحفظ","failedToSave":"فشل حفظ الإعدادات","sections":{"language":"اللغة","agent":"الوكيل","environment":"البيئة","workflow":"سير العمل","ci":"CI","timeouts":"المهل الزمنية","notifications":"الإشعارات","flags":"العلامات","chat":"المحادثة","layout":"التخطيط","database":"قاعدة البيانات"},"language":{"title":"اللغة","description":"اختر لغة العرض المفضلة","label":"لغة العرض","placeholder":"اختر لغة","failedToSave":"فشل حفظ إعدادات اللغة"},"agent":{"title":"الوكيل المفضل","sectionTitle":"الوكيل","description":"اختر وكيل البرمجة بالذكاء الاصطناعي وطريقة المصادقة","sectionDescription":"وكيل البرمجة بالذكاء الاصطناعي والمصادقة","agentType":"نوع الوكيل","agentAndModel":"الوكيل والنموذج","agentAndModelDescription":"المزود والنموذج لجميع العمليات","authMethod":"طريقة المصادقة","apiToken":"رمز API","apiTokenPlaceholder":"أدخل رمز API الخاص بك","apiTokenHelper":"يتم الحفظ تلقائيًا عند مغادرة الحقل","failedToSave":"فشل حفظ إعدادات الوكيل","hint":"اختر وكيل البرمجة بالذكاء الاصطناعي الذي يشغّل ميزاتك. كل وكيل يدعم نماذج وإمكانيات مختلفة. يتم حل المصادقة تلقائيًا عبر جلستك النشطة.","links":{"agentSystem":"نظام الوكيل","addingAgents":"إضافة وكلاء","configurationGuide":"دليل التكوين"}},"environment":{"title":"بيئة التطوير والطرفية","sectionTitle":"البيئة","description":"تكوين المحرر الافتراضي والصدفة وتفضيلات الطرفية","sectionDescription":"تفضيلات المحرر والصدفة والطرفية","defaultEditor":"المحرر الافتراضي","defaultEditorDescription":"المحرر الذي يفتح لعمليات الملفات","shellPreference":"تفضيل الصدفة","shell":"الصدفة","shellDescription":"الصدفة الافتراضية للنصوص البرمجية المولّدة","terminalEmulator":"محاكي الطرفية","terminal":"الطرفية","terminalDescription":"محاكي الطرفية لجلسات الصدفة","systemTerminal":"طرفية النظام","installed":"مُثبّت","notInstalled":"غير مُثبّت","failedToSave":"فشل حفظ إعدادات بيئة التطوير والطرفية","hint":"محررك المفضل يفتح الملفات للمراجعة. إعداد الصدفة يتحكم في النصوص البرمجية المولّدة. يتم تشغيل محاكي الطرفية عند فتح جلسات صدفة من واجهة الويب.","links":{"configurationGuide":"دليل التكوين"}},"workflow":{"title":"سير العمل","description":"تكوين سلوك PR وبوابات الموافقة وإعدادات CI","sectionDescription":"سلوك الأتمتة بعد التنفيذ","defaultFastMode":"الوضع السريع كافتراضي","defaultFastModeDescription":"تخطي مراحل SDLC والتنفيذ مباشرة من الأمر","subsections":{"approve":"الموافقة","evidence":"الأدلة","git":"Git"},"autoApprovePrd":"الموافقة التلقائية على PRD","autoApprovePrdDescription":"تخطي المراجعة اليدوية للمتطلبات","autoApprovePlan":"الموافقة التلقائية على الخطة","autoApprovePlanDescription":"تخطي المراجعة اليدوية لخطة التنفيذ","autoApproveMerge":"الموافقة التلقائية على الدمج","autoApproveMergeDescription":"الدمج بدون مراجعة يدوية","collectEvidence":"جمع الأدلة","collectEvidenceDescription":"التقاط لقطات الشاشة والمخرجات بعد التنفيذ","addEvidenceToPr":"إضافة الأدلة إلى PR","addEvidenceToPrDescription":"تضمين الأدلة في نص طلب السحب","pushOnComplete":"الدفع عند الاكتمال","pushOnCompleteDescription":"الدفع إلى الخادم البعيد عند انتهاء التنفيذ","openPrOnComplete":"فتح PR عند الاكتمال","openPrOnCompleteDescription":"إنشاء طلب سحب عند الانتهاء","watchCiAfterPush":"مراقبة CI بعد الدفع","watchCiAfterPushDescription":"مراقبة CI والإصلاح التلقائي للأخطاء. قم بالتعطيل لتجنب حدود المعدل.","approvalGates":"بوابات الموافقة","prdAutoApproval":"الموافقة التلقائية على PRD","planAutoApproval":"الموافقة التلقائية على الخطة","mergeAutoApproval":"الموافقة التلقائية على الدمج","ciSettings":"إعدادات CI","ciWatchFixLoop":"دورة مراقبة/إصلاح CI","maxFixAttempts":"الحد الأقصى لمحاولات الإصلاح","watchTimeout":"مهلة المراقبة (بالثواني)","maxLogCharacters":"الحد الأقصى لأحرف السجل","pollInterval":"فترة الاستقصاء (بالثواني)","hideCiStatus":"إخفاء حالة CI","stageTimeouts":"المهل الزمنية للمراحل","failedToSave":"فشل حفظ إعدادات سير العمل","hint":"تحكم في مدى استقلالية كل تشغيل ميزة. الموافقة التلقائية تتخطى التوقف للمراجعة البشرية في كل مرحلة. خيارات الدفع وPR تتحكم فيما يحدث بعد نجاح التنفيذ.","links":{"approvalGates":"بوابات الموافقة","pushAndPrFlags":"علامات الدفع وPR"}},"ci":{"title":"التكامل المستمر","description":"الحدود والمهل الزمنية لمراقبة CI","maxFixAttempts":"الحد الأقصى لمحاولات الإصلاح","maxFixAttemptsDescription":"إعادة محاولة الوكيل عند فشل CI","watchTimeout":"مهلة المراقبة","watchTimeoutDescription":"أقصى انتظار لاكتمال CI","maxLogSize":"الحد الأقصى لحجم السجل","maxLogSizeDescription":"قص سجلات CI بعد هذا الحد","pollInterval":"فترة الاستقصاء","pollIntervalDescription":"عدد مرات التحقق من GitHub لتحديثات حالة CI","hideCiStatus":"إخفاء حالة CI","hideCiStatusDescription":"إخفاء شارات حالة CI من درج الميزات ومراجعة الدمج","hint":"عند اكتمال ميزة، يمكن للوكيل مراقبة CI والإصلاح التلقائي للأخطاء. هذه الحدود تمنع إعادة المحاولات المفرطة وتتحكم في حجم مخرجات السجل المرسلة للوكيل للتحليل.","links":{"cicdPipeline":"خط أنابيب CI/CD","ciSecurityGates":"بوابات أمان CI"}},"stageTimeouts":{"title":"المهل الزمنية للمراحل","description":"أقصى وقت تنفيذ لكل مرحلة من مراحل الوكيل","subsections":{"featureAgent":"وكيل الميزات","analyzeRepoAgent":"وكيل تحليل المستودع"},"analyze":"التحليل","analyzeDescription":"مهلة تحليل المستودع","requirements":"المتطلبات","requirementsDescription":"مهلة جمع المتطلبات","research":"البحث","researchDescription":"مهلة البحث التقني","plan":"الخطة","planDescription":"مهلة تخطيط التنفيذ","implement":"التنفيذ","implementDescription":"مهلة تنفيذ الكود","merge":"الدمج","mergeDescription":"مهلة إنشاء PR والدمج","hint":"لكل وكيل مهل زمنية مستقلة وقابلة للتكوين لكل مرحلة. عند تجاوز مرحلة لمهلتها الزمنية، يتم إنهاء الوكيل. المهل الأطول مفيدة للتنفيذات المعقدة. المهلة الافتراضية لوكيل الميزات 30 دقيقة لكل مرحلة. المهلة الافتراضية لوكيل تحليل المستودع 10 دقائق."},"notifications":{"title":"الإشعارات","description":"تكوين قنوات الإشعارات وتفضيلات الأحداث","sectionDescription":"كيف ومتى يتم إشعارك","channels":"القنوات","inApp":"داخل التطبيق","inAppLabel":"داخل التطبيق","inAppDescription":"الإشعارات داخل واجهة ShipIT AI","subsections":{"agentEvents":"أحداث الوكيل","pullRequestEvents":"أحداث طلب السحب"},"events":{"agentStarted":"بدأ الوكيل","phaseCompleted":"اكتملت المرحلة","waitingApproval":"في انتظار الموافقة","agentCompleted":"اكتمل الوكيل","agentFailed":"فشل الوكيل","mergeReviewReady":"مراجعة الدمج جاهزة","prMerged":"تم دمج PR","prClosed":"تم إغلاق PR","prChecksPassed":"نجحت فحوصات PR","prChecksFailed":"فشلت فحوصات PR","prBlocked":"PR محظور"},"failedToSave":"فشل حفظ إعدادات الإشعارات","hint":"إشعارات التنبيه داخل التطبيق تبقيك على اطلاع. اضبط أحداث دورة حياة الوكيل التي تُشغّل الإشعارات.","links":{"notificationSystem":"نظام الإشعارات"}},"featureFlags":{"title":"علامات الميزات","description":"تبديل الميزات التجريبية والتجريبية المبكرة","sectionDescription":"تمكين أو تعطيل الميزات التجريبية","badge":"تجريبي","skills":"المهارات","skillsDescription":"تمكين نظام المهارات لإمكانيات الوكيل","deployments":"النشر","deploymentsDescription":"تمكين سير عمل نشر البيئات","debug":"التصحيح","debugDescription":"عرض لوحات التصحيح والتسجيل المفصل","githubImport":"استيراد GitHub","githubImportDescription":"تمكين استيراد مستودعات GitHub في واجهة الويب","adoptBranch":"تبني فرع","adoptBranchDescription":"استيراد الفروع الموجودة كميزات متتبعة","gitRebaseSync":"إعادة تأسيس ومزامنة Git","gitRebaseSyncDescription":"تمكين عمليات إعادة التأسيس على main ومزامنة main","reactFileManager":"مدير ملفات React","reactFileManagerDescription":"استخدام مدير ملفات React المدمج بدلاً من منتقي مجلدات نظام التشغيل الأصلي","hint":"ميزات تجريبية لا تزال قيد التطوير. قم بتمكينها على مسؤوليتك — قد تتغير أو تُزال في الإصدارات المستقبلية. وضع التصحيح يضيف تسجيلًا مفصلاً مفيدًا لاستكشاف الأخطاء."},"interactiveAgent":{"title":"الوكيل التفاعلي","description":"إعدادات علامة المحادثة لجلسات الوكيل التفاعلية لكل ميزة","enableChatTab":"تمكين علامة المحادثة","enableChatTabDescription":"عرض علامة المحادثة في جميع صفحات تفاصيل الميزات","autoTimeout":"المهلة التلقائية","autoTimeoutDescription":"دقائق عدم النشاط قبل إيقاف الوكيل تلقائيًا (1–120)","maxConcurrentSessions":"الحد الأقصى للجلسات المتزامنة","maxConcurrentSessionsDescription":"الحد الأقصى لعدد جلسات الوكيل التفاعلية النشطة في وقت واحد (1–10)","hint":"علامة المحادثة تُنشئ عملية وكيل مستمرة لكل ميزة. المهلة التلقائية تُوقف الجلسات الخاملة تلقائيًا لتوفير الموارد. حد الجلسات المتزامنة يمنع الاستخدام المفرط للموارد على أجهزة المطورين."},"fabLayout":{"title":"التخطيط","description":"التحكم في موضع أزرار الإجراء العائمة في مركز التحكم","swapPosition":"تبديل مواضع الأزرار العائمة","swapPositionDescription":"نقل زر المحادثة إلى اليسار وزر الإنشاء إلى اليمين","hint":"يوجد زران عائمان (إنشاء ومحادثة) في الزوايا السفلية لمركز التحكم. قم بتفعيل هذا الخيار لتبديل مواضعهما."},"database":{"title":"قاعدة البيانات","description":"مسار قاعدة البيانات وإدارتها","sectionDescription":"معلومات التخزين المحلي","location":"الموقع","locationDescription":"مسار قاعدة بيانات SQLite المحلية","size":"الحجم","hint":"جميع الإعدادات مخزنة في قاعدة بيانات SQLite محلية في ~/.shipit-ai/data. تستخدم قاعدة البيانات نمط سجل مفرد مع ترحيلات تلقائية عند البدء.","links":{"settingsService":"خدمة الإعدادات","settingsSpec":"مواصفات الإعدادات"}}},"navigation":{"controlCenter":"مركز التحكم","dashboard":"لوحة المعلومات","features":"الميزات","repositories":"المستودعات","settings":"الإعدادات","sessions":"الجلسات","tools":"الأدوات","skills":"المهارات"},"sidebar":{"features":"الميزات","switchToLight":"الوضع الفاتح","switchToDark":"الوضع الداكن","muteSounds":"كتم الأصوات","unmuteSounds":"تشغيل الأصوات","statusActionNeeded":"إجراء مطلوب","statusInProgress":"قيد التنفيذ","statusPending":"قيد الانتظار","statusBlocked":"محظور","statusError":"خطأ","statusDone":"مكتمل"},"deleteFeature":{"title":"حذف الميزة؟","description":"سيتم حذف <strong>{{featureName}}</strong> ({{featureId}}) نهائيًا. لا يمكن التراجع عن هذا الإجراء.","cleanupLabel":"تنظيف شجرة العمل والفروع","deleteSubFeatures":"حذف الميزات الفرعية","closePullRequest":"إغلاق طلب السحب","cancel":"إلغاء","deleting":"جارٍ الحذف…","delete":"حذف"},"rejectFeedback":{"defaultTitle":"رفض المتطلبات","defaultDescription":"قدّم ملاحظات ليعالجها الوكيل في التكرار التالي. الملاحظات مطلوبة.","ariaLabel":"ملاحظات الرفض","placeholder":"صِف ما يحتاج إلى تغيير...","cancel":"إلغاء","rejecting":"جارٍ الرفض…","confirmReject":"تأكيد الرفض"},"emptyState":{"addProject":"إضافة مشروع","addProjectDescription":"أضف مجلد مشروعك لفتح إمكانية إنشاء الميزات.","addProjectDescriptionLine2":"صِف ما تحتاجه — ShipIT AI يتولى الباقي.","checkingSetup":"جارٍ التحقق من الإعداد…","ready":"{{label}} جاهز","notInstalled":"{{label}} غير مثبت","reCheck":"إعادة التحقق","needsAuth":"{{label}} يحتاج إلى مصادقة","open":"فتح {{label}}","checking":"جارٍ التحقق من {{label}}…","notFound":"{{label}} غير موجود","docs":"التوثيق","opening":"جارٍ الفتح…","chooseFolder":"اختر مجلدًا","folderHint":"أي مجلد يعمل — سيتم تهيئة git تلقائيًا إذا لزم الأمر.","orUseCli":"أو استخدم CLI","copyCommands":"نسخ الأوامر","git":"Git","gitRequired":"مطلوب لجميع المراحل","githubCli":"GitHub CLI","githubCliRequired":"مطلوب لطلبات السحب"},"welcome":{"loadingAgents":"جارٍ تحميل الوكلاء…","chooseAgent":"اختر وكيلك","pickModel":"اختر نموذجًا","selectAgentSubtitle":"اختر وكيل البرمجة بالذكاء الاصطناعي الذي تريد أن يستخدمه ShipIT AI.","chooseModelSubtitle":"اختر نموذج {{label}} المراد تشغيله.","ghCliNotice":"<0>GitHub CLI (gh)</0> مطلوب لإمكانيات الإصلاح الذاتي الكاملة لـ CI/CD. <1>قم بتثبيته من هنا</1>.","ghCliRequired":"GitHub CLI (gh)","ghCliRequiredText":"مطلوب لإمكانيات الإصلاح الذاتي الكاملة لـ CI/CD.","installHere":"قم بتثبيته من هنا","back":"رجوع"},"canvas":{"noFeatures":"لا توجد ميزات بعد","noFeaturesDescription":"ابدأ بإنشاء أول ميزة لك.","newFeature":"ميزة جديدة","hideArchived":"إخفاء المؤرشف","showArchived":"إظهار المؤرشف","hideArchivedLabel":"إخفاء المؤرشف","showArchivedLabel":"إظهار المؤرشف","zoomOut":"تصغير","zoomIn":"تكبير","fitView":"ملاءمة العرض","resetView":"إعادة تعيين العرض"},"common":{"noData":"لا توجد بيانات متاحة","retry":"إعادة المحاولة","saving":"جارٍ الحفظ...","saved":"تم الحفظ","decrease":"تقليل","increase":"زيادة","cancel":"إلغاء"},"featureNode":{"archiveFeature":"أرشفة الميزة","deleteFeature":"حذف الميزة","unarchiveFeature":"إلغاء أرشفة الميزة","archiveConfirmTitle":"أرشفة الميزة؟","archiveConfirmDescription":"<strong>{{name}}</strong> ستُخفى من اللوحة. يمكنك إلغاء أرشفتها لاحقاً.","cancel":"إلغاء","archive":"أرشفة","fastMode":"الوضع السريع","specDriven":"مبني على المواصفات","copied":"تم النسخ!","chatWithAgent":"محادثة مع الوكيل","stopDevServer":"إيقاف الخادم","startDevServer":"تشغيل الخادم","retryDevServer":"إعادة تشغيل الخادم","starting":"جارٍ التشغيل…","retry":"إعادة المحاولة","start":"تشغيل","failed":"فشل","deleting":"جارٍ الحذف…","addFeature":"إضافة ميزة","reviewRequirements":"مراجعة المتطلبات","reviewTechnicalPlan":"مراجعة الخطة التقنية","reviewChanges":"مراجعة التغييرات","review":"مراجعة","creating":"جارٍ الإنشاء...","completedIn":"اكتمل في {{runtime}}","completed":"مكتمل","waitingOn":"بانتظار {{blockedBy}}","blocked":"محظور","pending":"قيد الانتظار","somethingWentWrong":"حدث خطأ ما","openChat":"فتح المحادثة","viewSessions":"عرض الجلسات","sessionsActive":"الجلسات (نشطة)","sessions":"الجلسات","agentSessions":"جلسات الوكيل","noSessionsFound":"لم يتم العثور على جلسات","showLess":"عرض أقل","showMore":"عرض {{count}} إضافية"},"repositoryNode":{"removeRepository":"إزالة المستودع","removeConfirmTitle":"إزالة المستودع؟","removeConfirmDescription":"سيؤدي هذا إلى إزالة <strong>{{name}}</strong> وجميع ميزاته من مساحة العمل. لن تتأثر الملفات على القرص.","cancel":"إلغاء","remove":"إزالة","openInIde":"فتح في IDE","openInShell":"فتح في الطرفية","openFolder":"فتح المجلد","chatWithAgent":"محادثة مع الوكيل","newFeature":"ميزة جديدة","new":"جديد","behind":"{{count}} متأخر","notAGitRepository":"ليس مستودع git","starting":"جارٍ التشغيل...","run":"تشغيل","startLocalEnvironment":"تشغيل البيئة المحلية","stopDevServer":"إيقاف الخادم","startDevServer":"تشغيل الخادم","retry":"إعادة المحاولة"},"fab":{"closeActions":"إغلاق الإجراءات","createNew":"إنشاء جديد","newFeature":"ميزة جديدة","localFolder":"مجلد محلي","adoptBranch":"تبني فرع","fromGithub":"من GitHub"},"chat":{"shipitAiChat":"محادثة ShipIT AI","writeMessage":"اكتب رسالة...","attachFiles":"إرفاق ملفات","forceStopAgent":"إيقاف الوكيل إجبارياً","stop":"إيقاف","clearChatHistory":"مسح سجل المحادثة","clear":"مسح","noSession":"لا توجد جلسة","yourMessage":"رسالتك","agentMessage":"رسالة الوكيل","agentIsTyping":"الوكيل يكتب","showMore":"عرض المزيد","showLess":"عرض أقل","code":"الكود","preview":"معاينة","openFullscreen":"فتح ملء الشاشة","htmlPreview":"معاينة HTML","htmlPreviewFullscreen":"معاينة HTML ملء الشاشة"},"createDrawer":{"title":"ميزة جديدة","creating":"جارٍ الإنشاء...","cancel":"إلغاء","createFeature":"+ إنشاء ميزة","repository":"المستودع","describeFeature":"صِف ميزتك","featurePlaceholder":"مثال: إضافة تسجيل الدخول عبر GitHub OAuth مع معالجة الاستدعاء وتجديد الرمز...","parentFeature":"الميزة الأصلية","selectParent":"اختر الميزة الأصلية...","searchFeatures":"البحث عن ميزات...","noParent":"بدون أصل","noFeaturesFound":"لم يتم العثور على ميزات.","searchRepositories":"البحث عن مستودعات...","approve":"الموافقة","approveDescription":"الموافقة التلقائية على انتقالات المراحل بدون مراجعة يدوية.","skippedInFastMode":"تم التخطي في الوضع السريع","all":"الكل","toggleAllApprovalGates":"تبديل جميع بوابات الموافقة","evidence":"الأدلة","evidenceDescription":"جمع وإرفاق الأدلة بعد التنفيذ.","collect":"جمع","collectDescription":"التقاط لقطات الشاشة والمخرجات بعد التنفيذ.","addToPr":"إضافة إلى PR","requiresPr":"يتطلب تفعيل PR","requiresEvidence":"يتطلب تفعيل جمع الأدلة","addToPrDescription":"تضمين الأدلة في نص طلب السحب.","git":"GIT","push":"دفع","pushDescription":"دفع الفرع إلى الخادم البعيد بعد التنفيذ.","pr":"PR","prDescription":"فتح طلب سحب بعد الدفع.","watch":"مراقبة","watchDescription":"مراقبة CI وإصلاح الأخطاء تلقائياً.","sync":"Sync","syncDescription":"Pull latest main from remote before creating the feature branch.","commitSpecs":"حفظ المواصفات","commitSpecsDescription":"حفظ المواصفات في المستودع.","forkAndPr":"Fork و PR","forkAndPrDescription":"المساهمة عبر fork (PR إلى upstream).","pendingMode":"قيد الانتظار","pendingModeDescription":"إنشاء بدون تشغيل — التشغيل يدوياً لاحقاً.","fastModeLabel":"الوضع السريع","fastModeDescription":"تخطي مراحل SDLC والتنفيذ مباشرة من الأمر.","fileDropZone":"منطقة إسقاط الملفات","prd":"PRD","prdDescription":"الموافقة التلقائية على انتقال المتطلبات إلى التخطيط.","plan":"خطة","planDescription":"الموافقة التلقائية على انتقال التخطيط إلى التنفيذ.","merge":"دمج","mergeDescription":"الموافقة التلقائية على انتقال الدمج إلى مكتمل."},"featureDrawer":{"copyFeatureId":"نسخ معرف الميزة","unarchiveFeature":"إلغاء أرشفة الميزة","archiveFeature":"أرشفة الميزة","deleteFeature":"حذف الميزة","stopDevServer":"إيقاف الخادم","startDevServer":"تشغيل الخادم","failedToReject":"فشل رفض {{label}}","rejected":"تم رفض {{label}} — الوكيل يعيد المحاولة (التكرار {{n}})","excessiveIterations":"التكرار {{n}} — فكر في الموافقة أو تعديل الملاحظات","failedToApprove":"فشل الموافقة على {{label}}","approved":"تمت الموافقة على {{label}} — الوكيل يستأنف","failedToApproveRequirements":"فشل الموافقة على المتطلبات","requirementsApproved":"تمت الموافقة على المتطلبات — الوكيل يستأنف","featureResumed":"تم استئناف الميزة — الوكيل يعيد التشغيل","featureStarted":"تم بدء الميزة","approvePlan":"الموافقة على الخطة","sendRevisionFeedback":"إرسال ملاحظات المراجعة"},"overviewTab":{"created":"تم الإنشاء","runtime":"وقت التنفيذ","runningFor":"قيد التشغيل منذ","blockedBy":"محظور بواسطة","error":"خطأ","prd":"PRD","plan":"خطة","merge":"دمج","collect":"جمع","addToPr":"إضافة إلى PR","push":"دفع","pr":"PR","watch":"مراقبة","commitSpecs":"حفظ المواصفات","forkAndPr":"Fork و PR"},"activityTab":{"copyPromptToClipboard":"نسخ الأمر إلى الحافظة","execution":"التنفيذ","wait":"الانتظار","cost":"التكلفة","noActivityRecorded":"لم يتم تسجيل أي نشاط بعد"},"logTab":{"structuredView":"عرض منظم","rawView":"عرض خام","noLogOutput":"لا يوجد ناتج سجل بعد"},"planTab":{"noPlanCreated":"لم يتم إنشاء خطة بعد"},"branchSyncStatus":{"refreshSyncStatus":"تحديث حالة المزامنة","rebaseOnMain":"Rebase على Main"},"drawerActionBar":{"fileDropZone":"منطقة إسقاط الملفات","askAiToRevise":"اطلب من الذكاء الاصطناعي المراجعة...","attachFiles":"إرفاق ملفات","reject":"رفض","sendRevisionFeedback":"إرسال ملاحظات المراجعة","approve":"موافقة","fileTooLarge":"\\"{{name}}\\" يتجاوز حد 10 ميجابايت","fileTypeNotAllowed":"نوع الملف \\"{{ext}}\\" غير مسموح","uploadFailed":"فشل الرفع"},"taskProgress":{"done":"مكتمل","inProgress":"قيد التنفيذ","review":"قيد المراجعة","todo":"للتنفيذ","noTasksDefined":"لم يتم تحديد مهام بعد"},"repositoryDrawer":{"openInIde":"فتح في IDE","openInShell":"فتح في الطرفية","openFolder":"فتح المجلد","syncMain":"مزامنة Main"},"adoptBranch":{"failedToAdopt":"فشل تبني الفرع","repository":"المستودع","branchName":"اسم الفرع","searchRepositories":"البحث عن مستودعات...","searchBranches":"البحث عن فروع..."},"githubImport":{"title":"استيراد من GitHub","description":"استنساخ مستودع GitHub وإضافته إلى ShipIT AI.","githubUrl":"رابط GitHub","urlPlaceholder":"owner/repo أو https://github.com/owner/repo","searchRepositories":"البحث عن مستودعات..."},"versionBadge":{"version":"الإصدار","branch":"الفرع","commit":"الالتزام","path":"المسار"},"mergeReview":{"download":"تنزيل","dataUnavailable":"بيانات مراجعة الدمج غير متاحة"},"baseDrawer":{"close":"إغلاق","stopDevServer":"إيقاف الخادم","startDevServer":"تشغيل الخادم"},"addRepository":{"addRepository":"إضافة مستودع"},"modelPicker":{"searchPlaceholder":"البحث أو كتابة معرف النموذج…"},"skills":{"searchPlaceholder":"البحث عن مهارات..."},"tools":{"noCategoryTools":"لا توجد أدوات في هذه الفئة."},"accessibility":{"close":"إغلاق","loading":"جارٍ التحميل","send":"إرسال","imageNotes":"ملاحظات الصورة","viewServerLogs":"عرض سجلات الخادم","toggleSidebar":"تبديل الشريط الجانبي"}}')},16986,(a,b,c)=>{b.exports={errors:{notFound:"לא נמצא",unauthorized:"לא מורשה",forbidden:"אסור",internal:"שגיאה פנימית",unknown:"אירעה שגיאה לא ידועה",failedToLoad:"טעינת {{resource}} נכשלה",failedToSave:"שמירת {{resource}} נכשלה"},labels:{save:"שמור",cancel:"ביטול",confirm:"אישור",delete:"מחק",edit:"ערוך",close:"סגור",back:"חזרה",next:"הבא",yes:"כן",no:"לא",enabled:"מופעל",disabled:"מושבת",loading:"טוען...",saving:"שומר...",saved:"נשמר",none:"ללא",default:"ברירת מחדל",custom:"מותאם אישית"},status:{success:"הצלחה",error:"שגיאה",warning:"אזהרה",info:"מידע",pending:"ממתין",inProgress:"בתהליך",completed:"הושלם",failed:"נכשל"},confirmation:{areYouSure:"האם אתה בטוח?",cannotBeUndone:"לא ניתן לבטל פעולה זו."},language:{en:"אנגלית",ru:"רוסית",pt:"פורטוגזית",es:"ספרדית",ar:"ערבית",he:"עברית",fr:"צרפתית",de:"גרמנית"}}},78742,(a,b,c)=>{b.exports=JSON.parse('{"settings":{"title":"הגדרות","saving":"שומר...","saved":"נשמר","failedToSave":"שמירת ההגדרות נכשלה","sections":{"language":"שפה","agent":"סוכן","environment":"סביבה","workflow":"תהליך עבודה","ci":"CI","timeouts":"תפוגות זמן","notifications":"התראות","flags":"דגלים","chat":"צ\'אט","layout":"פריסה","database":"מסד נתונים"},"language":{"title":"שפה","description":"בחר את שפת התצוגה המועדפת שלך","label":"שפת תצוגה","placeholder":"בחר שפה","failedToSave":"שמירת הגדרות השפה נכשלה"},"agent":{"title":"סוכן מועדף","sectionTitle":"סוכן","description":"בחר את סוכן הקידוד ושיטת האימות","sectionDescription":"סוכן קידוד AI ואימות","agentType":"סוג סוכן","agentAndModel":"סוכן ומודל","agentAndModelDescription":"ספק ומודל לכל הפעולות","authMethod":"שיטת אימות","apiToken":"אסימון API","apiTokenPlaceholder":"הזן את אסימון ה-API שלך","apiTokenHelper":"נשמר אוטומטית כאשר אתה עוזב את השדה","failedToSave":"שמירת הגדרות הסוכן נכשלה","hint":"בחר איזה סוכן קידוד AI מפעיל את הפיצ\'רים שלך. כל סוכן תומך במודלים ויכולות שונים. האימות נפתר אוטומטית דרך הסשן הפעיל שלך.","links":{"agentSystem":"מערכת סוכנים","addingAgents":"הוספת סוכנים","configurationGuide":"מדריך הגדרה"}},"environment":{"title":"IDE וטרמינל","sectionTitle":"סביבה","description":"הגדר את העורך, ה-Shell והעדפות הטרמינל שלך","sectionDescription":"עורך, Shell והעדפות טרמינל","defaultEditor":"עורך ברירת מחדל","defaultEditorDescription":"עורך שנפתח לפעולות קבצים","shellPreference":"העדפת Shell","shell":"Shell","shellDescription":"Shell ברירת מחדל לסקריפטים שנוצרו","terminalEmulator":"אמולטור טרמינל","terminal":"טרמינל","terminalDescription":"אמולטור טרמינל לסשנים","systemTerminal":"טרמינל מערכת","installed":"מותקן","notInstalled":"לא מותקן","failedToSave":"שמירת הגדרות IDE וטרמינל נכשלה","hint":"העורך המועדף שלך פותח קבצים לסקירה. הגדרת ה-Shell שולטת בסקריפטים שנוצרו. אמולטור הטרמינל מופעל בעת פתיחת סשנים מממשק ה-Web.","links":{"configurationGuide":"מדריך הגדרה"}},"workflow":{"title":"תהליך עבודה","description":"הגדר התנהגות PR, שערי אישור והגדרות CI","sectionDescription":"התנהגות אוטומציה לאחר מימוש","defaultFastMode":"מצב מהיר כברירת מחדל","defaultFastModeDescription":"דילוג על שלבי SDLC ויישום ישירות מהפרומפט","subsections":{"approve":"אישור","evidence":"ראיות","git":"Git"},"autoApprovePrd":"אישור אוטומטי של PRD","autoApprovePrdDescription":"דלג על סקירה ידנית של דרישות","autoApprovePlan":"אישור אוטומטי של תוכנית","autoApprovePlanDescription":"דלג על סקירה ידנית של תוכנית מימוש","autoApproveMerge":"אישור אוטומטי של מיזוג","autoApproveMergeDescription":"מזג ללא סקירה ידנית","collectEvidence":"אסוף ראיות","collectEvidenceDescription":"צלם מסכים ואסוף ממצאים לאחר מימוש","addEvidenceToPr":"הוסף ראיות ל-PR","addEvidenceToPrDescription":"כלול ראיות בגוף בקשת המשיכה","pushOnComplete":"דחוף בסיום","pushOnCompleteDescription":"דחוף לשרת כאשר המימוש מסתיים","openPrOnComplete":"פתח PR בסיום","openPrOnCompleteDescription":"צור בקשת משיכה בסיום","watchCiAfterPush":"עקוב אחר CI לאחר דחיפה","watchCiAfterPushDescription":"עקוב אחר CI ותקן כשלונות אוטומטית. השבת כדי למנוע חריגה ממגבלות קצב.","approvalGates":"שערי אישור","prdAutoApproval":"אישור אוטומטי של PRD","planAutoApproval":"אישור אוטומטי של תוכנית","mergeAutoApproval":"אישור אוטומטי של מיזוג","ciSettings":"הגדרות CI","ciWatchFixLoop":"לולאת מעקב/תיקון CI","maxFixAttempts":"מספר מרבי של ניסיונות תיקון","watchTimeout":"תפוגת זמן מעקב (שניות)","maxLogCharacters":"מספר מרבי של תווים ביומן","pollInterval":"מרווח בדיקה (שניות)","hideCiStatus":"הסתר סטטוס CI","stageTimeouts":"תפוגות זמן שלבים","failedToSave":"שמירת הגדרות תהליך העבודה נכשלה","hint":"קבע עד כמה כל הרצת פיצ\'ר אוטונומית. אישור אוטומטי מדלג על עצירת הסקירה האנושית בכל שלב. אפשרויות דחיפה ו-PR שולטות במה שקורה לאחר מימוש מוצלח.","links":{"approvalGates":"שערי אישור","pushAndPrFlags":"דגלי דחיפה ו-PR"}},"ci":{"title":"אינטגרציה רציפה","description":"מגבלות ותפוגות זמן למעקב CI","maxFixAttempts":"מספר מרבי של ניסיונות תיקון","maxFixAttemptsDescription":"ניסיונות חוזרים של הסוכן על CI כושל","watchTimeout":"תפוגת זמן מעקב","watchTimeoutDescription":"המתנה מרבית להשלמת CI","maxLogSize":"גודל מרבי ליומן","maxLogSizeDescription":"קטע יומני CI מעבר למגבלה זו","pollInterval":"מרווח בדיקה","pollIntervalDescription":"תדירות בדיקת עדכוני סטטוס CI ב-GitHub","hideCiStatus":"הסתר סטטוס CI","hideCiStatusDescription":"הסתר תגי סטטוס CI ממגירת הפיצ\'ר וסקירת המיזוג","hint":"כאשר פיצ\'ר מסתיים, הסוכן יכול לעקוב אחר CI ולתקן כשלונות אוטומטית. מגבלות אלה מונעות ניסיונות חוזרים בלתי מבוקרים ושולטות בכמות פלט היומן שנשלח לסוכן לניתוח.","links":{"cicdPipeline":"צינור CI/CD","ciSecurityGates":"שערי אבטחת CI"}},"stageTimeouts":{"title":"תפוגות זמן שלבים","description":"זמן ביצוע מרבי לכל שלב סוכן","subsections":{"featureAgent":"סוכן פיצ\'ר","analyzeRepoAgent":"סוכן ניתוח מאגר"},"analyze":"ניתוח","analyzeDescription":"תפוגת זמן ניתוח מאגר","requirements":"דרישות","requirementsDescription":"תפוגת זמן איסוף דרישות","research":"מחקר","researchDescription":"תפוגת זמן מחקר טכני","plan":"תוכנית","planDescription":"תפוגת זמן תכנון מימוש","implement":"מימוש","implementDescription":"תפוגת זמן מימוש קוד","merge":"מיזוג","mergeDescription":"תפוגת זמן יצירת PR ומיזוג","hint":"לכל סוכן תפוגות זמן שלבים מוגדרות באופן עצמאי. כאשר שלב חורג מתפוגת הזמן שלו, הסוכן מופסק. תפוגות זמן ארוכות יותר שימושיות למימושים מורכבים. ברירת המחדל של סוכן פיצ\'ר היא 30 דקות לשלב. ברירת המחדל של סוכן ניתוח מאגר היא 10 דקות."},"notifications":{"title":"התראות","description":"הגדר ערוצי התראה והעדפות אירועים","sectionDescription":"איך ומתי תקבל התראות","channels":"ערוצים","inApp":"באפליקציה","inAppLabel":"באפליקציה","inAppDescription":"התראות בתוך ממשק ShipIT AI","subsections":{"agentEvents":"אירועי סוכן","pullRequestEvents":"אירועי בקשות משיכה"},"events":{"agentStarted":"סוכן הופעל","phaseCompleted":"שלב הושלם","waitingApproval":"ממתין לאישור","agentCompleted":"סוכן סיים","agentFailed":"סוכן נכשל","mergeReviewReady":"סקירת מיזוג מוכנה","prMerged":"PR מוזג","prClosed":"PR נסגר","prChecksPassed":"בדיקות PR עברו","prChecksFailed":"בדיקות PR נכשלו","prBlocked":"PR חסום"},"failedToSave":"שמירת הגדרות ההתראות נכשלה","hint":"התראות טוסט באפליקציה מעדכנות אותך. כוונן אילו אירועי מחזור חיים של סוכן מפעילים התראה.","links":{"notificationSystem":"מערכת התראות"}},"featureFlags":{"title":"דגלי פיצ\'ר","description":"הפעל או השבת תכונות ניסיוניות ובטא","sectionDescription":"הפעל או השבת תכונות ניסיוניות","badge":"ניסיוני","skills":"כישורים","skillsDescription":"הפעל את מערכת הכישורים עבור יכולות הסוכן","deployments":"פריסות","deploymentsDescription":"הפעל תהליכי פריסה לסביבות","debug":"ניפוי שגיאות","debugDescription":"הצג לוחות ניפוי שגיאות ורישום מפורט","githubImport":"ייבוא GitHub","githubImportDescription":"הפעל ייבוא מאגרי GitHub בממשק ה-Web","adoptBranch":"אימוץ ענף","adoptBranchDescription":"ייבא ענפים קיימים כפיצ\'רים מנוטרים","gitRebaseSync":"Git Rebase וסנכרון","gitRebaseSyncDescription":"הפעל פעולות rebase-on-main וסנכרון main ב-Git","reactFileManager":"מנהל קבצים React","reactFileManagerDescription":"השתמש במנהל הקבצים המובנה של React במקום בוחר התיקיות של מערכת ההפעלה","hint":"תכונות ניסיוניות שעדיין בפיתוח. הפעל על אחריותך — הן עשויות להשתנות או להיות מוסרות בגרסאות עתידיות. מצב ניפוי שגיאות מוסיף רישום מפורט שימושי לפתרון בעיות."},"interactiveAgent":{"title":"סוכן אינטראקטיבי","description":"הגדרות לשונית צ\'אט עבור סשנים אינטראקטיביים של סוכן לכל פיצ\'ר","enableChatTab":"הפעל לשונית צ\'אט","enableChatTabDescription":"הצג את לשונית הצ\'אט בכל עמודי פרטי הפיצ\'ר","autoTimeout":"תפוגת זמן אוטומטית","autoTimeoutDescription":"דקות חוסר פעילות לפני עצירת הסוכן אוטומטית (1-120)","maxConcurrentSessions":"מספר מרבי של סשנים מקבילים","maxConcurrentSessionsDescription":"מספר מרבי של סשנים אינטראקטיביים פעילים בו-זמנית (1-10)","hint":"לשונית הצ\'אט מפעילה תהליך סוכן מתמשך לכל פיצ\'ר. תפוגת זמן אוטומטית עוצרת סשנים לא פעילים כדי לחסוך במשאבים. מגבלת הסשנים המקבילים מונעת שימוש מופרז במשאבים על מכונות מפתחים."},"fabLayout":{"title":"פריסה","description":"שליטה במיקום כפתורי הפעולה הצפים במרכז הבקרה","swapPosition":"החלפת מיקומי כפתורים צפים","swapPositionDescription":"העברת כפתור הצ\'אט לשמאל וכפתור היצירה לימין","hint":"שני כפתורי הפעולה הצפים (יצירה וצ\'אט) נמצאים בפינות התחתונות של מרכז הבקרה. הפעל את האפשרות הזו כדי להחליף את מיקומיהם."},"database":{"title":"מסד נתונים","description":"נתיב מסד הנתונים וניהול","sectionDescription":"מידע אחסון מקומי","location":"מיקום","locationDescription":"נתיב למסד הנתונים המקומי SQLite","size":"גודל","hint":"כל ההגדרות מאוחסנות במסד נתונים מקומי SQLite ב-~/.shipit-ai/data. מסד הנתונים משתמש בדפוס רשומה יחידה עם מיגרציות אוטומטיות בהפעלה.","links":{"settingsService":"שירות הגדרות","settingsSpec":"מפרט הגדרות"}}},"navigation":{"controlCenter":"מרכז בקרה","dashboard":"לוח בקרה","features":"פיצ\'רים","repositories":"מאגרים","settings":"הגדרות","sessions":"סשנים","tools":"כלים","skills":"כישורים"},"sidebar":{"features":"פיצ\'רים","switchToLight":"מצב בהיר","switchToDark":"מצב כהה","muteSounds":"השתק צלילים","unmuteSounds":"בטל השתקת צלילים","statusActionNeeded":"נדרשת פעולה","statusInProgress":"בתהליך","statusPending":"ממתין","statusBlocked":"חסום","statusError":"שגיאה","statusDone":"הושלם"},"deleteFeature":{"title":"למחוק פיצ\'ר?","description":"פעולה זו תמחק לצמיתות את <strong>{{featureName}}</strong> ({{featureId}}). לא ניתן לבטל פעולה זו.","cleanupLabel":"נקה עץ עבודה וענפים","deleteSubFeatures":"מחק תת-פיצ\'רים","closePullRequest":"סגור בקשת משיכה","cancel":"ביטול","deleting":"מוחק…","delete":"מחק"},"rejectFeedback":{"defaultTitle":"דחה דרישות","defaultDescription":"ספק משוב לסוכן לטיפול בחזרה הבאה. נדרש משוב.","ariaLabel":"משוב דחייה","placeholder":"תאר מה צריך לשנות...","cancel":"ביטול","rejecting":"דוחה…","confirmReject":"אשר דחייה"},"emptyState":{"addProject":"הוסף פרויקט","addProjectDescription":"הוסף את תיקיית הפרויקט שלך כדי לאפשר יצירת פיצ\'רים.","addProjectDescriptionLine2":"תאר מה אתה צריך — ShipIT AI מטפל בשאר.","checkingSetup":"בודק הגדרה…","ready":"{{label}} מוכן","notInstalled":"{{label}} לא מותקן","reCheck":"בדוק שוב","needsAuth":"{{label}} דורש אימות","open":"פתח {{label}}","checking":"בודק {{label}}…","notFound":"{{label}} לא נמצא","docs":"תיעוד","opening":"פותח…","chooseFolder":"בחר תיקייה","folderHint":"כל תיקייה מתאימה — Git יאותחל אוטומטית אם צריך.","orUseCli":"או השתמש ב-CLI","copyCommands":"העתק פקודות","git":"Git","gitRequired":"נדרש לכל השלבים","githubCli":"GitHub CLI","githubCliRequired":"נדרש לבקשות משיכה"},"welcome":{"loadingAgents":"טוען סוכנים…","chooseAgent":"בחר את הסוכן שלך","pickModel":"בחר מודל","selectAgentSubtitle":"בחר את סוכן הקידוד AI שתרצה ש-ShipIT AI ישתמש בו.","chooseModelSubtitle":"בחר איזה מודל {{label}} להריץ.","ghCliNotice":"<0>GitHub CLI (gh)</0> נדרש ליכולות ריפוי עצמי מלאות של CI/CD. <1>התקן אותו כאן</1>.","ghCliRequired":"GitHub CLI (gh)","ghCliRequiredText":"נדרש ליכולות ריפוי עצמי מלאות של CI/CD.","installHere":"התקן אותו כאן","back":"חזרה"},"canvas":{"noFeatures":"אין פיצ\'רים עדיין","noFeaturesDescription":"התחל ביצירת הפיצ\'ר הראשון שלך.","newFeature":"פיצ\'ר חדש","hideArchived":"הסתר מאורכבים","showArchived":"הצג מאורכבים","hideArchivedLabel":"הסתר מאורכבים","showArchivedLabel":"הצג מאורכבים","zoomOut":"הקטן","zoomIn":"הגדל","fitView":"התאם לתצוגה","resetView":"אפס תצוגה"},"common":{"noData":"אין נתונים זמינים","retry":"נסה שוב","saving":"שומר...","saved":"נשמר","decrease":"הקטן","increase":"הגדל","cancel":"ביטול"},"featureNode":{"archiveFeature":"ארכיון פיצ\'ר","deleteFeature":"מחיקת פיצ\'ר","unarchiveFeature":"שחזור מארכיון","archiveConfirmTitle":"לארכב פיצ\'ר?","archiveConfirmDescription":"<strong>{{name}}</strong> יוסתר מהקנבס. ניתן לשחזר אותו מאוחר יותר.","cancel":"ביטול","archive":"ארכיון","fastMode":"מצב מהיר","specDriven":"מבוסס מפרט","copied":"הועתק!","chatWithAgent":"צ\'אט עם הסוכן","stopDevServer":"עצירת שרת","startDevServer":"הפעלת שרת","retryDevServer":"הפעלה מחדש של שרת","starting":"מפעיל…","retry":"ניסיון חוזר","start":"הפעלה","failed":"נכשל","deleting":"מוחק…","addFeature":"הוספת פיצ\'ר","reviewRequirements":"סקירת דרישות","reviewTechnicalPlan":"סקירת תוכנית טכנית","reviewChanges":"סקירת שינויים","review":"סקירה","creating":"יוצר...","completedIn":"הושלם ב-{{runtime}}","completed":"הושלם","waitingOn":"ממתין ל-{{blockedBy}}","blocked":"חסום","pending":"ממתין","somethingWentWrong":"משהו השתבש","openChat":"פתיחת צ\'אט","viewSessions":"צפייה בהפעלות","sessionsActive":"הפעלות (פעילות)","sessions":"הפעלות","agentSessions":"הפעלות סוכן","noSessionsFound":"לא נמצאו הפעלות","showLess":"הצג פחות","showMore":"הצג עוד {{count}}"},"repositoryNode":{"removeRepository":"הסרת מאגר","removeConfirmTitle":"להסיר מאגר?","removeConfirmDescription":"פעולה זו תסיר את <strong>{{name}}</strong> ואת כל הפיצ\'רים שלו מסביבת העבודה. הקבצים על הדיסק לא ייפגעו.","cancel":"ביטול","remove":"הסרה","openInIde":"פתיחה ב-IDE","openInShell":"פתיחה בטרמינל","openFolder":"פתיחת תיקייה","chatWithAgent":"צ\'אט עם הסוכן","newFeature":"פיצ\'ר חדש","new":"חדש","behind":"{{count}} מאחור","notAGitRepository":"לא מאגר git","starting":"מפעיל...","run":"הפעלה","startLocalEnvironment":"הפעלת סביבה מקומית","stopDevServer":"עצירת שרת","startDevServer":"הפעלת שרת","retry":"ניסיון חוזר"},"fab":{"closeActions":"סגירת פעולות","createNew":"יצירה חדשה","newFeature":"פיצ\'ר חדש","localFolder":"תיקייה מקומית","adoptBranch":"אימוץ ענף","fromGithub":"מ-GitHub"},"chat":{"shipitAiChat":"צ\'אט ShipIT AI","writeMessage":"כתוב הודעה...","attachFiles":"צירוף קבצים","forceStopAgent":"עצירת סוכן בכוח","stop":"עצירה","clearChatHistory":"ניקוי היסטוריית צ\'אט","clear":"ניקוי","noSession":"אין הפעלה","yourMessage":"ההודעה שלך","agentMessage":"הודעת הסוכן","agentIsTyping":"הסוכן מקליד","showMore":"הצג עוד","showLess":"הצג פחות","code":"קוד","preview":"תצוגה מקדימה","openFullscreen":"פתיחה במסך מלא","htmlPreview":"תצוגה מקדימה HTML","htmlPreviewFullscreen":"תצוגה מקדימה HTML מסך מלא"},"createDrawer":{"title":"פיצ\'ר חדש","creating":"יוצר...","cancel":"ביטול","createFeature":"+ יצירת פיצ\'ר","repository":"מאגר","describeFeature":"תאר את הפיצ\'ר שלך","featurePlaceholder":"לדוגמה: הוספת התחברות GitHub OAuth עם טיפול בהחזרה וחידוש טוקן...","parentFeature":"פיצ\'ר הורה","selectParent":"בחר פיצ\'ר הורה...","searchFeatures":"חיפוש פיצ\'רים...","noParent":"ללא הורה","noFeaturesFound":"לא נמצאו פיצ\'רים.","searchRepositories":"חיפוש מאגרים...","approve":"אישור","approveDescription":"אישור אוטומטי של מעברי שלב ללא בדיקה ידנית.","skippedInFastMode":"דולג במצב מהיר","all":"הכל","toggleAllApprovalGates":"החלפת כל שערי האישור","evidence":"ראיות","evidenceDescription":"איסוף וצירוף ראיות לאחר היישום.","collect":"איסוף","collectDescription":"צילום מסכים ושמירת ארטיפקטים לאחר היישום.","addToPr":"הוספה ל-PR","requiresPr":"דורש PR מופעל","requiresEvidence":"דורש איסוף ראיות מופעל","addToPrDescription":"הכללת ראיות בגוף בקשת המשיכה.","git":"GIT","push":"דחיפה","pushDescription":"דחיפת ענף לשרת מרוחק לאחר היישום.","pr":"PR","prDescription":"פתיחת בקשת משיכה לאחר הדחיפה.","watch":"מעקב","watchDescription":"מעקב אחר CI ותיקון שגיאות אוטומטי.","sync":"Sync","syncDescription":"Pull latest main from remote before creating the feature branch.","commitSpecs":"שמירת מפרטים","commitSpecsDescription":"שמירת מפרטים למאגר.","forkAndPr":"Fork ו-PR","forkAndPrDescription":"תרומה דרך fork (PR ל-upstream).","pendingMode":"ממתין","pendingModeDescription":"יצירה ללא הפעלה — הפעלה ידנית מאוחר יותר.","fastModeLabel":"מצב מהיר","fastModeDescription":"דילוג על שלבי SDLC ויישום ישירות מהפרומפט.","fileDropZone":"אזור שחרור קבצים","prd":"PRD","prdDescription":"אישור אוטומטי של מעבר דרישות לתכנון.","plan":"תוכנית","planDescription":"אישור אוטומטי של מעבר תכנון ליישום.","merge":"מיזוג","mergeDescription":"אישור אוטומטי של מעבר מיזוג להשלמה."},"featureDrawer":{"copyFeatureId":"העתקת מזהה פיצ\'ר","unarchiveFeature":"שחזור מארכיון","archiveFeature":"ארכיון פיצ\'ר","deleteFeature":"מחיקת פיצ\'ר","stopDevServer":"עצירת שרת","startDevServer":"הפעלת שרת","failedToReject":"דחייה של {{label}} נכשלה","rejected":"{{label}} נדחה — הסוכן חוזר על התהליך (איטרציה {{n}})","excessiveIterations":"איטרציה {{n}} — שקול אישור או התאמת המשוב","failedToApprove":"אישור {{label}} נכשל","approved":"{{label}} אושר — הסוכן ממשיך","failedToApproveRequirements":"אישור הדרישות נכשל","requirementsApproved":"הדרישות אושרו — הסוכן ממשיך","featureResumed":"הפיצ\'ר חודש — הסוכן מופעל מחדש","featureStarted":"הפיצ\'ר הופעל","approvePlan":"אישור תוכנית","sendRevisionFeedback":"שליחת משוב לתיקון"},"overviewTab":{"created":"נוצר","runtime":"זמן ריצה","runningFor":"פועל מזה","blockedBy":"חסום על ידי","error":"שגיאה","prd":"PRD","plan":"תוכנית","merge":"מיזוג","collect":"איסוף","addToPr":"הוספה ל-PR","push":"דחיפה","pr":"PR","watch":"מעקב","commitSpecs":"שמירת מפרטים","forkAndPr":"Fork ו-PR"},"activityTab":{"copyPromptToClipboard":"העתקת פרומפט ללוח","execution":"ביצוע","wait":"המתנה","cost":"עלות","noActivityRecorded":"לא נרשמה פעילות עדיין"},"logTab":{"structuredView":"תצוגה מובנית","rawView":"תצוגה גולמית","noLogOutput":"אין פלט יומן עדיין"},"planTab":{"noPlanCreated":"טרם נוצרה תוכנית"},"branchSyncStatus":{"refreshSyncStatus":"רענון מצב סנכרון","rebaseOnMain":"Rebase על Main"},"drawerActionBar":{"fileDropZone":"אזור שחרור קבצים","askAiToRevise":"בקש מה-AI לתקן...","attachFiles":"צירוף קבצים","reject":"דחייה","sendRevisionFeedback":"שליחת משוב לתיקון","approve":"אישור","fileTooLarge":"\\"{{name}}\\" חורג ממגבלת 10 MB","fileTypeNotAllowed":"סוג קובץ \\"{{ext}}\\" אינו מותר","uploadFailed":"ההעלאה נכשלה"},"taskProgress":{"done":"הושלם","inProgress":"בביצוע","review":"בסקירה","todo":"לביצוע","noTasksDefined":"טרם הוגדרו משימות"},"repositoryDrawer":{"openInIde":"פתיחה ב-IDE","openInShell":"פתיחה בטרמינל","openFolder":"פתיחת תיקייה","syncMain":"סנכרון Main"},"adoptBranch":{"failedToAdopt":"אימוץ הענף נכשל","repository":"מאגר","branchName":"שם ענף","searchRepositories":"חיפוש מאגרים...","searchBranches":"חיפוש ענפים..."},"githubImport":{"title":"ייבוא מ-GitHub","description":"שכפול מאגר GitHub והוספתו ל-ShipIT AI.","githubUrl":"כתובת GitHub","urlPlaceholder":"owner/repo או https://github.com/owner/repo","searchRepositories":"חיפוש מאגרים..."},"versionBadge":{"version":"גרסה","branch":"ענף","commit":"קומיט","path":"נתיב"},"mergeReview":{"download":"הורדה","dataUnavailable":"נתוני סקירת מיזוג אינם זמינים"},"baseDrawer":{"close":"סגירה","stopDevServer":"עצירת שרת","startDevServer":"הפעלת שרת"},"addRepository":{"addRepository":"הוספת מאגר"},"modelPicker":{"searchPlaceholder":"חיפוש או הקלדת מזהה מודל…"},"skills":{"searchPlaceholder":"חיפוש כישורים..."},"tools":{"noCategoryTools":"אין כלים בקטגוריה זו."},"accessibility":{"close":"סגירה","loading":"טוען","send":"שליחה","imageNotes":"הערות לתמונה","viewServerLogs":"צפייה ביומני שרת","toggleSidebar":"החלפת סרגל צד"}}')},55444,(a,b,c)=>{b.exports={errors:{notFound:"Introuvable",unauthorized:"Non autorisé",forbidden:"Interdit",internal:"Erreur interne",unknown:"Une erreur inconnue s'est produite",failedToLoad:"Échec du chargement de {{resource}}",failedToSave:"Échec de l'enregistrement de {{resource}}"},labels:{save:"Enregistrer",cancel:"Annuler",confirm:"Confirmer",delete:"Supprimer",edit:"Modifier",close:"Fermer",back:"Retour",next:"Suivant",yes:"Oui",no:"Non",enabled:"Activé",disabled:"Désactivé",loading:"Chargement...",saving:"Enregistrement...",saved:"Enregistré",none:"Aucun",default:"Par défaut",custom:"Personnalisé"},status:{success:"Succès",error:"Erreur",warning:"Avertissement",info:"Info",pending:"En attente",inProgress:"En cours",completed:"Terminé",failed:"Échoué"},confirmation:{areYouSure:"Êtes-vous sûr ?",cannotBeUndone:"Cette action est irréversible."},language:{en:"Anglais",ru:"Russe",pt:"Portugais",es:"Espagnol",ar:"Arabe",he:"Hébreu",fr:"Français",de:"Allemand"}}},32886,(a,b,c)=>{b.exports=JSON.parse('{"settings":{"title":"Paramètres","saving":"Enregistrement...","saved":"Enregistré","failedToSave":"Échec de l\'enregistrement des paramètres","sections":{"language":"Langue","agent":"Agent","environment":"Environnement","workflow":"Workflow","ci":"CI","timeouts":"Délais d\'attente","notifications":"Notifications","flags":"Drapeaux","chat":"Chat","layout":"Disposition","database":"Base de données"},"language":{"title":"Langue","description":"Choisissez votre langue d\'affichage préférée","label":"Langue d\'affichage","placeholder":"Sélectionnez une langue","failedToSave":"Échec de l\'enregistrement des paramètres de langue"},"agent":{"title":"Agent préféré","sectionTitle":"Agent","description":"Choisissez votre agent de codage IA et votre méthode d\'authentification","sectionDescription":"Agent de codage IA et authentification","agentType":"Type d\'agent","agentAndModel":"Agent et modèle","agentAndModelDescription":"Fournisseur et modèle pour toutes les opérations","authMethod":"Méthode d\'authentification","apiToken":"Jeton API","apiTokenPlaceholder":"Entrez votre jeton API","apiTokenHelper":"Enregistré automatiquement lorsque vous quittez le champ","failedToSave":"Échec de l\'enregistrement des paramètres de l\'agent","hint":"Choisissez quel agent de codage IA alimente vos fonctionnalités. Chaque agent prend en charge différents modèles et capacités. L\'authentification est résolue automatiquement via votre session active.","links":{"agentSystem":"Système d\'agent","addingAgents":"Ajout d\'agents","configurationGuide":"Guide de configuration"}},"environment":{"title":"IDE et terminal","sectionTitle":"Environnement","description":"Configurez votre éditeur, shell et préférences de terminal par défaut","sectionDescription":"Éditeur, shell et préférences de terminal","defaultEditor":"Éditeur par défaut","defaultEditorDescription":"Éditeur lancé pour les opérations sur les fichiers","shellPreference":"Préférence de shell","shell":"Shell","shellDescription":"Shell par défaut pour les scripts générés","terminalEmulator":"Émulateur de terminal","terminal":"Terminal","terminalDescription":"Émulateur de terminal pour les sessions shell","systemTerminal":"Terminal système","installed":"Installé","notInstalled":"Non installé","failedToSave":"Échec de l\'enregistrement des paramètres IDE et terminal","hint":"Votre éditeur préféré ouvre les fichiers pour examen. Le paramètre shell contrôle les scripts générés. L\'émulateur de terminal est lancé lors de l\'ouverture de sessions shell depuis l\'interface web.","links":{"configurationGuide":"Guide de configuration"}},"workflow":{"title":"Workflow","description":"Configurez le comportement des PR, les portes d\'approbation et les paramètres CI","sectionDescription":"Comportement d\'automatisation après l\'implémentation","defaultFastMode":"Mode rapide par défaut","defaultFastModeDescription":"Ignorer les phases SDLC et implémenter directement depuis le prompt","subsections":{"approve":"Approuver","evidence":"Preuves","git":"Git"},"autoApprovePrd":"Approbation auto du PRD","autoApprovePrdDescription":"Ignorer la revue manuelle des exigences","autoApprovePlan":"Approbation auto du plan","autoApprovePlanDescription":"Ignorer la revue manuelle du plan d\'implémentation","autoApproveMerge":"Approbation auto de la fusion","autoApproveMergeDescription":"Fusionner sans revue manuelle","collectEvidence":"Collecter les preuves","collectEvidenceDescription":"Capturer des captures d\'écran et des artefacts après l\'implémentation","addEvidenceToPr":"Ajouter les preuves à la PR","addEvidenceToPrDescription":"Inclure les preuves dans le corps de la pull request","pushOnComplete":"Pousser à la fin","pushOnCompleteDescription":"Pousser vers le distant lorsque l\'implémentation est terminée","openPrOnComplete":"Ouvrir une PR à la fin","openPrOnCompleteDescription":"Créer une pull request une fois terminé","watchCiAfterPush":"Surveiller la CI après le push","watchCiAfterPushDescription":"Surveiller la CI et corriger automatiquement les échecs. Désactivez pour éviter les limites de débit.","approvalGates":"Portes d\'approbation","prdAutoApproval":"Approbation auto du PRD","planAutoApproval":"Approbation auto du plan","mergeAutoApproval":"Approbation auto de la fusion","ciSettings":"Paramètres CI","ciWatchFixLoop":"Boucle surveillance/correction CI","maxFixAttempts":"Tentatives de correction max","watchTimeout":"Délai de surveillance (secondes)","maxLogCharacters":"Caractères de journal max","pollInterval":"Intervalle de sondage (secondes)","hideCiStatus":"Masquer le statut CI","stageTimeouts":"Délais par étape","failedToSave":"Échec de l\'enregistrement des paramètres de workflow","hint":"Contrôlez le niveau d\'autonomie de chaque exécution de fonctionnalité. L\'approbation automatique ignore la pause de revue humaine à chaque phase. Les options push et PR contrôlent ce qui se passe après une implémentation réussie.","links":{"approvalGates":"Portes d\'approbation","pushAndPrFlags":"Drapeaux push et PR"}},"ci":{"title":"Intégration continue","description":"Limites et délais pour la surveillance CI","maxFixAttempts":"Tentatives de correction max","maxFixAttemptsDescription":"Tentatives de l\'agent sur un échec CI","watchTimeout":"Délai de surveillance","watchTimeoutDescription":"Attente maximale pour la fin de la CI","maxLogSize":"Taille max des journaux","maxLogSizeDescription":"Tronquer les journaux CI au-delà de cette limite","pollInterval":"Intervalle de sondage","pollIntervalDescription":"Fréquence de vérification du statut CI sur GitHub","hideCiStatus":"Masquer le statut CI","hideCiStatusDescription":"Masquer les badges de statut CI dans le tiroir de fonctionnalité et la revue de fusion","hint":"Lorsqu\'une fonctionnalité est terminée, l\'agent peut surveiller la CI et corriger automatiquement les échecs. Ces limites empêchent les tentatives incontrôlées et contrôlent la quantité de sortie de journal envoyée à l\'agent pour analyse.","links":{"cicdPipeline":"Pipeline CI/CD","ciSecurityGates":"Portes de sécurité CI"}},"stageTimeouts":{"title":"Délais par étape","description":"Temps d\'exécution maximum par étape d\'agent","subsections":{"featureAgent":"Agent de fonctionnalité","analyzeRepoAgent":"Agent d\'analyse de dépôt"},"analyze":"Analyser","analyzeDescription":"Délai d\'analyse du dépôt","requirements":"Exigences","requirementsDescription":"Délai de collecte des exigences","research":"Recherche","researchDescription":"Délai de recherche technique","plan":"Plan","planDescription":"Délai de planification de l\'implémentation","implement":"Implémenter","implementDescription":"Délai d\'implémentation du code","merge":"Fusion","mergeDescription":"Délai de création et fusion de PR","hint":"Chaque agent a des délais par étape configurables indépendamment. Lorsqu\'une étape dépasse son délai, l\'agent est terminé. Des délais plus longs sont utiles pour les implémentations complexes. L\'agent de fonctionnalité a un délai par défaut de 30 minutes par étape. L\'agent d\'analyse de dépôt a un délai par défaut de 10 minutes."},"notifications":{"title":"Notifications","description":"Configurez les canaux de notification et les préférences d\'événements","sectionDescription":"Comment et quand vous êtes notifié","channels":"Canaux","inApp":"Dans l\'application","inAppLabel":"Dans l\'application","inAppDescription":"Notifications dans l\'interface ShipIT AI","subsections":{"agentEvents":"Événements d\'agent","pullRequestEvents":"Événements de pull request"},"events":{"agentStarted":"Agent démarré","phaseCompleted":"Phase terminée","waitingApproval":"En attente d\'approbation","agentCompleted":"Agent terminé","agentFailed":"Agent en échec","mergeReviewReady":"Revue de fusion prête","prMerged":"PR fusionnée","prClosed":"PR fermée","prChecksPassed":"Vérifications PR réussies","prChecksFailed":"Vérifications PR échouées","prBlocked":"PR bloquée"},"failedToSave":"Échec de l\'enregistrement des paramètres de notification","hint":"Les notifications toast dans l\'application vous tiennent informé. Ajustez finement quels événements du cycle de vie de l\'agent déclenchent une notification.","links":{"notificationSystem":"Système de notification"}},"featureFlags":{"title":"Drapeaux de fonctionnalité","description":"Activer ou désactiver les fonctionnalités expérimentales et bêta","sectionDescription":"Activer ou désactiver les fonctionnalités expérimentales","badge":"Expérimental","skills":"Compétences","skillsDescription":"Activer le système de compétences pour les capacités de l\'agent","deployments":"Déploiements","deploymentsDescription":"Activer les workflows de déploiement d\'environnement","debug":"Débogage","debugDescription":"Afficher les panneaux de débogage et la journalisation détaillée","githubImport":"Import GitHub","githubImportDescription":"Activer l\'import de dépôts GitHub dans l\'interface web","adoptBranch":"Adopter une branche","adoptBranchDescription":"Importer des branches existantes comme fonctionnalités suivies","gitRebaseSync":"Git Rebase et synchronisation","gitRebaseSyncDescription":"Activer les opérations de rebase-on-main et sync-main de git","reactFileManager":"Gestionnaire de fichiers React","reactFileManagerDescription":"Utiliser le gestionnaire de fichiers React intégré au lieu du sélecteur de dossier natif du système","hint":"Fonctionnalités expérimentales encore en cours de développement. Activez à vos risques et périls — elles peuvent changer ou être supprimées dans les versions futures. Le mode débogage ajoute une journalisation détaillée utile pour le dépannage."},"interactiveAgent":{"title":"Agent interactif","description":"Paramètres de l\'onglet Chat pour les sessions d\'agent interactif par fonctionnalité","enableChatTab":"Activer l\'onglet Chat","enableChatTabDescription":"Afficher l\'onglet Chat sur toutes les pages de détail de fonctionnalité","autoTimeout":"Délai d\'inactivité automatique","autoTimeoutDescription":"Minutes d\'inactivité avant l\'arrêt automatique de l\'agent (1-120)","maxConcurrentSessions":"Sessions simultanées max","maxConcurrentSessionsDescription":"Nombre maximum de sessions d\'agent interactif actives simultanément (1-10)","hint":"L\'onglet Chat lance un processus d\'agent persistant par fonctionnalité. Le délai d\'inactivité automatique arrête les sessions inactives pour économiser les ressources. Le plafond de sessions simultanées empêche l\'utilisation incontrôlée des ressources sur les machines de développement."},"fabLayout":{"title":"Disposition","description":"Contrôler la position des boutons d\'action flottants dans le centre de contrôle","swapPosition":"Inverser les positions des FAB","swapPositionDescription":"Déplacer le bouton Chat à gauche et le bouton Créer à droite","hint":"Les deux boutons d\'action flottants (Créer et Chat) se trouvent dans les coins inférieurs du centre de contrôle. Activez cette option pour inverser leurs positions."},"database":{"title":"Base de données","description":"Chemin et gestion de la base de données","sectionDescription":"Informations de stockage local","location":"Emplacement","locationDescription":"Chemin vers la base de données SQLite locale","size":"Taille","hint":"Tous les paramètres sont stockés dans une base de données SQLite locale dans ~/.shipit-ai/data. La base de données utilise un modèle d\'enregistrement singleton avec des migrations automatiques au démarrage.","links":{"settingsService":"Service de paramètres","settingsSpec":"Spécification des paramètres"}}},"navigation":{"controlCenter":"Centre de contrôle","dashboard":"Tableau de bord","features":"Fonctionnalités","repositories":"Dépôts","settings":"Paramètres","sessions":"Sessions","tools":"Outils","skills":"Compétences"},"sidebar":{"features":"Fonctionnalités","switchToLight":"Mode clair","switchToDark":"Mode sombre","muteSounds":"Couper les sons","unmuteSounds":"Activer les sons","statusActionNeeded":"Action requise","statusInProgress":"En cours","statusPending":"En attente","statusBlocked":"Bloqué","statusError":"Erreur","statusDone":"Terminé"},"deleteFeature":{"title":"Supprimer la fonctionnalité ?","description":"Cela supprimera définitivement <strong>{{featureName}}</strong> ({{featureId}}). Cette action est irréversible.","cleanupLabel":"Nettoyer le worktree et les branches","deleteSubFeatures":"Supprimer les sous-fonctionnalités","closePullRequest":"Fermer la pull request","cancel":"Annuler","deleting":"Suppression…","delete":"Supprimer"},"rejectFeedback":{"defaultTitle":"Rejeter les exigences","defaultDescription":"Fournissez un retour pour que l\'agent puisse y répondre lors de la prochaine itération. Le retour est obligatoire.","ariaLabel":"Retour de rejet","placeholder":"Décrivez ce qui doit changer...","cancel":"Annuler","rejecting":"Rejet en cours…","confirmReject":"Confirmer le rejet"},"emptyState":{"addProject":"Ajouter un projet","addProjectDescription":"Ajoutez votre dossier de projet pour débloquer la création de fonctionnalités.","addProjectDescriptionLine2":"Décrivez ce dont vous avez besoin — ShipIT AI s\'occupe du reste.","checkingSetup":"Vérification de la configuration…","ready":"{{label}} prêt","notInstalled":"{{label}} non installé","reCheck":"Revérifier","needsAuth":"{{label}} nécessite une authentification","open":"Ouvrir {{label}}","checking":"Vérification de {{label}}…","notFound":"{{label}} introuvable","docs":"Documentation","opening":"Ouverture…","chooseFolder":"Choisir un dossier","folderHint":"N\'importe quel dossier fonctionne — git sera initialisé automatiquement si nécessaire.","orUseCli":"ou utilisez le CLI","copyCommands":"Copier les commandes","git":"Git","gitRequired":"Requis pour toutes les phases","githubCli":"GitHub CLI","githubCliRequired":"Requis pour les pull requests"},"welcome":{"loadingAgents":"Chargement des agents…","chooseAgent":"Choisissez votre agent","pickModel":"Choisissez un modèle","selectAgentSubtitle":"Sélectionnez l\'agent de codage IA que vous souhaitez que ShipIT AI utilise.","chooseModelSubtitle":"Choisissez quel modèle {{label}} exécuter.","ghCliNotice":"<0>GitHub CLI (gh)</0> est requis pour les capacités complètes d\'auto-réparation CI/CD. <1>Installez-le ici</1>.","ghCliRequired":"GitHub CLI (gh)","ghCliRequiredText":"est requis pour les capacités complètes d\'auto-réparation CI/CD.","installHere":"Installez-le ici","back":"Retour"},"canvas":{"noFeatures":"Aucune fonctionnalité pour l\'instant","noFeaturesDescription":"Commencez par créer votre première fonctionnalité.","newFeature":"Nouvelle fonctionnalité","hideArchived":"Masquer les archivées","showArchived":"Afficher les archivées","hideArchivedLabel":"Masquer les archivées","showArchivedLabel":"Afficher les archivées","zoomOut":"Dézoomer","zoomIn":"Zoomer","fitView":"Ajuster la vue","resetView":"Réinitialiser la vue"},"common":{"noData":"Aucune donnée disponible","retry":"Réessayer","saving":"Enregistrement...","saved":"Enregistré","decrease":"Diminuer","increase":"Augmenter","cancel":"Annuler"},"featureNode":{"archiveFeature":"Archiver la fonctionnalité","deleteFeature":"Supprimer la fonctionnalité","unarchiveFeature":"Désarchiver la fonctionnalité","archiveConfirmTitle":"Archiver la fonctionnalité ?","archiveConfirmDescription":"<strong>{{name}}</strong> sera masquée du canvas. Vous pourrez la désarchiver plus tard.","cancel":"Annuler","archive":"Archiver","fastMode":"Mode rapide","specDriven":"Basé sur les spécifications","copied":"Copié !","chatWithAgent":"Chat avec l\'agent","stopDevServer":"Arrêter le serveur","startDevServer":"Démarrer le serveur","retryDevServer":"Relancer le serveur","starting":"Démarrage…","retry":"Réessayer","start":"Démarrer","failed":"Échec","deleting":"Suppression…","addFeature":"Ajouter une fonctionnalité","reviewRequirements":"Vérifier les exigences","reviewTechnicalPlan":"Vérifier le plan technique","reviewChanges":"Vérifier les modifications","review":"Vérification","creating":"Création...","completedIn":"Terminé en {{runtime}}","completed":"Terminé","waitingOn":"En attente de {{blockedBy}}","blocked":"Bloqué","pending":"En attente","somethingWentWrong":"Une erreur est survenue","openChat":"Ouvrir le chat","viewSessions":"Voir les sessions","sessionsActive":"Sessions (actives)","sessions":"Sessions","agentSessions":"Sessions de l\'agent","noSessionsFound":"Aucune session trouvée","showLess":"Afficher moins","showMore":"Afficher {{count}} de plus"},"repositoryNode":{"removeRepository":"Supprimer le dépôt","removeConfirmTitle":"Supprimer le dépôt ?","removeConfirmDescription":"Cela supprimera <strong>{{name}}</strong> et toutes ses fonctionnalités de l\'espace de travail. Les fichiers sur le disque ne seront pas affectés.","cancel":"Annuler","remove":"Supprimer","openInIde":"Ouvrir dans l\'IDE","openInShell":"Ouvrir dans le terminal","openFolder":"Ouvrir le dossier","chatWithAgent":"Chat avec l\'agent","newFeature":"Nouvelle fonctionnalité","new":"Nouveau","behind":"{{count}} en retard","notAGitRepository":"N\'est pas un dépôt git","starting":"Démarrage...","run":"Exécuter","startLocalEnvironment":"démarrer l\'environnement local","stopDevServer":"Arrêter le serveur","startDevServer":"Démarrer le serveur","retry":"Réessayer"},"fab":{"closeActions":"Fermer les actions","createNew":"Créer","newFeature":"Nouvelle fonctionnalité","localFolder":"Dossier local","adoptBranch":"Adopter une branche","fromGithub":"Depuis GitHub"},"chat":{"shipitAiChat":"ShipIT AI Chat","writeMessage":"Écrire un message...","attachFiles":"Joindre des fichiers","forceStopAgent":"Forcer l\'arrêt de l\'agent","stop":"Arrêter","clearChatHistory":"Effacer l\'historique du chat","clear":"Effacer","noSession":"Pas de session","yourMessage":"Votre message","agentMessage":"Message de l\'agent","agentIsTyping":"L\'agent écrit","showMore":"Afficher plus","showLess":"Afficher moins","code":"Code","preview":"Aperçu","openFullscreen":"Ouvrir en plein écran","htmlPreview":"Aperçu HTML","htmlPreviewFullscreen":"Aperçu HTML plein écran"},"createDrawer":{"title":"NOUVELLE FONCTIONNALITÉ","creating":"Création...","cancel":"Annuler","createFeature":"+ Créer une fonctionnalité","repository":"DÉPÔT","describeFeature":"DÉCRIVEZ VOTRE FONCTIONNALITÉ","featurePlaceholder":"ex. Ajouter la connexion GitHub OAuth avec gestion du callback et renouvellement du token...","parentFeature":"FONCTIONNALITÉ PARENTE","selectParent":"Sélectionner une fonctionnalité parente...","searchFeatures":"Rechercher des fonctionnalités...","noParent":"Sans parent","noFeaturesFound":"Aucune fonctionnalité trouvée.","searchRepositories":"Rechercher des dépôts...","approve":"APPROBATION","approveDescription":"Auto-approuver les transitions de phase sans vérification manuelle.","skippedInFastMode":"Ignoré en mode rapide","all":"Tous","toggleAllApprovalGates":"Basculer toutes les portes d\'approbation","evidence":"PREUVES","evidenceDescription":"Collecter et joindre des preuves après l\'implémentation.","collect":"Collecter","collectDescription":"Capturer des captures d\'écran et des artefacts après l\'implémentation.","addToPr":"Ajouter au PR","requiresPr":"Nécessite l\'activation du PR","requiresEvidence":"Nécessite l\'activation de la collecte de preuves","addToPrDescription":"Inclure les preuves dans le corps du pull request.","git":"GIT","push":"Pousser","pushDescription":"Pousser la branche vers le distant après l\'implémentation.","pr":"PR","prDescription":"Ouvrir un pull request après avoir poussé.","watch":"Surveiller","watchDescription":"Surveiller le CI et auto-corriger les erreurs.","sync":"Sync","syncDescription":"Pull latest main from remote before creating the feature branch.","commitSpecs":"Commit des specs","commitSpecsDescription":"Commiter les specs dans le dépôt.","forkAndPr":"Fork et PR","forkAndPrDescription":"Contribuer via fork (PR vers l\'upstream).","pendingMode":"En attente","pendingModeDescription":"Créer sans démarrer — démarrer manuellement plus tard.","fastModeLabel":"Mode rapide","fastModeDescription":"Ignorer les phases SDLC et implémenter directement depuis votre prompt.","fileDropZone":"Zone de dépôt de fichiers","prd":"PRD","prdDescription":"Auto-approuver la transition des exigences vers la planification.","plan":"Plan","planDescription":"Auto-approuver la transition de la planification vers l\'implémentation.","merge":"Merge","mergeDescription":"Auto-approuver la transition du merge vers terminé."},"featureDrawer":{"copyFeatureId":"Copier l\'ID de la fonctionnalité","unarchiveFeature":"Désarchiver la fonctionnalité","archiveFeature":"Archiver la fonctionnalité","deleteFeature":"Supprimer la fonctionnalité","stopDevServer":"Arrêter le serveur","startDevServer":"Démarrer le serveur","failedToReject":"Échec du rejet de {{label}}","rejected":"{{label}} rejeté — l\'agent ré-itère (itération {{n}})","excessiveIterations":"Itération {{n}} — envisagez d\'approuver ou d\'ajuster le feedback","failedToApprove":"Échec de l\'approbation de {{label}}","approved":"{{label}} approuvé — l\'agent reprend","failedToApproveRequirements":"Échec de l\'approbation des exigences","requirementsApproved":"Exigences approuvées — l\'agent reprend","featureResumed":"Fonctionnalité reprise — l\'agent redémarre","featureStarted":"Fonctionnalité démarrée","approvePlan":"Approuver le plan","sendRevisionFeedback":"Envoyer le feedback de révision"},"overviewTab":{"created":"Créé","runtime":"Durée d\'exécution","runningFor":"En cours depuis","blockedBy":"Bloqué par","error":"Erreur","prd":"PRD","plan":"Plan","merge":"Merge","collect":"Collecter","addToPr":"Ajouter au PR","push":"Pousser","pr":"PR","watch":"Surveiller","commitSpecs":"Commit des specs","forkAndPr":"Fork et PR"},"activityTab":{"copyPromptToClipboard":"Copier le prompt dans le presse-papiers","execution":"Exécution","wait":"Attente","cost":"Coût","noActivityRecorded":"Aucune activité enregistrée"},"logTab":{"structuredView":"Vue structurée","rawView":"Vue brute","noLogOutput":"Pas de sortie de log"},"planTab":{"noPlanCreated":"Aucun plan créé"},"branchSyncStatus":{"refreshSyncStatus":"Actualiser le statut de synchronisation","rebaseOnMain":"Rebase sur Main"},"drawerActionBar":{"fileDropZone":"Zone de dépôt de fichiers","askAiToRevise":"Demander à l\'IA de réviser...","attachFiles":"Joindre des fichiers","reject":"Rejeter","sendRevisionFeedback":"Envoyer le feedback de révision","approve":"Approuver","fileTooLarge":"\\"{{name}}\\" dépasse la limite de 10 Mo","fileTypeNotAllowed":"Type de fichier \\"{{ext}}\\" non autorisé","uploadFailed":"Échec du téléchargement"},"taskProgress":{"done":"Terminé","inProgress":"En cours","review":"En révision","todo":"À faire","noTasksDefined":"Aucune tâche définie"},"repositoryDrawer":{"openInIde":"Ouvrir dans l\'IDE","openInShell":"Ouvrir dans le terminal","openFolder":"Ouvrir le dossier","syncMain":"Synchroniser Main"},"adoptBranch":{"failedToAdopt":"Échec de l\'adoption de la branche","repository":"Dépôt","branchName":"Nom de la branche","searchRepositories":"Rechercher des dépôts...","searchBranches":"Rechercher des branches..."},"githubImport":{"title":"Importer depuis GitHub","description":"Cloner un dépôt GitHub et l\'ajouter à ShipIT AI.","githubUrl":"URL GitHub","urlPlaceholder":"owner/repo ou https://github.com/owner/repo","searchRepositories":"Rechercher des dépôts..."},"versionBadge":{"version":"Version","branch":"Branche","commit":"Commit","path":"Chemin"},"mergeReview":{"download":"Télécharger","dataUnavailable":"Données de révision de merge indisponibles"},"baseDrawer":{"close":"Fermer","stopDevServer":"Arrêter le serveur","startDevServer":"Démarrer le serveur"},"addRepository":{"addRepository":"Ajouter un dépôt"},"modelPicker":{"searchPlaceholder":"Rechercher ou saisir un ID de modèle…"},"skills":{"searchPlaceholder":"Rechercher des compétences..."},"tools":{"noCategoryTools":"Aucun outil dans cette catégorie."},"accessibility":{"close":"Fermer","loading":"Chargement","send":"Envoyer","imageNotes":"Notes de l\'image","viewServerLogs":"Voir les logs du serveur","toggleSidebar":"Basculer la barre latérale"}}')},59868,(a,b,c)=>{b.exports={errors:{notFound:"Nicht gefunden",unauthorized:"Nicht autorisiert",forbidden:"Zugriff verweigert",internal:"Interner Fehler",unknown:"Ein unbekannter Fehler ist aufgetreten",failedToLoad:"{{resource}} konnte nicht geladen werden",failedToSave:"{{resource}} konnte nicht gespeichert werden"},labels:{save:"Speichern",cancel:"Abbrechen",confirm:"Bestätigen",delete:"Löschen",edit:"Bearbeiten",close:"Schließen",back:"Zurück",next:"Weiter",yes:"Ja",no:"Nein",enabled:"Aktiviert",disabled:"Deaktiviert",loading:"Laden...",saving:"Speichern...",saved:"Gespeichert",none:"Keine",default:"Standard",custom:"Benutzerdefiniert"},status:{success:"Erfolg",error:"Fehler",warning:"Warnung",info:"Info",pending:"Ausstehend",inProgress:"In Bearbeitung",completed:"Abgeschlossen",failed:"Fehlgeschlagen"},confirmation:{areYouSure:"Sind Sie sicher?",cannotBeUndone:"Diese Aktion kann nicht rückgängig gemacht werden."},language:{en:"Englisch",ru:"Russisch",pt:"Portugiesisch",es:"Spanisch",ar:"Arabisch",he:"Hebräisch",fr:"Französisch",de:"Deutsch"}}},82325,(a,b,c)=>{b.exports=JSON.parse('{"settings":{"title":"Einstellungen","saving":"Speichern...","saved":"Gespeichert","failedToSave":"Einstellungen konnten nicht gespeichert werden","sections":{"language":"Sprache","agent":"Agent","environment":"Umgebung","workflow":"Workflow","ci":"CI","timeouts":"Zeitlimits","notifications":"Benachrichtigungen","flags":"Flags","chat":"Chat","layout":"Layout","database":"Datenbank"},"language":{"title":"Sprache","description":"Wählen Sie Ihre bevorzugte Anzeigesprache","label":"Anzeigesprache","placeholder":"Sprache auswählen","failedToSave":"Spracheinstellungen konnten nicht gespeichert werden"},"agent":{"title":"Bevorzugter Agent","sectionTitle":"Agent","description":"Wählen Sie Ihren KI-Coding-Agenten und die Authentifizierungsmethode","sectionDescription":"KI-Coding-Agent und Authentifizierung","agentType":"Agententyp","agentAndModel":"Agent & Modell","agentAndModelDescription":"Provider und Modell für alle Operationen","authMethod":"Authentifizierungsmethode","apiToken":"API-Token","apiTokenPlaceholder":"Geben Sie Ihren API-Token ein","apiTokenHelper":"Wird automatisch gespeichert, wenn Sie das Feld verlassen","failedToSave":"Agenteneinstellungen konnten nicht gespeichert werden","hint":"Wählen Sie, welcher KI-Coding-Agent Ihre Features unterstützt. Jeder Agent unterstützt verschiedene Modelle und Fähigkeiten. Die Authentifizierung wird automatisch über Ihre aktive Sitzung aufgelöst.","links":{"agentSystem":"Agentensystem","addingAgents":"Agenten hinzufügen","configurationGuide":"Konfigurationsanleitung"}},"environment":{"title":"IDE & Terminal","sectionTitle":"Umgebung","description":"Konfigurieren Sie Ihren Standard-Editor, Shell und Terminal-Einstellungen","sectionDescription":"Editor-, Shell- und Terminal-Einstellungen","defaultEditor":"Standard-Editor","defaultEditorDescription":"Editor, der für Dateioperationen geöffnet wird","shellPreference":"Shell-Einstellung","shell":"Shell","shellDescription":"Standard-Shell für generierte Skripte","terminalEmulator":"Terminal-Emulator","terminal":"Terminal","terminalDescription":"Terminal-Emulator für Shell-Sitzungen","systemTerminal":"System-Terminal","installed":"Installiert","notInstalled":"Nicht installiert","failedToSave":"IDE- & Terminal-Einstellungen konnten nicht gespeichert werden","hint":"Ihr bevorzugter Editor öffnet Dateien zur Überprüfung. Die Shell-Einstellung steuert generierte Skripte. Der Terminal-Emulator wird gestartet, wenn Shell-Sitzungen über die Web-UI geöffnet werden.","links":{"configurationGuide":"Konfigurationsanleitung"}},"workflow":{"title":"Workflow","description":"Konfigurieren Sie PR-Verhalten, Genehmigungsstufen und CI-Einstellungen","sectionDescription":"Automatisierungsverhalten nach der Implementierung","defaultFastMode":"Schnellmodus als Standard","defaultFastModeDescription":"SDLC-Phasen überspringen und direkt aus dem Prompt implementieren","subsections":{"approve":"Genehmigen","evidence":"Nachweise","git":"Git"},"autoApprovePrd":"PRD automatisch genehmigen","autoApprovePrdDescription":"Manuelle Überprüfung der Anforderungen überspringen","autoApprovePlan":"Plan automatisch genehmigen","autoApprovePlanDescription":"Manuelle Überprüfung des Implementierungsplans überspringen","autoApproveMerge":"Merge automatisch genehmigen","autoApproveMergeDescription":"Ohne manuelle Überprüfung mergen","collectEvidence":"Nachweise sammeln","collectEvidenceDescription":"Screenshots und Artefakte nach der Implementierung erfassen","addEvidenceToPr":"Nachweise zum PR hinzufügen","addEvidenceToPrDescription":"Nachweise in den Pull-Request-Text aufnehmen","pushOnComplete":"Nach Abschluss pushen","pushOnCompleteDescription":"Zum Remote pushen, wenn die Implementierung abgeschlossen ist","openPrOnComplete":"PR nach Abschluss öffnen","openPrOnCompleteDescription":"Einen Pull Request erstellen, wenn fertig","watchCiAfterPush":"CI nach Push überwachen","watchCiAfterPushDescription":"CI überwachen und Fehler automatisch beheben. Deaktivieren, um Rate-Limits zu vermeiden.","approvalGates":"Genehmigungsstufen","prdAutoApproval":"PRD-Autogenehmigung","planAutoApproval":"Plan-Autogenehmigung","mergeAutoApproval":"Merge-Autogenehmigung","ciSettings":"CI-Einstellungen","ciWatchFixLoop":"CI-Überwachungs-/Korrekturschleife","maxFixAttempts":"Maximale Korrekturversuche","watchTimeout":"Überwachungs-Zeitlimit (Sekunden)","maxLogCharacters":"Maximale Log-Zeichen","pollInterval":"Abfrageintervall (Sekunden)","hideCiStatus":"CI-Status ausblenden","stageTimeouts":"Phasen-Zeitlimits","failedToSave":"Workflow-Einstellungen konnten nicht gespeichert werden","hint":"Steuern Sie, wie autonom jeder Feature-Lauf ist. Autogenehmigung überspringt die manuelle Überprüfungspause in jeder Phase. Push- und PR-Optionen steuern, was nach erfolgreicher Implementierung passiert.","links":{"approvalGates":"Genehmigungsstufen","pushAndPrFlags":"Push- & PR-Flags"}},"ci":{"title":"Continuous Integration","description":"Limits und Zeitlimits für die CI-Überwachung","maxFixAttempts":"Maximale Korrekturversuche","maxFixAttemptsDescription":"Agent-Wiederholungen bei fehlschlagendem CI","watchTimeout":"Überwachungs-Zeitlimit","watchTimeoutDescription":"Maximale Wartezeit auf CI-Abschluss","maxLogSize":"Maximale Log-Größe","maxLogSizeDescription":"CI-Logs über dieses Limit hinaus abschneiden","pollInterval":"Abfrageintervall","pollIntervalDescription":"Wie oft der GitHub-CI-Status geprüft wird","hideCiStatus":"CI-Status ausblenden","hideCiStatusDescription":"CI-Status-Badges in Feature-Drawer und Merge-Überprüfung ausblenden","hint":"Wenn ein Feature abgeschlossen ist, kann der Agent CI überwachen und Fehler automatisch beheben. Diese Limits verhindern unkontrollierte Wiederholungen und steuern, wie viel Log-Ausgabe zur Analyse an den Agenten gesendet wird.","links":{"cicdPipeline":"CI/CD-Pipeline","ciSecurityGates":"CI-Sicherheitsgates"}},"stageTimeouts":{"title":"Phasen-Zeitlimits","description":"Maximale Ausführungszeit pro Agentenphase","subsections":{"featureAgent":"Feature-Agent","analyzeRepoAgent":"Repository-Analyse-Agent"},"analyze":"Analyse","analyzeDescription":"Zeitlimit für Repository-Analyse","requirements":"Anforderungen","requirementsDescription":"Zeitlimit für Anforderungserfassung","research":"Recherche","researchDescription":"Zeitlimit für technische Recherche","plan":"Plan","planDescription":"Zeitlimit für Implementierungsplanung","implement":"Implementierung","implementDescription":"Zeitlimit für Code-Implementierung","merge":"Merge","mergeDescription":"Zeitlimit für PR-Erstellung und Merge","hint":"Jeder Agent hat unabhängig konfigurierbare Phasen-Zeitlimits. Wenn eine Phase ihr Zeitlimit überschreitet, wird der Agent beendet. Längere Zeitlimits sind nützlich für komplexe Implementierungen. Feature-Agent hat standardmäßig 30 Minuten pro Phase. Repository-Analyse-Agent hat standardmäßig 10 Minuten."},"notifications":{"title":"Benachrichtigungen","description":"Benachrichtigungskanäle und Ereigniseinstellungen konfigurieren","sectionDescription":"Wie und wann Sie benachrichtigt werden","channels":"Kanäle","inApp":"In-App","inAppLabel":"In-App","inAppDescription":"Benachrichtigungen innerhalb der ShipIT AI-UI","subsections":{"agentEvents":"Agent-Ereignisse","pullRequestEvents":"Pull-Request-Ereignisse"},"events":{"agentStarted":"Agent gestartet","phaseCompleted":"Phase abgeschlossen","waitingApproval":"Wartet auf Genehmigung","agentCompleted":"Agent abgeschlossen","agentFailed":"Agent fehlgeschlagen","mergeReviewReady":"Merge-Überprüfung bereit","prMerged":"PR gemergt","prClosed":"PR geschlossen","prChecksPassed":"PR-Prüfungen bestanden","prChecksFailed":"PR-Prüfungen fehlgeschlagen","prBlocked":"PR blockiert"},"failedToSave":"Benachrichtigungseinstellungen konnten nicht gespeichert werden","hint":"In-App-Toast-Benachrichtigungen halten Sie auf dem Laufenden. Passen Sie genau an, welche Agenten-Lebenszyklus-Ereignisse eine Benachrichtigung auslösen.","links":{"notificationSystem":"Benachrichtigungssystem"}},"featureFlags":{"title":"Feature-Flags","description":"Experimentelle und Beta-Features umschalten","sectionDescription":"Experimentelle Features aktivieren oder deaktivieren","badge":"Experimentell","skills":"Skills","skillsDescription":"Skills-System für Agentenfähigkeiten aktivieren","deployments":"Deployments","deploymentsDescription":"Umgebungs-Deployment-Workflows aktivieren","debug":"Debug","debugDescription":"Debug-Panels und ausführliche Protokollierung anzeigen","githubImport":"GitHub-Import","githubImportDescription":"GitHub-Repository-Import in der Web-UI aktivieren","adoptBranch":"Branch übernehmen","adoptBranchDescription":"Bestehende Branches als verfolgte Features importieren","gitRebaseSync":"Git Rebase & Sync","gitRebaseSyncDescription":"Git Rebase-on-Main- und Sync-Main-Operationen aktivieren","reactFileManager":"React-Dateimanager","reactFileManagerDescription":"Den integrierten React-Dateimanager anstelle der nativen Betriebssystem-Ordnerauswahl verwenden","hint":"Experimentelle Features, die noch in Entwicklung sind. Aktivierung auf eigene Gefahr — sie können sich in zukünftigen Versionen ändern oder entfernt werden. Der Debug-Modus fügt ausführliche Protokollierung hinzu, die bei der Fehlerbehebung nützlich ist."},"interactiveAgent":{"title":"Interaktiver Agent","description":"Chat-Tab-Einstellungen für interaktive Agenten-Sitzungen pro Feature","enableChatTab":"Chat-Tab aktivieren","enableChatTabDescription":"Chat-Tab auf allen Feature-Detailseiten anzeigen","autoTimeout":"Auto-Zeitlimit","autoTimeoutDescription":"Minuten der Inaktivität, bevor der Agent automatisch gestoppt wird (1–120)","maxConcurrentSessions":"Maximale gleichzeitige Sitzungen","maxConcurrentSessionsDescription":"Maximale Anzahl aktiver interaktiver Agenten-Sitzungen gleichzeitig (1–10)","hint":"Der Chat-Tab startet einen persistenten Agentenprozess pro Feature. Das Auto-Zeitlimit stoppt inaktive Sitzungen automatisch, um Ressourcen zu sparen. Das Limit für gleichzeitige Sitzungen verhindert unkontrollierten Ressourcenverbrauch auf Entwicklermaschinen."},"fabLayout":{"title":"Layout","description":"Position der schwebenden Aktionsschaltflächen im Kontrollzentrum steuern","swapPosition":"FAB-Positionen tauschen","swapPositionDescription":"Chat-Button nach links und Erstellen-Button nach rechts verschieben","hint":"Die zwei schwebenden Aktionsschaltflächen (Erstellen und Chat) befinden sich in den unteren Ecken des Kontrollzentrums. Aktivieren Sie diese Option, um ihre Positionen zu tauschen."},"database":{"title":"Datenbank","description":"Datenbankpfad und -verwaltung","sectionDescription":"Lokale Speicherinformationen","location":"Speicherort","locationDescription":"Pfad zur lokalen SQLite-Datenbank","size":"Größe","hint":"Alle Einstellungen werden in einer lokalen SQLite-Datenbank unter ~/.shipit-ai/data gespeichert. Die Datenbank verwendet ein Singleton-Datensatz-Muster mit automatischen Migrationen beim Start.","links":{"settingsService":"Einstellungsdienst","settingsSpec":"Einstellungsspezifikation"}}},"navigation":{"controlCenter":"Kontrollzentrum","dashboard":"Dashboard","features":"Features","repositories":"Repositories","settings":"Einstellungen","sessions":"Sitzungen","tools":"Tools","skills":"Skills"},"sidebar":{"features":"Features","switchToLight":"Heller Modus","switchToDark":"Dunkler Modus","muteSounds":"Töne stummschalten","unmuteSounds":"Töne aktivieren","statusActionNeeded":"Handlung erforderlich","statusInProgress":"In Bearbeitung","statusPending":"Ausstehend","statusBlocked":"Blockiert","statusError":"Fehler","statusDone":"Abgeschlossen"},"deleteFeature":{"title":"Feature löschen?","description":"Dies löscht <strong>{{featureName}}</strong> ({{featureId}}) dauerhaft. Diese Aktion kann nicht rückgängig gemacht werden.","cleanupLabel":"Worktree und Branches bereinigen","deleteSubFeatures":"Unter-Features löschen","closePullRequest":"Pull Request schließen","cancel":"Abbrechen","deleting":"Wird gelöscht…","delete":"Löschen"},"rejectFeedback":{"defaultTitle":"Anforderungen ablehnen","defaultDescription":"Geben Sie Feedback für den Agenten, das in der nächsten Iteration berücksichtigt werden soll. Feedback ist erforderlich.","ariaLabel":"Ablehnungsfeedback","placeholder":"Beschreiben Sie, was geändert werden muss...","cancel":"Abbrechen","rejecting":"Wird abgelehnt…","confirmReject":"Ablehnung bestätigen"},"emptyState":{"addProject":"Projekt hinzufügen","addProjectDescription":"Fügen Sie Ihren Projektordner hinzu, um die Feature-Erstellung freizuschalten.","addProjectDescriptionLine2":"Beschreiben Sie, was Sie brauchen — ShipIT AI erledigt den Rest.","checkingSetup":"Einrichtung wird geprüft…","ready":"{{label}} bereit","notInstalled":"{{label}} nicht installiert","reCheck":"Erneut prüfen","needsAuth":"{{label}} benötigt Authentifizierung","open":"{{label}} öffnen","checking":"{{label}} wird geprüft…","notFound":"{{label}} nicht gefunden","docs":"Dokumentation","opening":"Wird geöffnet…","chooseFolder":"Ordner auswählen","folderHint":"Jeder Ordner funktioniert — Git wird bei Bedarf automatisch initialisiert.","orUseCli":"oder CLI verwenden","copyCommands":"Befehle kopieren","git":"Git","gitRequired":"Für alle Phasen erforderlich","githubCli":"GitHub CLI","githubCliRequired":"Für Pull Requests erforderlich"},"welcome":{"loadingAgents":"Agenten werden geladen…","chooseAgent":"Wählen Sie Ihren Agenten","pickModel":"Modell auswählen","selectAgentSubtitle":"Wählen Sie den KI-Coding-Agenten, den ShipIT AI verwenden soll.","chooseModelSubtitle":"Wählen Sie, welches {{label}}-Modell ausgeführt werden soll.","ghCliNotice":"<0>GitHub CLI (gh)</0> wird für vollständige CI/CD-Selbstheilungsfähigkeiten benötigt. <1>Hier installieren</1>.","ghCliRequired":"GitHub CLI (gh)","ghCliRequiredText":"wird für vollständige CI/CD-Selbstheilungsfähigkeiten benötigt.","installHere":"Hier installieren","back":"Zurück"},"canvas":{"noFeatures":"Noch keine Features","noFeaturesDescription":"Erstellen Sie Ihr erstes Feature, um loszulegen.","newFeature":"Neues Feature","hideArchived":"Archivierte ausblenden","showArchived":"Archivierte anzeigen","hideArchivedLabel":"Archivierte ausblenden","showArchivedLabel":"Archivierte anzeigen","zoomOut":"Verkleinern","zoomIn":"Vergrößern","fitView":"Ansicht anpassen","resetView":"Ansicht zurücksetzen"},"common":{"noData":"Keine Daten verfügbar","retry":"Wiederholen","saving":"Speichern...","saved":"Gespeichert","decrease":"Verringern","increase":"Erhöhen","cancel":"Abbrechen"},"featureNode":{"archiveFeature":"Feature archivieren","deleteFeature":"Feature löschen","unarchiveFeature":"Feature dearchivieren","archiveConfirmTitle":"Feature archivieren?","archiveConfirmDescription":"<strong>{{name}}</strong> wird von der Leinwand ausgeblendet. Sie können es später dearchivieren.","cancel":"Abbrechen","archive":"Archivieren","fastMode":"Schnellmodus","specDriven":"Spezifikationsbasiert","copied":"Kopiert!","chatWithAgent":"Chat mit Agent","stopDevServer":"Server stoppen","startDevServer":"Server starten","retryDevServer":"Server neu starten","starting":"Startet…","retry":"Wiederholen","start":"Starten","failed":"Fehlgeschlagen","deleting":"Lösche…","addFeature":"Feature hinzufügen","reviewRequirements":"Anforderungen prüfen","reviewTechnicalPlan":"Technischen Plan prüfen","reviewChanges":"Änderungen prüfen","review":"Prüfung","creating":"Erstelle...","completedIn":"Abgeschlossen in {{runtime}}","completed":"Abgeschlossen","waitingOn":"Wartet auf {{blockedBy}}","blocked":"Blockiert","pending":"Ausstehend","somethingWentWrong":"Etwas ist schiefgelaufen","openChat":"Chat öffnen","viewSessions":"Sitzungen anzeigen","sessionsActive":"Sitzungen (aktiv)","sessions":"Sitzungen","agentSessions":"Agent-Sitzungen","noSessionsFound":"Keine Sitzungen gefunden","showLess":"Weniger anzeigen","showMore":"{{count}} weitere anzeigen"},"repositoryNode":{"removeRepository":"Repository entfernen","removeConfirmTitle":"Repository entfernen?","removeConfirmDescription":"Dadurch wird <strong>{{name}}</strong> und alle zugehörigen Features aus dem Arbeitsbereich entfernt. Die Dateien auf der Festplatte werden nicht betroffen.","cancel":"Abbrechen","remove":"Entfernen","openInIde":"In IDE öffnen","openInShell":"Im Terminal öffnen","openFolder":"Ordner öffnen","chatWithAgent":"Chat mit Agent","newFeature":"Neues Feature","new":"Neu","behind":"{{count}} zurück","notAGitRepository":"Kein Git-Repository","starting":"Startet...","run":"Ausführen","startLocalEnvironment":"Lokale Umgebung starten","stopDevServer":"Server stoppen","startDevServer":"Server starten","retry":"Wiederholen"},"fab":{"closeActions":"Aktionen schließen","createNew":"Neu erstellen","newFeature":"Neues Feature","localFolder":"Lokaler Ordner","adoptBranch":"Branch übernehmen","fromGithub":"Von GitHub"},"chat":{"shipitAiChat":"ShipIT AI Chat","writeMessage":"Nachricht schreiben...","attachFiles":"Dateien anhängen","forceStopAgent":"Agent-Prozess erzwingen stoppen","stop":"Stoppen","clearChatHistory":"Chat-Verlauf löschen","clear":"Löschen","noSession":"Keine Sitzung","yourMessage":"Ihre Nachricht","agentMessage":"Agent-Nachricht","agentIsTyping":"Agent tippt","showMore":"Mehr anzeigen","showLess":"Weniger anzeigen","code":"Code","preview":"Vorschau","openFullscreen":"Vollbild öffnen","htmlPreview":"HTML-Vorschau","htmlPreviewFullscreen":"HTML-Vorschau Vollbild"},"createDrawer":{"title":"NEUES FEATURE","creating":"Erstelle...","cancel":"Abbrechen","createFeature":"+ Feature erstellen","repository":"REPOSITORY","describeFeature":"BESCHREIBEN SIE IHR FEATURE","featurePlaceholder":"z.B. GitHub OAuth-Login mit Callback-Handling und Token-Erneuerung hinzufügen...","parentFeature":"ÜBERGEORDNETES FEATURE","selectParent":"Übergeordnetes Feature auswählen...","searchFeatures":"Features suchen...","noParent":"Kein übergeordnetes","noFeaturesFound":"Keine Features gefunden.","searchRepositories":"Repositories suchen...","approve":"GENEHMIGUNG","approveDescription":"Phasenübergänge ohne manuelle Prüfung automatisch genehmigen.","skippedInFastMode":"Im Schnellmodus übersprungen","all":"Alle","toggleAllApprovalGates":"Alle Genehmigungsstufen umschalten","evidence":"NACHWEISE","evidenceDescription":"Nachweise nach der Implementierung sammeln und anhängen.","collect":"Sammeln","collectDescription":"Screenshots und Artefakte nach der Implementierung aufnehmen.","addToPr":"Zum PR hinzufügen","requiresPr":"PR muss aktiviert sein","requiresEvidence":"Nachweissammlung muss aktiviert sein","addToPrDescription":"Nachweise in den Pull-Request-Text aufnehmen.","git":"GIT","push":"Pushen","pushDescription":"Branch nach der Implementierung zum Remote pushen.","pr":"PR","prDescription":"Nach dem Pushen einen Pull Request öffnen.","watch":"Überwachen","watchDescription":"CI überwachen und Fehler automatisch beheben.","sync":"Sync","syncDescription":"Pull latest main from remote before creating the feature branch.","commitSpecs":"Specs committen","commitSpecsDescription":"Specs ins Repository committen.","forkAndPr":"Fork & PR","forkAndPrDescription":"Über Fork beitragen (PR an Upstream).","pendingMode":"Ausstehend","pendingModeDescription":"Erstellen ohne zu starten — später manuell starten.","fastModeLabel":"Schnellmodus","fastModeDescription":"SDLC-Phasen überspringen und direkt aus dem Prompt implementieren.","fileDropZone":"Datei-Ablagebereich","prd":"PRD","prdDescription":"Übergang von Anforderungen zur Planung automatisch genehmigen.","plan":"Plan","planDescription":"Übergang von Planung zur Implementierung automatisch genehmigen.","merge":"Merge","mergeDescription":"Merge-Übergang zu Abgeschlossen automatisch genehmigen."},"featureDrawer":{"copyFeatureId":"Feature-ID kopieren","unarchiveFeature":"Feature dearchivieren","archiveFeature":"Feature archivieren","deleteFeature":"Feature löschen","stopDevServer":"Server stoppen","startDevServer":"Server starten","failedToReject":"Ablehnung von {{label}} fehlgeschlagen","rejected":"{{label}} abgelehnt — Agent iteriert erneut (Iteration {{n}})","excessiveIterations":"Iteration {{n}} — erwägen Sie eine Genehmigung oder Feedback-Anpassung","failedToApprove":"Genehmigung von {{label}} fehlgeschlagen","approved":"{{label}} genehmigt — Agent fährt fort","failedToApproveRequirements":"Genehmigung der Anforderungen fehlgeschlagen","requirementsApproved":"Anforderungen genehmigt — Agent fährt fort","featureResumed":"Feature fortgesetzt — Agent startet neu","featureStarted":"Feature gestartet","approvePlan":"Plan genehmigen","sendRevisionFeedback":"Revisions-Feedback senden"},"overviewTab":{"created":"Erstellt","runtime":"Laufzeit","runningFor":"Läuft seit","blockedBy":"Blockiert von","error":"Fehler","prd":"PRD","plan":"Plan","merge":"Merge","collect":"Sammeln","addToPr":"Zum PR hinzufügen","push":"Pushen","pr":"PR","watch":"Überwachen","commitSpecs":"Specs committen","forkAndPr":"Fork & PR"},"activityTab":{"copyPromptToClipboard":"Prompt in Zwischenablage kopieren","execution":"Ausführung","wait":"Wartezeit","cost":"Kosten","noActivityRecorded":"Noch keine Aktivität aufgezeichnet"},"logTab":{"structuredView":"Strukturierte Ansicht","rawView":"Rohe Ansicht","noLogOutput":"Noch keine Log-Ausgabe"},"planTab":{"noPlanCreated":"Noch kein Plan erstellt"},"branchSyncStatus":{"refreshSyncStatus":"Synchronisierungsstatus aktualisieren","rebaseOnMain":"Rebase auf Main"},"drawerActionBar":{"fileDropZone":"Datei-Ablagebereich","askAiToRevise":"KI um Überarbeitung bitten...","attachFiles":"Dateien anhängen","reject":"Ablehnen","sendRevisionFeedback":"Revisions-Feedback senden","approve":"Genehmigen","fileTooLarge":"\\"{{name}}\\" überschreitet das 10-MB-Limit","fileTypeNotAllowed":"Dateityp \\"{{ext}}\\" nicht erlaubt","uploadFailed":"Upload fehlgeschlagen"},"taskProgress":{"done":"Erledigt","inProgress":"In Bearbeitung","review":"In Prüfung","todo":"Offen","noTasksDefined":"Noch keine Aufgaben definiert"},"repositoryDrawer":{"openInIde":"In IDE öffnen","openInShell":"Im Terminal öffnen","openFolder":"Ordner öffnen","syncMain":"Main synchronisieren"},"adoptBranch":{"failedToAdopt":"Branch-Übernahme fehlgeschlagen","repository":"Repository","branchName":"Branch-Name","searchRepositories":"Repositories suchen...","searchBranches":"Branches suchen..."},"githubImport":{"title":"Von GitHub importieren","description":"Ein GitHub-Repository klonen und zu ShipIT AI hinzufügen.","githubUrl":"GitHub-URL","urlPlaceholder":"owner/repo oder https://github.com/owner/repo","searchRepositories":"Repositories suchen..."},"versionBadge":{"version":"Version","branch":"Branch","commit":"Commit","path":"Pfad"},"mergeReview":{"download":"Herunterladen","dataUnavailable":"Merge-Review-Daten nicht verfügbar"},"baseDrawer":{"close":"Schließen","stopDevServer":"Server stoppen","startDevServer":"Server starten"},"addRepository":{"addRepository":"Repository hinzufügen"},"modelPicker":{"searchPlaceholder":"Modell-ID suchen oder eingeben…"},"skills":{"searchPlaceholder":"Fähigkeiten suchen..."},"tools":{"noCategoryTools":"Keine Werkzeuge in dieser Kategorie."},"accessibility":{"close":"Schließen","loading":"Laden","send":"Senden","imageNotes":"Bildnotizen","viewServerLogs":"Server-Logs anzeigen","toggleSidebar":"Seitenleiste umschalten"}}')},85827,a=>{"use strict";let b;var c=a.i(53083),d=a.i(11321);a.i(67999);var e=a.i(6070),f=a.i(44886),g=a.i(20607),h=a.i(36099),i=a.i(94214),j=a.i(86355),k=a.i(75861),l=a.i(66609),m=a.i(20366),n=a.i(26414),o=a.i(87484),p=a.i(63541),q=a.i(3324),r=a.i(16986),s=a.i(78742),t=a.i(55444),u=a.i(32886),v=a.i(59868),w=a.i(82325);let x=((b=f.default.createInstance()).use(g.initReactI18next).init({lng:"en",fallbackLng:"en",defaultNS:"common",ns:["common","web"],resources:{en:{common:h.default,web:i.default},ru:{common:j.default,web:k.default},pt:{common:l.default,web:m.default},es:{common:n.default,web:o.default},ar:{common:p.default,web:q.default},he:{common:r.default,web:s.default},fr:{common:t.default,web:u.default},de:{common:v.default,web:w.default}},interpolation:{escapeValue:!1},react:{useSuspense:!1}}),b),y={ar:{family:"Noto Sans Arabic",cssUrl:"https://fonts.googleapis.com/css2?family=Noto+Sans+Arabic:wght@400;500;600;700&display=swap"},he:{family:"Noto Sans Hebrew",cssUrl:"https://fonts.googleapis.com/css2?family=Noto+Sans+Hebrew:wght@400;500;600;700&display=swap"}};function z(a){let b=y[a];if(document.documentElement.classList.remove("font-rtl-arabic","font-rtl-hebrew"),!b)return void document.documentElement.style.removeProperty("--font-rtl");document.documentElement.style.setProperty("--font-rtl",`"${b.family}"`),document.documentElement.classList.add("ar"===a?"font-rtl-arabic":"font-rtl-hebrew");let c=`rtl-font-${a}`;if(!document.getElementById(c)){let a=document.createElement("link");a.id=c,a.rel="stylesheet",a.href=b.cssUrl,document.head.appendChild(a)}}a.s(["I18nProvider",0,function({initialLanguage:a,children:b}){return(0,d.useEffect)(()=>{x.language!==a&&x.changeLanguage(a),z(a)},[a]),(0,d.useEffect)(()=>{function a(a){z(a)}return x.on("languageChanged",a),()=>{x.off("languageChanged",a)}},[]),(0,c.jsx)(e.I18nextProvider,{i18n:x,children:b})}],85827)},97752,a=>{"use strict";var b=a.i(53083),c=a.i(40674),d=a.i(11321);a.s(["RouteAnnouncer",0,function(){let a=(0,c.usePathname)(),[e,f]=(0,d.useState)("");return(0,d.useEffect)(()=>{let b=document.title||a;f(`Navigated to ${b}`)},[a]),(0,b.jsx)("div",{"aria-live":"polite","aria-atomic":"true",role:"status",className:"sr-only",children:e})}])}];
1
+ module.exports=[66560,a=>{"use strict";var b=a.i(53083),c=a.i(11321),d=a.i(40674);a.i(98617);var e=a.i(50040),f=a.i(24780),g=a.i(55003),h=a.i(97624);let i=(0,h.default)("house",[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"r6nss1"}]]),j=(0,h.default)("moon",[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]]),k=(0,h.default)("sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]),l=(0,h.default)("volume-2",[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["path",{d:"M16 9a5 5 0 0 1 0 6",key:"1q6k2b"}],["path",{d:"M19.364 18.364a9 9 0 0 0 0-12.728",key:"ijwkga"}]]),m=(0,h.default)("volume-off",[["path",{d:"M16 9a5 5 0 0 1 .95 2.293",key:"1fgyg8"}],["path",{d:"M19.364 5.636a9 9 0 0 1 1.889 9.96",key:"l3zxae"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"m7 7-.587.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298V11",key:"1gbwow"}],["path",{d:"M9.828 4.172A.686.686 0 0 1 11 4.657v.686",key:"s2je0y"}]]);var n=a.i(42728);let o=(0,h.default)("zap-off",[["path",{d:"M10.513 4.856 13.12 2.17a.5.5 0 0 1 .86.46l-1.377 4.317",key:"193nxd"}],["path",{d:"M15.656 10H20a1 1 0 0 1 .78 1.63l-1.72 1.773",key:"27a7lr"}],["path",{d:"M16.273 16.273 10.88 21.83a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14H4a1 1 0 0 1-.78-1.63l4.507-4.643",key:"1e0qe9"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);var p=a.i(6168),q=a.i(12729),r=a.i(7481),s=a.i(30419),t=a.i(73490),u=a.i(95819),v=a.i(80303),w=a.i(8725),x=a.i(60380),y=a.i(18867),z=a.i(48972),A=a.i(59653),B="ScrollArea",[C,D]=(0,u.createContextScope)(B),[E,F]=C(B),G=c.forwardRef((a,d)=>{let{__scopeScrollArea:e,type:f="hover",dir:g,scrollHideDelay:h=600,...i}=a,[j,k]=c.useState(null),[l,m]=c.useState(null),[n,o]=c.useState(null),[p,q]=c.useState(null),[r,t]=c.useState(null),[u,w]=c.useState(0),[y,z]=c.useState(0),[A,B]=c.useState(!1),[C,D]=c.useState(!1),F=(0,v.useComposedRefs)(d,a=>k(a)),G=(0,x.useDirection)(g);return(0,b.jsx)(E,{scope:e,type:f,dir:G,scrollHideDelay:h,scrollArea:j,viewport:l,onViewportChange:m,content:n,onContentChange:o,scrollbarX:p,onScrollbarXChange:q,scrollbarXEnabled:A,onScrollbarXEnabledChange:B,scrollbarY:r,onScrollbarYChange:t,scrollbarYEnabled:C,onScrollbarYEnabledChange:D,onCornerWidthChange:w,onCornerHeightChange:z,children:(0,b.jsx)(s.Primitive.div,{dir:G,...i,ref:F,style:{position:"relative","--radix-scroll-area-corner-width":u+"px","--radix-scroll-area-corner-height":y+"px",...a.style}})})});G.displayName=B;var H="ScrollAreaViewport",I=c.forwardRef((a,d)=>{let{__scopeScrollArea:e,children:f,nonce:g,...h}=a,i=F(H,e),j=c.useRef(null),k=(0,v.useComposedRefs)(d,j,i.onViewportChange);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"},nonce:g}),(0,b.jsx)(s.Primitive.div,{"data-radix-scroll-area-viewport":"",...h,ref:k,style:{overflowX:i.scrollbarXEnabled?"scroll":"hidden",overflowY:i.scrollbarYEnabled?"scroll":"hidden",...a.style},children:(0,b.jsx)("div",{ref:i.onContentChange,style:{minWidth:"100%",display:"table"},children:f})})]})});I.displayName=H;var J="ScrollAreaScrollbar",K=c.forwardRef((a,d)=>{let{forceMount:e,...f}=a,g=F(J,a.__scopeScrollArea),{onScrollbarXEnabledChange:h,onScrollbarYEnabledChange:i}=g,j="horizontal"===a.orientation;return c.useEffect(()=>(j?h(!0):i(!0),()=>{j?h(!1):i(!1)}),[j,h,i]),"hover"===g.type?(0,b.jsx)(L,{...f,ref:d,forceMount:e}):"scroll"===g.type?(0,b.jsx)(M,{...f,ref:d,forceMount:e}):"auto"===g.type?(0,b.jsx)(N,{...f,ref:d,forceMount:e}):"always"===g.type?(0,b.jsx)(O,{...f,ref:d}):null});K.displayName=J;var L=c.forwardRef((a,d)=>{let{forceMount:e,...f}=a,g=F(J,a.__scopeScrollArea),[h,i]=c.useState(!1);return c.useEffect(()=>{let a=g.scrollArea,b=0;if(a){let c=()=>{window.clearTimeout(b),i(!0)},d=()=>{b=window.setTimeout(()=>i(!1),g.scrollHideDelay)};return a.addEventListener("pointerenter",c),a.addEventListener("pointerleave",d),()=>{window.clearTimeout(b),a.removeEventListener("pointerenter",c),a.removeEventListener("pointerleave",d)}}},[g.scrollArea,g.scrollHideDelay]),(0,b.jsx)(t.Presence,{present:e||h,children:(0,b.jsx)(N,{"data-state":h?"visible":"hidden",...f,ref:d})})}),M=c.forwardRef((a,d)=>{var e;let{forceMount:f,...g}=a,h=F(J,a.__scopeScrollArea),i="horizontal"===a.orientation,j=ae(()=>l("SCROLL_END"),100),[k,l]=(e={hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}},c.useReducer((a,b)=>e[a][b]??a,"hidden"));return c.useEffect(()=>{if("idle"===k){let a=window.setTimeout(()=>l("HIDE"),h.scrollHideDelay);return()=>window.clearTimeout(a)}},[k,h.scrollHideDelay,l]),c.useEffect(()=>{let a=h.viewport,b=i?"scrollLeft":"scrollTop";if(a){let c=a[b],d=()=>{let d=a[b];c!==d&&(l("SCROLL"),j()),c=d};return a.addEventListener("scroll",d),()=>a.removeEventListener("scroll",d)}},[h.viewport,i,l,j]),(0,b.jsx)(t.Presence,{present:f||"hidden"!==k,children:(0,b.jsx)(O,{"data-state":"hidden"===k?"hidden":"visible",...g,ref:d,onPointerEnter:(0,A.composeEventHandlers)(a.onPointerEnter,()=>l("POINTER_ENTER")),onPointerLeave:(0,A.composeEventHandlers)(a.onPointerLeave,()=>l("POINTER_LEAVE"))})})}),N=c.forwardRef((a,d)=>{let e=F(J,a.__scopeScrollArea),{forceMount:f,...g}=a,[h,i]=c.useState(!1),j="horizontal"===a.orientation,k=ae(()=>{if(e.viewport){let a=e.viewport.offsetWidth<e.viewport.scrollWidth,b=e.viewport.offsetHeight<e.viewport.scrollHeight;i(j?a:b)}},10);return af(e.viewport,k),af(e.content,k),(0,b.jsx)(t.Presence,{present:f||h,children:(0,b.jsx)(O,{"data-state":h?"visible":"hidden",...g,ref:d})})}),O=c.forwardRef((a,d)=>{let{orientation:e="vertical",...f}=a,g=F(J,a.__scopeScrollArea),h=c.useRef(null),i=c.useRef(0),[j,k]=c.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),l=_(j.viewport,j.content),m={...f,sizes:j,onSizesChange:k,hasThumb:!!(l>0&&l<1),onThumbChange:a=>h.current=a,onThumbPointerUp:()=>i.current=0,onThumbPointerDown:a=>i.current=a};function n(a,b){return function(a,b,c,d="ltr"){let e=aa(c),f=b||e/2,g=c.scrollbar.paddingStart+f,h=c.scrollbar.size-c.scrollbar.paddingEnd-(e-f),i=c.content-c.viewport;return ac([g,h],"ltr"===d?[0,i]:[-1*i,0])(a)}(a,i.current,j,b)}return"horizontal"===e?(0,b.jsx)(P,{...m,ref:d,onThumbPositionChange:()=>{if(g.viewport&&h.current){let a=ab(g.viewport.scrollLeft,j,g.dir);h.current.style.transform=`translate3d(${a}px, 0, 0)`}},onWheelScroll:a=>{g.viewport&&(g.viewport.scrollLeft=a)},onDragScroll:a=>{g.viewport&&(g.viewport.scrollLeft=n(a,g.dir))}}):"vertical"===e?(0,b.jsx)(Q,{...m,ref:d,onThumbPositionChange:()=>{if(g.viewport&&h.current){let a=ab(g.viewport.scrollTop,j);h.current.style.transform=`translate3d(0, ${a}px, 0)`}},onWheelScroll:a=>{g.viewport&&(g.viewport.scrollTop=a)},onDragScroll:a=>{g.viewport&&(g.viewport.scrollTop=n(a))}}):null}),P=c.forwardRef((a,d)=>{let{sizes:e,onSizesChange:f,...g}=a,h=F(J,a.__scopeScrollArea),[i,j]=c.useState(),k=c.useRef(null),l=(0,v.useComposedRefs)(d,k,h.onScrollbarXChange);return c.useEffect(()=>{k.current&&j(getComputedStyle(k.current))},[k]),(0,b.jsx)(T,{"data-orientation":"horizontal",...g,ref:l,sizes:e,style:{bottom:0,left:"rtl"===h.dir?"var(--radix-scroll-area-corner-width)":0,right:"ltr"===h.dir?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":aa(e)+"px",...a.style},onThumbPointerDown:b=>a.onThumbPointerDown(b.x),onDragScroll:b=>a.onDragScroll(b.x),onWheelScroll:(b,c)=>{if(h.viewport){var d,e;let f=h.viewport.scrollLeft+b.deltaX;a.onWheelScroll(f),d=f,e=c,d>0&&d<e&&b.preventDefault()}},onResize:()=>{k.current&&h.viewport&&i&&f({content:h.viewport.scrollWidth,viewport:h.viewport.offsetWidth,scrollbar:{size:k.current.clientWidth,paddingStart:$(i.paddingLeft),paddingEnd:$(i.paddingRight)}})}})}),Q=c.forwardRef((a,d)=>{let{sizes:e,onSizesChange:f,...g}=a,h=F(J,a.__scopeScrollArea),[i,j]=c.useState(),k=c.useRef(null),l=(0,v.useComposedRefs)(d,k,h.onScrollbarYChange);return c.useEffect(()=>{k.current&&j(getComputedStyle(k.current))},[k]),(0,b.jsx)(T,{"data-orientation":"vertical",...g,ref:l,sizes:e,style:{top:0,right:"ltr"===h.dir?0:void 0,left:"rtl"===h.dir?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":aa(e)+"px",...a.style},onThumbPointerDown:b=>a.onThumbPointerDown(b.y),onDragScroll:b=>a.onDragScroll(b.y),onWheelScroll:(b,c)=>{if(h.viewport){var d,e;let f=h.viewport.scrollTop+b.deltaY;a.onWheelScroll(f),d=f,e=c,d>0&&d<e&&b.preventDefault()}},onResize:()=>{k.current&&h.viewport&&i&&f({content:h.viewport.scrollHeight,viewport:h.viewport.offsetHeight,scrollbar:{size:k.current.clientHeight,paddingStart:$(i.paddingTop),paddingEnd:$(i.paddingBottom)}})}})}),[R,S]=C(J),T=c.forwardRef((a,d)=>{let{__scopeScrollArea:e,sizes:f,hasThumb:g,onThumbChange:h,onThumbPointerUp:i,onThumbPointerDown:j,onThumbPositionChange:k,onDragScroll:l,onWheelScroll:m,onResize:n,...o}=a,p=F(J,e),[q,r]=c.useState(null),t=(0,v.useComposedRefs)(d,a=>r(a)),u=c.useRef(null),x=c.useRef(""),y=p.viewport,z=f.content-f.viewport,B=(0,w.useCallbackRef)(m),C=(0,w.useCallbackRef)(k),D=ae(n,10);function E(a){u.current&&l({x:a.clientX-u.current.left,y:a.clientY-u.current.top})}return c.useEffect(()=>{let a=a=>{let b=a.target;q?.contains(b)&&B(a,z)};return document.addEventListener("wheel",a,{passive:!1}),()=>document.removeEventListener("wheel",a,{passive:!1})},[y,q,z,B]),c.useEffect(C,[f,C]),af(q,D),af(p.content,D),(0,b.jsx)(R,{scope:e,scrollbar:q,hasThumb:g,onThumbChange:(0,w.useCallbackRef)(h),onThumbPointerUp:(0,w.useCallbackRef)(i),onThumbPositionChange:C,onThumbPointerDown:(0,w.useCallbackRef)(j),children:(0,b.jsx)(s.Primitive.div,{...o,ref:t,style:{position:"absolute",...o.style},onPointerDown:(0,A.composeEventHandlers)(a.onPointerDown,a=>{0===a.button&&(a.target.setPointerCapture(a.pointerId),u.current=q.getBoundingClientRect(),x.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",p.viewport&&(p.viewport.style.scrollBehavior="auto"),E(a))}),onPointerMove:(0,A.composeEventHandlers)(a.onPointerMove,E),onPointerUp:(0,A.composeEventHandlers)(a.onPointerUp,a=>{let b=a.target;b.hasPointerCapture(a.pointerId)&&b.releasePointerCapture(a.pointerId),document.body.style.webkitUserSelect=x.current,p.viewport&&(p.viewport.style.scrollBehavior=""),u.current=null})})})}),U="ScrollAreaThumb",V=c.forwardRef((a,c)=>{let{forceMount:d,...e}=a,f=S(U,a.__scopeScrollArea);return(0,b.jsx)(t.Presence,{present:d||f.hasThumb,children:(0,b.jsx)(W,{ref:c,...e})})}),W=c.forwardRef((a,d)=>{let{__scopeScrollArea:e,style:f,...g}=a,h=F(U,e),i=S(U,e),{onThumbPositionChange:j}=i,k=(0,v.useComposedRefs)(d,a=>i.onThumbChange(a)),l=c.useRef(void 0),m=ae(()=>{l.current&&(l.current(),l.current=void 0)},100);return c.useEffect(()=>{let a=h.viewport;if(a){let b=()=>{m(),l.current||(l.current=ad(a,j),j())};return j(),a.addEventListener("scroll",b),()=>a.removeEventListener("scroll",b)}},[h.viewport,m,j]),(0,b.jsx)(s.Primitive.div,{"data-state":i.hasThumb?"visible":"hidden",...g,ref:k,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...f},onPointerDownCapture:(0,A.composeEventHandlers)(a.onPointerDownCapture,a=>{let b=a.target.getBoundingClientRect(),c=a.clientX-b.left,d=a.clientY-b.top;i.onThumbPointerDown({x:c,y:d})}),onPointerUp:(0,A.composeEventHandlers)(a.onPointerUp,i.onThumbPointerUp)})});V.displayName=U;var X="ScrollAreaCorner",Y=c.forwardRef((a,c)=>{let d=F(X,a.__scopeScrollArea),e=!!(d.scrollbarX&&d.scrollbarY);return"scroll"!==d.type&&e?(0,b.jsx)(Z,{...a,ref:c}):null});Y.displayName=X;var Z=c.forwardRef((a,d)=>{let{__scopeScrollArea:e,...f}=a,g=F(X,e),[h,i]=c.useState(0),[j,k]=c.useState(0),l=!!(h&&j);return af(g.scrollbarX,()=>{let a=g.scrollbarX?.offsetHeight||0;g.onCornerHeightChange(a),k(a)}),af(g.scrollbarY,()=>{let a=g.scrollbarY?.offsetWidth||0;g.onCornerWidthChange(a),i(a)}),l?(0,b.jsx)(s.Primitive.div,{...f,ref:d,style:{width:h,height:j,position:"absolute",right:"ltr"===g.dir?0:void 0,left:"rtl"===g.dir?0:void 0,bottom:0,...a.style}}):null});function $(a){return a?parseInt(a,10):0}function _(a,b){let c=a/b;return isNaN(c)?0:c}function aa(a){let b=_(a.viewport,a.content),c=a.scrollbar.paddingStart+a.scrollbar.paddingEnd;return Math.max((a.scrollbar.size-c)*b,18)}function ab(a,b,c="ltr"){let d=aa(b),e=b.scrollbar.paddingStart+b.scrollbar.paddingEnd,f=b.scrollbar.size-e,g=b.content-b.viewport,h=(0,z.clamp)(a,"ltr"===c?[0,g]:[-1*g,0]);return ac([0,g],[0,f-d])(h)}function ac(a,b){return c=>{if(a[0]===a[1]||b[0]===b[1])return b[0];let d=(b[1]-b[0])/(a[1]-a[0]);return b[0]+d*(c-a[0])}}var ad=(a,b=()=>{})=>{let c={left:a.scrollLeft,top:a.scrollTop},d=0;return!function e(){let f={left:a.scrollLeft,top:a.scrollTop},g=c.left!==f.left,h=c.top!==f.top;(g||h)&&b(),c=f,d=window.requestAnimationFrame(e)}(),()=>window.cancelAnimationFrame(d)};function ae(a,b){let d=(0,w.useCallbackRef)(a),e=c.useRef(0);return c.useEffect(()=>()=>window.clearTimeout(e.current),[]),c.useCallback(()=>{window.clearTimeout(e.current),e.current=window.setTimeout(d,b)},[d,b])}function af(a,b){let c=(0,w.useCallbackRef)(b);(0,y.useLayoutEffect)(()=>{let b=0;if(a){let d=new ResizeObserver(()=>{cancelAnimationFrame(b),b=window.requestAnimationFrame(c)});return d.observe(a),()=>{window.cancelAnimationFrame(b),d.unobserve(a)}}},[a,c])}a.s(["Corner",0,Y,"Root",0,G,"ScrollArea",0,G,"ScrollAreaCorner",0,Y,"ScrollAreaScrollbar",0,K,"ScrollAreaThumb",0,V,"ScrollAreaViewport",0,I,"Scrollbar",0,K,"Thumb",0,V,"Viewport",0,I,"createScrollAreaScope",0,D],69480);var ag=a.i(69480),ag=ag,ah=a.i(85536);function ai({className:a,children:c,...d}){return(0,b.jsxs)(ag.Root,{"data-slot":"scroll-area",className:(0,ah.cn)("relative",a),...d,children:[(0,b.jsx)(ag.Viewport,{"data-slot":"scroll-area-viewport",className:"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&>div]:block!",children:c}),(0,b.jsx)(aj,{}),(0,b.jsx)(ag.Corner,{})]})}function aj({className:a,orientation:c="vertical",...d}){return(0,b.jsx)(ag.ScrollAreaScrollbar,{"data-slot":"scroll-area-scrollbar",orientation:c,className:(0,ah.cn)("flex touch-none p-px transition-colors select-none","vertical"===c&&"h-full w-2.5 border-s border-s-transparent","horizontal"===c&&"h-2.5 flex-col border-t border-t-transparent",a),...d,children:(0,b.jsx)(ag.ScrollAreaThumb,{"data-slot":"scroll-area-thumb",className:"bg-border relative flex-1 rounded-full"})})}var ak=a.i(89982),al=a.i(19884);function am({icon:a,label:c,href:d,active:e=!1}){let f=(0,al.useSoundAction)("navigate");return(0,b.jsx)(g.SidebarMenuItem,{"data-testid":"sidebar-nav-item",children:(0,b.jsx)(g.SidebarMenuButton,{asChild:!0,isActive:e,tooltip:c,children:(0,b.jsxs)(ak.default,{href:d,onClick:()=>f.play(),children:[(0,b.jsx)(a,{}),(0,b.jsx)("span",{children:c})]})})})}var an=a.i(57833),an=an,ao=a.i(18948);function ap({className:a}){let{toggleSidebar:c,open:d}=(0,g.useSidebar)(),e=(0,al.useSoundAction)("expand"),f=(0,al.useSoundAction)("collapse");return(0,b.jsx)("div",{className:(0,ah.cn)("flex",a),children:(0,b.jsx)(ao.Button,{"data-testid":"sidebar-collapse-toggle",variant:"ghost",size:"icon",className:"size-7 cursor-pointer group-data-[collapsible=icon]:size-8!",onClick:()=>{d?f.play():e.play(),c()},"aria-label":d?"Collapse sidebar":"Expand sidebar",children:(0,b.jsx)(an.default,{className:"size-4"})})})}var aq=a.i(7077);let ar=194/319;function as({className:a,size:c=24,variant:d="default"}){return(0,b.jsx)(aq.default,{src:"/shipit-brain.png",alt:"ShipIT AI",width:c,height:Math.round(c*ar),className:(0,ah.cn)("shrink-0 object-contain dark:brightness-125","dev"===d&&"opacity-80",a),style:{width:c,height:"auto"},"aria-hidden":!0})}var at=a.i(82934);function au({version:a,branch:d,commitHash:f,isDev:g=!1,packageName:h="@shipit-ai/cli",description:i,instancePath:j}){let{t:k}=(0,e.useTranslation)("web"),l=f?.slice(0,7),{latest:m,updateAvailable:n}=function(a){let[b,d]=(0,c.useState)(null),[e,f]=(0,c.useState)(!0);(0,c.useEffect)(()=>{let a=!1;return async function(){try{let b=await fetch("/api/npm-version");if(!b.ok)return;let c=await b.json();!a&&c.latest&&d(c.latest)}catch{}finally{a||f(!1)}}(),()=>{a=!0}},[]);let g=null!==b&&function(a,b){let c=a=>a.split("-")[0].split(".").map(Number),d=c(a),e=c(b);for(let a=0;a<3;a++){let b=d[a]??0,c=e[a]??0;if(b>c)return 1;if(b<c)return -1}return 0}(b,a)>0;return{latest:b,updateAvailable:g,loading:e}}(a),{status:o,startUpgrade:p}=function(){let[a,b]=(0,c.useState)("idle"),[d,e]=(0,c.useState)(""),[f,g]=(0,c.useState)(),h=(0,c.useRef)(null),i=(0,c.useRef)(!1),j=(0,c.useCallback)(()=>{if("upgrading"===a||"restarting"===a)return;b("upgrading"),e(""),g(void 0),i.current=!1;let c=new AbortController;return h.current=c,fetch("/api/cli-upgrade",{method:"POST",signal:c.signal}).then(async a=>{if(!a.ok||!a.body){b("error"),g(`Server returned ${a.status}`);return}let c=a.body.getReader(),d=new TextDecoder,f="";for(;;){let{done:a,value:h}=await c.read();if(a)break;let j=(f+=d.decode(h,{stream:!0})).split("\n");for(let a of(f=j.pop()??"",j)){if(a.startsWith("event: restarting")){i.current=!0,b("restarting"),function(){let a=Date.now()+3e4,b=()=>{Date.now()>a||fetch("/api/version",{method:"GET",cache:"no-store"}).then(a=>{a.ok?window.location.reload():setTimeout(b,500)}).catch(()=>{setTimeout(b,500)})};setTimeout(b,500)}();continue}if(!a.startsWith("event: done")&&a.startsWith("data: ")){let c=a.slice(6);try{let a=JSON.parse(c);"upgraded"===a.status?b("upgraded"):"up-to-date"===a.status?b("up-to-date"):"error"===a.status&&(b("error"),g(a.errorMessage))}catch{e(a=>a+c)}}}}}).catch(a=>{i.current||a instanceof DOMException&&"AbortError"===a.name||(b("error"),g(a instanceof Error?a.message:"Upgrade failed"))}),()=>{c.abort()}},[a]);return{status:a,output:d,errorMessage:f,startUpgrade:j}}(),q=g?`${a}-dev`:`v${a}`,r="upgrading"===o,s="restarting"===o,t="upgraded"===o;return(0,b.jsx)(at.TooltipProvider,{delayDuration:200,children:(0,b.jsxs)(at.Tooltip,{children:[(0,b.jsx)(at.TooltipTrigger,{asChild:!0,children:(0,b.jsxs)("span",{className:"text-muted-foreground/80 hover:text-muted-foreground relative cursor-default text-[11px] leading-tight transition-colors","data-testid":"version-label",children:[q,!n||t||s?null:(0,b.jsx)("span",{className:"absolute -top-0.5 -right-1.5 size-1.5 rounded-full bg-emerald-400","data-testid":"update-dot"})]})}),(0,b.jsxs)(at.TooltipContent,{side:"right",className:"max-w-[280px] space-y-1 p-3 text-start",children:[(0,b.jsx)("div",{className:"mb-1.5 text-xs font-semibold",children:h}),i?(0,b.jsx)("div",{className:"text-[10px] leading-snug opacity-70",children:i}):null,(0,b.jsxs)("div",{className:"border-t border-white/10 pt-1.5",children:[(0,b.jsx)(av,{label:k("versionBadge.version"),value:q}),g&&d?(0,b.jsx)(av,{label:k("versionBadge.branch"),value:d}):null,g&&l?(0,b.jsx)(av,{label:k("versionBadge.commit"),value:l,mono:!0}):null,g&&j?(0,b.jsx)(av,{label:k("versionBadge.path"),value:j,mono:!0}):null,m?(0,b.jsx)(av,{label:"Latest",value:`v${m}`,highlight:n}):null]}),s?(0,b.jsx)("div",{className:"border-t border-white/10 pt-1.5",children:(0,b.jsx)("span",{className:"text-[10px] font-medium text-emerald-400","data-testid":"upgrade-restarting",children:"Restarting..."})}):t?(0,b.jsx)("div",{className:"border-t border-white/10 pt-1.5",children:(0,b.jsx)("span",{className:"text-[10px] font-medium text-emerald-400","data-testid":"upgrade-success",children:"Upgraded successfully"})}):"error"===o?(0,b.jsx)("div",{className:"border-t border-white/10 pt-1.5",children:(0,b.jsx)("span",{className:"text-[10px] font-medium text-red-400","data-testid":"upgrade-error",children:"Upgrade failed"})}):n?(0,b.jsx)("div",{className:"border-t border-white/10 pt-1.5",children:(0,b.jsx)("button",{type:"button",onClick:p,disabled:r||s,className:"inline-flex items-center gap-1 text-[10px] font-medium text-emerald-400 transition-colors hover:text-emerald-300 disabled:opacity-50","data-testid":"upgrade-button",children:r?"Upgrading...":s?"Restarting...":`Upgrade to v${m}`})}):null]})]})})}function av({label:a,value:c,highlight:d,mono:e}){return(0,b.jsxs)("div",{className:"flex items-center justify-between gap-4 text-[10px]",children:[(0,b.jsx)("span",{className:"opacity-60",children:a}),(0,b.jsx)("span",{className:[d?"font-medium text-emerald-400":"",e||!d?"font-mono":""].filter(Boolean).join(" "),children:c})]})}function aw({startedAt:a}){let[d,e]=(0,c.useState)(()=>Date.now()-a);return(0,c.useEffect)(()=>{let b=setInterval(()=>{(0,c.startTransition)(()=>e(Date.now()-a))},1e3);return()=>clearInterval(b)},[a]),(0,b.jsx)("span",{"data-testid":"elapsed-time",className:"tabular-nums",children:function(a){let b=Math.floor(a/1e3);if(b>=3600){let a=Math.floor(b/3600);return`${a}h`}let c=Math.floor(b/60);return`${String(c).padStart(2,"0")}:${String(b%60).padStart(2,"0")}`}(d)})}var ax=a.i(63843),ay=a.i(20901),az=a.i(82912),aA=a.i(14561),aB=a.i(28966),aC=a.i(41042);let aD={"action-needed":{icon:ax.CircleAlert,iconClass:"text-amber-500",bgClass:"bg-amber-500/10",labelKey:"sidebar.statusActionNeeded"},"in-progress":{icon:ay.LoaderCircle,iconClass:"text-blue-500 animate-spin",bgClass:"bg-blue-500/10",labelKey:"sidebar.statusInProgress"},pending:{icon:aC.Clock,iconClass:"text-slate-400",bgClass:"bg-slate-400/10",labelKey:"sidebar.statusPending"},blocked:{icon:aA.Ban,iconClass:"text-gray-400",bgClass:"bg-gray-400/10",labelKey:"sidebar.statusBlocked"},error:{icon:aB.CircleX,iconClass:"text-red-500",bgClass:"bg-red-500/10",labelKey:"sidebar.statusError"},done:{icon:az.CircleCheck,iconClass:"text-emerald-500",bgClass:"bg-emerald-500/10",labelKey:"sidebar.statusDone"}},aE=["action-needed","error","blocked","in-progress","pending","done"];var aF=a.i(17606),aG=a.i(83852);function aH({name:a,status:c,startedAt:d,duration:e,agentType:f,modelId:h,onClick:i}){let{icon:j,iconClass:k}=aD[c],l=f?(0,aF.getAgentTypeIcon)(f):null;return(0,b.jsx)(g.SidebarMenuItem,{"data-testid":"feature-list-item",children:(0,b.jsxs)(g.SidebarMenuButton,{size:"sm",onClick:i,tooltip:a,className:"cursor-pointer",children:[(0,b.jsx)(j,{className:k}),(0,b.jsx)("span",{className:"flex-1 truncate font-medium",children:a}),"in-progress"===c&&null!=d?(0,b.jsx)("span",{"data-testid":"feature-list-item-meta",className:"text-muted-foreground ml-auto text-xs tabular-nums",children:(0,b.jsx)(aw,{startedAt:d})}):null,"done"===c&&e?(0,b.jsx)("span",{"data-testid":"feature-list-item-meta",className:"text-muted-foreground ml-auto text-xs tabular-nums",children:e}):null,l?(0,b.jsx)(at.TooltipProvider,{children:(0,b.jsxs)(at.Tooltip,{children:[(0,b.jsx)(at.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("span",{className:"ml-auto shrink-0",children:(0,b.jsx)(l,{className:"h-3.5 w-3.5"})})}),(0,b.jsxs)(at.TooltipContent,{side:"right",children:[(0,b.jsx)("span",{className:"font-medium",children:aF.agentTypeLabels[f]??f}),h?(0,b.jsxs)("span",{className:"ms-1 opacity-70",children:["· ",(0,aG.getModelMeta)(h).displayName||h]}):null]})]})}):null]})})}var aI=a.i(2103);let aJ="shipit-ai-animations-enabled",aK="shipit-ai:animations-toggle",aL="no-animations",aM="shipit-ai-theme";function aN({label:a,count:c,children:d}){return(0,b.jsxs)(g.SidebarGroup,{"data-testid":"feature-status-group",className:"px-2 py-1",children:[(0,b.jsxs)(g.SidebarGroupLabel,{className:"text-muted-foreground h-6 px-2 text-[0.65rem] font-semibold tracking-wider uppercase",children:[a,(0,b.jsx)("span",{"aria-label":`${c} items`,className:"bg-sidebar-accent text-sidebar-accent-foreground ms-1.5 inline-flex h-4 min-w-4 items-center justify-center rounded-full px-1 text-[0.6rem] font-medium tabular-nums",role:"img",children:c})]}),(0,b.jsx)(g.SidebarGroupContent,{children:(0,b.jsx)(g.SidebarMenu,{className:"gap-0.5",children:d})})]})}var aO=a.i(29345),aP=a.i(53759);function aQ({repoName:a,featureCount:d,children:e,defaultOpen:f=!0}){let[g,h]=(0,c.useState)(f);return(0,b.jsxs)("div",{"data-testid":"repo-group",className:"mb-1",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>h(!g),className:(0,ah.cn)("text-sidebar-foreground hover:bg-sidebar-accent flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 text-left text-xs font-semibold","transition-colors duration-100"),"aria-expanded":g,children:[(0,b.jsx)(aO.ChevronDown,{className:(0,ah.cn)("text-muted-foreground h-3.5 w-3.5 shrink-0 transition-transform duration-200",!g&&"-rotate-90")}),(0,b.jsx)(aP.GitFork,{className:"text-muted-foreground h-3.5 w-3.5 shrink-0"}),(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate",children:a}),(0,b.jsx)("span",{"aria-label":`${d} features`,className:"bg-sidebar-accent text-sidebar-accent-foreground ml-auto inline-flex h-4 min-w-4 shrink-0 items-center justify-center rounded-full px-1 text-[0.6rem] font-medium tabular-nums",role:"img",children:d})]}),g?(0,b.jsx)("div",{className:"pl-2",children:e}):null]})}function aR({label:a,className:c}){return(0,b.jsx)(g.SidebarGroup,{"data-testid":"sidebar-section-header",className:(0,ah.cn)("px-2 py-1",c),children:(0,b.jsx)("div",{className:"text-sidebar-foreground flex h-7 w-full shrink-0 items-center px-2 text-sm font-medium",children:(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate",children:a})})})}let aS={version:"unknown",packageName:"@shipit-ai/cli",description:"Autonomous AI Native SDLC Platform",branch:"",commitHash:"",instancePath:"",isDev:!1};function aT({features:a,featureFlags:f,onFeatureClick:h}){let{t:s,i18n:t}=(0,e.useTranslation)("web"),u=(0,d.usePathname)(),{state:v}=(0,g.useSidebar)(),w="collapsed"===v,{mounted:x,visible:y}=function(a){let[b,d]=(0,c.useState)(!a),[e,f]=(0,c.useState)(!a);return(0,c.useEffect)(()=>{if(!a){d(!0);let a=requestAnimationFrame(()=>f(!0));return()=>cancelAnimationFrame(a)}f(!1);let b=window.setTimeout(()=>d(!1),200);return()=>window.clearTimeout(b)},[a,200]),{mounted:b,visible:e}}(w),z=function(){let[a,b]=(0,c.useState)(aS);return(0,c.useEffect)(()=>{let a=!1;return async function(){try{let c=await fetch("/api/version");if(!c.ok)return;let d=await c.json();a||b(d)}catch{}}(),()=>{a=!0}},[]),a}(),{enabled:A,toggle:B}=(0,aI.useSoundEnabled)(),{enabled:C,toggle:D}=function(){let[a,b]=(0,c.useState)(!0);(0,c.useEffect)(()=>{"false"===localStorage.getItem(aJ)&&(b(!1),document.body.classList.add(aL));let a=a=>{let c=a.detail;b(c),document.body.classList.toggle(aL,!c)};return window.addEventListener(aK,a),()=>window.removeEventListener(aK,a)},[]);let d=(0,c.useCallback)(()=>{let c=!a;localStorage.setItem(aJ,String(c)),b(c),document.body.classList.toggle(aL,!c),window.dispatchEvent(new CustomEvent(aK,{detail:c}))},[a]);return{enabled:a,toggle:d}}(),{resolvedTheme:E,theme:F,setTheme:G}=function(){let[a,b]=(0,c.useState)("system"),[d,e]=(0,c.useState)("light"),f=(0,c.useCallback)(()=>"light",[]),g=(0,c.useCallback)(a=>"system"===a?f():a,[f]),h=(0,c.useCallback)(a=>{if("u"<typeof document)return;let b=document.documentElement;b.classList.remove("light","dark"),b.classList.add(a),e(a)},[]),i=(0,c.useCallback)(a=>{b(a),"u">typeof localStorage&&localStorage.setItem(aM,a),h(g(a))},[g,h]);return(0,c.useEffect)(()=>{let a=localStorage.getItem(aM)??"system";b(a),h(g(a))},[g,h]),(0,c.useEffect)(()=>{},[a,g,h]),{theme:a,resolvedTheme:d,setTheme:i}}(),H=(0,al.useSoundAction)("toggle-on"),I=(0,al.useSoundAction)("toggle-off"),J=(0,al.useSoundAction)("navigate"),K=(0,c.useMemo)(()=>{let b=new Map;for(let c of a){let a=c.repositoryPath,d=b.get(a);d||(d={repoName:c.repositoryName,features:[]},b.set(a,d)),d.features.push(c)}return Array.from(b.entries()).map(([a,{repoName:b,features:c}])=>({repoPath:a,repoName:b,featureCount:c.length,statusGroups:aE.map(a=>({statusKey:a,label:s(aD[a].labelKey),items:c.filter(b=>b.status===a)})).filter(a=>a.items.length>0)}))},[a,s]);return(0,b.jsxs)(g.Sidebar,{"data-testid":"app-sidebar","data-no-drawer-close":!0,collapsible:"icon",side:"rtl"===t.dir()?"right":"left",children:[(0,b.jsx)(g.SidebarHeader,{children:(0,b.jsxs)(g.SidebarMenu,{children:[(0,b.jsx)(g.SidebarMenuItem,{children:(0,b.jsxs)("div",{className:"flex h-8 items-center group-data-[collapsible=icon]:justify-center",children:[x?(0,b.jsxs)("div",{className:["flex min-w-0 flex-1 items-center gap-2 overflow-hidden px-2 transition-opacity duration-200 ease-out",y?"opacity-100":"opacity-0"].join(" "),"aria-hidden":!y,children:[(0,b.jsx)(as,{className:"shrink-0 drop-shadow-[0_0_4px_rgba(34,211,238,0.4)]",size:28,variant:z.isDev?"dev":"default"}),(0,b.jsx)("span",{className:"truncate text-sm font-semibold tracking-tight",children:"ShipIT"}),(0,b.jsx)(au,{version:z.version,branch:z.branch||void 0,commitHash:z.commitHash||void 0,isDev:z.isDev,packageName:z.packageName,description:z.description,instancePath:z.instancePath||void 0})]}):null,(0,b.jsx)(ap,{className:"shrink-0 transition-all duration-200"})]})}),(0,b.jsx)(am,{icon:i,label:s("navigation.controlCenter"),href:"/",active:"/"===u}),(0,b.jsx)(am,{icon:p.Wrench,label:s("navigation.tools"),href:"/tools",active:"/tools"===u}),f.skills?(0,b.jsx)(am,{icon:q.Puzzle,label:s("navigation.skills"),href:"/skills",active:"/skills"===u}):null,(0,b.jsx)(am,{icon:r.Settings,label:s("navigation.settings"),href:"/settings",active:"/settings"===u})]})}),(0,b.jsx)(g.SidebarContent,{children:x?(0,b.jsx)("div",{className:["flex min-h-0 flex-1 flex-col overflow-hidden transition-opacity duration-200 ease-out [&_[data-sidebar=group-label]]:!mt-0 [&_[data-sidebar=group-label]]:!opacity-100 [&_[data-sidebar=group-label]]:!transition-none",y?"opacity-100":"opacity-0"].join(" "),children:K.length>0&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(aR,{label:s("sidebar.features")}),(0,b.jsx)(ai,{className:"min-h-0 flex-1",children:K.map(({repoPath:a,repoName:c,featureCount:d,statusGroups:e})=>(0,b.jsx)(aQ,{repoName:c,featureCount:d,children:e.map(({statusKey:a,label:c,items:d})=>(0,b.jsx)(aN,{label:c,count:d.length,children:d.map(a=>(0,b.jsx)(aH,{name:a.name,status:a.status,startedAt:a.startedAt,duration:a.duration,agentType:a.agentType,modelId:a.modelId,onClick:h?()=>h(a.featureId):void 0},a.featureId))},a))},a))})]})}):null}),(0,b.jsx)(g.SidebarFooter,{className:"border-t p-2",children:(0,b.jsx)(g.SidebarMenu,{children:(0,b.jsx)(g.SidebarMenuItem,{children:(0,b.jsx)("div",{className:"flex items-center gap-1",children:(0,b.jsxs)(at.TooltipProvider,{children:[(0,b.jsxs)(at.Tooltip,{children:[(0,b.jsx)(at.TooltipTrigger,{asChild:!0,children:(0,b.jsxs)(g.SidebarMenuButton,{className:"w-auto flex-none",onClick:a=>{let b="system"===F?"dark"===E?"light":"dark":"dark"===F?"light":"dark";("dark"!==("system"===F?E:F)?H.play():I.play(),"startViewTransition"in document)?(document.documentElement.style.setProperty("--x",`${a.clientX}px`),document.documentElement.style.setProperty("--y",`${a.clientY}px`),document.startViewTransition(()=>{G(b)})):G(b)},"aria-label":"dark"===E?s("sidebar.switchToLight"):s("sidebar.switchToDark"),children:[(0,b.jsx)(k,{className:"h-4 w-4 scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90"}),(0,b.jsx)(j,{className:"absolute h-4 w-4 scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0"})]})}),(0,b.jsx)(at.TooltipContent,{side:"top",children:"dark"===E?s("sidebar.switchToLight"):s("sidebar.switchToDark")})]}),!w&&(0,b.jsxs)(at.Tooltip,{children:[(0,b.jsx)(at.TooltipTrigger,{asChild:!0,children:(0,b.jsx)(g.SidebarMenuButton,{className:"w-auto flex-none",onClick:()=>{J.play(),B()},"aria-label":A?s("sidebar.muteSounds"):s("sidebar.unmuteSounds"),children:A?(0,b.jsx)(l,{className:"h-4 w-4"}):(0,b.jsx)(m,{className:"h-4 w-4"})})}),(0,b.jsx)(at.TooltipContent,{side:"top",children:A?s("sidebar.muteSounds"):s("sidebar.unmuteSounds")})]}),!w&&(0,b.jsxs)(at.Tooltip,{children:[(0,b.jsx)(at.TooltipTrigger,{asChild:!0,children:(0,b.jsx)(g.SidebarMenuButton,{className:"w-auto flex-none",onClick:()=>{J.play(),D()},"aria-label":C?"Disable animations":"Enable animations",children:C?(0,b.jsx)(n.Zap,{className:"h-4 w-4"}):(0,b.jsx)(o,{className:"h-4 w-4"})})}),(0,b.jsx)(at.TooltipContent,{side:"top",children:C?"Disable animations":"Enable animations"})]})]})})})})}),(0,b.jsx)(g.SidebarRail,{})]})}a.i(21434);var aU=a.i(34379),aV=a.i(73952),aW=a.i(83695),aX=a.i(87638);let aY=(0,h.default)("grip-vertical",[["circle",{cx:"9",cy:"12",r:"1",key:"1vctgf"}],["circle",{cx:"9",cy:"5",r:"1",key:"hp0tcf"}],["circle",{cx:"9",cy:"19",r:"1",key:"fkjjf6"}],["circle",{cx:"15",cy:"12",r:"1",key:"1tmaij"}],["circle",{cx:"15",cy:"5",r:"1",key:"19l28e"}],["circle",{cx:"15",cy:"19",r:"1",key:"f4zoj3"}]]);var aZ=a.i(34466);let a$=(0,h.default)("minimize-2",[["path",{d:"m14 10 7-7",key:"oa77jy"}],["path",{d:"M20 10h-6V4",key:"mjg0md"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M4 14h6v6",key:"rmj7iw"}]]);var a_=a.i(61544),a0=a.i(5555),a1=a.i(33419),a2=a.i(48265);let a3="shipit-ai-global-chat";function a4(){try{let a=localStorage.getItem(a3);if(!a)return{pos:null,size:null};let b=JSON.parse(a),c=b.size??null;return c&&(c.w<360||c.h<300)&&(c={w:Math.max(360,c.w),h:Math.max(300,c.h)}),{pos:b.pos??null,size:c}}catch{return{pos:null,size:null}}}function a5(){let{t:a}=(0,e.useTranslation)("web"),[d,f]=(0,c.useState)(!1),[h,i]=(0,c.useState)(!1),[j,k]=(0,c.useState)(!1),l=(0,a1.useTurnStatus)("global"),{swapPosition:m}=(0,a2.useFabLayout)(),{state:n}=(0,g.useSidebar)(),[o,p]=(0,c.useState)(()=>a4().pos),[q,r]=(0,c.useState)(()=>a4().size),s=(0,c.useCallback)(a=>{p(b=>"function"==typeof a?a(b):a)},[]),t=(0,c.useCallback)(a=>{r(b=>"function"==typeof a?a(b):a)},[]),u=(0,c.useRef)(null),v=(0,c.useRef)(null),w=(0,c.useRef)(null),x=(0,c.useCallback)(()=>{f(a=>(a||i(!0),!a))},[]),y=(0,c.useRef)({pos:null,size:null}),z=(0,c.useCallback)(()=>{d||(f(!0),i(!0)),k(a=>(a?(s(y.current.pos),t(y.current.size)):y.current={pos:o,size:q},!a))},[d,o,q,s,t]);(0,c.useEffect)(()=>{let a=a=>{(a.metaKey||a.ctrlKey)&&a.shiftKey&&("k"===a.key||"K"===a.key)&&(a.preventDefault(),j&&k(!1),x(),requestAnimationFrame(()=>{setTimeout(()=>{let a=u.current?.querySelector("textarea");a?.focus()},100)})),(a.metaKey||a.ctrlKey)&&a.shiftKey&&("m"===a.key||"M"===a.key)&&(a.preventDefault(),z())};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[x,z,j]),(0,c.useEffect)(()=>{let a=setTimeout(()=>(function(a,b){try{localStorage.setItem(a3,JSON.stringify({pos:a,size:b}))}catch{}})(o,q),300);return()=>clearTimeout(a)},[o,q]);let A=(0,c.useCallback)((a,b,c)=>({x:Math.max(-c+100,Math.min(a,window.innerWidth-100)),y:Math.max(0,Math.min(b,window.innerHeight-48))}),[]),B=(0,c.useCallback)(a=>{a.preventDefault();let b=u.current;if(!b)return;let c=b.getBoundingClientRect(),d=o?.x??c.left,e=o?.y??c.top;v.current={startX:a.clientX,startY:a.clientY,startPosX:d,startPosY:e};let f=q?.w??c.width,g=a=>{if(!v.current)return;let b=a.clientX-v.current.startX,c=a.clientY-v.current.startY;s(A(v.current.startPosX+b,v.current.startPosY+c,f))},h=()=>{v.current=null,document.removeEventListener("mousemove",g),document.removeEventListener("mouseup",h)};document.addEventListener("mousemove",g),document.addEventListener("mouseup",h)},[o,q,s,A]),C=(0,c.useCallback)(a=>{a.preventDefault(),a.stopPropagation();let b=u.current;if(!b)return;let c=b.getBoundingClientRect(),d=q?.w??c.width,e=q?.h??c.height,f=a.clientX,g=a.clientY,h=o?.y??c.top;w.current={startX:f,startY:g,startW:d,startH:e},o||s({x:c.left,y:c.top});let i=a=>{if(!w.current)return;let b=a.clientX-f,i=a.clientY-g,j=Math.max(360,d+b),k=Math.max(300,e-i),l=Math.max(0,h+i);t({w:j,h:k}),s(a=>A(a?.x??c.left,l,j))},j=()=>{w.current=null,document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",j)};document.addEventListener("mousemove",i),document.addEventListener("mouseup",j)},[q,o,s,t,A]),D=(0,c.useCallback)(()=>{f(!1),k(!1)},[]),E=j?{}:o?{position:"fixed",left:o.x,top:o.y,width:q?.w??520,height:q?.h??"70vh"}:{width:q?.w??520,height:q?.h??"70vh"};return(0,b.jsxs)(b.Fragment,{children:[h?(0,b.jsxs)("div",{ref:u,className:(0,ah.cn)(j?"bg-background fixed inset-0 z-[60] flex flex-col overflow-hidden dark:bg-neutral-900":(0,ah.cn)(!o&&(m?"fixed start-8 bottom-24":"fixed end-8 bottom-24"),"z-[60] flex flex-col overflow-hidden rounded-lg","border-border/60 border dark:border-white/10","bg-background dark:bg-neutral-900","shadow-[0_8px_40px_-8px_rgba(0,0,0,0.2)] dark:shadow-[0_8px_40px_-8px_rgba(0,0,0,0.6)]"),"transition-opacity duration-300 ease-out",d?"pointer-events-auto opacity-100":"pointer-events-none opacity-0"),style:E,children:[j?null:(0,b.jsx)("div",{className:"h-[2px] shrink-0 bg-gradient-to-r from-transparent via-violet-500/50 to-transparent"}),j?null:(0,b.jsx)("div",{onMouseDown:C,className:"absolute end-0 top-0 z-10 h-4 w-4 cursor-ne-resize"}),(0,b.jsxs)("div",{onMouseDown:j?void 0:B,className:(0,ah.cn)("relative flex h-11 shrink-0 items-center gap-2.5 border-b border-black/[0.06] px-3.5 dark:border-white/[0.06]",!j&&"cursor-grab active:cursor-grabbing"),children:[(0,b.jsx)("div",{className:"from-foreground/[0.02] to-foreground/[0.02] pointer-events-none absolute inset-0 bg-gradient-to-r via-transparent"}),j?null:(0,b.jsx)(aY,{className:"text-foreground/15 relative h-3.5 w-3.5 shrink-0"}),(0,b.jsx)("div",{className:"relative flex h-5 w-5 items-center justify-center",children:(0,b.jsx)(aX.Bot,{className:"text-foreground/50 h-4 w-4"})}),(0,b.jsxs)("div",{className:"relative flex items-baseline gap-2",children:[(0,b.jsx)("span",{className:"text-foreground/90 text-base font-bold tracking-tight",children:"ShipIT"}),(0,b.jsx)("span",{className:"text-foreground/30 text-xs font-medium tracking-widest uppercase",children:"global"})]}),(0,b.jsxs)("div",{className:"relative ms-auto flex items-center gap-0.5",children:[(0,b.jsx)("button",{type:"button",onClick:z,className:"text-foreground/30 hover:text-foreground/60 rounded-md p-1 transition-colors",title:j?"Restore (⌘⇧M)":"Maximize (⌘⇧M)",children:j?(0,b.jsx)(a$,{className:"h-3.5 w-3.5"}):(0,b.jsx)(aZ.Maximize2,{className:"h-3.5 w-3.5"})}),(0,b.jsx)("button",{type:"button",onClick:D,className:"text-foreground/30 hover:text-foreground/60 rounded-md p-1 transition-colors",title:"Close (⌘⇧K)",children:(0,b.jsx)(aW.X,{className:"h-3.5 w-3.5"})})]})]}),(0,b.jsx)("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden",children:(0,b.jsx)(a_.ChatTab,{featureId:"global"})}),j?null:(0,b.jsx)("div",{onMouseDown:a=>{a.preventDefault(),a.stopPropagation();let b=u.current;if(!b)return;let c=b.getBoundingClientRect(),d=a.clientX,e=a.clientY,f=q?.w??c.width,g=q?.h??c.height;o||s({x:c.left,y:c.top});let h=a=>{let b=window.innerHeight-(o?.y??c.top);t({w:Math.max(360,f+(a.clientX-d)),h:Math.max(300,Math.min(g+(a.clientY-e),b))})},i=()=>{document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",i)};document.addEventListener("mousemove",h),document.addEventListener("mouseup",i)},className:"absolute end-0 bottom-0 z-10 h-4 w-4 cursor-se-resize"})]}):null,(0,b.jsxs)(a6,{swapPosition:m,sidebarState:n,isMaximized:j,children:[(0,b.jsxs)(ao.Button,{size:"icon",onClick:x,className:(0,ah.cn)("relative h-14 w-14 rounded-full shadow-lg","transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95",d?"bg-violet-600 text-white hover:bg-violet-500":"bg-violet-500 text-white hover:bg-violet-400 dark:bg-violet-500 dark:hover:bg-violet-400"),children:[(0,b.jsx)(aV.MessageSquare,{className:(0,ah.cn)("absolute h-7 w-7 stroke-[2.5] transition-all duration-200",d?"scale-0 rotate-90 opacity-0":"scale-100 rotate-0 opacity-100")}),(0,b.jsx)(aW.X,{className:(0,ah.cn)("absolute h-6 w-6 stroke-[2.5] transition-all duration-200",d?"scale-100 rotate-0 opacity-100":"scale-0 -rotate-90 opacity-0")}),!d&&(0,b.jsx)(a0.ChatDotIndicator,{status:l,className:"end-0 top-0"})]}),(0,b.jsx)("div",{className:"pointer-events-none absolute bottom-[calc(100%+8px)] left-1/2 -translate-x-1/2 translate-y-1 opacity-0 transition-all duration-200 group-hover/fab:translate-y-0 group-hover/fab:opacity-100",children:(0,b.jsxs)("div",{className:"bg-foreground rounded-lg px-3 py-1.5 text-center shadow-lg",children:[(0,b.jsx)("p",{className:"text-background text-xs font-medium whitespace-nowrap",children:a("chat.shipitAiChat")}),(0,b.jsxs)("p",{className:"text-background/50 mt-0.5 flex items-center justify-center gap-1 text-[10px]",children:[(0,b.jsx)("kbd",{className:"bg-background/15 rounded px-1 py-px font-mono",children:"⌘"}),(0,b.jsx)("kbd",{className:"bg-background/15 rounded px-1 py-px font-mono",children:"⇧"}),(0,b.jsx)("kbd",{className:"bg-background/15 rounded px-1 py-px font-mono",children:"K"})]})]})})]})]})}function a6({swapPosition:a,sidebarState:c,isMaximized:d,children:f}){let{i18n:g}=(0,e.useTranslation)("web"),h="rtl"===g.dir();if(!a)return(0,b.jsx)("div",{className:(0,ah.cn)("group/fab fixed end-8 bottom-6 z-30",d&&"hidden"),children:f});let i="expanded"===c?"calc(var(--sidebar-width) + 32px)":"calc(var(--sidebar-width-icon) + 32px)";return(0,b.jsx)("div",{className:(0,ah.cn)("group/fab fixed bottom-6 z-30",d&&"hidden"),style:h?{right:i,transition:"right 200ms ease-in-out"}:{left:i,transition:"left 200ms ease-in-out"},children:f})}var a7=a.i(1377),a8=a.i(45670),a9=a.i(41305),ba=a.i(90920),bb=a.i(58860);let bc=/^(?:https:\/\/github\.com\/([a-zA-Z0-9._-]+)\/([a-zA-Z0-9._-]+?)(?:\.git)?|git@github\.com:([a-zA-Z0-9._-]+)\/([a-zA-Z0-9._-]+?)(?:\.git)?|([a-zA-Z0-9._-]+)\/([a-zA-Z0-9._-]+))$/;function bd({onSubmit:a,loading:d=!1}){let[e,f]=(0,c.useState)(""),[g,h]=(0,c.useState)("");function i(){let b=e.trim();b?bc.test(b.trim())?(h(""),a(b)):h("Enter a valid GitHub URL (e.g. owner/repo or https://github.com/owner/repo)"):h("Please enter a GitHub URL")}return(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)(bb.Label,{htmlFor:"github-url-input",children:"GitHub URL"}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(ba.Input,{id:"github-url-input",placeholder:"owner/repo or https://github.com/owner/repo",value:e,onChange:a=>{f(a.target.value),g&&h("")},onKeyDown:function(a){"Enter"===a.key&&(a.preventDefault(),i())},disabled:d,"aria-invalid":!!g,"aria-describedby":g?"github-url-error":void 0}),(0,b.jsx)(ao.Button,{onClick:i,disabled:d||!e.trim(),size:"sm",children:d?(0,b.jsx)(ay.LoaderCircle,{className:"h-4 w-4 animate-spin"}):"Import"})]}),g?(0,b.jsx)("p",{id:"github-url-error",className:"text-destructive text-sm",role:"alert",children:g}):null]})}let be=(0,h.default)("lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);var bf=a.i(77213),bg=a.i(50950),bh=a.i(58339),bi=a.i(55837),bj=a.i(59175),bk=a.i(6120);let bl=(0,bk.createServerReference)("402dc759d6b9f6ac4d0286821d233beb7586bfd6a1",bk.callServer,void 0,bk.findSourceMapURL,"listGitHubRepositories"),bm=(0,bk.createServerReference)("007430c6e44658511533da6fc18df6a10a77d8ca2f",bk.callServer,void 0,bk.findSourceMapURL,"listGitHubOrganizations"),bn="__personal__";function bo({onSelect:a,loading:d=!1,fetchRepos:e=bl,fetchOrgs:f=bm}){let[g,h]=(0,c.useState)([]),[i,j]=(0,c.useState)([]),[k,l]=(0,c.useState)(!0),[m,n]=(0,c.useState)(""),[o,p]=(0,c.useState)(""),[q,r]=(0,c.useState)(bn),s=(0,c.useRef)(null);(0,c.useEffect)(()=>{!async function(){try{let a=await f();a.orgs&&j(a.orgs)}catch{}}()},[f]);let t=(0,c.useCallback)(async(a,b)=>{l(!0),n("");try{let c={};a&&(c.search=a),b&&b!==bn&&(c.owner=b);let d=await e(Object.keys(c).length>0?c:void 0);d.error?(n(d.error),h([])):h(d.repos??[])}catch{n("Failed to fetch repositories"),h([])}finally{l(!1)}},[e]);return((0,c.useEffect)(()=>{t(o||void 0,q)},[t,q]),m&&!k)?(0,b.jsxs)("div",{className:"flex flex-col items-center gap-2 py-8 text-center","data-testid":"repo-browser-error",children:[(0,b.jsx)(ax.CircleAlert,{className:"text-destructive h-8 w-8"}),(0,b.jsx)("p",{className:"text-destructive text-sm",children:m})]}):(0,b.jsxs)("div",{className:"flex flex-col gap-3",children:[i.length>0?(0,b.jsxs)(bj.Select,{value:q,onValueChange:function(a){r(a),p("")},disabled:d,children:[(0,b.jsx)(bj.SelectTrigger,{"aria-label":"Select owner",children:(0,b.jsx)(bj.SelectValue,{placeholder:"Select owner"})}),(0,b.jsxs)(bj.SelectContent,{children:[(0,b.jsx)(bj.SelectItem,{value:bn,children:"My repositories"}),i.map(a=>(0,b.jsx)(bj.SelectItem,{value:a.login,children:a.login},a.login))]})]}):null,(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)(bg.Search,{className:"text-muted-foreground absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2"}),(0,b.jsx)(ba.Input,{placeholder:"Search repositories...",value:o,onChange:a=>{var b;p(b=a.target.value),s.current&&clearTimeout(s.current),s.current=setTimeout(()=>{t(b||void 0,q)},300)},className:"ps-9",disabled:d,"aria-label":"Search repositories"})]}),(0,b.jsx)("div",{className:"max-h-64 overflow-x-hidden overflow-y-auto rounded-md border",role:"listbox","aria-label":"GitHub repositories",children:k?(0,b.jsx)("div",{className:"flex flex-col gap-2 p-3","data-testid":"repo-browser-loading",children:Array.from({length:5}).map((a,c)=>(0,b.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,b.jsx)(bi.Skeleton,{className:"h-4 w-48"}),(0,b.jsx)(bi.Skeleton,{className:"h-3 w-72"})]},`skeleton-${String(c)}`))}):0===g.length?(0,b.jsx)("div",{className:"text-muted-foreground py-8 text-center text-sm","data-testid":"repo-browser-empty",children:"No repositories found"}):g.map(c=>(0,b.jsxs)("button",{type:"button",role:"option","aria-selected":!1,className:"hover:bg-accent flex w-full items-start gap-2 border-b px-3 py-2.5 text-start last:border-b-0 disabled:opacity-50",onClick:()=>a(c.nameWithOwner),disabled:d,children:[(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"truncate text-sm font-medium",children:c.nameWithOwner}),(0,b.jsx)(bh.Badge,{variant:c.isPrivate?"secondary":"outline",className:"shrink-0 text-xs",children:c.isPrivate?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(be,{className:"me-1 h-3 w-3"}),"Private"]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(bf.Globe,{className:"me-1 h-3 w-3"}),"Public"]})})]}),c.description?(0,b.jsx)("p",{className:"text-muted-foreground mt-0.5 truncate text-xs",children:c.description}):null]}),d?(0,b.jsx)(ay.LoaderCircle,{className:"mt-0.5 h-4 w-4 shrink-0 animate-spin"}):null]},c.nameWithOwner))})]})}let bp=(0,bk.createServerReference)("408951cdf9d60d3b3fcefa97ab36845c975e13a4e4",bk.callServer,void 0,bk.findSourceMapURL,"importGitHubRepository");function bq({open:a,onOpenChange:d,onImportComplete:e}){let[f,g]=(0,c.useState)(!1),[h,i]=(0,c.useState)("");async function j(a){g(!0),i("");try{let b=await bp({url:a});b.error?i(b.error):b.repository&&(e(b.repository),d(!1))}catch{i("An unexpected error occurred")}finally{g(!1)}}return(0,b.jsx)(a8.Dialog,{open:a,onOpenChange:d,children:(0,b.jsxs)(a8.DialogContent,{className:"overflow-hidden sm:max-w-lg",children:[(0,b.jsxs)(a8.DialogHeader,{children:[(0,b.jsx)(a8.DialogTitle,{children:"Import from GitHub"}),(0,b.jsx)(a8.DialogDescription,{children:"Clone a GitHub repository and add it to ShipIT."})]}),(0,b.jsxs)(a9.Tabs,{defaultValue:"url",className:"min-w-0",children:[(0,b.jsxs)(a9.TabsList,{className:"grid w-full grid-cols-2",children:[(0,b.jsx)(a9.TabsTrigger,{value:"url",children:"URL"}),(0,b.jsx)(a9.TabsTrigger,{value:"browse",children:"Browse"})]}),(0,b.jsx)(a9.TabsContent,{value:"url",className:"mt-4",children:(0,b.jsx)(bd,{onSubmit:j,loading:f})}),(0,b.jsx)(a9.TabsContent,{value:"browse",className:"mt-4",children:(0,b.jsx)(bo,{onSelect:j,loading:f})})]}),h?(0,b.jsx)("p",{className:"text-destructive text-sm",role:"alert",children:h}):null]})})}var br=a.i(84871),bs=a.i(96213),bt=a.i(1356),bu=a.i(52313),bv=a.i(46847);let bw={[bv.NotificationSeverity.Success]:"success",[bv.NotificationSeverity.Error]:"error",[bv.NotificationSeverity.Warning]:"warning",[bv.NotificationSeverity.Info]:"info"},bx={[bv.NotificationSeverity.Success]:"notification-success",[bv.NotificationSeverity.Error]:"notification-error",[bv.NotificationSeverity.Warning]:"notification-warning",[bv.NotificationSeverity.Info]:"notification-info"};var by=a.i(21333);function bz({children:a,sidebarOpen:e}){let f=(0,d.useRouter)(),{guardedNavigate:h}=(0,bs.useDrawerCloseGuard)(),i=(0,by.useFeatureFlags)();!function(){let a=(0,d.useRouter)(),{events:b}=(0,br.useAgentEventsContext)(),e=(0,al.useSoundAction)("notification-success"),f=(0,al.useSoundAction)("notification-error"),g=(0,al.useSoundAction)("notification-warning"),h=(0,al.useSoundAction)("notification-info"),i=(0,c.useMemo)(()=>({"notification-success":e,"notification-error":f,"notification-warning":g,"notification-info":h}),[e,f,g,h]),j=(0,c.useRef)(0);(0,c.useEffect)(()=>{if(b.length<=j.current)return;let c=b.slice(j.current);for(let d of(j.current=b.length,c)){if(d.eventType!==bv.NotificationEventType.MergeReviewReady&&d.severity!==bv.NotificationSeverity.Error&&d.severity!==bv.NotificationSeverity.Warning&&d.severity!==bv.NotificationSeverity.Success)continue;!function(a,b){let c=bw[a.severity]??"info",d=a.eventType===bv.NotificationEventType.WaitingApproval||a.eventType===bv.NotificationEventType.MergeReviewReady;bu.toast[c](a.featureName,{description:a.message,...d&&b&&{action:{label:"Review",onClick:()=>{b(`/feature/${a.featureId}`)}}}})}(d,b=>a.push(b));let b=bx[d.severity];i[b]?.play()}},[b,i,a])}();let{features:j}=(0,bt.useSidebarFeaturesContext)(),k=(0,c.useCallback)(a=>{h(()=>f.push(`/feature/${a}`))},[f,h]),[l,m]=(0,c.useState)(!1),[n,o]=(0,c.useState)(!1),[p,q]=(0,c.useState)(!1),r=(0,c.useCallback)(async()=>{if(!l){if(i.reactFileManager)return void q(!0);m(!0);try{let a=await (0,a7.pickFolder)();a&&window.dispatchEvent(new CustomEvent("shipit-ai:add-repository",{detail:{path:a}}))}catch{q(!0)}finally{m(!1)}}},[l,i.reactFileManager]);(0,c.useEffect)(()=>{let a=()=>{r()};return window.addEventListener("shipit-ai:pick-folder",a),()=>window.removeEventListener("shipit-ai:pick-folder",a)},[r]),(0,c.useEffect)(()=>{let a=()=>o(!0);return window.addEventListener("shipit-ai:open-github-import",a),()=>window.removeEventListener("shipit-ai:open-github-import",a)},[]);let s=(0,c.useCallback)(a=>{a&&window.dispatchEvent(new CustomEvent("shipit-ai:add-repository",{detail:{path:a}})),q(!1)},[]),t=(0,c.useCallback)(a=>{a.path&&window.dispatchEvent(new CustomEvent("shipit-ai:add-repository",{detail:{path:a.path}}))},[]);return(0,b.jsxs)(g.SidebarProvider,{defaultOpen:e??!1,children:[(0,b.jsx)(aT,{features:j,featureFlags:i,onFeatureClick:k}),(0,b.jsx)(g.SidebarInset,{children:(0,b.jsxs)("div",{className:"relative h-full",children:[(0,b.jsx)("main",{className:"h-full",children:a}),(0,b.jsx)(a5,{}),i.githubImport?(0,b.jsx)(bq,{open:n,onOpenChange:o,onImportComplete:t}):null]})}),(0,b.jsx)(aU.ReactFileManagerDialog,{open:p,onOpenChange:a=>{a||q(!1)},onSelect:s})]})}function bA({children:a}){return(0,b.jsx)(a1.TurnStatusesProvider,{children:a})}a.s(["AppShell",0,function({children:a,sidebarOpen:c}){let{i18n:d}=(0,e.useTranslation)(),g=d.dir();return(0,b.jsx)(f.Direction.Provider,{dir:g,children:(0,b.jsx)(br.AgentEventsProvider,{children:(0,b.jsx)(bs.DrawerCloseGuardProvider,{children:(0,b.jsx)(bt.SidebarFeaturesProvider,{children:(0,b.jsx)(bA,{children:(0,b.jsx)(bz,{sidebarOpen:c,children:a})})})})})})}],66560)},73301,a=>{"use strict";var b=a.i(53083),c=a.i(52313);a.s(["Toaster",0,({...a})=>(0,b.jsx)(c.Toaster,{className:"toaster group",toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground",actionButton:"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",cancelButton:"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"}},...a})])},41835,a=>{"use strict";var b=a.i(53083),c=a.i(87648),d=a.i(71664),e=a.i(5303),f=a.i(70245),g=class extends f.Subscribable{constructor(a={}){super(),this.config=a,this.#a=new Map}#a;build(a,b,e){let f=b.queryKey,g=b.queryHash??(0,c.hashQueryKeyByOptions)(f,b),h=this.get(g);return h||(h=new d.Query({client:a,queryKey:f,queryHash:g,options:a.defaultQueryOptions(b),state:e,defaultOptions:a.getQueryDefaults(f)}),this.add(h)),h}add(a){this.#a.has(a.queryHash)||(this.#a.set(a.queryHash,a),this.notify({type:"added",query:a}))}remove(a){let b=this.#a.get(a.queryHash);b&&(a.destroy(),b===a&&this.#a.delete(a.queryHash),this.notify({type:"removed",query:a}))}clear(){e.notifyManager.batch(()=>{this.getAll().forEach(a=>{this.remove(a)})})}get(a){return this.#a.get(a)}getAll(){return[...this.#a.values()]}find(a){let b={exact:!0,...a};return this.getAll().find(a=>(0,c.matchQuery)(b,a))}findAll(a={}){let b=this.getAll();return Object.keys(a).length>0?b.filter(b=>(0,c.matchQuery)(a,b)):b}notify(a){e.notifyManager.batch(()=>{this.listeners.forEach(b=>{b(a)})})}onFocus(){e.notifyManager.batch(()=>{this.getAll().forEach(a=>{a.onFocus()})})}onOnline(){e.notifyManager.batch(()=>{this.getAll().forEach(a=>{a.onOnline()})})}},h=a.i(30970),i=f,j=class extends i.Subscribable{constructor(a={}){super(),this.config=a,this.#b=new Set,this.#c=new Map,this.#d=0}#b;#c;#d;build(a,b,c){let d=new h.Mutation({client:a,mutationCache:this,mutationId:++this.#d,options:a.defaultMutationOptions(b),state:c});return this.add(d),d}add(a){this.#b.add(a);let b=k(a);if("string"==typeof b){let c=this.#c.get(b);c?c.push(a):this.#c.set(b,[a])}this.notify({type:"added",mutation:a})}remove(a){if(this.#b.delete(a)){let b=k(a);if("string"==typeof b){let c=this.#c.get(b);if(c)if(c.length>1){let b=c.indexOf(a);-1!==b&&c.splice(b,1)}else c[0]===a&&this.#c.delete(b)}}this.notify({type:"removed",mutation:a})}canRun(a){let b=k(a);if("string"!=typeof b)return!0;{let c=this.#c.get(b),d=c?.find(a=>"pending"===a.state.status);return!d||d===a}}runNext(a){let b=k(a);if("string"!=typeof b)return Promise.resolve();{let c=this.#c.get(b)?.find(b=>b!==a&&b.state.isPaused);return c?.continue()??Promise.resolve()}}clear(){e.notifyManager.batch(()=>{this.#b.forEach(a=>{this.notify({type:"removed",mutation:a})}),this.#b.clear(),this.#c.clear()})}getAll(){return Array.from(this.#b)}find(a){let b={exact:!0,...a};return this.getAll().find(a=>(0,c.matchMutation)(b,a))}findAll(a={}){return this.getAll().filter(b=>(0,c.matchMutation)(a,b))}notify(a){e.notifyManager.batch(()=>{this.listeners.forEach(b=>{b(a)})})}resumePausedMutations(){let a=this.getAll().filter(a=>a.state.isPaused);return e.notifyManager.batch(()=>Promise.all(a.map(a=>a.continue().catch(c.noop))))}};function k(a){return a.options.scope?.id}var l=a.i(73788),m=a.i(64538);function n(a){return{onFetch:(b,d)=>{let e=b.options,f=b.fetchOptions?.meta?.fetchMore?.direction,g=b.state.data?.pages||[],h=b.state.data?.pageParams||[],i={pages:[],pageParams:[]},j=0,k=async()=>{let d=!1,k=(0,c.ensureQueryFn)(b.options,b.fetchOptions),l=async(a,e,f)=>{let g;if(d)return Promise.reject();if(null==e&&a.pages.length)return Promise.resolve(a);let h=(g={client:b.client,queryKey:b.queryKey,pageParam:e,direction:f?"backward":"forward",meta:b.options.meta},(0,c.addConsumeAwareSignal)(g,()=>b.signal,()=>d=!0),g),i=await k(h),{maxPages:j}=b.options,l=f?c.addToStart:c.addToEnd;return{pages:l(a.pages,i,j),pageParams:l(a.pageParams,e,j)}};if(f&&g.length){let a="backward"===f,b={pages:g,pageParams:h},c=(a?function(a,{pages:b,pageParams:c}){return b.length>0?a.getPreviousPageParam?.(b[0],b,c[0],c):void 0}:o)(e,b);i=await l(b,c,a)}else{let b=a??g.length;do{let a=0===j?h[0]??e.initialPageParam:o(e,i);if(j>0&&null==a)break;i=await l(i,a),j++}while(j<b)}return i};b.options.persister?b.fetchFn=()=>b.options.persister?.(k,{client:b.client,queryKey:b.queryKey,meta:b.options.meta,signal:b.signal},d):b.fetchFn=k}}}function o(a,{pages:b,pageParams:c}){let d=b.length-1;return b.length>0?a.getNextPageParam(b[d],b,c[d],c):void 0}var p=class{#e;#f;#g;#h;#i;#j;#k;#l;constructor(a={}){this.#e=a.queryCache||new g,this.#f=a.mutationCache||new j,this.#g=a.defaultOptions||{},this.#h=new Map,this.#i=new Map,this.#j=0}mount(){this.#j++,1===this.#j&&(this.#k=l.focusManager.subscribe(async a=>{a&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#l=m.onlineManager.subscribe(async a=>{a&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#j--,0===this.#j&&(this.#k?.(),this.#k=void 0,this.#l?.(),this.#l=void 0)}isFetching(a){return this.#e.findAll({...a,fetchStatus:"fetching"}).length}isMutating(a){return this.#f.findAll({...a,status:"pending"}).length}getQueryData(a){let b=this.defaultQueryOptions({queryKey:a});return this.#e.get(b.queryHash)?.state.data}ensureQueryData(a){let b=this.defaultQueryOptions(a),d=this.#e.build(this,b),e=d.state.data;return void 0===e?this.fetchQuery(a):(a.revalidateIfStale&&d.isStaleByTime((0,c.resolveStaleTime)(b.staleTime,d))&&this.prefetchQuery(b),Promise.resolve(e))}getQueriesData(a){return this.#e.findAll(a).map(({queryKey:a,state:b})=>[a,b.data])}setQueryData(a,b,d){let e=this.defaultQueryOptions({queryKey:a}),f=this.#e.get(e.queryHash),g=f?.state.data,h=(0,c.functionalUpdate)(b,g);if(void 0!==h)return this.#e.build(this,e).setData(h,{...d,manual:!0})}setQueriesData(a,b,c){return e.notifyManager.batch(()=>this.#e.findAll(a).map(({queryKey:a})=>[a,this.setQueryData(a,b,c)]))}getQueryState(a){let b=this.defaultQueryOptions({queryKey:a});return this.#e.get(b.queryHash)?.state}removeQueries(a){let b=this.#e;e.notifyManager.batch(()=>{b.findAll(a).forEach(a=>{b.remove(a)})})}resetQueries(a,b){let c=this.#e;return e.notifyManager.batch(()=>(c.findAll(a).forEach(a=>{a.reset()}),this.refetchQueries({type:"active",...a},b)))}cancelQueries(a,b={}){let d={revert:!0,...b};return Promise.all(e.notifyManager.batch(()=>this.#e.findAll(a).map(a=>a.cancel(d)))).then(c.noop).catch(c.noop)}invalidateQueries(a,b={}){return e.notifyManager.batch(()=>(this.#e.findAll(a).forEach(a=>{a.invalidate()}),a?.refetchType==="none")?Promise.resolve():this.refetchQueries({...a,type:a?.refetchType??a?.type??"active"},b))}refetchQueries(a,b={}){let d={...b,cancelRefetch:b.cancelRefetch??!0};return Promise.all(e.notifyManager.batch(()=>this.#e.findAll(a).filter(a=>!a.isDisabled()&&!a.isStatic()).map(a=>{let b=a.fetch(void 0,d);return d.throwOnError||(b=b.catch(c.noop)),"paused"===a.state.fetchStatus?Promise.resolve():b}))).then(c.noop)}fetchQuery(a){let b=this.defaultQueryOptions(a);void 0===b.retry&&(b.retry=!1);let d=this.#e.build(this,b);return d.isStaleByTime((0,c.resolveStaleTime)(b.staleTime,d))?d.fetch(b):Promise.resolve(d.state.data)}prefetchQuery(a){return this.fetchQuery(a).then(c.noop).catch(c.noop)}fetchInfiniteQuery(a){return a.behavior=n(a.pages),this.fetchQuery(a)}prefetchInfiniteQuery(a){return this.fetchInfiniteQuery(a).then(c.noop).catch(c.noop)}ensureInfiniteQueryData(a){return a.behavior=n(a.pages),this.ensureQueryData(a)}resumePausedMutations(){return m.onlineManager.isOnline()?this.#f.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#f}getDefaultOptions(){return this.#g}setDefaultOptions(a){this.#g=a}setQueryDefaults(a,b){this.#h.set((0,c.hashKey)(a),{queryKey:a,defaultOptions:b})}getQueryDefaults(a){let b=[...this.#h.values()],d={};return b.forEach(b=>{(0,c.partialMatchKey)(a,b.queryKey)&&Object.assign(d,b.defaultOptions)}),d}setMutationDefaults(a,b){this.#i.set((0,c.hashKey)(a),{mutationKey:a,defaultOptions:b})}getMutationDefaults(a){let b=[...this.#i.values()],d={};return b.forEach(b=>{(0,c.partialMatchKey)(a,b.mutationKey)&&Object.assign(d,b.defaultOptions)}),d}defaultQueryOptions(a){if(a._defaulted)return a;let b={...this.#g.queries,...this.getQueryDefaults(a.queryKey),...a,_defaulted:!0};return b.queryHash||(b.queryHash=(0,c.hashQueryKeyByOptions)(b.queryKey,b)),void 0===b.refetchOnReconnect&&(b.refetchOnReconnect="always"!==b.networkMode),void 0===b.throwOnError&&(b.throwOnError=!!b.suspense),!b.networkMode&&b.persister&&(b.networkMode="offlineFirst"),b.queryFn===c.skipToken&&(b.enabled=!1),b}defaultMutationOptions(a){return a?._defaulted?a:{...this.#g.mutations,...a?.mutationKey&&this.getMutationDefaults(a.mutationKey),...a,_defaulted:!0}}clear(){this.#e.clear(),this.#f.clear()}},q=a.i(81130),r=a.i(11321);a.s(["QueryProvider",0,function({children:a}){let[c]=(0,r.useState)(()=>new p({defaultOptions:{queries:{staleTime:1e3,refetchOnWindowFocus:!1}}}));return(0,b.jsx)(q.QueryClientProvider,{client:c,children:a})}],41835)},36099,(a,b,c)=>{b.exports={errors:{notFound:"Not found",unauthorized:"Unauthorized",forbidden:"Forbidden",internal:"Internal error",unknown:"An unknown error occurred",failedToLoad:"Failed to load {{resource}}",failedToSave:"Failed to save {{resource}}"},labels:{save:"Save",cancel:"Cancel",confirm:"Confirm",delete:"Delete",edit:"Edit",close:"Close",back:"Back",next:"Next",yes:"Yes",no:"No",enabled:"Enabled",disabled:"Disabled",loading:"Loading...",saving:"Saving...",saved:"Saved",none:"None",default:"Default",custom:"Custom"},status:{success:"Success",error:"Error",warning:"Warning",info:"Info",pending:"Pending",inProgress:"In Progress",completed:"Completed",failed:"Failed"},confirmation:{areYouSure:"Are you sure?",cannotBeUndone:"This action cannot be undone."},language:{en:"English",ru:"Russian",pt:"Portuguese",es:"Spanish",ar:"Arabic",he:"Hebrew",fr:"French",de:"German"}}},94214,(a,b,c)=>{b.exports=JSON.parse('{"settings":{"title":"Settings","saving":"Saving...","saved":"Saved","failedToSave":"Failed to save settings","sections":{"language":"Language","agent":"Agent","environment":"Environment","workflow":"Workflow","ci":"CI","timeouts":"Timeouts","notifications":"Notifications","flags":"Flags","chat":"Chat","layout":"Layout","database":"Database"},"language":{"title":"Language","description":"Choose your preferred display language","label":"Display Language","placeholder":"Select a language","failedToSave":"Failed to save language settings"},"agent":{"title":"Preferred Agent","sectionTitle":"Agent","description":"Choose your AI coding agent and authentication method","sectionDescription":"AI coding agent and authentication","agentType":"Agent Type","agentAndModel":"Agent & Model","agentAndModelDescription":"Provider and model for all operations","authMethod":"Authentication Method","apiToken":"API Token","apiTokenPlaceholder":"Enter your API token","apiTokenHelper":"Saves automatically when you leave the field","failedToSave":"Failed to save agent settings","hint":"Choose which AI coding agent powers your features. Each agent supports different models and capabilities. Authentication is resolved automatically via your active session.","links":{"agentSystem":"Agent system","addingAgents":"Adding agents","configurationGuide":"Configuration guide"}},"environment":{"title":"IDE & Terminal","sectionTitle":"Environment","description":"Configure your default editor, shell, and terminal preferences","sectionDescription":"Editor, shell, and terminal preferences","defaultEditor":"Default Editor","defaultEditorDescription":"Editor launched for file operations","shellPreference":"Shell Preference","shell":"Shell","shellDescription":"Default shell for generated scripts","terminalEmulator":"Terminal Emulator","terminal":"Terminal","terminalDescription":"Terminal emulator for shell sessions","systemTerminal":"System Terminal","installed":"Installed","notInstalled":"Not Installed","failedToSave":"Failed to save IDE & Terminal settings","hint":"Your preferred editor opens files for review. The shell setting controls generated scripts. The terminal emulator is launched when opening shell sessions from the web UI.","links":{"configurationGuide":"Configuration guide"}},"workflow":{"title":"Workflow","description":"Configure PR behavior, approval gates, and CI settings","sectionDescription":"Automation behavior after implementation","defaultFastMode":"Fast mode by default","defaultFastModeDescription":"Skip SDLC phases and implement directly from prompt","subsections":{"approve":"Approve","evidence":"Evidence","git":"Git"},"autoApprovePrd":"Auto-approve PRD","autoApprovePrdDescription":"Skip manual review of requirements","autoApprovePlan":"Auto-approve Plan","autoApprovePlanDescription":"Skip manual review of implementation plan","autoApproveMerge":"Auto-approve Merge","autoApproveMergeDescription":"Merge without manual review","collectEvidence":"Collect evidence","collectEvidenceDescription":"Capture screenshots and artifacts after implementation","addEvidenceToPr":"Add evidence to PR","addEvidenceToPrDescription":"Include evidence in the pull request body","pushOnComplete":"Push on complete","pushOnCompleteDescription":"Push to remote when implementation finishes","openPrOnComplete":"Open PR on complete","openPrOnCompleteDescription":"Create a pull request when done","watchCiAfterPush":"Watch CI after push","watchCiAfterPushDescription":"Monitor CI and auto-fix failures. Disable to avoid rate limits.","approvalGates":"Approval Gates","prdAutoApproval":"PRD auto-approval","planAutoApproval":"Plan auto-approval","mergeAutoApproval":"Merge auto-approval","ciSettings":"CI Settings","ciWatchFixLoop":"CI watch/fix loop","maxFixAttempts":"Max fix attempts","watchTimeout":"Watch timeout (seconds)","maxLogCharacters":"Max log characters","pollInterval":"Poll interval (seconds)","hideCiStatus":"Hide CI Status","stageTimeouts":"Stage Timeouts","failedToSave":"Failed to save workflow settings","hint":"Control how autonomous each feature run is. Auto-approve skips the human review pause at each phase. Push and PR options control what happens after successful implementation.","links":{"approvalGates":"Approval gates","pushAndPrFlags":"Push & PR flags"}},"ci":{"title":"Continuous Integration","description":"Limits and timeouts for CI monitoring","maxFixAttempts":"Max fix attempts","maxFixAttemptsDescription":"Agent retries on failing CI","watchTimeout":"Watch timeout","watchTimeoutDescription":"Max wait for CI completion","maxLogSize":"Max log size","maxLogSizeDescription":"Truncate CI logs beyond this limit","pollInterval":"Poll interval","pollIntervalDescription":"How often to check GitHub for CI status updates","hideCiStatus":"Hide CI status","hideCiStatusDescription":"Hide CI status badges from feature drawer and merge review","hint":"When a feature completes, the agent can watch CI and auto-fix failures. These limits prevent runaway retries and control how much log output is sent to the agent for analysis.","links":{"cicdPipeline":"CI/CD pipeline","ciSecurityGates":"CI security gates"}},"stageTimeouts":{"title":"Stage Timeouts","description":"Maximum execution time per agent stage","subsections":{"featureAgent":"Feature Agent","analyzeRepoAgent":"Analyze Repository Agent"},"analyze":"Analyze","analyzeDescription":"Repository analysis timeout","requirements":"Requirements","requirementsDescription":"Requirements gathering timeout","research":"Research","researchDescription":"Technical research timeout","plan":"Plan","planDescription":"Implementation planning timeout","implement":"Implement","implementDescription":"Code implementation timeout","merge":"Merge","mergeDescription":"PR creation and merge timeout","hint":"Each agent has independently configurable stage timeouts. When a stage exceeds its timeout, the agent is terminated. Longer timeouts are useful for complex implementations. Feature agent defaults to 30 minutes per stage. Analyze repository agent defaults to 10 minutes."},"notifications":{"title":"Notifications","description":"Configure notification channels and event preferences","sectionDescription":"How and when you get notified","channels":"Channels","inApp":"In-App","inAppLabel":"In-app","inAppDescription":"Notifications inside the ShipIT AI UI","subsections":{"agentEvents":"Agent Events","pullRequestEvents":"Pull Request Events"},"events":{"agentStarted":"Agent started","phaseCompleted":"Phase completed","waitingApproval":"Waiting approval","agentCompleted":"Agent completed","agentFailed":"Agent failed","mergeReviewReady":"Merge review ready","prMerged":"PR merged","prClosed":"PR closed","prChecksPassed":"PR checks passed","prChecksFailed":"PR checks failed","prBlocked":"PR blocked"},"failedToSave":"Failed to save notification settings","hint":"In-app toast notifications keep you in the loop. Fine-tune which agent lifecycle events trigger a notification.","links":{"notificationSystem":"Notification system"}},"featureFlags":{"title":"Feature Flags","description":"Toggle experimental and beta features","sectionDescription":"Enable or disable experimental features","badge":"Experimental","skills":"Skills","skillsDescription":"Enable the skills system for agent capabilities","deployments":"Deployments","deploymentsDescription":"Enable environment deployment workflows","debug":"Debug","debugDescription":"Show debug panels and verbose logging","githubImport":"GitHub Import","githubImportDescription":"Enable GitHub repository import in the web UI","adoptBranch":"Adopt Branch","adoptBranchDescription":"Import existing branches as tracked features","gitRebaseSync":"Git Rebase & Sync","gitRebaseSyncDescription":"Enable git rebase-on-main and sync-main operations","reactFileManager":"React File Manager","reactFileManagerDescription":"Use the built-in React file manager instead of the native OS folder picker","hint":"Experimental features that are still under development. Enable at your own risk — they may change or be removed in future versions. Debug mode adds verbose logging useful for troubleshooting."},"interactiveAgent":{"title":"Interactive Agent","description":"Chat tab settings for per-feature interactive agent sessions","enableChatTab":"Enable Chat tab","enableChatTabDescription":"Show the Chat tab on all feature detail pages","autoTimeout":"Auto-timeout","autoTimeoutDescription":"Minutes of inactivity before the agent is stopped automatically (1–120)","maxConcurrentSessions":"Max concurrent sessions","maxConcurrentSessionsDescription":"Maximum number of active interactive agent sessions at once (1–10)","hint":"The Chat tab spawns a persistent agent process per feature. Auto-timeout stops idle sessions automatically to conserve resources. The concurrent session cap prevents runaway resource usage on developer machines."},"fabLayout":{"title":"Layout","description":"Control the position of floating action buttons in the control center","swapPosition":"Swap FAB positions","swapPositionDescription":"Move the Chat button to the left and the Create button to the right","hint":"The two floating action buttons (Create and Chat) sit in the bottom corners of the control center. Enable this toggle to swap their positions."},"database":{"title":"Database","description":"Database path and management","sectionDescription":"Local storage information","location":"Location","locationDescription":"Path to the local SQLite database","size":"Size","hint":"All settings are stored in a local SQLite database at ~/.shipit-ai/data. The database uses a singleton record pattern with automatic migrations on startup.","links":{"settingsService":"Settings service","settingsSpec":"Settings spec"}}},"navigation":{"controlCenter":"Control Center","dashboard":"Dashboard","features":"Features","repositories":"Repositories","settings":"Settings","sessions":"Sessions","tools":"Tools","skills":"Skills"},"sidebar":{"features":"Features","switchToLight":"Light mode","switchToDark":"Dark mode","muteSounds":"Mute sounds","unmuteSounds":"Unmute sounds","statusActionNeeded":"Action Needed","statusInProgress":"In Progress","statusPending":"Pending","statusBlocked":"Blocked","statusError":"Error","statusDone":"Done"},"deleteFeature":{"title":"Delete feature?","description":"This will permanently delete <strong>{{featureName}}</strong> ({{featureId}}). This action cannot be undone.","cleanupLabel":"Clean up worktree and branches","deleteSubFeatures":"Delete sub-features","closePullRequest":"Close pull request","cancel":"Cancel","deleting":"Deleting…","delete":"Delete"},"rejectFeedback":{"defaultTitle":"Reject Requirements","defaultDescription":"Provide feedback for the agent to address in the next iteration. Feedback is required.","ariaLabel":"Rejection feedback","placeholder":"Describe what needs to change...","cancel":"Cancel","rejecting":"Rejecting…","confirmReject":"Confirm Reject"},"emptyState":{"addProject":"Add a project","addProjectDescription":"Add your project folder to unlock feature creation.","addProjectDescriptionLine2":"Describe what you need — ShipIT AI handles the rest.","checkingSetup":"Checking setup…","ready":"{{label}} ready","notInstalled":"{{label}} not installed","reCheck":"Re-check","needsAuth":"{{label}} needs authentication","open":"Open {{label}}","checking":"Checking {{label}}…","notFound":"{{label}} not found","docs":"Docs","opening":"Opening…","chooseFolder":"Choose a Folder","folderHint":"Any folder works — git will be initialized automatically if needed.","orUseCli":"or use the CLI","copyCommands":"Copy commands","git":"Git","gitRequired":"Required for all phases","githubCli":"GitHub CLI","githubCliRequired":"Required for pull requests"},"welcome":{"loadingAgents":"Loading agents…","chooseAgent":"Choose your agent","pickModel":"Pick a model","selectAgentSubtitle":"Select the AI coding agent you want ShipIT AI to use.","chooseModelSubtitle":"Choose which {{label}} model to run.","ghCliNotice":"<0>GitHub CLI (gh)</0> is required for full CI/CD self-healing capabilities. <1>Install it here</1>.","ghCliRequired":"GitHub CLI (gh)","ghCliRequiredText":"is required for full CI/CD self-healing capabilities.","installHere":"Install it here","back":"Back"},"canvas":{"noFeatures":"No features yet","noFeaturesDescription":"Get started by creating your first feature.","newFeature":"New Feature","hideArchived":"Hide archived","showArchived":"Show archived","hideArchivedLabel":"Hide Archived","showArchivedLabel":"Show Archived","zoomOut":"Zoom out","zoomIn":"Zoom in","fitView":"Fit view","resetView":"Reset view"},"common":{"noData":"No data available","retry":"Retry","saving":"Saving...","saved":"Saved","decrease":"Decrease","increase":"Increase","cancel":"Cancel"},"featureNode":{"archiveFeature":"Archive feature","deleteFeature":"Delete feature","unarchiveFeature":"Unarchive feature","archiveConfirmTitle":"Archive feature?","archiveConfirmDescription":"<strong>{{name}}</strong> will be hidden from the canvas. You can unarchive it later to restore it.","cancel":"Cancel","archive":"Archive","fastMode":"Fast Mode","specDriven":"Spec Driven","copied":"Copied!","chatWithAgent":"Chat with agent","stopDevServer":"Stop Dev Server","startDevServer":"Start Dev Server","retryDevServer":"Retry Dev Server","starting":"Starting…","retry":"Retry","start":"Start","failed":"Failed","deleting":"Deleting…","addFeature":"Add feature","reviewRequirements":"Review Requirements","reviewTechnicalPlan":"Review Technical Plan","reviewChanges":"Review Changes","review":"Review","creating":"Creating...","completedIn":"Completed in {{runtime}}","completed":"Completed","waitingOn":"Waiting on {{blockedBy}}","blocked":"Blocked","pending":"Pending","somethingWentWrong":"Something went wrong","openChat":"Open chat","viewSessions":"View sessions","sessionsActive":"Sessions (active)","sessions":"Sessions","agentSessions":"Agent Sessions","noSessionsFound":"No sessions found","showLess":"Show less","showMore":"Show {{count}} more"},"repositoryNode":{"removeRepository":"Remove repository","removeConfirmTitle":"Remove repository?","removeConfirmDescription":"This will remove <strong>{{name}}</strong> and all its features from your workspace. The repository files on disk won\'t be affected.","cancel":"Cancel","remove":"Remove","openInIde":"Open in IDE","openInShell":"Open in Shell","openFolder":"Open Folder","chatWithAgent":"Chat with agent","newFeature":"New feature","new":"New","behind":"{{count}} behind","notAGitRepository":"Not a git repository","starting":"Starting...","run":"Run","startLocalEnvironment":"start local environment","stopDevServer":"Stop Dev Server","startDevServer":"Start Dev Server","retry":"Retry"},"fab":{"closeActions":"Close actions","createNew":"Create new","newFeature":"New Feature","localFolder":"Local Folder","adoptBranch":"Adopt Branch","fromGithub":"From GitHub"},"chat":{"shipitAiChat":"ShipIT AI Chat","writeMessage":"Write a message...","attachFiles":"Attach files","forceStopAgent":"Force stop agent process","stop":"Stop","clearChatHistory":"Clear chat history","clear":"Clear","noSession":"No session","yourMessage":"Your message","agentMessage":"Agent message","agentIsTyping":"Agent is typing","showMore":"Show more","showLess":"Show less","code":"Code","preview":"Preview","openFullscreen":"Open fullscreen","htmlPreview":"HTML Preview","htmlPreviewFullscreen":"HTML Preview Fullscreen"},"createDrawer":{"title":"NEW FEATURE","creating":"Creating...","cancel":"Cancel","createFeature":"+ Create Feature","repository":"REPOSITORY","describeFeature":"DESCRIBE YOUR FEATURE","featurePlaceholder":"e.g. Add GitHub OAuth login with callback handling and token refresh...","parentFeature":"PARENT FEATURE","selectParent":"Select parent feature...","searchFeatures":"Search features...","noParent":"No parent","noFeaturesFound":"No features found.","searchRepositories":"Search repositories...","approve":"APPROVE","approveDescription":"Auto-approve phase transitions without manual review.","skippedInFastMode":"Skipped in Fast Mode","all":"All","toggleAllApprovalGates":"Toggle all approval gates","evidence":"EVIDENCE","evidenceDescription":"Collect and attach evidence after implementation.","collect":"Collect","collectDescription":"Capture screenshots and artifacts after implementation.","addToPr":"Add to PR","requiresPr":"Requires PR to be enabled","requiresEvidence":"Requires evidence collection to be enabled","addToPrDescription":"Include evidence in the pull request body.","git":"GIT","push":"Push","pushDescription":"Push branch to remote after implementation.","pr":"PR","prDescription":"Open a pull request after pushing.","watch":"Watch","watchDescription":"Watch CI and auto-fix after push.","sync":"Sync","syncDescription":"Pull latest main from remote before creating the feature branch.","commitSpecs":"Commit Specs","commitSpecsDescription":"Commit specs to repository.","forkAndPr":"Fork & PR","forkAndPrDescription":"Contribute via fork (PR to upstream).","pendingMode":"Pending","pendingModeDescription":"Create without starting — start manually later.","fastModeLabel":"Fast Mode","fastModeDescription":"Skip SDLC phases and implement directly from your prompt.","fileDropZone":"File drop zone","prd":"PRD","prdDescription":"Auto-approve requirements move to planning.","plan":"Plan","planDescription":"Auto-approve planning move to implementation.","merge":"Merge","mergeDescription":"Auto-approve merge move to Done."},"featureDrawer":{"copyFeatureId":"Copy feature ID","unarchiveFeature":"Unarchive feature","archiveFeature":"Archive feature","deleteFeature":"Delete feature","stopDevServer":"Stop Dev Server","startDevServer":"Start Dev Server","failedToReject":"Failed to reject {{label}}","rejected":"{{label}} rejected — agent re-iterating (iteration {{n}})","excessiveIterations":"Iteration {{n}} — consider approving or adjusting feedback to avoid excessive iterations","failedToApprove":"Failed to approve {{label}}","approved":"{{label}} approved — agent resuming","failedToApproveRequirements":"Failed to approve requirements","requirementsApproved":"Requirements approved — agent resuming","featureResumed":"Feature resumed — agent restarting","featureStarted":"Feature started","approvePlan":"Approve Plan","sendRevisionFeedback":"Send revision feedback"},"overviewTab":{"created":"Created","runtime":"Runtime","runningFor":"Running for","blockedBy":"Blocked by","error":"Error","prd":"PRD","plan":"Plan","merge":"Merge","collect":"Collect","addToPr":"Add to PR","push":"Push","pr":"PR","watch":"Watch","commitSpecs":"Commit Specs","forkAndPr":"Fork & PR"},"activityTab":{"copyPromptToClipboard":"Copy prompt to clipboard","execution":"Execution","wait":"Wait","cost":"Cost","noActivityRecorded":"No activity recorded yet"},"logTab":{"structuredView":"Structured view","rawView":"Raw view","noLogOutput":"No log output yet"},"planTab":{"noPlanCreated":"No plan created yet"},"branchSyncStatus":{"refreshSyncStatus":"Refresh sync status","rebaseOnMain":"Rebase on Main"},"drawerActionBar":{"fileDropZone":"File drop zone","askAiToRevise":"Ask AI to revise...","attachFiles":"Attach files","reject":"Reject","sendRevisionFeedback":"Send revision feedback","approve":"Approve","fileTooLarge":"\\"{{name}}\\" exceeds 10 MB limit","fileTypeNotAllowed":"File type \\"{{ext}}\\" is not allowed","uploadFailed":"Upload failed"},"taskProgress":{"done":"Done","inProgress":"In Progress","review":"Review","todo":"Todo","noTasksDefined":"No tasks defined yet"},"repositoryDrawer":{"openInIde":"Open in IDE","openInShell":"Open in Shell","openFolder":"Open Folder","syncMain":"Sync Main"},"adoptBranch":{"failedToAdopt":"Failed to adopt branch","repository":"Repository","branchName":"Branch name","searchRepositories":"Search repositories...","searchBranches":"Search branches..."},"githubImport":{"title":"Import from GitHub","description":"Clone a GitHub repository and add it to ShipIT AI.","githubUrl":"GitHub URL","urlPlaceholder":"owner/repo or https://github.com/owner/repo","searchRepositories":"Search repositories..."},"versionBadge":{"version":"Version","branch":"Branch","commit":"Commit","path":"Path"},"mergeReview":{"download":"Download","dataUnavailable":"Merge review data unavailable"},"baseDrawer":{"close":"Close","stopDevServer":"Stop Dev Server","startDevServer":"Start Dev Server"},"addRepository":{"addRepository":"Add Repository"},"modelPicker":{"searchPlaceholder":"Search or type a model ID…"},"skills":{"searchPlaceholder":"Search skills..."},"tools":{"noCategoryTools":"No tools in this category."},"accessibility":{"close":"Close","loading":"Loading","send":"Send","imageNotes":"Image notes","viewServerLogs":"View server logs","toggleSidebar":"Toggle Sidebar"}}')},86355,(a,b,c)=>{b.exports={errors:{notFound:"Не найдено",unauthorized:"Не авторизован",forbidden:"Доступ запрещён",internal:"Внутренняя ошибка",unknown:"Произошла неизвестная ошибка",failedToLoad:"Не удалось загрузить {{resource}}",failedToSave:"Не удалось сохранить {{resource}}"},labels:{save:"Сохранить",cancel:"Отмена",confirm:"Подтвердить",delete:"Удалить",edit:"Редактировать",close:"Закрыть",back:"Назад",next:"Далее",yes:"Да",no:"Нет",enabled:"Включено",disabled:"Отключено",loading:"Загрузка...",saving:"Сохранение...",saved:"Сохранено",none:"Нет",default:"По умолчанию",custom:"Пользовательский"},status:{success:"Успешно",error:"Ошибка",warning:"Предупреждение",info:"Информация",pending:"Ожидание",inProgress:"В процессе",completed:"Завершено",failed:"Не удалось"},confirmation:{areYouSure:"Вы уверены?",cannotBeUndone:"Это действие нельзя отменить."},language:{en:"Английский",ru:"Русский",pt:"Португальский",es:"Испанский",ar:"Арабский",he:"Иврит",fr:"Французский",de:"Немецкий"}}},75861,(a,b,c)=>{b.exports=JSON.parse('{"settings":{"title":"Настройки","saving":"Сохранение...","saved":"Сохранено","failedToSave":"Не удалось сохранить настройки","sections":{"language":"Язык","agent":"Агент","environment":"Окружение","workflow":"Рабочий процесс","ci":"CI","timeouts":"Таймауты","notifications":"Уведомления","flags":"Флаги","chat":"Чат","layout":"Расположение","database":"База данных"},"language":{"title":"Язык","description":"Выберите предпочитаемый язык интерфейса","label":"Язык интерфейса","placeholder":"Выберите язык","failedToSave":"Не удалось сохранить настройки языка"},"agent":{"title":"Предпочитаемый агент","sectionTitle":"Агент","description":"Выберите AI-агента для кодирования и метод аутентификации","sectionDescription":"AI-агент для кодирования и аутентификация","agentType":"Тип агента","agentAndModel":"Агент и модель","agentAndModelDescription":"Провайдер и модель для всех операций","authMethod":"Метод аутентификации","apiToken":"API-токен","apiTokenPlaceholder":"Введите ваш API-токен","apiTokenHelper":"Сохраняется автоматически при выходе из поля","failedToSave":"Не удалось сохранить настройки агента","hint":"Выберите, какой AI-агент для кодирования будет использоваться для ваших функций. Каждый агент поддерживает разные модели и возможности. Аутентификация разрешается автоматически через вашу активную сессию.","links":{"agentSystem":"Система агентов","addingAgents":"Добавление агентов","configurationGuide":"Руководство по настройке"}},"environment":{"title":"IDE и терминал","sectionTitle":"Окружение","description":"Настройте редактор по умолчанию, оболочку и параметры терминала","sectionDescription":"Редактор, оболочка и параметры терминала","defaultEditor":"Редактор по умолчанию","defaultEditorDescription":"Редактор для операций с файлами","shellPreference":"Предпочитаемая оболочка","shell":"Оболочка","shellDescription":"Оболочка по умолчанию для сгенерированных скриптов","terminalEmulator":"Эмулятор терминала","terminal":"Терминал","terminalDescription":"Эмулятор терминала для сессий оболочки","systemTerminal":"Системный терминал","installed":"Установлено","notInstalled":"Не установлено","failedToSave":"Не удалось сохранить настройки IDE и терминала","hint":"Ваш предпочитаемый редактор открывает файлы для проверки. Настройка оболочки управляет сгенерированными скриптами. Эмулятор терминала запускается при открытии сессий оболочки из веб-интерфейса.","links":{"configurationGuide":"Руководство по настройке"}},"workflow":{"title":"Рабочий процесс","description":"Настройте поведение PR, этапы одобрения и параметры CI","sectionDescription":"Поведение автоматизации после реализации","defaultFastMode":"Быстрый режим по умолчанию","defaultFastModeDescription":"Пропустить фазы SDLC и реализовать напрямую из промпта","subsections":{"approve":"Одобрение","evidence":"Подтверждение","git":"Git"},"autoApprovePrd":"Автоодобрение PRD","autoApprovePrdDescription":"Пропустить ручную проверку требований","autoApprovePlan":"Автоодобрение плана","autoApprovePlanDescription":"Пропустить ручную проверку плана реализации","autoApproveMerge":"Автоодобрение слияния","autoApproveMergeDescription":"Сливать без ручной проверки","collectEvidence":"Сбор подтверждений","collectEvidenceDescription":"Делать скриншоты и сохранять артефакты после реализации","addEvidenceToPr":"Добавить подтверждения в PR","addEvidenceToPrDescription":"Включить подтверждения в тело запроса на слияние","pushOnComplete":"Отправить по завершении","pushOnCompleteDescription":"Отправить на удалённый сервер после завершения реализации","openPrOnComplete":"Открыть PR по завершении","openPrOnCompleteDescription":"Создать запрос на слияние по готовности","watchCiAfterPush":"Следить за CI после отправки","watchCiAfterPushDescription":"Отслеживать CI и автоматически исправлять ошибки. Отключите для избежания превышения лимитов.","approvalGates":"Этапы одобрения","prdAutoApproval":"Автоодобрение PRD","planAutoApproval":"Автоодобрение плана","mergeAutoApproval":"Автоодобрение слияния","ciSettings":"Настройки CI","ciWatchFixLoop":"Цикл наблюдения/исправления CI","maxFixAttempts":"Максимум попыток исправления","watchTimeout":"Таймаут наблюдения (секунды)","maxLogCharacters":"Максимум символов журнала","pollInterval":"Интервал опроса (секунды)","hideCiStatus":"Скрыть статус CI","stageTimeouts":"Таймауты этапов","failedToSave":"Не удалось сохранить настройки рабочего процесса","hint":"Управляйте степенью автономности каждого запуска функции. Автоодобрение пропускает паузу для ручной проверки на каждой фазе. Параметры отправки и PR определяют действия после успешной реализации.","links":{"approvalGates":"Этапы одобрения","pushAndPrFlags":"Флаги отправки и PR"}},"ci":{"title":"Непрерывная интеграция","description":"Лимиты и таймауты для мониторинга CI","maxFixAttempts":"Максимум попыток исправления","maxFixAttemptsDescription":"Повторные попытки агента при ошибках CI","watchTimeout":"Таймаут наблюдения","watchTimeoutDescription":"Максимальное ожидание завершения CI","maxLogSize":"Максимальный размер журнала","maxLogSizeDescription":"Обрезать журналы CI при превышении этого лимита","pollInterval":"Интервал опроса","pollIntervalDescription":"Частота проверки статуса CI на GitHub","hideCiStatus":"Скрыть статус CI","hideCiStatusDescription":"Скрыть значки статуса CI в панели функции и при проверке слияния","hint":"Когда функция завершается, агент может отслеживать CI и автоматически исправлять ошибки. Эти лимиты предотвращают бесконечные повторы и контролируют объём журналов, отправляемых агенту для анализа.","links":{"cicdPipeline":"Конвейер CI/CD","ciSecurityGates":"Этапы безопасности CI"}},"stageTimeouts":{"title":"Таймауты этапов","description":"Максимальное время выполнения на каждый этап агента","subsections":{"featureAgent":"Агент функции","analyzeRepoAgent":"Агент анализа репозитория"},"analyze":"Анализ","analyzeDescription":"Таймаут анализа репозитория","requirements":"Требования","requirementsDescription":"Таймаут сбора требований","research":"Исследование","researchDescription":"Таймаут технического исследования","plan":"План","planDescription":"Таймаут планирования реализации","implement":"Реализация","implementDescription":"Таймаут реализации кода","merge":"Слияние","mergeDescription":"Таймаут создания PR и слияния","hint":"Каждый агент имеет независимо настраиваемые таймауты этапов. При превышении таймаута агент завершается. Более длительные таймауты полезны для сложных реализаций. Агент функции по умолчанию использует 30 минут на этап. Агент анализа репозитория по умолчанию использует 10 минут."},"notifications":{"title":"Уведомления","description":"Настройте каналы уведомлений и предпочтения событий","sectionDescription":"Как и когда вы получаете уведомления","channels":"Каналы","inApp":"В приложении","inAppLabel":"В приложении","inAppDescription":"Уведомления внутри интерфейса ShipIT AI","subsections":{"agentEvents":"События агента","pullRequestEvents":"События запросов на слияние"},"events":{"agentStarted":"Агент запущен","phaseCompleted":"Фаза завершена","waitingApproval":"Ожидание одобрения","agentCompleted":"Агент завершил работу","agentFailed":"Ошибка агента","mergeReviewReady":"Проверка слияния готова","prMerged":"PR слит","prClosed":"PR закрыт","prChecksPassed":"Проверки PR пройдены","prChecksFailed":"Проверки PR не пройдены","prBlocked":"PR заблокирован"},"failedToSave":"Не удалось сохранить настройки уведомлений","hint":"Всплывающие уведомления в приложении держат вас в курсе. Тонко настройте, какие события жизненного цикла агента вызывают уведомление.","links":{"notificationSystem":"Система уведомлений"}},"featureFlags":{"title":"Флаги функций","description":"Включить или отключить экспериментальные и бета-функции","sectionDescription":"Включение или отключение экспериментальных функций","badge":"Экспериментальный","skills":"Навыки","skillsDescription":"Включить систему навыков для возможностей агента","deployments":"Развёртывания","deploymentsDescription":"Включить рабочие процессы развёртывания окружений","debug":"Отладка","debugDescription":"Показать панели отладки и подробное логирование","githubImport":"Импорт из GitHub","githubImportDescription":"Включить импорт репозиториев GitHub в веб-интерфейсе","adoptBranch":"Принять ветку","adoptBranchDescription":"Импортировать существующие ветки как отслеживаемые функции","gitRebaseSync":"Git Rebase и синхронизация","gitRebaseSyncDescription":"Включить операции git rebase-on-main и sync-main","reactFileManager":"Файловый менеджер React","reactFileManagerDescription":"Использовать встроенный файловый менеджер React вместо системного выбора папок","hint":"Экспериментальные функции, которые ещё находятся в разработке. Включайте на свой страх и риск — они могут измениться или быть удалены в будущих версиях. Режим отладки добавляет подробное логирование, полезное для устранения неполадок."},"interactiveAgent":{"title":"Интерактивный агент","description":"Настройки вкладки чата для интерактивных сессий агента по функциям","enableChatTab":"Включить вкладку чата","enableChatTabDescription":"Показать вкладку чата на всех страницах деталей функций","autoTimeout":"Автоматический таймаут","autoTimeoutDescription":"Минуты неактивности перед автоматической остановкой агента (1-120)","maxConcurrentSessions":"Максимум параллельных сессий","maxConcurrentSessionsDescription":"Максимальное количество активных интерактивных сессий агента одновременно (1-10)","hint":"Вкладка чата запускает постоянный процесс агента для каждой функции. Автоматический таймаут останавливает неактивные сессии для экономии ресурсов. Ограничение параллельных сессий предотвращает чрезмерное использование ресурсов на машинах разработчиков."},"fabLayout":{"title":"Расположение","description":"Управление положением плавающих кнопок действий в центре управления","swapPosition":"Поменять местами кнопки","swapPositionDescription":"Переместить кнопку чата влево, а кнопку создания вправо","hint":"Две плавающие кнопки действий (Создать и Чат) расположены в нижних углах центра управления. Включите эту опцию, чтобы поменять их местами."},"database":{"title":"База данных","description":"Путь к базе данных и управление","sectionDescription":"Информация о локальном хранилище","location":"Расположение","locationDescription":"Путь к локальной базе данных SQLite","size":"Размер","hint":"Все настройки хранятся в локальной базе данных SQLite по пути ~/.shipit-ai/data. База данных использует шаблон единственной записи с автоматическими миграциями при запуске.","links":{"settingsService":"Сервис настроек","settingsSpec":"Спецификация настроек"}}},"navigation":{"controlCenter":"Центр управления","dashboard":"Панель управления","features":"Функции","repositories":"Репозитории","settings":"Настройки","sessions":"Сессии","tools":"Инструменты","skills":"Навыки"},"sidebar":{"features":"Функции","switchToLight":"Светлая тема","switchToDark":"Тёмная тема","muteSounds":"Отключить звуки","unmuteSounds":"Включить звуки","statusActionNeeded":"Требуется действие","statusInProgress":"В процессе","statusPending":"Ожидание","statusBlocked":"Заблокировано","statusError":"Ошибка","statusDone":"Завершено"},"deleteFeature":{"title":"Удалить функцию?","description":"Это навсегда удалит <strong>{{featureName}}</strong> ({{featureId}}). Это действие нельзя отменить.","cleanupLabel":"Очистить рабочее дерево и ветки","deleteSubFeatures":"Удалить подфункции","closePullRequest":"Закрыть запрос на слияние","cancel":"Отмена","deleting":"Удаление…","delete":"Удалить"},"rejectFeedback":{"defaultTitle":"Отклонить требования","defaultDescription":"Предоставьте обратную связь для агента к следующей итерации. Обратная связь обязательна.","ariaLabel":"Обратная связь при отклонении","placeholder":"Опишите, что нужно изменить...","cancel":"Отмена","rejecting":"Отклонение…","confirmReject":"Подтвердить отклонение"},"emptyState":{"addProject":"Добавить проект","addProjectDescription":"Добавьте папку проекта для создания функций.","addProjectDescriptionLine2":"Опишите, что вам нужно — ShipIT AI сделает остальное.","checkingSetup":"Проверка настройки…","ready":"{{label}} готов","notInstalled":"{{label}} не установлен","reCheck":"Проверить снова","needsAuth":"{{label}} требует аутентификации","open":"Открыть {{label}}","checking":"Проверка {{label}}…","notFound":"{{label}} не найден","docs":"Документация","opening":"Открытие…","chooseFolder":"Выбрать папку","folderHint":"Подойдёт любая папка — git будет инициализирован автоматически при необходимости.","orUseCli":"или используйте CLI","copyCommands":"Копировать команды","git":"Git","gitRequired":"Необходим для всех фаз","githubCli":"GitHub CLI","githubCliRequired":"Необходим для запросов на слияние"},"welcome":{"loadingAgents":"Загрузка агентов…","chooseAgent":"Выберите вашего агента","pickModel":"Выберите модель","selectAgentSubtitle":"Выберите AI-агента для кодирования, который будет использовать ShipIT AI.","chooseModelSubtitle":"Выберите модель {{label}} для запуска.","ghCliNotice":"<0>GitHub CLI (gh)</0> необходим для полноценных возможностей CI/CD самовосстановления. <1>Установите здесь</1>.","ghCliRequired":"GitHub CLI (gh)","ghCliRequiredText":"необходим для полноценных возможностей CI/CD самовосстановления.","installHere":"Установите здесь","back":"Назад"},"canvas":{"noFeatures":"Функций пока нет","noFeaturesDescription":"Начните с создания вашей первой функции.","newFeature":"Новая функция","hideArchived":"Скрыть архивные","showArchived":"Показать архивные","hideArchivedLabel":"Скрыть архивные","showArchivedLabel":"Показать архивные","zoomOut":"Уменьшить","zoomIn":"Увеличить","fitView":"Вписать в экран","resetView":"Сбросить вид"},"common":{"noData":"Нет данных","retry":"Повторить","saving":"Сохранение...","saved":"Сохранено","decrease":"Уменьшить","increase":"Увеличить","cancel":"Отмена"},"featureNode":{"archiveFeature":"Архивировать функцию","deleteFeature":"Удалить функцию","unarchiveFeature":"Разархивировать функцию","archiveConfirmTitle":"Архивировать функцию?","archiveConfirmDescription":"<strong>{{name}}</strong> будет скрыта с канвы. Вы сможете разархивировать её позже.","cancel":"Отмена","archive":"Архивировать","fastMode":"Быстрый режим","specDriven":"По спецификации","copied":"Скопировано!","chatWithAgent":"Чат с агентом","stopDevServer":"Остановить сервер","startDevServer":"Запустить сервер","retryDevServer":"Перезапустить сервер","starting":"Запуск…","retry":"Повторить","start":"Запуск","failed":"Ошибка","deleting":"Удаление…","addFeature":"Добавить функцию","reviewRequirements":"Проверить требования","reviewTechnicalPlan":"Проверить технический план","reviewChanges":"Проверить изменения","review":"Проверка","creating":"Создание...","completedIn":"Завершено за {{runtime}}","completed":"Завершено","waitingOn":"Ожидание {{blockedBy}}","blocked":"Заблокировано","pending":"Ожидает","somethingWentWrong":"Что-то пошло не так","openChat":"Открыть чат","viewSessions":"Просмотр сессий","sessionsActive":"Сессии (активные)","sessions":"Сессии","agentSessions":"Сессии агента","noSessionsFound":"Сессии не найдены","showLess":"Показать меньше","showMore":"Показать ещё {{count}}"},"repositoryNode":{"removeRepository":"Удалить репозиторий","removeConfirmTitle":"Удалить репозиторий?","removeConfirmDescription":"Это удалит <strong>{{name}}</strong> и все его функции из рабочего пространства. Файлы на диске не будут затронуты.","cancel":"Отмена","remove":"Удалить","openInIde":"Открыть в IDE","openInShell":"Открыть в терминале","openFolder":"Открыть папку","chatWithAgent":"Чат с агентом","newFeature":"Новая функция","new":"Новая","behind":"{{count}} позади","notAGitRepository":"Не является git-репозиторием","starting":"Запуск...","run":"Запуск","startLocalEnvironment":"запустить локальное окружение","stopDevServer":"Остановить сервер","startDevServer":"Запустить сервер","retry":"Повторить"},"fab":{"closeActions":"Закрыть действия","createNew":"Создать новое","newFeature":"Новая функция","localFolder":"Локальная папка","adoptBranch":"Принять ветку","fromGithub":"Из GitHub"},"chat":{"shipitAiChat":"ShipIT AI Чат","writeMessage":"Напишите сообщение...","attachFiles":"Прикрепить файлы","forceStopAgent":"Принудительно остановить агента","stop":"Стоп","clearChatHistory":"Очистить историю чата","clear":"Очистить","noSession":"Нет сессии","yourMessage":"Ваше сообщение","agentMessage":"Сообщение агента","agentIsTyping":"Агент печатает","showMore":"Показать больше","showLess":"Показать меньше","code":"Код","preview":"Предпросмотр","openFullscreen":"Открыть на весь экран","htmlPreview":"HTML-предпросмотр","htmlPreviewFullscreen":"HTML-предпросмотр на весь экран"},"createDrawer":{"title":"НОВАЯ ФУНКЦИЯ","creating":"Создание...","cancel":"Отмена","createFeature":"+ Создать функцию","repository":"РЕПОЗИТОРИЙ","describeFeature":"ОПИШИТЕ ВАШУ ФУНКЦИЮ","featurePlaceholder":"напр. Добавить авторизацию через GitHub OAuth с обработкой обратного вызова и обновлением токена...","parentFeature":"РОДИТЕЛЬСКАЯ ФУНКЦИЯ","selectParent":"Выберите родительскую функцию...","searchFeatures":"Поиск функций...","noParent":"Без родителя","noFeaturesFound":"Функции не найдены.","searchRepositories":"Поиск репозиториев...","approve":"ОДОБРЕНИЕ","approveDescription":"Автоодобрение переходов между фазами без ручной проверки.","skippedInFastMode":"Пропущено в быстром режиме","all":"Все","toggleAllApprovalGates":"Переключить все этапы одобрения","evidence":"ПОДТВЕРЖДЕНИЯ","evidenceDescription":"Сбор и прикрепление подтверждений после реализации.","collect":"Сбор","collectDescription":"Делать скриншоты и сохранять артефакты после реализации.","addToPr":"Добавить в PR","requiresPr":"Требуется включённый PR","requiresEvidence":"Требуется включённый сбор подтверждений","addToPrDescription":"Включить подтверждения в тело запроса на слияние.","git":"GIT","push":"Отправить","pushDescription":"Отправить ветку на удалённый сервер после реализации.","pr":"PR","prDescription":"Открыть запрос на слияние после отправки.","watch":"Наблюдение","watchDescription":"Следить за CI и автоматически исправлять ошибки.","sync":"Sync","syncDescription":"Pull latest main from remote before creating the feature branch.","commitSpecs":"Коммит спецификаций","commitSpecsDescription":"Закоммитить спецификации в репозиторий.","forkAndPr":"Форк и PR","forkAndPrDescription":"Внести вклад через форк (PR в upstream).","pendingMode":"Ожидание","pendingModeDescription":"Создать без запуска — запустить вручную позже.","fastModeLabel":"Быстрый режим","fastModeDescription":"Пропустить фазы SDLC и реализовать напрямую из промпта.","fileDropZone":"Зона перетаскивания файлов","prd":"PRD","prdDescription":"Автоодобрение перехода требований к планированию.","plan":"План","planDescription":"Автоодобрение перехода планирования к реализации.","merge":"Слияние","mergeDescription":"Автоодобрение перехода слияния к завершению."},"featureDrawer":{"copyFeatureId":"Копировать ID функции","unarchiveFeature":"Разархивировать функцию","archiveFeature":"Архивировать функцию","deleteFeature":"Удалить функцию","stopDevServer":"Остановить сервер","startDevServer":"Запустить сервер","failedToReject":"Не удалось отклонить {{label}}","rejected":"{{label}} отклонено — агент повторяет (итерация {{n}})","excessiveIterations":"Итерация {{n}} — рассмотрите одобрение или корректировку отзыва","failedToApprove":"Не удалось одобрить {{label}}","approved":"{{label}} одобрено — агент продолжает","failedToApproveRequirements":"Не удалось одобрить требования","requirementsApproved":"Требования одобрены — агент продолжает","featureResumed":"Функция возобновлена — агент перезапускается","featureStarted":"Функция запущена","approvePlan":"Одобрить план","sendRevisionFeedback":"Отправить отзыв для доработки"},"overviewTab":{"created":"Создано","runtime":"Время выполнения","runningFor":"Работает","blockedBy":"Заблокировано","error":"Ошибка","prd":"PRD","plan":"План","merge":"Слияние","collect":"Сбор","addToPr":"Добавить в PR","push":"Отправка","pr":"PR","watch":"Наблюдение","commitSpecs":"Коммит спецификаций","forkAndPr":"Форк и PR"},"activityTab":{"copyPromptToClipboard":"Копировать промпт в буфер обмена","execution":"Выполнение","wait":"Ожидание","cost":"Стоимость","noActivityRecorded":"Активность пока не зафиксирована"},"logTab":{"structuredView":"Структурированный вид","rawView":"Исходный вид","noLogOutput":"Журнал пока пуст"},"planTab":{"noPlanCreated":"План пока не создан"},"branchSyncStatus":{"refreshSyncStatus":"Обновить статус синхронизации","rebaseOnMain":"Rebase на Main"},"drawerActionBar":{"fileDropZone":"Зона перетаскивания файлов","askAiToRevise":"Попросить AI доработать...","attachFiles":"Прикрепить файлы","reject":"Отклонить","sendRevisionFeedback":"Отправить отзыв для доработки","approve":"Одобрить","fileTooLarge":"\\"{{name}}\\" превышает лимит 10 МБ","fileTypeNotAllowed":"Тип файла \\"{{ext}}\\" не разрешён","uploadFailed":"Ошибка загрузки"},"taskProgress":{"done":"Готово","inProgress":"В процессе","review":"На проверке","todo":"К выполнению","noTasksDefined":"Задачи пока не определены"},"repositoryDrawer":{"openInIde":"Открыть в IDE","openInShell":"Открыть в терминале","openFolder":"Открыть папку","syncMain":"Синхронизировать Main"},"adoptBranch":{"failedToAdopt":"Не удалось принять ветку","repository":"Репозиторий","branchName":"Имя ветки","searchRepositories":"Поиск репозиториев...","searchBranches":"Поиск веток..."},"githubImport":{"title":"Импорт из GitHub","description":"Клонировать репозиторий GitHub и добавить в ShipIT AI.","githubUrl":"URL GitHub","urlPlaceholder":"owner/repo или https://github.com/owner/repo","searchRepositories":"Поиск репозиториев..."},"versionBadge":{"version":"Версия","branch":"Ветка","commit":"Коммит","path":"Путь"},"mergeReview":{"download":"Скачать","dataUnavailable":"Данные проверки слияния недоступны"},"baseDrawer":{"close":"Закрыть","stopDevServer":"Остановить сервер","startDevServer":"Запустить сервер"},"addRepository":{"addRepository":"Добавить репозиторий"},"modelPicker":{"searchPlaceholder":"Поиск или введите ID модели…"},"skills":{"searchPlaceholder":"Поиск навыков..."},"tools":{"noCategoryTools":"Нет инструментов в этой категории."},"accessibility":{"close":"Закрыть","loading":"Загрузка","send":"Отправить","imageNotes":"Заметки к изображению","viewServerLogs":"Просмотр журналов сервера","toggleSidebar":"Переключить боковую панель"}}')},66609,(a,b,c)=>{b.exports={errors:{notFound:"Não encontrado",unauthorized:"Não autorizado",forbidden:"Proibido",internal:"Erro interno",unknown:"Ocorreu um erro desconhecido",failedToLoad:"Falha ao carregar {{resource}}",failedToSave:"Falha ao salvar {{resource}}"},labels:{save:"Salvar",cancel:"Cancelar",confirm:"Confirmar",delete:"Excluir",edit:"Editar",close:"Fechar",back:"Voltar",next:"Próximo",yes:"Sim",no:"Não",enabled:"Ativado",disabled:"Desativado",loading:"Carregando...",saving:"Salvando...",saved:"Salvo",none:"Nenhum",default:"Padrão",custom:"Personalizado"},status:{success:"Sucesso",error:"Erro",warning:"Aviso",info:"Informação",pending:"Pendente",inProgress:"Em Andamento",completed:"Concluído",failed:"Falhou"},confirmation:{areYouSure:"Tem certeza?",cannotBeUndone:"Esta ação não pode ser desfeita."},language:{en:"Inglês",ru:"Russo",pt:"Português",es:"Espanhol",ar:"Árabe",he:"Hebraico",fr:"Francês",de:"Alemão"}}},20366,(a,b,c)=>{b.exports=JSON.parse('{"settings":{"title":"Configurações","saving":"Salvando...","saved":"Salvo","failedToSave":"Falha ao salvar configurações","sections":{"language":"Idioma","agent":"Agente","environment":"Ambiente","workflow":"Fluxo de Trabalho","ci":"CI","timeouts":"Tempos Limite","notifications":"Notificações","flags":"Flags","chat":"Chat","layout":"Layout","database":"Banco de Dados"},"language":{"title":"Idioma","description":"Escolha seu idioma de exibição preferido","label":"Idioma de Exibição","placeholder":"Selecione um idioma","failedToSave":"Falha ao salvar configurações de idioma"},"agent":{"title":"Agente Preferido","sectionTitle":"Agente","description":"Escolha seu agente de codificação AI e método de autenticação","sectionDescription":"Agente de codificação AI e autenticação","agentType":"Tipo de Agente","agentAndModel":"Agente e Modelo","agentAndModelDescription":"Provedor e modelo para todas as operações","authMethod":"Método de Autenticação","apiToken":"Token de API","apiTokenPlaceholder":"Insira seu token de API","apiTokenHelper":"Salva automaticamente quando você sai do campo","failedToSave":"Falha ao salvar configurações do agente","hint":"Escolha qual agente de codificação AI alimenta seus recursos. Cada agente suporta diferentes modelos e capacidades. A autenticação é resolvida automaticamente via sua sessão ativa.","links":{"agentSystem":"Sistema de agentes","addingAgents":"Adicionando agentes","configurationGuide":"Guia de configuração"}},"environment":{"title":"IDE e Terminal","sectionTitle":"Ambiente","description":"Configure seu editor, shell e preferências de terminal padrão","sectionDescription":"Preferências de editor, shell e terminal","defaultEditor":"Editor Padrão","defaultEditorDescription":"Editor aberto para operações com arquivos","shellPreference":"Preferência de Shell","shell":"Shell","shellDescription":"Shell padrão para scripts gerados","terminalEmulator":"Emulador de Terminal","terminal":"Terminal","terminalDescription":"Emulador de terminal para sessões de shell","systemTerminal":"Terminal do Sistema","installed":"Instalado","notInstalled":"Não instalado","failedToSave":"Falha ao salvar configurações de IDE e Terminal","hint":"Seu editor preferido abre arquivos para revisão. A configuração de shell controla scripts gerados. O emulador de terminal é aberto ao iniciar sessões de shell pela interface web.","links":{"configurationGuide":"Guia de configuração"}},"workflow":{"title":"Fluxo de Trabalho","description":"Configure o comportamento de PR, portas de aprovação e configurações de CI","sectionDescription":"Comportamento de automação após a implementação","defaultFastMode":"Modo rápido por padrão","defaultFastModeDescription":"Pular fases SDLC e implementar direto do prompt","subsections":{"approve":"Aprovar","evidence":"Evidência","git":"Git"},"autoApprovePrd":"Aprovar PRD automaticamente","autoApprovePrdDescription":"Pular revisão manual dos requisitos","autoApprovePlan":"Aprovar Plano automaticamente","autoApprovePlanDescription":"Pular revisão manual do plano de implementação","autoApproveMerge":"Aprovar Merge automaticamente","autoApproveMergeDescription":"Fazer merge sem revisão manual","collectEvidence":"Coletar evidências","collectEvidenceDescription":"Capturar screenshots e artefatos após a implementação","addEvidenceToPr":"Adicionar evidências ao PR","addEvidenceToPrDescription":"Incluir evidências no corpo do pull request","pushOnComplete":"Push ao concluir","pushOnCompleteDescription":"Enviar para o remoto quando a implementação terminar","openPrOnComplete":"Abrir PR ao concluir","openPrOnCompleteDescription":"Criar um pull request quando terminar","watchCiAfterPush":"Monitorar CI após push","watchCiAfterPushDescription":"Monitorar CI e corrigir falhas automaticamente. Desative para evitar limites de taxa.","approvalGates":"Portas de Aprovação","prdAutoApproval":"Aprovação automática de PRD","planAutoApproval":"Aprovação automática de plano","mergeAutoApproval":"Aprovação automática de merge","ciSettings":"Configurações de CI","ciWatchFixLoop":"Loop de monitoramento/correção de CI","maxFixAttempts":"Máximo de tentativas de correção","watchTimeout":"Tempo limite de monitoramento (segundos)","maxLogCharacters":"Máximo de caracteres no log","pollInterval":"Intervalo de consulta (segundos)","hideCiStatus":"Ocultar Status de CI","stageTimeouts":"Tempos Limite por Estágio","failedToSave":"Falha ao salvar configurações de fluxo de trabalho","hint":"Controle quão autônoma é cada execução de recurso. Aprovação automática pula a pausa de revisão humana em cada fase. As opções de push e PR controlam o que acontece após uma implementação bem-sucedida.","links":{"approvalGates":"Portas de aprovação","pushAndPrFlags":"Flags de push e PR"}},"ci":{"title":"Integração Contínua","description":"Limites e tempos limite para monitoramento de CI","maxFixAttempts":"Máximo de tentativas de correção","maxFixAttemptsDescription":"Tentativas do agente em CI com falha","watchTimeout":"Tempo limite de monitoramento","watchTimeoutDescription":"Espera máxima para conclusão do CI","maxLogSize":"Tamanho máximo do log","maxLogSizeDescription":"Truncar logs de CI além deste limite","pollInterval":"Intervalo de consulta","pollIntervalDescription":"Frequência de verificação do status de CI no GitHub","hideCiStatus":"Ocultar status de CI","hideCiStatusDescription":"Ocultar badges de status de CI no painel de recurso e revisão de merge","hint":"Quando um recurso é concluído, o agente pode monitorar o CI e corrigir falhas automaticamente. Estes limites evitam repetições descontroladas e controlam quanto da saída de log é enviada ao agente para análise.","links":{"cicdPipeline":"Pipeline CI/CD","ciSecurityGates":"Portas de segurança CI"}},"stageTimeouts":{"title":"Tempos Limite por Estágio","description":"Tempo máximo de execução por estágio do agente","subsections":{"featureAgent":"Agente de Recurso","analyzeRepoAgent":"Agente de Análise de Repositório"},"analyze":"Analisar","analyzeDescription":"Tempo limite para análise de repositório","requirements":"Requisitos","requirementsDescription":"Tempo limite para coleta de requisitos","research":"Pesquisa","researchDescription":"Tempo limite para pesquisa técnica","plan":"Plano","planDescription":"Tempo limite para planejamento de implementação","implement":"Implementar","implementDescription":"Tempo limite para implementação de código","merge":"Merge","mergeDescription":"Tempo limite para criação e merge de PR","hint":"Cada agente tem tempos limite de estágio configuráveis independentemente. Quando um estágio excede seu tempo limite, o agente é encerrado. Tempos limite maiores são úteis para implementações complexas. O agente de recurso tem padrão de 30 minutos por estágio. O agente de análise de repositório tem padrão de 10 minutos."},"notifications":{"title":"Notificações","description":"Configure canais de notificação e preferências de eventos","sectionDescription":"Como e quando você é notificado","channels":"Canais","inApp":"No Aplicativo","inAppLabel":"No aplicativo","inAppDescription":"Notificações dentro da interface do ShipIT AI","subsections":{"agentEvents":"Eventos do Agente","pullRequestEvents":"Eventos de Pull Request"},"events":{"agentStarted":"Agente iniciado","phaseCompleted":"Fase concluída","waitingApproval":"Aguardando aprovação","agentCompleted":"Agente concluído","agentFailed":"Agente falhou","mergeReviewReady":"Revisão de merge pronta","prMerged":"PR mergeado","prClosed":"PR fechado","prChecksPassed":"Verificações do PR aprovadas","prChecksFailed":"Verificações do PR falharam","prBlocked":"PR bloqueado"},"failedToSave":"Falha ao salvar configurações de notificação","hint":"Notificações toast no aplicativo mantêm você informado. Ajuste quais eventos do ciclo de vida do agente disparam uma notificação.","links":{"notificationSystem":"Sistema de notificações"}},"featureFlags":{"title":"Feature Flags","description":"Alternar recursos experimentais e beta","sectionDescription":"Ativar ou desativar recursos experimentais","badge":"Experimental","skills":"Skills","skillsDescription":"Ativar o sistema de skills para capacidades do agente","deployments":"Implantações","deploymentsDescription":"Ativar fluxos de trabalho de implantação em ambientes","debug":"Debug","debugDescription":"Mostrar painéis de debug e logs detalhados","githubImport":"Importação do GitHub","githubImportDescription":"Ativar importação de repositório GitHub na interface web","adoptBranch":"Adotar Branch","adoptBranchDescription":"Importar branches existentes como recursos rastreados","gitRebaseSync":"Git Rebase e Sync","gitRebaseSyncDescription":"Ativar operações de git rebase-on-main e sync-main","reactFileManager":"Gerenciador de Arquivos React","reactFileManagerDescription":"Usar o gerenciador de arquivos React integrado em vez do seletor de pastas nativo do SO","hint":"Recursos experimentais que ainda estão em desenvolvimento. Ative por sua conta e risco — podem mudar ou ser removidos em versões futuras. O modo debug adiciona logs detalhados úteis para solução de problemas."},"interactiveAgent":{"title":"Agente Interativo","description":"Configurações da aba Chat para sessões de agente interativo por recurso","enableChatTab":"Ativar aba Chat","enableChatTabDescription":"Mostrar a aba Chat em todas as páginas de detalhes de recurso","autoTimeout":"Tempo limite automático","autoTimeoutDescription":"Minutos de inatividade antes do agente ser parado automaticamente (1-120)","maxConcurrentSessions":"Máximo de sessões simultâneas","maxConcurrentSessionsDescription":"Número máximo de sessões de agente interativo ativas ao mesmo tempo (1-10)","hint":"A aba Chat inicia um processo de agente persistente por recurso. O tempo limite automático para sessões ociosas automaticamente para economizar recursos. O limite de sessões simultâneas evita uso excessivo de recursos em máquinas de desenvolvimento."},"fabLayout":{"title":"Layout","description":"Controlar a posição dos botões de ação flutuantes no centro de controle","swapPosition":"Trocar posições dos FABs","swapPositionDescription":"Mover o botão de Chat para a esquerda e o de Criar para a direita","hint":"Os dois botões de ação flutuantes (Criar e Chat) ficam nos cantos inferiores do centro de controle. Ative esta opção para trocar suas posições."},"database":{"title":"Banco de Dados","description":"Caminho e gerenciamento do banco de dados","sectionDescription":"Informações de armazenamento local","location":"Localização","locationDescription":"Caminho para o banco de dados SQLite local","size":"Tamanho","hint":"Todas as configurações são armazenadas em um banco de dados SQLite local em ~/.shipit-ai/data. O banco de dados usa um padrão de registro único com migrações automáticas na inicialização.","links":{"settingsService":"Serviço de configurações","settingsSpec":"Especificação de configurações"}}},"navigation":{"controlCenter":"Centro de Controle","dashboard":"Painel","features":"Recursos","repositories":"Repositórios","settings":"Configurações","sessions":"Sessões","tools":"Ferramentas","skills":"Skills"},"sidebar":{"features":"Recursos","switchToLight":"Modo claro","switchToDark":"Modo escuro","muteSounds":"Silenciar sons","unmuteSounds":"Ativar sons","statusActionNeeded":"Ação necessária","statusInProgress":"Em andamento","statusPending":"Pendente","statusBlocked":"Bloqueado","statusError":"Erro","statusDone":"Concluído"},"deleteFeature":{"title":"Excluir recurso?","description":"Isso excluirá permanentemente <strong>{{featureName}}</strong> ({{featureId}}). Esta ação não pode ser desfeita.","cleanupLabel":"Limpar worktree e branches","deleteSubFeatures":"Excluir sub-recursos","closePullRequest":"Fechar pull request","cancel":"Cancelar","deleting":"Excluindo…","delete":"Excluir"},"rejectFeedback":{"defaultTitle":"Rejeitar Requisitos","defaultDescription":"Forneça feedback para o agente abordar na próxima iteração. Feedback é obrigatório.","ariaLabel":"Feedback de rejeição","placeholder":"Descreva o que precisa mudar...","cancel":"Cancelar","rejecting":"Rejeitando…","confirmReject":"Confirmar Rejeição"},"emptyState":{"addProject":"Adicionar um projeto","addProjectDescription":"Adicione sua pasta de projeto para desbloquear a criação de recursos.","addProjectDescriptionLine2":"Descreva o que você precisa — o ShipIT AI cuida do resto.","checkingSetup":"Verificando configuração…","ready":"{{label}} pronto","notInstalled":"{{label}} não instalado","reCheck":"Verificar novamente","needsAuth":"{{label}} precisa de autenticação","open":"Abrir {{label}}","checking":"Verificando {{label}}…","notFound":"{{label}} não encontrado","docs":"Docs","opening":"Abrindo…","chooseFolder":"Escolha uma Pasta","folderHint":"Qualquer pasta funciona — o git será inicializado automaticamente se necessário.","orUseCli":"ou use o CLI","copyCommands":"Copiar comandos","git":"Git","gitRequired":"Necessário para todas as fases","githubCli":"GitHub CLI","githubCliRequired":"Necessário para pull requests"},"welcome":{"loadingAgents":"Carregando agentes…","chooseAgent":"Escolha seu agente","pickModel":"Escolha um modelo","selectAgentSubtitle":"Selecione o agente de codificação AI que você quer que o ShipIT AI use.","chooseModelSubtitle":"Escolha qual modelo {{label}} executar.","ghCliNotice":"<0>GitHub CLI (gh)</0> é necessário para recursos completos de autocorreção CI/CD. <1>Instale aqui</1>.","ghCliRequired":"GitHub CLI (gh)","ghCliRequiredText":"é necessário para recursos completos de autocorreção CI/CD.","installHere":"Instale aqui","back":"Voltar"},"canvas":{"noFeatures":"Nenhum recurso ainda","noFeaturesDescription":"Comece criando seu primeiro recurso.","newFeature":"Novo Recurso","hideArchived":"Ocultar arquivados","showArchived":"Mostrar arquivados","hideArchivedLabel":"Ocultar Arquivados","showArchivedLabel":"Mostrar Arquivados","zoomOut":"Diminuir zoom","zoomIn":"Aumentar zoom","fitView":"Ajustar à tela","resetView":"Redefinir visualização"},"common":{"noData":"Nenhum dado disponível","retry":"Tentar novamente","saving":"Salvando...","saved":"Salvo","decrease":"Diminuir","increase":"Aumentar","cancel":"Cancelar"},"featureNode":{"archiveFeature":"Arquivar funcionalidade","deleteFeature":"Excluir funcionalidade","unarchiveFeature":"Desarquivar funcionalidade","archiveConfirmTitle":"Arquivar funcionalidade?","archiveConfirmDescription":"<strong>{{name}}</strong> será ocultada do canvas. Você pode desarquivá-la depois.","cancel":"Cancelar","archive":"Arquivar","fastMode":"Modo rápido","specDriven":"Baseado em especificação","copied":"Copiado!","chatWithAgent":"Chat com agente","stopDevServer":"Parar servidor","startDevServer":"Iniciar servidor","retryDevServer":"Reiniciar servidor","starting":"Iniciando…","retry":"Tentar novamente","start":"Iniciar","failed":"Falhou","deleting":"Excluindo…","addFeature":"Adicionar funcionalidade","reviewRequirements":"Revisar requisitos","reviewTechnicalPlan":"Revisar plano técnico","reviewChanges":"Revisar alterações","review":"Revisão","creating":"Criando...","completedIn":"Concluído em {{runtime}}","completed":"Concluído","waitingOn":"Aguardando {{blockedBy}}","blocked":"Bloqueado","pending":"Pendente","somethingWentWrong":"Algo deu errado","openChat":"Abrir chat","viewSessions":"Ver sessões","sessionsActive":"Sessões (ativas)","sessions":"Sessões","agentSessions":"Sessões do agente","noSessionsFound":"Nenhuma sessão encontrada","showLess":"Mostrar menos","showMore":"Mostrar mais {{count}}"},"repositoryNode":{"removeRepository":"Remover repositório","removeConfirmTitle":"Remover repositório?","removeConfirmDescription":"Isso removerá <strong>{{name}}</strong> e todas as suas funcionalidades do workspace. Os arquivos no disco não serão afetados.","cancel":"Cancelar","remove":"Remover","openInIde":"Abrir no IDE","openInShell":"Abrir no terminal","openFolder":"Abrir pasta","chatWithAgent":"Chat com agente","newFeature":"Nova funcionalidade","new":"Nova","behind":"{{count}} atrás","notAGitRepository":"Não é um repositório git","starting":"Iniciando...","run":"Executar","startLocalEnvironment":"iniciar ambiente local","stopDevServer":"Parar servidor","startDevServer":"Iniciar servidor","retry":"Tentar novamente"},"fab":{"closeActions":"Fechar ações","createNew":"Criar novo","newFeature":"Nova funcionalidade","localFolder":"Pasta local","adoptBranch":"Adotar branch","fromGithub":"Do GitHub"},"chat":{"shipitAiChat":"ShipIT AI Chat","writeMessage":"Escreva uma mensagem...","attachFiles":"Anexar arquivos","forceStopAgent":"Forçar parada do agente","stop":"Parar","clearChatHistory":"Limpar histórico do chat","clear":"Limpar","noSession":"Sem sessão","yourMessage":"Sua mensagem","agentMessage":"Mensagem do agente","agentIsTyping":"Agente digitando","showMore":"Mostrar mais","showLess":"Mostrar menos","code":"Código","preview":"Visualização","openFullscreen":"Abrir tela cheia","htmlPreview":"Visualização HTML","htmlPreviewFullscreen":"Visualização HTML tela cheia"},"createDrawer":{"title":"NOVA FUNCIONALIDADE","creating":"Criando...","cancel":"Cancelar","createFeature":"+ Criar funcionalidade","repository":"REPOSITÓRIO","describeFeature":"DESCREVA SUA FUNCIONALIDADE","featurePlaceholder":"ex. Adicionar login com GitHub OAuth com tratamento de callback e renovação de token...","parentFeature":"FUNCIONALIDADE PAI","selectParent":"Selecionar funcionalidade pai...","searchFeatures":"Buscar funcionalidades...","noParent":"Sem pai","noFeaturesFound":"Nenhuma funcionalidade encontrada.","searchRepositories":"Buscar repositórios...","approve":"APROVAÇÃO","approveDescription":"Auto-aprovar transições de fase sem revisão manual.","skippedInFastMode":"Ignorado no modo rápido","all":"Todos","toggleAllApprovalGates":"Alternar todas as aprovações","evidence":"EVIDÊNCIA","evidenceDescription":"Coletar e anexar evidências após implementação.","collect":"Coletar","collectDescription":"Capturar screenshots e artefatos após implementação.","addToPr":"Adicionar ao PR","requiresPr":"Requer PR habilitado","requiresEvidence":"Requer coleta de evidências habilitada","addToPrDescription":"Incluir evidências no corpo do pull request.","git":"GIT","push":"Enviar","pushDescription":"Enviar branch para o remoto após implementação.","pr":"PR","prDescription":"Abrir um pull request após enviar.","watch":"Monitorar","watchDescription":"Monitorar CI e auto-corrigir erros.","sync":"Sync","syncDescription":"Pull latest main from remote before creating the feature branch.","commitSpecs":"Commit de specs","commitSpecsDescription":"Fazer commit de specs no repositório.","forkAndPr":"Fork e PR","forkAndPrDescription":"Contribuir via fork (PR para upstream).","pendingMode":"Pendente","pendingModeDescription":"Criar sem iniciar — iniciar manualmente depois.","fastModeLabel":"Modo rápido","fastModeDescription":"Pular fases SDLC e implementar direto do prompt.","fileDropZone":"Zona de arraste de arquivos","prd":"PRD","prdDescription":"Auto-aprovar transição de requisitos para planejamento.","plan":"Plano","planDescription":"Auto-aprovar transição de planejamento para implementação.","merge":"Merge","mergeDescription":"Auto-aprovar transição de merge para concluído."},"featureDrawer":{"copyFeatureId":"Copiar ID da funcionalidade","unarchiveFeature":"Desarquivar funcionalidade","archiveFeature":"Arquivar funcionalidade","deleteFeature":"Excluir funcionalidade","stopDevServer":"Parar servidor","startDevServer":"Iniciar servidor","failedToReject":"Falha ao rejeitar {{label}}","rejected":"{{label}} rejeitado — agente re-iterando (iteração {{n}})","excessiveIterations":"Iteração {{n}} — considere aprovar ou ajustar o feedback","failedToApprove":"Falha ao aprovar {{label}}","approved":"{{label}} aprovado — agente retomando","failedToApproveRequirements":"Falha ao aprovar requisitos","requirementsApproved":"Requisitos aprovados — agente retomando","featureResumed":"Funcionalidade retomada — agente reiniciando","featureStarted":"Funcionalidade iniciada","approvePlan":"Aprovar plano","sendRevisionFeedback":"Enviar feedback de revisão"},"overviewTab":{"created":"Criado","runtime":"Tempo de execução","runningFor":"Em execução","blockedBy":"Bloqueado por","error":"Erro","prd":"PRD","plan":"Plano","merge":"Merge","collect":"Coletar","addToPr":"Adicionar ao PR","push":"Enviar","pr":"PR","watch":"Monitorar","commitSpecs":"Commit de specs","forkAndPr":"Fork e PR"},"activityTab":{"copyPromptToClipboard":"Copiar prompt para área de transferência","execution":"Execução","wait":"Espera","cost":"Custo","noActivityRecorded":"Nenhuma atividade registrada"},"logTab":{"structuredView":"Vista estruturada","rawView":"Vista bruta","noLogOutput":"Sem saída de log"},"planTab":{"noPlanCreated":"Plano ainda não criado"},"branchSyncStatus":{"refreshSyncStatus":"Atualizar status de sincronização","rebaseOnMain":"Rebase no Main"},"drawerActionBar":{"fileDropZone":"Zona de arraste de arquivos","askAiToRevise":"Pedir à IA para revisar...","attachFiles":"Anexar arquivos","reject":"Rejeitar","sendRevisionFeedback":"Enviar feedback de revisão","approve":"Aprovar","fileTooLarge":"\\"{{name}}\\" excede o limite de 10 MB","fileTypeNotAllowed":"Tipo de arquivo \\"{{ext}}\\" não permitido","uploadFailed":"Falha no upload"},"taskProgress":{"done":"Concluído","inProgress":"Em progresso","review":"Em revisão","todo":"A fazer","noTasksDefined":"Nenhuma tarefa definida"},"repositoryDrawer":{"openInIde":"Abrir no IDE","openInShell":"Abrir no terminal","openFolder":"Abrir pasta","syncMain":"Sincronizar Main"},"adoptBranch":{"failedToAdopt":"Falha ao adotar branch","repository":"Repositório","branchName":"Nome do branch","searchRepositories":"Buscar repositórios...","searchBranches":"Buscar branches..."},"githubImport":{"title":"Importar do GitHub","description":"Clonar um repositório GitHub e adicionar ao ShipIT AI.","githubUrl":"URL do GitHub","urlPlaceholder":"owner/repo ou https://github.com/owner/repo","searchRepositories":"Buscar repositórios..."},"versionBadge":{"version":"Versão","branch":"Branch","commit":"Commit","path":"Caminho"},"mergeReview":{"download":"Baixar","dataUnavailable":"Dados de revisão de merge indisponíveis"},"baseDrawer":{"close":"Fechar","stopDevServer":"Parar servidor","startDevServer":"Iniciar servidor"},"addRepository":{"addRepository":"Adicionar repositório"},"modelPicker":{"searchPlaceholder":"Buscar ou digitar um ID de modelo…"},"skills":{"searchPlaceholder":"Buscar habilidades..."},"tools":{"noCategoryTools":"Sem ferramentas nesta categoria."},"accessibility":{"close":"Fechar","loading":"Carregando","send":"Enviar","imageNotes":"Notas da imagem","viewServerLogs":"Ver logs do servidor","toggleSidebar":"Alternar barra lateral"}}')},53433,(a,b,c)=>{b.exports={errors:{notFound:"No encontrado",unauthorized:"No autorizado",forbidden:"Prohibido",internal:"Error interno",unknown:"Ocurrió un error desconocido",failedToLoad:"Error al cargar {{resource}}",failedToSave:"Error al guardar {{resource}}"},labels:{save:"Guardar",cancel:"Cancelar",confirm:"Confirmar",delete:"Eliminar",edit:"Editar",close:"Cerrar",back:"Atrás",next:"Siguiente",yes:"Sí",no:"No",enabled:"Habilitado",disabled:"Deshabilitado",loading:"Cargando...",saving:"Guardando...",saved:"Guardado",none:"Ninguno",default:"Predeterminado",custom:"Personalizado"},status:{success:"Éxito",error:"Error",warning:"Advertencia",info:"Información",pending:"Pendiente",inProgress:"En progreso",completed:"Completado",failed:"Fallido"},confirmation:{areYouSure:"¿Estás seguro?",cannotBeUndone:"Esta acción no se puede deshacer."},language:{en:"Inglés",ru:"Ruso",pt:"Portugués",es:"Español",ar:"Árabe",he:"Hebreo",fr:"Francés",de:"Alemán"}}},87484,(a,b,c)=>{b.exports=JSON.parse('{"settings":{"title":"Configuración","saving":"Guardando...","saved":"Guardado","failedToSave":"Error al guardar la configuración","sections":{"language":"Idioma","agent":"Agente","environment":"Entorno","workflow":"Flujo de trabajo","ci":"CI","timeouts":"Tiempos límite","notifications":"Notificaciones","flags":"Opciones","chat":"Chat","layout":"Diseño","database":"Base de datos"},"language":{"title":"Idioma","description":"Elige tu idioma de visualización preferido","label":"Idioma de visualización","placeholder":"Selecciona un idioma","failedToSave":"Error al guardar la configuración de idioma"},"agent":{"title":"Agente preferido","sectionTitle":"Agente","description":"Elige tu agente de codificación AI y método de autenticación","sectionDescription":"Agente de codificación AI y autenticación","agentType":"Tipo de agente","agentAndModel":"Agente y modelo","agentAndModelDescription":"Proveedor y modelo para todas las operaciones","authMethod":"Método de autenticación","apiToken":"Token de API","apiTokenPlaceholder":"Ingresa tu token de API","apiTokenHelper":"Se guarda automáticamente al salir del campo","failedToSave":"Error al guardar la configuración del agente","hint":"Elige qué agente de codificación AI impulsa tus funcionalidades. Cada agente admite diferentes modelos y capacidades. La autenticación se resuelve automáticamente a través de tu sesión activa.","links":{"agentSystem":"Sistema de agentes","addingAgents":"Agregar agentes","configurationGuide":"Guía de configuración"}},"environment":{"title":"IDE y terminal","sectionTitle":"Entorno","description":"Configura tu editor, shell y preferencias de terminal predeterminados","sectionDescription":"Preferencias de editor, shell y terminal","defaultEditor":"Editor predeterminado","defaultEditorDescription":"Editor que se abre para operaciones de archivos","shellPreference":"Preferencia de shell","shell":"Shell","shellDescription":"Shell predeterminado para scripts generados","terminalEmulator":"Emulador de terminal","terminal":"Terminal","terminalDescription":"Emulador de terminal para sesiones de shell","systemTerminal":"Terminal del sistema","installed":"Instalado","notInstalled":"No instalado","failedToSave":"Error al guardar la configuración de IDE y terminal","hint":"Tu editor preferido abre archivos para revisión. La configuración de shell controla los scripts generados. El emulador de terminal se abre al iniciar sesiones de shell desde la interfaz web.","links":{"configurationGuide":"Guía de configuración"}},"workflow":{"title":"Flujo de trabajo","description":"Configura el comportamiento de PR, puertas de aprobación y configuración de CI","sectionDescription":"Comportamiento de automatización después de la implementación","defaultFastMode":"Modo rápido por defecto","defaultFastModeDescription":"Omitir fases SDLC e implementar directamente desde el prompt","subsections":{"approve":"Aprobar","evidence":"Evidencia","git":"Git"},"autoApprovePrd":"Auto-aprobar PRD","autoApprovePrdDescription":"Omitir la revisión manual de requisitos","autoApprovePlan":"Auto-aprobar plan","autoApprovePlanDescription":"Omitir la revisión manual del plan de implementación","autoApproveMerge":"Auto-aprobar fusión","autoApproveMergeDescription":"Fusionar sin revisión manual","collectEvidence":"Recopilar evidencia","collectEvidenceDescription":"Capturar capturas de pantalla y artefactos después de la implementación","addEvidenceToPr":"Agregar evidencia al PR","addEvidenceToPrDescription":"Incluir evidencia en el cuerpo del pull request","pushOnComplete":"Push al completar","pushOnCompleteDescription":"Enviar al remoto cuando la implementación termine","openPrOnComplete":"Abrir PR al completar","openPrOnCompleteDescription":"Crear un pull request al terminar","watchCiAfterPush":"Monitorear CI después del push","watchCiAfterPushDescription":"Monitorear CI y auto-corregir fallos. Deshabilita para evitar límites de velocidad.","approvalGates":"Puertas de aprobación","prdAutoApproval":"Auto-aprobación de PRD","planAutoApproval":"Auto-aprobación de plan","mergeAutoApproval":"Auto-aprobación de fusión","ciSettings":"Configuración de CI","ciWatchFixLoop":"Ciclo de monitoreo/corrección de CI","maxFixAttempts":"Máximo de intentos de corrección","watchTimeout":"Tiempo límite de monitoreo (segundos)","maxLogCharacters":"Máximo de caracteres de registro","pollInterval":"Intervalo de consulta (segundos)","hideCiStatus":"Ocultar estado de CI","stageTimeouts":"Tiempos límite por etapa","failedToSave":"Error al guardar la configuración del flujo de trabajo","hint":"Controla qué tan autónoma es cada ejecución de funcionalidad. Auto-aprobar omite la pausa de revisión humana en cada fase. Las opciones de push y PR controlan qué sucede después de una implementación exitosa.","links":{"approvalGates":"Puertas de aprobación","pushAndPrFlags":"Opciones de push y PR"}},"ci":{"title":"Integración continua","description":"Límites y tiempos límite para el monitoreo de CI","maxFixAttempts":"Máximo de intentos de corrección","maxFixAttemptsDescription":"Reintentos del agente en CI fallido","watchTimeout":"Tiempo límite de monitoreo","watchTimeoutDescription":"Espera máxima para la finalización de CI","maxLogSize":"Tamaño máximo de registro","maxLogSizeDescription":"Truncar registros de CI más allá de este límite","pollInterval":"Intervalo de consulta","pollIntervalDescription":"Con qué frecuencia consultar GitHub para actualizaciones de estado de CI","hideCiStatus":"Ocultar estado de CI","hideCiStatusDescription":"Ocultar las insignias de estado de CI del cajón de funcionalidades y la revisión de fusión","hint":"Cuando una funcionalidad se completa, el agente puede monitorear CI y auto-corregir fallos. Estos límites previenen reintentos descontrolados y controlan cuánta salida de registro se envía al agente para análisis.","links":{"cicdPipeline":"Pipeline de CI/CD","ciSecurityGates":"Puertas de seguridad de CI"}},"stageTimeouts":{"title":"Tiempos límite por etapa","description":"Tiempo máximo de ejecución por etapa del agente","subsections":{"featureAgent":"Agente de funcionalidad","analyzeRepoAgent":"Agente de análisis de repositorio"},"analyze":"Analizar","analyzeDescription":"Tiempo límite de análisis de repositorio","requirements":"Requisitos","requirementsDescription":"Tiempo límite de recopilación de requisitos","research":"Investigación","researchDescription":"Tiempo límite de investigación técnica","plan":"Plan","planDescription":"Tiempo límite de planificación de implementación","implement":"Implementar","implementDescription":"Tiempo límite de implementación de código","merge":"Fusión","mergeDescription":"Tiempo límite de creación y fusión de PR","hint":"Cada agente tiene tiempos límite de etapa configurables independientemente. Cuando una etapa excede su tiempo límite, el agente es terminado. Tiempos límite más largos son útiles para implementaciones complejas. El agente de funcionalidad tiene un valor predeterminado de 30 minutos por etapa. El agente de análisis de repositorio tiene un valor predeterminado de 10 minutos."},"notifications":{"title":"Notificaciones","description":"Configura los canales de notificación y preferencias de eventos","sectionDescription":"Cómo y cuándo te notificamos","channels":"Canales","inApp":"En la aplicación","inAppLabel":"En la aplicación","inAppDescription":"Notificaciones dentro de la interfaz de ShipIT AI","subsections":{"agentEvents":"Eventos del agente","pullRequestEvents":"Eventos de Pull Request"},"events":{"agentStarted":"Agente iniciado","phaseCompleted":"Fase completada","waitingApproval":"Esperando aprobación","agentCompleted":"Agente completado","agentFailed":"Agente fallido","mergeReviewReady":"Revisión de fusión lista","prMerged":"PR fusionado","prClosed":"PR cerrado","prChecksPassed":"Verificaciones de PR aprobadas","prChecksFailed":"Verificaciones de PR fallidas","prBlocked":"PR bloqueado"},"failedToSave":"Error al guardar la configuración de notificaciones","hint":"Las notificaciones de la aplicación te mantienen al tanto. Ajusta qué eventos del ciclo de vida del agente generan una notificación.","links":{"notificationSystem":"Sistema de notificaciones"}},"featureFlags":{"title":"Opciones experimentales","description":"Activa o desactiva funcionalidades experimentales y beta","sectionDescription":"Habilitar o deshabilitar funcionalidades experimentales","badge":"Experimental","skills":"Habilidades","skillsDescription":"Habilitar el sistema de habilidades para capacidades del agente","deployments":"Despliegues","deploymentsDescription":"Habilitar flujos de trabajo de despliegue en entornos","debug":"Depuración","debugDescription":"Mostrar paneles de depuración y registro detallado","githubImport":"Importación de GitHub","githubImportDescription":"Habilitar la importación de repositorios de GitHub en la interfaz web","adoptBranch":"Adoptar rama","adoptBranchDescription":"Importar ramas existentes como funcionalidades rastreadas","gitRebaseSync":"Git Rebase y sincronización","gitRebaseSyncDescription":"Habilitar operaciones de rebase-on-main y sync-main de git","reactFileManager":"Administrador de archivos React","reactFileManagerDescription":"Usar el administrador de archivos React integrado en lugar del selector de carpetas nativo del SO","hint":"Funcionalidades experimentales que aún están en desarrollo. Habilítalas bajo tu propio riesgo — pueden cambiar o ser eliminadas en versiones futuras. El modo de depuración agrega registro detallado útil para la resolución de problemas."},"interactiveAgent":{"title":"Agente interactivo","description":"Configuración de la pestaña de chat para sesiones de agente interactivo por funcionalidad","enableChatTab":"Habilitar pestaña de chat","enableChatTabDescription":"Mostrar la pestaña de chat en todas las páginas de detalle de funcionalidad","autoTimeout":"Tiempo de espera automático","autoTimeoutDescription":"Minutos de inactividad antes de que el agente se detenga automáticamente (1-120)","maxConcurrentSessions":"Máximo de sesiones concurrentes","maxConcurrentSessionsDescription":"Número máximo de sesiones de agente interactivo activas a la vez (1-10)","hint":"La pestaña de chat genera un proceso de agente persistente por funcionalidad. El tiempo de espera automático detiene las sesiones inactivas automáticamente para conservar recursos. El límite de sesiones concurrentes previene el uso excesivo de recursos en las máquinas de los desarrolladores."},"fabLayout":{"title":"Diseño","description":"Controlar la posición de los botones de acción flotantes en el centro de control","swapPosition":"Intercambiar posiciones de FAB","swapPositionDescription":"Mover el botón de Chat a la izquierda y el de Crear a la derecha","hint":"Los dos botones de acción flotantes (Crear y Chat) se ubican en las esquinas inferiores del centro de control. Active esta opción para intercambiar sus posiciones."},"database":{"title":"Base de datos","description":"Ruta de la base de datos y administración","sectionDescription":"Información de almacenamiento local","location":"Ubicación","locationDescription":"Ruta a la base de datos SQLite local","size":"Tamaño","hint":"Toda la configuración se almacena en una base de datos SQLite local en ~/.shipit-ai/data. La base de datos usa un patrón de registro único con migraciones automáticas al inicio.","links":{"settingsService":"Servicio de configuración","settingsSpec":"Especificación de configuración"}}},"navigation":{"controlCenter":"Centro de control","dashboard":"Panel","features":"Funcionalidades","repositories":"Repositorios","settings":"Configuración","sessions":"Sesiones","tools":"Herramientas","skills":"Habilidades"},"sidebar":{"features":"Funcionalidades","switchToLight":"Modo claro","switchToDark":"Modo oscuro","muteSounds":"Silenciar sonidos","unmuteSounds":"Activar sonidos","statusActionNeeded":"Acción necesaria","statusInProgress":"En progreso","statusPending":"Pendiente","statusBlocked":"Bloqueado","statusError":"Error","statusDone":"Completado"},"deleteFeature":{"title":"¿Eliminar funcionalidad?","description":"Esto eliminará permanentemente <strong>{{featureName}}</strong> ({{featureId}}). Esta acción no se puede deshacer.","cleanupLabel":"Limpiar worktree y ramas","deleteSubFeatures":"Eliminar sub-funcionalidades","closePullRequest":"Cerrar pull request","cancel":"Cancelar","deleting":"Eliminando…","delete":"Eliminar"},"rejectFeedback":{"defaultTitle":"Rechazar requisitos","defaultDescription":"Proporciona comentarios para que el agente los aborde en la próxima iteración. Los comentarios son obligatorios.","ariaLabel":"Comentarios de rechazo","placeholder":"Describe qué necesita cambiar...","cancel":"Cancelar","rejecting":"Rechazando…","confirmReject":"Confirmar rechazo"},"emptyState":{"addProject":"Agregar un proyecto","addProjectDescription":"Agrega tu carpeta de proyecto para desbloquear la creación de funcionalidades.","addProjectDescriptionLine2":"Describe lo que necesitas — ShipIT AI se encarga del resto.","checkingSetup":"Verificando configuración…","ready":"{{label}} listo","notInstalled":"{{label}} no está instalado","reCheck":"Verificar de nuevo","needsAuth":"{{label}} necesita autenticación","open":"Abrir {{label}}","checking":"Verificando {{label}}…","notFound":"{{label}} no encontrado","docs":"Documentación","opening":"Abriendo…","chooseFolder":"Elige una carpeta","folderHint":"Cualquier carpeta funciona — git se inicializará automáticamente si es necesario.","orUseCli":"o usa el CLI","copyCommands":"Copiar comandos","git":"Git","gitRequired":"Requerido para todas las fases","githubCli":"GitHub CLI","githubCliRequired":"Requerido para pull requests"},"welcome":{"loadingAgents":"Cargando agentes…","chooseAgent":"Elige tu agente","pickModel":"Elige un modelo","selectAgentSubtitle":"Selecciona el agente de codificación AI que quieres que ShipIT AI use.","chooseModelSubtitle":"Elige qué modelo de {{label}} ejecutar.","ghCliNotice":"<0>GitHub CLI (gh)</0> es necesario para las capacidades completas de auto-reparación de CI/CD. <1>Instálalo aquí</1>.","ghCliRequired":"GitHub CLI (gh)","ghCliRequiredText":"es necesario para las capacidades completas de auto-reparación de CI/CD.","installHere":"Instálalo aquí","back":"Atrás"},"canvas":{"noFeatures":"Aún no hay funcionalidades","noFeaturesDescription":"Comienza creando tu primera funcionalidad.","newFeature":"Nueva funcionalidad","hideArchived":"Ocultar archivadas","showArchived":"Mostrar archivadas","hideArchivedLabel":"Ocultar archivadas","showArchivedLabel":"Mostrar archivadas","zoomOut":"Alejar","zoomIn":"Acercar","fitView":"Ajustar vista","resetView":"Restablecer vista"},"common":{"noData":"No hay datos disponibles","retry":"Reintentar","saving":"Guardando...","saved":"Guardado","decrease":"Disminuir","increase":"Aumentar","cancel":"Cancelar"},"featureNode":{"archiveFeature":"Archivar función","deleteFeature":"Eliminar función","unarchiveFeature":"Desarchivar función","archiveConfirmTitle":"¿Archivar función?","archiveConfirmDescription":"<strong>{{name}}</strong> se ocultará del lienzo. Puedes desarchivarla más tarde.","cancel":"Cancelar","archive":"Archivar","fastMode":"Modo rápido","specDriven":"Basado en especificación","copied":"¡Copiado!","chatWithAgent":"Chat con agente","stopDevServer":"Detener servidor","startDevServer":"Iniciar servidor","retryDevServer":"Reintentar servidor","starting":"Iniciando…","retry":"Reintentar","start":"Iniciar","failed":"Error","deleting":"Eliminando…","addFeature":"Agregar función","reviewRequirements":"Revisar requisitos","reviewTechnicalPlan":"Revisar plan técnico","reviewChanges":"Revisar cambios","review":"Revisar","creating":"Creando...","completedIn":"Completado en {{runtime}}","completed":"Completado","waitingOn":"Esperando {{blockedBy}}","blocked":"Bloqueado","pending":"Pendiente","somethingWentWrong":"Algo salió mal","openChat":"Abrir chat","viewSessions":"Ver sesiones","sessionsActive":"Sesiones (activas)","sessions":"Sesiones","agentSessions":"Sesiones del agente","noSessionsFound":"No se encontraron sesiones","showLess":"Mostrar menos","showMore":"Mostrar {{count}} más"},"repositoryNode":{"removeRepository":"Eliminar repositorio","removeConfirmTitle":"¿Eliminar repositorio?","removeConfirmDescription":"Esto eliminará <strong>{{name}}</strong> y todas sus funciones del espacio de trabajo. Los archivos en disco no se verán afectados.","cancel":"Cancelar","remove":"Eliminar","openInIde":"Abrir en IDE","openInShell":"Abrir en terminal","openFolder":"Abrir carpeta","chatWithAgent":"Chat con agente","newFeature":"Nueva función","new":"Nueva","behind":"{{count}} atrás","notAGitRepository":"No es un repositorio git","starting":"Iniciando...","run":"Ejecutar","startLocalEnvironment":"iniciar entorno local","stopDevServer":"Detener servidor","startDevServer":"Iniciar servidor","retry":"Reintentar"},"fab":{"closeActions":"Cerrar acciones","createNew":"Crear nuevo","newFeature":"Nueva función","localFolder":"Carpeta local","adoptBranch":"Adoptar rama","fromGithub":"Desde GitHub"},"chat":{"shipitAiChat":"ShipIT AI Chat","writeMessage":"Escribe un mensaje...","attachFiles":"Adjuntar archivos","forceStopAgent":"Forzar detención del agente","stop":"Detener","clearChatHistory":"Limpiar historial del chat","clear":"Limpiar","noSession":"Sin sesión","yourMessage":"Tu mensaje","agentMessage":"Mensaje del agente","agentIsTyping":"El agente está escribiendo","showMore":"Mostrar más","showLess":"Mostrar menos","code":"Código","preview":"Vista previa","openFullscreen":"Abrir pantalla completa","htmlPreview":"Vista previa HTML","htmlPreviewFullscreen":"Vista previa HTML pantalla completa"},"createDrawer":{"title":"NUEVA FUNCIÓN","creating":"Creando...","cancel":"Cancelar","createFeature":"+ Crear función","repository":"REPOSITORIO","describeFeature":"DESCRIBE TU FUNCIÓN","featurePlaceholder":"ej. Agregar login con GitHub OAuth con manejo de callback y renovación de token...","parentFeature":"FUNCIÓN PADRE","selectParent":"Seleccionar función padre...","searchFeatures":"Buscar funciones...","noParent":"Sin padre","noFeaturesFound":"No se encontraron funciones.","searchRepositories":"Buscar repositorios...","approve":"APROBACIÓN","approveDescription":"Auto-aprobar transiciones de fase sin revisión manual.","skippedInFastMode":"Omitido en modo rápido","all":"Todos","toggleAllApprovalGates":"Alternar todas las puertas de aprobación","evidence":"EVIDENCIA","evidenceDescription":"Recopilar y adjuntar evidencia después de la implementación.","collect":"Recopilar","collectDescription":"Capturar capturas de pantalla y artefactos después de la implementación.","addToPr":"Agregar al PR","requiresPr":"Requiere PR habilitado","requiresEvidence":"Requiere recopilación de evidencia habilitada","addToPrDescription":"Incluir evidencia en el cuerpo del pull request.","git":"GIT","push":"Enviar","pushDescription":"Enviar rama al remoto después de la implementación.","pr":"PR","prDescription":"Abrir un pull request después de enviar.","watch":"Vigilar","watchDescription":"Vigilar CI y auto-corregir errores.","sync":"Sync","syncDescription":"Pull latest main from remote before creating the feature branch.","commitSpecs":"Commit de specs","commitSpecsDescription":"Hacer commit de specs al repositorio.","forkAndPr":"Fork y PR","forkAndPrDescription":"Contribuir mediante fork (PR al upstream).","pendingMode":"Pendiente","pendingModeDescription":"Crear sin iniciar — iniciar manualmente después.","fastModeLabel":"Modo rápido","fastModeDescription":"Omitir fases SDLC e implementar directamente desde tu prompt.","fileDropZone":"Zona de arrastre de archivos","prd":"PRD","prdDescription":"Auto-aprobar transición de requisitos a planificación.","plan":"Plan","planDescription":"Auto-aprobar transición de planificación a implementación.","merge":"Merge","mergeDescription":"Auto-aprobar transición de merge a completado."},"featureDrawer":{"copyFeatureId":"Copiar ID de función","unarchiveFeature":"Desarchivar función","archiveFeature":"Archivar función","deleteFeature":"Eliminar función","stopDevServer":"Detener servidor","startDevServer":"Iniciar servidor","failedToReject":"Error al rechazar {{label}}","rejected":"{{label}} rechazado — agente re-iterando (iteración {{n}})","excessiveIterations":"Iteración {{n}} — considera aprobar o ajustar el feedback","failedToApprove":"Error al aprobar {{label}}","approved":"{{label}} aprobado — agente reanudando","failedToApproveRequirements":"Error al aprobar requisitos","requirementsApproved":"Requisitos aprobados — agente reanudando","featureResumed":"Función reanudada — agente reiniciando","featureStarted":"Función iniciada","approvePlan":"Aprobar plan","sendRevisionFeedback":"Enviar feedback de revisión"},"overviewTab":{"created":"Creado","runtime":"Tiempo de ejecución","runningFor":"En ejecución","blockedBy":"Bloqueado por","error":"Error","prd":"PRD","plan":"Plan","merge":"Merge","collect":"Recopilar","addToPr":"Agregar al PR","push":"Enviar","pr":"PR","watch":"Vigilar","commitSpecs":"Commit de specs","forkAndPr":"Fork y PR"},"activityTab":{"copyPromptToClipboard":"Copiar prompt al portapapeles","execution":"Ejecución","wait":"Espera","cost":"Costo","noActivityRecorded":"Sin actividad registrada"},"logTab":{"structuredView":"Vista estructurada","rawView":"Vista sin formato","noLogOutput":"Sin salida de log"},"planTab":{"noPlanCreated":"Plan aún no creado"},"branchSyncStatus":{"refreshSyncStatus":"Actualizar estado de sincronización","rebaseOnMain":"Rebase en Main"},"drawerActionBar":{"fileDropZone":"Zona de arrastre de archivos","askAiToRevise":"Pedir a la IA que revise...","attachFiles":"Adjuntar archivos","reject":"Rechazar","sendRevisionFeedback":"Enviar feedback de revisión","approve":"Aprobar","fileTooLarge":"\\"{{name}}\\" excede el límite de 10 MB","fileTypeNotAllowed":"Tipo de archivo \\"{{ext}}\\" no permitido","uploadFailed":"Error en la carga"},"taskProgress":{"done":"Hecho","inProgress":"En progreso","review":"En revisión","todo":"Pendiente","noTasksDefined":"Sin tareas definidas"},"repositoryDrawer":{"openInIde":"Abrir en IDE","openInShell":"Abrir en terminal","openFolder":"Abrir carpeta","syncMain":"Sincronizar Main"},"adoptBranch":{"failedToAdopt":"Error al adoptar rama","repository":"Repositorio","branchName":"Nombre de rama","searchRepositories":"Buscar repositorios...","searchBranches":"Buscar ramas..."},"githubImport":{"title":"Importar desde GitHub","description":"Clonar un repositorio GitHub y agregarlo a ShipIT AI.","githubUrl":"URL de GitHub","urlPlaceholder":"owner/repo o https://github.com/owner/repo","searchRepositories":"Buscar repositorios..."},"versionBadge":{"version":"Versión","branch":"Rama","commit":"Commit","path":"Ruta"},"mergeReview":{"download":"Descargar","dataUnavailable":"Datos de revisión de merge no disponibles"},"baseDrawer":{"close":"Cerrar","stopDevServer":"Detener servidor","startDevServer":"Iniciar servidor"},"addRepository":{"addRepository":"Agregar repositorio"},"modelPicker":{"searchPlaceholder":"Buscar o escribir un ID de modelo…"},"skills":{"searchPlaceholder":"Buscar habilidades..."},"tools":{"noCategoryTools":"Sin herramientas en esta categoría."},"accessibility":{"close":"Cerrar","loading":"Cargando","send":"Enviar","imageNotes":"Notas de imagen","viewServerLogs":"Ver logs del servidor","toggleSidebar":"Alternar barra lateral"}}')},63541,(a,b,c)=>{b.exports={errors:{notFound:"غير موجود",unauthorized:"غير مصرح",forbidden:"محظور",internal:"خطأ داخلي",unknown:"حدث خطأ غير معروف",failedToLoad:"فشل تحميل {{resource}}",failedToSave:"فشل حفظ {{resource}}"},labels:{save:"حفظ",cancel:"إلغاء",confirm:"تأكيد",delete:"حذف",edit:"تعديل",close:"إغلاق",back:"رجوع",next:"التالي",yes:"نعم",no:"لا",enabled:"مفعّل",disabled:"معطّل",loading:"جارٍ التحميل...",saving:"جارٍ الحفظ...",saved:"تم الحفظ",none:"لا شيء",default:"افتراضي",custom:"مخصص"},status:{success:"نجاح",error:"خطأ",warning:"تحذير",info:"معلومات",pending:"قيد الانتظار",inProgress:"قيد التنفيذ",completed:"مكتمل",failed:"فشل"},confirmation:{areYouSure:"هل أنت متأكد؟",cannotBeUndone:"لا يمكن التراجع عن هذا الإجراء."},language:{en:"الإنجليزية",ru:"الروسية",pt:"البرتغالية",es:"الإسبانية",ar:"العربية",he:"العبرية",fr:"الفرنسية",de:"الألمانية"}}},3324,(a,b,c)=>{b.exports=JSON.parse('{"settings":{"title":"الإعدادات","saving":"جارٍ الحفظ...","saved":"تم الحفظ","failedToSave":"فشل حفظ الإعدادات","sections":{"language":"اللغة","agent":"الوكيل","environment":"البيئة","workflow":"سير العمل","ci":"CI","timeouts":"المهل الزمنية","notifications":"الإشعارات","flags":"العلامات","chat":"المحادثة","layout":"التخطيط","database":"قاعدة البيانات"},"language":{"title":"اللغة","description":"اختر لغة العرض المفضلة","label":"لغة العرض","placeholder":"اختر لغة","failedToSave":"فشل حفظ إعدادات اللغة"},"agent":{"title":"الوكيل المفضل","sectionTitle":"الوكيل","description":"اختر وكيل البرمجة بالذكاء الاصطناعي وطريقة المصادقة","sectionDescription":"وكيل البرمجة بالذكاء الاصطناعي والمصادقة","agentType":"نوع الوكيل","agentAndModel":"الوكيل والنموذج","agentAndModelDescription":"المزود والنموذج لجميع العمليات","authMethod":"طريقة المصادقة","apiToken":"رمز API","apiTokenPlaceholder":"أدخل رمز API الخاص بك","apiTokenHelper":"يتم الحفظ تلقائيًا عند مغادرة الحقل","failedToSave":"فشل حفظ إعدادات الوكيل","hint":"اختر وكيل البرمجة بالذكاء الاصطناعي الذي يشغّل ميزاتك. كل وكيل يدعم نماذج وإمكانيات مختلفة. يتم حل المصادقة تلقائيًا عبر جلستك النشطة.","links":{"agentSystem":"نظام الوكيل","addingAgents":"إضافة وكلاء","configurationGuide":"دليل التكوين"}},"environment":{"title":"بيئة التطوير والطرفية","sectionTitle":"البيئة","description":"تكوين المحرر الافتراضي والصدفة وتفضيلات الطرفية","sectionDescription":"تفضيلات المحرر والصدفة والطرفية","defaultEditor":"المحرر الافتراضي","defaultEditorDescription":"المحرر الذي يفتح لعمليات الملفات","shellPreference":"تفضيل الصدفة","shell":"الصدفة","shellDescription":"الصدفة الافتراضية للنصوص البرمجية المولّدة","terminalEmulator":"محاكي الطرفية","terminal":"الطرفية","terminalDescription":"محاكي الطرفية لجلسات الصدفة","systemTerminal":"طرفية النظام","installed":"مُثبّت","notInstalled":"غير مُثبّت","failedToSave":"فشل حفظ إعدادات بيئة التطوير والطرفية","hint":"محررك المفضل يفتح الملفات للمراجعة. إعداد الصدفة يتحكم في النصوص البرمجية المولّدة. يتم تشغيل محاكي الطرفية عند فتح جلسات صدفة من واجهة الويب.","links":{"configurationGuide":"دليل التكوين"}},"workflow":{"title":"سير العمل","description":"تكوين سلوك PR وبوابات الموافقة وإعدادات CI","sectionDescription":"سلوك الأتمتة بعد التنفيذ","defaultFastMode":"الوضع السريع كافتراضي","defaultFastModeDescription":"تخطي مراحل SDLC والتنفيذ مباشرة من الأمر","subsections":{"approve":"الموافقة","evidence":"الأدلة","git":"Git"},"autoApprovePrd":"الموافقة التلقائية على PRD","autoApprovePrdDescription":"تخطي المراجعة اليدوية للمتطلبات","autoApprovePlan":"الموافقة التلقائية على الخطة","autoApprovePlanDescription":"تخطي المراجعة اليدوية لخطة التنفيذ","autoApproveMerge":"الموافقة التلقائية على الدمج","autoApproveMergeDescription":"الدمج بدون مراجعة يدوية","collectEvidence":"جمع الأدلة","collectEvidenceDescription":"التقاط لقطات الشاشة والمخرجات بعد التنفيذ","addEvidenceToPr":"إضافة الأدلة إلى PR","addEvidenceToPrDescription":"تضمين الأدلة في نص طلب السحب","pushOnComplete":"الدفع عند الاكتمال","pushOnCompleteDescription":"الدفع إلى الخادم البعيد عند انتهاء التنفيذ","openPrOnComplete":"فتح PR عند الاكتمال","openPrOnCompleteDescription":"إنشاء طلب سحب عند الانتهاء","watchCiAfterPush":"مراقبة CI بعد الدفع","watchCiAfterPushDescription":"مراقبة CI والإصلاح التلقائي للأخطاء. قم بالتعطيل لتجنب حدود المعدل.","approvalGates":"بوابات الموافقة","prdAutoApproval":"الموافقة التلقائية على PRD","planAutoApproval":"الموافقة التلقائية على الخطة","mergeAutoApproval":"الموافقة التلقائية على الدمج","ciSettings":"إعدادات CI","ciWatchFixLoop":"دورة مراقبة/إصلاح CI","maxFixAttempts":"الحد الأقصى لمحاولات الإصلاح","watchTimeout":"مهلة المراقبة (بالثواني)","maxLogCharacters":"الحد الأقصى لأحرف السجل","pollInterval":"فترة الاستقصاء (بالثواني)","hideCiStatus":"إخفاء حالة CI","stageTimeouts":"المهل الزمنية للمراحل","failedToSave":"فشل حفظ إعدادات سير العمل","hint":"تحكم في مدى استقلالية كل تشغيل ميزة. الموافقة التلقائية تتخطى التوقف للمراجعة البشرية في كل مرحلة. خيارات الدفع وPR تتحكم فيما يحدث بعد نجاح التنفيذ.","links":{"approvalGates":"بوابات الموافقة","pushAndPrFlags":"علامات الدفع وPR"}},"ci":{"title":"التكامل المستمر","description":"الحدود والمهل الزمنية لمراقبة CI","maxFixAttempts":"الحد الأقصى لمحاولات الإصلاح","maxFixAttemptsDescription":"إعادة محاولة الوكيل عند فشل CI","watchTimeout":"مهلة المراقبة","watchTimeoutDescription":"أقصى انتظار لاكتمال CI","maxLogSize":"الحد الأقصى لحجم السجل","maxLogSizeDescription":"قص سجلات CI بعد هذا الحد","pollInterval":"فترة الاستقصاء","pollIntervalDescription":"عدد مرات التحقق من GitHub لتحديثات حالة CI","hideCiStatus":"إخفاء حالة CI","hideCiStatusDescription":"إخفاء شارات حالة CI من درج الميزات ومراجعة الدمج","hint":"عند اكتمال ميزة، يمكن للوكيل مراقبة CI والإصلاح التلقائي للأخطاء. هذه الحدود تمنع إعادة المحاولات المفرطة وتتحكم في حجم مخرجات السجل المرسلة للوكيل للتحليل.","links":{"cicdPipeline":"خط أنابيب CI/CD","ciSecurityGates":"بوابات أمان CI"}},"stageTimeouts":{"title":"المهل الزمنية للمراحل","description":"أقصى وقت تنفيذ لكل مرحلة من مراحل الوكيل","subsections":{"featureAgent":"وكيل الميزات","analyzeRepoAgent":"وكيل تحليل المستودع"},"analyze":"التحليل","analyzeDescription":"مهلة تحليل المستودع","requirements":"المتطلبات","requirementsDescription":"مهلة جمع المتطلبات","research":"البحث","researchDescription":"مهلة البحث التقني","plan":"الخطة","planDescription":"مهلة تخطيط التنفيذ","implement":"التنفيذ","implementDescription":"مهلة تنفيذ الكود","merge":"الدمج","mergeDescription":"مهلة إنشاء PR والدمج","hint":"لكل وكيل مهل زمنية مستقلة وقابلة للتكوين لكل مرحلة. عند تجاوز مرحلة لمهلتها الزمنية، يتم إنهاء الوكيل. المهل الأطول مفيدة للتنفيذات المعقدة. المهلة الافتراضية لوكيل الميزات 30 دقيقة لكل مرحلة. المهلة الافتراضية لوكيل تحليل المستودع 10 دقائق."},"notifications":{"title":"الإشعارات","description":"تكوين قنوات الإشعارات وتفضيلات الأحداث","sectionDescription":"كيف ومتى يتم إشعارك","channels":"القنوات","inApp":"داخل التطبيق","inAppLabel":"داخل التطبيق","inAppDescription":"الإشعارات داخل واجهة ShipIT AI","subsections":{"agentEvents":"أحداث الوكيل","pullRequestEvents":"أحداث طلب السحب"},"events":{"agentStarted":"بدأ الوكيل","phaseCompleted":"اكتملت المرحلة","waitingApproval":"في انتظار الموافقة","agentCompleted":"اكتمل الوكيل","agentFailed":"فشل الوكيل","mergeReviewReady":"مراجعة الدمج جاهزة","prMerged":"تم دمج PR","prClosed":"تم إغلاق PR","prChecksPassed":"نجحت فحوصات PR","prChecksFailed":"فشلت فحوصات PR","prBlocked":"PR محظور"},"failedToSave":"فشل حفظ إعدادات الإشعارات","hint":"إشعارات التنبيه داخل التطبيق تبقيك على اطلاع. اضبط أحداث دورة حياة الوكيل التي تُشغّل الإشعارات.","links":{"notificationSystem":"نظام الإشعارات"}},"featureFlags":{"title":"علامات الميزات","description":"تبديل الميزات التجريبية والتجريبية المبكرة","sectionDescription":"تمكين أو تعطيل الميزات التجريبية","badge":"تجريبي","skills":"المهارات","skillsDescription":"تمكين نظام المهارات لإمكانيات الوكيل","deployments":"النشر","deploymentsDescription":"تمكين سير عمل نشر البيئات","debug":"التصحيح","debugDescription":"عرض لوحات التصحيح والتسجيل المفصل","githubImport":"استيراد GitHub","githubImportDescription":"تمكين استيراد مستودعات GitHub في واجهة الويب","adoptBranch":"تبني فرع","adoptBranchDescription":"استيراد الفروع الموجودة كميزات متتبعة","gitRebaseSync":"إعادة تأسيس ومزامنة Git","gitRebaseSyncDescription":"تمكين عمليات إعادة التأسيس على main ومزامنة main","reactFileManager":"مدير ملفات React","reactFileManagerDescription":"استخدام مدير ملفات React المدمج بدلاً من منتقي مجلدات نظام التشغيل الأصلي","hint":"ميزات تجريبية لا تزال قيد التطوير. قم بتمكينها على مسؤوليتك — قد تتغير أو تُزال في الإصدارات المستقبلية. وضع التصحيح يضيف تسجيلًا مفصلاً مفيدًا لاستكشاف الأخطاء."},"interactiveAgent":{"title":"الوكيل التفاعلي","description":"إعدادات علامة المحادثة لجلسات الوكيل التفاعلية لكل ميزة","enableChatTab":"تمكين علامة المحادثة","enableChatTabDescription":"عرض علامة المحادثة في جميع صفحات تفاصيل الميزات","autoTimeout":"المهلة التلقائية","autoTimeoutDescription":"دقائق عدم النشاط قبل إيقاف الوكيل تلقائيًا (1–120)","maxConcurrentSessions":"الحد الأقصى للجلسات المتزامنة","maxConcurrentSessionsDescription":"الحد الأقصى لعدد جلسات الوكيل التفاعلية النشطة في وقت واحد (1–10)","hint":"علامة المحادثة تُنشئ عملية وكيل مستمرة لكل ميزة. المهلة التلقائية تُوقف الجلسات الخاملة تلقائيًا لتوفير الموارد. حد الجلسات المتزامنة يمنع الاستخدام المفرط للموارد على أجهزة المطورين."},"fabLayout":{"title":"التخطيط","description":"التحكم في موضع أزرار الإجراء العائمة في مركز التحكم","swapPosition":"تبديل مواضع الأزرار العائمة","swapPositionDescription":"نقل زر المحادثة إلى اليسار وزر الإنشاء إلى اليمين","hint":"يوجد زران عائمان (إنشاء ومحادثة) في الزوايا السفلية لمركز التحكم. قم بتفعيل هذا الخيار لتبديل مواضعهما."},"database":{"title":"قاعدة البيانات","description":"مسار قاعدة البيانات وإدارتها","sectionDescription":"معلومات التخزين المحلي","location":"الموقع","locationDescription":"مسار قاعدة بيانات SQLite المحلية","size":"الحجم","hint":"جميع الإعدادات مخزنة في قاعدة بيانات SQLite محلية في ~/.shipit-ai/data. تستخدم قاعدة البيانات نمط سجل مفرد مع ترحيلات تلقائية عند البدء.","links":{"settingsService":"خدمة الإعدادات","settingsSpec":"مواصفات الإعدادات"}}},"navigation":{"controlCenter":"مركز التحكم","dashboard":"لوحة المعلومات","features":"الميزات","repositories":"المستودعات","settings":"الإعدادات","sessions":"الجلسات","tools":"الأدوات","skills":"المهارات"},"sidebar":{"features":"الميزات","switchToLight":"الوضع الفاتح","switchToDark":"الوضع الداكن","muteSounds":"كتم الأصوات","unmuteSounds":"تشغيل الأصوات","statusActionNeeded":"إجراء مطلوب","statusInProgress":"قيد التنفيذ","statusPending":"قيد الانتظار","statusBlocked":"محظور","statusError":"خطأ","statusDone":"مكتمل"},"deleteFeature":{"title":"حذف الميزة؟","description":"سيتم حذف <strong>{{featureName}}</strong> ({{featureId}}) نهائيًا. لا يمكن التراجع عن هذا الإجراء.","cleanupLabel":"تنظيف شجرة العمل والفروع","deleteSubFeatures":"حذف الميزات الفرعية","closePullRequest":"إغلاق طلب السحب","cancel":"إلغاء","deleting":"جارٍ الحذف…","delete":"حذف"},"rejectFeedback":{"defaultTitle":"رفض المتطلبات","defaultDescription":"قدّم ملاحظات ليعالجها الوكيل في التكرار التالي. الملاحظات مطلوبة.","ariaLabel":"ملاحظات الرفض","placeholder":"صِف ما يحتاج إلى تغيير...","cancel":"إلغاء","rejecting":"جارٍ الرفض…","confirmReject":"تأكيد الرفض"},"emptyState":{"addProject":"إضافة مشروع","addProjectDescription":"أضف مجلد مشروعك لفتح إمكانية إنشاء الميزات.","addProjectDescriptionLine2":"صِف ما تحتاجه — ShipIT AI يتولى الباقي.","checkingSetup":"جارٍ التحقق من الإعداد…","ready":"{{label}} جاهز","notInstalled":"{{label}} غير مثبت","reCheck":"إعادة التحقق","needsAuth":"{{label}} يحتاج إلى مصادقة","open":"فتح {{label}}","checking":"جارٍ التحقق من {{label}}…","notFound":"{{label}} غير موجود","docs":"التوثيق","opening":"جارٍ الفتح…","chooseFolder":"اختر مجلدًا","folderHint":"أي مجلد يعمل — سيتم تهيئة git تلقائيًا إذا لزم الأمر.","orUseCli":"أو استخدم CLI","copyCommands":"نسخ الأوامر","git":"Git","gitRequired":"مطلوب لجميع المراحل","githubCli":"GitHub CLI","githubCliRequired":"مطلوب لطلبات السحب"},"welcome":{"loadingAgents":"جارٍ تحميل الوكلاء…","chooseAgent":"اختر وكيلك","pickModel":"اختر نموذجًا","selectAgentSubtitle":"اختر وكيل البرمجة بالذكاء الاصطناعي الذي تريد أن يستخدمه ShipIT AI.","chooseModelSubtitle":"اختر نموذج {{label}} المراد تشغيله.","ghCliNotice":"<0>GitHub CLI (gh)</0> مطلوب لإمكانيات الإصلاح الذاتي الكاملة لـ CI/CD. <1>قم بتثبيته من هنا</1>.","ghCliRequired":"GitHub CLI (gh)","ghCliRequiredText":"مطلوب لإمكانيات الإصلاح الذاتي الكاملة لـ CI/CD.","installHere":"قم بتثبيته من هنا","back":"رجوع"},"canvas":{"noFeatures":"لا توجد ميزات بعد","noFeaturesDescription":"ابدأ بإنشاء أول ميزة لك.","newFeature":"ميزة جديدة","hideArchived":"إخفاء المؤرشف","showArchived":"إظهار المؤرشف","hideArchivedLabel":"إخفاء المؤرشف","showArchivedLabel":"إظهار المؤرشف","zoomOut":"تصغير","zoomIn":"تكبير","fitView":"ملاءمة العرض","resetView":"إعادة تعيين العرض"},"common":{"noData":"لا توجد بيانات متاحة","retry":"إعادة المحاولة","saving":"جارٍ الحفظ...","saved":"تم الحفظ","decrease":"تقليل","increase":"زيادة","cancel":"إلغاء"},"featureNode":{"archiveFeature":"أرشفة الميزة","deleteFeature":"حذف الميزة","unarchiveFeature":"إلغاء أرشفة الميزة","archiveConfirmTitle":"أرشفة الميزة؟","archiveConfirmDescription":"<strong>{{name}}</strong> ستُخفى من اللوحة. يمكنك إلغاء أرشفتها لاحقاً.","cancel":"إلغاء","archive":"أرشفة","fastMode":"الوضع السريع","specDriven":"مبني على المواصفات","copied":"تم النسخ!","chatWithAgent":"محادثة مع الوكيل","stopDevServer":"إيقاف الخادم","startDevServer":"تشغيل الخادم","retryDevServer":"إعادة تشغيل الخادم","starting":"جارٍ التشغيل…","retry":"إعادة المحاولة","start":"تشغيل","failed":"فشل","deleting":"جارٍ الحذف…","addFeature":"إضافة ميزة","reviewRequirements":"مراجعة المتطلبات","reviewTechnicalPlan":"مراجعة الخطة التقنية","reviewChanges":"مراجعة التغييرات","review":"مراجعة","creating":"جارٍ الإنشاء...","completedIn":"اكتمل في {{runtime}}","completed":"مكتمل","waitingOn":"بانتظار {{blockedBy}}","blocked":"محظور","pending":"قيد الانتظار","somethingWentWrong":"حدث خطأ ما","openChat":"فتح المحادثة","viewSessions":"عرض الجلسات","sessionsActive":"الجلسات (نشطة)","sessions":"الجلسات","agentSessions":"جلسات الوكيل","noSessionsFound":"لم يتم العثور على جلسات","showLess":"عرض أقل","showMore":"عرض {{count}} إضافية"},"repositoryNode":{"removeRepository":"إزالة المستودع","removeConfirmTitle":"إزالة المستودع؟","removeConfirmDescription":"سيؤدي هذا إلى إزالة <strong>{{name}}</strong> وجميع ميزاته من مساحة العمل. لن تتأثر الملفات على القرص.","cancel":"إلغاء","remove":"إزالة","openInIde":"فتح في IDE","openInShell":"فتح في الطرفية","openFolder":"فتح المجلد","chatWithAgent":"محادثة مع الوكيل","newFeature":"ميزة جديدة","new":"جديد","behind":"{{count}} متأخر","notAGitRepository":"ليس مستودع git","starting":"جارٍ التشغيل...","run":"تشغيل","startLocalEnvironment":"تشغيل البيئة المحلية","stopDevServer":"إيقاف الخادم","startDevServer":"تشغيل الخادم","retry":"إعادة المحاولة"},"fab":{"closeActions":"إغلاق الإجراءات","createNew":"إنشاء جديد","newFeature":"ميزة جديدة","localFolder":"مجلد محلي","adoptBranch":"تبني فرع","fromGithub":"من GitHub"},"chat":{"shipitAiChat":"محادثة ShipIT AI","writeMessage":"اكتب رسالة...","attachFiles":"إرفاق ملفات","forceStopAgent":"إيقاف الوكيل إجبارياً","stop":"إيقاف","clearChatHistory":"مسح سجل المحادثة","clear":"مسح","noSession":"لا توجد جلسة","yourMessage":"رسالتك","agentMessage":"رسالة الوكيل","agentIsTyping":"الوكيل يكتب","showMore":"عرض المزيد","showLess":"عرض أقل","code":"الكود","preview":"معاينة","openFullscreen":"فتح ملء الشاشة","htmlPreview":"معاينة HTML","htmlPreviewFullscreen":"معاينة HTML ملء الشاشة"},"createDrawer":{"title":"ميزة جديدة","creating":"جارٍ الإنشاء...","cancel":"إلغاء","createFeature":"+ إنشاء ميزة","repository":"المستودع","describeFeature":"صِف ميزتك","featurePlaceholder":"مثال: إضافة تسجيل الدخول عبر GitHub OAuth مع معالجة الاستدعاء وتجديد الرمز...","parentFeature":"الميزة الأصلية","selectParent":"اختر الميزة الأصلية...","searchFeatures":"البحث عن ميزات...","noParent":"بدون أصل","noFeaturesFound":"لم يتم العثور على ميزات.","searchRepositories":"البحث عن مستودعات...","approve":"الموافقة","approveDescription":"الموافقة التلقائية على انتقالات المراحل بدون مراجعة يدوية.","skippedInFastMode":"تم التخطي في الوضع السريع","all":"الكل","toggleAllApprovalGates":"تبديل جميع بوابات الموافقة","evidence":"الأدلة","evidenceDescription":"جمع وإرفاق الأدلة بعد التنفيذ.","collect":"جمع","collectDescription":"التقاط لقطات الشاشة والمخرجات بعد التنفيذ.","addToPr":"إضافة إلى PR","requiresPr":"يتطلب تفعيل PR","requiresEvidence":"يتطلب تفعيل جمع الأدلة","addToPrDescription":"تضمين الأدلة في نص طلب السحب.","git":"GIT","push":"دفع","pushDescription":"دفع الفرع إلى الخادم البعيد بعد التنفيذ.","pr":"PR","prDescription":"فتح طلب سحب بعد الدفع.","watch":"مراقبة","watchDescription":"مراقبة CI وإصلاح الأخطاء تلقائياً.","sync":"Sync","syncDescription":"Pull latest main from remote before creating the feature branch.","commitSpecs":"حفظ المواصفات","commitSpecsDescription":"حفظ المواصفات في المستودع.","forkAndPr":"Fork و PR","forkAndPrDescription":"المساهمة عبر fork (PR إلى upstream).","pendingMode":"قيد الانتظار","pendingModeDescription":"إنشاء بدون تشغيل — التشغيل يدوياً لاحقاً.","fastModeLabel":"الوضع السريع","fastModeDescription":"تخطي مراحل SDLC والتنفيذ مباشرة من الأمر.","fileDropZone":"منطقة إسقاط الملفات","prd":"PRD","prdDescription":"الموافقة التلقائية على انتقال المتطلبات إلى التخطيط.","plan":"خطة","planDescription":"الموافقة التلقائية على انتقال التخطيط إلى التنفيذ.","merge":"دمج","mergeDescription":"الموافقة التلقائية على انتقال الدمج إلى مكتمل."},"featureDrawer":{"copyFeatureId":"نسخ معرف الميزة","unarchiveFeature":"إلغاء أرشفة الميزة","archiveFeature":"أرشفة الميزة","deleteFeature":"حذف الميزة","stopDevServer":"إيقاف الخادم","startDevServer":"تشغيل الخادم","failedToReject":"فشل رفض {{label}}","rejected":"تم رفض {{label}} — الوكيل يعيد المحاولة (التكرار {{n}})","excessiveIterations":"التكرار {{n}} — فكر في الموافقة أو تعديل الملاحظات","failedToApprove":"فشل الموافقة على {{label}}","approved":"تمت الموافقة على {{label}} — الوكيل يستأنف","failedToApproveRequirements":"فشل الموافقة على المتطلبات","requirementsApproved":"تمت الموافقة على المتطلبات — الوكيل يستأنف","featureResumed":"تم استئناف الميزة — الوكيل يعيد التشغيل","featureStarted":"تم بدء الميزة","approvePlan":"الموافقة على الخطة","sendRevisionFeedback":"إرسال ملاحظات المراجعة"},"overviewTab":{"created":"تم الإنشاء","runtime":"وقت التنفيذ","runningFor":"قيد التشغيل منذ","blockedBy":"محظور بواسطة","error":"خطأ","prd":"PRD","plan":"خطة","merge":"دمج","collect":"جمع","addToPr":"إضافة إلى PR","push":"دفع","pr":"PR","watch":"مراقبة","commitSpecs":"حفظ المواصفات","forkAndPr":"Fork و PR"},"activityTab":{"copyPromptToClipboard":"نسخ الأمر إلى الحافظة","execution":"التنفيذ","wait":"الانتظار","cost":"التكلفة","noActivityRecorded":"لم يتم تسجيل أي نشاط بعد"},"logTab":{"structuredView":"عرض منظم","rawView":"عرض خام","noLogOutput":"لا يوجد ناتج سجل بعد"},"planTab":{"noPlanCreated":"لم يتم إنشاء خطة بعد"},"branchSyncStatus":{"refreshSyncStatus":"تحديث حالة المزامنة","rebaseOnMain":"Rebase على Main"},"drawerActionBar":{"fileDropZone":"منطقة إسقاط الملفات","askAiToRevise":"اطلب من الذكاء الاصطناعي المراجعة...","attachFiles":"إرفاق ملفات","reject":"رفض","sendRevisionFeedback":"إرسال ملاحظات المراجعة","approve":"موافقة","fileTooLarge":"\\"{{name}}\\" يتجاوز حد 10 ميجابايت","fileTypeNotAllowed":"نوع الملف \\"{{ext}}\\" غير مسموح","uploadFailed":"فشل الرفع"},"taskProgress":{"done":"مكتمل","inProgress":"قيد التنفيذ","review":"قيد المراجعة","todo":"للتنفيذ","noTasksDefined":"لم يتم تحديد مهام بعد"},"repositoryDrawer":{"openInIde":"فتح في IDE","openInShell":"فتح في الطرفية","openFolder":"فتح المجلد","syncMain":"مزامنة Main"},"adoptBranch":{"failedToAdopt":"فشل تبني الفرع","repository":"المستودع","branchName":"اسم الفرع","searchRepositories":"البحث عن مستودعات...","searchBranches":"البحث عن فروع..."},"githubImport":{"title":"استيراد من GitHub","description":"استنساخ مستودع GitHub وإضافته إلى ShipIT AI.","githubUrl":"رابط GitHub","urlPlaceholder":"owner/repo أو https://github.com/owner/repo","searchRepositories":"البحث عن مستودعات..."},"versionBadge":{"version":"الإصدار","branch":"الفرع","commit":"الالتزام","path":"المسار"},"mergeReview":{"download":"تنزيل","dataUnavailable":"بيانات مراجعة الدمج غير متاحة"},"baseDrawer":{"close":"إغلاق","stopDevServer":"إيقاف الخادم","startDevServer":"تشغيل الخادم"},"addRepository":{"addRepository":"إضافة مستودع"},"modelPicker":{"searchPlaceholder":"البحث أو كتابة معرف النموذج…"},"skills":{"searchPlaceholder":"البحث عن مهارات..."},"tools":{"noCategoryTools":"لا توجد أدوات في هذه الفئة."},"accessibility":{"close":"إغلاق","loading":"جارٍ التحميل","send":"إرسال","imageNotes":"ملاحظات الصورة","viewServerLogs":"عرض سجلات الخادم","toggleSidebar":"تبديل الشريط الجانبي"}}')},16986,(a,b,c)=>{b.exports={errors:{notFound:"לא נמצא",unauthorized:"לא מורשה",forbidden:"אסור",internal:"שגיאה פנימית",unknown:"אירעה שגיאה לא ידועה",failedToLoad:"טעינת {{resource}} נכשלה",failedToSave:"שמירת {{resource}} נכשלה"},labels:{save:"שמור",cancel:"ביטול",confirm:"אישור",delete:"מחק",edit:"ערוך",close:"סגור",back:"חזרה",next:"הבא",yes:"כן",no:"לא",enabled:"מופעל",disabled:"מושבת",loading:"טוען...",saving:"שומר...",saved:"נשמר",none:"ללא",default:"ברירת מחדל",custom:"מותאם אישית"},status:{success:"הצלחה",error:"שגיאה",warning:"אזהרה",info:"מידע",pending:"ממתין",inProgress:"בתהליך",completed:"הושלם",failed:"נכשל"},confirmation:{areYouSure:"האם אתה בטוח?",cannotBeUndone:"לא ניתן לבטל פעולה זו."},language:{en:"אנגלית",ru:"רוסית",pt:"פורטוגזית",es:"ספרדית",ar:"ערבית",he:"עברית",fr:"צרפתית",de:"גרמנית"}}},78742,(a,b,c)=>{b.exports=JSON.parse('{"settings":{"title":"הגדרות","saving":"שומר...","saved":"נשמר","failedToSave":"שמירת ההגדרות נכשלה","sections":{"language":"שפה","agent":"סוכן","environment":"סביבה","workflow":"תהליך עבודה","ci":"CI","timeouts":"תפוגות זמן","notifications":"התראות","flags":"דגלים","chat":"צ\'אט","layout":"פריסה","database":"מסד נתונים"},"language":{"title":"שפה","description":"בחר את שפת התצוגה המועדפת שלך","label":"שפת תצוגה","placeholder":"בחר שפה","failedToSave":"שמירת הגדרות השפה נכשלה"},"agent":{"title":"סוכן מועדף","sectionTitle":"סוכן","description":"בחר את סוכן הקידוד ושיטת האימות","sectionDescription":"סוכן קידוד AI ואימות","agentType":"סוג סוכן","agentAndModel":"סוכן ומודל","agentAndModelDescription":"ספק ומודל לכל הפעולות","authMethod":"שיטת אימות","apiToken":"אסימון API","apiTokenPlaceholder":"הזן את אסימון ה-API שלך","apiTokenHelper":"נשמר אוטומטית כאשר אתה עוזב את השדה","failedToSave":"שמירת הגדרות הסוכן נכשלה","hint":"בחר איזה סוכן קידוד AI מפעיל את הפיצ\'רים שלך. כל סוכן תומך במודלים ויכולות שונים. האימות נפתר אוטומטית דרך הסשן הפעיל שלך.","links":{"agentSystem":"מערכת סוכנים","addingAgents":"הוספת סוכנים","configurationGuide":"מדריך הגדרה"}},"environment":{"title":"IDE וטרמינל","sectionTitle":"סביבה","description":"הגדר את העורך, ה-Shell והעדפות הטרמינל שלך","sectionDescription":"עורך, Shell והעדפות טרמינל","defaultEditor":"עורך ברירת מחדל","defaultEditorDescription":"עורך שנפתח לפעולות קבצים","shellPreference":"העדפת Shell","shell":"Shell","shellDescription":"Shell ברירת מחדל לסקריפטים שנוצרו","terminalEmulator":"אמולטור טרמינל","terminal":"טרמינל","terminalDescription":"אמולטור טרמינל לסשנים","systemTerminal":"טרמינל מערכת","installed":"מותקן","notInstalled":"לא מותקן","failedToSave":"שמירת הגדרות IDE וטרמינל נכשלה","hint":"העורך המועדף שלך פותח קבצים לסקירה. הגדרת ה-Shell שולטת בסקריפטים שנוצרו. אמולטור הטרמינל מופעל בעת פתיחת סשנים מממשק ה-Web.","links":{"configurationGuide":"מדריך הגדרה"}},"workflow":{"title":"תהליך עבודה","description":"הגדר התנהגות PR, שערי אישור והגדרות CI","sectionDescription":"התנהגות אוטומציה לאחר מימוש","defaultFastMode":"מצב מהיר כברירת מחדל","defaultFastModeDescription":"דילוג על שלבי SDLC ויישום ישירות מהפרומפט","subsections":{"approve":"אישור","evidence":"ראיות","git":"Git"},"autoApprovePrd":"אישור אוטומטי של PRD","autoApprovePrdDescription":"דלג על סקירה ידנית של דרישות","autoApprovePlan":"אישור אוטומטי של תוכנית","autoApprovePlanDescription":"דלג על סקירה ידנית של תוכנית מימוש","autoApproveMerge":"אישור אוטומטי של מיזוג","autoApproveMergeDescription":"מזג ללא סקירה ידנית","collectEvidence":"אסוף ראיות","collectEvidenceDescription":"צלם מסכים ואסוף ממצאים לאחר מימוש","addEvidenceToPr":"הוסף ראיות ל-PR","addEvidenceToPrDescription":"כלול ראיות בגוף בקשת המשיכה","pushOnComplete":"דחוף בסיום","pushOnCompleteDescription":"דחוף לשרת כאשר המימוש מסתיים","openPrOnComplete":"פתח PR בסיום","openPrOnCompleteDescription":"צור בקשת משיכה בסיום","watchCiAfterPush":"עקוב אחר CI לאחר דחיפה","watchCiAfterPushDescription":"עקוב אחר CI ותקן כשלונות אוטומטית. השבת כדי למנוע חריגה ממגבלות קצב.","approvalGates":"שערי אישור","prdAutoApproval":"אישור אוטומטי של PRD","planAutoApproval":"אישור אוטומטי של תוכנית","mergeAutoApproval":"אישור אוטומטי של מיזוג","ciSettings":"הגדרות CI","ciWatchFixLoop":"לולאת מעקב/תיקון CI","maxFixAttempts":"מספר מרבי של ניסיונות תיקון","watchTimeout":"תפוגת זמן מעקב (שניות)","maxLogCharacters":"מספר מרבי של תווים ביומן","pollInterval":"מרווח בדיקה (שניות)","hideCiStatus":"הסתר סטטוס CI","stageTimeouts":"תפוגות זמן שלבים","failedToSave":"שמירת הגדרות תהליך העבודה נכשלה","hint":"קבע עד כמה כל הרצת פיצ\'ר אוטונומית. אישור אוטומטי מדלג על עצירת הסקירה האנושית בכל שלב. אפשרויות דחיפה ו-PR שולטות במה שקורה לאחר מימוש מוצלח.","links":{"approvalGates":"שערי אישור","pushAndPrFlags":"דגלי דחיפה ו-PR"}},"ci":{"title":"אינטגרציה רציפה","description":"מגבלות ותפוגות זמן למעקב CI","maxFixAttempts":"מספר מרבי של ניסיונות תיקון","maxFixAttemptsDescription":"ניסיונות חוזרים של הסוכן על CI כושל","watchTimeout":"תפוגת זמן מעקב","watchTimeoutDescription":"המתנה מרבית להשלמת CI","maxLogSize":"גודל מרבי ליומן","maxLogSizeDescription":"קטע יומני CI מעבר למגבלה זו","pollInterval":"מרווח בדיקה","pollIntervalDescription":"תדירות בדיקת עדכוני סטטוס CI ב-GitHub","hideCiStatus":"הסתר סטטוס CI","hideCiStatusDescription":"הסתר תגי סטטוס CI ממגירת הפיצ\'ר וסקירת המיזוג","hint":"כאשר פיצ\'ר מסתיים, הסוכן יכול לעקוב אחר CI ולתקן כשלונות אוטומטית. מגבלות אלה מונעות ניסיונות חוזרים בלתי מבוקרים ושולטות בכמות פלט היומן שנשלח לסוכן לניתוח.","links":{"cicdPipeline":"צינור CI/CD","ciSecurityGates":"שערי אבטחת CI"}},"stageTimeouts":{"title":"תפוגות זמן שלבים","description":"זמן ביצוע מרבי לכל שלב סוכן","subsections":{"featureAgent":"סוכן פיצ\'ר","analyzeRepoAgent":"סוכן ניתוח מאגר"},"analyze":"ניתוח","analyzeDescription":"תפוגת זמן ניתוח מאגר","requirements":"דרישות","requirementsDescription":"תפוגת זמן איסוף דרישות","research":"מחקר","researchDescription":"תפוגת זמן מחקר טכני","plan":"תוכנית","planDescription":"תפוגת זמן תכנון מימוש","implement":"מימוש","implementDescription":"תפוגת זמן מימוש קוד","merge":"מיזוג","mergeDescription":"תפוגת זמן יצירת PR ומיזוג","hint":"לכל סוכן תפוגות זמן שלבים מוגדרות באופן עצמאי. כאשר שלב חורג מתפוגת הזמן שלו, הסוכן מופסק. תפוגות זמן ארוכות יותר שימושיות למימושים מורכבים. ברירת המחדל של סוכן פיצ\'ר היא 30 דקות לשלב. ברירת המחדל של סוכן ניתוח מאגר היא 10 דקות."},"notifications":{"title":"התראות","description":"הגדר ערוצי התראה והעדפות אירועים","sectionDescription":"איך ומתי תקבל התראות","channels":"ערוצים","inApp":"באפליקציה","inAppLabel":"באפליקציה","inAppDescription":"התראות בתוך ממשק ShipIT AI","subsections":{"agentEvents":"אירועי סוכן","pullRequestEvents":"אירועי בקשות משיכה"},"events":{"agentStarted":"סוכן הופעל","phaseCompleted":"שלב הושלם","waitingApproval":"ממתין לאישור","agentCompleted":"סוכן סיים","agentFailed":"סוכן נכשל","mergeReviewReady":"סקירת מיזוג מוכנה","prMerged":"PR מוזג","prClosed":"PR נסגר","prChecksPassed":"בדיקות PR עברו","prChecksFailed":"בדיקות PR נכשלו","prBlocked":"PR חסום"},"failedToSave":"שמירת הגדרות ההתראות נכשלה","hint":"התראות טוסט באפליקציה מעדכנות אותך. כוונן אילו אירועי מחזור חיים של סוכן מפעילים התראה.","links":{"notificationSystem":"מערכת התראות"}},"featureFlags":{"title":"דגלי פיצ\'ר","description":"הפעל או השבת תכונות ניסיוניות ובטא","sectionDescription":"הפעל או השבת תכונות ניסיוניות","badge":"ניסיוני","skills":"כישורים","skillsDescription":"הפעל את מערכת הכישורים עבור יכולות הסוכן","deployments":"פריסות","deploymentsDescription":"הפעל תהליכי פריסה לסביבות","debug":"ניפוי שגיאות","debugDescription":"הצג לוחות ניפוי שגיאות ורישום מפורט","githubImport":"ייבוא GitHub","githubImportDescription":"הפעל ייבוא מאגרי GitHub בממשק ה-Web","adoptBranch":"אימוץ ענף","adoptBranchDescription":"ייבא ענפים קיימים כפיצ\'רים מנוטרים","gitRebaseSync":"Git Rebase וסנכרון","gitRebaseSyncDescription":"הפעל פעולות rebase-on-main וסנכרון main ב-Git","reactFileManager":"מנהל קבצים React","reactFileManagerDescription":"השתמש במנהל הקבצים המובנה של React במקום בוחר התיקיות של מערכת ההפעלה","hint":"תכונות ניסיוניות שעדיין בפיתוח. הפעל על אחריותך — הן עשויות להשתנות או להיות מוסרות בגרסאות עתידיות. מצב ניפוי שגיאות מוסיף רישום מפורט שימושי לפתרון בעיות."},"interactiveAgent":{"title":"סוכן אינטראקטיבי","description":"הגדרות לשונית צ\'אט עבור סשנים אינטראקטיביים של סוכן לכל פיצ\'ר","enableChatTab":"הפעל לשונית צ\'אט","enableChatTabDescription":"הצג את לשונית הצ\'אט בכל עמודי פרטי הפיצ\'ר","autoTimeout":"תפוגת זמן אוטומטית","autoTimeoutDescription":"דקות חוסר פעילות לפני עצירת הסוכן אוטומטית (1-120)","maxConcurrentSessions":"מספר מרבי של סשנים מקבילים","maxConcurrentSessionsDescription":"מספר מרבי של סשנים אינטראקטיביים פעילים בו-זמנית (1-10)","hint":"לשונית הצ\'אט מפעילה תהליך סוכן מתמשך לכל פיצ\'ר. תפוגת זמן אוטומטית עוצרת סשנים לא פעילים כדי לחסוך במשאבים. מגבלת הסשנים המקבילים מונעת שימוש מופרז במשאבים על מכונות מפתחים."},"fabLayout":{"title":"פריסה","description":"שליטה במיקום כפתורי הפעולה הצפים במרכז הבקרה","swapPosition":"החלפת מיקומי כפתורים צפים","swapPositionDescription":"העברת כפתור הצ\'אט לשמאל וכפתור היצירה לימין","hint":"שני כפתורי הפעולה הצפים (יצירה וצ\'אט) נמצאים בפינות התחתונות של מרכז הבקרה. הפעל את האפשרות הזו כדי להחליף את מיקומיהם."},"database":{"title":"מסד נתונים","description":"נתיב מסד הנתונים וניהול","sectionDescription":"מידע אחסון מקומי","location":"מיקום","locationDescription":"נתיב למסד הנתונים המקומי SQLite","size":"גודל","hint":"כל ההגדרות מאוחסנות במסד נתונים מקומי SQLite ב-~/.shipit-ai/data. מסד הנתונים משתמש בדפוס רשומה יחידה עם מיגרציות אוטומטיות בהפעלה.","links":{"settingsService":"שירות הגדרות","settingsSpec":"מפרט הגדרות"}}},"navigation":{"controlCenter":"מרכז בקרה","dashboard":"לוח בקרה","features":"פיצ\'רים","repositories":"מאגרים","settings":"הגדרות","sessions":"סשנים","tools":"כלים","skills":"כישורים"},"sidebar":{"features":"פיצ\'רים","switchToLight":"מצב בהיר","switchToDark":"מצב כהה","muteSounds":"השתק צלילים","unmuteSounds":"בטל השתקת צלילים","statusActionNeeded":"נדרשת פעולה","statusInProgress":"בתהליך","statusPending":"ממתין","statusBlocked":"חסום","statusError":"שגיאה","statusDone":"הושלם"},"deleteFeature":{"title":"למחוק פיצ\'ר?","description":"פעולה זו תמחק לצמיתות את <strong>{{featureName}}</strong> ({{featureId}}). לא ניתן לבטל פעולה זו.","cleanupLabel":"נקה עץ עבודה וענפים","deleteSubFeatures":"מחק תת-פיצ\'רים","closePullRequest":"סגור בקשת משיכה","cancel":"ביטול","deleting":"מוחק…","delete":"מחק"},"rejectFeedback":{"defaultTitle":"דחה דרישות","defaultDescription":"ספק משוב לסוכן לטיפול בחזרה הבאה. נדרש משוב.","ariaLabel":"משוב דחייה","placeholder":"תאר מה צריך לשנות...","cancel":"ביטול","rejecting":"דוחה…","confirmReject":"אשר דחייה"},"emptyState":{"addProject":"הוסף פרויקט","addProjectDescription":"הוסף את תיקיית הפרויקט שלך כדי לאפשר יצירת פיצ\'רים.","addProjectDescriptionLine2":"תאר מה אתה צריך — ShipIT AI מטפל בשאר.","checkingSetup":"בודק הגדרה…","ready":"{{label}} מוכן","notInstalled":"{{label}} לא מותקן","reCheck":"בדוק שוב","needsAuth":"{{label}} דורש אימות","open":"פתח {{label}}","checking":"בודק {{label}}…","notFound":"{{label}} לא נמצא","docs":"תיעוד","opening":"פותח…","chooseFolder":"בחר תיקייה","folderHint":"כל תיקייה מתאימה — Git יאותחל אוטומטית אם צריך.","orUseCli":"או השתמש ב-CLI","copyCommands":"העתק פקודות","git":"Git","gitRequired":"נדרש לכל השלבים","githubCli":"GitHub CLI","githubCliRequired":"נדרש לבקשות משיכה"},"welcome":{"loadingAgents":"טוען סוכנים…","chooseAgent":"בחר את הסוכן שלך","pickModel":"בחר מודל","selectAgentSubtitle":"בחר את סוכן הקידוד AI שתרצה ש-ShipIT AI ישתמש בו.","chooseModelSubtitle":"בחר איזה מודל {{label}} להריץ.","ghCliNotice":"<0>GitHub CLI (gh)</0> נדרש ליכולות ריפוי עצמי מלאות של CI/CD. <1>התקן אותו כאן</1>.","ghCliRequired":"GitHub CLI (gh)","ghCliRequiredText":"נדרש ליכולות ריפוי עצמי מלאות של CI/CD.","installHere":"התקן אותו כאן","back":"חזרה"},"canvas":{"noFeatures":"אין פיצ\'רים עדיין","noFeaturesDescription":"התחל ביצירת הפיצ\'ר הראשון שלך.","newFeature":"פיצ\'ר חדש","hideArchived":"הסתר מאורכבים","showArchived":"הצג מאורכבים","hideArchivedLabel":"הסתר מאורכבים","showArchivedLabel":"הצג מאורכבים","zoomOut":"הקטן","zoomIn":"הגדל","fitView":"התאם לתצוגה","resetView":"אפס תצוגה"},"common":{"noData":"אין נתונים זמינים","retry":"נסה שוב","saving":"שומר...","saved":"נשמר","decrease":"הקטן","increase":"הגדל","cancel":"ביטול"},"featureNode":{"archiveFeature":"ארכיון פיצ\'ר","deleteFeature":"מחיקת פיצ\'ר","unarchiveFeature":"שחזור מארכיון","archiveConfirmTitle":"לארכב פיצ\'ר?","archiveConfirmDescription":"<strong>{{name}}</strong> יוסתר מהקנבס. ניתן לשחזר אותו מאוחר יותר.","cancel":"ביטול","archive":"ארכיון","fastMode":"מצב מהיר","specDriven":"מבוסס מפרט","copied":"הועתק!","chatWithAgent":"צ\'אט עם הסוכן","stopDevServer":"עצירת שרת","startDevServer":"הפעלת שרת","retryDevServer":"הפעלה מחדש של שרת","starting":"מפעיל…","retry":"ניסיון חוזר","start":"הפעלה","failed":"נכשל","deleting":"מוחק…","addFeature":"הוספת פיצ\'ר","reviewRequirements":"סקירת דרישות","reviewTechnicalPlan":"סקירת תוכנית טכנית","reviewChanges":"סקירת שינויים","review":"סקירה","creating":"יוצר...","completedIn":"הושלם ב-{{runtime}}","completed":"הושלם","waitingOn":"ממתין ל-{{blockedBy}}","blocked":"חסום","pending":"ממתין","somethingWentWrong":"משהו השתבש","openChat":"פתיחת צ\'אט","viewSessions":"צפייה בהפעלות","sessionsActive":"הפעלות (פעילות)","sessions":"הפעלות","agentSessions":"הפעלות סוכן","noSessionsFound":"לא נמצאו הפעלות","showLess":"הצג פחות","showMore":"הצג עוד {{count}}"},"repositoryNode":{"removeRepository":"הסרת מאגר","removeConfirmTitle":"להסיר מאגר?","removeConfirmDescription":"פעולה זו תסיר את <strong>{{name}}</strong> ואת כל הפיצ\'רים שלו מסביבת העבודה. הקבצים על הדיסק לא ייפגעו.","cancel":"ביטול","remove":"הסרה","openInIde":"פתיחה ב-IDE","openInShell":"פתיחה בטרמינל","openFolder":"פתיחת תיקייה","chatWithAgent":"צ\'אט עם הסוכן","newFeature":"פיצ\'ר חדש","new":"חדש","behind":"{{count}} מאחור","notAGitRepository":"לא מאגר git","starting":"מפעיל...","run":"הפעלה","startLocalEnvironment":"הפעלת סביבה מקומית","stopDevServer":"עצירת שרת","startDevServer":"הפעלת שרת","retry":"ניסיון חוזר"},"fab":{"closeActions":"סגירת פעולות","createNew":"יצירה חדשה","newFeature":"פיצ\'ר חדש","localFolder":"תיקייה מקומית","adoptBranch":"אימוץ ענף","fromGithub":"מ-GitHub"},"chat":{"shipitAiChat":"צ\'אט ShipIT AI","writeMessage":"כתוב הודעה...","attachFiles":"צירוף קבצים","forceStopAgent":"עצירת סוכן בכוח","stop":"עצירה","clearChatHistory":"ניקוי היסטוריית צ\'אט","clear":"ניקוי","noSession":"אין הפעלה","yourMessage":"ההודעה שלך","agentMessage":"הודעת הסוכן","agentIsTyping":"הסוכן מקליד","showMore":"הצג עוד","showLess":"הצג פחות","code":"קוד","preview":"תצוגה מקדימה","openFullscreen":"פתיחה במסך מלא","htmlPreview":"תצוגה מקדימה HTML","htmlPreviewFullscreen":"תצוגה מקדימה HTML מסך מלא"},"createDrawer":{"title":"פיצ\'ר חדש","creating":"יוצר...","cancel":"ביטול","createFeature":"+ יצירת פיצ\'ר","repository":"מאגר","describeFeature":"תאר את הפיצ\'ר שלך","featurePlaceholder":"לדוגמה: הוספת התחברות GitHub OAuth עם טיפול בהחזרה וחידוש טוקן...","parentFeature":"פיצ\'ר הורה","selectParent":"בחר פיצ\'ר הורה...","searchFeatures":"חיפוש פיצ\'רים...","noParent":"ללא הורה","noFeaturesFound":"לא נמצאו פיצ\'רים.","searchRepositories":"חיפוש מאגרים...","approve":"אישור","approveDescription":"אישור אוטומטי של מעברי שלב ללא בדיקה ידנית.","skippedInFastMode":"דולג במצב מהיר","all":"הכל","toggleAllApprovalGates":"החלפת כל שערי האישור","evidence":"ראיות","evidenceDescription":"איסוף וצירוף ראיות לאחר היישום.","collect":"איסוף","collectDescription":"צילום מסכים ושמירת ארטיפקטים לאחר היישום.","addToPr":"הוספה ל-PR","requiresPr":"דורש PR מופעל","requiresEvidence":"דורש איסוף ראיות מופעל","addToPrDescription":"הכללת ראיות בגוף בקשת המשיכה.","git":"GIT","push":"דחיפה","pushDescription":"דחיפת ענף לשרת מרוחק לאחר היישום.","pr":"PR","prDescription":"פתיחת בקשת משיכה לאחר הדחיפה.","watch":"מעקב","watchDescription":"מעקב אחר CI ותיקון שגיאות אוטומטי.","sync":"Sync","syncDescription":"Pull latest main from remote before creating the feature branch.","commitSpecs":"שמירת מפרטים","commitSpecsDescription":"שמירת מפרטים למאגר.","forkAndPr":"Fork ו-PR","forkAndPrDescription":"תרומה דרך fork (PR ל-upstream).","pendingMode":"ממתין","pendingModeDescription":"יצירה ללא הפעלה — הפעלה ידנית מאוחר יותר.","fastModeLabel":"מצב מהיר","fastModeDescription":"דילוג על שלבי SDLC ויישום ישירות מהפרומפט.","fileDropZone":"אזור שחרור קבצים","prd":"PRD","prdDescription":"אישור אוטומטי של מעבר דרישות לתכנון.","plan":"תוכנית","planDescription":"אישור אוטומטי של מעבר תכנון ליישום.","merge":"מיזוג","mergeDescription":"אישור אוטומטי של מעבר מיזוג להשלמה."},"featureDrawer":{"copyFeatureId":"העתקת מזהה פיצ\'ר","unarchiveFeature":"שחזור מארכיון","archiveFeature":"ארכיון פיצ\'ר","deleteFeature":"מחיקת פיצ\'ר","stopDevServer":"עצירת שרת","startDevServer":"הפעלת שרת","failedToReject":"דחייה של {{label}} נכשלה","rejected":"{{label}} נדחה — הסוכן חוזר על התהליך (איטרציה {{n}})","excessiveIterations":"איטרציה {{n}} — שקול אישור או התאמת המשוב","failedToApprove":"אישור {{label}} נכשל","approved":"{{label}} אושר — הסוכן ממשיך","failedToApproveRequirements":"אישור הדרישות נכשל","requirementsApproved":"הדרישות אושרו — הסוכן ממשיך","featureResumed":"הפיצ\'ר חודש — הסוכן מופעל מחדש","featureStarted":"הפיצ\'ר הופעל","approvePlan":"אישור תוכנית","sendRevisionFeedback":"שליחת משוב לתיקון"},"overviewTab":{"created":"נוצר","runtime":"זמן ריצה","runningFor":"פועל מזה","blockedBy":"חסום על ידי","error":"שגיאה","prd":"PRD","plan":"תוכנית","merge":"מיזוג","collect":"איסוף","addToPr":"הוספה ל-PR","push":"דחיפה","pr":"PR","watch":"מעקב","commitSpecs":"שמירת מפרטים","forkAndPr":"Fork ו-PR"},"activityTab":{"copyPromptToClipboard":"העתקת פרומפט ללוח","execution":"ביצוע","wait":"המתנה","cost":"עלות","noActivityRecorded":"לא נרשמה פעילות עדיין"},"logTab":{"structuredView":"תצוגה מובנית","rawView":"תצוגה גולמית","noLogOutput":"אין פלט יומן עדיין"},"planTab":{"noPlanCreated":"טרם נוצרה תוכנית"},"branchSyncStatus":{"refreshSyncStatus":"רענון מצב סנכרון","rebaseOnMain":"Rebase על Main"},"drawerActionBar":{"fileDropZone":"אזור שחרור קבצים","askAiToRevise":"בקש מה-AI לתקן...","attachFiles":"צירוף קבצים","reject":"דחייה","sendRevisionFeedback":"שליחת משוב לתיקון","approve":"אישור","fileTooLarge":"\\"{{name}}\\" חורג ממגבלת 10 MB","fileTypeNotAllowed":"סוג קובץ \\"{{ext}}\\" אינו מותר","uploadFailed":"ההעלאה נכשלה"},"taskProgress":{"done":"הושלם","inProgress":"בביצוע","review":"בסקירה","todo":"לביצוע","noTasksDefined":"טרם הוגדרו משימות"},"repositoryDrawer":{"openInIde":"פתיחה ב-IDE","openInShell":"פתיחה בטרמינל","openFolder":"פתיחת תיקייה","syncMain":"סנכרון Main"},"adoptBranch":{"failedToAdopt":"אימוץ הענף נכשל","repository":"מאגר","branchName":"שם ענף","searchRepositories":"חיפוש מאגרים...","searchBranches":"חיפוש ענפים..."},"githubImport":{"title":"ייבוא מ-GitHub","description":"שכפול מאגר GitHub והוספתו ל-ShipIT AI.","githubUrl":"כתובת GitHub","urlPlaceholder":"owner/repo או https://github.com/owner/repo","searchRepositories":"חיפוש מאגרים..."},"versionBadge":{"version":"גרסה","branch":"ענף","commit":"קומיט","path":"נתיב"},"mergeReview":{"download":"הורדה","dataUnavailable":"נתוני סקירת מיזוג אינם זמינים"},"baseDrawer":{"close":"סגירה","stopDevServer":"עצירת שרת","startDevServer":"הפעלת שרת"},"addRepository":{"addRepository":"הוספת מאגר"},"modelPicker":{"searchPlaceholder":"חיפוש או הקלדת מזהה מודל…"},"skills":{"searchPlaceholder":"חיפוש כישורים..."},"tools":{"noCategoryTools":"אין כלים בקטגוריה זו."},"accessibility":{"close":"סגירה","loading":"טוען","send":"שליחה","imageNotes":"הערות לתמונה","viewServerLogs":"צפייה ביומני שרת","toggleSidebar":"החלפת סרגל צד"}}')},55444,(a,b,c)=>{b.exports={errors:{notFound:"Introuvable",unauthorized:"Non autorisé",forbidden:"Interdit",internal:"Erreur interne",unknown:"Une erreur inconnue s'est produite",failedToLoad:"Échec du chargement de {{resource}}",failedToSave:"Échec de l'enregistrement de {{resource}}"},labels:{save:"Enregistrer",cancel:"Annuler",confirm:"Confirmer",delete:"Supprimer",edit:"Modifier",close:"Fermer",back:"Retour",next:"Suivant",yes:"Oui",no:"Non",enabled:"Activé",disabled:"Désactivé",loading:"Chargement...",saving:"Enregistrement...",saved:"Enregistré",none:"Aucun",default:"Par défaut",custom:"Personnalisé"},status:{success:"Succès",error:"Erreur",warning:"Avertissement",info:"Info",pending:"En attente",inProgress:"En cours",completed:"Terminé",failed:"Échoué"},confirmation:{areYouSure:"Êtes-vous sûr ?",cannotBeUndone:"Cette action est irréversible."},language:{en:"Anglais",ru:"Russe",pt:"Portugais",es:"Espagnol",ar:"Arabe",he:"Hébreu",fr:"Français",de:"Allemand"}}},32886,(a,b,c)=>{b.exports=JSON.parse('{"settings":{"title":"Paramètres","saving":"Enregistrement...","saved":"Enregistré","failedToSave":"Échec de l\'enregistrement des paramètres","sections":{"language":"Langue","agent":"Agent","environment":"Environnement","workflow":"Workflow","ci":"CI","timeouts":"Délais d\'attente","notifications":"Notifications","flags":"Drapeaux","chat":"Chat","layout":"Disposition","database":"Base de données"},"language":{"title":"Langue","description":"Choisissez votre langue d\'affichage préférée","label":"Langue d\'affichage","placeholder":"Sélectionnez une langue","failedToSave":"Échec de l\'enregistrement des paramètres de langue"},"agent":{"title":"Agent préféré","sectionTitle":"Agent","description":"Choisissez votre agent de codage IA et votre méthode d\'authentification","sectionDescription":"Agent de codage IA et authentification","agentType":"Type d\'agent","agentAndModel":"Agent et modèle","agentAndModelDescription":"Fournisseur et modèle pour toutes les opérations","authMethod":"Méthode d\'authentification","apiToken":"Jeton API","apiTokenPlaceholder":"Entrez votre jeton API","apiTokenHelper":"Enregistré automatiquement lorsque vous quittez le champ","failedToSave":"Échec de l\'enregistrement des paramètres de l\'agent","hint":"Choisissez quel agent de codage IA alimente vos fonctionnalités. Chaque agent prend en charge différents modèles et capacités. L\'authentification est résolue automatiquement via votre session active.","links":{"agentSystem":"Système d\'agent","addingAgents":"Ajout d\'agents","configurationGuide":"Guide de configuration"}},"environment":{"title":"IDE et terminal","sectionTitle":"Environnement","description":"Configurez votre éditeur, shell et préférences de terminal par défaut","sectionDescription":"Éditeur, shell et préférences de terminal","defaultEditor":"Éditeur par défaut","defaultEditorDescription":"Éditeur lancé pour les opérations sur les fichiers","shellPreference":"Préférence de shell","shell":"Shell","shellDescription":"Shell par défaut pour les scripts générés","terminalEmulator":"Émulateur de terminal","terminal":"Terminal","terminalDescription":"Émulateur de terminal pour les sessions shell","systemTerminal":"Terminal système","installed":"Installé","notInstalled":"Non installé","failedToSave":"Échec de l\'enregistrement des paramètres IDE et terminal","hint":"Votre éditeur préféré ouvre les fichiers pour examen. Le paramètre shell contrôle les scripts générés. L\'émulateur de terminal est lancé lors de l\'ouverture de sessions shell depuis l\'interface web.","links":{"configurationGuide":"Guide de configuration"}},"workflow":{"title":"Workflow","description":"Configurez le comportement des PR, les portes d\'approbation et les paramètres CI","sectionDescription":"Comportement d\'automatisation après l\'implémentation","defaultFastMode":"Mode rapide par défaut","defaultFastModeDescription":"Ignorer les phases SDLC et implémenter directement depuis le prompt","subsections":{"approve":"Approuver","evidence":"Preuves","git":"Git"},"autoApprovePrd":"Approbation auto du PRD","autoApprovePrdDescription":"Ignorer la revue manuelle des exigences","autoApprovePlan":"Approbation auto du plan","autoApprovePlanDescription":"Ignorer la revue manuelle du plan d\'implémentation","autoApproveMerge":"Approbation auto de la fusion","autoApproveMergeDescription":"Fusionner sans revue manuelle","collectEvidence":"Collecter les preuves","collectEvidenceDescription":"Capturer des captures d\'écran et des artefacts après l\'implémentation","addEvidenceToPr":"Ajouter les preuves à la PR","addEvidenceToPrDescription":"Inclure les preuves dans le corps de la pull request","pushOnComplete":"Pousser à la fin","pushOnCompleteDescription":"Pousser vers le distant lorsque l\'implémentation est terminée","openPrOnComplete":"Ouvrir une PR à la fin","openPrOnCompleteDescription":"Créer une pull request une fois terminé","watchCiAfterPush":"Surveiller la CI après le push","watchCiAfterPushDescription":"Surveiller la CI et corriger automatiquement les échecs. Désactivez pour éviter les limites de débit.","approvalGates":"Portes d\'approbation","prdAutoApproval":"Approbation auto du PRD","planAutoApproval":"Approbation auto du plan","mergeAutoApproval":"Approbation auto de la fusion","ciSettings":"Paramètres CI","ciWatchFixLoop":"Boucle surveillance/correction CI","maxFixAttempts":"Tentatives de correction max","watchTimeout":"Délai de surveillance (secondes)","maxLogCharacters":"Caractères de journal max","pollInterval":"Intervalle de sondage (secondes)","hideCiStatus":"Masquer le statut CI","stageTimeouts":"Délais par étape","failedToSave":"Échec de l\'enregistrement des paramètres de workflow","hint":"Contrôlez le niveau d\'autonomie de chaque exécution de fonctionnalité. L\'approbation automatique ignore la pause de revue humaine à chaque phase. Les options push et PR contrôlent ce qui se passe après une implémentation réussie.","links":{"approvalGates":"Portes d\'approbation","pushAndPrFlags":"Drapeaux push et PR"}},"ci":{"title":"Intégration continue","description":"Limites et délais pour la surveillance CI","maxFixAttempts":"Tentatives de correction max","maxFixAttemptsDescription":"Tentatives de l\'agent sur un échec CI","watchTimeout":"Délai de surveillance","watchTimeoutDescription":"Attente maximale pour la fin de la CI","maxLogSize":"Taille max des journaux","maxLogSizeDescription":"Tronquer les journaux CI au-delà de cette limite","pollInterval":"Intervalle de sondage","pollIntervalDescription":"Fréquence de vérification du statut CI sur GitHub","hideCiStatus":"Masquer le statut CI","hideCiStatusDescription":"Masquer les badges de statut CI dans le tiroir de fonctionnalité et la revue de fusion","hint":"Lorsqu\'une fonctionnalité est terminée, l\'agent peut surveiller la CI et corriger automatiquement les échecs. Ces limites empêchent les tentatives incontrôlées et contrôlent la quantité de sortie de journal envoyée à l\'agent pour analyse.","links":{"cicdPipeline":"Pipeline CI/CD","ciSecurityGates":"Portes de sécurité CI"}},"stageTimeouts":{"title":"Délais par étape","description":"Temps d\'exécution maximum par étape d\'agent","subsections":{"featureAgent":"Agent de fonctionnalité","analyzeRepoAgent":"Agent d\'analyse de dépôt"},"analyze":"Analyser","analyzeDescription":"Délai d\'analyse du dépôt","requirements":"Exigences","requirementsDescription":"Délai de collecte des exigences","research":"Recherche","researchDescription":"Délai de recherche technique","plan":"Plan","planDescription":"Délai de planification de l\'implémentation","implement":"Implémenter","implementDescription":"Délai d\'implémentation du code","merge":"Fusion","mergeDescription":"Délai de création et fusion de PR","hint":"Chaque agent a des délais par étape configurables indépendamment. Lorsqu\'une étape dépasse son délai, l\'agent est terminé. Des délais plus longs sont utiles pour les implémentations complexes. L\'agent de fonctionnalité a un délai par défaut de 30 minutes par étape. L\'agent d\'analyse de dépôt a un délai par défaut de 10 minutes."},"notifications":{"title":"Notifications","description":"Configurez les canaux de notification et les préférences d\'événements","sectionDescription":"Comment et quand vous êtes notifié","channels":"Canaux","inApp":"Dans l\'application","inAppLabel":"Dans l\'application","inAppDescription":"Notifications dans l\'interface ShipIT AI","subsections":{"agentEvents":"Événements d\'agent","pullRequestEvents":"Événements de pull request"},"events":{"agentStarted":"Agent démarré","phaseCompleted":"Phase terminée","waitingApproval":"En attente d\'approbation","agentCompleted":"Agent terminé","agentFailed":"Agent en échec","mergeReviewReady":"Revue de fusion prête","prMerged":"PR fusionnée","prClosed":"PR fermée","prChecksPassed":"Vérifications PR réussies","prChecksFailed":"Vérifications PR échouées","prBlocked":"PR bloquée"},"failedToSave":"Échec de l\'enregistrement des paramètres de notification","hint":"Les notifications toast dans l\'application vous tiennent informé. Ajustez finement quels événements du cycle de vie de l\'agent déclenchent une notification.","links":{"notificationSystem":"Système de notification"}},"featureFlags":{"title":"Drapeaux de fonctionnalité","description":"Activer ou désactiver les fonctionnalités expérimentales et bêta","sectionDescription":"Activer ou désactiver les fonctionnalités expérimentales","badge":"Expérimental","skills":"Compétences","skillsDescription":"Activer le système de compétences pour les capacités de l\'agent","deployments":"Déploiements","deploymentsDescription":"Activer les workflows de déploiement d\'environnement","debug":"Débogage","debugDescription":"Afficher les panneaux de débogage et la journalisation détaillée","githubImport":"Import GitHub","githubImportDescription":"Activer l\'import de dépôts GitHub dans l\'interface web","adoptBranch":"Adopter une branche","adoptBranchDescription":"Importer des branches existantes comme fonctionnalités suivies","gitRebaseSync":"Git Rebase et synchronisation","gitRebaseSyncDescription":"Activer les opérations de rebase-on-main et sync-main de git","reactFileManager":"Gestionnaire de fichiers React","reactFileManagerDescription":"Utiliser le gestionnaire de fichiers React intégré au lieu du sélecteur de dossier natif du système","hint":"Fonctionnalités expérimentales encore en cours de développement. Activez à vos risques et périls — elles peuvent changer ou être supprimées dans les versions futures. Le mode débogage ajoute une journalisation détaillée utile pour le dépannage."},"interactiveAgent":{"title":"Agent interactif","description":"Paramètres de l\'onglet Chat pour les sessions d\'agent interactif par fonctionnalité","enableChatTab":"Activer l\'onglet Chat","enableChatTabDescription":"Afficher l\'onglet Chat sur toutes les pages de détail de fonctionnalité","autoTimeout":"Délai d\'inactivité automatique","autoTimeoutDescription":"Minutes d\'inactivité avant l\'arrêt automatique de l\'agent (1-120)","maxConcurrentSessions":"Sessions simultanées max","maxConcurrentSessionsDescription":"Nombre maximum de sessions d\'agent interactif actives simultanément (1-10)","hint":"L\'onglet Chat lance un processus d\'agent persistant par fonctionnalité. Le délai d\'inactivité automatique arrête les sessions inactives pour économiser les ressources. Le plafond de sessions simultanées empêche l\'utilisation incontrôlée des ressources sur les machines de développement."},"fabLayout":{"title":"Disposition","description":"Contrôler la position des boutons d\'action flottants dans le centre de contrôle","swapPosition":"Inverser les positions des FAB","swapPositionDescription":"Déplacer le bouton Chat à gauche et le bouton Créer à droite","hint":"Les deux boutons d\'action flottants (Créer et Chat) se trouvent dans les coins inférieurs du centre de contrôle. Activez cette option pour inverser leurs positions."},"database":{"title":"Base de données","description":"Chemin et gestion de la base de données","sectionDescription":"Informations de stockage local","location":"Emplacement","locationDescription":"Chemin vers la base de données SQLite locale","size":"Taille","hint":"Tous les paramètres sont stockés dans une base de données SQLite locale dans ~/.shipit-ai/data. La base de données utilise un modèle d\'enregistrement singleton avec des migrations automatiques au démarrage.","links":{"settingsService":"Service de paramètres","settingsSpec":"Spécification des paramètres"}}},"navigation":{"controlCenter":"Centre de contrôle","dashboard":"Tableau de bord","features":"Fonctionnalités","repositories":"Dépôts","settings":"Paramètres","sessions":"Sessions","tools":"Outils","skills":"Compétences"},"sidebar":{"features":"Fonctionnalités","switchToLight":"Mode clair","switchToDark":"Mode sombre","muteSounds":"Couper les sons","unmuteSounds":"Activer les sons","statusActionNeeded":"Action requise","statusInProgress":"En cours","statusPending":"En attente","statusBlocked":"Bloqué","statusError":"Erreur","statusDone":"Terminé"},"deleteFeature":{"title":"Supprimer la fonctionnalité ?","description":"Cela supprimera définitivement <strong>{{featureName}}</strong> ({{featureId}}). Cette action est irréversible.","cleanupLabel":"Nettoyer le worktree et les branches","deleteSubFeatures":"Supprimer les sous-fonctionnalités","closePullRequest":"Fermer la pull request","cancel":"Annuler","deleting":"Suppression…","delete":"Supprimer"},"rejectFeedback":{"defaultTitle":"Rejeter les exigences","defaultDescription":"Fournissez un retour pour que l\'agent puisse y répondre lors de la prochaine itération. Le retour est obligatoire.","ariaLabel":"Retour de rejet","placeholder":"Décrivez ce qui doit changer...","cancel":"Annuler","rejecting":"Rejet en cours…","confirmReject":"Confirmer le rejet"},"emptyState":{"addProject":"Ajouter un projet","addProjectDescription":"Ajoutez votre dossier de projet pour débloquer la création de fonctionnalités.","addProjectDescriptionLine2":"Décrivez ce dont vous avez besoin — ShipIT AI s\'occupe du reste.","checkingSetup":"Vérification de la configuration…","ready":"{{label}} prêt","notInstalled":"{{label}} non installé","reCheck":"Revérifier","needsAuth":"{{label}} nécessite une authentification","open":"Ouvrir {{label}}","checking":"Vérification de {{label}}…","notFound":"{{label}} introuvable","docs":"Documentation","opening":"Ouverture…","chooseFolder":"Choisir un dossier","folderHint":"N\'importe quel dossier fonctionne — git sera initialisé automatiquement si nécessaire.","orUseCli":"ou utilisez le CLI","copyCommands":"Copier les commandes","git":"Git","gitRequired":"Requis pour toutes les phases","githubCli":"GitHub CLI","githubCliRequired":"Requis pour les pull requests"},"welcome":{"loadingAgents":"Chargement des agents…","chooseAgent":"Choisissez votre agent","pickModel":"Choisissez un modèle","selectAgentSubtitle":"Sélectionnez l\'agent de codage IA que vous souhaitez que ShipIT AI utilise.","chooseModelSubtitle":"Choisissez quel modèle {{label}} exécuter.","ghCliNotice":"<0>GitHub CLI (gh)</0> est requis pour les capacités complètes d\'auto-réparation CI/CD. <1>Installez-le ici</1>.","ghCliRequired":"GitHub CLI (gh)","ghCliRequiredText":"est requis pour les capacités complètes d\'auto-réparation CI/CD.","installHere":"Installez-le ici","back":"Retour"},"canvas":{"noFeatures":"Aucune fonctionnalité pour l\'instant","noFeaturesDescription":"Commencez par créer votre première fonctionnalité.","newFeature":"Nouvelle fonctionnalité","hideArchived":"Masquer les archivées","showArchived":"Afficher les archivées","hideArchivedLabel":"Masquer les archivées","showArchivedLabel":"Afficher les archivées","zoomOut":"Dézoomer","zoomIn":"Zoomer","fitView":"Ajuster la vue","resetView":"Réinitialiser la vue"},"common":{"noData":"Aucune donnée disponible","retry":"Réessayer","saving":"Enregistrement...","saved":"Enregistré","decrease":"Diminuer","increase":"Augmenter","cancel":"Annuler"},"featureNode":{"archiveFeature":"Archiver la fonctionnalité","deleteFeature":"Supprimer la fonctionnalité","unarchiveFeature":"Désarchiver la fonctionnalité","archiveConfirmTitle":"Archiver la fonctionnalité ?","archiveConfirmDescription":"<strong>{{name}}</strong> sera masquée du canvas. Vous pourrez la désarchiver plus tard.","cancel":"Annuler","archive":"Archiver","fastMode":"Mode rapide","specDriven":"Basé sur les spécifications","copied":"Copié !","chatWithAgent":"Chat avec l\'agent","stopDevServer":"Arrêter le serveur","startDevServer":"Démarrer le serveur","retryDevServer":"Relancer le serveur","starting":"Démarrage…","retry":"Réessayer","start":"Démarrer","failed":"Échec","deleting":"Suppression…","addFeature":"Ajouter une fonctionnalité","reviewRequirements":"Vérifier les exigences","reviewTechnicalPlan":"Vérifier le plan technique","reviewChanges":"Vérifier les modifications","review":"Vérification","creating":"Création...","completedIn":"Terminé en {{runtime}}","completed":"Terminé","waitingOn":"En attente de {{blockedBy}}","blocked":"Bloqué","pending":"En attente","somethingWentWrong":"Une erreur est survenue","openChat":"Ouvrir le chat","viewSessions":"Voir les sessions","sessionsActive":"Sessions (actives)","sessions":"Sessions","agentSessions":"Sessions de l\'agent","noSessionsFound":"Aucune session trouvée","showLess":"Afficher moins","showMore":"Afficher {{count}} de plus"},"repositoryNode":{"removeRepository":"Supprimer le dépôt","removeConfirmTitle":"Supprimer le dépôt ?","removeConfirmDescription":"Cela supprimera <strong>{{name}}</strong> et toutes ses fonctionnalités de l\'espace de travail. Les fichiers sur le disque ne seront pas affectés.","cancel":"Annuler","remove":"Supprimer","openInIde":"Ouvrir dans l\'IDE","openInShell":"Ouvrir dans le terminal","openFolder":"Ouvrir le dossier","chatWithAgent":"Chat avec l\'agent","newFeature":"Nouvelle fonctionnalité","new":"Nouveau","behind":"{{count}} en retard","notAGitRepository":"N\'est pas un dépôt git","starting":"Démarrage...","run":"Exécuter","startLocalEnvironment":"démarrer l\'environnement local","stopDevServer":"Arrêter le serveur","startDevServer":"Démarrer le serveur","retry":"Réessayer"},"fab":{"closeActions":"Fermer les actions","createNew":"Créer","newFeature":"Nouvelle fonctionnalité","localFolder":"Dossier local","adoptBranch":"Adopter une branche","fromGithub":"Depuis GitHub"},"chat":{"shipitAiChat":"ShipIT AI Chat","writeMessage":"Écrire un message...","attachFiles":"Joindre des fichiers","forceStopAgent":"Forcer l\'arrêt de l\'agent","stop":"Arrêter","clearChatHistory":"Effacer l\'historique du chat","clear":"Effacer","noSession":"Pas de session","yourMessage":"Votre message","agentMessage":"Message de l\'agent","agentIsTyping":"L\'agent écrit","showMore":"Afficher plus","showLess":"Afficher moins","code":"Code","preview":"Aperçu","openFullscreen":"Ouvrir en plein écran","htmlPreview":"Aperçu HTML","htmlPreviewFullscreen":"Aperçu HTML plein écran"},"createDrawer":{"title":"NOUVELLE FONCTIONNALITÉ","creating":"Création...","cancel":"Annuler","createFeature":"+ Créer une fonctionnalité","repository":"DÉPÔT","describeFeature":"DÉCRIVEZ VOTRE FONCTIONNALITÉ","featurePlaceholder":"ex. Ajouter la connexion GitHub OAuth avec gestion du callback et renouvellement du token...","parentFeature":"FONCTIONNALITÉ PARENTE","selectParent":"Sélectionner une fonctionnalité parente...","searchFeatures":"Rechercher des fonctionnalités...","noParent":"Sans parent","noFeaturesFound":"Aucune fonctionnalité trouvée.","searchRepositories":"Rechercher des dépôts...","approve":"APPROBATION","approveDescription":"Auto-approuver les transitions de phase sans vérification manuelle.","skippedInFastMode":"Ignoré en mode rapide","all":"Tous","toggleAllApprovalGates":"Basculer toutes les portes d\'approbation","evidence":"PREUVES","evidenceDescription":"Collecter et joindre des preuves après l\'implémentation.","collect":"Collecter","collectDescription":"Capturer des captures d\'écran et des artefacts après l\'implémentation.","addToPr":"Ajouter au PR","requiresPr":"Nécessite l\'activation du PR","requiresEvidence":"Nécessite l\'activation de la collecte de preuves","addToPrDescription":"Inclure les preuves dans le corps du pull request.","git":"GIT","push":"Pousser","pushDescription":"Pousser la branche vers le distant après l\'implémentation.","pr":"PR","prDescription":"Ouvrir un pull request après avoir poussé.","watch":"Surveiller","watchDescription":"Surveiller le CI et auto-corriger les erreurs.","sync":"Sync","syncDescription":"Pull latest main from remote before creating the feature branch.","commitSpecs":"Commit des specs","commitSpecsDescription":"Commiter les specs dans le dépôt.","forkAndPr":"Fork et PR","forkAndPrDescription":"Contribuer via fork (PR vers l\'upstream).","pendingMode":"En attente","pendingModeDescription":"Créer sans démarrer — démarrer manuellement plus tard.","fastModeLabel":"Mode rapide","fastModeDescription":"Ignorer les phases SDLC et implémenter directement depuis votre prompt.","fileDropZone":"Zone de dépôt de fichiers","prd":"PRD","prdDescription":"Auto-approuver la transition des exigences vers la planification.","plan":"Plan","planDescription":"Auto-approuver la transition de la planification vers l\'implémentation.","merge":"Merge","mergeDescription":"Auto-approuver la transition du merge vers terminé."},"featureDrawer":{"copyFeatureId":"Copier l\'ID de la fonctionnalité","unarchiveFeature":"Désarchiver la fonctionnalité","archiveFeature":"Archiver la fonctionnalité","deleteFeature":"Supprimer la fonctionnalité","stopDevServer":"Arrêter le serveur","startDevServer":"Démarrer le serveur","failedToReject":"Échec du rejet de {{label}}","rejected":"{{label}} rejeté — l\'agent ré-itère (itération {{n}})","excessiveIterations":"Itération {{n}} — envisagez d\'approuver ou d\'ajuster le feedback","failedToApprove":"Échec de l\'approbation de {{label}}","approved":"{{label}} approuvé — l\'agent reprend","failedToApproveRequirements":"Échec de l\'approbation des exigences","requirementsApproved":"Exigences approuvées — l\'agent reprend","featureResumed":"Fonctionnalité reprise — l\'agent redémarre","featureStarted":"Fonctionnalité démarrée","approvePlan":"Approuver le plan","sendRevisionFeedback":"Envoyer le feedback de révision"},"overviewTab":{"created":"Créé","runtime":"Durée d\'exécution","runningFor":"En cours depuis","blockedBy":"Bloqué par","error":"Erreur","prd":"PRD","plan":"Plan","merge":"Merge","collect":"Collecter","addToPr":"Ajouter au PR","push":"Pousser","pr":"PR","watch":"Surveiller","commitSpecs":"Commit des specs","forkAndPr":"Fork et PR"},"activityTab":{"copyPromptToClipboard":"Copier le prompt dans le presse-papiers","execution":"Exécution","wait":"Attente","cost":"Coût","noActivityRecorded":"Aucune activité enregistrée"},"logTab":{"structuredView":"Vue structurée","rawView":"Vue brute","noLogOutput":"Pas de sortie de log"},"planTab":{"noPlanCreated":"Aucun plan créé"},"branchSyncStatus":{"refreshSyncStatus":"Actualiser le statut de synchronisation","rebaseOnMain":"Rebase sur Main"},"drawerActionBar":{"fileDropZone":"Zone de dépôt de fichiers","askAiToRevise":"Demander à l\'IA de réviser...","attachFiles":"Joindre des fichiers","reject":"Rejeter","sendRevisionFeedback":"Envoyer le feedback de révision","approve":"Approuver","fileTooLarge":"\\"{{name}}\\" dépasse la limite de 10 Mo","fileTypeNotAllowed":"Type de fichier \\"{{ext}}\\" non autorisé","uploadFailed":"Échec du téléchargement"},"taskProgress":{"done":"Terminé","inProgress":"En cours","review":"En révision","todo":"À faire","noTasksDefined":"Aucune tâche définie"},"repositoryDrawer":{"openInIde":"Ouvrir dans l\'IDE","openInShell":"Ouvrir dans le terminal","openFolder":"Ouvrir le dossier","syncMain":"Synchroniser Main"},"adoptBranch":{"failedToAdopt":"Échec de l\'adoption de la branche","repository":"Dépôt","branchName":"Nom de la branche","searchRepositories":"Rechercher des dépôts...","searchBranches":"Rechercher des branches..."},"githubImport":{"title":"Importer depuis GitHub","description":"Cloner un dépôt GitHub et l\'ajouter à ShipIT AI.","githubUrl":"URL GitHub","urlPlaceholder":"owner/repo ou https://github.com/owner/repo","searchRepositories":"Rechercher des dépôts..."},"versionBadge":{"version":"Version","branch":"Branche","commit":"Commit","path":"Chemin"},"mergeReview":{"download":"Télécharger","dataUnavailable":"Données de révision de merge indisponibles"},"baseDrawer":{"close":"Fermer","stopDevServer":"Arrêter le serveur","startDevServer":"Démarrer le serveur"},"addRepository":{"addRepository":"Ajouter un dépôt"},"modelPicker":{"searchPlaceholder":"Rechercher ou saisir un ID de modèle…"},"skills":{"searchPlaceholder":"Rechercher des compétences..."},"tools":{"noCategoryTools":"Aucun outil dans cette catégorie."},"accessibility":{"close":"Fermer","loading":"Chargement","send":"Envoyer","imageNotes":"Notes de l\'image","viewServerLogs":"Voir les logs du serveur","toggleSidebar":"Basculer la barre latérale"}}')},59868,(a,b,c)=>{b.exports={errors:{notFound:"Nicht gefunden",unauthorized:"Nicht autorisiert",forbidden:"Zugriff verweigert",internal:"Interner Fehler",unknown:"Ein unbekannter Fehler ist aufgetreten",failedToLoad:"{{resource}} konnte nicht geladen werden",failedToSave:"{{resource}} konnte nicht gespeichert werden"},labels:{save:"Speichern",cancel:"Abbrechen",confirm:"Bestätigen",delete:"Löschen",edit:"Bearbeiten",close:"Schließen",back:"Zurück",next:"Weiter",yes:"Ja",no:"Nein",enabled:"Aktiviert",disabled:"Deaktiviert",loading:"Laden...",saving:"Speichern...",saved:"Gespeichert",none:"Keine",default:"Standard",custom:"Benutzerdefiniert"},status:{success:"Erfolg",error:"Fehler",warning:"Warnung",info:"Info",pending:"Ausstehend",inProgress:"In Bearbeitung",completed:"Abgeschlossen",failed:"Fehlgeschlagen"},confirmation:{areYouSure:"Sind Sie sicher?",cannotBeUndone:"Diese Aktion kann nicht rückgängig gemacht werden."},language:{en:"Englisch",ru:"Russisch",pt:"Portugiesisch",es:"Spanisch",ar:"Arabisch",he:"Hebräisch",fr:"Französisch",de:"Deutsch"}}},82325,(a,b,c)=>{b.exports=JSON.parse('{"settings":{"title":"Einstellungen","saving":"Speichern...","saved":"Gespeichert","failedToSave":"Einstellungen konnten nicht gespeichert werden","sections":{"language":"Sprache","agent":"Agent","environment":"Umgebung","workflow":"Workflow","ci":"CI","timeouts":"Zeitlimits","notifications":"Benachrichtigungen","flags":"Flags","chat":"Chat","layout":"Layout","database":"Datenbank"},"language":{"title":"Sprache","description":"Wählen Sie Ihre bevorzugte Anzeigesprache","label":"Anzeigesprache","placeholder":"Sprache auswählen","failedToSave":"Spracheinstellungen konnten nicht gespeichert werden"},"agent":{"title":"Bevorzugter Agent","sectionTitle":"Agent","description":"Wählen Sie Ihren KI-Coding-Agenten und die Authentifizierungsmethode","sectionDescription":"KI-Coding-Agent und Authentifizierung","agentType":"Agententyp","agentAndModel":"Agent & Modell","agentAndModelDescription":"Provider und Modell für alle Operationen","authMethod":"Authentifizierungsmethode","apiToken":"API-Token","apiTokenPlaceholder":"Geben Sie Ihren API-Token ein","apiTokenHelper":"Wird automatisch gespeichert, wenn Sie das Feld verlassen","failedToSave":"Agenteneinstellungen konnten nicht gespeichert werden","hint":"Wählen Sie, welcher KI-Coding-Agent Ihre Features unterstützt. Jeder Agent unterstützt verschiedene Modelle und Fähigkeiten. Die Authentifizierung wird automatisch über Ihre aktive Sitzung aufgelöst.","links":{"agentSystem":"Agentensystem","addingAgents":"Agenten hinzufügen","configurationGuide":"Konfigurationsanleitung"}},"environment":{"title":"IDE & Terminal","sectionTitle":"Umgebung","description":"Konfigurieren Sie Ihren Standard-Editor, Shell und Terminal-Einstellungen","sectionDescription":"Editor-, Shell- und Terminal-Einstellungen","defaultEditor":"Standard-Editor","defaultEditorDescription":"Editor, der für Dateioperationen geöffnet wird","shellPreference":"Shell-Einstellung","shell":"Shell","shellDescription":"Standard-Shell für generierte Skripte","terminalEmulator":"Terminal-Emulator","terminal":"Terminal","terminalDescription":"Terminal-Emulator für Shell-Sitzungen","systemTerminal":"System-Terminal","installed":"Installiert","notInstalled":"Nicht installiert","failedToSave":"IDE- & Terminal-Einstellungen konnten nicht gespeichert werden","hint":"Ihr bevorzugter Editor öffnet Dateien zur Überprüfung. Die Shell-Einstellung steuert generierte Skripte. Der Terminal-Emulator wird gestartet, wenn Shell-Sitzungen über die Web-UI geöffnet werden.","links":{"configurationGuide":"Konfigurationsanleitung"}},"workflow":{"title":"Workflow","description":"Konfigurieren Sie PR-Verhalten, Genehmigungsstufen und CI-Einstellungen","sectionDescription":"Automatisierungsverhalten nach der Implementierung","defaultFastMode":"Schnellmodus als Standard","defaultFastModeDescription":"SDLC-Phasen überspringen und direkt aus dem Prompt implementieren","subsections":{"approve":"Genehmigen","evidence":"Nachweise","git":"Git"},"autoApprovePrd":"PRD automatisch genehmigen","autoApprovePrdDescription":"Manuelle Überprüfung der Anforderungen überspringen","autoApprovePlan":"Plan automatisch genehmigen","autoApprovePlanDescription":"Manuelle Überprüfung des Implementierungsplans überspringen","autoApproveMerge":"Merge automatisch genehmigen","autoApproveMergeDescription":"Ohne manuelle Überprüfung mergen","collectEvidence":"Nachweise sammeln","collectEvidenceDescription":"Screenshots und Artefakte nach der Implementierung erfassen","addEvidenceToPr":"Nachweise zum PR hinzufügen","addEvidenceToPrDescription":"Nachweise in den Pull-Request-Text aufnehmen","pushOnComplete":"Nach Abschluss pushen","pushOnCompleteDescription":"Zum Remote pushen, wenn die Implementierung abgeschlossen ist","openPrOnComplete":"PR nach Abschluss öffnen","openPrOnCompleteDescription":"Einen Pull Request erstellen, wenn fertig","watchCiAfterPush":"CI nach Push überwachen","watchCiAfterPushDescription":"CI überwachen und Fehler automatisch beheben. Deaktivieren, um Rate-Limits zu vermeiden.","approvalGates":"Genehmigungsstufen","prdAutoApproval":"PRD-Autogenehmigung","planAutoApproval":"Plan-Autogenehmigung","mergeAutoApproval":"Merge-Autogenehmigung","ciSettings":"CI-Einstellungen","ciWatchFixLoop":"CI-Überwachungs-/Korrekturschleife","maxFixAttempts":"Maximale Korrekturversuche","watchTimeout":"Überwachungs-Zeitlimit (Sekunden)","maxLogCharacters":"Maximale Log-Zeichen","pollInterval":"Abfrageintervall (Sekunden)","hideCiStatus":"CI-Status ausblenden","stageTimeouts":"Phasen-Zeitlimits","failedToSave":"Workflow-Einstellungen konnten nicht gespeichert werden","hint":"Steuern Sie, wie autonom jeder Feature-Lauf ist. Autogenehmigung überspringt die manuelle Überprüfungspause in jeder Phase. Push- und PR-Optionen steuern, was nach erfolgreicher Implementierung passiert.","links":{"approvalGates":"Genehmigungsstufen","pushAndPrFlags":"Push- & PR-Flags"}},"ci":{"title":"Continuous Integration","description":"Limits und Zeitlimits für die CI-Überwachung","maxFixAttempts":"Maximale Korrekturversuche","maxFixAttemptsDescription":"Agent-Wiederholungen bei fehlschlagendem CI","watchTimeout":"Überwachungs-Zeitlimit","watchTimeoutDescription":"Maximale Wartezeit auf CI-Abschluss","maxLogSize":"Maximale Log-Größe","maxLogSizeDescription":"CI-Logs über dieses Limit hinaus abschneiden","pollInterval":"Abfrageintervall","pollIntervalDescription":"Wie oft der GitHub-CI-Status geprüft wird","hideCiStatus":"CI-Status ausblenden","hideCiStatusDescription":"CI-Status-Badges in Feature-Drawer und Merge-Überprüfung ausblenden","hint":"Wenn ein Feature abgeschlossen ist, kann der Agent CI überwachen und Fehler automatisch beheben. Diese Limits verhindern unkontrollierte Wiederholungen und steuern, wie viel Log-Ausgabe zur Analyse an den Agenten gesendet wird.","links":{"cicdPipeline":"CI/CD-Pipeline","ciSecurityGates":"CI-Sicherheitsgates"}},"stageTimeouts":{"title":"Phasen-Zeitlimits","description":"Maximale Ausführungszeit pro Agentenphase","subsections":{"featureAgent":"Feature-Agent","analyzeRepoAgent":"Repository-Analyse-Agent"},"analyze":"Analyse","analyzeDescription":"Zeitlimit für Repository-Analyse","requirements":"Anforderungen","requirementsDescription":"Zeitlimit für Anforderungserfassung","research":"Recherche","researchDescription":"Zeitlimit für technische Recherche","plan":"Plan","planDescription":"Zeitlimit für Implementierungsplanung","implement":"Implementierung","implementDescription":"Zeitlimit für Code-Implementierung","merge":"Merge","mergeDescription":"Zeitlimit für PR-Erstellung und Merge","hint":"Jeder Agent hat unabhängig konfigurierbare Phasen-Zeitlimits. Wenn eine Phase ihr Zeitlimit überschreitet, wird der Agent beendet. Längere Zeitlimits sind nützlich für komplexe Implementierungen. Feature-Agent hat standardmäßig 30 Minuten pro Phase. Repository-Analyse-Agent hat standardmäßig 10 Minuten."},"notifications":{"title":"Benachrichtigungen","description":"Benachrichtigungskanäle und Ereigniseinstellungen konfigurieren","sectionDescription":"Wie und wann Sie benachrichtigt werden","channels":"Kanäle","inApp":"In-App","inAppLabel":"In-App","inAppDescription":"Benachrichtigungen innerhalb der ShipIT AI-UI","subsections":{"agentEvents":"Agent-Ereignisse","pullRequestEvents":"Pull-Request-Ereignisse"},"events":{"agentStarted":"Agent gestartet","phaseCompleted":"Phase abgeschlossen","waitingApproval":"Wartet auf Genehmigung","agentCompleted":"Agent abgeschlossen","agentFailed":"Agent fehlgeschlagen","mergeReviewReady":"Merge-Überprüfung bereit","prMerged":"PR gemergt","prClosed":"PR geschlossen","prChecksPassed":"PR-Prüfungen bestanden","prChecksFailed":"PR-Prüfungen fehlgeschlagen","prBlocked":"PR blockiert"},"failedToSave":"Benachrichtigungseinstellungen konnten nicht gespeichert werden","hint":"In-App-Toast-Benachrichtigungen halten Sie auf dem Laufenden. Passen Sie genau an, welche Agenten-Lebenszyklus-Ereignisse eine Benachrichtigung auslösen.","links":{"notificationSystem":"Benachrichtigungssystem"}},"featureFlags":{"title":"Feature-Flags","description":"Experimentelle und Beta-Features umschalten","sectionDescription":"Experimentelle Features aktivieren oder deaktivieren","badge":"Experimentell","skills":"Skills","skillsDescription":"Skills-System für Agentenfähigkeiten aktivieren","deployments":"Deployments","deploymentsDescription":"Umgebungs-Deployment-Workflows aktivieren","debug":"Debug","debugDescription":"Debug-Panels und ausführliche Protokollierung anzeigen","githubImport":"GitHub-Import","githubImportDescription":"GitHub-Repository-Import in der Web-UI aktivieren","adoptBranch":"Branch übernehmen","adoptBranchDescription":"Bestehende Branches als verfolgte Features importieren","gitRebaseSync":"Git Rebase & Sync","gitRebaseSyncDescription":"Git Rebase-on-Main- und Sync-Main-Operationen aktivieren","reactFileManager":"React-Dateimanager","reactFileManagerDescription":"Den integrierten React-Dateimanager anstelle der nativen Betriebssystem-Ordnerauswahl verwenden","hint":"Experimentelle Features, die noch in Entwicklung sind. Aktivierung auf eigene Gefahr — sie können sich in zukünftigen Versionen ändern oder entfernt werden. Der Debug-Modus fügt ausführliche Protokollierung hinzu, die bei der Fehlerbehebung nützlich ist."},"interactiveAgent":{"title":"Interaktiver Agent","description":"Chat-Tab-Einstellungen für interaktive Agenten-Sitzungen pro Feature","enableChatTab":"Chat-Tab aktivieren","enableChatTabDescription":"Chat-Tab auf allen Feature-Detailseiten anzeigen","autoTimeout":"Auto-Zeitlimit","autoTimeoutDescription":"Minuten der Inaktivität, bevor der Agent automatisch gestoppt wird (1–120)","maxConcurrentSessions":"Maximale gleichzeitige Sitzungen","maxConcurrentSessionsDescription":"Maximale Anzahl aktiver interaktiver Agenten-Sitzungen gleichzeitig (1–10)","hint":"Der Chat-Tab startet einen persistenten Agentenprozess pro Feature. Das Auto-Zeitlimit stoppt inaktive Sitzungen automatisch, um Ressourcen zu sparen. Das Limit für gleichzeitige Sitzungen verhindert unkontrollierten Ressourcenverbrauch auf Entwicklermaschinen."},"fabLayout":{"title":"Layout","description":"Position der schwebenden Aktionsschaltflächen im Kontrollzentrum steuern","swapPosition":"FAB-Positionen tauschen","swapPositionDescription":"Chat-Button nach links und Erstellen-Button nach rechts verschieben","hint":"Die zwei schwebenden Aktionsschaltflächen (Erstellen und Chat) befinden sich in den unteren Ecken des Kontrollzentrums. Aktivieren Sie diese Option, um ihre Positionen zu tauschen."},"database":{"title":"Datenbank","description":"Datenbankpfad und -verwaltung","sectionDescription":"Lokale Speicherinformationen","location":"Speicherort","locationDescription":"Pfad zur lokalen SQLite-Datenbank","size":"Größe","hint":"Alle Einstellungen werden in einer lokalen SQLite-Datenbank unter ~/.shipit-ai/data gespeichert. Die Datenbank verwendet ein Singleton-Datensatz-Muster mit automatischen Migrationen beim Start.","links":{"settingsService":"Einstellungsdienst","settingsSpec":"Einstellungsspezifikation"}}},"navigation":{"controlCenter":"Kontrollzentrum","dashboard":"Dashboard","features":"Features","repositories":"Repositories","settings":"Einstellungen","sessions":"Sitzungen","tools":"Tools","skills":"Skills"},"sidebar":{"features":"Features","switchToLight":"Heller Modus","switchToDark":"Dunkler Modus","muteSounds":"Töne stummschalten","unmuteSounds":"Töne aktivieren","statusActionNeeded":"Handlung erforderlich","statusInProgress":"In Bearbeitung","statusPending":"Ausstehend","statusBlocked":"Blockiert","statusError":"Fehler","statusDone":"Abgeschlossen"},"deleteFeature":{"title":"Feature löschen?","description":"Dies löscht <strong>{{featureName}}</strong> ({{featureId}}) dauerhaft. Diese Aktion kann nicht rückgängig gemacht werden.","cleanupLabel":"Worktree und Branches bereinigen","deleteSubFeatures":"Unter-Features löschen","closePullRequest":"Pull Request schließen","cancel":"Abbrechen","deleting":"Wird gelöscht…","delete":"Löschen"},"rejectFeedback":{"defaultTitle":"Anforderungen ablehnen","defaultDescription":"Geben Sie Feedback für den Agenten, das in der nächsten Iteration berücksichtigt werden soll. Feedback ist erforderlich.","ariaLabel":"Ablehnungsfeedback","placeholder":"Beschreiben Sie, was geändert werden muss...","cancel":"Abbrechen","rejecting":"Wird abgelehnt…","confirmReject":"Ablehnung bestätigen"},"emptyState":{"addProject":"Projekt hinzufügen","addProjectDescription":"Fügen Sie Ihren Projektordner hinzu, um die Feature-Erstellung freizuschalten.","addProjectDescriptionLine2":"Beschreiben Sie, was Sie brauchen — ShipIT AI erledigt den Rest.","checkingSetup":"Einrichtung wird geprüft…","ready":"{{label}} bereit","notInstalled":"{{label}} nicht installiert","reCheck":"Erneut prüfen","needsAuth":"{{label}} benötigt Authentifizierung","open":"{{label}} öffnen","checking":"{{label}} wird geprüft…","notFound":"{{label}} nicht gefunden","docs":"Dokumentation","opening":"Wird geöffnet…","chooseFolder":"Ordner auswählen","folderHint":"Jeder Ordner funktioniert — Git wird bei Bedarf automatisch initialisiert.","orUseCli":"oder CLI verwenden","copyCommands":"Befehle kopieren","git":"Git","gitRequired":"Für alle Phasen erforderlich","githubCli":"GitHub CLI","githubCliRequired":"Für Pull Requests erforderlich"},"welcome":{"loadingAgents":"Agenten werden geladen…","chooseAgent":"Wählen Sie Ihren Agenten","pickModel":"Modell auswählen","selectAgentSubtitle":"Wählen Sie den KI-Coding-Agenten, den ShipIT AI verwenden soll.","chooseModelSubtitle":"Wählen Sie, welches {{label}}-Modell ausgeführt werden soll.","ghCliNotice":"<0>GitHub CLI (gh)</0> wird für vollständige CI/CD-Selbstheilungsfähigkeiten benötigt. <1>Hier installieren</1>.","ghCliRequired":"GitHub CLI (gh)","ghCliRequiredText":"wird für vollständige CI/CD-Selbstheilungsfähigkeiten benötigt.","installHere":"Hier installieren","back":"Zurück"},"canvas":{"noFeatures":"Noch keine Features","noFeaturesDescription":"Erstellen Sie Ihr erstes Feature, um loszulegen.","newFeature":"Neues Feature","hideArchived":"Archivierte ausblenden","showArchived":"Archivierte anzeigen","hideArchivedLabel":"Archivierte ausblenden","showArchivedLabel":"Archivierte anzeigen","zoomOut":"Verkleinern","zoomIn":"Vergrößern","fitView":"Ansicht anpassen","resetView":"Ansicht zurücksetzen"},"common":{"noData":"Keine Daten verfügbar","retry":"Wiederholen","saving":"Speichern...","saved":"Gespeichert","decrease":"Verringern","increase":"Erhöhen","cancel":"Abbrechen"},"featureNode":{"archiveFeature":"Feature archivieren","deleteFeature":"Feature löschen","unarchiveFeature":"Feature dearchivieren","archiveConfirmTitle":"Feature archivieren?","archiveConfirmDescription":"<strong>{{name}}</strong> wird von der Leinwand ausgeblendet. Sie können es später dearchivieren.","cancel":"Abbrechen","archive":"Archivieren","fastMode":"Schnellmodus","specDriven":"Spezifikationsbasiert","copied":"Kopiert!","chatWithAgent":"Chat mit Agent","stopDevServer":"Server stoppen","startDevServer":"Server starten","retryDevServer":"Server neu starten","starting":"Startet…","retry":"Wiederholen","start":"Starten","failed":"Fehlgeschlagen","deleting":"Lösche…","addFeature":"Feature hinzufügen","reviewRequirements":"Anforderungen prüfen","reviewTechnicalPlan":"Technischen Plan prüfen","reviewChanges":"Änderungen prüfen","review":"Prüfung","creating":"Erstelle...","completedIn":"Abgeschlossen in {{runtime}}","completed":"Abgeschlossen","waitingOn":"Wartet auf {{blockedBy}}","blocked":"Blockiert","pending":"Ausstehend","somethingWentWrong":"Etwas ist schiefgelaufen","openChat":"Chat öffnen","viewSessions":"Sitzungen anzeigen","sessionsActive":"Sitzungen (aktiv)","sessions":"Sitzungen","agentSessions":"Agent-Sitzungen","noSessionsFound":"Keine Sitzungen gefunden","showLess":"Weniger anzeigen","showMore":"{{count}} weitere anzeigen"},"repositoryNode":{"removeRepository":"Repository entfernen","removeConfirmTitle":"Repository entfernen?","removeConfirmDescription":"Dadurch wird <strong>{{name}}</strong> und alle zugehörigen Features aus dem Arbeitsbereich entfernt. Die Dateien auf der Festplatte werden nicht betroffen.","cancel":"Abbrechen","remove":"Entfernen","openInIde":"In IDE öffnen","openInShell":"Im Terminal öffnen","openFolder":"Ordner öffnen","chatWithAgent":"Chat mit Agent","newFeature":"Neues Feature","new":"Neu","behind":"{{count}} zurück","notAGitRepository":"Kein Git-Repository","starting":"Startet...","run":"Ausführen","startLocalEnvironment":"Lokale Umgebung starten","stopDevServer":"Server stoppen","startDevServer":"Server starten","retry":"Wiederholen"},"fab":{"closeActions":"Aktionen schließen","createNew":"Neu erstellen","newFeature":"Neues Feature","localFolder":"Lokaler Ordner","adoptBranch":"Branch übernehmen","fromGithub":"Von GitHub"},"chat":{"shipitAiChat":"ShipIT AI Chat","writeMessage":"Nachricht schreiben...","attachFiles":"Dateien anhängen","forceStopAgent":"Agent-Prozess erzwingen stoppen","stop":"Stoppen","clearChatHistory":"Chat-Verlauf löschen","clear":"Löschen","noSession":"Keine Sitzung","yourMessage":"Ihre Nachricht","agentMessage":"Agent-Nachricht","agentIsTyping":"Agent tippt","showMore":"Mehr anzeigen","showLess":"Weniger anzeigen","code":"Code","preview":"Vorschau","openFullscreen":"Vollbild öffnen","htmlPreview":"HTML-Vorschau","htmlPreviewFullscreen":"HTML-Vorschau Vollbild"},"createDrawer":{"title":"NEUES FEATURE","creating":"Erstelle...","cancel":"Abbrechen","createFeature":"+ Feature erstellen","repository":"REPOSITORY","describeFeature":"BESCHREIBEN SIE IHR FEATURE","featurePlaceholder":"z.B. GitHub OAuth-Login mit Callback-Handling und Token-Erneuerung hinzufügen...","parentFeature":"ÜBERGEORDNETES FEATURE","selectParent":"Übergeordnetes Feature auswählen...","searchFeatures":"Features suchen...","noParent":"Kein übergeordnetes","noFeaturesFound":"Keine Features gefunden.","searchRepositories":"Repositories suchen...","approve":"GENEHMIGUNG","approveDescription":"Phasenübergänge ohne manuelle Prüfung automatisch genehmigen.","skippedInFastMode":"Im Schnellmodus übersprungen","all":"Alle","toggleAllApprovalGates":"Alle Genehmigungsstufen umschalten","evidence":"NACHWEISE","evidenceDescription":"Nachweise nach der Implementierung sammeln und anhängen.","collect":"Sammeln","collectDescription":"Screenshots und Artefakte nach der Implementierung aufnehmen.","addToPr":"Zum PR hinzufügen","requiresPr":"PR muss aktiviert sein","requiresEvidence":"Nachweissammlung muss aktiviert sein","addToPrDescription":"Nachweise in den Pull-Request-Text aufnehmen.","git":"GIT","push":"Pushen","pushDescription":"Branch nach der Implementierung zum Remote pushen.","pr":"PR","prDescription":"Nach dem Pushen einen Pull Request öffnen.","watch":"Überwachen","watchDescription":"CI überwachen und Fehler automatisch beheben.","sync":"Sync","syncDescription":"Pull latest main from remote before creating the feature branch.","commitSpecs":"Specs committen","commitSpecsDescription":"Specs ins Repository committen.","forkAndPr":"Fork & PR","forkAndPrDescription":"Über Fork beitragen (PR an Upstream).","pendingMode":"Ausstehend","pendingModeDescription":"Erstellen ohne zu starten — später manuell starten.","fastModeLabel":"Schnellmodus","fastModeDescription":"SDLC-Phasen überspringen und direkt aus dem Prompt implementieren.","fileDropZone":"Datei-Ablagebereich","prd":"PRD","prdDescription":"Übergang von Anforderungen zur Planung automatisch genehmigen.","plan":"Plan","planDescription":"Übergang von Planung zur Implementierung automatisch genehmigen.","merge":"Merge","mergeDescription":"Merge-Übergang zu Abgeschlossen automatisch genehmigen."},"featureDrawer":{"copyFeatureId":"Feature-ID kopieren","unarchiveFeature":"Feature dearchivieren","archiveFeature":"Feature archivieren","deleteFeature":"Feature löschen","stopDevServer":"Server stoppen","startDevServer":"Server starten","failedToReject":"Ablehnung von {{label}} fehlgeschlagen","rejected":"{{label}} abgelehnt — Agent iteriert erneut (Iteration {{n}})","excessiveIterations":"Iteration {{n}} — erwägen Sie eine Genehmigung oder Feedback-Anpassung","failedToApprove":"Genehmigung von {{label}} fehlgeschlagen","approved":"{{label}} genehmigt — Agent fährt fort","failedToApproveRequirements":"Genehmigung der Anforderungen fehlgeschlagen","requirementsApproved":"Anforderungen genehmigt — Agent fährt fort","featureResumed":"Feature fortgesetzt — Agent startet neu","featureStarted":"Feature gestartet","approvePlan":"Plan genehmigen","sendRevisionFeedback":"Revisions-Feedback senden"},"overviewTab":{"created":"Erstellt","runtime":"Laufzeit","runningFor":"Läuft seit","blockedBy":"Blockiert von","error":"Fehler","prd":"PRD","plan":"Plan","merge":"Merge","collect":"Sammeln","addToPr":"Zum PR hinzufügen","push":"Pushen","pr":"PR","watch":"Überwachen","commitSpecs":"Specs committen","forkAndPr":"Fork & PR"},"activityTab":{"copyPromptToClipboard":"Prompt in Zwischenablage kopieren","execution":"Ausführung","wait":"Wartezeit","cost":"Kosten","noActivityRecorded":"Noch keine Aktivität aufgezeichnet"},"logTab":{"structuredView":"Strukturierte Ansicht","rawView":"Rohe Ansicht","noLogOutput":"Noch keine Log-Ausgabe"},"planTab":{"noPlanCreated":"Noch kein Plan erstellt"},"branchSyncStatus":{"refreshSyncStatus":"Synchronisierungsstatus aktualisieren","rebaseOnMain":"Rebase auf Main"},"drawerActionBar":{"fileDropZone":"Datei-Ablagebereich","askAiToRevise":"KI um Überarbeitung bitten...","attachFiles":"Dateien anhängen","reject":"Ablehnen","sendRevisionFeedback":"Revisions-Feedback senden","approve":"Genehmigen","fileTooLarge":"\\"{{name}}\\" überschreitet das 10-MB-Limit","fileTypeNotAllowed":"Dateityp \\"{{ext}}\\" nicht erlaubt","uploadFailed":"Upload fehlgeschlagen"},"taskProgress":{"done":"Erledigt","inProgress":"In Bearbeitung","review":"In Prüfung","todo":"Offen","noTasksDefined":"Noch keine Aufgaben definiert"},"repositoryDrawer":{"openInIde":"In IDE öffnen","openInShell":"Im Terminal öffnen","openFolder":"Ordner öffnen","syncMain":"Main synchronisieren"},"adoptBranch":{"failedToAdopt":"Branch-Übernahme fehlgeschlagen","repository":"Repository","branchName":"Branch-Name","searchRepositories":"Repositories suchen...","searchBranches":"Branches suchen..."},"githubImport":{"title":"Von GitHub importieren","description":"Ein GitHub-Repository klonen und zu ShipIT AI hinzufügen.","githubUrl":"GitHub-URL","urlPlaceholder":"owner/repo oder https://github.com/owner/repo","searchRepositories":"Repositories suchen..."},"versionBadge":{"version":"Version","branch":"Branch","commit":"Commit","path":"Pfad"},"mergeReview":{"download":"Herunterladen","dataUnavailable":"Merge-Review-Daten nicht verfügbar"},"baseDrawer":{"close":"Schließen","stopDevServer":"Server stoppen","startDevServer":"Server starten"},"addRepository":{"addRepository":"Repository hinzufügen"},"modelPicker":{"searchPlaceholder":"Modell-ID suchen oder eingeben…"},"skills":{"searchPlaceholder":"Fähigkeiten suchen..."},"tools":{"noCategoryTools":"Keine Werkzeuge in dieser Kategorie."},"accessibility":{"close":"Schließen","loading":"Laden","send":"Senden","imageNotes":"Bildnotizen","viewServerLogs":"Server-Logs anzeigen","toggleSidebar":"Seitenleiste umschalten"}}')},85827,a=>{"use strict";let b;var c=a.i(53083),d=a.i(11321);a.i(98617);var e=a.i(39598),f=a.i(7932),g=a.i(10483),h=a.i(36099),i=a.i(94214),j=a.i(86355),k=a.i(75861),l=a.i(66609),m=a.i(20366),n=a.i(53433),o=a.i(87484),p=a.i(63541),q=a.i(3324),r=a.i(16986),s=a.i(78742),t=a.i(55444),u=a.i(32886),v=a.i(59868),w=a.i(82325);let x=((b=f.default.createInstance()).use(g.initReactI18next).init({lng:"en",fallbackLng:"en",defaultNS:"common",ns:["common","web"],resources:{en:{common:h.default,web:i.default},ru:{common:j.default,web:k.default},pt:{common:l.default,web:m.default},es:{common:n.default,web:o.default},ar:{common:p.default,web:q.default},he:{common:r.default,web:s.default},fr:{common:t.default,web:u.default},de:{common:v.default,web:w.default}},interpolation:{escapeValue:!1},react:{useSuspense:!1}}),b),y={ar:{family:"Noto Sans Arabic",cssUrl:"https://fonts.googleapis.com/css2?family=Noto+Sans+Arabic:wght@400;500;600;700&display=swap"},he:{family:"Noto Sans Hebrew",cssUrl:"https://fonts.googleapis.com/css2?family=Noto+Sans+Hebrew:wght@400;500;600;700&display=swap"}};function z(a){let b=y[a];if(document.documentElement.classList.remove("font-rtl-arabic","font-rtl-hebrew"),!b)return void document.documentElement.style.removeProperty("--font-rtl");document.documentElement.style.setProperty("--font-rtl",`"${b.family}"`),document.documentElement.classList.add("ar"===a?"font-rtl-arabic":"font-rtl-hebrew");let c=`rtl-font-${a}`;if(!document.getElementById(c)){let a=document.createElement("link");a.id=c,a.rel="stylesheet",a.href=b.cssUrl,document.head.appendChild(a)}}a.s(["I18nProvider",0,function({initialLanguage:a,children:b}){return(0,d.useEffect)(()=>{x.language!==a&&x.changeLanguage(a),z(a)},[a]),(0,d.useEffect)(()=>{function a(a){z(a)}return x.on("languageChanged",a),()=>{x.off("languageChanged",a)}},[]),(0,c.jsx)(e.I18nextProvider,{i18n:x,children:b})}],85827)},97752,a=>{"use strict";var b=a.i(53083),c=a.i(40674),d=a.i(11321);a.s(["RouteAnnouncer",0,function(){let a=(0,c.usePathname)(),[e,f]=(0,d.useState)("");return(0,d.useEffect)(()=>{let b=document.title||a;f(`Navigated to ${b}`)},[a]),(0,b.jsx)("div",{"aria-live":"polite","aria-atomic":"true",role:"status",className:"sr-only",children:e})}])}];
2
2
 
3
3
  //# sourceMappingURL=_0w-_hww._.js.map