@shepai/cli 1.78.1 → 1.79.0-pr250.29eec94

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 (301) hide show
  1. package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.d.ts.map +1 -1
  2. package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.js +14 -1
  3. package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts +17 -0
  4. package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts.map +1 -0
  5. package/dist/src/presentation/web/app/actions/get-feature-phase-timings.js +25 -0
  6. package/dist/src/presentation/web/app/actions/get-feature-plan.d.ts +28 -0
  7. package/dist/src/presentation/web/app/actions/get-feature-plan.d.ts.map +1 -0
  8. package/dist/src/presentation/web/app/actions/get-feature-plan.js +39 -0
  9. package/dist/src/presentation/web/app/api/feature-logs/route.d.ts +16 -0
  10. package/dist/src/presentation/web/app/api/feature-logs/route.d.ts.map +1 -0
  11. package/dist/src/presentation/web/app/api/feature-logs/route.js +184 -0
  12. package/dist/src/presentation/web/app/build-feature-node-data.d.ts +7 -1
  13. package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
  14. package/dist/src/presentation/web/app/build-feature-node-data.js +7 -1
  15. package/dist/src/presentation/web/app/build-graph-nodes.js +7 -3
  16. package/dist/src/presentation/web/app/settings/page.js +1 -1
  17. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +7 -19
  18. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -1
  19. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +6 -6
  20. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  21. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +48 -85
  22. package/dist/src/presentation/web/components/common/feature-drawer/index.d.ts +1 -1
  23. package/dist/src/presentation/web/components/common/feature-drawer/index.d.ts.map +1 -1
  24. package/dist/src/presentation/web/components/common/feature-drawer/index.js +1 -1
  25. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts +8 -0
  26. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map +1 -0
  27. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +90 -0
  28. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts +20 -0
  29. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts.map +1 -0
  30. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.js +252 -0
  31. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +31 -0
  32. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -0
  33. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +123 -0
  34. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.d.ts +20 -0
  35. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.d.ts.map +1 -0
  36. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.js +315 -0
  37. package/dist/src/presentation/web/components/common/feature-drawer-tabs/index.d.ts +3 -0
  38. package/dist/src/presentation/web/components/common/feature-drawer-tabs/index.d.ts.map +1 -0
  39. package/dist/src/presentation/web/components/common/feature-drawer-tabs/index.js +1 -0
  40. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.d.ts +7 -0
  41. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.d.ts.map +1 -0
  42. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.js +35 -0
  43. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts +18 -0
  44. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts.map +1 -0
  45. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.js +89 -0
  46. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts +6 -0
  47. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts.map +1 -0
  48. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +78 -0
  49. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts +28 -0
  50. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts.map +1 -0
  51. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.js +157 -0
  52. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.d.ts +8 -0
  53. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.d.ts.map +1 -0
  54. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.js +23 -0
  55. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts +22 -0
  56. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts.map +1 -0
  57. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.js +262 -0
  58. package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.d.ts +30 -0
  59. package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.d.ts.map +1 -0
  60. package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.js +100 -0
  61. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +12 -0
  62. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  63. package/dist/src/presentation/web/components/common/index.d.ts +3 -4
  64. package/dist/src/presentation/web/components/common/index.d.ts.map +1 -1
  65. package/dist/src/presentation/web/components/common/index.js +3 -4
  66. package/dist/src/presentation/web/components/common/merge-review/index.d.ts +1 -2
  67. package/dist/src/presentation/web/components/common/merge-review/index.d.ts.map +1 -1
  68. package/dist/src/presentation/web/components/common/merge-review/index.js +0 -1
  69. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts +0 -8
  70. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts.map +1 -1
  71. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.js +1 -33
  72. package/dist/src/presentation/web/components/common/prd-questionnaire/index.d.ts +1 -2
  73. package/dist/src/presentation/web/components/common/prd-questionnaire/index.d.ts.map +1 -1
  74. package/dist/src/presentation/web/components/common/prd-questionnaire/index.js +0 -1
  75. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts +0 -10
  76. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts.map +1 -1
  77. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.js +1 -38
  78. package/dist/src/presentation/web/components/common/task-progress-view/index.d.ts +3 -0
  79. package/dist/src/presentation/web/components/common/task-progress-view/index.d.ts.map +1 -0
  80. package/dist/src/presentation/web/components/common/task-progress-view/index.js +1 -0
  81. package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.d.ts +6 -0
  82. package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.d.ts.map +1 -0
  83. package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.js +84 -0
  84. package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.stories.d.ts +16 -0
  85. package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.stories.d.ts.map +1 -0
  86. package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.stories.js +194 -0
  87. package/dist/src/presentation/web/components/common/tech-decisions-review/index.d.ts +1 -2
  88. package/dist/src/presentation/web/components/common/tech-decisions-review/index.d.ts.map +1 -1
  89. package/dist/src/presentation/web/components/common/tech-decisions-review/index.js +0 -1
  90. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts +0 -8
  91. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts.map +1 -1
  92. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.js +1 -29
  93. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.js +2 -2
  94. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +9 -9
  95. package/dist/src/presentation/web/hooks/use-feature-logs.d.ts +7 -0
  96. package/dist/src/presentation/web/hooks/use-feature-logs.d.ts.map +1 -0
  97. package/dist/src/presentation/web/hooks/use-feature-logs.js +52 -0
  98. package/dist/tsconfig.build.tsbuildinfo +1 -1
  99. package/package.json +1 -1
  100. package/web/.next/BUILD_ID +1 -1
  101. package/web/.next/app-path-routes-manifest.json +1 -0
  102. package/web/.next/build-manifest.json +2 -2
  103. package/web/.next/fallback-build-manifest.json +2 -2
  104. package/web/.next/prerender-manifest.json +3 -3
  105. package/web/.next/required-server-files.js +1 -1
  106. package/web/.next/required-server-files.json +1 -1
  107. package/web/.next/routes-manifest.json +6 -0
  108. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +18 -18
  109. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  110. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  111. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +68 -38
  112. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  113. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  114. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  115. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
  116. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  117. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  118. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +18 -18
  119. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  120. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  121. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +68 -38
  122. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  123. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  124. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  125. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +14 -14
  126. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  127. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  128. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
  129. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  130. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  131. package/web/.next/server/app/_global-error.html +2 -2
  132. package/web/.next/server/app/_global-error.rsc +1 -1
  133. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  134. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  135. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  136. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  137. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  138. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  139. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  140. package/web/.next/server/app/api/feature-logs/route/app-paths-manifest.json +3 -0
  141. package/web/.next/server/app/api/feature-logs/route/build-manifest.json +11 -0
  142. package/web/.next/server/app/api/feature-logs/route/server-reference-manifest.json +4 -0
  143. package/web/.next/server/app/api/feature-logs/route.js +6 -0
  144. package/web/.next/server/app/api/feature-logs/route.js.map +5 -0
  145. package/web/.next/server/app/api/feature-logs/route.js.nft.json +1 -0
  146. package/web/.next/server/app/api/feature-logs/route_client-reference-manifest.js +2 -0
  147. package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
  148. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  149. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  150. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  151. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  152. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  153. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  154. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  155. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  156. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  157. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  158. package/web/.next/server/app-paths-manifest.json +1 -0
  159. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_feature-logs_route_actions_177445e7.js +3 -0
  160. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_feature-logs_route_actions_177445e7.js.map +1 -0
  161. package/web/.next/server/chunks/[root-of-the-server]__91d44424._.js +12 -0
  162. package/web/.next/server/chunks/[root-of-the-server]__91d44424._.js.map +1 -0
  163. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  164. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  165. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +1 -1
  166. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js.map +1 -1
  167. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
  168. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js.map +1 -1
  169. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
  170. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
  171. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  172. package/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js +1 -1
  173. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
  174. package/web/.next/server/chunks/ssr/[root-of-the-server]__6eb2a2b0._.js +1 -1
  175. package/web/.next/server/chunks/ssr/[root-of-the-server]__6eb2a2b0._.js.map +1 -1
  176. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
  177. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  178. package/web/.next/server/chunks/ssr/{[root-of-the-server]__a337ca5c._.js → [root-of-the-server]__ae824a5b._.js} +2 -2
  179. package/web/.next/server/chunks/ssr/[root-of-the-server]__ae824a5b._.js.map +1 -0
  180. package/web/.next/server/chunks/ssr/[root-of-the-server]__b3a4cef4._.js +1 -1
  181. package/web/.next/server/chunks/ssr/[root-of-the-server]__b3a4cef4._.js.map +1 -1
  182. package/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js +1 -1
  183. package/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js.map +1 -1
  184. package/web/.next/server/chunks/ssr/[root-of-the-server]__f0d8d054._.js +2 -2
  185. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
  186. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
  187. package/web/.next/server/chunks/ssr/_1e3cf73b._.js +1 -1
  188. package/web/.next/server/chunks/ssr/_1e3cf73b._.js.map +1 -1
  189. package/web/.next/server/chunks/ssr/_34fbed18._.js +1 -1
  190. package/web/.next/server/chunks/ssr/_34fbed18._.js.map +1 -1
  191. package/web/.next/server/chunks/ssr/{_06db7efd._.js → _3e88ce9d._.js} +2 -2
  192. package/web/.next/server/chunks/ssr/{_06db7efd._.js.map → _3e88ce9d._.js.map} +1 -1
  193. package/web/.next/server/chunks/ssr/{_b0924a46._.js → _4cc78caa._.js} +2 -2
  194. package/web/.next/server/chunks/ssr/{_b0924a46._.js.map → _4cc78caa._.js.map} +1 -1
  195. package/web/.next/server/chunks/ssr/_5d4e7151._.js +3 -0
  196. package/web/.next/server/chunks/ssr/{_5c4ce700._.js.map → _5d4e7151._.js.map} +1 -1
  197. package/web/.next/server/chunks/ssr/_63868199._.js +1 -1
  198. package/web/.next/server/chunks/ssr/_63868199._.js.map +1 -1
  199. package/web/.next/server/chunks/ssr/{_4031d614._.js → _887258d0._.js} +2 -2
  200. package/web/.next/server/chunks/ssr/{_4031d614._.js.map → _887258d0._.js.map} +1 -1
  201. package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
  202. package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
  203. package/web/.next/server/chunks/ssr/_a89e9440._.js +3 -0
  204. package/web/.next/server/chunks/ssr/{_a38f282a._.js.map → _a89e9440._.js.map} +1 -1
  205. package/web/.next/server/chunks/ssr/{_5dab501b._.js → _a9a31cc7._.js} +2 -2
  206. package/web/.next/server/chunks/ssr/{_5dab501b._.js.map → _a9a31cc7._.js.map} +1 -1
  207. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  208. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  209. package/web/.next/server/chunks/ssr/node_modules__pnpm_d80c1060._.js +3 -0
  210. package/web/.next/server/chunks/ssr/node_modules__pnpm_d80c1060._.js.map +1 -0
  211. package/web/.next/server/chunks/ssr/src_presentation_web_7efa14ca._.js +3 -0
  212. package/web/.next/server/chunks/ssr/src_presentation_web_7efa14ca._.js.map +1 -0
  213. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +1 -1
  214. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js.map +1 -1
  215. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  216. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  217. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  218. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  219. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js +1 -1
  220. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js.map +1 -1
  221. package/web/.next/server/chunks/ssr/src_presentation_web_b59d79db._.js +3 -0
  222. package/web/.next/server/chunks/ssr/src_presentation_web_b59d79db._.js.map +1 -0
  223. package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js +2 -2
  224. package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js.map +1 -1
  225. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  226. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  227. package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js +2 -2
  228. package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js.map +1 -1
  229. package/web/.next/server/pages/500.html +2 -2
  230. package/web/.next/server/server-reference-manifest.js +1 -1
  231. package/web/.next/server/server-reference-manifest.json +108 -64
  232. package/web/.next/static/chunks/1eb59ef58bc289af.js +1 -0
  233. package/web/.next/static/chunks/{1f57d0c949dbb44d.js → 2a24ac257fc1c10b.js} +1 -1
  234. package/web/.next/static/chunks/{87152e918f80ea8b.js → 5e3f946c0459b2e6.js} +1 -1
  235. package/web/.next/static/chunks/{9d8c6c874071efb2.js → 709acc97b45864c5.js} +1 -1
  236. package/web/.next/static/chunks/{8fe834f8a3c36e2f.js → 7be2145c5da9915d.js} +2 -2
  237. package/web/.next/static/chunks/a1c2ecb710b44081.js +1 -0
  238. package/web/.next/static/chunks/a2e2da17a62d4a16.js +1 -0
  239. package/web/.next/static/chunks/{6f7ba7846dcc8b21.js → c094a6d1f4f166cd.js} +1 -1
  240. package/web/.next/static/chunks/c576233480a01594.js +1 -0
  241. package/web/.next/static/chunks/cc4ae5c962684c74.js +1 -0
  242. package/web/.next/static/chunks/f324257cd8c5fd55.css +2 -0
  243. package/web/.next/static/chunks/{78455afb0164395c.js → f34022767b8cb68c.js} +2 -2
  244. package/web/.next/static/chunks/{27c4a8493483e6f3.js → f9edf7cceb5ecfe1.js} +1 -1
  245. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts +0 -9
  246. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts.map +0 -1
  247. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.js +0 -60
  248. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts +0 -47
  249. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts.map +0 -1
  250. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.js +0 -307
  251. package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.d.ts +0 -3
  252. package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.d.ts.map +0 -1
  253. package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.js +0 -8
  254. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.d.ts +0 -3
  255. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.d.ts.map +0 -1
  256. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.js +0 -8
  257. package/dist/src/presentation/web/components/common/review-drawer-shell/index.d.ts +0 -3
  258. package/dist/src/presentation/web/components/common/review-drawer-shell/index.d.ts.map +0 -1
  259. package/dist/src/presentation/web/components/common/review-drawer-shell/index.js +0 -1
  260. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell-config.d.ts +0 -26
  261. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell-config.d.ts.map +0 -1
  262. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell-config.js +0 -1
  263. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.d.ts +0 -3
  264. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.d.ts.map +0 -1
  265. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.js +0 -29
  266. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.d.ts +0 -14
  267. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.d.ts.map +0 -1
  268. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.js +0 -33
  269. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.d.ts +0 -3
  270. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.d.ts.map +0 -1
  271. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.js +0 -8
  272. package/dist/src/presentation/web/components/common/tech-review-tabs/index.d.ts +0 -3
  273. package/dist/src/presentation/web/components/common/tech-review-tabs/index.d.ts.map +0 -1
  274. package/dist/src/presentation/web/components/common/tech-review-tabs/index.js +0 -1
  275. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs-config.d.ts +0 -21
  276. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs-config.d.ts.map +0 -1
  277. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs-config.js +0 -1
  278. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.d.ts +0 -3
  279. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.d.ts.map +0 -1
  280. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.js +0 -12
  281. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.stories.d.ts +0 -16
  282. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.stories.d.ts.map +0 -1
  283. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.stories.js +0 -110
  284. package/web/.next/server/chunks/ssr/[root-of-the-server]__a337ca5c._.js.map +0 -1
  285. package/web/.next/server/chunks/ssr/_5c4ce700._.js +0 -3
  286. package/web/.next/server/chunks/ssr/_a38f282a._.js +0 -3
  287. package/web/.next/server/chunks/ssr/node_modules__pnpm_5412e589._.js +0 -3
  288. package/web/.next/server/chunks/ssr/node_modules__pnpm_5412e589._.js.map +0 -1
  289. package/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js +0 -3
  290. package/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js.map +0 -1
  291. package/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js +0 -3
  292. package/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js.map +0 -1
  293. package/web/.next/static/chunks/08c0a9667c05866c.css +0 -2
  294. package/web/.next/static/chunks/0fb8038f7ad4d2cf.js +0 -1
  295. package/web/.next/static/chunks/1211dcaac5963f92.js +0 -1
  296. package/web/.next/static/chunks/6a3e8ea6e1fd2113.js +0 -1
  297. package/web/.next/static/chunks/7336f9ec160c7bd8.js +0 -1
  298. package/web/.next/static/chunks/ba8b2aaa356a5487.js +0 -1
  299. /package/web/.next/static/{M0oz1_1InoSyr7OMLAKf7 → Q5dSnqKRfMPVDs276cx_I}/_buildManifest.js +0 -0
  300. /package/web/.next/static/{M0oz1_1InoSyr7OMLAKf7 → Q5dSnqKRfMPVDs276cx_I}/_clientMiddlewareManifest.json +0 -0
  301. /package/web/.next/static/{M0oz1_1InoSyr7OMLAKf7 → Q5dSnqKRfMPVDs276cx_I}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,11345,e=>{"use strict";let t=(0,e.i(3645).default)("chevron-left",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);e.s(["ChevronLeft",()=>t],11345)},76016,e=>{"use strict";let t=(0,e.i(3645).default)("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);e.s(["ChevronRight",()=>t],76016)},93752,e=>{"use strict";let t=(0,e.i(3645).default)("code",[["path",{d:"m16 18 6-6-6-6",key:"eg8j8"}],["path",{d:"m8 6-6 6 6 6",key:"ppft3o"}]]);e.s(["default",()=>t])},41957,e=>{"use strict";var t=e.i(20314),r=e.i(79054),a=e.i(87620),s=r.forwardRef((e,r)=>(0,t.jsx)(a.Primitive.label,{...e,ref:r,onMouseDown:t=>{t.target.closest("button, input, select, textarea")||(e.onMouseDown?.(t),!t.defaultPrevented&&t.detail>1&&t.preventDefault())}}));s.displayName="Label",e.s(["Label",()=>s,"Root",()=>s],27572);var o=e.i(27572),o=o,n=e.i(94237),i=e.i(31777);let l=(0,n.cva)("text-sm leading-none font-medium peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),d=r.forwardRef(({className:e,...r},a)=>(0,t.jsx)(o.Root,{ref:a,className:(0,i.cn)(l(),e),...r}));d.displayName=o.Root.displayName,e.s(["Label",()=>d],41957)},90382,e=>{"use strict";var t=e.i(20314),r=e.i(79054),a=e.i(91967),s=e.i(5978),o=e.i(22528),n=e.i(53532),i=e.i(41687),l=e.i(56720),d=e.i(13123),c=e.i(52740),u=e.i(39979),p=e.i(85995),h=e.i(87620),f=e.i(86874),m=e.i(36589),x=e.i(73772),g=e.i(13044),v="Popover",[b,j]=(0,o.createContextScope)(v,[c.createPopperScope]),w=(0,c.createPopperScope)(),[y,C]=b(v),N=e=>{let{__scopePopover:a,children:s,open:o,defaultOpen:n,onOpenChange:i,modal:l=!1}=e,u=w(a),p=r.useRef(null),[h,f]=r.useState(!1),[x,g]=(0,m.useControllableState)({prop:o,defaultProp:n??!1,onChange:i,caller:v});return(0,t.jsx)(c.Root,{...u,children:(0,t.jsx)(y,{scope:a,contentId:(0,d.useId)(),triggerRef:p,open:x,onOpenChange:g,onOpenToggle:r.useCallback(()=>g(e=>!e),[g]),hasCustomAnchor:h,onCustomAnchorAdd:r.useCallback(()=>f(!0),[]),onCustomAnchorRemove:r.useCallback(()=>f(!1),[]),modal:l,children:s})})};N.displayName=v;var k="PopoverAnchor",P=r.forwardRef((e,a)=>{let{__scopePopover:s,...o}=e,n=C(k,s),i=w(s),{onCustomAnchorAdd:l,onCustomAnchorRemove:d}=n;return r.useEffect(()=>(l(),()=>d()),[l,d]),(0,t.jsx)(c.Anchor,{...i,...o,ref:a})});P.displayName=k;var S="PopoverTrigger",T=r.forwardRef((e,r)=>{let{__scopePopover:o,...n}=e,i=C(S,o),l=w(o),d=(0,s.useComposedRefs)(r,i.triggerRef),u=(0,t.jsx)(h.Primitive.button,{type:"button","aria-haspopup":"dialog","aria-expanded":i.open,"aria-controls":i.contentId,"data-state":$(i.open),...n,ref:d,onClick:(0,a.composeEventHandlers)(e.onClick,i.onOpenToggle)});return i.hasCustomAnchor?u:(0,t.jsx)(c.Anchor,{asChild:!0,...l,children:u})});T.displayName=S;var R="PopoverPortal",[A,F]=b(R,{forceMount:void 0}),E=e=>{let{__scopePopover:r,forceMount:a,children:s,container:o}=e,n=C(R,r);return(0,t.jsx)(A,{scope:r,forceMount:a,children:(0,t.jsx)(p.Presence,{present:a||n.open,children:(0,t.jsx)(u.Portal,{asChild:!0,container:o,children:s})})})};E.displayName=R;var M="PopoverContent",O=r.forwardRef((e,r)=>{let a=F(M,e.__scopePopover),{forceMount:s=a.forceMount,...o}=e,n=C(M,e.__scopePopover);return(0,t.jsx)(p.Presence,{present:s||n.open,children:n.modal?(0,t.jsx)(z,{...o,ref:r}):(0,t.jsx)(L,{...o,ref:r})})});O.displayName=M;var D=(0,f.createSlot)("PopoverContent.RemoveScroll"),z=r.forwardRef((e,o)=>{let n=C(M,e.__scopePopover),i=r.useRef(null),l=(0,s.useComposedRefs)(o,i),d=r.useRef(!1);return r.useEffect(()=>{let e=i.current;if(e)return(0,x.hideOthers)(e)},[]),(0,t.jsx)(g.RemoveScroll,{as:D,allowPinchZoom:!0,children:(0,t.jsx)(I,{...e,ref:l,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:(0,a.composeEventHandlers)(e.onCloseAutoFocus,e=>{e.preventDefault(),d.current||n.triggerRef.current?.focus()}),onPointerDownOutside:(0,a.composeEventHandlers)(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,r=0===t.button&&!0===t.ctrlKey;d.current=2===t.button||r},{checkForDefaultPrevented:!1}),onFocusOutside:(0,a.composeEventHandlers)(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1})})})}),L=r.forwardRef((e,a)=>{let s=C(M,e.__scopePopover),o=r.useRef(!1),n=r.useRef(!1);return(0,t.jsx)(I,{...e,ref:a,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(o.current||s.triggerRef.current?.focus(),t.preventDefault()),o.current=!1,n.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(o.current=!0,"pointerdown"===t.detail.originalEvent.type&&(n.current=!0));let r=t.target;s.triggerRef.current?.contains(r)&&t.preventDefault(),"focusin"===t.detail.originalEvent.type&&n.current&&t.preventDefault()}})}),I=r.forwardRef((e,r)=>{let{__scopePopover:a,trapFocus:s,onOpenAutoFocus:o,onCloseAutoFocus:d,disableOutsidePointerEvents:u,onEscapeKeyDown:p,onPointerDownOutside:h,onFocusOutside:f,onInteractOutside:m,...x}=e,g=C(M,a),v=w(a);return(0,i.useFocusGuards)(),(0,t.jsx)(l.FocusScope,{asChild:!0,loop:!0,trapped:s,onMountAutoFocus:o,onUnmountAutoFocus:d,children:(0,t.jsx)(n.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:u,onInteractOutside:m,onEscapeKeyDown:p,onPointerDownOutside:h,onFocusOutside:f,onDismiss:()=>g.onOpenChange(!1),children:(0,t.jsx)(c.Content,{"data-state":$(g.open),role:"dialog",id:g.contentId,...v,...x,ref:r,style:{...x.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})}),B="PopoverClose",U=r.forwardRef((e,r)=>{let{__scopePopover:s,...o}=e,n=C(B,s);return(0,t.jsx)(h.Primitive.button,{type:"button",...o,ref:r,onClick:(0,a.composeEventHandlers)(e.onClick,()=>n.onOpenChange(!1))})});U.displayName=B;var H=r.forwardRef((e,r)=>{let{__scopePopover:a,...s}=e,o=w(a);return(0,t.jsx)(c.Arrow,{...o,...s,ref:r})});function $(e){return e?"open":"closed"}H.displayName="PopoverArrow",e.s(["Anchor",()=>P,"Arrow",()=>H,"Close",()=>U,"Content",()=>O,"Popover",()=>N,"PopoverAnchor",()=>P,"PopoverArrow",()=>H,"PopoverClose",()=>U,"PopoverContent",()=>O,"PopoverPortal",()=>E,"PopoverTrigger",()=>T,"Portal",()=>E,"Root",()=>N,"Trigger",()=>T,"createPopoverScope",()=>j],89920);var G=e.i(89920),G=G,_=e.i(31777);let q=G.Root,K=G.Trigger;G.Anchor;let V=r.forwardRef(({className:e,align:r="center",sideOffset:a=4,...s},o)=>(0,t.jsx)(G.Portal,{children:(0,t.jsx)(G.Content,{ref:o,align:r,sideOffset:a,className:(0,_.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 rounded-md border p-4 shadow-md outline-none",e),...s})}));V.displayName=G.Content.displayName,e.s(["Popover",()=>q,"PopoverContent",()=>V,"PopoverTrigger",()=>K],90382)},51911,23405,e=>{"use strict";var t=e.i(20314),r=e.i(79054),a=e.i(91967),s=e.i(5978),o=e.i(22528),n=e.i(36589);function i(e){let t=r.useRef({value:e,previous:e});return r.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}e.s(["usePrevious",()=>i],23405);var l=e.i(77624),d=e.i(87620),c="Switch",[u,p]=(0,o.createContextScope)(c),[h,f]=u(c),m=r.forwardRef((e,o)=>{let{__scopeSwitch:i,name:l,checked:u,defaultChecked:p,required:f,disabled:m,value:x="on",onCheckedChange:g,form:j,...w}=e,[y,C]=r.useState(null),N=(0,s.useComposedRefs)(o,e=>C(e)),k=r.useRef(!1),P=!y||j||!!y.closest("form"),[S,T]=(0,n.useControllableState)({prop:u,defaultProp:p??!1,onChange:g,caller:c});return(0,t.jsxs)(h,{scope:i,checked:S,disabled:m,children:[(0,t.jsx)(d.Primitive.button,{type:"button",role:"switch","aria-checked":S,"aria-required":f,"data-state":b(S),"data-disabled":m?"":void 0,disabled:m,value:x,...w,ref:N,onClick:(0,a.composeEventHandlers)(e.onClick,e=>{T(e=>!e),P&&(k.current=e.isPropagationStopped(),k.current||e.stopPropagation())})}),P&&(0,t.jsx)(v,{control:y,bubbles:!k.current,name:l,value:x,checked:S,required:f,disabled:m,form:j,style:{transform:"translateX(-100%)"}})]})});m.displayName=c;var x="SwitchThumb",g=r.forwardRef((e,r)=>{let{__scopeSwitch:a,...s}=e,o=f(x,a);return(0,t.jsx)(d.Primitive.span,{"data-state":b(o.checked),"data-disabled":o.disabled?"":void 0,...s,ref:r})});g.displayName=x;var v=r.forwardRef(({__scopeSwitch:e,control:a,checked:o,bubbles:n=!0,...d},c)=>{let u=r.useRef(null),p=(0,s.useComposedRefs)(u,c),h=i(o),f=(0,l.useSize)(a);return r.useEffect(()=>{let e=u.current;if(!e)return;let t=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"checked").set;if(h!==o&&t){let r=new Event("click",{bubbles:n});t.call(e,o),e.dispatchEvent(r)}},[h,o,n]),(0,t.jsx)("input",{type:"checkbox","aria-hidden":!0,defaultChecked:o,...d,tabIndex:-1,ref:p,style:{...d.style,...f,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})});function b(e){return e?"checked":"unchecked"}v.displayName="SwitchBubbleInput",e.s(["Root",()=>m,"Switch",()=>m,"SwitchThumb",()=>g,"Thumb",()=>g,"createSwitchScope",()=>p],95291);var j=e.i(95291),j=j,w=e.i(31777);function y({className:e,size:r="default",...a}){return(0,t.jsx)(j.Root,{"data-slot":"switch","data-size":r,className:(0,w.cn)("peer group/switch focus-visible:border-ring focus-visible:ring-ring/50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80 inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6",e),...a,children:(0,t.jsx)(j.Thumb,{"data-slot":"switch-thumb",className:(0,w.cn)("bg-background dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0")})})}e.s(["Switch",()=>y],51911)},25758,24300,e=>{"use strict";var t=e.i(21023);let r=(0,t.createServerReference)("006f2bef08b61b70c939a2b5cd85bd229bd7f7b949",t.callServer,void 0,t.findSourceMapURL,"getAllAgentModels");e.s(["getAllAgentModels",()=>r],25758);let a=(0,t.createServerReference)("60d401e8802009a4a1abe74d2da7c3328541e23fe1",t.callServer,void 0,t.findSourceMapURL,"updateAgentAndModel");e.s(["updateAgentAndModel",()=>a],24300)},41413,e=>{"use strict";var t=e.i(20314),r=e.i(79054),a=e.i(23925),s=e.i(11345),o=e.i(76016),n=e.i(25758),i=e.i(24300),l=e.i(86782),d=e.i(29847),c=e.i(35364),u=e.i(90382),p=e.i(31777);function h({initialAgentType:e,initialModel:h,onAgentModelChange:f,disabled:m,className:x,mode:g}){let[v,b]=r.useState(!1),[j,w]=r.useState([]),[y,C]=r.useState(!0),[N,k]=r.useState(e),[P,S]=r.useState(h),[T,R]=r.useState(null),[A,F]=r.useState(0),[E,M]=r.useState(null);r.useEffect(()=>{(0,n.getAllAgentModels)().then(w).finally(()=>C(!1))},[]),r.useEffect(()=>{if(!v){let e=setTimeout(()=>{F(0),M(null)},150);return()=>clearTimeout(e)}},[v]);let O=async(e,t)=>{if(b(!1),e!==N||t!==P){if("override"===g){k(e),S(t),f?.(e,t);return}k(e),S(t),f?.(e,t),R(null);try{let r=await (0,i.updateAgentAndModel)(e,t||null);r.ok||(k(N),S(P),f?.(N,P),R(r.error??"Failed to save"))}catch{k(N),S(P),f?.(N,P),R("Failed to save")}}},D=(0,l.getAgentTypeIcon)(N),z=j.find(e=>e.agentType===N)?.label??N,L=P?(0,d.getModelMeta)(P).displayName||P:null,I=E?j.find(e=>e.agentType===E):null;return(0,t.jsxs)("div",{className:(0,p.cn)("flex flex-col gap-1",x),children:[(0,t.jsxs)(u.Popover,{open:v,onOpenChange:b,children:[(0,t.jsx)(u.PopoverTrigger,{asChild:!0,children:(0,t.jsx)(c.Button,{variant:"outline",role:"combobox","aria-expanded":v,disabled:(m??!1)||y,className:"w-auto cursor-pointer justify-start font-normal hover:border-violet-300 hover:bg-violet-50/50 dark:hover:border-violet-700 dark:hover:bg-violet-950/30",children:(0,t.jsxs)("span",{className:"flex items-center gap-2 truncate",children:[(0,t.jsx)(D,{className:"h-4 w-4 shrink-0"}),y?"Loading…":(0,t.jsxs)("span",{className:"flex items-center gap-1",children:[(0,t.jsx)("span",{className:"text-muted-foreground text-xs",children:z}),L?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{className:"text-muted-foreground/50 text-xs",children:"·"}),(0,t.jsx)("span",{className:"text-xs font-medium",children:L})]}):null]})]})})}),(0,t.jsx)(u.PopoverContent,{className:"w-(--radix-popover-trigger-width) overflow-hidden p-0",align:"start",children:(0,t.jsxs)("div",{className:"flex transition-transform duration-200 ease-in-out",style:{transform:`translateX(${1===A?"-50%":"0%"})`,width:"200%"},children:[(0,t.jsxs)("div",{className:"w-1/2 shrink-0",children:[(0,t.jsx)("div",{className:"text-muted-foreground border-b px-3 py-2 text-xs font-medium",children:"Select agent"}),j.map(e=>{let r=(0,l.getAgentTypeIcon)(e.agentType),s=N===e.agentType,n=e.models.length>0;return(0,t.jsxs)("button",{type:"button",className:(0,p.cn)("flex w-full cursor-pointer items-center gap-2.5 px-3 py-2 text-sm transition-colors","hover:bg-accent hover:text-accent-foreground",s&&"bg-accent/50"),onClick:()=>{n?(M(e.agentType),requestAnimationFrame(()=>{requestAnimationFrame(()=>F(1))})):O(e.agentType,"")},children:[(0,t.jsx)(r,{className:"h-4 w-4 shrink-0"}),(0,t.jsx)("span",{className:"flex-1 text-left",children:e.label}),s&&!n?(0,t.jsx)(a.Check,{className:"text-primary h-3.5 w-3.5 shrink-0"}):null,n?(0,t.jsx)(o.ChevronRight,{className:"text-muted-foreground h-3.5 w-3.5 shrink-0"}):null]},e.agentType)})]}),(0,t.jsx)("div",{className:"w-1/2 shrink-0",children:I?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("button",{type:"button",className:"text-muted-foreground hover:text-foreground flex w-full cursor-pointer items-center gap-1.5 border-b px-3 py-2 text-xs font-medium transition-colors",onClick:()=>{F(0),setTimeout(()=>M(null),220)},children:[(0,t.jsx)(s.ChevronLeft,{className:"h-3.5 w-3.5"}),I.label]}),I.models.map(e=>{let r=N===I.agentType&&P===e.id;return(0,t.jsxs)("button",{type:"button",className:(0,p.cn)("flex w-full cursor-pointer items-center gap-3 px-3 py-2 text-left transition-colors","hover:bg-accent hover:text-accent-foreground",r&&"bg-accent/50"),onClick:()=>O(I.agentType,e.id),children:[(0,t.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col",children:[(0,t.jsx)("span",{className:"text-sm font-medium",children:e.displayName}),(0,t.jsx)("span",{className:"text-muted-foreground text-xs",children:e.description})]}),r?(0,t.jsx)(a.Check,{className:"text-primary h-3.5 w-3.5 shrink-0"}):null]},e.id)})]}):null})]})})]}),!!T&&(0,t.jsx)("p",{className:"text-destructive text-sm",children:T})]})}e.s(["AgentModelPicker",()=>h])},15203,e=>{"use strict";var t=e.i(20314),r=e.i(79054),a=e.i(31406),s=e.i(60112),o=e.i(21023);let n=(0,o.createServerReference)("402f6c096143ec812a4a9ff701106198cf8b5d02df",o.callServer,void 0,o.findSourceMapURL,"createFeature");var i=e.i(91891),i=i,l=e.i(3645);let d=(0,l.default)("file",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}]]);var c=e.i(16298),c=c;let u=(0,l.default)("image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]);var p=e.i(93752),p=p,h=e.i(69512),h=h;let f=(0,l.default)("chevrons-up-down",[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]]);var m=e.i(1012),m=m,x=e.i(31777),g=e.i(8361);e.i(1650);var v=e.i(11495),b=e.i(45811),j=e.i(35364),w=e.i(98127);function y({className:e,...r}){return(0,t.jsx)("textarea",{"data-slot":"textarea",className:(0,x.cn)("placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input field-sizing-content min-h-[80px] w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",e),...r})}var C=e.i(41957),N=e.i(81846),k=e.i(90382),P=e.i(51911),S=e.i(2828),T=e.i(30153),R=e.i(41413);async function A(){let e=await fetch("/api/dialog/pick-files",{method:"POST"});if(!e.ok)throw Error("Failed to open file dialog");let t=await e.json();return t.cancelled?null:t.files}let F=[{id:"allowPrd",label:"PRD",description:"Auto-approve requirements move to planning."},{id:"allowPlan",label:"Plan",description:"Auto-approve planning move to implementation."},{id:"allowMerge",label:"Merge",description:"Auto-approve merge move to Done."}],E={allowPrd:!1,allowPlan:!1,allowMerge:!1};function M({open:e,onClose:a,onSubmit:s,repositoryPath:o,isSubmitting:n=!1,workflowDefaults:l,features:d,initialParentId:c,currentAgentType:u,currentModel:p}){let h=(0,g.useSoundAction)("create"),f=l?.approvalGates??E,m=l?.push??!1,w=l?.openPr??!1,[k,M]=(0,r.useState)(""),[z,L]=(0,r.useState)([]),[I,B]=(0,r.useState)({...f}),[U,H]=(0,r.useState)(m),[$,G]=(0,r.useState)(w),[_,q]=(0,r.useState)(void 0),[K,V]=(0,r.useState)(!1),[W,X]=(0,r.useState)(void 0),[Y,Z]=(0,r.useState)(void 0);(0,r.useEffect)(()=>{l&&(B({...l.approvalGates}),H(l.push),G(l.openPr))},[l]),(0,r.useEffect)(()=>{e&&c&&q(c)},[e,c]);let J=(0,r.useCallback)(()=>{M(""),L([]),B({...f}),H(m),G(w),q(void 0),V(!1),X(void 0),Z(void 0)},[f,m,w]),Q=""!==k.trim()||z.length>0,{attemptClose:ee}=(0,T.useGuardedDrawerClose)({open:e,isDirty:Q,onClose:a,onReset:J}),et=(0,r.useCallback)(e=>{e.preventDefault(),k.trim()&&(h.play(),s({description:k.trim(),attachments:z,repositoryPath:o,approvalGates:{allowPrd:I.allowPrd??!1,allowPlan:I.allowPlan??!1,allowMerge:I.allowMerge??!1},push:U||$,openPr:$,fast:K,...W?{agentType:W}:{},...Y?{model:Y}:{},..._?{parentId:_}:{}}),J())},[k,z,I,o,s,U,$,K,W,Y,_,h,J]),er=(0,r.useCallback)(async()=>{try{let e=await A();e&&L(t=>[...t,...e])}catch{}},[]),ea=(0,r.useCallback)(e=>{L(t=>t.filter(t=>t.path!==e))},[]),es=d&&d.length>0;return(0,t.jsx)(v.BaseDrawer,{open:e,onClose:ee,size:"md",modal:!1,dismissOnOutsideClick:!0,"data-testid":"feature-create-drawer",header:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("div",{className:"h-2.5 w-2.5 shrink-0 rounded-full bg-blue-500"}),(0,t.jsx)(b.DrawerTitle,{children:"NEW FEATURE"})]}),n?(0,t.jsx)(b.DrawerDescription,{asChild:!0,children:(0,t.jsx)("div",{children:(0,t.jsx)(N.Badge,{variant:"secondary",children:"Creating..."})})}):null]}),footer:(0,t.jsxs)("div",{className:"flex flex-row justify-end gap-2",children:[(0,t.jsx)(j.Button,{variant:"outline",onClick:ee,disabled:n,children:"Cancel"}),(0,t.jsx)(j.Button,{type:"submit",form:"create-feature-form",disabled:!k.trim()||n,children:n?"Creating...":"+ Create Feature"})]}),children:(0,t.jsx)("div",{className:"overflow-y-auto p-4",children:(0,t.jsx)(S.TooltipProvider,{delayDuration:400,children:(0,t.jsxs)("form",{id:"create-feature-form",onSubmit:et,className:"flex flex-col gap-4",children:[(0,t.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,t.jsx)(C.Label,{htmlFor:"feature-description",className:"text-muted-foreground text-xs font-semibold tracking-wider",children:"DESCRIBE YOUR FEATURE"}),(0,t.jsxs)("div",{className:"border-input focus-within:ring-ring/50 focus-within:border-ring overflow-hidden rounded-md border shadow-xs transition-[color,box-shadow] focus-within:ring-[3px]",children:[(0,t.jsx)(y,{id:"feature-description",placeholder:"e.g. Add GitHub OAuth login with callback handling and token refresh...",value:k,onChange:e=>M(e.target.value),rows:7,required:!0,disabled:n,className:"field-sizing-fixed min-h-42! resize-none rounded-none border-0 shadow-none focus-visible:ring-0"}),(0,t.jsxs)("div",{className:"border-input flex items-center gap-3 border-t px-3 py-1.5",children:[(0,t.jsx)(R.AgentModelPicker,{initialAgentType:W??u??"claude-code",initialModel:Y??p??"claude-sonnet-4-6",mode:"override",onAgentModelChange:(e,t)=>{X(e),Z(t)},disabled:n,className:"w-55"}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"ml-auto flex cursor-pointer items-center gap-2",children:[(0,t.jsx)(P.Switch,{id:"fast-mode",checked:K,onCheckedChange:V,disabled:n}),(0,t.jsx)(C.Label,{htmlFor:"fast-mode",className:"cursor-pointer text-sm font-medium",children:"Fast Mode"})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:"Skip SDLC phases and implement directly from your prompt."})]})]})]})]}),es&&void 0!==c?(0,t.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,t.jsx)(C.Label,{htmlFor:"parent-feature",className:"text-muted-foreground text-xs font-semibold tracking-wider",children:"PARENT FEATURE"}),(0,t.jsx)(O,{features:d,value:_,onChange:q,disabled:n})]}):null,(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsxs)("div",{className:"border-input flex items-center gap-4 rounded-md border px-3 py-2.5",children:[(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("span",{className:"text-muted-foreground w-16 shrink-0 cursor-default text-xs font-semibold tracking-wider",children:"APPROVE"})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:"Auto-approve phase transitions without manual review."})]}),(0,t.jsx)("div",{className:"flex flex-1 items-center gap-4",children:F.map(e=>(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(P.Switch,{id:`approve-${e.id}`,size:"sm",checked:I[e.id]??!1,onCheckedChange:t=>B(r=>({...r,[e.id]:t})),disabled:n||K&&("allowPrd"===e.id||"allowPlan"===e.id)}),(0,t.jsx)(C.Label,{htmlFor:`approve-${e.id}`,className:"cursor-pointer text-xs font-medium",children:e.label})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:K&&("allowPrd"===e.id||"allowPlan"===e.id)?"Skipped in Fast Mode":e.description})]},e.id))}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button",onClick:()=>{let e=F.every(e=>I[e.id]),t={};for(let r of F)t[r.id]=!e;B(t)},disabled:n,className:(0,x.cn)("text-muted-foreground hover:text-foreground cursor-pointer rounded px-1.5 py-0.5 text-[10px] font-semibold tracking-wider uppercase transition-colors",F.every(e=>I[e.id])&&"text-primary"),children:"All"})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:"Toggle all approval gates"})]})]}),(0,t.jsxs)("div",{className:"border-input flex items-center gap-4 rounded-md border px-3 py-2.5",children:[(0,t.jsx)("span",{className:"text-muted-foreground w-16 shrink-0 text-xs font-semibold tracking-wider",children:"GIT"}),(0,t.jsxs)("div",{className:"flex flex-1 items-center gap-4",children:[(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(P.Switch,{id:"push",size:"sm",checked:U||$,onCheckedChange:e=>{H(e),!e&&$&&G(!1)},disabled:n}),(0,t.jsx)(C.Label,{htmlFor:"push",className:"cursor-pointer text-xs font-medium",children:"Push"})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:"Push branch to remote after implementation."})]}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(P.Switch,{id:"open-pr",size:"sm",checked:$,onCheckedChange:G,disabled:n}),(0,t.jsx)(C.Label,{htmlFor:"open-pr",className:"cursor-pointer text-xs font-medium",children:"PR"})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:"Open a pull request after pushing."})]})]})]})]}),(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)(C.Label,{className:"text-muted-foreground text-xs font-semibold tracking-wider",children:["ATTACHMENTS",z.length>0&&(0,t.jsxs)("span",{className:"text-muted-foreground/60 ml-1.5",children:["(",z.length,")"]})]}),(0,t.jsxs)(j.Button,{type:"button",variant:"outline",size:"xs",onClick:er,disabled:n,children:[(0,t.jsx)(i.default,{className:"size-3"}),"Add Files"]})]}),z.length>0&&(0,t.jsx)("div",{className:"flex flex-col gap-2",children:z.map(e=>(0,t.jsx)(D,{file:e,onRemove:()=>ea(e.path),disabled:n},e.path))})]})]})})})})}function O({features:e,value:a,onChange:s,disabled:o}){let[n,i]=(0,r.useState)(!1),[l,d]=(0,r.useState)(""),c=(0,r.useRef)(null),u=e.find(e=>e.id===a),p=l.trim()?e.filter(e=>e.name.toLowerCase().includes(l.toLowerCase())||e.id.toLowerCase().includes(l.toLowerCase())):e,h=(0,r.useCallback)(e=>{s(e),i(!1),d("")},[s]);return(0,r.useEffect)(()=>{n?setTimeout(()=>c.current?.focus(),0):d("")},[n]),(0,t.jsxs)(k.Popover,{open:n,onOpenChange:i,children:[(0,t.jsx)(k.PopoverTrigger,{asChild:!0,children:(0,t.jsxs)("button",{id:"parent-feature",type:"button",role:"combobox","aria-expanded":n,"aria-label":"Parent Feature",disabled:o,"data-testid":"parent-feature-combobox",className:(0,x.cn)("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",!u&&"text-muted-foreground"),children:[(0,t.jsx)("span",{className:"truncate",children:u?`${u.name} (${u.id.slice(0,8)})`:"Select parent feature..."}),(0,t.jsx)(f,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),(0,t.jsx)(k.PopoverContent,{className:"w-80 p-0",align:"start","data-testid":"parent-feature-combobox-content",children:(0,t.jsxs)("div",{className:"flex flex-col",children:[(0,t.jsx)("div",{className:"border-b p-2",children:(0,t.jsx)(w.Input,{ref:c,placeholder:"Search features...",value:l,onChange:e=>d(e.target.value),className:"h-8 border-0 p-0 text-sm shadow-none focus-visible:ring-0","data-testid":"parent-feature-search"})}),(0,t.jsxs)("div",{className:"max-h-48 overflow-y-auto py-1",role:"listbox","aria-label":"Features",children:[(0,t.jsxs)("button",{type:"button",role:"option","aria-selected":void 0===a,onClick:()=>h(void 0),className:(0,x.cn)("hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm",void 0===a&&"bg-accent/50"),"data-testid":"parent-feature-option-none",children:[(0,t.jsx)(m.default,{className:(0,x.cn)("h-4 w-4 shrink-0",void 0!==a&&"invisible")}),(0,t.jsx)("span",{className:"text-muted-foreground italic",children:"No parent"})]}),0===p.length&&l?(0,t.jsx)("p",{className:"text-muted-foreground px-3 py-2 text-sm",children:"No features found."}):p.map(e=>(0,t.jsxs)("button",{type:"button",role:"option","aria-selected":a===e.id,onClick:()=>h(e.id),className:(0,x.cn)("hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm",a===e.id&&"bg-accent/50"),"data-testid":`parent-feature-option-${e.id}`,children:[(0,t.jsx)(m.default,{className:(0,x.cn)("h-4 w-4 shrink-0",a!==e.id&&"invisible")}),(0,t.jsxs)("span",{className:"truncate",children:[e.name," ",(0,t.jsxs)("span",{className:"text-muted-foreground font-mono text-xs",children:["(",e.id.slice(0,8),")"]})]})]},e.id))]})]})})]})}function D({file:e,onRemove:r,disabled:a}){var s,o,n;let i,l=(i=(s=e.name).lastIndexOf("."))>=0?s.slice(i).toLowerCase():"",f=(o=l,z.has(o)?u:".pdf"===o?c.default:L.has(o)?p.default:d),m=".pdf"===(n=l)?"bg-red-50 text-red-600":z.has(n)?"bg-blue-50 text-blue-600":L.has(n)?"bg-emerald-50 text-emerald-600":"bg-gray-50 text-gray-600";return(0,t.jsxs)("div",{className:"flex items-center gap-3 rounded-md border p-2",children:[(0,t.jsx)("div",{className:(0,x.cn)("flex h-8 w-8 shrink-0 items-center justify-center rounded",m),children:(0,t.jsx)(f,{className:"h-4 w-4"})}),(0,t.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col",children:[(0,t.jsx)("span",{className:"truncate text-sm font-medium",children:e.name}),(0,t.jsx)("span",{className:"text-muted-foreground truncate text-xs",children:e.path}),(0,t.jsx)("span",{className:"text-muted-foreground text-xs",children:function(e){if(0===e)return"0 B";let t=Math.floor(Math.log(e)/Math.log(1024));return`${(e/Math.pow(1024,t)).toFixed(+(0!==t))} ${["B","KB","MB","GB"][t]}`}(e.size)})]}),(0,t.jsx)(j.Button,{type:"button",variant:"ghost",size:"icon-xs",onClick:r,disabled:a,"aria-label":`Remove ${e.name}`,children:(0,t.jsx)(h.default,{className:"h-3 w-3"})})]})}let z=new Set([".png",".jpg",".jpeg",".gif",".svg",".webp",".ico",".bmp"]),L=new Set([".ts",".tsx",".js",".jsx",".json",".yaml",".yml",".xml",".html",".css",".md"]);function I({repositoryPath:e,initialParentId:o,features:i,workflowDefaults:l,currentAgentType:d,currentModel:c}){let u=(0,a.useRouter)(),[p,h]=(0,r.useState)(!1),f=(0,a.usePathname)().startsWith("/create"),m=!p&&f;(0,r.useEffect)(()=>{!f&&p&&h(!1)},[f,p]);let x=(0,r.useCallback)(()=>{u.push("/")},[u]),g=(0,r.useCallback)(e=>{h(!0),u.push("/"),n(e).then(t=>{t.error?s.toast.error(t.error):window.dispatchEvent(new CustomEvent("shep:feature-created",{detail:{featureId:t.feature.id,name:t.feature.name,description:t.feature.description,repositoryPath:t.feature.repositoryPath,parentId:e.parentId}}))}).catch(()=>{s.toast.error("Failed to create feature"),h(!1)})},[u]);return(0,t.jsx)(M,{open:m,onClose:x,onSubmit:g,repositoryPath:e,features:i,workflowDefaults:l,initialParentId:o,isSubmitting:p,currentAgentType:d,currentModel:c})}e.s(["CreateDrawerClient",()=>I],15203)}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,11345,e=>{"use strict";let t=(0,e.i(3645).default)("chevron-left",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);e.s(["ChevronLeft",()=>t],11345)},76016,e=>{"use strict";let t=(0,e.i(3645).default)("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);e.s(["ChevronRight",()=>t],76016)},93752,e=>{"use strict";let t=(0,e.i(3645).default)("code",[["path",{d:"m16 18 6-6-6-6",key:"eg8j8"}],["path",{d:"m8 6-6 6 6 6",key:"ppft3o"}]]);e.s(["default",()=>t])},41957,e=>{"use strict";var t=e.i(20314),r=e.i(79054),a=e.i(87620),s=r.forwardRef((e,r)=>(0,t.jsx)(a.Primitive.label,{...e,ref:r,onMouseDown:t=>{t.target.closest("button, input, select, textarea")||(e.onMouseDown?.(t),!t.defaultPrevented&&t.detail>1&&t.preventDefault())}}));s.displayName="Label",e.s(["Label",()=>s,"Root",()=>s],27572);var o=e.i(27572),o=o,n=e.i(94237),i=e.i(31777);let l=(0,n.cva)("text-sm leading-none font-medium peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),d=r.forwardRef(({className:e,...r},a)=>(0,t.jsx)(o.Root,{ref:a,className:(0,i.cn)(l(),e),...r}));d.displayName=o.Root.displayName,e.s(["Label",()=>d],41957)},90382,e=>{"use strict";var t=e.i(20314),r=e.i(79054),a=e.i(91967),s=e.i(5978),o=e.i(22528),n=e.i(53532),i=e.i(41687),l=e.i(56720),d=e.i(13123),c=e.i(52740),u=e.i(39979),p=e.i(85995),h=e.i(87620),f=e.i(86874),m=e.i(36589),x=e.i(73772),g=e.i(13044),v="Popover",[b,j]=(0,o.createContextScope)(v,[c.createPopperScope]),w=(0,c.createPopperScope)(),[y,C]=b(v),N=e=>{let{__scopePopover:a,children:s,open:o,defaultOpen:n,onOpenChange:i,modal:l=!1}=e,u=w(a),p=r.useRef(null),[h,f]=r.useState(!1),[x,g]=(0,m.useControllableState)({prop:o,defaultProp:n??!1,onChange:i,caller:v});return(0,t.jsx)(c.Root,{...u,children:(0,t.jsx)(y,{scope:a,contentId:(0,d.useId)(),triggerRef:p,open:x,onOpenChange:g,onOpenToggle:r.useCallback(()=>g(e=>!e),[g]),hasCustomAnchor:h,onCustomAnchorAdd:r.useCallback(()=>f(!0),[]),onCustomAnchorRemove:r.useCallback(()=>f(!1),[]),modal:l,children:s})})};N.displayName=v;var k="PopoverAnchor",P=r.forwardRef((e,a)=>{let{__scopePopover:s,...o}=e,n=C(k,s),i=w(s),{onCustomAnchorAdd:l,onCustomAnchorRemove:d}=n;return r.useEffect(()=>(l(),()=>d()),[l,d]),(0,t.jsx)(c.Anchor,{...i,...o,ref:a})});P.displayName=k;var S="PopoverTrigger",T=r.forwardRef((e,r)=>{let{__scopePopover:o,...n}=e,i=C(S,o),l=w(o),d=(0,s.useComposedRefs)(r,i.triggerRef),u=(0,t.jsx)(h.Primitive.button,{type:"button","aria-haspopup":"dialog","aria-expanded":i.open,"aria-controls":i.contentId,"data-state":$(i.open),...n,ref:d,onClick:(0,a.composeEventHandlers)(e.onClick,i.onOpenToggle)});return i.hasCustomAnchor?u:(0,t.jsx)(c.Anchor,{asChild:!0,...l,children:u})});T.displayName=S;var R="PopoverPortal",[A,F]=b(R,{forceMount:void 0}),E=e=>{let{__scopePopover:r,forceMount:a,children:s,container:o}=e,n=C(R,r);return(0,t.jsx)(A,{scope:r,forceMount:a,children:(0,t.jsx)(p.Presence,{present:a||n.open,children:(0,t.jsx)(u.Portal,{asChild:!0,container:o,children:s})})})};E.displayName=R;var M="PopoverContent",O=r.forwardRef((e,r)=>{let a=F(M,e.__scopePopover),{forceMount:s=a.forceMount,...o}=e,n=C(M,e.__scopePopover);return(0,t.jsx)(p.Presence,{present:s||n.open,children:n.modal?(0,t.jsx)(z,{...o,ref:r}):(0,t.jsx)(L,{...o,ref:r})})});O.displayName=M;var D=(0,f.createSlot)("PopoverContent.RemoveScroll"),z=r.forwardRef((e,o)=>{let n=C(M,e.__scopePopover),i=r.useRef(null),l=(0,s.useComposedRefs)(o,i),d=r.useRef(!1);return r.useEffect(()=>{let e=i.current;if(e)return(0,x.hideOthers)(e)},[]),(0,t.jsx)(g.RemoveScroll,{as:D,allowPinchZoom:!0,children:(0,t.jsx)(I,{...e,ref:l,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:(0,a.composeEventHandlers)(e.onCloseAutoFocus,e=>{e.preventDefault(),d.current||n.triggerRef.current?.focus()}),onPointerDownOutside:(0,a.composeEventHandlers)(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,r=0===t.button&&!0===t.ctrlKey;d.current=2===t.button||r},{checkForDefaultPrevented:!1}),onFocusOutside:(0,a.composeEventHandlers)(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1})})})}),L=r.forwardRef((e,a)=>{let s=C(M,e.__scopePopover),o=r.useRef(!1),n=r.useRef(!1);return(0,t.jsx)(I,{...e,ref:a,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(o.current||s.triggerRef.current?.focus(),t.preventDefault()),o.current=!1,n.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(o.current=!0,"pointerdown"===t.detail.originalEvent.type&&(n.current=!0));let r=t.target;s.triggerRef.current?.contains(r)&&t.preventDefault(),"focusin"===t.detail.originalEvent.type&&n.current&&t.preventDefault()}})}),I=r.forwardRef((e,r)=>{let{__scopePopover:a,trapFocus:s,onOpenAutoFocus:o,onCloseAutoFocus:d,disableOutsidePointerEvents:u,onEscapeKeyDown:p,onPointerDownOutside:h,onFocusOutside:f,onInteractOutside:m,...x}=e,g=C(M,a),v=w(a);return(0,i.useFocusGuards)(),(0,t.jsx)(l.FocusScope,{asChild:!0,loop:!0,trapped:s,onMountAutoFocus:o,onUnmountAutoFocus:d,children:(0,t.jsx)(n.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:u,onInteractOutside:m,onEscapeKeyDown:p,onPointerDownOutside:h,onFocusOutside:f,onDismiss:()=>g.onOpenChange(!1),children:(0,t.jsx)(c.Content,{"data-state":$(g.open),role:"dialog",id:g.contentId,...v,...x,ref:r,style:{...x.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})}),B="PopoverClose",U=r.forwardRef((e,r)=>{let{__scopePopover:s,...o}=e,n=C(B,s);return(0,t.jsx)(h.Primitive.button,{type:"button",...o,ref:r,onClick:(0,a.composeEventHandlers)(e.onClick,()=>n.onOpenChange(!1))})});U.displayName=B;var H=r.forwardRef((e,r)=>{let{__scopePopover:a,...s}=e,o=w(a);return(0,t.jsx)(c.Arrow,{...o,...s,ref:r})});function $(e){return e?"open":"closed"}H.displayName="PopoverArrow",e.s(["Anchor",()=>P,"Arrow",()=>H,"Close",()=>U,"Content",()=>O,"Popover",()=>N,"PopoverAnchor",()=>P,"PopoverArrow",()=>H,"PopoverClose",()=>U,"PopoverContent",()=>O,"PopoverPortal",()=>E,"PopoverTrigger",()=>T,"Portal",()=>E,"Root",()=>N,"Trigger",()=>T,"createPopoverScope",()=>j],89920);var G=e.i(89920),G=G,_=e.i(31777);let q=G.Root,K=G.Trigger;G.Anchor;let V=r.forwardRef(({className:e,align:r="center",sideOffset:a=4,...s},o)=>(0,t.jsx)(G.Portal,{children:(0,t.jsx)(G.Content,{ref:o,align:r,sideOffset:a,className:(0,_.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 rounded-md border p-4 shadow-md outline-none",e),...s})}));V.displayName=G.Content.displayName,e.s(["Popover",()=>q,"PopoverContent",()=>V,"PopoverTrigger",()=>K],90382)},51911,23405,e=>{"use strict";var t=e.i(20314),r=e.i(79054),a=e.i(91967),s=e.i(5978),o=e.i(22528),n=e.i(36589);function i(e){let t=r.useRef({value:e,previous:e});return r.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}e.s(["usePrevious",()=>i],23405);var l=e.i(77624),d=e.i(87620),c="Switch",[u,p]=(0,o.createContextScope)(c),[h,f]=u(c),m=r.forwardRef((e,o)=>{let{__scopeSwitch:i,name:l,checked:u,defaultChecked:p,required:f,disabled:m,value:x="on",onCheckedChange:g,form:j,...w}=e,[y,C]=r.useState(null),N=(0,s.useComposedRefs)(o,e=>C(e)),k=r.useRef(!1),P=!y||j||!!y.closest("form"),[S,T]=(0,n.useControllableState)({prop:u,defaultProp:p??!1,onChange:g,caller:c});return(0,t.jsxs)(h,{scope:i,checked:S,disabled:m,children:[(0,t.jsx)(d.Primitive.button,{type:"button",role:"switch","aria-checked":S,"aria-required":f,"data-state":b(S),"data-disabled":m?"":void 0,disabled:m,value:x,...w,ref:N,onClick:(0,a.composeEventHandlers)(e.onClick,e=>{T(e=>!e),P&&(k.current=e.isPropagationStopped(),k.current||e.stopPropagation())})}),P&&(0,t.jsx)(v,{control:y,bubbles:!k.current,name:l,value:x,checked:S,required:f,disabled:m,form:j,style:{transform:"translateX(-100%)"}})]})});m.displayName=c;var x="SwitchThumb",g=r.forwardRef((e,r)=>{let{__scopeSwitch:a,...s}=e,o=f(x,a);return(0,t.jsx)(d.Primitive.span,{"data-state":b(o.checked),"data-disabled":o.disabled?"":void 0,...s,ref:r})});g.displayName=x;var v=r.forwardRef(({__scopeSwitch:e,control:a,checked:o,bubbles:n=!0,...d},c)=>{let u=r.useRef(null),p=(0,s.useComposedRefs)(u,c),h=i(o),f=(0,l.useSize)(a);return r.useEffect(()=>{let e=u.current;if(!e)return;let t=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"checked").set;if(h!==o&&t){let r=new Event("click",{bubbles:n});t.call(e,o),e.dispatchEvent(r)}},[h,o,n]),(0,t.jsx)("input",{type:"checkbox","aria-hidden":!0,defaultChecked:o,...d,tabIndex:-1,ref:p,style:{...d.style,...f,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})});function b(e){return e?"checked":"unchecked"}v.displayName="SwitchBubbleInput",e.s(["Root",()=>m,"Switch",()=>m,"SwitchThumb",()=>g,"Thumb",()=>g,"createSwitchScope",()=>p],95291);var j=e.i(95291),j=j,w=e.i(31777);function y({className:e,size:r="default",...a}){return(0,t.jsx)(j.Root,{"data-slot":"switch","data-size":r,className:(0,w.cn)("peer group/switch focus-visible:border-ring focus-visible:ring-ring/50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80 inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6",e),...a,children:(0,t.jsx)(j.Thumb,{"data-slot":"switch-thumb",className:(0,w.cn)("bg-background dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0")})})}e.s(["Switch",()=>y],51911)},57348,92260,e=>{"use strict";var t=e.i(21023);let r=(0,t.createServerReference)("00bc08bd3cf6e45576035c3378e57323e62bbbef79",t.callServer,void 0,t.findSourceMapURL,"getAllAgentModels");e.s(["getAllAgentModels",()=>r],57348);let a=(0,t.createServerReference)("604feaac3021dce1c01bdaa022d9d127b6bcff4e7a",t.callServer,void 0,t.findSourceMapURL,"updateAgentAndModel");e.s(["updateAgentAndModel",()=>a],92260)},41413,e=>{"use strict";var t=e.i(20314),r=e.i(79054),a=e.i(23925),s=e.i(11345),o=e.i(76016),n=e.i(57348),i=e.i(92260),l=e.i(86782),d=e.i(29847),c=e.i(35364),u=e.i(90382),p=e.i(31777);function h({initialAgentType:e,initialModel:h,onAgentModelChange:f,disabled:m,className:x,mode:g}){let[v,b]=r.useState(!1),[j,w]=r.useState([]),[y,C]=r.useState(!0),[N,k]=r.useState(e),[P,S]=r.useState(h),[T,R]=r.useState(null),[A,F]=r.useState(0),[E,M]=r.useState(null);r.useEffect(()=>{(0,n.getAllAgentModels)().then(w).finally(()=>C(!1))},[]),r.useEffect(()=>{if(!v){let e=setTimeout(()=>{F(0),M(null)},150);return()=>clearTimeout(e)}},[v]);let O=async(e,t)=>{if(b(!1),e!==N||t!==P){if("override"===g){k(e),S(t),f?.(e,t);return}k(e),S(t),f?.(e,t),R(null);try{let r=await (0,i.updateAgentAndModel)(e,t||null);r.ok||(k(N),S(P),f?.(N,P),R(r.error??"Failed to save"))}catch{k(N),S(P),f?.(N,P),R("Failed to save")}}},D=(0,l.getAgentTypeIcon)(N),z=j.find(e=>e.agentType===N)?.label??N,L=P?(0,d.getModelMeta)(P).displayName||P:null,I=E?j.find(e=>e.agentType===E):null;return(0,t.jsxs)("div",{className:(0,p.cn)("flex flex-col gap-1",x),children:[(0,t.jsxs)(u.Popover,{open:v,onOpenChange:b,children:[(0,t.jsx)(u.PopoverTrigger,{asChild:!0,children:(0,t.jsx)(c.Button,{variant:"outline",role:"combobox","aria-expanded":v,disabled:(m??!1)||y,className:"w-auto cursor-pointer justify-start font-normal hover:border-violet-300 hover:bg-violet-50/50 dark:hover:border-violet-700 dark:hover:bg-violet-950/30",children:(0,t.jsxs)("span",{className:"flex items-center gap-2 truncate",children:[(0,t.jsx)(D,{className:"h-4 w-4 shrink-0"}),y?"Loading…":(0,t.jsxs)("span",{className:"flex items-center gap-1",children:[(0,t.jsx)("span",{className:"text-muted-foreground text-xs",children:z}),L?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{className:"text-muted-foreground/50 text-xs",children:"·"}),(0,t.jsx)("span",{className:"text-xs font-medium",children:L})]}):null]})]})})}),(0,t.jsx)(u.PopoverContent,{className:"w-(--radix-popover-trigger-width) overflow-hidden p-0",align:"start",children:(0,t.jsxs)("div",{className:"flex transition-transform duration-200 ease-in-out",style:{transform:`translateX(${1===A?"-50%":"0%"})`,width:"200%"},children:[(0,t.jsxs)("div",{className:"w-1/2 shrink-0",children:[(0,t.jsx)("div",{className:"text-muted-foreground border-b px-3 py-2 text-xs font-medium",children:"Select agent"}),j.map(e=>{let r=(0,l.getAgentTypeIcon)(e.agentType),s=N===e.agentType,n=e.models.length>0;return(0,t.jsxs)("button",{type:"button",className:(0,p.cn)("flex w-full cursor-pointer items-center gap-2.5 px-3 py-2 text-xs transition-colors","hover:bg-accent hover:text-accent-foreground",s&&"bg-accent/50"),onClick:()=>{n?(M(e.agentType),requestAnimationFrame(()=>{requestAnimationFrame(()=>F(1))})):O(e.agentType,"")},children:[(0,t.jsx)(r,{className:"h-4 w-4 shrink-0"}),(0,t.jsx)("span",{className:"flex-1 text-left",children:e.label}),s&&!n?(0,t.jsx)(a.Check,{className:"text-primary h-3.5 w-3.5 shrink-0"}):null,n?(0,t.jsx)(o.ChevronRight,{className:"text-muted-foreground h-3.5 w-3.5 shrink-0"}):null]},e.agentType)})]}),(0,t.jsx)("div",{className:"w-1/2 shrink-0",children:I?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("button",{type:"button",className:"text-muted-foreground hover:text-foreground flex w-full cursor-pointer items-center gap-1.5 border-b px-3 py-2 text-xs font-medium transition-colors",onClick:()=>{F(0),setTimeout(()=>M(null),220)},children:[(0,t.jsx)(s.ChevronLeft,{className:"h-3.5 w-3.5"}),I.label]}),I.models.map(e=>{let r=N===I.agentType&&P===e.id;return(0,t.jsxs)("button",{type:"button",className:(0,p.cn)("flex w-full cursor-pointer items-center gap-3 px-3 py-2 text-left transition-colors","hover:bg-accent hover:text-accent-foreground",r&&"bg-accent/50"),onClick:()=>O(I.agentType,e.id),children:[(0,t.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col",children:[(0,t.jsx)("span",{className:"text-xs font-medium",children:e.displayName}),(0,t.jsx)("span",{className:"text-muted-foreground text-xs",children:e.description})]}),r?(0,t.jsx)(a.Check,{className:"text-primary h-3.5 w-3.5 shrink-0"}):null]},e.id)})]}):null})]})})]}),!!T&&(0,t.jsx)("p",{className:"text-destructive text-sm",children:T})]})}e.s(["AgentModelPicker",()=>h])},15203,e=>{"use strict";var t=e.i(20314),r=e.i(79054),a=e.i(31406),s=e.i(60112),o=e.i(21023);let n=(0,o.createServerReference)("40bb411970135d3c07df830ad45b7d14d6af5d4ba8",o.callServer,void 0,o.findSourceMapURL,"createFeature");var i=e.i(91891),i=i,l=e.i(3645);let d=(0,l.default)("file",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}]]);var c=e.i(16298),c=c;let u=(0,l.default)("image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]);var p=e.i(93752),p=p,h=e.i(69512),h=h;let f=(0,l.default)("chevrons-up-down",[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]]);var m=e.i(1012),m=m,x=e.i(31777),g=e.i(8361);e.i(1650);var v=e.i(11495),b=e.i(45811),j=e.i(35364),w=e.i(98127);function y({className:e,...r}){return(0,t.jsx)("textarea",{"data-slot":"textarea",className:(0,x.cn)("placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input field-sizing-content min-h-[80px] w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",e),...r})}var C=e.i(41957),N=e.i(81846),k=e.i(90382),P=e.i(51911),S=e.i(2828),T=e.i(30153),R=e.i(41413);async function A(){let e=await fetch("/api/dialog/pick-files",{method:"POST"});if(!e.ok)throw Error("Failed to open file dialog");let t=await e.json();return t.cancelled?null:t.files}let F=[{id:"allowPrd",label:"PRD",description:"Auto-approve requirements move to planning."},{id:"allowPlan",label:"Plan",description:"Auto-approve planning move to implementation."},{id:"allowMerge",label:"Merge",description:"Auto-approve merge move to Done."}],E={allowPrd:!1,allowPlan:!1,allowMerge:!1};function M({open:e,onClose:a,onSubmit:s,repositoryPath:o,isSubmitting:n=!1,workflowDefaults:l,features:d,initialParentId:c,currentAgentType:u,currentModel:p}){let h=(0,g.useSoundAction)("create"),f=l?.approvalGates??E,m=l?.push??!1,w=l?.openPr??!1,[k,M]=(0,r.useState)(""),[z,L]=(0,r.useState)([]),[I,B]=(0,r.useState)({...f}),[U,H]=(0,r.useState)(m),[$,G]=(0,r.useState)(w),[_,q]=(0,r.useState)(void 0),[K,V]=(0,r.useState)(!1),[W,X]=(0,r.useState)(void 0),[Y,Z]=(0,r.useState)(void 0);(0,r.useEffect)(()=>{l&&(B({...l.approvalGates}),H(l.push),G(l.openPr))},[l]),(0,r.useEffect)(()=>{e&&c&&q(c)},[e,c]);let J=(0,r.useCallback)(()=>{M(""),L([]),B({...f}),H(m),G(w),q(void 0),V(!1),X(void 0),Z(void 0)},[f,m,w]),Q=""!==k.trim()||z.length>0,{attemptClose:ee}=(0,T.useGuardedDrawerClose)({open:e,isDirty:Q,onClose:a,onReset:J}),et=(0,r.useCallback)(e=>{e.preventDefault(),k.trim()&&(h.play(),s({description:k.trim(),attachments:z,repositoryPath:o,approvalGates:{allowPrd:I.allowPrd??!1,allowPlan:I.allowPlan??!1,allowMerge:I.allowMerge??!1},push:U||$,openPr:$,fast:K,...W?{agentType:W}:{},...Y?{model:Y}:{},..._?{parentId:_}:{}}),J())},[k,z,I,o,s,U,$,K,W,Y,_,h,J]),er=(0,r.useCallback)(async()=>{try{let e=await A();e&&L(t=>[...t,...e])}catch{}},[]),ea=(0,r.useCallback)(e=>{L(t=>t.filter(t=>t.path!==e))},[]),es=d&&d.length>0;return(0,t.jsx)(v.BaseDrawer,{open:e,onClose:ee,size:"md",modal:!1,dismissOnOutsideClick:!0,"data-testid":"feature-create-drawer",header:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("div",{className:"h-2.5 w-2.5 shrink-0 rounded-full bg-blue-500"}),(0,t.jsx)(b.DrawerTitle,{children:"NEW FEATURE"})]}),n?(0,t.jsx)(b.DrawerDescription,{asChild:!0,children:(0,t.jsx)("div",{children:(0,t.jsx)(N.Badge,{variant:"secondary",children:"Creating..."})})}):null]}),footer:(0,t.jsxs)("div",{className:"flex flex-row justify-end gap-2",children:[(0,t.jsx)(j.Button,{variant:"outline",onClick:ee,disabled:n,children:"Cancel"}),(0,t.jsx)(j.Button,{type:"submit",form:"create-feature-form",disabled:!k.trim()||n,children:n?"Creating...":"+ Create Feature"})]}),children:(0,t.jsx)("div",{className:"overflow-y-auto p-4",children:(0,t.jsx)(S.TooltipProvider,{delayDuration:400,children:(0,t.jsxs)("form",{id:"create-feature-form",onSubmit:et,className:"flex flex-col gap-4",children:[(0,t.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,t.jsx)(C.Label,{htmlFor:"feature-description",className:"text-muted-foreground text-xs font-semibold tracking-wider",children:"DESCRIBE YOUR FEATURE"}),(0,t.jsxs)("div",{className:"border-input focus-within:ring-ring/50 focus-within:border-ring overflow-hidden rounded-md border shadow-xs transition-[color,box-shadow] focus-within:ring-[3px]",children:[(0,t.jsx)(y,{id:"feature-description",placeholder:"e.g. Add GitHub OAuth login with callback handling and token refresh...",value:k,onChange:e=>M(e.target.value),rows:7,required:!0,disabled:n,className:"field-sizing-fixed min-h-42! resize-none rounded-none border-0 shadow-none focus-visible:ring-0"}),(0,t.jsxs)("div",{className:"border-input flex items-center gap-3 border-t px-3 py-1.5",children:[(0,t.jsx)(R.AgentModelPicker,{initialAgentType:W??u??"claude-code",initialModel:Y??p??"claude-sonnet-4-6",mode:"override",onAgentModelChange:(e,t)=>{X(e),Z(t)},disabled:n,className:"w-55"}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"ml-auto flex cursor-pointer items-center gap-2",children:[(0,t.jsx)(P.Switch,{id:"fast-mode",checked:K,onCheckedChange:V,disabled:n}),(0,t.jsx)(C.Label,{htmlFor:"fast-mode",className:"cursor-pointer text-sm font-medium",children:"Fast Mode"})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:"Skip SDLC phases and implement directly from your prompt."})]})]})]})]}),es&&void 0!==c?(0,t.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,t.jsx)(C.Label,{htmlFor:"parent-feature",className:"text-muted-foreground text-xs font-semibold tracking-wider",children:"PARENT FEATURE"}),(0,t.jsx)(O,{features:d,value:_,onChange:q,disabled:n})]}):null,(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsxs)("div",{className:"border-input flex items-center gap-4 rounded-md border px-3 py-2.5",children:[(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("span",{className:"text-muted-foreground w-16 shrink-0 cursor-default text-xs font-semibold tracking-wider",children:"APPROVE"})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:"Auto-approve phase transitions without manual review."})]}),(0,t.jsx)("div",{className:"flex flex-1 items-center gap-4",children:F.map(e=>(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(P.Switch,{id:`approve-${e.id}`,size:"sm",checked:I[e.id]??!1,onCheckedChange:t=>B(r=>({...r,[e.id]:t})),disabled:n||K&&("allowPrd"===e.id||"allowPlan"===e.id)}),(0,t.jsx)(C.Label,{htmlFor:`approve-${e.id}`,className:"cursor-pointer text-xs font-medium",children:e.label})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:K&&("allowPrd"===e.id||"allowPlan"===e.id)?"Skipped in Fast Mode":e.description})]},e.id))}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button",onClick:()=>{let e=F.every(e=>I[e.id]),t={};for(let r of F)t[r.id]=!e;B(t)},disabled:n,className:(0,x.cn)("text-muted-foreground hover:text-foreground cursor-pointer rounded px-1.5 py-0.5 text-[10px] font-semibold tracking-wider uppercase transition-colors",F.every(e=>I[e.id])&&"text-primary"),children:"All"})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:"Toggle all approval gates"})]})]}),(0,t.jsxs)("div",{className:"border-input flex items-center gap-4 rounded-md border px-3 py-2.5",children:[(0,t.jsx)("span",{className:"text-muted-foreground w-16 shrink-0 text-xs font-semibold tracking-wider",children:"GIT"}),(0,t.jsxs)("div",{className:"flex flex-1 items-center gap-4",children:[(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(P.Switch,{id:"push",size:"sm",checked:U||$,onCheckedChange:e=>{H(e),!e&&$&&G(!1)},disabled:n}),(0,t.jsx)(C.Label,{htmlFor:"push",className:"cursor-pointer text-xs font-medium",children:"Push"})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:"Push branch to remote after implementation."})]}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(P.Switch,{id:"open-pr",size:"sm",checked:$,onCheckedChange:G,disabled:n}),(0,t.jsx)(C.Label,{htmlFor:"open-pr",className:"cursor-pointer text-xs font-medium",children:"PR"})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:"Open a pull request after pushing."})]})]})]})]}),(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)(C.Label,{className:"text-muted-foreground text-xs font-semibold tracking-wider",children:["ATTACHMENTS",z.length>0&&(0,t.jsxs)("span",{className:"text-muted-foreground/60 ml-1.5",children:["(",z.length,")"]})]}),(0,t.jsxs)(j.Button,{type:"button",variant:"outline",size:"xs",onClick:er,disabled:n,children:[(0,t.jsx)(i.default,{className:"size-3"}),"Add Files"]})]}),z.length>0&&(0,t.jsx)("div",{className:"flex flex-col gap-2",children:z.map(e=>(0,t.jsx)(D,{file:e,onRemove:()=>ea(e.path),disabled:n},e.path))})]})]})})})})}function O({features:e,value:a,onChange:s,disabled:o}){let[n,i]=(0,r.useState)(!1),[l,d]=(0,r.useState)(""),c=(0,r.useRef)(null),u=e.find(e=>e.id===a),p=l.trim()?e.filter(e=>e.name.toLowerCase().includes(l.toLowerCase())||e.id.toLowerCase().includes(l.toLowerCase())):e,h=(0,r.useCallback)(e=>{s(e),i(!1),d("")},[s]);return(0,r.useEffect)(()=>{n?setTimeout(()=>c.current?.focus(),0):d("")},[n]),(0,t.jsxs)(k.Popover,{open:n,onOpenChange:i,children:[(0,t.jsx)(k.PopoverTrigger,{asChild:!0,children:(0,t.jsxs)("button",{id:"parent-feature",type:"button",role:"combobox","aria-expanded":n,"aria-label":"Parent Feature",disabled:o,"data-testid":"parent-feature-combobox",className:(0,x.cn)("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",!u&&"text-muted-foreground"),children:[(0,t.jsx)("span",{className:"truncate",children:u?`${u.name} (${u.id.slice(0,8)})`:"Select parent feature..."}),(0,t.jsx)(f,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),(0,t.jsx)(k.PopoverContent,{className:"w-80 p-0",align:"start","data-testid":"parent-feature-combobox-content",children:(0,t.jsxs)("div",{className:"flex flex-col",children:[(0,t.jsx)("div",{className:"border-b p-2",children:(0,t.jsx)(w.Input,{ref:c,placeholder:"Search features...",value:l,onChange:e=>d(e.target.value),className:"h-8 border-0 p-0 text-sm shadow-none focus-visible:ring-0","data-testid":"parent-feature-search"})}),(0,t.jsxs)("div",{className:"max-h-48 overflow-y-auto py-1",role:"listbox","aria-label":"Features",children:[(0,t.jsxs)("button",{type:"button",role:"option","aria-selected":void 0===a,onClick:()=>h(void 0),className:(0,x.cn)("hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm",void 0===a&&"bg-accent/50"),"data-testid":"parent-feature-option-none",children:[(0,t.jsx)(m.default,{className:(0,x.cn)("h-4 w-4 shrink-0",void 0!==a&&"invisible")}),(0,t.jsx)("span",{className:"text-muted-foreground italic",children:"No parent"})]}),0===p.length&&l?(0,t.jsx)("p",{className:"text-muted-foreground px-3 py-2 text-sm",children:"No features found."}):p.map(e=>(0,t.jsxs)("button",{type:"button",role:"option","aria-selected":a===e.id,onClick:()=>h(e.id),className:(0,x.cn)("hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm",a===e.id&&"bg-accent/50"),"data-testid":`parent-feature-option-${e.id}`,children:[(0,t.jsx)(m.default,{className:(0,x.cn)("h-4 w-4 shrink-0",a!==e.id&&"invisible")}),(0,t.jsxs)("span",{className:"truncate",children:[e.name," ",(0,t.jsxs)("span",{className:"text-muted-foreground font-mono text-xs",children:["(",e.id.slice(0,8),")"]})]})]},e.id))]})]})})]})}function D({file:e,onRemove:r,disabled:a}){var s,o,n;let i,l=(i=(s=e.name).lastIndexOf("."))>=0?s.slice(i).toLowerCase():"",f=(o=l,z.has(o)?u:".pdf"===o?c.default:L.has(o)?p.default:d),m=".pdf"===(n=l)?"bg-red-50 text-red-600":z.has(n)?"bg-blue-50 text-blue-600":L.has(n)?"bg-emerald-50 text-emerald-600":"bg-gray-50 text-gray-600";return(0,t.jsxs)("div",{className:"flex items-center gap-3 rounded-md border p-2",children:[(0,t.jsx)("div",{className:(0,x.cn)("flex h-8 w-8 shrink-0 items-center justify-center rounded",m),children:(0,t.jsx)(f,{className:"h-4 w-4"})}),(0,t.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col",children:[(0,t.jsx)("span",{className:"truncate text-sm font-medium",children:e.name}),(0,t.jsx)("span",{className:"text-muted-foreground truncate text-xs",children:e.path}),(0,t.jsx)("span",{className:"text-muted-foreground text-xs",children:function(e){if(0===e)return"0 B";let t=Math.floor(Math.log(e)/Math.log(1024));return`${(e/Math.pow(1024,t)).toFixed(+(0!==t))} ${["B","KB","MB","GB"][t]}`}(e.size)})]}),(0,t.jsx)(j.Button,{type:"button",variant:"ghost",size:"icon-xs",onClick:r,disabled:a,"aria-label":`Remove ${e.name}`,children:(0,t.jsx)(h.default,{className:"h-3 w-3"})})]})}let z=new Set([".png",".jpg",".jpeg",".gif",".svg",".webp",".ico",".bmp"]),L=new Set([".ts",".tsx",".js",".jsx",".json",".yaml",".yml",".xml",".html",".css",".md"]);function I({repositoryPath:e,initialParentId:o,features:i,workflowDefaults:l,currentAgentType:d,currentModel:c}){let u=(0,a.useRouter)(),[p,h]=(0,r.useState)(!1),f=(0,a.usePathname)().startsWith("/create"),m=!p&&f;(0,r.useEffect)(()=>{!f&&p&&h(!1)},[f,p]);let x=(0,r.useCallback)(()=>{u.push("/")},[u]),g=(0,r.useCallback)(e=>{h(!0),u.push("/"),n(e).then(t=>{t.error?s.toast.error(t.error):window.dispatchEvent(new CustomEvent("shep:feature-created",{detail:{featureId:t.feature.id,name:t.feature.name,description:t.feature.description,repositoryPath:t.feature.repositoryPath,parentId:e.parentId}}))}).catch(()=>{s.toast.error("Failed to create feature"),h(!1)})},[u]);return(0,t.jsx)(M,{open:m,onClose:x,onSubmit:g,repositoryPath:e,features:i,workflowDefaults:l,initialParentId:o,isSubmitting:p,currentAgentType:d,currentModel:c})}e.s(["CreateDrawerClient",()=>I],15203)}]);
@@ -1,9 +0,0 @@
1
- import type { FeatureNodeData } from '../../common/feature-node/index.js';
2
- export interface FeatureDrawerProps {
3
- selectedNode: FeatureNodeData | null;
4
- onClose: () => void;
5
- onDelete?: (featureId: string) => void;
6
- isDeleting?: boolean;
7
- }
8
- export declare function FeatureDrawer({ selectedNode, onClose, onDelete, isDeleting, }: FeatureDrawerProps): import("react/jsx-runtime").JSX.Element;
9
- //# sourceMappingURL=feature-drawer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"feature-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer/feature-drawer.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAGxE,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,eAAe,GAAG,IAAI,CAAC;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,aAAa,CAAC,EAC5B,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,UAAkB,GACnB,EAAE,kBAAkB,2CAwJpB"}
@@ -1,60 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { useCallback } from 'react';
4
- import { Loader2, Trash2, ExternalLink, GitCommitHorizontal } from 'lucide-react';
5
- import { PrStatus } from '../../../../../../packages/core/src/domain/generated/output.js';
6
- import { cn } from '../../../lib/utils.js';
7
- import { OpenActionMenu } from '../../common/open-action-menu/index.js';
8
- import { BaseDrawer } from '../../common/base-drawer/index.js';
9
- import { DrawerTitle, DrawerDescription } from '../../ui/drawer.js';
10
- import { Button } from '../../ui/button.js';
11
- import { Badge } from '../../ui/badge.js';
12
- import { Separator } from '../../ui/separator.js';
13
- import { CometSpinner } from '../../ui/comet-spinner.js';
14
- import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from '../../ui/alert-dialog.js';
15
- import { CiStatusBadge } from '../../common/ci-status-badge/index.js';
16
- import { featureNodeStateConfig, lifecycleDisplayLabels } from '../../common/feature-node/index.js';
17
- import { useFeatureActions } from './use-feature-actions.js';
18
- export function FeatureDrawer({ selectedNode, onClose, onDelete, isDeleting = false, }) {
19
- const handleClose = useCallback(() => {
20
- onClose();
21
- }, [onClose]);
22
- const actionsInput = selectedNode?.repositoryPath && selectedNode?.branch
23
- ? {
24
- repositoryPath: selectedNode.repositoryPath,
25
- branch: selectedNode.branch,
26
- specPath: selectedNode.specPath,
27
- }
28
- : null;
29
- const actions = useFeatureActions(actionsInput);
30
- return (_jsx(BaseDrawer, { open: selectedNode !== null, onClose: handleClose, size: "md", modal: false, "data-testid": "feature-drawer", header: selectedNode ? (_jsxs(_Fragment, { children: [_jsxs("div", { "data-testid": "feature-drawer-header", children: [_jsx(DrawerTitle, { children: selectedNode.name }), selectedNode.description ? (_jsx(DrawerDescription, { children: selectedNode.description })) : selectedNode.featureId ? (_jsx(DrawerDescription, { className: "sr-only", children: selectedNode.featureId })) : null] }), actionsInput ? (_jsxs("div", { className: "flex items-center gap-2 pt-2", children: [_jsx(OpenActionMenu, { actions: actions, repositoryPath: actionsInput.repositoryPath, showSpecs: !!actionsInput.specPath }), onDelete && selectedNode.featureId ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "bg-border mx-1 h-4 w-px" }), _jsxs(AlertDialog, { children: [_jsx(AlertDialogTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon-sm", "aria-label": "Delete feature", disabled: isDeleting, className: "text-muted-foreground hover:text-destructive", "data-testid": "feature-drawer-delete", children: isDeleting ? (_jsx(Loader2, { className: "size-4 animate-spin" })) : (_jsx(Trash2, { className: "size-4" })) }) }), _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Delete feature?" }), _jsxs(AlertDialogDescription, { children: ["This will permanently delete ", _jsx("strong", { children: selectedNode.name }), " (", selectedNode.featureId, "). This action cannot be undone.", selectedNode.state === 'running' ? (_jsx(_Fragment, { children: " This feature has a running agent that will be stopped." })) : null] })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { disabled: isDeleting, children: "Cancel" }), _jsx(AlertDialogAction, { variant: "destructive", disabled: isDeleting, onClick: () => onDelete(selectedNode.featureId), children: isDeleting ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), "Deleting\u2026"] })) : ('Delete') })] })] })] })] })) : null] })) : null] })) : undefined, deployTarget: selectedNode?.repositoryPath && selectedNode.branch
31
- ? {
32
- targetId: selectedNode.featureId,
33
- targetType: 'feature',
34
- repositoryPath: selectedNode.repositoryPath,
35
- branch: selectedNode.branch,
36
- }
37
- : undefined, children: selectedNode ? (_jsxs("div", { className: "flex-1 overflow-y-auto", children: [_jsxs("div", { "data-testid": "feature-drawer-status", className: "flex flex-col gap-3 p-4", children: [_jsx("div", { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: lifecycleDisplayLabels[selectedNode.lifecycle] }), _jsx(StateBadge, { data: selectedNode }), selectedNode.progress > 0 ? (_jsxs("div", { "data-testid": "feature-drawer-progress", className: "flex flex-col gap-1", children: [_jsxs("div", { className: "text-muted-foreground flex items-center justify-between text-xs", children: [_jsx("span", { children: "Progress" }), _jsxs("span", { children: [selectedNode.progress, "%"] })] }), _jsx("div", { className: "bg-muted h-2 w-full overflow-hidden rounded-full", children: _jsx("div", { className: cn('h-full rounded-full transition-all', featureNodeStateConfig[selectedNode.state].progressClass), style: { width: `${selectedNode.progress}%` } }) })] })) : null] }), selectedNode.pr ? (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsx(PrInfoSection, { pr: selectedNode.pr })] })) : null, _jsx(DetailsSection, { data: selectedNode })] })) : null }));
38
- }
39
- function StateBadge({ data }) {
40
- const config = featureNodeStateConfig[data.state];
41
- const Icon = config.icon;
42
- return (_jsxs("div", { className: cn('flex items-center gap-2 rounded-full px-3 py-1.5 text-sm font-medium', config.badgeBgClass, config.badgeClass), children: [data.state === 'running' ? (_jsx(CometSpinner, { size: "sm", className: "shrink-0" })) : (_jsx(Icon, { className: "h-4 w-4 shrink-0" })), _jsx("span", { children: config.label })] }));
43
- }
44
- function DetailsSection({ data }) {
45
- const hasAnyDetail = data.agentType ?? data.runtime ?? data.blockedBy ?? data.errorMessage;
46
- if (!hasAnyDetail)
47
- return null;
48
- return (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsxs("div", { "data-testid": "feature-drawer-details", className: "flex flex-col gap-3 p-4", children: [data.agentType ? _jsx(DetailRow, { label: "Agent", value: data.agentType }) : null, data.runtime ? _jsx(DetailRow, { label: "Runtime", value: data.runtime }) : null, data.blockedBy ? _jsx(DetailRow, { label: "Blocked by", value: data.blockedBy }) : null, data.errorMessage ? _jsx(DetailRow, { label: "Error", value: data.errorMessage }) : null] })] }));
49
- }
50
- function DetailRow({ label, value }) {
51
- return (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: label }), _jsx("span", { className: "text-sm", children: value })] }));
52
- }
53
- const prStatusStyles = {
54
- [PrStatus.Open]: 'border-transparent bg-blue-50 text-blue-700 hover:bg-blue-50',
55
- [PrStatus.Merged]: 'border-transparent bg-purple-50 text-purple-700 hover:bg-purple-50',
56
- [PrStatus.Closed]: 'border-transparent bg-red-50 text-red-700 hover:bg-red-50',
57
- };
58
- function PrInfoSection({ pr }) {
59
- return (_jsx("div", { "data-testid": "feature-drawer-pr", className: "border-border mx-4 rounded-lg border", children: _jsxs("div", { className: "space-y-3 px-4 py-3", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("a", { href: pr.url, target: "_blank", rel: "noopener noreferrer", className: "text-primary flex items-center gap-1.5 text-sm font-semibold underline underline-offset-2", children: ["PR #", pr.number, _jsx(ExternalLink, { className: "h-3.5 w-3.5" })] }), _jsx(Badge, { className: prStatusStyles[pr.status], children: pr.status })] }), pr.ciStatus ? (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "CI Status" }), _jsx(CiStatusBadge, { status: pr.ciStatus })] })) : null, pr.commitHash ? (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Commit" }), _jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(GitCommitHorizontal, { className: "text-muted-foreground h-3.5 w-3.5" }), _jsx("code", { className: "bg-muted text-foreground rounded-md px-1.5 py-0.5 font-mono text-[11px]", children: pr.commitHash.slice(0, 7) })] })] })) : null] }) }));
60
- }
@@ -1,47 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
- import { FeatureDrawer } from './feature-drawer.js';
3
- declare const meta: Meta<typeof FeatureDrawer>;
4
- export default meta;
5
- type Story = StoryObj<typeof FeatureDrawer>;
6
- /** Feature drawer rendered inside a full-page context — starts open. Primary story. */
7
- export declare const Default: Story;
8
- export declare const Running: Story;
9
- export declare const ActionRequired: Story;
10
- export declare const Done: Story;
11
- export declare const Blocked: Story;
12
- /** Review lifecycle + running state — matches the look/feel of review pending-action drawers. */
13
- export declare const ReviewInProgress: Story;
14
- export declare const Error: Story;
15
- /** Minimal data — only required fields, no optional details section. */
16
- export declare const MinimalData: Story;
17
- /** All optional fields populated — description, agent, runtime, blockedBy, error. */
18
- export declare const AllFields: Story;
19
- /** Cycle through all 5 states at a glance via buttons. */
20
- export declare const AllStates: Story;
21
- /** Cycle through all 6 lifecycle phases via buttons. */
22
- export declare const AllLifecycles: Story;
23
- /** No repositoryPath — action buttons are hidden. */
24
- export declare const NoRepositoryPath: Story;
25
- /**
26
- * Action buttons visible — click "Open in IDE" or "Open in Shell" to see
27
- * loading spinner (while API call is in flight) followed by error state
28
- * (API routes are not available in Storybook).
29
- */
30
- export declare const WithActionButtons: Story;
31
- /** FeatureDrawer with a delete icon button in the header. */
32
- export declare const WithDeleteButton: Story;
33
- /** FeatureDrawer showing the delete button in loading/disabled state. */
34
- export declare const DeletingState: Story;
35
- /** FeatureDrawer with a running agent showing the running-agent warning in the AlertDialog. */
36
- export declare const DeleteRunningAgent: Story;
37
- /** Done feature with full PR card — number, status, CI, commit hash. */
38
- export declare const DoneWithPr: Story;
39
- /** Done feature with partial PR data — no CI status, no commit hash. */
40
- export declare const DoneWithPartialPr: Story;
41
- /** PR with Open status — blue badge. */
42
- export declare const PrStatusOpen: Story;
43
- /** PR with Merged status — purple badge. */
44
- export declare const PrStatusMerged: Story;
45
- /** Feature drawer rendered inside a full-page context — starts open. */
46
- export declare const InDrawer: Story;
47
- //# sourceMappingURL=feature-drawer.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"feature-drawer.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer/feature-drawer.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKjD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,aAAa,CAOpC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,aAAa,CAAC,CAAC;AAiH5C,uFAAuF;AACvF,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAE5B,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,KAElB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,iGAAiG;AACjG,eAAO,MAAM,gBAAgB,EAAE,KAE9B,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAEnB,CAAC;AAMF,wEAAwE;AACxE,eAAO,MAAM,WAAW,EAAE,KAEzB,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,SAAS,EAAE,KAqBvB,CAAC;AAmEF,0DAA0D;AAC1D,eAAO,MAAM,SAAS,EAAE,KAEvB,CAAC;AA6CF,wDAAwD;AACxD,eAAO,MAAM,aAAa,EAAE,KAE3B,CAAC;AAMF,qDAAqD;AACrD,eAAO,MAAM,gBAAgB,EAAE,KAO9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAE/B,CAAC;AAoCF,6DAA6D;AAC7D,eAAO,MAAM,gBAAgB,EAAE,KAE9B,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,aAAa,EAAE,KAE3B,CAAC;AAEF,+FAA+F;AAC/F,eAAO,MAAM,kBAAkB,EAAE,KAEhC,CAAC;AA0BF,wEAAwE;AACxE,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,iBAAiB,EAAE,KAE/B,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,YAAY,EAAE,KAU1B,CAAC;AAEF,4CAA4C;AAC5C,eAAO,MAAM,cAAc,EAAE,KAE5B,CAAC;AAuBF,wEAAwE;AACxE,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC"}
@@ -1,307 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState } from 'react';
3
- import { PrStatus, CiStatus } from '../../../../../../packages/core/src/domain/generated/output.js';
4
- import { FeatureDrawer } from './feature-drawer.js';
5
- import { Button } from '../../ui/button.js';
6
- const meta = {
7
- title: 'Drawers/Feature/FeatureDrawer',
8
- component: FeatureDrawer,
9
- tags: ['autodocs'],
10
- parameters: {
11
- layout: 'fullscreen',
12
- },
13
- };
14
- export default meta;
15
- /* ---------------------------------------------------------------------------
16
- * Data fixtures
17
- * ------------------------------------------------------------------------- */
18
- const baseData = {
19
- name: 'Auth Module',
20
- featureId: '#f1',
21
- lifecycle: 'implementation',
22
- state: 'running',
23
- progress: 45,
24
- repositoryPath: '/home/user/my-repo',
25
- branch: 'feat/auth-module',
26
- };
27
- const runningData = {
28
- name: 'Auth Module',
29
- description: 'Implement OAuth2 authentication flow',
30
- featureId: '#f1',
31
- lifecycle: 'implementation',
32
- state: 'running',
33
- progress: 45,
34
- agentType: 'claude-code',
35
- repositoryPath: '/home/user/my-repo',
36
- branch: 'feat/auth-module',
37
- };
38
- const actionRequiredData = {
39
- name: 'API Rate Limiting',
40
- description: 'Implement sliding window rate limiting for public endpoints',
41
- featureId: '#bi1',
42
- lifecycle: 'requirements',
43
- state: 'action-required',
44
- progress: 22,
45
- repositoryPath: '/home/user/my-repo',
46
- branch: 'feat/api-rate-limiting',
47
- };
48
- const doneData = {
49
- name: 'Payment Gateway',
50
- description: 'Stripe integration for subscriptions',
51
- featureId: '#f3',
52
- lifecycle: 'deploy',
53
- state: 'done',
54
- progress: 100,
55
- runtime: '1h 42m',
56
- repositoryPath: '/home/user/my-repo',
57
- branch: 'feat/payment-gateway',
58
- };
59
- const blockedData = {
60
- name: 'Search Index',
61
- description: 'Elasticsearch full-text search setup',
62
- featureId: '#f4',
63
- lifecycle: 'implementation',
64
- state: 'blocked',
65
- progress: 20,
66
- blockedBy: 'Auth Module',
67
- repositoryPath: '/home/user/my-repo',
68
- branch: 'feat/search-index',
69
- };
70
- const errorData = {
71
- name: 'Email Service',
72
- description: 'Transactional email with SendGrid',
73
- featureId: '#f5',
74
- lifecycle: 'review',
75
- state: 'error',
76
- progress: 30,
77
- errorMessage: 'Build failed: type mismatch',
78
- repositoryPath: '/home/user/my-repo',
79
- branch: 'feat/email-service',
80
- };
81
- const reviewInProgressData = {
82
- name: 'Auth Module',
83
- description: 'Implement OAuth2 authentication flow',
84
- featureId: '#f6',
85
- lifecycle: 'review',
86
- state: 'running',
87
- progress: 0,
88
- agentType: 'claude-code',
89
- repositoryPath: '/home/user/my-repo',
90
- branch: 'feat/auth-module',
91
- pr: {
92
- url: 'https://github.com/org/repo/pull/17',
93
- number: 17,
94
- status: PrStatus.Open,
95
- },
96
- };
97
- /* ---------------------------------------------------------------------------
98
- * Trigger wrapper — starts closed, click to open
99
- * ------------------------------------------------------------------------- */
100
- function DrawerTrigger({ data, label }) {
101
- const [selected, setSelected] = useState(null);
102
- return (_jsxs("div", { className: "flex h-screen items-start p-4", children: [_jsx(Button, { variant: "outline", onClick: () => setSelected(data), children: label }), _jsx(FeatureDrawer, { selectedNode: selected, onClose: () => setSelected(null) })] }));
103
- }
104
- /* ---------------------------------------------------------------------------
105
- * Per-state stories
106
- * ------------------------------------------------------------------------- */
107
- /** Feature drawer rendered inside a full-page context — starts open. Primary story. */
108
- export const Default = {
109
- render: () => _jsx(FeatureDrawerShellTemplate, { data: runningData }),
110
- };
111
- export const Running = {
112
- render: () => _jsx(DrawerTrigger, { data: runningData, label: "Open Running" }),
113
- };
114
- export const ActionRequired = {
115
- render: () => _jsx(DrawerTrigger, { data: actionRequiredData, label: "Open Action Required" }),
116
- };
117
- export const Done = {
118
- render: () => _jsx(DrawerTrigger, { data: doneData, label: "Open Done" }),
119
- };
120
- export const Blocked = {
121
- render: () => _jsx(DrawerTrigger, { data: blockedData, label: "Open Blocked" }),
122
- };
123
- /** Review lifecycle + running state — matches the look/feel of review pending-action drawers. */
124
- export const ReviewInProgress = {
125
- render: () => _jsx(DrawerTrigger, { data: reviewInProgressData, label: "Open Review In Progress" }),
126
- };
127
- export const Error = {
128
- render: () => _jsx(DrawerTrigger, { data: errorData, label: "Open Error" }),
129
- };
130
- /* ---------------------------------------------------------------------------
131
- * Edge-case stories
132
- * ------------------------------------------------------------------------- */
133
- /** Minimal data — only required fields, no optional details section. */
134
- export const MinimalData = {
135
- render: () => _jsx(DrawerTrigger, { data: { ...baseData, progress: 0 }, label: "Open Minimal" }),
136
- };
137
- /** All optional fields populated — description, agent, runtime, blockedBy, error. */
138
- export const AllFields = {
139
- render: () => (_jsx(DrawerTrigger, { data: {
140
- name: 'Enterprise Authentication Module',
141
- description: 'Implement a comprehensive OAuth2 authentication flow with support for multiple identity providers including Google, GitHub, and custom SAML-based enterprise SSO.',
142
- featureId: '#f99',
143
- lifecycle: 'implementation',
144
- state: 'running',
145
- progress: 68,
146
- agentType: 'cursor',
147
- runtime: '3h 15m',
148
- blockedBy: 'Database Migration',
149
- errorMessage: 'Token refresh failed: invalid_grant',
150
- repositoryPath: '/home/user/enterprise-app',
151
- branch: 'feat/enterprise-auth',
152
- }, label: "Open All Fields" })),
153
- };
154
- /* ---------------------------------------------------------------------------
155
- * Matrix stories — interactive state/lifecycle switcher
156
- * ------------------------------------------------------------------------- */
157
- const creatingData = {
158
- name: 'User Onboarding',
159
- description: 'Implement guided onboarding wizard',
160
- featureId: '',
161
- lifecycle: 'requirements',
162
- state: 'creating',
163
- progress: 0,
164
- repositoryPath: '/home/user/my-repo',
165
- branch: '',
166
- };
167
- const stateFixtures = {
168
- creating: creatingData,
169
- running: runningData,
170
- 'action-required': actionRequiredData,
171
- done: doneData,
172
- blocked: blockedData,
173
- error: errorData,
174
- };
175
- const allLifecycles = [
176
- 'requirements',
177
- 'research',
178
- 'implementation',
179
- 'review',
180
- 'deploy',
181
- 'maintain',
182
- ];
183
- function AllStatesRender() {
184
- const [state, setState] = useState('running');
185
- const [selected, setSelected] = useState(null);
186
- const _data = stateFixtures[state];
187
- return (_jsxs("div", { className: "flex h-screen", children: [_jsxs("div", { className: "flex flex-col gap-2 p-4", children: [_jsx("span", { className: "text-muted-foreground mb-2 text-xs font-semibold tracking-wider uppercase", children: "Select state" }), Object.keys(stateFixtures).map((s) => (_jsx("button", { type: "button", onClick: () => {
188
- setState(s);
189
- setSelected(stateFixtures[s]);
190
- }, className: `rounded-md px-3 py-1.5 text-left text-sm ${s === state ? 'bg-primary text-primary-foreground' : 'bg-muted hover:bg-muted/80'}`, children: s }, s)))] }), _jsx(FeatureDrawer, { selectedNode: selected, onClose: () => setSelected(null) })] }));
191
- }
192
- /** Cycle through all 5 states at a glance via buttons. */
193
- export const AllStates = {
194
- render: () => _jsx(AllStatesRender, {}),
195
- };
196
- function AllLifecyclesRender() {
197
- const [lifecycle, setLifecycle] = useState('requirements');
198
- const [selected, setSelected] = useState(null);
199
- return (_jsxs("div", { className: "flex h-screen", children: [_jsxs("div", { className: "flex flex-col gap-2 p-4", children: [_jsx("span", { className: "text-muted-foreground mb-2 text-xs font-semibold tracking-wider uppercase", children: "Select phase" }), allLifecycles.map((phase) => (_jsx("button", { type: "button", onClick: () => {
200
- setLifecycle(phase);
201
- setSelected({
202
- name: 'Feature Name',
203
- description: `Currently in ${phase} phase`,
204
- featureId: '#f1',
205
- lifecycle: phase,
206
- state: 'running',
207
- progress: 50,
208
- agentType: 'claude-code',
209
- repositoryPath: '/home/user/my-repo',
210
- branch: 'feat/feature-name',
211
- });
212
- }, className: `rounded-md px-3 py-1.5 text-left text-sm ${phase === lifecycle
213
- ? 'bg-primary text-primary-foreground'
214
- : 'bg-muted hover:bg-muted/80'}`, children: phase }, phase)))] }), _jsx(FeatureDrawer, { selectedNode: selected, onClose: () => setSelected(null) })] }));
215
- }
216
- /** Cycle through all 6 lifecycle phases via buttons. */
217
- export const AllLifecycles = {
218
- render: () => _jsx(AllLifecyclesRender, {}),
219
- };
220
- /* ---------------------------------------------------------------------------
221
- * Action button stories
222
- * ------------------------------------------------------------------------- */
223
- /** No repositoryPath — action buttons are hidden. */
224
- export const NoRepositoryPath = {
225
- render: () => (_jsx(DrawerTrigger, { data: { ...baseData, repositoryPath: '', branch: '' }, label: "Open Without Repo Path" })),
226
- };
227
- /**
228
- * Action buttons visible — click "Open in IDE" or "Open in Shell" to see
229
- * loading spinner (while API call is in flight) followed by error state
230
- * (API routes are not available in Storybook).
231
- */
232
- export const WithActionButtons = {
233
- render: () => _jsx(DrawerTrigger, { data: runningData, label: "Open With Actions" }),
234
- };
235
- /* ---------------------------------------------------------------------------
236
- * Delete stories
237
- * ------------------------------------------------------------------------- */
238
- function noop() {
239
- // intentional no-op for stories
240
- }
241
- function DrawerTriggerWithDelete({ data, label, isDeleting = false, }) {
242
- const [selected, setSelected] = useState(null);
243
- return (_jsxs("div", { className: "flex h-screen items-start p-4", children: [_jsx(Button, { variant: "outline", onClick: () => setSelected(data), children: label }), _jsx(FeatureDrawer, { selectedNode: selected, onClose: () => setSelected(null), onDelete: noop, isDeleting: isDeleting })] }));
244
- }
245
- /** FeatureDrawer with a delete icon button in the header. */
246
- export const WithDeleteButton = {
247
- render: () => _jsx(DrawerTriggerWithDelete, { data: doneData, label: "Open With Delete" }),
248
- };
249
- /** FeatureDrawer showing the delete button in loading/disabled state. */
250
- export const DeletingState = {
251
- render: () => _jsx(DrawerTriggerWithDelete, { data: doneData, label: "Open Deleting State", isDeleting: true }),
252
- };
253
- /** FeatureDrawer with a running agent showing the running-agent warning in the AlertDialog. */
254
- export const DeleteRunningAgent = {
255
- render: () => _jsx(DrawerTriggerWithDelete, { data: runningData, label: "Open Running Agent Delete" }),
256
- };
257
- /* ---------------------------------------------------------------------------
258
- * PR info stories
259
- * ------------------------------------------------------------------------- */
260
- const doneWithPrData = {
261
- ...doneData,
262
- pr: {
263
- url: 'https://github.com/org/repo/pull/42',
264
- number: 42,
265
- status: PrStatus.Merged,
266
- ciStatus: CiStatus.Success,
267
- commitHash: 'abc1234567890def',
268
- },
269
- };
270
- const doneWithPartialPrData = {
271
- ...doneData,
272
- pr: {
273
- url: 'https://github.com/org/repo/pull/99',
274
- number: 99,
275
- status: PrStatus.Merged,
276
- },
277
- };
278
- /** Done feature with full PR card — number, status, CI, commit hash. */
279
- export const DoneWithPr = {
280
- render: () => _jsx(DrawerTrigger, { data: doneWithPrData, label: "Open Done + PR" }),
281
- };
282
- /** Done feature with partial PR data — no CI status, no commit hash. */
283
- export const DoneWithPartialPr = {
284
- render: () => _jsx(DrawerTrigger, { data: doneWithPartialPrData, label: "Open Done + Partial PR" }),
285
- };
286
- /** PR with Open status — blue badge. */
287
- export const PrStatusOpen = {
288
- render: () => (_jsx(DrawerTrigger, { data: {
289
- ...doneWithPrData,
290
- pr: { ...doneWithPrData.pr, status: PrStatus.Open, ciStatus: CiStatus.Pending },
291
- }, label: "Open PR Status: Open" })),
292
- };
293
- /** PR with Merged status — purple badge. */
294
- export const PrStatusMerged = {
295
- render: () => _jsx(DrawerTrigger, { data: doneWithPrData, label: "Open PR Status: Merged" }),
296
- };
297
- /* ---------------------------------------------------------------------------
298
- * In-drawer story — full page context, starts open
299
- * ------------------------------------------------------------------------- */
300
- function FeatureDrawerShellTemplate({ data }) {
301
- const [selected, setSelected] = useState(data);
302
- return (_jsxs("div", { style: { height: '100vh', background: '#f8fafc', padding: '2rem' }, children: [_jsx("button", { type: "button", onClick: () => setSelected(data), style: { padding: '8px 16px', border: '1px solid #ccc', borderRadius: '6px' }, children: "Open Drawer" }), _jsx(FeatureDrawer, { selectedNode: selected, onClose: () => setSelected(null) })] }));
303
- }
304
- /** Feature drawer rendered inside a full-page context — starts open. */
305
- export const InDrawer = {
306
- render: () => _jsx(FeatureDrawerShellTemplate, { data: runningData }),
307
- };
@@ -1,3 +0,0 @@
1
- import type { MergeReviewDrawerProps } from './merge-review-config.js';
2
- export declare function MergeReviewDrawer({ open, onClose, featureName, featureId, repositoryPath, branch, specPath, onDelete, isDeleting, data, ...reviewProps }: MergeReviewDrawerProps): import("react/jsx-runtime").JSX.Element;
3
- //# sourceMappingURL=merge-review-drawer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-review-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/merge-review/merge-review-drawer.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,OAAO,EACP,WAAW,EACX,SAAS,EACT,cAAc,EACd,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,GAAG,WAAW,EACf,EAAE,sBAAsB,2CAsBxB"}
@@ -1,8 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { Loader2 } from 'lucide-react';
4
- import { ReviewDrawerShell } from '../../common/review-drawer-shell/index.js';
5
- import { MergeReview } from './merge-review.js';
6
- export function MergeReviewDrawer({ open, onClose, featureName, featureId, repositoryPath, branch, specPath, onDelete, isDeleting, data, ...reviewProps }) {
7
- return (_jsx(ReviewDrawerShell, { open: open, onClose: onClose, featureName: featureName, featureId: featureId, repositoryPath: repositoryPath, branch: branch, specPath: specPath, onDelete: onDelete, isDeleting: isDeleting, children: data ? (_jsx(MergeReview, { data: data, ...reviewProps })) : (_jsx("div", { className: "flex items-center justify-center p-8", children: _jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" }) })) }));
8
- }