@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 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/create-drawer-client.tsx","../../../../../../../src/presentation/web/app/actions/data%3A5042ce%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx","../../../../../../../src/presentation/web/components/common/feature-create-drawer/use-feature-create-form.ts","../../../../../../../src/presentation/web/app/actions/data%3A7e9bde%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/common/feature-create-drawer/prompt-section.tsx","../../../../../../../src/presentation/web/components/common/feature-create-drawer/workflow-options-section.tsx","../../../../../../../src/presentation/web/components/common/feature-create-drawer/parent-feature-combobox.tsx","../../../../../../../src/presentation/web/components/common/feature-create-drawer/repository-combobox.tsx"],"sourcesContent":["'use client';\n\nimport { useState, useCallback, useEffect } from 'react';\nimport { useRouter, usePathname } from 'next/navigation';\nimport { toast } from 'sonner';\nimport { createFeature } from '@/app/actions/create-feature';\nimport { FeatureCreateDrawer } from '@/components/common/feature-create-drawer';\nimport type { FeatureCreatePayload } from '@/components/common/feature-create-drawer';\nimport type { ParentFeatureOption } from '@/components/common/feature-create-drawer/feature-create-drawer';\nimport type { RepositoryOption } from '@/components/common/feature-create-drawer/feature-create-drawer';\nimport type { WorkflowDefaults } from '@/app/actions/get-workflow-defaults';\n\nexport interface CreateDrawerClientProps {\n repositoryPath: string;\n initialParentId?: string;\n initialDescription?: string;\n features: ParentFeatureOption[];\n repositories?: RepositoryOption[];\n workflowDefaults?: WorkflowDefaults;\n currentAgentType?: string;\n currentModel?: string;\n canPushDirectly?: boolean;\n}\n\nexport function CreateDrawerClient({\n repositoryPath,\n initialParentId,\n initialDescription,\n features,\n repositories,\n workflowDefaults,\n currentAgentType,\n currentModel,\n canPushDirectly,\n}: CreateDrawerClientProps) {\n const router = useRouter();\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n // Derive open state from the URL. Next.js parallel routes preserve slot\n // content during soft navigation, so this component is NOT unmounted when\n // navigating to `/`. We watch the pathname and let Vaul handle the close\n // animation when the path no longer matches the create route.\n // When submitting, force the drawer closed immediately — router.push('/')\n // is async and the pathname may not update before the next render.\n const pathname = usePathname();\n const isOnCreateRoute = pathname.startsWith('/create');\n const isOpen = !isSubmitting && isOnCreateRoute;\n\n // Reset isSubmitting once the route has actually changed away from /create,\n // so the drawer can reopen on future visits. Without this, isSubmitting\n // would stay true forever since parallel routes preserve component state.\n useEffect(() => {\n if (!isOnCreateRoute && isSubmitting) {\n setIsSubmitting(false);\n }\n }, [isOnCreateRoute, isSubmitting]);\n\n const onClose = useCallback(() => {\n router.push('/');\n }, [router]);\n\n const onSubmit = useCallback(\n (data: FeatureCreatePayload) => {\n setIsSubmitting(true);\n\n // Close the drawer immediately for responsive UI\n router.push('/');\n\n // Server action Phase 1 returns fast with real feature ID (DB record created)\n // Phase 2 (metadata, worktree, agent) runs in background on server\n createFeature(data)\n .then((result) => {\n if (result.error) {\n toast.error(result.error);\n return;\n }\n // Dispatch event with real feature ID so control center adds it to featureMap\n window.dispatchEvent(\n new CustomEvent('shipit-ai:feature-created', {\n detail: {\n featureId: result.feature!.id,\n name: result.feature!.name,\n description: result.feature!.description,\n repositoryPath: result.feature!.repositoryPath,\n parentId: data.parentId,\n },\n })\n );\n })\n .catch(() => {\n toast.error('Failed to create feature');\n setIsSubmitting(false);\n });\n },\n [router]\n );\n\n return (\n <FeatureCreateDrawer\n open={isOpen}\n onClose={onClose}\n onSubmit={onSubmit}\n repositoryPath={repositoryPath}\n features={features}\n repositories={repositories}\n workflowDefaults={workflowDefaults}\n initialParentId={initialParentId}\n initialDescription={initialDescription}\n isSubmitting={isSubmitting}\n currentAgentType={currentAgentType}\n currentModel={currentModel}\n canPushDirectly={canPushDirectly}\n />\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40ee3f32d69862db27d7f93f81b09479bd5cbe770a\":{\"name\":\"createFeature\"}},\"src/presentation/web/app/actions/create-feature.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40ee3f32d69862db27d7f93f81b09479bd5cbe770a\",callServer,void 0,findSourceMapURL,\"createFeature\");export{$$RSC_SERVER_ACTION_0 as createFeature};","'use client';\n\nimport { useCallback, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { BaseDrawer } from '@/components/common/base-drawer';\nimport { DrawerTitle, DrawerDescription } from '@/components/ui/drawer';\nimport { Button } from '@/components/ui/button';\nimport { Label } from '@/components/ui/label';\nimport { Badge } from '@/components/ui/badge';\nimport { TooltipProvider } from '@/components/ui/tooltip';\nimport type { WorkflowDefaults } from '@/app/actions/get-workflow-defaults';\nimport { useFeatureCreateForm } from './use-feature-create-form';\nimport { PromptSection } from './prompt-section';\nimport { WorkflowOptionsSection } from './workflow-options-section';\nimport { ParentFeatureCombobox } from './parent-feature-combobox';\nimport { RepositoryCombobox } from './repository-combobox';\nimport type { ParentFeatureOption, RepositoryOption, FeatureCreatePayload } from './types';\n\nexport type { FileAttachment } from '@shipit-ai/core/infrastructure/services/file-dialog.service';\nexport type { FormAttachment } from './types';\nexport type { ParentFeatureOption, RepositoryOption, FeatureCreatePayload };\nexport type { RepositoryComboboxProps } from './repository-combobox';\nexport { RepositoryCombobox } from './repository-combobox';\n\nexport interface FeatureCreateDrawerProps {\n open: boolean;\n onClose: () => void;\n onSubmit: (data: FeatureCreatePayload) => void;\n repositoryPath: string;\n isSubmitting?: boolean;\n workflowDefaults?: WorkflowDefaults;\n /** List of existing features available for selection as a parent. */\n features?: ParentFeatureOption[];\n /** List of tracked repositories for selection when repo context is missing. */\n repositories?: RepositoryOption[];\n /** Pre-select a parent feature when the drawer opens (e.g. from (+) button on a feature node). */\n initialParentId?: string;\n /** Current global agent type from settings */\n currentAgentType?: string;\n /** Current global model from settings */\n currentModel?: string;\n /** Pre-fill the description textarea (e.g. from session context) */\n initialDescription?: string;\n /** When true, user has push access — Fork & PR toggle will be hidden. */\n canPushDirectly?: boolean;\n}\n\nexport function FeatureCreateDrawer({\n open,\n onClose,\n onSubmit,\n repositoryPath,\n isSubmitting = false,\n workflowDefaults,\n features,\n repositories,\n initialParentId,\n currentAgentType,\n currentModel,\n initialDescription,\n canPushDirectly,\n}: FeatureCreateDrawerProps) {\n const { t } = useTranslation('web');\n\n const form = useFeatureCreateForm({\n open,\n onClose,\n onSubmit,\n repositoryPath,\n workflowDefaults,\n repositories,\n initialParentId,\n currentAgentType,\n currentModel,\n initialDescription,\n canPushDirectly,\n });\n\n const formRef = useRef<HTMLFormElement>(null);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if ((e.ctrlKey || e.metaKey) && e.key === 'Enter') {\n e.preventDefault();\n formRef.current?.requestSubmit();\n }\n }, []);\n\n const hasFeatures = features && features.length > 0;\n const showRepoSelector = !form.validRepoPath && repositories !== undefined;\n const needsRepo = !form.validRepoPath && !form.selectedRepoPath;\n\n return (\n <BaseDrawer\n open={open}\n onClose={form.attemptClose}\n size=\"md\"\n modal={false}\n dismissOnOutsideClick\n data-testid=\"feature-create-drawer\"\n header={\n <>\n <div className=\"flex items-center gap-2\">\n <div className=\"h-2.5 w-2.5 shrink-0 rounded-full bg-blue-500\" />\n <DrawerTitle>{t('createDrawer.title')}</DrawerTitle>\n </div>\n {isSubmitting ? (\n <DrawerDescription asChild>\n <div>\n <Badge variant=\"secondary\">{t('createDrawer.creating')}</Badge>\n </div>\n </DrawerDescription>\n ) : null}\n </>\n }\n footer={\n <div className=\"flex flex-row justify-end gap-2\">\n <Button variant=\"outline\" onClick={form.attemptClose} disabled={isSubmitting}>\n {t('createDrawer.cancel')}\n </Button>\n <Button\n type=\"submit\"\n form=\"create-feature-form\"\n disabled={!form.description.trim() || isSubmitting || needsRepo}\n >\n {isSubmitting ? t('createDrawer.creating') : t('createDrawer.createFeature')}\n </Button>\n </div>\n }\n >\n {/* Form body */}\n <div className=\"overflow-y-auto p-4\">\n <TooltipProvider delayDuration={400}>\n <form\n ref={formRef}\n id=\"create-feature-form\"\n onSubmit={form.handleSubmit}\n onKeyDown={handleKeyDown}\n className=\"flex flex-col gap-4\"\n >\n {/* Repository selector (only when opened from sidebar without repo context) */}\n {showRepoSelector ? (\n <div className=\"flex flex-col gap-1.5\" data-testid=\"repo-selector-section\">\n <Label className=\"text-muted-foreground text-xs font-semibold tracking-wider\">\n {t('createDrawer.repository')}\n </Label>\n <RepositoryCombobox\n repositories={form.localRepos}\n value={form.selectedRepoPath}\n onChange={form.setSelectedRepoPath}\n onAddRepository={(repo) => {\n form.setLocalRepos((prev) => [...prev, repo]);\n form.setSelectedRepoPath(repo.path);\n }}\n disabled={isSubmitting}\n />\n </div>\n ) : form.validRepoPath ? (\n <div className=\"flex flex-col gap-1.5\" data-testid=\"repo-readonly-section\">\n <Label className=\"text-muted-foreground text-xs font-semibold tracking-wider\">\n {t('createDrawer.repository')}\n </Label>\n <p className=\"text-sm\" data-testid=\"repo-readonly-label\">\n {repositories?.find((r) => r.path === form.validRepoPath)?.name ??\n form.validRepoPath.split('/').pop()}\n </p>\n </div>\n ) : null}\n\n {/* Description + inline controls with drop zone */}\n <PromptSection\n description={form.description}\n onDescriptionChange={form.setDescription}\n attachments={form.attachments}\n onRemoveFile={form.handleRemoveFile}\n onNotesChange={form.handleNotesChange}\n onPaste={form.handlePaste}\n onDragEnter={form.handleDragEnter}\n onDragLeave={form.handleDragLeave}\n onDragOver={form.handleDragOver}\n onDrop={form.handleDrop}\n onAddFiles={form.handleAddFiles}\n isDragOver={form.isDragOver}\n uploadError={form.uploadError}\n isPromptFocused={form.isPromptFocused}\n onPromptFocus={() => form.setIsPromptFocused(true)}\n onPromptBlur={() => form.setIsPromptFocused(false)}\n fast={form.fast}\n onFastChange={form.setFast}\n pending={form.pending}\n onPendingChange={form.setPending}\n overrideAgent={form.overrideAgent}\n overrideModel={form.overrideModel}\n currentAgentType={currentAgentType}\n currentModel={currentModel}\n onAgentModelChange={(agent, model) => {\n form.setOverrideAgent(agent);\n form.setOverrideModel(model);\n }}\n isSubmitting={isSubmitting}\n />\n\n {/* Parent feature selector (only when opened from a feature node) */}\n {hasFeatures && initialParentId !== undefined ? (\n <div className=\"flex flex-col gap-1.5\">\n <Label\n htmlFor=\"parent-feature\"\n className=\"text-muted-foreground text-xs font-semibold tracking-wider\"\n >\n {t('createDrawer.parentFeature')}\n </Label>\n <ParentFeatureCombobox\n features={features}\n value={form.parentId}\n onChange={form.setParentId}\n disabled={isSubmitting}\n />\n </div>\n ) : null}\n\n {/* Approve + Evidence + Git workflow options */}\n <WorkflowOptionsSection\n approvalGates={form.approvalGates}\n onApprovalGatesChange={form.setApprovalGates}\n enableEvidence={form.enableEvidence}\n onEnableEvidenceChange={form.setEnableEvidence}\n commitEvidence={form.commitEvidence}\n onCommitEvidenceChange={form.setCommitEvidence}\n push={form.push}\n onPushChange={form.setPush}\n openPr={form.openPr}\n onOpenPrChange={form.setOpenPr}\n ciWatchEnabled={form.ciWatchEnabled}\n onCiWatchChange={form.setCiWatchEnabled}\n rebaseBeforeBranch={form.rebaseBeforeBranch}\n onRebaseBeforeBranchChange={form.setRebaseBeforeBranch}\n commitSpecs={form.commitSpecs}\n onCommitSpecsChange={form.setCommitSpecs}\n forkAndPr={form.forkAndPr}\n onForkAndPrChange={form.setForkAndPr}\n canPush={form.canPush}\n fast={form.fast}\n computedPush={form.computedPush}\n computedOpenPr={form.computedOpenPr}\n isSubmitting={isSubmitting}\n />\n </form>\n </TooltipProvider>\n </div>\n </BaseDrawer>\n );\n}\n","'use client';\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { useSoundAction } from '@/hooks/use-sound-action';\nimport { useGuardedDrawerClose } from '@/hooks/drawer-close-guard';\nimport { getViewerPermission } from '@/app/actions/get-viewer-permission';\nimport type { WorkflowDefaults } from '@/app/actions/get-workflow-defaults';\nimport { pickFiles } from './pick-files';\nimport type { FormAttachment, RepositoryOption, FeatureCreatePayload } from './types';\n\nconst MAX_FILE_SIZE = 10 * 1024 * 1024; // 10 MB\n\nconst ALLOWED_EXTENSIONS = new Set([\n '.png',\n '.jpg',\n '.jpeg',\n '.gif',\n '.webp',\n '.svg',\n '.bmp',\n '.ico',\n '.pdf',\n '.doc',\n '.docx',\n '.xls',\n '.xlsx',\n '.ppt',\n '.pptx',\n '.txt',\n '.md',\n '.csv',\n '.json',\n '.yaml',\n '.yml',\n '.xml',\n '.ts',\n '.tsx',\n '.js',\n '.jsx',\n '.py',\n '.rb',\n '.go',\n '.rs',\n '.java',\n '.c',\n '.cpp',\n '.h',\n '.hpp',\n '.cs',\n '.swift',\n '.kt',\n '.html',\n '.css',\n '.scss',\n '.less',\n '.sh',\n '.bash',\n '.zsh',\n '.fish',\n '.toml',\n '.ini',\n '.cfg',\n '.conf',\n '.env',\n '.zip',\n '.tar',\n '.gz',\n '.log',\n]);\n\nfunction getExtension(filename: string): string {\n const dot = filename.lastIndexOf('.');\n return dot >= 0 ? filename.slice(dot).toLowerCase() : '';\n}\n\nconst EMPTY_GATES: Record<string, boolean> = {\n allowPrd: false,\n allowPlan: false,\n allowMerge: false,\n};\n\nexport interface UseFeatureCreateFormProps {\n open: boolean;\n onClose: () => void;\n onSubmit: (data: FeatureCreatePayload) => void;\n repositoryPath: string;\n workflowDefaults?: WorkflowDefaults;\n repositories?: RepositoryOption[];\n initialParentId?: string;\n currentAgentType?: string;\n currentModel?: string;\n initialDescription?: string;\n canPushDirectly?: boolean;\n}\n\nexport function useFeatureCreateForm({\n open,\n onClose,\n onSubmit,\n repositoryPath,\n workflowDefaults,\n repositories,\n initialParentId,\n currentAgentType,\n currentModel,\n initialDescription,\n canPushDirectly,\n}: UseFeatureCreateFormProps) {\n const createSound = useSoundAction('create');\n\n // Validate repositoryPath from URL against active repos — prevents stale URL params\n // from selecting deleted repos after add/delete/re-add cycles.\n const validRepoPath = !repositoryPath\n ? ''\n : !repositories ||\n repositories.length === 0 ||\n repositories.some((r) => r.path === repositoryPath)\n ? repositoryPath\n : '';\n\n const defaultGates = workflowDefaults?.approvalGates ?? EMPTY_GATES;\n const defaultPush = workflowDefaults?.push ?? false;\n const defaultOpenPr = workflowDefaults?.openPr ?? false;\n const defaultCiWatch = workflowDefaults?.ciWatchEnabled !== false;\n const defaultEnableEvidence = workflowDefaults?.enableEvidence ?? false;\n const defaultCommitEvidence = workflowDefaults?.commitEvidence ?? false;\n const defaultFast = workflowDefaults?.fast !== false;\n\n const [description, setDescription] = useState(initialDescription ?? '');\n\n // Sync description when initialDescription prop changes (e.g. from session context)\n useEffect(() => {\n if (initialDescription) {\n setDescription(initialDescription);\n }\n }, [initialDescription]);\n\n const [attachments, setAttachments] = useState<FormAttachment[]>([]);\n const [approvalGates, setApprovalGates] = useState<Record<string, boolean>>({ ...defaultGates });\n const [push, setPush] = useState(defaultPush);\n const [openPr, setOpenPr] = useState(defaultOpenPr);\n const [ciWatchEnabled, setCiWatchEnabled] = useState(workflowDefaults?.ciWatchEnabled !== false);\n const [enableEvidence, setEnableEvidence] = useState(defaultEnableEvidence);\n const [commitEvidence, setCommitEvidence] = useState(defaultCommitEvidence);\n const [parentId, setParentId] = useState<string | undefined>(undefined);\n const [fast, setFast] = useState(defaultFast);\n const [pending, setPending] = useState(false);\n const [forkAndPr, setForkAndPr] = useState(false);\n const [commitSpecs, setCommitSpecs] = useState(true);\n const [rebaseBeforeBranch, setRebaseBeforeBranch] = useState(true);\n const [overrideAgent, setOverrideAgent] = useState<string | undefined>(undefined);\n const [overrideModel, setOverrideModel] = useState<string | undefined>(undefined);\n const [selectedRepoPath, setSelectedRepoPath] = useState<string | undefined>(\n validRepoPath || undefined\n );\n const [localRepos, setLocalRepos] = useState<RepositoryOption[]>(repositories ?? []);\n const [isDragOver, setIsDragOver] = useState(false);\n const [uploadError, setUploadError] = useState<string | null>(null);\n const [isPromptFocused, setIsPromptFocused] = useState(false);\n\n // Stable sessionId per mount — used for upload dedup grouping\n const sessionIdRef = useRef(crypto.randomUUID());\n const dragCounterRef = useRef(0);\n\n // Sync state when workflowDefaults load asynchronously\n useEffect(() => {\n if (workflowDefaults) {\n setApprovalGates({ ...workflowDefaults.approvalGates });\n setPush(workflowDefaults.push);\n setOpenPr(workflowDefaults.openPr);\n setCiWatchEnabled(workflowDefaults.ciWatchEnabled !== false);\n setEnableEvidence(workflowDefaults.enableEvidence);\n setCommitEvidence(workflowDefaults.commitEvidence);\n setFast(workflowDefaults.fast !== false);\n }\n }, [workflowDefaults]);\n\n // Sync localRepos when repositories prop changes\n useEffect(() => {\n setLocalRepos(repositories ?? []);\n }, [repositories]);\n\n // Pre-select parent when initialParentId changes (e.g. (+) button on feature node)\n useEffect(() => {\n if (open && initialParentId) {\n setParentId(initialParentId);\n }\n }, [open, initialParentId]);\n\n // Permission-aware Fork & PR toggle visibility\n const [canPush, setCanPush] = useState(canPushDirectly ?? false);\n\n // Sync canPush from prop when it changes (e.g. initial server-side value)\n useEffect(() => {\n setCanPush(canPushDirectly ?? false);\n }, [canPushDirectly]);\n\n // Re-check permission when user switches repos via the combobox\n const prevRepoRef = useRef(selectedRepoPath);\n useEffect(() => {\n if (selectedRepoPath && selectedRepoPath !== prevRepoRef.current) {\n prevRepoRef.current = selectedRepoPath;\n getViewerPermission(selectedRepoPath)\n .then((result) => setCanPush(result.canPushDirectly))\n .catch(() => setCanPush(false));\n }\n }, [selectedRepoPath]);\n\n // Auto-reset forkAndPr and dependent states when canPush becomes true\n useEffect(() => {\n if (canPush) {\n setForkAndPr(false);\n setPush(defaultPush);\n setOpenPr(defaultOpenPr);\n setCommitSpecs(true);\n }\n }, [canPush, defaultPush, defaultOpenPr]);\n\n const resetForm = useCallback(() => {\n setDescription('');\n setAttachments([]);\n setApprovalGates({ ...defaultGates });\n setPush(defaultPush);\n setOpenPr(defaultOpenPr);\n setCiWatchEnabled(defaultCiWatch);\n setEnableEvidence(defaultEnableEvidence);\n setCommitEvidence(defaultCommitEvidence);\n setParentId(undefined);\n setSelectedRepoPath(validRepoPath || undefined);\n setLocalRepos(repositories ?? []);\n setFast(defaultFast);\n setPending(false);\n setForkAndPr(false);\n setCommitSpecs(true);\n setRebaseBeforeBranch(true);\n setOverrideAgent(undefined);\n setOverrideModel(undefined);\n setUploadError(null);\n dragCounterRef.current = 0;\n setIsDragOver(false);\n }, [\n defaultGates,\n defaultPush,\n defaultOpenPr,\n defaultEnableEvidence,\n defaultCiWatch,\n defaultCommitEvidence,\n defaultFast,\n validRepoPath,\n repositories,\n ]);\n\n // Track whether the form has unsaved data\n const isDirty = description.trim() !== '' || attachments.length > 0;\n\n // Shared close guard — shows confirmation when dirty, prevents navigation\n const { attemptClose } = useGuardedDrawerClose({ open, isDirty, onClose, onReset: resetForm });\n\n /** Validate and upload files from drop or paste. */\n const handleFiles = useCallback(async (fileList: File[]) => {\n setUploadError(null);\n\n for (const file of fileList) {\n if (file.size > MAX_FILE_SIZE) {\n setUploadError(`\"${file.name}\" exceeds 10 MB limit`);\n return;\n }\n const ext = getExtension(file.name);\n if (ext && !ALLOWED_EXTENSIONS.has(ext)) {\n setUploadError(`File type \"${ext}\" is not allowed`);\n return;\n }\n }\n\n for (const file of fileList) {\n const tempId = crypto.randomUUID();\n\n setAttachments((prev) => [\n ...prev,\n {\n id: tempId,\n name: file.name,\n size: file.size,\n mimeType: file.type || 'application/octet-stream',\n path: '',\n loading: true,\n },\n ]);\n\n try {\n const formData = new FormData();\n formData.append('file', file);\n formData.append('sessionId', sessionIdRef.current);\n\n const res = await fetch('/api/attachments/upload', {\n method: 'POST',\n body: formData,\n });\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({ error: 'Upload failed' }));\n setAttachments((prev) => prev.filter((a) => a.id !== tempId));\n setUploadError(body.error ?? 'Upload failed');\n return;\n }\n\n const uploaded = await res.json();\n setAttachments((prev) => {\n const isDupe = prev.some((a) => a.id !== tempId && a.path === uploaded.path);\n if (isDupe) return prev.filter((a) => a.id !== tempId);\n return prev.map((a) =>\n a.id === tempId ? { ...uploaded, id: tempId, loading: false } : a\n );\n });\n } catch {\n setAttachments((prev) => prev.filter((a) => a.id !== tempId));\n setUploadError('Upload failed');\n }\n }\n }, []);\n\n const handleDragEnter = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounterRef.current += 1;\n if (dragCounterRef.current === 1) {\n setIsDragOver(true);\n }\n }, []);\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounterRef.current -= 1;\n if (dragCounterRef.current === 0) {\n setIsDragOver(false);\n }\n }, []);\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n }, []);\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounterRef.current = 0;\n setIsDragOver(false);\n\n const files = Array.from(e.dataTransfer.files);\n if (files.length > 0) {\n handleFiles(files);\n }\n },\n [handleFiles]\n );\n\n const handlePaste = useCallback(\n (e: React.ClipboardEvent) => {\n const items = e.clipboardData?.items;\n if (!items) return;\n\n const files: File[] = [];\n for (const item of Array.from(items)) {\n if (item.kind === 'file') {\n const file = item.getAsFile();\n if (file) files.push(file);\n }\n }\n\n if (files.length > 0) {\n e.preventDefault();\n handleFiles(files);\n }\n },\n [handleFiles]\n );\n\n const handleSubmit = useCallback(\n (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n if (!description.trim()) return;\n const effectiveRepoPath = selectedRepoPath ?? validRepoPath;\n if (!effectiveRepoPath) return;\n createSound.play();\n onSubmit({\n description: description.trim(),\n attachments: attachments.filter((a) => !a.loading),\n repositoryPath: effectiveRepoPath,\n approvalGates: {\n allowPrd: approvalGates.allowPrd ?? false,\n allowPlan: approvalGates.allowPlan ?? false,\n allowMerge: approvalGates.allowMerge ?? false,\n },\n push: forkAndPr ? true : push || openPr,\n openPr: forkAndPr ? true : openPr,\n ciWatchEnabled,\n enableEvidence,\n commitEvidence,\n fast,\n forkAndPr,\n commitSpecs,\n rebaseBeforeBranch,\n ...(pending ? { pending } : {}),\n ...(overrideAgent ? { agentType: overrideAgent } : {}),\n ...(overrideModel ? { model: overrideModel } : {}),\n ...(parentId ? { parentId } : {}),\n sessionId: sessionIdRef.current,\n });\n resetForm();\n },\n [\n description,\n attachments,\n approvalGates,\n selectedRepoPath,\n validRepoPath,\n onSubmit,\n push,\n openPr,\n enableEvidence,\n ciWatchEnabled,\n commitEvidence,\n fast,\n forkAndPr,\n commitSpecs,\n rebaseBeforeBranch,\n pending,\n overrideAgent,\n overrideModel,\n parentId,\n createSound,\n resetForm,\n ]\n );\n\n const handleAddFiles = useCallback(async () => {\n try {\n const files = await pickFiles();\n if (!files) return;\n\n for (const file of files) {\n const tempId = crypto.randomUUID();\n\n setAttachments((prev) => [\n ...prev,\n {\n id: tempId,\n name: file.name,\n size: file.size,\n mimeType: 'application/octet-stream',\n path: '',\n loading: true,\n },\n ]);\n\n try {\n const res = await fetch('/api/attachments/upload-from-path', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path: file.path, sessionId: sessionIdRef.current }),\n });\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({ error: 'Upload failed' }));\n setAttachments((prev) => prev.filter((a) => a.id !== tempId));\n setUploadError(body.error ?? 'Upload failed');\n return;\n }\n\n const uploaded = await res.json();\n setAttachments((prev) => {\n const isDupe = prev.some((a) => a.id !== tempId && a.path === uploaded.path);\n if (isDupe) return prev.filter((a) => a.id !== tempId);\n return prev.map((a) =>\n a.id === tempId ? { ...uploaded, id: tempId, loading: false } : a\n );\n });\n } catch {\n setAttachments((prev) => prev.filter((a) => a.id !== tempId));\n setUploadError('Upload failed');\n }\n }\n } catch {\n // Native dialog failed — silently ignore (user can retry)\n }\n }, []);\n\n const handleRemoveFile = useCallback((id: string) => {\n setAttachments((prev) => prev.filter((f) => f.id !== id));\n }, []);\n\n const handleNotesChange = useCallback((id: string, notes: string) => {\n setAttachments((prev) => prev.map((f) => (f.id === id ? { ...f, notes } : f)));\n }, []);\n\n const computedPush = forkAndPr ? true : push || openPr;\n const computedOpenPr = forkAndPr ? true : openPr;\n\n return {\n // Derived values\n validRepoPath,\n canPush,\n isDirty,\n computedPush,\n computedOpenPr,\n\n // Form state\n description,\n setDescription,\n attachments,\n approvalGates,\n setApprovalGates,\n push,\n setPush,\n openPr,\n setOpenPr,\n ciWatchEnabled,\n setCiWatchEnabled,\n enableEvidence,\n setEnableEvidence,\n commitEvidence,\n setCommitEvidence,\n parentId,\n setParentId,\n fast,\n setFast,\n pending,\n setPending,\n forkAndPr,\n setForkAndPr,\n commitSpecs,\n setCommitSpecs,\n rebaseBeforeBranch,\n setRebaseBeforeBranch,\n overrideAgent,\n setOverrideAgent,\n overrideModel,\n setOverrideModel,\n selectedRepoPath,\n setSelectedRepoPath,\n localRepos,\n setLocalRepos,\n isDragOver,\n uploadError,\n isPromptFocused,\n setIsPromptFocused,\n sessionIdRef,\n\n // Agent/model passthrough\n currentAgentType,\n currentModel,\n\n // Handlers\n attemptClose,\n handleFiles,\n handleDragEnter,\n handleDragLeave,\n handleDragOver,\n handleDrop,\n handlePaste,\n handleSubmit,\n handleAddFiles,\n handleRemoveFile,\n handleNotesChange,\n resetForm,\n };\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40f940f795d45f0b6c541e477100e63add838e6c79\":{\"name\":\"getViewerPermission\"}},\"src/presentation/web/app/actions/get-viewer-permission.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40f940f795d45f0b6c541e477100e63add838e6c79\",callServer,void 0,findSourceMapURL,\"getViewerPermission\");export{$$RSC_SERVER_ACTION_0 as getViewerPermission};","'use client';\n\nimport { useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { PaperclipIcon, Zap, Clock } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Textarea } from '@/components/ui/textarea';\nimport { Label } from '@/components/ui/label';\nimport { Switch } from '@/components/ui/switch';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { AttachmentChip } from '@/components/common/attachment-chip';\nimport { AgentModelPicker } from '@/components/features/settings/AgentModelPicker';\nimport type { FormAttachment } from './types';\n\nexport interface PromptSectionProps {\n description: string;\n onDescriptionChange: (value: string) => void;\n attachments: FormAttachment[];\n onRemoveFile: (id: string) => void;\n onNotesChange: (id: string, notes: string) => void;\n onPaste: (e: React.ClipboardEvent) => void;\n onDragEnter: (e: React.DragEvent) => void;\n onDragLeave: (e: React.DragEvent) => void;\n onDragOver: (e: React.DragEvent) => void;\n onDrop: (e: React.DragEvent) => void;\n onAddFiles: () => void;\n isDragOver: boolean;\n uploadError: string | null;\n isPromptFocused: boolean;\n onPromptFocus: () => void;\n onPromptBlur: () => void;\n fast: boolean;\n onFastChange: (value: boolean) => void;\n pending: boolean;\n onPendingChange: (value: boolean) => void;\n overrideAgent: string | undefined;\n overrideModel: string | undefined;\n currentAgentType: string | undefined;\n currentModel: string | undefined;\n onAgentModelChange: (agent: string, model: string) => void;\n isSubmitting: boolean;\n}\n\nexport function PromptSection({\n description,\n onDescriptionChange,\n attachments,\n onRemoveFile,\n onNotesChange,\n onPaste,\n onDragEnter,\n onDragLeave,\n onDragOver,\n onDrop,\n onAddFiles,\n isDragOver,\n uploadError,\n isPromptFocused,\n onPromptFocus,\n onPromptBlur,\n fast,\n onFastChange,\n pending,\n onPendingChange,\n overrideAgent,\n overrideModel,\n currentAgentType,\n currentModel,\n onAgentModelChange,\n isSubmitting,\n}: PromptSectionProps) {\n const { t } = useTranslation('web');\n const promptContainerRef = useRef<HTMLDivElement>(null);\n\n const handlePromptBlur = () => {\n // Defer the check so focus has time to settle on the new target.\n // This correctly handles Radix portals (e.g. AgentModelPicker popover) that\n // render outside the container DOM but are logically part of the prompt area.\n setTimeout(() => {\n const withinContainer = promptContainerRef.current?.contains(document.activeElement);\n const pickerPopoverOpen =\n promptContainerRef.current?.querySelector('[aria-expanded=\"true\"]') !== null;\n if (!withinContainer && !pickerPopoverOpen) {\n onPromptBlur();\n }\n }, 0);\n };\n\n return (\n <div\n role=\"region\"\n aria-label={t('createDrawer.fileDropZone')}\n data-drag-over={isDragOver ? 'true' : 'false'}\n onDragEnter={onDragEnter}\n onDragLeave={onDragLeave}\n onDragOver={onDragOver}\n onDrop={onDrop}\n className={cn(\n 'flex flex-col gap-1.5 rounded-md border-2 border-transparent p-1 transition-colors',\n isDragOver && 'border-primary/50 bg-primary/5'\n )}\n >\n <Label\n htmlFor=\"feature-description\"\n className=\"text-muted-foreground text-xs font-semibold tracking-wider\"\n >\n {t('createDrawer.describeFeature')}\n </Label>\n <div\n ref={promptContainerRef}\n onFocus={onPromptFocus}\n onBlur={handlePromptBlur}\n className={cn(\n 'border-input flex h-56 flex-col overflow-hidden rounded-md border shadow-xs transition-[color,box-shadow]',\n isPromptFocused && 'ring-ring/50 border-ring ring-[3px]'\n )}\n >\n <Textarea\n id=\"feature-description\"\n placeholder={t('createDrawer.featurePlaceholder')}\n value={description}\n onChange={(e) => onDescriptionChange(e.target.value)}\n onPaste={onPaste}\n required\n disabled={isSubmitting}\n aria-invalid={!!uploadError}\n aria-describedby={uploadError ? 'feature-upload-error' : undefined}\n className=\"min-h-0 flex-1 resize-none rounded-none border-0 shadow-none focus-visible:ring-0\"\n />\n {/* Inline attachment chips — between textarea and controls */}\n {attachments.length > 0 && (\n <div className=\"flex flex-wrap items-center gap-1.5 px-3 py-2\">\n {attachments.map((file) => (\n <AttachmentChip\n key={file.id}\n name={file.name}\n size={file.size}\n mimeType={file.mimeType}\n path={file.path}\n onRemove={() => onRemoveFile(file.id)}\n disabled={isSubmitting}\n loading={file.loading}\n notes={file.notes}\n onNotesChange={(notes) => onNotesChange(file.id, notes)}\n />\n ))}\n </div>\n )}\n {uploadError ? (\n <p id=\"feature-upload-error\" className=\"text-destructive px-3 pb-2 text-xs\" role=\"alert\">\n {uploadError}\n </p>\n ) : null}\n <div className=\"border-input flex items-center gap-3 border-t px-3 py-1.5\">\n <AgentModelPicker\n initialAgentType={overrideAgent ?? currentAgentType ?? 'claude-code'}\n initialModel={overrideModel ?? currentModel ?? 'claude-sonnet-4-6'}\n mode=\"override\"\n onAgentModelChange={onAgentModelChange}\n disabled={isSubmitting}\n className=\"w-55\"\n />\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"ml-auto flex cursor-pointer items-center gap-2\">\n <Switch\n id=\"pending-mode\"\n checked={pending}\n onCheckedChange={onPendingChange}\n disabled={isSubmitting}\n />\n <Label\n htmlFor=\"pending-mode\"\n className=\"flex cursor-pointer items-center gap-1 text-sm font-medium\"\n >\n <Clock className=\"h-3.5 w-3.5\" />\n {t('createDrawer.pendingMode')}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {t('createDrawer.pendingModeDescription')}\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex cursor-pointer items-center gap-2\">\n <Switch\n id=\"fast-mode\"\n checked={fast}\n onCheckedChange={onFastChange}\n disabled={isSubmitting}\n />\n <Label\n htmlFor=\"fast-mode\"\n className=\"flex cursor-pointer items-center gap-1 text-sm font-medium\"\n >\n <Zap className=\"h-3.5 w-3.5\" />\n {t('createDrawer.fastModeLabel')}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{t('createDrawer.fastModeDescription')}</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={onAddFiles}\n disabled={isSubmitting}\n aria-label={t('chat.attachFiles')}\n className=\"text-muted-foreground hover:text-foreground cursor-pointer rounded p-1 transition-colors\"\n >\n <PaperclipIcon className=\"h-4 w-4\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{t('chat.attachFiles')}</TooltipContent>\n </Tooltip>\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useTranslation } from 'react-i18next';\nimport { GitFork, FileText, RefreshCw } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Label } from '@/components/ui/label';\nimport { Switch } from '@/components/ui/switch';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nconst AUTO_APPROVE_OPTION_IDS = ['allowPrd', 'allowPlan', 'allowMerge'] as const;\n\nexport interface WorkflowOptionsSectionProps {\n approvalGates: Record<string, boolean>;\n onApprovalGatesChange: (gates: Record<string, boolean>) => void;\n enableEvidence: boolean;\n onEnableEvidenceChange: (value: boolean) => void;\n commitEvidence: boolean;\n onCommitEvidenceChange: (value: boolean) => void;\n push: boolean;\n onPushChange: (value: boolean) => void;\n openPr: boolean;\n onOpenPrChange: (value: boolean) => void;\n ciWatchEnabled: boolean;\n onCiWatchChange: (value: boolean) => void;\n rebaseBeforeBranch: boolean;\n onRebaseBeforeBranchChange: (value: boolean) => void;\n commitSpecs: boolean;\n onCommitSpecsChange: (value: boolean) => void;\n forkAndPr: boolean;\n onForkAndPrChange: (value: boolean) => void;\n canPush: boolean;\n fast: boolean;\n computedPush: boolean;\n computedOpenPr: boolean;\n isSubmitting: boolean;\n}\n\nexport function WorkflowOptionsSection({\n approvalGates,\n onApprovalGatesChange,\n enableEvidence,\n onEnableEvidenceChange,\n commitEvidence,\n onCommitEvidenceChange,\n push: _push,\n onPushChange,\n openPr,\n onOpenPrChange,\n ciWatchEnabled,\n onCiWatchChange,\n rebaseBeforeBranch,\n onRebaseBeforeBranchChange,\n commitSpecs,\n onCommitSpecsChange,\n forkAndPr,\n onForkAndPrChange,\n canPush,\n fast,\n computedPush,\n computedOpenPr,\n isSubmitting,\n}: WorkflowOptionsSectionProps) {\n const { t } = useTranslation('web');\n\n const AUTO_APPROVE_OPTIONS = [\n { id: 'allowPrd', label: t('createDrawer.prd'), description: t('createDrawer.prdDescription') },\n {\n id: 'allowPlan',\n label: t('createDrawer.plan'),\n description: t('createDrawer.planDescription'),\n },\n {\n id: 'allowMerge',\n label: t('createDrawer.merge'),\n description: t('createDrawer.mergeDescription'),\n },\n ];\n\n return (\n <div className=\"flex flex-col gap-2\">\n {/* Approve row */}\n <div className=\"border-input flex items-center gap-4 rounded-md border px-3 py-2.5\">\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"text-muted-foreground w-16 shrink-0 cursor-default text-xs font-semibold tracking-wider\">\n {t('createDrawer.approve')}\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{t('createDrawer.approveDescription')}</TooltipContent>\n </Tooltip>\n <div className=\"flex flex-1 items-center gap-4\">\n {AUTO_APPROVE_OPTIONS.map((opt) => (\n <Tooltip key={opt.id}>\n <TooltipTrigger asChild>\n <div className=\"flex cursor-pointer items-center gap-1.5\">\n <Switch\n id={`approve-${opt.id}`}\n size=\"sm\"\n checked={approvalGates[opt.id] ?? false}\n onCheckedChange={(v) =>\n onApprovalGatesChange({ ...approvalGates, [opt.id]: v })\n }\n disabled={\n isSubmitting || (fast && (opt.id === 'allowPrd' || opt.id === 'allowPlan'))\n }\n />\n <Label\n htmlFor={`approve-${opt.id}`}\n className=\"cursor-pointer text-xs font-medium\"\n >\n {opt.label}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {fast && (opt.id === 'allowPrd' || opt.id === 'allowPlan')\n ? t('createDrawer.skippedInFastMode')\n : opt.description}\n </TooltipContent>\n </Tooltip>\n ))}\n </div>\n {/* Select all shortcut */}\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => {\n const allOn = AUTO_APPROVE_OPTION_IDS.every((id) => approvalGates[id]);\n const next: Record<string, boolean> = {};\n for (const id of AUTO_APPROVE_OPTION_IDS) next[id] = !allOn;\n onApprovalGatesChange(next);\n }}\n disabled={isSubmitting}\n className={cn(\n 'text-muted-foreground hover:text-foreground cursor-pointer rounded px-1.5 py-0.5 text-[10px] font-semibold tracking-wider uppercase transition-colors',\n AUTO_APPROVE_OPTION_IDS.every((id) => approvalGates[id]) && 'text-primary'\n )}\n >\n {t('createDrawer.all')}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{t('createDrawer.toggleAllApprovalGates')}</TooltipContent>\n </Tooltip>\n </div>\n\n {/* Evidence row */}\n <div className=\"border-input flex items-center gap-4 rounded-md border px-3 py-2.5\">\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"text-muted-foreground w-16 shrink-0 cursor-default text-xs font-semibold tracking-wider\">\n {t('createDrawer.evidence')}\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{t('createDrawer.evidenceDescription')}</TooltipContent>\n </Tooltip>\n <div className=\"flex flex-1 items-center gap-4\">\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex cursor-pointer items-center gap-1.5\">\n <Switch\n id=\"enable-evidence\"\n size=\"sm\"\n checked={enableEvidence}\n onCheckedChange={(v) => {\n onEnableEvidenceChange(v);\n if (!v) onCommitEvidenceChange(false);\n }}\n disabled={isSubmitting}\n />\n <Label htmlFor=\"enable-evidence\" className=\"cursor-pointer text-xs font-medium\">\n {t('createDrawer.collect')}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{t('createDrawer.collectDescription')}</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex cursor-pointer items-center gap-1.5\">\n <Switch\n id=\"commit-evidence\"\n size=\"sm\"\n checked={commitEvidence}\n onCheckedChange={onCommitEvidenceChange}\n disabled={isSubmitting || !enableEvidence || (!openPr && !forkAndPr)}\n />\n <Label\n htmlFor=\"commit-evidence\"\n className={cn(\n 'cursor-pointer text-xs font-medium',\n (!enableEvidence || (!openPr && !forkAndPr)) && 'opacity-50'\n )}\n >\n {t('createDrawer.addToPr')}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {!openPr && !forkAndPr\n ? t('createDrawer.requiresPr')\n : !enableEvidence\n ? t('createDrawer.requiresEvidence')\n : t('createDrawer.addToPrDescription')}\n </TooltipContent>\n </Tooltip>\n </div>\n </div>\n\n {/* Git row */}\n <div className=\"border-input flex items-start gap-4 rounded-md border px-3 py-2.5\">\n <span className=\"text-muted-foreground w-16 shrink-0 pt-0.5 text-xs font-semibold tracking-wider\">\n {t('createDrawer.git')}\n </span>\n <div className=\"flex flex-1 flex-wrap items-center gap-4\">\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex cursor-pointer items-center gap-1.5\">\n <Switch\n id=\"push\"\n size=\"sm\"\n checked={computedPush}\n onCheckedChange={(v) => {\n onPushChange(v);\n if (!v && openPr) onOpenPrChange(false);\n }}\n disabled={isSubmitting || forkAndPr}\n />\n <Label\n htmlFor=\"push\"\n className={cn('cursor-pointer text-xs font-medium', forkAndPr && 'opacity-50')}\n >\n {t('createDrawer.push')}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {forkAndPr ? 'Enabled — contributing to upstream' : t('createDrawer.pushDescription')}\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex cursor-pointer items-center gap-1.5\">\n <Switch\n id=\"open-pr\"\n size=\"sm\"\n checked={computedOpenPr}\n onCheckedChange={(v) => {\n onOpenPrChange(v);\n if (!v) onCommitEvidenceChange(false);\n }}\n disabled={isSubmitting || forkAndPr}\n />\n <Label\n htmlFor=\"open-pr\"\n className={cn('cursor-pointer text-xs font-medium', forkAndPr && 'opacity-50')}\n >\n {t('createDrawer.pr')}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {forkAndPr ? 'Enabled — contributing to upstream' : t('createDrawer.prDescription')}\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex cursor-pointer items-center gap-1.5\">\n <Switch\n id=\"ci-watch\"\n size=\"sm\"\n checked={ciWatchEnabled}\n onCheckedChange={onCiWatchChange}\n disabled={isSubmitting}\n />\n <Label htmlFor=\"ci-watch\" className=\"cursor-pointer text-xs font-medium\">\n {t('createDrawer.watch')}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{t('createDrawer.watchDescription')}</TooltipContent>\n </Tooltip>\n {/* Separator between standard git and repo options */}\n <div className=\"bg-border h-4 w-px shrink-0\" />\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex cursor-pointer items-center gap-1.5\">\n <Switch\n id=\"rebase-before-branch\"\n size=\"sm\"\n checked={rebaseBeforeBranch}\n onCheckedChange={onRebaseBeforeBranchChange}\n disabled={isSubmitting}\n />\n <Label\n htmlFor=\"rebase-before-branch\"\n className=\"flex cursor-pointer items-center gap-1 text-xs font-medium\"\n >\n <RefreshCw className=\"h-3 w-3\" />\n {t('createDrawer.sync')}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{t('createDrawer.syncDescription')}</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex cursor-pointer items-center gap-1.5\">\n <Switch\n id=\"commit-specs\"\n size=\"sm\"\n checked={commitSpecs}\n onCheckedChange={onCommitSpecsChange}\n disabled={isSubmitting}\n />\n <Label\n htmlFor=\"commit-specs\"\n className=\"flex cursor-pointer items-center gap-1 text-xs font-medium\"\n >\n <FileText className=\"h-3 w-3\" />\n {t('createDrawer.commitSpecs')}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {t('createDrawer.commitSpecsDescription')}\n </TooltipContent>\n </Tooltip>\n {!canPush && (\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex cursor-pointer items-center gap-1.5\">\n <Switch\n id=\"fork-and-pr\"\n size=\"sm\"\n checked={forkAndPr}\n onCheckedChange={(v) => {\n onForkAndPrChange(v);\n // Auto-flip commitSpecs to false when enabling contribute mode\n if (v) onCommitSpecsChange(false);\n }}\n disabled={isSubmitting}\n />\n <Label\n htmlFor=\"fork-and-pr\"\n className=\"flex cursor-pointer items-center gap-1 text-xs font-medium\"\n >\n <GitFork className=\"h-3 w-3\" />\n {t('createDrawer.forkAndPr')}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {t('createDrawer.forkAndPrDescription')}\n </TooltipContent>\n </Tooltip>\n )}\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ChevronsUpDown, CheckIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Input } from '@/components/ui/input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport type { ParentFeatureOption } from './types';\n\nexport interface ParentFeatureComboboxProps {\n features: ParentFeatureOption[];\n value: string | undefined;\n onChange: (id: string | undefined) => void;\n disabled?: boolean;\n}\n\nexport function ParentFeatureCombobox({\n features,\n value,\n onChange,\n disabled,\n}: ParentFeatureComboboxProps) {\n const { t } = useTranslation('web');\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n\n const selectedFeature = features.find((f) => f.id === value);\n\n const filtered = query.trim()\n ? features.filter(\n (f) =>\n f.name.toLowerCase().includes(query.toLowerCase()) ||\n f.id.toLowerCase().includes(query.toLowerCase())\n )\n : features;\n\n const handleSelect = useCallback(\n (id: string | undefined) => {\n onChange(id);\n setOpen(false);\n setQuery('');\n },\n [onChange]\n );\n\n useEffect(() => {\n if (open) {\n setTimeout(() => inputRef.current?.focus(), 0);\n } else {\n setQuery('');\n }\n }, [open]);\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n id=\"parent-feature\"\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n aria-label=\"Parent Feature\"\n disabled={disabled}\n data-testid=\"parent-feature-combobox\"\n className={cn(\n 'border-input bg-background ring-offset-background focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border px-3 py-2 text-sm focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50',\n !selectedFeature && 'text-muted-foreground'\n )}\n >\n <span className=\"truncate\">\n {selectedFeature\n ? `${selectedFeature.name} (${selectedFeature.id.slice(0, 8)})`\n : t('createDrawer.selectParent')}\n </span>\n <ChevronsUpDown className=\"ms-2 h-4 w-4 shrink-0 opacity-50\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-80 p-0\"\n align=\"start\"\n data-testid=\"parent-feature-combobox-content\"\n >\n <div className=\"flex flex-col\">\n {/* Search input */}\n <div className=\"border-b p-2\">\n <Input\n ref={inputRef}\n placeholder={t('createDrawer.searchFeatures')}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n className=\"h-8 border-0 p-0 text-sm shadow-none focus-visible:ring-0\"\n data-testid=\"parent-feature-search\"\n />\n </div>\n\n {/* Options list */}\n <div className=\"max-h-48 overflow-y-auto py-1\" role=\"listbox\" aria-label=\"Features\">\n {/* No parent option */}\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={value === undefined}\n onClick={() => handleSelect(undefined)}\n className={cn(\n 'hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm',\n value === undefined && 'bg-accent/50'\n )}\n data-testid=\"parent-feature-option-none\"\n >\n <CheckIcon className={cn('h-4 w-4 shrink-0', value !== undefined && 'invisible')} />\n <span className=\"text-muted-foreground italic\">{t('createDrawer.noParent')}</span>\n </button>\n\n {filtered.length === 0 && query ? (\n <p className=\"text-muted-foreground px-3 py-2 text-sm\">\n {t('createDrawer.noFeaturesFound')}\n </p>\n ) : (\n filtered.map((f) => (\n <button\n key={f.id}\n type=\"button\"\n role=\"option\"\n aria-selected={value === f.id}\n onClick={() => handleSelect(f.id)}\n className={cn(\n 'hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm',\n value === f.id && 'bg-accent/50'\n )}\n data-testid={`parent-feature-option-${f.id}`}\n >\n <CheckIcon className={cn('h-4 w-4 shrink-0', value !== f.id && 'invisible')} />\n <span className=\"truncate\">\n {f.name}{' '}\n <span className=\"text-muted-foreground font-mono text-xs\">\n ({f.id.slice(0, 8)})\n </span>\n </span>\n </button>\n ))\n )}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n","'use client';\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ChevronsUpDown, CheckIcon, FolderPlus, Loader2 } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Input } from '@/components/ui/input';\nimport { Separator } from '@/components/ui/separator';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport { useFeatureFlags } from '@/hooks/feature-flags-context';\nimport { addRepository } from '@/app/actions/add-repository';\nimport { pickFolder } from '@/components/common/add-repository-button/pick-folder';\nimport { ReactFileManagerDialog } from '@/components/common/react-file-manager-dialog';\nimport type { RepositoryOption } from './types';\n\nexport interface RepositoryComboboxProps {\n repositories: RepositoryOption[];\n value: string | undefined;\n onChange: (path: string | undefined) => void;\n onAddRepository?: (repo: RepositoryOption) => void;\n disabled?: boolean;\n}\n\nexport function RepositoryCombobox({\n repositories,\n value,\n onChange,\n onAddRepository,\n disabled,\n}: RepositoryComboboxProps) {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [isAdding, setIsAdding] = useState(false);\n const [addError, setAddError] = useState<string | null>(null);\n const [showReactPicker, setShowReactPicker] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const { reactFileManager: useReactFileManager } = useFeatureFlags();\n const { t } = useTranslation('web');\n\n const selectedRepo = repositories.find((r) => r.path === value);\n\n const filtered = query.trim()\n ? repositories.filter(\n (r) =>\n r.name.toLowerCase().includes(query.toLowerCase()) ||\n r.path.toLowerCase().includes(query.toLowerCase())\n )\n : repositories;\n\n const handleSelect = useCallback(\n (path: string | undefined) => {\n onChange(path);\n setOpen(false);\n setQuery('');\n },\n [onChange]\n );\n\n const addRepoFromPath = useCallback(\n async (folderPath: string) => {\n const result = await addRepository({ path: folderPath });\n if (result.error) {\n setAddError(result.error);\n setIsAdding(false);\n return;\n }\n if (result.repository) {\n const newRepo: RepositoryOption = {\n id: result.repository.id,\n name: result.repository.name,\n path: result.repository.path,\n };\n onAddRepository?.(newRepo);\n onChange(newRepo.path);\n setOpen(false);\n setQuery('');\n }\n },\n [onAddRepository, onChange]\n );\n\n const handleAddRepository = useCallback(async () => {\n if (isAdding) return;\n\n if (useReactFileManager) {\n setShowReactPicker(true);\n return;\n }\n\n setIsAdding(true);\n setAddError(null);\n try {\n const folderPath = await pickFolder();\n if (!folderPath) {\n setIsAdding(false);\n return;\n }\n await addRepoFromPath(folderPath);\n } catch {\n // Native picker failed — fall back to React file manager\n setShowReactPicker(true);\n } finally {\n setIsAdding(false);\n }\n }, [isAdding, useReactFileManager, addRepoFromPath]);\n\n const handleReactPickerSelect = useCallback(\n async (path: string | null) => {\n setShowReactPicker(false);\n if (!path) return;\n setIsAdding(true);\n setAddError(null);\n try {\n await addRepoFromPath(path);\n } catch (err: unknown) {\n setAddError(err instanceof Error ? err.message : 'Failed to add repository');\n } finally {\n setIsAdding(false);\n }\n },\n [addRepoFromPath]\n );\n\n useEffect(() => {\n if (open) {\n setTimeout(() => inputRef.current?.focus(), 0);\n } else {\n setQuery('');\n }\n }, [open]);\n\n return (\n <>\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n aria-label=\"Repository\"\n aria-invalid={!!addError}\n aria-describedby={addError ? 'add-repository-error-msg' : undefined}\n disabled={disabled}\n data-testid=\"repository-combobox\"\n className={cn(\n 'border-input bg-background ring-offset-background focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border px-3 py-2 text-sm focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50',\n !selectedRepo && 'text-muted-foreground'\n )}\n >\n <span className=\"truncate\">\n {selectedRepo ? selectedRepo.name : 'Select repository...'}\n </span>\n <ChevronsUpDown className=\"ms-2 h-4 w-4 shrink-0 opacity-50\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-80 p-0\"\n align=\"start\"\n data-testid=\"repository-combobox-content\"\n >\n <div className=\"flex flex-col\">\n {/* Search input */}\n <div className=\"border-b p-2\">\n <Input\n ref={inputRef}\n placeholder={t('createDrawer.searchRepositories')}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n className=\"h-8 border-0 p-0 text-sm shadow-none focus-visible:ring-0\"\n data-testid=\"repository-search\"\n />\n </div>\n\n {/* Options list */}\n <div className=\"max-h-48 overflow-y-auto py-1\" role=\"listbox\" aria-label=\"Repositories\">\n {filtered.length === 0 ? (\n <p\n className=\"text-muted-foreground px-3 py-2 text-sm\"\n data-testid=\"repository-empty\"\n >\n No repositories found.\n </p>\n ) : (\n filtered.map((r) => (\n <button\n key={r.id}\n type=\"button\"\n role=\"option\"\n aria-selected={value === r.path}\n onClick={() => handleSelect(r.path)}\n className={cn(\n 'hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm',\n value === r.path && 'bg-accent/50'\n )}\n data-testid={`repository-option-${r.id}`}\n >\n <CheckIcon\n className={cn('h-4 w-4 shrink-0', value !== r.path && 'invisible')}\n />\n <span className=\"flex flex-col items-start truncate\">\n <span className=\"truncate\">{r.name}</span>\n <span className=\"text-muted-foreground truncate text-xs\">{r.path}</span>\n </span>\n </button>\n ))\n )}\n </div>\n\n {/* Add new repository — pinned outside scroll area */}\n <Separator />\n <button\n type=\"button\"\n onClick={handleAddRepository}\n disabled={isAdding}\n className=\"hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm\"\n data-testid=\"add-repository-item\"\n >\n {isAdding ? (\n <Loader2 className=\"h-4 w-4 shrink-0 animate-spin\" />\n ) : (\n <FolderPlus className=\"h-4 w-4 shrink-0\" />\n )}\n <span>Add new repository...</span>\n </button>\n {addError ? (\n <p\n id=\"add-repository-error-msg\"\n className=\"px-3 pb-2 text-xs text-red-500\"\n role=\"alert\"\n data-testid=\"add-repository-error\"\n >\n {addError}\n </p>\n ) : null}\n </div>\n </PopoverContent>\n </Popover>\n <ReactFileManagerDialog\n open={showReactPicker}\n onOpenChange={(isOpen) => {\n if (!isOpen) setShowReactPicker(false);\n }}\n onSelect={handleReactPickerSelect}\n />\n </>\n );\n}\n"],"names":["$$RSC_SERVER_ACTION_0"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/create-drawer-client.tsx","../../../../../../../src/presentation/web/app/actions/data%3A35546e%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx","../../../../../../../src/presentation/web/components/common/feature-create-drawer/use-feature-create-form.ts","../../../../../../../src/presentation/web/app/actions/data%3A64efdf%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/common/feature-create-drawer/prompt-section.tsx","../../../../../../../src/presentation/web/components/common/feature-create-drawer/workflow-options-section.tsx","../../../../../../../src/presentation/web/components/common/feature-create-drawer/parent-feature-combobox.tsx","../../../../../../../src/presentation/web/components/common/feature-create-drawer/repository-combobox.tsx"],"sourcesContent":["'use client';\n\nimport { useState, useCallback, useEffect } from 'react';\nimport { useRouter, usePathname } from 'next/navigation';\nimport { toast } from 'sonner';\nimport { createFeature } from '@/app/actions/create-feature';\nimport { FeatureCreateDrawer } from '@/components/common/feature-create-drawer';\nimport type { FeatureCreatePayload } from '@/components/common/feature-create-drawer';\nimport type { ParentFeatureOption } from '@/components/common/feature-create-drawer/feature-create-drawer';\nimport type { RepositoryOption } from '@/components/common/feature-create-drawer/feature-create-drawer';\nimport type { WorkflowDefaults } from '@/app/actions/get-workflow-defaults';\n\nexport interface CreateDrawerClientProps {\n repositoryPath: string;\n initialParentId?: string;\n initialDescription?: string;\n features: ParentFeatureOption[];\n repositories?: RepositoryOption[];\n workflowDefaults?: WorkflowDefaults;\n currentAgentType?: string;\n currentModel?: string;\n canPushDirectly?: boolean;\n}\n\nexport function CreateDrawerClient({\n repositoryPath,\n initialParentId,\n initialDescription,\n features,\n repositories,\n workflowDefaults,\n currentAgentType,\n currentModel,\n canPushDirectly,\n}: CreateDrawerClientProps) {\n const router = useRouter();\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n // Derive open state from the URL. Next.js parallel routes preserve slot\n // content during soft navigation, so this component is NOT unmounted when\n // navigating to `/`. We watch the pathname and let Vaul handle the close\n // animation when the path no longer matches the create route.\n // When submitting, force the drawer closed immediately — router.push('/')\n // is async and the pathname may not update before the next render.\n const pathname = usePathname();\n const isOnCreateRoute = pathname.startsWith('/create');\n const isOpen = !isSubmitting && isOnCreateRoute;\n\n // Reset isSubmitting once the route has actually changed away from /create,\n // so the drawer can reopen on future visits. Without this, isSubmitting\n // would stay true forever since parallel routes preserve component state.\n useEffect(() => {\n if (!isOnCreateRoute && isSubmitting) {\n setIsSubmitting(false);\n }\n }, [isOnCreateRoute, isSubmitting]);\n\n const onClose = useCallback(() => {\n router.push('/');\n }, [router]);\n\n const onSubmit = useCallback(\n (data: FeatureCreatePayload) => {\n setIsSubmitting(true);\n\n // Close the drawer immediately for responsive UI\n router.push('/');\n\n // Server action Phase 1 returns fast with real feature ID (DB record created)\n // Phase 2 (metadata, worktree, agent) runs in background on server\n createFeature(data)\n .then((result) => {\n if (result.error) {\n toast.error(result.error);\n return;\n }\n // Dispatch event with real feature ID so control center adds it to featureMap\n window.dispatchEvent(\n new CustomEvent('shipit-ai:feature-created', {\n detail: {\n featureId: result.feature!.id,\n name: result.feature!.name,\n description: result.feature!.description,\n repositoryPath: result.feature!.repositoryPath,\n parentId: data.parentId,\n },\n })\n );\n })\n .catch(() => {\n toast.error('Failed to create feature');\n setIsSubmitting(false);\n });\n },\n [router]\n );\n\n return (\n <FeatureCreateDrawer\n open={isOpen}\n onClose={onClose}\n onSubmit={onSubmit}\n repositoryPath={repositoryPath}\n features={features}\n repositories={repositories}\n workflowDefaults={workflowDefaults}\n initialParentId={initialParentId}\n initialDescription={initialDescription}\n isSubmitting={isSubmitting}\n currentAgentType={currentAgentType}\n currentModel={currentModel}\n canPushDirectly={canPushDirectly}\n />\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"408f8dde9886e951ba8fdf4440a9f500717070d580\":{\"name\":\"createFeature\"}},\"src/presentation/web/app/actions/create-feature.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"408f8dde9886e951ba8fdf4440a9f500717070d580\",callServer,void 0,findSourceMapURL,\"createFeature\");export{$$RSC_SERVER_ACTION_0 as createFeature};","'use client';\n\nimport { useCallback, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { BaseDrawer } from '@/components/common/base-drawer';\nimport { DrawerTitle, DrawerDescription } from '@/components/ui/drawer';\nimport { Button } from '@/components/ui/button';\nimport { Label } from '@/components/ui/label';\nimport { Badge } from '@/components/ui/badge';\nimport { TooltipProvider } from '@/components/ui/tooltip';\nimport type { WorkflowDefaults } from '@/app/actions/get-workflow-defaults';\nimport { useFeatureCreateForm } from './use-feature-create-form';\nimport { PromptSection } from './prompt-section';\nimport { WorkflowOptionsSection } from './workflow-options-section';\nimport { ParentFeatureCombobox } from './parent-feature-combobox';\nimport { RepositoryCombobox } from './repository-combobox';\nimport type { ParentFeatureOption, RepositoryOption, FeatureCreatePayload } from './types';\n\nexport type { FileAttachment } from '@shipit-ai/core/infrastructure/services/file-dialog.service';\nexport type { FormAttachment } from './types';\nexport type { ParentFeatureOption, RepositoryOption, FeatureCreatePayload };\nexport type { RepositoryComboboxProps } from './repository-combobox';\nexport { RepositoryCombobox } from './repository-combobox';\n\nexport interface FeatureCreateDrawerProps {\n open: boolean;\n onClose: () => void;\n onSubmit: (data: FeatureCreatePayload) => void;\n repositoryPath: string;\n isSubmitting?: boolean;\n workflowDefaults?: WorkflowDefaults;\n /** List of existing features available for selection as a parent. */\n features?: ParentFeatureOption[];\n /** List of tracked repositories for selection when repo context is missing. */\n repositories?: RepositoryOption[];\n /** Pre-select a parent feature when the drawer opens (e.g. from (+) button on a feature node). */\n initialParentId?: string;\n /** Current global agent type from settings */\n currentAgentType?: string;\n /** Current global model from settings */\n currentModel?: string;\n /** Pre-fill the description textarea (e.g. from session context) */\n initialDescription?: string;\n /** When true, user has push access — Fork & PR toggle will be hidden. */\n canPushDirectly?: boolean;\n}\n\nexport function FeatureCreateDrawer({\n open,\n onClose,\n onSubmit,\n repositoryPath,\n isSubmitting = false,\n workflowDefaults,\n features,\n repositories,\n initialParentId,\n currentAgentType,\n currentModel,\n initialDescription,\n canPushDirectly,\n}: FeatureCreateDrawerProps) {\n const { t } = useTranslation('web');\n\n const form = useFeatureCreateForm({\n open,\n onClose,\n onSubmit,\n repositoryPath,\n workflowDefaults,\n repositories,\n initialParentId,\n currentAgentType,\n currentModel,\n initialDescription,\n canPushDirectly,\n });\n\n const formRef = useRef<HTMLFormElement>(null);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if ((e.ctrlKey || e.metaKey) && e.key === 'Enter') {\n e.preventDefault();\n formRef.current?.requestSubmit();\n }\n }, []);\n\n const hasFeatures = features && features.length > 0;\n const showRepoSelector = !form.validRepoPath && repositories !== undefined;\n const needsRepo = !form.validRepoPath && !form.selectedRepoPath;\n\n return (\n <BaseDrawer\n open={open}\n onClose={form.attemptClose}\n size=\"md\"\n modal={false}\n dismissOnOutsideClick\n data-testid=\"feature-create-drawer\"\n header={\n <>\n <div className=\"flex items-center gap-2\">\n <div className=\"h-2.5 w-2.5 shrink-0 rounded-full bg-blue-500\" />\n <DrawerTitle>{t('createDrawer.title')}</DrawerTitle>\n </div>\n {isSubmitting ? (\n <DrawerDescription asChild>\n <div>\n <Badge variant=\"secondary\">{t('createDrawer.creating')}</Badge>\n </div>\n </DrawerDescription>\n ) : null}\n </>\n }\n footer={\n <div className=\"flex flex-row justify-end gap-2\">\n <Button variant=\"outline\" onClick={form.attemptClose} disabled={isSubmitting}>\n {t('createDrawer.cancel')}\n </Button>\n <Button\n type=\"submit\"\n form=\"create-feature-form\"\n disabled={!form.description.trim() || isSubmitting || needsRepo}\n >\n {isSubmitting ? t('createDrawer.creating') : t('createDrawer.createFeature')}\n </Button>\n </div>\n }\n >\n {/* Form body */}\n <div className=\"overflow-y-auto p-4\">\n <TooltipProvider delayDuration={400}>\n <form\n ref={formRef}\n id=\"create-feature-form\"\n onSubmit={form.handleSubmit}\n onKeyDown={handleKeyDown}\n className=\"flex flex-col gap-4\"\n >\n {/* Repository selector (only when opened from sidebar without repo context) */}\n {showRepoSelector ? (\n <div className=\"flex flex-col gap-1.5\" data-testid=\"repo-selector-section\">\n <Label className=\"text-muted-foreground text-xs font-semibold tracking-wider\">\n {t('createDrawer.repository')}\n </Label>\n <RepositoryCombobox\n repositories={form.localRepos}\n value={form.selectedRepoPath}\n onChange={form.setSelectedRepoPath}\n onAddRepository={(repo) => {\n form.setLocalRepos((prev) => [...prev, repo]);\n form.setSelectedRepoPath(repo.path);\n }}\n disabled={isSubmitting}\n />\n </div>\n ) : form.validRepoPath ? (\n <div className=\"flex flex-col gap-1.5\" data-testid=\"repo-readonly-section\">\n <Label className=\"text-muted-foreground text-xs font-semibold tracking-wider\">\n {t('createDrawer.repository')}\n </Label>\n <p className=\"text-sm\" data-testid=\"repo-readonly-label\">\n {repositories?.find((r) => r.path === form.validRepoPath)?.name ??\n form.validRepoPath.split('/').pop()}\n </p>\n </div>\n ) : null}\n\n {/* Description + inline controls with drop zone */}\n <PromptSection\n description={form.description}\n onDescriptionChange={form.setDescription}\n attachments={form.attachments}\n onRemoveFile={form.handleRemoveFile}\n onNotesChange={form.handleNotesChange}\n onPaste={form.handlePaste}\n onDragEnter={form.handleDragEnter}\n onDragLeave={form.handleDragLeave}\n onDragOver={form.handleDragOver}\n onDrop={form.handleDrop}\n onAddFiles={form.handleAddFiles}\n isDragOver={form.isDragOver}\n uploadError={form.uploadError}\n isPromptFocused={form.isPromptFocused}\n onPromptFocus={() => form.setIsPromptFocused(true)}\n onPromptBlur={() => form.setIsPromptFocused(false)}\n fast={form.fast}\n onFastChange={form.setFast}\n pending={form.pending}\n onPendingChange={form.setPending}\n overrideAgent={form.overrideAgent}\n overrideModel={form.overrideModel}\n currentAgentType={currentAgentType}\n currentModel={currentModel}\n onAgentModelChange={(agent, model) => {\n form.setOverrideAgent(agent);\n form.setOverrideModel(model);\n }}\n isSubmitting={isSubmitting}\n />\n\n {/* Parent feature selector (only when opened from a feature node) */}\n {hasFeatures && initialParentId !== undefined ? (\n <div className=\"flex flex-col gap-1.5\">\n <Label\n htmlFor=\"parent-feature\"\n className=\"text-muted-foreground text-xs font-semibold tracking-wider\"\n >\n {t('createDrawer.parentFeature')}\n </Label>\n <ParentFeatureCombobox\n features={features}\n value={form.parentId}\n onChange={form.setParentId}\n disabled={isSubmitting}\n />\n </div>\n ) : null}\n\n {/* Approve + Evidence + Git workflow options */}\n <WorkflowOptionsSection\n approvalGates={form.approvalGates}\n onApprovalGatesChange={form.setApprovalGates}\n enableEvidence={form.enableEvidence}\n onEnableEvidenceChange={form.setEnableEvidence}\n commitEvidence={form.commitEvidence}\n onCommitEvidenceChange={form.setCommitEvidence}\n push={form.push}\n onPushChange={form.setPush}\n openPr={form.openPr}\n onOpenPrChange={form.setOpenPr}\n ciWatchEnabled={form.ciWatchEnabled}\n onCiWatchChange={form.setCiWatchEnabled}\n rebaseBeforeBranch={form.rebaseBeforeBranch}\n onRebaseBeforeBranchChange={form.setRebaseBeforeBranch}\n commitSpecs={form.commitSpecs}\n onCommitSpecsChange={form.setCommitSpecs}\n forkAndPr={form.forkAndPr}\n onForkAndPrChange={form.setForkAndPr}\n canPush={form.canPush}\n fast={form.fast}\n computedPush={form.computedPush}\n computedOpenPr={form.computedOpenPr}\n isSubmitting={isSubmitting}\n />\n </form>\n </TooltipProvider>\n </div>\n </BaseDrawer>\n );\n}\n","'use client';\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { useSoundAction } from '@/hooks/use-sound-action';\nimport { useGuardedDrawerClose } from '@/hooks/drawer-close-guard';\nimport { getViewerPermission } from '@/app/actions/get-viewer-permission';\nimport type { WorkflowDefaults } from '@/app/actions/get-workflow-defaults';\nimport { pickFiles } from './pick-files';\nimport type { FormAttachment, RepositoryOption, FeatureCreatePayload } from './types';\n\nconst MAX_FILE_SIZE = 10 * 1024 * 1024; // 10 MB\n\nconst ALLOWED_EXTENSIONS = new Set([\n '.png',\n '.jpg',\n '.jpeg',\n '.gif',\n '.webp',\n '.svg',\n '.bmp',\n '.ico',\n '.pdf',\n '.doc',\n '.docx',\n '.xls',\n '.xlsx',\n '.ppt',\n '.pptx',\n '.txt',\n '.md',\n '.csv',\n '.json',\n '.yaml',\n '.yml',\n '.xml',\n '.ts',\n '.tsx',\n '.js',\n '.jsx',\n '.py',\n '.rb',\n '.go',\n '.rs',\n '.java',\n '.c',\n '.cpp',\n '.h',\n '.hpp',\n '.cs',\n '.swift',\n '.kt',\n '.html',\n '.css',\n '.scss',\n '.less',\n '.sh',\n '.bash',\n '.zsh',\n '.fish',\n '.toml',\n '.ini',\n '.cfg',\n '.conf',\n '.env',\n '.zip',\n '.tar',\n '.gz',\n '.log',\n]);\n\nfunction getExtension(filename: string): string {\n const dot = filename.lastIndexOf('.');\n return dot >= 0 ? filename.slice(dot).toLowerCase() : '';\n}\n\nconst EMPTY_GATES: Record<string, boolean> = {\n allowPrd: false,\n allowPlan: false,\n allowMerge: false,\n};\n\nexport interface UseFeatureCreateFormProps {\n open: boolean;\n onClose: () => void;\n onSubmit: (data: FeatureCreatePayload) => void;\n repositoryPath: string;\n workflowDefaults?: WorkflowDefaults;\n repositories?: RepositoryOption[];\n initialParentId?: string;\n currentAgentType?: string;\n currentModel?: string;\n initialDescription?: string;\n canPushDirectly?: boolean;\n}\n\nexport function useFeatureCreateForm({\n open,\n onClose,\n onSubmit,\n repositoryPath,\n workflowDefaults,\n repositories,\n initialParentId,\n currentAgentType,\n currentModel,\n initialDescription,\n canPushDirectly,\n}: UseFeatureCreateFormProps) {\n const createSound = useSoundAction('create');\n\n // Validate repositoryPath from URL against active repos — prevents stale URL params\n // from selecting deleted repos after add/delete/re-add cycles.\n const validRepoPath = !repositoryPath\n ? ''\n : !repositories ||\n repositories.length === 0 ||\n repositories.some((r) => r.path === repositoryPath)\n ? repositoryPath\n : '';\n\n const defaultGates = workflowDefaults?.approvalGates ?? EMPTY_GATES;\n const defaultPush = workflowDefaults?.push ?? false;\n const defaultOpenPr = workflowDefaults?.openPr ?? false;\n const defaultCiWatch = workflowDefaults?.ciWatchEnabled !== false;\n const defaultEnableEvidence = workflowDefaults?.enableEvidence ?? false;\n const defaultCommitEvidence = workflowDefaults?.commitEvidence ?? false;\n const defaultFast = workflowDefaults?.fast !== false;\n\n const [description, setDescription] = useState(initialDescription ?? '');\n\n // Sync description when initialDescription prop changes (e.g. from session context)\n useEffect(() => {\n if (initialDescription) {\n setDescription(initialDescription);\n }\n }, [initialDescription]);\n\n const [attachments, setAttachments] = useState<FormAttachment[]>([]);\n const [approvalGates, setApprovalGates] = useState<Record<string, boolean>>({ ...defaultGates });\n const [push, setPush] = useState(defaultPush);\n const [openPr, setOpenPr] = useState(defaultOpenPr);\n const [ciWatchEnabled, setCiWatchEnabled] = useState(workflowDefaults?.ciWatchEnabled !== false);\n const [enableEvidence, setEnableEvidence] = useState(defaultEnableEvidence);\n const [commitEvidence, setCommitEvidence] = useState(defaultCommitEvidence);\n const [parentId, setParentId] = useState<string | undefined>(undefined);\n const [fast, setFast] = useState(defaultFast);\n const [pending, setPending] = useState(false);\n const [forkAndPr, setForkAndPr] = useState(false);\n const [commitSpecs, setCommitSpecs] = useState(true);\n const [rebaseBeforeBranch, setRebaseBeforeBranch] = useState(true);\n const [overrideAgent, setOverrideAgent] = useState<string | undefined>(undefined);\n const [overrideModel, setOverrideModel] = useState<string | undefined>(undefined);\n const [selectedRepoPath, setSelectedRepoPath] = useState<string | undefined>(\n validRepoPath || undefined\n );\n const [localRepos, setLocalRepos] = useState<RepositoryOption[]>(repositories ?? []);\n const [isDragOver, setIsDragOver] = useState(false);\n const [uploadError, setUploadError] = useState<string | null>(null);\n const [isPromptFocused, setIsPromptFocused] = useState(false);\n\n // Stable sessionId per mount — used for upload dedup grouping\n const sessionIdRef = useRef(crypto.randomUUID());\n const dragCounterRef = useRef(0);\n\n // Sync state when workflowDefaults load asynchronously\n useEffect(() => {\n if (workflowDefaults) {\n setApprovalGates({ ...workflowDefaults.approvalGates });\n setPush(workflowDefaults.push);\n setOpenPr(workflowDefaults.openPr);\n setCiWatchEnabled(workflowDefaults.ciWatchEnabled !== false);\n setEnableEvidence(workflowDefaults.enableEvidence);\n setCommitEvidence(workflowDefaults.commitEvidence);\n setFast(workflowDefaults.fast !== false);\n }\n }, [workflowDefaults]);\n\n // Sync localRepos when repositories prop changes\n useEffect(() => {\n setLocalRepos(repositories ?? []);\n }, [repositories]);\n\n // Pre-select parent when initialParentId changes (e.g. (+) button on feature node)\n useEffect(() => {\n if (open && initialParentId) {\n setParentId(initialParentId);\n }\n }, [open, initialParentId]);\n\n // Permission-aware Fork & PR toggle visibility\n const [canPush, setCanPush] = useState(canPushDirectly ?? false);\n\n // Sync canPush from prop when it changes (e.g. initial server-side value)\n useEffect(() => {\n setCanPush(canPushDirectly ?? false);\n }, [canPushDirectly]);\n\n // Re-check permission when user switches repos via the combobox\n const prevRepoRef = useRef(selectedRepoPath);\n useEffect(() => {\n if (selectedRepoPath && selectedRepoPath !== prevRepoRef.current) {\n prevRepoRef.current = selectedRepoPath;\n getViewerPermission(selectedRepoPath)\n .then((result) => setCanPush(result.canPushDirectly))\n .catch(() => setCanPush(false));\n }\n }, [selectedRepoPath]);\n\n // Auto-reset forkAndPr and dependent states when canPush becomes true\n useEffect(() => {\n if (canPush) {\n setForkAndPr(false);\n setPush(defaultPush);\n setOpenPr(defaultOpenPr);\n setCommitSpecs(true);\n }\n }, [canPush, defaultPush, defaultOpenPr]);\n\n const resetForm = useCallback(() => {\n setDescription('');\n setAttachments([]);\n setApprovalGates({ ...defaultGates });\n setPush(defaultPush);\n setOpenPr(defaultOpenPr);\n setCiWatchEnabled(defaultCiWatch);\n setEnableEvidence(defaultEnableEvidence);\n setCommitEvidence(defaultCommitEvidence);\n setParentId(undefined);\n setSelectedRepoPath(validRepoPath || undefined);\n setLocalRepos(repositories ?? []);\n setFast(defaultFast);\n setPending(false);\n setForkAndPr(false);\n setCommitSpecs(true);\n setRebaseBeforeBranch(true);\n setOverrideAgent(undefined);\n setOverrideModel(undefined);\n setUploadError(null);\n dragCounterRef.current = 0;\n setIsDragOver(false);\n }, [\n defaultGates,\n defaultPush,\n defaultOpenPr,\n defaultEnableEvidence,\n defaultCiWatch,\n defaultCommitEvidence,\n defaultFast,\n validRepoPath,\n repositories,\n ]);\n\n // Track whether the form has unsaved data\n const isDirty = description.trim() !== '' || attachments.length > 0;\n\n // Shared close guard — shows confirmation when dirty, prevents navigation\n const { attemptClose } = useGuardedDrawerClose({ open, isDirty, onClose, onReset: resetForm });\n\n /** Validate and upload files from drop or paste. */\n const handleFiles = useCallback(async (fileList: File[]) => {\n setUploadError(null);\n\n for (const file of fileList) {\n if (file.size > MAX_FILE_SIZE) {\n setUploadError(`\"${file.name}\" exceeds 10 MB limit`);\n return;\n }\n const ext = getExtension(file.name);\n if (ext && !ALLOWED_EXTENSIONS.has(ext)) {\n setUploadError(`File type \"${ext}\" is not allowed`);\n return;\n }\n }\n\n for (const file of fileList) {\n const tempId = crypto.randomUUID();\n\n setAttachments((prev) => [\n ...prev,\n {\n id: tempId,\n name: file.name,\n size: file.size,\n mimeType: file.type || 'application/octet-stream',\n path: '',\n loading: true,\n },\n ]);\n\n try {\n const formData = new FormData();\n formData.append('file', file);\n formData.append('sessionId', sessionIdRef.current);\n\n const res = await fetch('/api/attachments/upload', {\n method: 'POST',\n body: formData,\n });\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({ error: 'Upload failed' }));\n setAttachments((prev) => prev.filter((a) => a.id !== tempId));\n setUploadError(body.error ?? 'Upload failed');\n return;\n }\n\n const uploaded = await res.json();\n setAttachments((prev) => {\n const isDupe = prev.some((a) => a.id !== tempId && a.path === uploaded.path);\n if (isDupe) return prev.filter((a) => a.id !== tempId);\n return prev.map((a) =>\n a.id === tempId ? { ...uploaded, id: tempId, loading: false } : a\n );\n });\n } catch {\n setAttachments((prev) => prev.filter((a) => a.id !== tempId));\n setUploadError('Upload failed');\n }\n }\n }, []);\n\n const handleDragEnter = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounterRef.current += 1;\n if (dragCounterRef.current === 1) {\n setIsDragOver(true);\n }\n }, []);\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounterRef.current -= 1;\n if (dragCounterRef.current === 0) {\n setIsDragOver(false);\n }\n }, []);\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n }, []);\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounterRef.current = 0;\n setIsDragOver(false);\n\n const files = Array.from(e.dataTransfer.files);\n if (files.length > 0) {\n handleFiles(files);\n }\n },\n [handleFiles]\n );\n\n const handlePaste = useCallback(\n (e: React.ClipboardEvent) => {\n const items = e.clipboardData?.items;\n if (!items) return;\n\n const files: File[] = [];\n for (const item of Array.from(items)) {\n if (item.kind === 'file') {\n const file = item.getAsFile();\n if (file) files.push(file);\n }\n }\n\n if (files.length > 0) {\n e.preventDefault();\n handleFiles(files);\n }\n },\n [handleFiles]\n );\n\n const handleSubmit = useCallback(\n (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n if (!description.trim()) return;\n const effectiveRepoPath = selectedRepoPath ?? validRepoPath;\n if (!effectiveRepoPath) return;\n createSound.play();\n onSubmit({\n description: description.trim(),\n attachments: attachments.filter((a) => !a.loading),\n repositoryPath: effectiveRepoPath,\n approvalGates: {\n allowPrd: approvalGates.allowPrd ?? false,\n allowPlan: approvalGates.allowPlan ?? false,\n allowMerge: approvalGates.allowMerge ?? false,\n },\n push: forkAndPr ? true : push || openPr,\n openPr: forkAndPr ? true : openPr,\n ciWatchEnabled,\n enableEvidence,\n commitEvidence,\n fast,\n forkAndPr,\n commitSpecs,\n rebaseBeforeBranch,\n ...(pending ? { pending } : {}),\n ...(overrideAgent ? { agentType: overrideAgent } : {}),\n ...(overrideModel ? { model: overrideModel } : {}),\n ...(parentId ? { parentId } : {}),\n sessionId: sessionIdRef.current,\n });\n resetForm();\n },\n [\n description,\n attachments,\n approvalGates,\n selectedRepoPath,\n validRepoPath,\n onSubmit,\n push,\n openPr,\n enableEvidence,\n ciWatchEnabled,\n commitEvidence,\n fast,\n forkAndPr,\n commitSpecs,\n rebaseBeforeBranch,\n pending,\n overrideAgent,\n overrideModel,\n parentId,\n createSound,\n resetForm,\n ]\n );\n\n const handleAddFiles = useCallback(async () => {\n try {\n const files = await pickFiles();\n if (!files) return;\n\n for (const file of files) {\n const tempId = crypto.randomUUID();\n\n setAttachments((prev) => [\n ...prev,\n {\n id: tempId,\n name: file.name,\n size: file.size,\n mimeType: 'application/octet-stream',\n path: '',\n loading: true,\n },\n ]);\n\n try {\n const res = await fetch('/api/attachments/upload-from-path', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path: file.path, sessionId: sessionIdRef.current }),\n });\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({ error: 'Upload failed' }));\n setAttachments((prev) => prev.filter((a) => a.id !== tempId));\n setUploadError(body.error ?? 'Upload failed');\n return;\n }\n\n const uploaded = await res.json();\n setAttachments((prev) => {\n const isDupe = prev.some((a) => a.id !== tempId && a.path === uploaded.path);\n if (isDupe) return prev.filter((a) => a.id !== tempId);\n return prev.map((a) =>\n a.id === tempId ? { ...uploaded, id: tempId, loading: false } : a\n );\n });\n } catch {\n setAttachments((prev) => prev.filter((a) => a.id !== tempId));\n setUploadError('Upload failed');\n }\n }\n } catch {\n // Native dialog failed — silently ignore (user can retry)\n }\n }, []);\n\n const handleRemoveFile = useCallback((id: string) => {\n setAttachments((prev) => prev.filter((f) => f.id !== id));\n }, []);\n\n const handleNotesChange = useCallback((id: string, notes: string) => {\n setAttachments((prev) => prev.map((f) => (f.id === id ? { ...f, notes } : f)));\n }, []);\n\n const computedPush = forkAndPr ? true : push || openPr;\n const computedOpenPr = forkAndPr ? true : openPr;\n\n return {\n // Derived values\n validRepoPath,\n canPush,\n isDirty,\n computedPush,\n computedOpenPr,\n\n // Form state\n description,\n setDescription,\n attachments,\n approvalGates,\n setApprovalGates,\n push,\n setPush,\n openPr,\n setOpenPr,\n ciWatchEnabled,\n setCiWatchEnabled,\n enableEvidence,\n setEnableEvidence,\n commitEvidence,\n setCommitEvidence,\n parentId,\n setParentId,\n fast,\n setFast,\n pending,\n setPending,\n forkAndPr,\n setForkAndPr,\n commitSpecs,\n setCommitSpecs,\n rebaseBeforeBranch,\n setRebaseBeforeBranch,\n overrideAgent,\n setOverrideAgent,\n overrideModel,\n setOverrideModel,\n selectedRepoPath,\n setSelectedRepoPath,\n localRepos,\n setLocalRepos,\n isDragOver,\n uploadError,\n isPromptFocused,\n setIsPromptFocused,\n sessionIdRef,\n\n // Agent/model passthrough\n currentAgentType,\n currentModel,\n\n // Handlers\n attemptClose,\n handleFiles,\n handleDragEnter,\n handleDragLeave,\n handleDragOver,\n handleDrop,\n handlePaste,\n handleSubmit,\n handleAddFiles,\n handleRemoveFile,\n handleNotesChange,\n resetForm,\n };\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"4039b04ad46b9f7fcf1d1d6944ceb81f67b3e99322\":{\"name\":\"getViewerPermission\"}},\"src/presentation/web/app/actions/get-viewer-permission.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"4039b04ad46b9f7fcf1d1d6944ceb81f67b3e99322\",callServer,void 0,findSourceMapURL,\"getViewerPermission\");export{$$RSC_SERVER_ACTION_0 as getViewerPermission};","'use client';\n\nimport { useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { PaperclipIcon, Zap, Clock } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Textarea } from '@/components/ui/textarea';\nimport { Label } from '@/components/ui/label';\nimport { Switch } from '@/components/ui/switch';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { AttachmentChip } from '@/components/common/attachment-chip';\nimport { AgentModelPicker } from '@/components/features/settings/AgentModelPicker';\nimport type { FormAttachment } from './types';\n\nexport interface PromptSectionProps {\n description: string;\n onDescriptionChange: (value: string) => void;\n attachments: FormAttachment[];\n onRemoveFile: (id: string) => void;\n onNotesChange: (id: string, notes: string) => void;\n onPaste: (e: React.ClipboardEvent) => void;\n onDragEnter: (e: React.DragEvent) => void;\n onDragLeave: (e: React.DragEvent) => void;\n onDragOver: (e: React.DragEvent) => void;\n onDrop: (e: React.DragEvent) => void;\n onAddFiles: () => void;\n isDragOver: boolean;\n uploadError: string | null;\n isPromptFocused: boolean;\n onPromptFocus: () => void;\n onPromptBlur: () => void;\n fast: boolean;\n onFastChange: (value: boolean) => void;\n pending: boolean;\n onPendingChange: (value: boolean) => void;\n overrideAgent: string | undefined;\n overrideModel: string | undefined;\n currentAgentType: string | undefined;\n currentModel: string | undefined;\n onAgentModelChange: (agent: string, model: string) => void;\n isSubmitting: boolean;\n}\n\nexport function PromptSection({\n description,\n onDescriptionChange,\n attachments,\n onRemoveFile,\n onNotesChange,\n onPaste,\n onDragEnter,\n onDragLeave,\n onDragOver,\n onDrop,\n onAddFiles,\n isDragOver,\n uploadError,\n isPromptFocused,\n onPromptFocus,\n onPromptBlur,\n fast,\n onFastChange,\n pending,\n onPendingChange,\n overrideAgent,\n overrideModel,\n currentAgentType,\n currentModel,\n onAgentModelChange,\n isSubmitting,\n}: PromptSectionProps) {\n const { t } = useTranslation('web');\n const promptContainerRef = useRef<HTMLDivElement>(null);\n\n const handlePromptBlur = () => {\n // Defer the check so focus has time to settle on the new target.\n // This correctly handles Radix portals (e.g. AgentModelPicker popover) that\n // render outside the container DOM but are logically part of the prompt area.\n setTimeout(() => {\n const withinContainer = promptContainerRef.current?.contains(document.activeElement);\n const pickerPopoverOpen =\n promptContainerRef.current?.querySelector('[aria-expanded=\"true\"]') !== null;\n if (!withinContainer && !pickerPopoverOpen) {\n onPromptBlur();\n }\n }, 0);\n };\n\n return (\n <div\n role=\"region\"\n aria-label={t('createDrawer.fileDropZone')}\n data-drag-over={isDragOver ? 'true' : 'false'}\n onDragEnter={onDragEnter}\n onDragLeave={onDragLeave}\n onDragOver={onDragOver}\n onDrop={onDrop}\n className={cn(\n 'flex flex-col gap-1.5 rounded-md border-2 border-transparent p-1 transition-colors',\n isDragOver && 'border-primary/50 bg-primary/5'\n )}\n >\n <Label\n htmlFor=\"feature-description\"\n className=\"text-muted-foreground text-xs font-semibold tracking-wider\"\n >\n {t('createDrawer.describeFeature')}\n </Label>\n <div\n ref={promptContainerRef}\n onFocus={onPromptFocus}\n onBlur={handlePromptBlur}\n className={cn(\n 'border-input flex h-56 flex-col overflow-hidden rounded-md border shadow-xs transition-[color,box-shadow]',\n isPromptFocused && 'ring-ring/50 border-ring ring-[3px]'\n )}\n >\n <Textarea\n id=\"feature-description\"\n placeholder={t('createDrawer.featurePlaceholder')}\n value={description}\n onChange={(e) => onDescriptionChange(e.target.value)}\n onPaste={onPaste}\n required\n disabled={isSubmitting}\n aria-invalid={!!uploadError}\n aria-describedby={uploadError ? 'feature-upload-error' : undefined}\n className=\"min-h-0 flex-1 resize-none rounded-none border-0 shadow-none focus-visible:ring-0\"\n />\n {/* Inline attachment chips — between textarea and controls */}\n {attachments.length > 0 && (\n <div className=\"flex flex-wrap items-center gap-1.5 px-3 py-2\">\n {attachments.map((file) => (\n <AttachmentChip\n key={file.id}\n name={file.name}\n size={file.size}\n mimeType={file.mimeType}\n path={file.path}\n onRemove={() => onRemoveFile(file.id)}\n disabled={isSubmitting}\n loading={file.loading}\n notes={file.notes}\n onNotesChange={(notes) => onNotesChange(file.id, notes)}\n />\n ))}\n </div>\n )}\n {uploadError ? (\n <p id=\"feature-upload-error\" className=\"text-destructive px-3 pb-2 text-xs\" role=\"alert\">\n {uploadError}\n </p>\n ) : null}\n <div className=\"border-input flex items-center gap-3 border-t px-3 py-1.5\">\n <AgentModelPicker\n initialAgentType={overrideAgent ?? currentAgentType ?? 'claude-code'}\n initialModel={overrideModel ?? currentModel ?? 'claude-sonnet-4-6'}\n mode=\"override\"\n onAgentModelChange={onAgentModelChange}\n disabled={isSubmitting}\n className=\"w-55\"\n />\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"ml-auto flex cursor-pointer items-center gap-2\">\n <Switch\n id=\"pending-mode\"\n checked={pending}\n onCheckedChange={onPendingChange}\n disabled={isSubmitting}\n />\n <Label\n htmlFor=\"pending-mode\"\n className=\"flex cursor-pointer items-center gap-1 text-sm font-medium\"\n >\n <Clock className=\"h-3.5 w-3.5\" />\n {t('createDrawer.pendingMode')}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {t('createDrawer.pendingModeDescription')}\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex cursor-pointer items-center gap-2\">\n <Switch\n id=\"fast-mode\"\n checked={fast}\n onCheckedChange={onFastChange}\n disabled={isSubmitting}\n />\n <Label\n htmlFor=\"fast-mode\"\n className=\"flex cursor-pointer items-center gap-1 text-sm font-medium\"\n >\n <Zap className=\"h-3.5 w-3.5\" />\n {t('createDrawer.fastModeLabel')}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{t('createDrawer.fastModeDescription')}</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={onAddFiles}\n disabled={isSubmitting}\n aria-label={t('chat.attachFiles')}\n className=\"text-muted-foreground hover:text-foreground cursor-pointer rounded p-1 transition-colors\"\n >\n <PaperclipIcon className=\"h-4 w-4\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{t('chat.attachFiles')}</TooltipContent>\n </Tooltip>\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useTranslation } from 'react-i18next';\nimport { GitFork, FileText, RefreshCw } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Label } from '@/components/ui/label';\nimport { Switch } from '@/components/ui/switch';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nconst AUTO_APPROVE_OPTION_IDS = ['allowPrd', 'allowPlan', 'allowMerge'] as const;\n\nexport interface WorkflowOptionsSectionProps {\n approvalGates: Record<string, boolean>;\n onApprovalGatesChange: (gates: Record<string, boolean>) => void;\n enableEvidence: boolean;\n onEnableEvidenceChange: (value: boolean) => void;\n commitEvidence: boolean;\n onCommitEvidenceChange: (value: boolean) => void;\n push: boolean;\n onPushChange: (value: boolean) => void;\n openPr: boolean;\n onOpenPrChange: (value: boolean) => void;\n ciWatchEnabled: boolean;\n onCiWatchChange: (value: boolean) => void;\n rebaseBeforeBranch: boolean;\n onRebaseBeforeBranchChange: (value: boolean) => void;\n commitSpecs: boolean;\n onCommitSpecsChange: (value: boolean) => void;\n forkAndPr: boolean;\n onForkAndPrChange: (value: boolean) => void;\n canPush: boolean;\n fast: boolean;\n computedPush: boolean;\n computedOpenPr: boolean;\n isSubmitting: boolean;\n}\n\nexport function WorkflowOptionsSection({\n approvalGates,\n onApprovalGatesChange,\n enableEvidence,\n onEnableEvidenceChange,\n commitEvidence,\n onCommitEvidenceChange,\n push: _push,\n onPushChange,\n openPr,\n onOpenPrChange,\n ciWatchEnabled,\n onCiWatchChange,\n rebaseBeforeBranch,\n onRebaseBeforeBranchChange,\n commitSpecs,\n onCommitSpecsChange,\n forkAndPr,\n onForkAndPrChange,\n canPush,\n fast,\n computedPush,\n computedOpenPr,\n isSubmitting,\n}: WorkflowOptionsSectionProps) {\n const { t } = useTranslation('web');\n\n const AUTO_APPROVE_OPTIONS = [\n { id: 'allowPrd', label: t('createDrawer.prd'), description: t('createDrawer.prdDescription') },\n {\n id: 'allowPlan',\n label: t('createDrawer.plan'),\n description: t('createDrawer.planDescription'),\n },\n {\n id: 'allowMerge',\n label: t('createDrawer.merge'),\n description: t('createDrawer.mergeDescription'),\n },\n ];\n\n return (\n <div className=\"flex flex-col gap-2\">\n {/* Approve row */}\n <div className=\"border-input flex items-center gap-4 rounded-md border px-3 py-2.5\">\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"text-muted-foreground w-16 shrink-0 cursor-default text-xs font-semibold tracking-wider\">\n {t('createDrawer.approve')}\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{t('createDrawer.approveDescription')}</TooltipContent>\n </Tooltip>\n <div className=\"flex flex-1 items-center gap-4\">\n {AUTO_APPROVE_OPTIONS.map((opt) => (\n <Tooltip key={opt.id}>\n <TooltipTrigger asChild>\n <div className=\"flex cursor-pointer items-center gap-1.5\">\n <Switch\n id={`approve-${opt.id}`}\n size=\"sm\"\n checked={approvalGates[opt.id] ?? false}\n onCheckedChange={(v) =>\n onApprovalGatesChange({ ...approvalGates, [opt.id]: v })\n }\n disabled={\n isSubmitting || (fast && (opt.id === 'allowPrd' || opt.id === 'allowPlan'))\n }\n />\n <Label\n htmlFor={`approve-${opt.id}`}\n className=\"cursor-pointer text-xs font-medium\"\n >\n {opt.label}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {fast && (opt.id === 'allowPrd' || opt.id === 'allowPlan')\n ? t('createDrawer.skippedInFastMode')\n : opt.description}\n </TooltipContent>\n </Tooltip>\n ))}\n </div>\n {/* Select all shortcut */}\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => {\n const allOn = AUTO_APPROVE_OPTION_IDS.every((id) => approvalGates[id]);\n const next: Record<string, boolean> = {};\n for (const id of AUTO_APPROVE_OPTION_IDS) next[id] = !allOn;\n onApprovalGatesChange(next);\n }}\n disabled={isSubmitting}\n className={cn(\n 'text-muted-foreground hover:text-foreground cursor-pointer rounded px-1.5 py-0.5 text-[10px] font-semibold tracking-wider uppercase transition-colors',\n AUTO_APPROVE_OPTION_IDS.every((id) => approvalGates[id]) && 'text-primary'\n )}\n >\n {t('createDrawer.all')}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{t('createDrawer.toggleAllApprovalGates')}</TooltipContent>\n </Tooltip>\n </div>\n\n {/* Evidence row */}\n <div className=\"border-input flex items-center gap-4 rounded-md border px-3 py-2.5\">\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"text-muted-foreground w-16 shrink-0 cursor-default text-xs font-semibold tracking-wider\">\n {t('createDrawer.evidence')}\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{t('createDrawer.evidenceDescription')}</TooltipContent>\n </Tooltip>\n <div className=\"flex flex-1 items-center gap-4\">\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex cursor-pointer items-center gap-1.5\">\n <Switch\n id=\"enable-evidence\"\n size=\"sm\"\n checked={enableEvidence}\n onCheckedChange={(v) => {\n onEnableEvidenceChange(v);\n if (!v) onCommitEvidenceChange(false);\n }}\n disabled={isSubmitting}\n />\n <Label htmlFor=\"enable-evidence\" className=\"cursor-pointer text-xs font-medium\">\n {t('createDrawer.collect')}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{t('createDrawer.collectDescription')}</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex cursor-pointer items-center gap-1.5\">\n <Switch\n id=\"commit-evidence\"\n size=\"sm\"\n checked={commitEvidence}\n onCheckedChange={onCommitEvidenceChange}\n disabled={isSubmitting || !enableEvidence || (!openPr && !forkAndPr)}\n />\n <Label\n htmlFor=\"commit-evidence\"\n className={cn(\n 'cursor-pointer text-xs font-medium',\n (!enableEvidence || (!openPr && !forkAndPr)) && 'opacity-50'\n )}\n >\n {t('createDrawer.addToPr')}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {!openPr && !forkAndPr\n ? t('createDrawer.requiresPr')\n : !enableEvidence\n ? t('createDrawer.requiresEvidence')\n : t('createDrawer.addToPrDescription')}\n </TooltipContent>\n </Tooltip>\n </div>\n </div>\n\n {/* Git row */}\n <div className=\"border-input flex items-start gap-4 rounded-md border px-3 py-2.5\">\n <span className=\"text-muted-foreground w-16 shrink-0 pt-0.5 text-xs font-semibold tracking-wider\">\n {t('createDrawer.git')}\n </span>\n <div className=\"flex flex-1 flex-wrap items-center gap-4\">\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex cursor-pointer items-center gap-1.5\">\n <Switch\n id=\"push\"\n size=\"sm\"\n checked={computedPush}\n onCheckedChange={(v) => {\n onPushChange(v);\n if (!v && openPr) onOpenPrChange(false);\n }}\n disabled={isSubmitting || forkAndPr}\n />\n <Label\n htmlFor=\"push\"\n className={cn('cursor-pointer text-xs font-medium', forkAndPr && 'opacity-50')}\n >\n {t('createDrawer.push')}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {forkAndPr ? 'Enabled — contributing to upstream' : t('createDrawer.pushDescription')}\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex cursor-pointer items-center gap-1.5\">\n <Switch\n id=\"open-pr\"\n size=\"sm\"\n checked={computedOpenPr}\n onCheckedChange={(v) => {\n onOpenPrChange(v);\n if (!v) onCommitEvidenceChange(false);\n }}\n disabled={isSubmitting || forkAndPr}\n />\n <Label\n htmlFor=\"open-pr\"\n className={cn('cursor-pointer text-xs font-medium', forkAndPr && 'opacity-50')}\n >\n {t('createDrawer.pr')}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {forkAndPr ? 'Enabled — contributing to upstream' : t('createDrawer.prDescription')}\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex cursor-pointer items-center gap-1.5\">\n <Switch\n id=\"ci-watch\"\n size=\"sm\"\n checked={ciWatchEnabled}\n onCheckedChange={onCiWatchChange}\n disabled={isSubmitting}\n />\n <Label htmlFor=\"ci-watch\" className=\"cursor-pointer text-xs font-medium\">\n {t('createDrawer.watch')}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{t('createDrawer.watchDescription')}</TooltipContent>\n </Tooltip>\n {/* Separator between standard git and repo options */}\n <div className=\"bg-border h-4 w-px shrink-0\" />\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex cursor-pointer items-center gap-1.5\">\n <Switch\n id=\"rebase-before-branch\"\n size=\"sm\"\n checked={rebaseBeforeBranch}\n onCheckedChange={onRebaseBeforeBranchChange}\n disabled={isSubmitting}\n />\n <Label\n htmlFor=\"rebase-before-branch\"\n className=\"flex cursor-pointer items-center gap-1 text-xs font-medium\"\n >\n <RefreshCw className=\"h-3 w-3\" />\n {t('createDrawer.sync')}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{t('createDrawer.syncDescription')}</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex cursor-pointer items-center gap-1.5\">\n <Switch\n id=\"commit-specs\"\n size=\"sm\"\n checked={commitSpecs}\n onCheckedChange={onCommitSpecsChange}\n disabled={isSubmitting}\n />\n <Label\n htmlFor=\"commit-specs\"\n className=\"flex cursor-pointer items-center gap-1 text-xs font-medium\"\n >\n <FileText className=\"h-3 w-3\" />\n {t('createDrawer.commitSpecs')}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {t('createDrawer.commitSpecsDescription')}\n </TooltipContent>\n </Tooltip>\n {!canPush && (\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex cursor-pointer items-center gap-1.5\">\n <Switch\n id=\"fork-and-pr\"\n size=\"sm\"\n checked={forkAndPr}\n onCheckedChange={(v) => {\n onForkAndPrChange(v);\n // Auto-flip commitSpecs to false when enabling contribute mode\n if (v) onCommitSpecsChange(false);\n }}\n disabled={isSubmitting}\n />\n <Label\n htmlFor=\"fork-and-pr\"\n className=\"flex cursor-pointer items-center gap-1 text-xs font-medium\"\n >\n <GitFork className=\"h-3 w-3\" />\n {t('createDrawer.forkAndPr')}\n </Label>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {t('createDrawer.forkAndPrDescription')}\n </TooltipContent>\n </Tooltip>\n )}\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ChevronsUpDown, CheckIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Input } from '@/components/ui/input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport type { ParentFeatureOption } from './types';\n\nexport interface ParentFeatureComboboxProps {\n features: ParentFeatureOption[];\n value: string | undefined;\n onChange: (id: string | undefined) => void;\n disabled?: boolean;\n}\n\nexport function ParentFeatureCombobox({\n features,\n value,\n onChange,\n disabled,\n}: ParentFeatureComboboxProps) {\n const { t } = useTranslation('web');\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n\n const selectedFeature = features.find((f) => f.id === value);\n\n const filtered = query.trim()\n ? features.filter(\n (f) =>\n f.name.toLowerCase().includes(query.toLowerCase()) ||\n f.id.toLowerCase().includes(query.toLowerCase())\n )\n : features;\n\n const handleSelect = useCallback(\n (id: string | undefined) => {\n onChange(id);\n setOpen(false);\n setQuery('');\n },\n [onChange]\n );\n\n useEffect(() => {\n if (open) {\n setTimeout(() => inputRef.current?.focus(), 0);\n } else {\n setQuery('');\n }\n }, [open]);\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n id=\"parent-feature\"\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n aria-label=\"Parent Feature\"\n disabled={disabled}\n data-testid=\"parent-feature-combobox\"\n className={cn(\n 'border-input bg-background ring-offset-background focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border px-3 py-2 text-sm focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50',\n !selectedFeature && 'text-muted-foreground'\n )}\n >\n <span className=\"truncate\">\n {selectedFeature\n ? `${selectedFeature.name} (${selectedFeature.id.slice(0, 8)})`\n : t('createDrawer.selectParent')}\n </span>\n <ChevronsUpDown className=\"ms-2 h-4 w-4 shrink-0 opacity-50\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-80 p-0\"\n align=\"start\"\n data-testid=\"parent-feature-combobox-content\"\n >\n <div className=\"flex flex-col\">\n {/* Search input */}\n <div className=\"border-b p-2\">\n <Input\n ref={inputRef}\n placeholder={t('createDrawer.searchFeatures')}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n className=\"h-8 border-0 p-0 text-sm shadow-none focus-visible:ring-0\"\n data-testid=\"parent-feature-search\"\n />\n </div>\n\n {/* Options list */}\n <div className=\"max-h-48 overflow-y-auto py-1\" role=\"listbox\" aria-label=\"Features\">\n {/* No parent option */}\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={value === undefined}\n onClick={() => handleSelect(undefined)}\n className={cn(\n 'hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm',\n value === undefined && 'bg-accent/50'\n )}\n data-testid=\"parent-feature-option-none\"\n >\n <CheckIcon className={cn('h-4 w-4 shrink-0', value !== undefined && 'invisible')} />\n <span className=\"text-muted-foreground italic\">{t('createDrawer.noParent')}</span>\n </button>\n\n {filtered.length === 0 && query ? (\n <p className=\"text-muted-foreground px-3 py-2 text-sm\">\n {t('createDrawer.noFeaturesFound')}\n </p>\n ) : (\n filtered.map((f) => (\n <button\n key={f.id}\n type=\"button\"\n role=\"option\"\n aria-selected={value === f.id}\n onClick={() => handleSelect(f.id)}\n className={cn(\n 'hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm',\n value === f.id && 'bg-accent/50'\n )}\n data-testid={`parent-feature-option-${f.id}`}\n >\n <CheckIcon className={cn('h-4 w-4 shrink-0', value !== f.id && 'invisible')} />\n <span className=\"truncate\">\n {f.name}{' '}\n <span className=\"text-muted-foreground font-mono text-xs\">\n ({f.id.slice(0, 8)})\n </span>\n </span>\n </button>\n ))\n )}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n","'use client';\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ChevronsUpDown, CheckIcon, FolderPlus, LoaderCircle } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Input } from '@/components/ui/input';\nimport { Separator } from '@/components/ui/separator';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport { useFeatureFlags } from '@/hooks/feature-flags-context';\nimport { addRepository } from '@/app/actions/add-repository';\nimport { pickFolder } from '@/components/common/add-repository-button/pick-folder';\nimport { ReactFileManagerDialog } from '@/components/common/react-file-manager-dialog';\nimport type { RepositoryOption } from './types';\n\nexport interface RepositoryComboboxProps {\n repositories: RepositoryOption[];\n value: string | undefined;\n onChange: (path: string | undefined) => void;\n onAddRepository?: (repo: RepositoryOption) => void;\n disabled?: boolean;\n}\n\nexport function RepositoryCombobox({\n repositories,\n value,\n onChange,\n onAddRepository,\n disabled,\n}: RepositoryComboboxProps) {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [isAdding, setIsAdding] = useState(false);\n const [addError, setAddError] = useState<string | null>(null);\n const [showReactPicker, setShowReactPicker] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const { reactFileManager: useReactFileManager } = useFeatureFlags();\n const { t } = useTranslation('web');\n\n const selectedRepo = repositories.find((r) => r.path === value);\n\n const filtered = query.trim()\n ? repositories.filter(\n (r) =>\n r.name.toLowerCase().includes(query.toLowerCase()) ||\n r.path.toLowerCase().includes(query.toLowerCase())\n )\n : repositories;\n\n const handleSelect = useCallback(\n (path: string | undefined) => {\n onChange(path);\n setOpen(false);\n setQuery('');\n },\n [onChange]\n );\n\n const addRepoFromPath = useCallback(\n async (folderPath: string) => {\n const result = await addRepository({ path: folderPath });\n if (result.error) {\n setAddError(result.error);\n setIsAdding(false);\n return;\n }\n if (result.repository) {\n const newRepo: RepositoryOption = {\n id: result.repository.id,\n name: result.repository.name,\n path: result.repository.path,\n };\n onAddRepository?.(newRepo);\n onChange(newRepo.path);\n setOpen(false);\n setQuery('');\n }\n },\n [onAddRepository, onChange]\n );\n\n const handleAddRepository = useCallback(async () => {\n if (isAdding) return;\n\n if (useReactFileManager) {\n setShowReactPicker(true);\n return;\n }\n\n setIsAdding(true);\n setAddError(null);\n try {\n const folderPath = await pickFolder();\n if (!folderPath) {\n setIsAdding(false);\n return;\n }\n await addRepoFromPath(folderPath);\n } catch {\n // Native picker failed — fall back to React file manager\n setShowReactPicker(true);\n } finally {\n setIsAdding(false);\n }\n }, [isAdding, useReactFileManager, addRepoFromPath]);\n\n const handleReactPickerSelect = useCallback(\n async (path: string | null) => {\n setShowReactPicker(false);\n if (!path) return;\n setIsAdding(true);\n setAddError(null);\n try {\n await addRepoFromPath(path);\n } catch (err: unknown) {\n setAddError(err instanceof Error ? err.message : 'Failed to add repository');\n } finally {\n setIsAdding(false);\n }\n },\n [addRepoFromPath]\n );\n\n useEffect(() => {\n if (open) {\n setTimeout(() => inputRef.current?.focus(), 0);\n } else {\n setQuery('');\n }\n }, [open]);\n\n return (\n <>\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n aria-label=\"Repository\"\n aria-invalid={!!addError}\n aria-describedby={addError ? 'add-repository-error-msg' : undefined}\n disabled={disabled}\n data-testid=\"repository-combobox\"\n className={cn(\n 'border-input bg-background ring-offset-background focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border px-3 py-2 text-sm focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50',\n !selectedRepo && 'text-muted-foreground'\n )}\n >\n <span className=\"truncate\">\n {selectedRepo ? selectedRepo.name : 'Select repository...'}\n </span>\n <ChevronsUpDown className=\"ms-2 h-4 w-4 shrink-0 opacity-50\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-80 p-0\"\n align=\"start\"\n data-testid=\"repository-combobox-content\"\n >\n <div className=\"flex flex-col\">\n {/* Search input */}\n <div className=\"border-b p-2\">\n <Input\n ref={inputRef}\n placeholder={t('createDrawer.searchRepositories')}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n className=\"h-8 border-0 p-0 text-sm shadow-none focus-visible:ring-0\"\n data-testid=\"repository-search\"\n />\n </div>\n\n {/* Options list */}\n <div className=\"max-h-48 overflow-y-auto py-1\" role=\"listbox\" aria-label=\"Repositories\">\n {filtered.length === 0 ? (\n <p\n className=\"text-muted-foreground px-3 py-2 text-sm\"\n data-testid=\"repository-empty\"\n >\n No repositories found.\n </p>\n ) : (\n filtered.map((r) => (\n <button\n key={r.id}\n type=\"button\"\n role=\"option\"\n aria-selected={value === r.path}\n onClick={() => handleSelect(r.path)}\n className={cn(\n 'hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm',\n value === r.path && 'bg-accent/50'\n )}\n data-testid={`repository-option-${r.id}`}\n >\n <CheckIcon\n className={cn('h-4 w-4 shrink-0', value !== r.path && 'invisible')}\n />\n <span className=\"flex flex-col items-start truncate\">\n <span className=\"truncate\">{r.name}</span>\n <span className=\"text-muted-foreground truncate text-xs\">{r.path}</span>\n </span>\n </button>\n ))\n )}\n </div>\n\n {/* Add new repository — pinned outside scroll area */}\n <Separator />\n <button\n type=\"button\"\n onClick={handleAddRepository}\n disabled={isAdding}\n className=\"hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm\"\n data-testid=\"add-repository-item\"\n >\n {isAdding ? (\n <LoaderCircle className=\"h-4 w-4 shrink-0 animate-spin\" />\n ) : (\n <FolderPlus className=\"h-4 w-4 shrink-0\" />\n )}\n <span>Add new repository...</span>\n </button>\n {addError ? (\n <p\n id=\"add-repository-error-msg\"\n className=\"px-3 pb-2 text-xs text-red-500\"\n role=\"alert\"\n data-testid=\"add-repository-error\"\n >\n {addError}\n </p>\n ) : null}\n </div>\n </PopoverContent>\n </Popover>\n <ReactFileManagerDialog\n open={showReactPicker}\n onOpenChange={(isOpen) => {\n if (!isOpen) setShowReactPicker(false);\n }}\n onSelect={handleReactPickerSelect}\n />\n </>\n );\n}\n"],"names":["$$RSC_SERVER_ACTION_0"],"mappings":"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"}