@shipit-ai/cli 1.166.1 → 1.166.2

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 (283) hide show
  1. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  2. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +19 -2
  3. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts.map +1 -1
  4. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.js +14 -3
  5. package/dist/src/presentation/web/app/actions/deploy-repository.d.ts.map +1 -1
  6. package/dist/src/presentation/web/app/actions/deploy-repository.js +14 -7
  7. package/dist/src/presentation/web/app/actions/get-merge-review-data.d.ts.map +1 -1
  8. package/dist/src/presentation/web/app/actions/get-merge-review-data.js +66 -23
  9. package/dist/src/presentation/web/app/actions/open-folder.d.ts.map +1 -1
  10. package/dist/src/presentation/web/app/actions/open-folder.js +12 -4
  11. package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -1
  12. package/dist/src/presentation/web/app/actions/open-shell.js +46 -7
  13. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  14. package/dist/src/presentation/web/app/api/agent-events/route.js +2 -6
  15. package/dist/src/presentation/web/app/api/attachments/upload-from-path/route.d.ts.map +1 -1
  16. package/dist/src/presentation/web/app/api/attachments/upload-from-path/route.js +21 -17
  17. package/dist/src/presentation/web/app/api/deployment-logs/route.d.ts.map +1 -1
  18. package/dist/src/presentation/web/app/api/deployment-logs/route.js +2 -6
  19. package/dist/src/presentation/web/app/api/directory/list/route.d.ts.map +1 -1
  20. package/dist/src/presentation/web/app/api/directory/list/route.js +39 -24
  21. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.d.ts.map +1 -1
  22. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.js +2 -6
  23. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.d.ts.map +1 -1
  24. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.js +2 -6
  25. package/dist/src/presentation/web/lib/path-sanitizers.d.ts +50 -0
  26. package/dist/src/presentation/web/lib/path-sanitizers.d.ts.map +1 -0
  27. package/dist/src/presentation/web/lib/path-sanitizers.js +136 -0
  28. package/dist/tsconfig.build.tsbuildinfo +1 -1
  29. package/package.json +6 -6
  30. package/web/.next/BUILD_ID +1 -1
  31. package/web/.next/build-manifest.json +3 -3
  32. package/web/.next/fallback-build-manifest.json +3 -3
  33. package/web/.next/prerender-manifest.json +3 -3
  34. package/web/.next/required-server-files.js +2 -2
  35. package/web/.next/required-server-files.json +2 -2
  36. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  37. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +1 -1
  38. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  39. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  40. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  41. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +1 -1
  42. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  43. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  44. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
  45. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  46. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  47. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  48. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  49. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +3 -2
  50. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  51. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  52. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +37 -37
  53. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +3 -2
  54. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  55. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  56. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  57. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +1 -1
  58. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  59. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  60. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  61. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  62. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  63. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  64. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  65. package/web/.next/server/app/(dashboard)/chat/page.js +1 -1
  66. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  67. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  68. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
  69. package/web/.next/server/app/(dashboard)/create/page.js +1 -1
  70. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  71. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  72. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  73. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +3 -2
  74. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  75. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  76. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +37 -37
  77. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +3 -2
  78. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  79. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  80. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  81. package/web/.next/server/app/(dashboard)/page.js +1 -1
  82. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  83. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  84. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  85. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +1 -1
  86. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  87. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  88. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  89. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  90. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  91. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  92. package/web/.next/server/app/_global-error.html +1 -1
  93. package/web/.next/server/app/_global-error.rsc +1 -1
  94. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  95. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  96. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  97. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  98. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  99. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  100. package/web/.next/server/app/_not-found/page.js +1 -1
  101. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  102. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  103. package/web/.next/server/app/api/agent-events/route.js +2 -1
  104. package/web/.next/server/app/api/agent-events/route.js.nft.json +1 -1
  105. package/web/.next/server/app/api/attachments/preview/route.js +1 -1
  106. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  107. package/web/.next/server/app/api/attachments/upload-from-path/route.js +1 -1
  108. package/web/.next/server/app/api/attachments/upload-from-path/route.js.nft.json +1 -1
  109. package/web/.next/server/app/api/deployment-logs/route.js +2 -1
  110. package/web/.next/server/app/api/deployment-logs/route.js.nft.json +1 -1
  111. package/web/.next/server/app/api/dialog/pick-files/route.js +1 -1
  112. package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
  113. package/web/.next/server/app/api/directory/list/route.js +1 -1
  114. package/web/.next/server/app/api/directory/list/route.js.nft.json +1 -1
  115. package/web/.next/server/app/api/evidence/route.js +1 -1
  116. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  117. package/web/.next/server/app/api/graph-data/route.js +1 -1
  118. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  119. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js +1 -1
  120. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  121. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js +2 -1
  122. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js.nft.json +1 -1
  123. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js +2 -1
  124. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js.nft.json +1 -1
  125. package/web/.next/server/app/api/sessions-batch/route.js +1 -1
  126. package/web/.next/server/app/api/sessions-batch/route.js.nft.json +1 -1
  127. package/web/.next/server/app/settings/page/server-reference-manifest.json +11 -11
  128. package/web/.next/server/app/settings/page.js +1 -1
  129. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  130. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  131. package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
  132. package/web/.next/server/app/skills/page.js +1 -1
  133. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  134. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  135. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  136. package/web/.next/server/app/tools/page.js +1 -1
  137. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  138. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  139. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  140. package/web/.next/server/app/version/page.js +1 -1
  141. package/web/.next/server/app/version/page.js.nft.json +1 -1
  142. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  143. package/web/.next/server/chunks/{[root-of-the-server]__02xmnal._.js → [root-of-the-server]__08cpfre._.js} +2 -2
  144. package/web/.next/server/chunks/[root-of-the-server]__0_-chcy._.js +3 -0
  145. package/web/.next/server/chunks/[root-of-the-server]__0_-chcy._.js.map +1 -0
  146. package/web/.next/server/chunks/[root-of-the-server]__0aft8l4._.js +9 -0
  147. package/web/.next/server/chunks/{[root-of-the-server]__0_6fhza._.js.map → [root-of-the-server]__0aft8l4._.js.map} +1 -1
  148. package/web/.next/server/chunks/[root-of-the-server]__0e9p7em._.js +3 -0
  149. package/web/.next/server/chunks/[root-of-the-server]__0e9p7em._.js.map +1 -0
  150. package/web/.next/server/chunks/{[root-of-the-server]__0.2exzi._.js → [root-of-the-server]__0gfvkg8._.js} +2 -2
  151. package/web/.next/server/chunks/{[root-of-the-server]__0ip_e1x._.js → [root-of-the-server]__0hcp97v._.js} +2 -2
  152. package/web/.next/server/chunks/{[root-of-the-server]__09118p2._.js → [root-of-the-server]__0iel39d._.js} +2 -2
  153. package/web/.next/server/chunks/[root-of-the-server]__0kc8ify._.js +12 -0
  154. package/web/.next/server/chunks/[root-of-the-server]__0kc8ify._.js.map +1 -0
  155. package/web/.next/server/chunks/[root-of-the-server]__0r5uk_8._.js +9 -0
  156. package/web/.next/server/chunks/[root-of-the-server]__0r5uk_8._.js.map +1 -0
  157. package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
  158. package/web/.next/server/chunks/{[root-of-the-server]__04jjtl_._.js → [root-of-the-server]__0u1jyv9._.js} +2 -2
  159. package/web/.next/server/chunks/{[root-of-the-server]__07suer1._.js → [root-of-the-server]__0zu_byw._.js} +2 -2
  160. package/web/.next/server/chunks/[root-of-the-server]__13e2_kk._.js +18 -0
  161. package/web/.next/server/chunks/[root-of-the-server]__13e2_kk._.js.map +1 -0
  162. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js +1 -1
  163. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js.map +1 -1
  164. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js +1 -1
  165. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js.map +1 -1
  166. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.js +1 -1
  167. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.js.map +1 -1
  168. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js +1 -1
  169. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js.map +1 -1
  170. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js +2 -2
  171. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js.map +1 -1
  172. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js +1 -1
  173. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js.map +1 -1
  174. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
  175. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
  176. package/web/.next/server/chunks/ssr/[root-of-the-server]__04nnbmc._.js +3 -0
  177. package/web/.next/server/chunks/ssr/[root-of-the-server]__04nnbmc._.js.map +1 -0
  178. package/web/.next/server/chunks/ssr/[root-of-the-server]__07740t6._.js +3 -0
  179. package/web/.next/server/chunks/ssr/[root-of-the-server]__07740t6._.js.map +1 -0
  180. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l~puw4._.js +3 -0
  181. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l~puw4._.js.map +1 -0
  182. package/web/.next/server/chunks/ssr/[root-of-the-server]__0o3qggc._.js +1 -1
  183. package/web/.next/server/chunks/ssr/[root-of-the-server]__0o3qggc._.js.map +1 -1
  184. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0qh.wn.._.js → [root-of-the-server]__0q3-gz.._.js} +2 -2
  185. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js +1 -1
  186. package/web/.next/server/chunks/ssr/[root-of-the-server]__0vwjc_m._.js +3 -0
  187. package/web/.next/server/chunks/ssr/[root-of-the-server]__0vwjc_m._.js.map +1 -0
  188. package/web/.next/server/chunks/ssr/{[root-of-the-server]__12g8h3_._.js → [root-of-the-server]__0w4__yd._.js} +3 -3
  189. package/web/.next/server/chunks/ssr/_01mq~sm._.js +1 -1
  190. package/web/.next/server/chunks/ssr/_01mq~sm._.js.map +1 -1
  191. package/web/.next/server/chunks/ssr/_01sesw0._.js +1 -1
  192. package/web/.next/server/chunks/ssr/_01sesw0._.js.map +1 -1
  193. package/web/.next/server/chunks/ssr/{_0e4npv~._.js → _04rrcmm._.js} +2 -2
  194. package/web/.next/server/chunks/ssr/{_0e4npv~._.js.map → _04rrcmm._.js.map} +1 -1
  195. package/web/.next/server/chunks/ssr/{_0nvrqsj._.js → _0c497sr._.js} +2 -2
  196. package/web/.next/server/chunks/ssr/{_0nvrqsj._.js.map → _0c497sr._.js.map} +1 -1
  197. package/web/.next/server/chunks/ssr/{_0a-ddx-._.js → _0c741v_._.js} +2 -2
  198. package/web/.next/server/chunks/ssr/{_0a-ddx-._.js.map → _0c741v_._.js.map} +1 -1
  199. package/web/.next/server/chunks/ssr/_0jpbsh_._.js +1 -1
  200. package/web/.next/server/chunks/ssr/_0jpbsh_._.js.map +1 -1
  201. package/web/.next/server/chunks/ssr/_0vyfc4b._.js +1 -1
  202. package/web/.next/server/chunks/ssr/_0vyfc4b._.js.map +1 -1
  203. package/web/.next/server/chunks/ssr/_0w-_hww._.js +1 -1
  204. package/web/.next/server/chunks/ssr/_0w-_hww._.js.map +1 -1
  205. package/web/.next/server/chunks/ssr/_0~7lwu_._.js +1 -1
  206. package/web/.next/server/chunks/ssr/_0~7lwu_._.js.map +1 -1
  207. package/web/.next/server/chunks/ssr/_109n-y4._.js +1 -1
  208. package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js +1 -1
  209. package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js.map +1 -1
  210. package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js +1 -1
  211. package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js.map +1 -1
  212. package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js +2 -2
  213. package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js.map +1 -1
  214. package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js +1 -1
  215. package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js.map +1 -1
  216. package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js +1 -1
  217. package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js.map +1 -1
  218. package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js +2 -2
  219. package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js.map +1 -1
  220. package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js +1 -1
  221. package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js.map +1 -1
  222. package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js +1 -1
  223. package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js.map +1 -1
  224. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js +1 -1
  225. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js.map +1 -1
  226. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js +1 -1
  227. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js.map +1 -1
  228. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js +1 -1
  229. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js.map +1 -1
  230. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js +3 -0
  231. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js.map +1 -0
  232. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_load-settings_ts_0b8f3pf._.js +1 -1
  233. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js +1 -1
  234. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js.map +1 -1
  235. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js +1 -1
  236. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js.map +1 -1
  237. package/web/.next/server/middleware-build-manifest.js +3 -3
  238. package/web/.next/server/pages/500.html +1 -1
  239. package/web/.next/server/server-reference-manifest.js +1 -1
  240. package/web/.next/server/server-reference-manifest.json +49 -49
  241. package/web/.next/static/chunks/{0t.pzrmeoq6th.js → 0-fy~80ui.5os.js} +1 -1
  242. package/web/.next/static/chunks/{00dg6gti40.3i.js → 039ic1ygq-to3.js} +1 -1
  243. package/web/.next/static/chunks/{0ntgq3d_.m5el.js → 04xk1iouwcfcq.js} +3 -3
  244. package/web/.next/static/chunks/{0njrgvmyafrod.js → 07a4jt64wdipb.js} +1 -1
  245. package/web/.next/static/chunks/{14g1l3~6i5251.js → 07gx-h_y91lay.js} +1 -1
  246. package/web/.next/static/chunks/{0ist7260j__0m.js → 0_imq4rg3q.fe.js} +2 -2
  247. package/web/.next/static/chunks/{09dqgshddfxff.js → 0c_bi0dck80dt.js} +1 -1
  248. package/web/.next/static/chunks/{0awttldb-.7m..js → 0ex35-_jtxyjc.js} +1 -1
  249. package/web/.next/static/chunks/{0_c5~n__lz4ks.js → 0i084mozx131g.js} +1 -1
  250. package/web/.next/static/chunks/{0_--5mgqukm__.js → 0k~55i.ofbdeb.js} +1 -1
  251. package/web/.next/static/chunks/{0t8zwgaz.d1s5.js → 0oq-cvtg8rjjp.js} +1 -1
  252. package/web/.next/static/chunks/{0d-2jp.f._l2e.js → 0t_6hx6ul7umb.js} +1 -1
  253. package/web/.next/static/chunks/{0nk2r-18.7g6r.js → 0whez3wju~9ok.js} +1 -1
  254. package/web/.next/server/chunks/[root-of-the-server]__0-3b27b._.js +0 -9
  255. package/web/.next/server/chunks/[root-of-the-server]__0-3b27b._.js.map +0 -1
  256. package/web/.next/server/chunks/[root-of-the-server]__0_6fhza._.js +0 -9
  257. package/web/.next/server/chunks/[root-of-the-server]__0esdmru._.js +0 -12
  258. package/web/.next/server/chunks/[root-of-the-server]__0esdmru._.js.map +0 -1
  259. package/web/.next/server/chunks/[root-of-the-server]__0l1p8bx._.js +0 -3
  260. package/web/.next/server/chunks/[root-of-the-server]__0l1p8bx._.js.map +0 -1
  261. package/web/.next/server/chunks/[root-of-the-server]__0p~owgt._.js +0 -18
  262. package/web/.next/server/chunks/[root-of-the-server]__0p~owgt._.js.map +0 -1
  263. package/web/.next/server/chunks/[root-of-the-server]__0rru~m.._.js +0 -3
  264. package/web/.next/server/chunks/[root-of-the-server]__0rru~m.._.js.map +0 -1
  265. package/web/.next/server/chunks/ssr/[root-of-the-server]__045sv4b._.js +0 -3
  266. package/web/.next/server/chunks/ssr/[root-of-the-server]__045sv4b._.js.map +0 -1
  267. package/web/.next/server/chunks/ssr/[root-of-the-server]__0d_0_fp._.js +0 -3
  268. package/web/.next/server/chunks/ssr/[root-of-the-server]__0d_0_fp._.js.map +0 -1
  269. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l4d7e.._.js +0 -3
  270. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l4d7e.._.js.map +0 -1
  271. package/web/.next/server/chunks/ssr/[root-of-the-server]__0r32z03._.js +0 -3
  272. package/web/.next/server/chunks/ssr/[root-of-the-server]__0r32z03._.js.map +0 -1
  273. /package/web/.next/server/chunks/{[root-of-the-server]__02xmnal._.js.map → [root-of-the-server]__08cpfre._.js.map} +0 -0
  274. /package/web/.next/server/chunks/{[root-of-the-server]__0.2exzi._.js.map → [root-of-the-server]__0gfvkg8._.js.map} +0 -0
  275. /package/web/.next/server/chunks/{[root-of-the-server]__0ip_e1x._.js.map → [root-of-the-server]__0hcp97v._.js.map} +0 -0
  276. /package/web/.next/server/chunks/{[root-of-the-server]__09118p2._.js.map → [root-of-the-server]__0iel39d._.js.map} +0 -0
  277. /package/web/.next/server/chunks/{[root-of-the-server]__04jjtl_._.js.map → [root-of-the-server]__0u1jyv9._.js.map} +0 -0
  278. /package/web/.next/server/chunks/{[root-of-the-server]__07suer1._.js.map → [root-of-the-server]__0zu_byw._.js.map} +0 -0
  279. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__0qh.wn.._.js.map → [root-of-the-server]__0q3-gz.._.js.map} +0 -0
  280. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__12g8h3_._.js.map → [root-of-the-server]__0w4__yd._.js.map} +0 -0
  281. /package/web/.next/static/{ZpPnD_b687G9xVr2nzrds → ynyh_sSxbFA995FRvBUxs}/_buildManifest.js +0 -0
  282. /package/web/.next/static/{ZpPnD_b687G9xVr2nzrds → ynyh_sSxbFA995FRvBUxs}/_clientMiddlewareManifest.js +0 -0
  283. /package/web/.next/static/{ZpPnD_b687G9xVr2nzrds → ynyh_sSxbFA995FRvBUxs}/_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%3Aaa778f%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%3A8f5557%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__ [{\"401128c86a50540ecb3f59feb73171107a7dc8726d\":{\"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(\"401128c86a50540ecb3f59feb73171107a7dc8726d\",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__ [{\"40cc24fe72db422b72baa8d6e887613cb12b3b2b75\":{\"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(\"40cc24fe72db422b72baa8d6e887613cb12b3b2b75\",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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"}
1
+ {"version":3,"sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/create-drawer-client.tsx","../../../../../../../src/presentation/web/app/actions/data%3A98543b%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%3A373631%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__ [{\"4076d2cfd2387db790d42e50db2e3575cbd6f6fe71\":{\"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(\"4076d2cfd2387db790d42e50db2e3575cbd6f6fe71\",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__ [{\"4000c3d622a047ce5ff8274ebf92673619f27fcf4d\":{\"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(\"4000c3d622a047ce5ff8274ebf92673619f27fcf4d\",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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"}