@shepai/cli 1.66.3 → 1.67.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
  2. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +26 -11
  3. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
  4. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +16 -10
  5. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts.map +1 -1
  6. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +21 -1
  7. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.d.ts +15 -1
  8. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.d.ts.map +1 -1
  9. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.js +16 -2
  10. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.d.ts +12 -0
  11. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.d.ts.map +1 -0
  12. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.js +284 -0
  13. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.d.ts +33 -0
  14. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.d.ts.map +1 -0
  15. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.js +210 -0
  16. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +56 -0
  17. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -0
  18. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +32 -0
  19. package/dist/src/presentation/web/components/common/control-center-drawer/index.d.ts +3 -0
  20. package/dist/src/presentation/web/components/common/control-center-drawer/index.d.ts.map +1 -0
  21. package/dist/src/presentation/web/components/common/control-center-drawer/index.js +2 -0
  22. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar-config.d.ts +0 -4
  23. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar-config.d.ts.map +1 -1
  24. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.d.ts +1 -1
  25. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.d.ts.map +1 -1
  26. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.js +18 -12
  27. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.d.ts +4 -6
  28. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.d.ts.map +1 -1
  29. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.js +5 -13
  30. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  31. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +2 -13
  32. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +2 -10
  33. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
  34. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +21 -1
  35. package/dist/src/presentation/web/components/common/feature-create-drawer/index.d.ts +1 -1
  36. package/dist/src/presentation/web/components/common/feature-create-drawer/index.d.ts.map +1 -1
  37. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts.map +1 -1
  38. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.js +14 -20
  39. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts +7 -1
  40. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts.map +1 -1
  41. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.js +37 -2
  42. package/dist/src/presentation/web/components/common/index.d.ts +1 -0
  43. package/dist/src/presentation/web/components/common/index.d.ts.map +1 -1
  44. package/dist/src/presentation/web/components/common/index.js +1 -0
  45. package/dist/src/presentation/web/components/common/merge-review/merge-review.d.ts.map +1 -1
  46. package/dist/src/presentation/web/components/common/merge-review/merge-review.js +2 -2
  47. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts.map +1 -1
  48. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.js +1 -2
  49. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.js +1 -1
  50. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts.map +1 -1
  51. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.js +1 -2
  52. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.d.ts.map +1 -1
  53. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.js +5 -1
  54. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts +2 -0
  55. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts.map +1 -1
  56. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.js +13 -2
  57. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.d.ts.map +1 -1
  58. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.js +5 -2
  59. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.js +1 -1
  60. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.d.ts.map +1 -1
  61. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.js +1 -1
  62. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts.map +1 -1
  63. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.js +1 -2
  64. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  65. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +20 -215
  66. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  67. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +2 -1
  68. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  69. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +1 -1
  70. package/dist/tsconfig.build.tsbuildinfo +1 -1
  71. package/package.json +1 -1
  72. package/web/.next/BUILD_ID +1 -1
  73. package/web/.next/build-manifest.json +5 -5
  74. package/web/.next/cache/.previewinfo +1 -1
  75. package/web/.next/cache/.rscinfo +1 -1
  76. package/web/.next/cache/.tsbuildinfo +1 -1
  77. package/web/.next/cache/config.json +3 -3
  78. package/web/.next/fallback-build-manifest.json +2 -2
  79. package/web/.next/prerender-manifest.json +3 -3
  80. package/web/.next/required-server-files.js +1 -1
  81. package/web/.next/required-server-files.json +1 -1
  82. package/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
  83. package/web/.next/server/app/_global-error.html +2 -2
  84. package/web/.next/server/app/_global-error.rsc +1 -1
  85. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  86. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  87. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  88. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  89. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  90. package/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
  91. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  92. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  93. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  94. package/web/.next/server/app/page/build-manifest.json +3 -3
  95. package/web/.next/server/app/page/server-reference-manifest.json +88 -88
  96. package/web/.next/server/app/page.js +1 -1
  97. package/web/.next/server/app/page.js.nft.json +1 -1
  98. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  99. package/web/.next/server/app/skills/page/build-manifest.json +3 -3
  100. package/web/.next/server/app/skills/page/server-reference-manifest.json +5 -5
  101. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  102. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  103. package/web/.next/server/app/tools/page/build-manifest.json +3 -3
  104. package/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
  105. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  106. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  107. package/web/.next/server/app/version/page/build-manifest.json +3 -3
  108. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  109. package/web/.next/server/app/version/page.js.nft.json +1 -1
  110. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  111. package/web/.next/server/chunks/ssr/403f9_next_dist_a53cb908._.js +3 -0
  112. package/web/.next/server/chunks/ssr/403f9_next_dist_a53cb908._.js.map +1 -0
  113. package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
  114. package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js.map +1 -1
  115. package/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  116. package/web/.next/server/chunks/ssr/{[root-of-the-server]__f5830fa9._.js → [root-of-the-server]__2ffb27f1._.js} +2 -2
  117. package/web/.next/server/chunks/ssr/{[root-of-the-server]__f5830fa9._.js.map → [root-of-the-server]__2ffb27f1._.js.map} +1 -1
  118. package/web/.next/server/chunks/ssr/[root-of-the-server]__551fb7e1._.js +1 -1
  119. package/web/.next/server/chunks/ssr/[root-of-the-server]__551fb7e1._.js.map +1 -1
  120. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  121. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
  122. package/web/.next/server/chunks/ssr/[root-of-the-server]__7f4180a1._.js +3 -0
  123. package/web/.next/server/chunks/ssr/[root-of-the-server]__7f4180a1._.js.map +1 -0
  124. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  125. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
  126. package/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js +4 -4
  127. package/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js.map +1 -1
  128. package/web/.next/server/chunks/ssr/[root-of-the-server]__e41b5eec._.js +9 -0
  129. package/web/.next/server/chunks/ssr/{[root-of-the-server]__f648005b._.js.map → [root-of-the-server]__e41b5eec._.js.map} +1 -1
  130. package/web/.next/server/chunks/ssr/[root-of-the-server]__eaf6100f._.js +3 -0
  131. package/web/.next/server/chunks/ssr/[root-of-the-server]__eaf6100f._.js.map +1 -0
  132. package/web/.next/server/chunks/ssr/_23c92688._.js +6 -0
  133. package/web/.next/server/chunks/ssr/_23c92688._.js.map +1 -0
  134. package/web/.next/server/chunks/ssr/_28993370._.js +1 -1
  135. package/web/.next/server/chunks/ssr/_28993370._.js.map +1 -1
  136. package/web/.next/server/chunks/ssr/_49bf495c._.js +3 -0
  137. package/web/.next/server/chunks/ssr/_49bf495c._.js.map +1 -0
  138. package/web/.next/server/chunks/ssr/_690ea95f._.js +3 -0
  139. package/web/.next/server/chunks/ssr/{_2900ed94._.js.map → _690ea95f._.js.map} +1 -1
  140. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/_c52cace8._.js → server/chunks/ssr/_725584e5._.js} +2 -2
  141. package/web/.next/server/chunks/ssr/_725584e5._.js.map +1 -0
  142. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  143. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  144. package/web/.next/server/middleware-build-manifest.js +3 -3
  145. package/web/.next/server/pages/500.html +2 -2
  146. package/web/.next/server/server-reference-manifest.js +1 -1
  147. package/web/.next/server/server-reference-manifest.json +115 -115
  148. package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
  149. package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +5 -5
  150. package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
  151. package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
  152. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
  153. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
  154. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
  155. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  156. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  157. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  158. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  159. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  160. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
  161. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  162. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  163. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  164. package/web/.next/standalone/src/presentation/web/.next/server/app/page/build-manifest.json +3 -3
  165. package/web/.next/standalone/src/presentation/web/.next/server/app/page/server-reference-manifest.json +88 -88
  166. package/web/.next/standalone/src/presentation/web/.next/server/app/page.js +1 -1
  167. package/web/.next/standalone/src/presentation/web/.next/server/app/page.js.nft.json +1 -1
  168. package/web/.next/standalone/src/presentation/web/.next/server/app/page_client-reference-manifest.js +1 -1
  169. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/build-manifest.json +3 -3
  170. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +5 -5
  171. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.nft.json +1 -1
  172. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  173. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/build-manifest.json +3 -3
  174. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
  175. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -1
  176. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  177. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/build-manifest.json +3 -3
  178. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  179. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
  180. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  181. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_a53cb908._.js +3 -0
  182. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
  183. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  184. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{[root-of-the-server]__f5830fa9._.js → [root-of-the-server]__2ffb27f1._.js} +2 -2
  185. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__551fb7e1._.js +1 -1
  186. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  187. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__7f4180a1._.js +3 -0
  188. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  189. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js +4 -4
  190. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__e41b5eec._.js +9 -0
  191. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__eaf6100f._.js +3 -0
  192. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_23c92688._.js +6 -0
  193. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_28993370._.js +1 -1
  194. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_49bf495c._.js +3 -0
  195. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_690ea95f._.js +3 -0
  196. package/web/.next/{server/chunks/ssr/_c52cace8._.js → standalone/src/presentation/web/.next/server/chunks/ssr/_725584e5._.js} +2 -2
  197. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  198. package/web/.next/standalone/src/presentation/web/.next/server/middleware-build-manifest.js +3 -3
  199. package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
  200. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
  201. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +115 -115
  202. package/web/.next/standalone/src/presentation/web/components/common/base-drawer/base-drawer.stories.tsx +16 -2
  203. package/web/.next/standalone/src/presentation/web/components/common/base-drawer/base-drawer.tsx +35 -6
  204. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.tsx +285 -0
  205. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/control-center-drawer.tsx +650 -0
  206. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/drawer-view.ts +82 -0
  207. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/index.ts +2 -0
  208. package/web/.next/standalone/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar-config.ts +0 -4
  209. package/web/.next/standalone/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.tsx +5 -14
  210. package/web/.next/standalone/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.tsx +58 -51
  211. package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.tsx +42 -1
  212. package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx +2 -16
  213. package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/index.ts +1 -0
  214. package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.tsx +55 -2
  215. package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/feature-drawer.tsx +97 -106
  216. package/web/.next/standalone/src/presentation/web/components/common/index.ts +6 -0
  217. package/web/.next/standalone/src/presentation/web/components/common/merge-review/merge-review.stories.tsx +1 -2
  218. package/web/.next/standalone/src/presentation/web/components/common/merge-review/merge-review.tsx +1 -2
  219. package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.tsx +1 -2
  220. package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.tsx +1 -1
  221. package/web/.next/standalone/src/presentation/web/components/common/repository-node/repository-drawer.stories.tsx +28 -2
  222. package/web/.next/standalone/src/presentation/web/components/common/repository-node/repository-drawer.tsx +7 -2
  223. package/web/.next/standalone/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.tsx +1 -1
  224. package/web/.next/standalone/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.tsx +7 -6
  225. package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.tsx +1 -2
  226. package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.tsx +1 -2
  227. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +30 -348
  228. package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +2 -1
  229. package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.tsx +5 -1
  230. package/web/.next/standalone/src/presentation/web/server.js +1 -1
  231. package/web/.next/static/chunks/38ca82d1243738e3.js +1 -0
  232. package/web/.next/static/chunks/{35f41ba0a6d626d7.js → 491ae2bbae40857c.js} +1 -1
  233. package/web/.next/static/chunks/4b6cc9f65260f2bd.js +2 -0
  234. package/web/.next/static/chunks/67599679ca9ac863.js +1 -0
  235. package/web/.next/static/chunks/{ed887cce7b31c91b.js → 6ece250c7d0ec203.js} +1 -1
  236. package/web/.next/static/chunks/a186bbb822ccb655.css +2 -0
  237. package/web/.next/static/chunks/a5c59952485e875e.js +1 -0
  238. package/web/.next/static/chunks/{8c60d1bd87239066.js → a9626385607910b3.js} +1 -1
  239. package/web/.next/static/chunks/c1c15470a7b058c8.js +1 -0
  240. package/web/.next/static/chunks/caa2e7e1618e2179.js +1 -0
  241. package/web/.next/static/chunks/ed799a306922f03e.js +10 -0
  242. package/web/.next/static/chunks/fb703cf73aba2eb8.js +1 -0
  243. package/web/.next/static/chunks/{turbopack-b6b5b4f015327a9a.js → turbopack-958ac34b879d0dce.js} +1 -1
  244. package/web/.next/trace +1 -1
  245. package/web/.next/trace-build +1 -1
  246. package/web/.next/server/chunks/ssr/403f9_next_dist_623b646a._.js +0 -3
  247. package/web/.next/server/chunks/ssr/403f9_next_dist_623b646a._.js.map +0 -1
  248. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb51fac._.js +0 -3
  249. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb51fac._.js.map +0 -1
  250. package/web/.next/server/chunks/ssr/[root-of-the-server]__c1f0f2a8._.js +0 -3
  251. package/web/.next/server/chunks/ssr/[root-of-the-server]__c1f0f2a8._.js.map +0 -1
  252. package/web/.next/server/chunks/ssr/[root-of-the-server]__f648005b._.js +0 -9
  253. package/web/.next/server/chunks/ssr/_2900ed94._.js +0 -3
  254. package/web/.next/server/chunks/ssr/_6978d868._.js +0 -3
  255. package/web/.next/server/chunks/ssr/_6978d868._.js.map +0 -1
  256. package/web/.next/server/chunks/ssr/_85965278._.js +0 -6
  257. package/web/.next/server/chunks/ssr/_85965278._.js.map +0 -1
  258. package/web/.next/server/chunks/ssr/_c52cace8._.js.map +0 -1
  259. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_623b646a._.js +0 -3
  260. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6bb51fac._.js +0 -3
  261. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__c1f0f2a8._.js +0 -3
  262. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__f648005b._.js +0 -9
  263. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_2900ed94._.js +0 -3
  264. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_6978d868._.js +0 -3
  265. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_85965278._.js +0 -6
  266. package/web/.next/static/chunks/41a2adc09edfffaf.js +0 -1
  267. package/web/.next/static/chunks/5054c72b1c8f5912.js +0 -1
  268. package/web/.next/static/chunks/7bcbfc56e5733034.js +0 -1
  269. package/web/.next/static/chunks/86c0cc1097427f74.js +0 -10
  270. package/web/.next/static/chunks/96f49affaceab206.css +0 -2
  271. package/web/.next/static/chunks/a6d1d774260fc927.js +0 -2
  272. package/web/.next/static/chunks/c0f7284a71378f26.js +0 -1
  273. package/web/.next/static/chunks/f5fb2f182ae9b015.js +0 -1
  274. /package/web/.next/static/{Cp8hg2DFpA4DyEezlBYOw → GdqfiIUVMj2wj_3lbrUqd}/_buildManifest.js +0 -0
  275. /package/web/.next/static/{Cp8hg2DFpA4DyEezlBYOw → GdqfiIUVMj2wj_3lbrUqd}/_clientMiddlewareManifest.json +0 -0
  276. /package/web/.next/static/{Cp8hg2DFpA4DyEezlBYOw → GdqfiIUVMj2wj_3lbrUqd}/_ssgManifest.js +0 -0
@@ -1,59 +1,34 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useCallback, useEffect, useMemo, useState } from 'react';
4
- import { toast } from 'sonner';
5
- import { approveFeature } from '../../../app/actions/approve-feature.js';
6
- import { rejectFeature } from '../../../app/actions/reject-feature.js';
7
- import { getFeatureArtifact } from '../../../app/actions/get-feature-artifact.js';
8
- import { getResearchArtifact } from '../../../app/actions/get-research-artifact.js';
9
- import { getWorkflowDefaults } from '../../../app/actions/get-workflow-defaults.js';
10
- import { getMergeReviewData } from '../../../app/actions/get-merge-review-data.js';
11
4
  import { FeaturesCanvas } from '../../features/features-canvas/index.js';
12
- import { FeatureDrawer, FeatureCreateDrawer } from '../../common/index.js';
13
- import { RepositoryDrawer } from '../../common/repository-node/index.js';
14
- import { PrdQuestionnaireDrawer } from '../../common/prd-questionnaire/index.js';
15
- import { TechDecisionsDrawer } from '../../common/tech-decisions-review/index.js';
16
- import { MergeReviewDrawer } from '../../common/merge-review/index.js';
5
+ import { ControlCenterDrawer, computeDrawerView } from '../../common/control-center-drawer/index.js';
17
6
  import { NotificationPermissionBanner } from '../../common/notification-permission-banner/index.js';
18
- import { useSoundAction } from '../../../hooks/use-sound-action.js';
7
+ import { getWorkflowDefaults } from '../../../app/actions/get-workflow-defaults.js';
19
8
  import { ControlCenterEmptyState } from './control-center-empty-state.js';
20
9
  import { useControlCenterState } from './use-control-center-state.js';
21
10
  export function ControlCenterInner({ initialNodes, initialEdges }) {
22
11
  const { nodes, edges, selectedNode, isCreateDrawerOpen, isDeleting, pendingRepositoryPath, onNodesChange, handleConnect, handleAddFeature, handleAddFeatureToRepo, handleAddFeatureToFeature, handleAddRepository, handleNodeClick, clearSelection, handleCreateFeatureSubmit, handleDeleteFeature, handleDeleteRepository, closeCreateDrawer, selectFeatureById, pendingParentFeatureId, } = useControlCenterState(initialNodes, initialEdges);
23
- // Extract feature list for the parent selector in the create drawer
12
+ // Feature list for the parent selector in the create drawer
24
13
  const featureOptions = useMemo(() => nodes
25
14
  .filter((n) => n.type === 'featureNode')
26
15
  .map((n) => {
27
16
  const data = n.data;
28
17
  return { id: data.featureId, name: data.name };
29
18
  })
30
- .filter((f) => f.id && !f.id.startsWith('#')), // exclude optimistic temp nodes
31
- [nodes]);
19
+ .filter((f) => f.id && !f.id.startsWith('#')), [nodes]);
32
20
  // Workflow defaults for the create-feature drawer
33
21
  const [workflowDefaults, setWorkflowDefaults] = useState();
34
22
  useEffect(() => {
35
23
  getWorkflowDefaults()
36
24
  .then(setWorkflowDefaults)
37
25
  .catch(() => {
38
- // Settings unavailable — drawer falls back to all-false defaults
26
+ // Settings unavailable — create drawer falls back to all-false defaults
39
27
  });
40
28
  }, []);
41
- // PRD questionnaire drawer state
42
- const [prdSelections, setPrdSelections] = useState({});
43
- const [questionnaireData, setQuestionnaireData] = useState(null);
44
- const [isLoadingQuestionnaire, setIsLoadingQuestionnaire] = useState(false);
45
- // Reject state (shared by both drawers)
46
- const [isRejecting, setIsRejecting] = useState(false);
47
- const rejectSound = useSoundAction('reject');
48
- // Tech decisions drawer state
49
- const [techDecisionsData, setTechDecisionsData] = useState(null);
50
- const [isLoadingTechDecisions, setIsLoadingTechDecisions] = useState(false);
51
- // Merge review drawer state
52
- const [mergeReviewData, setMergeReviewData] = useState(null);
53
- const [isLoadingMergeReview, setIsLoadingMergeReview] = useState(false);
54
- // Repository drawer state
29
+ // Repository drawer state (independent of feature selection)
55
30
  const [selectedRepoNode, setSelectedRepoNode] = useState(null);
56
- // Clear all drawers — used for pane click and canvas drag
31
+ // Close all drawers — used on pane click and canvas drag
57
32
  const handleClearDrawers = useCallback(() => {
58
33
  clearSelection();
59
34
  setSelectedRepoNode(null);
@@ -67,187 +42,16 @@ export function ControlCenterInner({ initialNodes, initialEdges }) {
67
42
  setSelectedRepoNode(node.data);
68
43
  }
69
44
  }, [nodes, clearSelection]);
70
- const showPrdDrawer = selectedNode?.lifecycle === 'requirements' && selectedNode?.state === 'action-required';
71
- const showTechDecisionsDrawer = selectedNode?.lifecycle === 'implementation' && selectedNode?.state === 'action-required';
72
- const showMergeReviewDrawer = selectedNode?.lifecycle === 'review' &&
73
- (selectedNode?.state === 'action-required' || selectedNode?.state === 'error');
74
- const handlePrdSelect = useCallback((questionId, optionId) => {
75
- setPrdSelections((prev) => ({ ...prev, [questionId]: optionId }));
76
- }, []);
77
- const handlePrdApprove = useCallback(async (_actionId) => {
78
- const featureId = selectedNode?.featureId;
79
- if (!featureId)
80
- return;
81
- let payload;
82
- if (questionnaireData) {
83
- const changedSelections = [];
84
- for (const [questionId, optionId] of Object.entries(prdSelections)) {
85
- const question = questionnaireData.questions.find((q) => q.id === questionId);
86
- const option = question?.options.find((o) => o.id === optionId);
87
- if (question && option) {
88
- changedSelections.push({
89
- questionId: question.question,
90
- selectedOption: option.label,
91
- });
92
- }
93
- }
94
- payload = { approved: true, changedSelections };
95
- }
96
- const result = await approveFeature(featureId, payload);
97
- if (!result.approved) {
98
- toast.error(result.error ?? 'Failed to approve requirements');
99
- return;
100
- }
101
- toast.success('Requirements approved — agent resuming');
102
- clearSelection();
103
- setPrdSelections({});
104
- }, [selectedNode?.featureId, clearSelection, questionnaireData, prdSelections]);
105
- // Shared reject handler — all drawers use the same rejectFeature flow
106
- const handleReject = useCallback(async (feedback, label, onDone) => {
107
- const featureId = selectedNode?.featureId;
108
- if (!featureId)
109
- return;
110
- setIsRejecting(true);
111
- try {
112
- const result = await rejectFeature(featureId, feedback);
113
- if (!result.rejected) {
114
- toast.error(result.error ?? `Failed to reject ${label.toLowerCase()}`);
115
- return;
116
- }
117
- rejectSound.play();
118
- toast.success(`${label} rejected — agent re-iterating (iteration ${result.iteration})`);
119
- if (result.iterationWarning) {
120
- toast.warning(`Iteration ${result.iteration} — consider approving or adjusting feedback to avoid excessive iterations`);
121
- }
122
- clearSelection();
123
- onDone?.();
124
- }
125
- finally {
126
- setIsRejecting(false);
127
- }
128
- }, [selectedNode?.featureId, clearSelection, rejectSound]);
129
- const handlePrdReject = useCallback((feedback) => handleReject(feedback, 'Requirements', () => setPrdSelections({})), [handleReject]);
130
- const handleTechDecisionsReject = useCallback((feedback) => handleReject(feedback, 'Plan'), [handleReject]);
131
- const handleMergeReject = useCallback((feedback) => handleReject(feedback, 'Merge'), [handleReject]);
132
- // Shared approve handler — tech decisions and merge use identical approve flows
133
- const handleSimpleApprove = useCallback(async (label) => {
134
- const featureId = selectedNode?.featureId;
135
- if (!featureId)
136
- return;
137
- const result = await approveFeature(featureId);
138
- if (!result.approved) {
139
- toast.error(result.error ?? `Failed to approve ${label.toLowerCase()}`);
140
- return;
141
- }
142
- toast.success(`${label} approved — agent resuming`);
143
- clearSelection();
144
- }, [selectedNode?.featureId, clearSelection]);
145
- const handleTechDecisionsApprove = useCallback(() => handleSimpleApprove('Plan'), [handleSimpleApprove]);
146
- const handleMergeApprove = useCallback(() => handleSimpleApprove('Merge'), [handleSimpleApprove]);
147
- // Fetch questionnaire data and reset selections when a different feature is selected
148
- const prdFeatureId = showPrdDrawer ? selectedNode?.featureId : null;
149
- useEffect(() => {
150
- setPrdSelections({});
151
- setQuestionnaireData(null);
152
- if (!prdFeatureId)
153
- return;
154
- let cancelled = false;
155
- setIsLoadingQuestionnaire(true);
156
- getFeatureArtifact(prdFeatureId)
157
- .then((result) => {
158
- if (cancelled)
159
- return;
160
- if (result.error) {
161
- toast.error(result.error);
162
- return;
163
- }
164
- if (result.questionnaire) {
165
- setQuestionnaireData(result.questionnaire);
166
- // Pre-select AI-recommended answers
167
- const defaults = {};
168
- for (const q of result.questionnaire.questions) {
169
- const recommended = q.options.find((o) => o.recommended);
170
- if (recommended)
171
- defaults[q.id] = recommended.id;
172
- }
173
- setPrdSelections(defaults);
174
- }
175
- })
176
- .catch(() => {
177
- if (!cancelled)
178
- toast.error('Failed to load questionnaire');
179
- })
180
- .finally(() => {
181
- if (!cancelled)
182
- setIsLoadingQuestionnaire(false);
183
- });
184
- return () => {
185
- cancelled = true;
186
- };
187
- }, [prdFeatureId]);
188
- // Fetch tech decisions data when a feature is in research + action-required
189
- const techDecisionsFeatureId = showTechDecisionsDrawer ? selectedNode?.featureId : null;
190
- useEffect(() => {
191
- setTechDecisionsData(null);
192
- if (!techDecisionsFeatureId)
193
- return;
194
- let cancelled = false;
195
- setIsLoadingTechDecisions(true);
196
- getResearchArtifact(techDecisionsFeatureId)
197
- .then((result) => {
198
- if (cancelled)
199
- return;
200
- if (result.error) {
201
- toast.error(result.error);
202
- return;
203
- }
204
- if (result.techDecisions) {
205
- setTechDecisionsData(result.techDecisions);
206
- }
207
- })
208
- .catch(() => {
209
- if (!cancelled)
210
- toast.error('Failed to load tech decisions');
211
- })
212
- .finally(() => {
213
- if (!cancelled)
214
- setIsLoadingTechDecisions(false);
215
- });
216
- return () => {
217
- cancelled = true;
218
- };
219
- }, [techDecisionsFeatureId]);
220
- // Fetch merge review data when a feature is in review + action-required
221
- const mergeFeatureId = showMergeReviewDrawer ? selectedNode?.featureId : null;
222
- useEffect(() => {
223
- setMergeReviewData(null);
224
- if (!mergeFeatureId)
225
- return;
226
- let cancelled = false;
227
- setIsLoadingMergeReview(true);
228
- getMergeReviewData(mergeFeatureId)
229
- .then((result) => {
230
- if (cancelled)
231
- return;
232
- if ('error' in result) {
233
- toast.error(result.error);
234
- return;
235
- }
236
- setMergeReviewData(result);
237
- })
238
- .catch(() => {
239
- if (!cancelled)
240
- toast.error('Failed to load merge review data');
241
- })
242
- .finally(() => {
243
- if (!cancelled)
244
- setIsLoadingMergeReview(false);
245
- });
246
- return () => {
247
- cancelled = true;
248
- };
249
- }, [mergeFeatureId]);
250
- const hasRepositories = nodes.some((n) => n.type === 'repositoryNode');
45
+ // Derive the single active drawer view from all current state
46
+ const drawerView = computeDrawerView({
47
+ selectedNode,
48
+ isCreateDrawerOpen,
49
+ pendingRepositoryPath,
50
+ pendingParentFeatureId,
51
+ selectedRepoNode,
52
+ features: featureOptions,
53
+ workflowDefaults,
54
+ });
251
55
  // Listen for global "open create drawer" events from the sidebar
252
56
  useEffect(() => {
253
57
  const handler = () => handleAddFeature();
@@ -272,8 +76,9 @@ export function ControlCenterInner({ initialNodes, initialEdges }) {
272
76
  window.addEventListener('shep:select-feature', handler);
273
77
  return () => window.removeEventListener('shep:select-feature', handler);
274
78
  }, [selectFeatureById]);
79
+ const hasRepositories = nodes.some((n) => n.type === 'repositoryNode');
275
80
  if (!hasRepositories) {
276
- return (_jsxs(_Fragment, { children: [_jsx(NotificationPermissionBanner, {}), _jsx(ControlCenterEmptyState, { onRepositorySelect: handleAddRepository }), _jsx(FeatureCreateDrawer, { open: isCreateDrawerOpen, onClose: closeCreateDrawer, onSubmit: handleCreateFeatureSubmit, repositoryPath: pendingRepositoryPath, workflowDefaults: workflowDefaults, features: featureOptions, initialParentId: pendingParentFeatureId })] }));
81
+ return (_jsxs(_Fragment, { children: [_jsx(NotificationPermissionBanner, {}), _jsx(ControlCenterEmptyState, { onRepositorySelect: handleAddRepository }), _jsx(ControlCenterDrawer, { view: drawerView, onClose: handleClearDrawers, onDelete: handleDeleteFeature, isDeleting: isDeleting, onCreateSubmit: handleCreateFeatureSubmit })] }));
277
82
  }
278
- return (_jsxs(_Fragment, { children: [_jsx(NotificationPermissionBanner, {}), _jsx(FeaturesCanvas, { nodes: nodes, edges: edges, onNodesChange: onNodesChange, onConnect: handleConnect, onAddFeature: handleAddFeature, onNodeAction: handleAddFeatureToFeature, onNodeClick: handleNodeClick, onPaneClick: handleClearDrawers, onRepositoryAdd: handleAddFeatureToRepo, onRepositoryClick: handleRepositoryClick, onRepositoryDelete: handleDeleteRepository, onRepositorySelect: handleAddRepository, onCanvasDrag: handleClearDrawers, emptyState: _jsx(ControlCenterEmptyState, { onRepositorySelect: handleAddRepository }) }), _jsx(FeatureDrawer, { selectedNode: showPrdDrawer || showTechDecisionsDrawer || showMergeReviewDrawer ? null : selectedNode, onClose: clearSelection, onDelete: handleDeleteFeature, isDeleting: isDeleting }), showPrdDrawer ? (_jsx(PrdQuestionnaireDrawer, { open: true, onClose: clearSelection, featureName: selectedNode?.name ?? '', featureDescription: selectedNode?.description, featureId: selectedNode?.featureId, repositoryPath: selectedNode?.repositoryPath, branch: selectedNode?.branch, specPath: selectedNode?.specPath, data: questionnaireData, selections: prdSelections, onSelect: handlePrdSelect, onApprove: handlePrdApprove, onReject: handlePrdReject, isRejecting: isRejecting, onDelete: handleDeleteFeature, isDeleting: isDeleting, isProcessing: isLoadingQuestionnaire })) : null, showTechDecisionsDrawer ? (_jsx(TechDecisionsDrawer, { open: true, onClose: clearSelection, featureName: selectedNode?.name ?? '', featureId: selectedNode?.featureId, repositoryPath: selectedNode?.repositoryPath, branch: selectedNode?.branch, specPath: selectedNode?.specPath, data: techDecisionsData, onApprove: handleTechDecisionsApprove, onReject: handleTechDecisionsReject, isRejecting: isRejecting, onDelete: handleDeleteFeature, isDeleting: isDeleting, isProcessing: isLoadingTechDecisions })) : null, showMergeReviewDrawer ? (_jsx(MergeReviewDrawer, { open: true, onClose: clearSelection, featureName: selectedNode?.name ?? '', featureId: selectedNode?.featureId, repositoryPath: selectedNode?.repositoryPath, branch: selectedNode?.branch, specPath: selectedNode?.specPath, data: mergeReviewData, onApprove: handleMergeApprove, onReject: handleMergeReject, isRejecting: isRejecting, onDelete: handleDeleteFeature, isDeleting: isDeleting, isProcessing: isLoadingMergeReview })) : null, _jsx(FeatureCreateDrawer, { open: isCreateDrawerOpen, onClose: closeCreateDrawer, onSubmit: handleCreateFeatureSubmit, repositoryPath: pendingRepositoryPath, workflowDefaults: workflowDefaults, features: featureOptions, initialParentId: pendingParentFeatureId }), _jsx(RepositoryDrawer, { data: selectedRepoNode, onClose: () => setSelectedRepoNode(null) })] }));
83
+ return (_jsxs(_Fragment, { children: [_jsx(NotificationPermissionBanner, {}), _jsx(FeaturesCanvas, { nodes: nodes, edges: edges, onNodesChange: onNodesChange, onConnect: handleConnect, onAddFeature: handleAddFeature, onNodeAction: handleAddFeatureToFeature, onNodeClick: handleNodeClick, onPaneClick: handleClearDrawers, onRepositoryAdd: handleAddFeatureToRepo, onRepositoryClick: handleRepositoryClick, onRepositoryDelete: handleDeleteRepository, onRepositorySelect: handleAddRepository, emptyState: _jsx(ControlCenterEmptyState, { onRepositorySelect: handleAddRepository }) }), _jsx(ControlCenterDrawer, { view: drawerView, onClose: handleClearDrawers, onDelete: handleDeleteFeature, isDeleting: isDeleting, onCreateSubmit: handleCreateFeatureSubmit })] }));
279
84
  }
@@ -1 +1 @@
1
- {"version":3,"file":"use-control-center-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/use-control-center-state.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAYhF,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,YAAY,EAAE,eAAe,GAAG,IAAI,CAAC;IACrC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,4EAA4E;IAC5E,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,aAAa,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,KAAK,IAAI,CAAC;IAC/D,aAAa,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAChD,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,eAAe,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACzE,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,sBAAsB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,yBAAyB,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,YAAY,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,IAAI,CAAC;IACnD,yBAAyB,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAChE,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,sBAAsB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,CACjB,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,YAAY,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,KACpC,MAAM,CAAC;IACZ,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAID,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,cAAc,EAAE,EAC9B,YAAY,EAAE,IAAI,EAAE,GACnB,kBAAkB,CA2sBpB"}
1
+ {"version":3,"file":"use-control-center-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/use-control-center-state.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAYhF,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,YAAY,EAAE,eAAe,GAAG,IAAI,CAAC;IACrC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,4EAA4E;IAC5E,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,aAAa,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,KAAK,IAAI,CAAC;IAC/D,aAAa,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAChD,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,eAAe,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACzE,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,sBAAsB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,yBAAyB,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,YAAY,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,IAAI,CAAC;IACnD,yBAAyB,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAChE,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,sBAAsB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,CACjB,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,YAAY,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,KACpC,MAAM,CAAC;IACZ,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAID,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,cAAc,EAAE,EAC9B,YAAY,EAAE,IAAI,EAAE,GACnB,kBAAkB,CA4sBpB"}
@@ -457,11 +457,12 @@ export function useControlCenterState(initialNodes, initialEdges) {
457
457
  // Find the repo node that owns this feature
458
458
  const repoEdge = edges.find((e) => e.target === featureNodeId);
459
459
  const repoNodeId = repoEdge?.source ?? null;
460
+ clickSound.play();
460
461
  setSelectedNode(null);
461
462
  setPendingRepoNodeId(repoNodeId);
462
463
  setPendingParentFeatureId(featureId);
463
464
  setIsCreateDrawerOpen(true);
464
- }, [edges]);
465
+ }, [edges, clickSound]);
465
466
  const handleLayout = useCallback((direction) => {
466
467
  setNodes((currentNodes) => {
467
468
  const currentEdges = edges;
@@ -1 +1 @@
1
- {"version":3,"file":"features-canvas.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/features-canvas/features-canvas.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAKlE,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,kCAAkC,CAAC;AAEzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAE9E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAGrF,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,kBAAkB,GAAG,qBAAqB,CAAC;AAE1F,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,KAAK,IAAI,CAAC;IAChE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACtE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAChD,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAC7C,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,KAAK,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,SAAS,EACT,WAAW,EACX,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,OAAO,EACP,UAAU,GACX,EAAE,mBAAmB,2CAsHrB"}
1
+ {"version":3,"file":"features-canvas.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/features-canvas/features-canvas.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAKlE,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,kCAAkC,CAAC;AAEzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAE9E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAGrF,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,kBAAkB,GAAG,qBAAqB,CAAC;AAE1F,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,KAAK,IAAI,CAAC;IAChE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACtE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAChD,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAC7C,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,KAAK,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,SAAS,EACT,WAAW,EACX,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,OAAO,EACP,UAAU,GACX,EAAE,mBAAmB,2CA0HrB"}
@@ -65,5 +65,5 @@ export function FeaturesCanvas({ nodes, edges, onNodesChange, onAddFeature, onNo
65
65
  }
66
66
  return (_jsx("div", { "data-testid": "features-canvas-empty", children: _jsx(EmptyState, { title: "No features yet", description: "Get started by creating your first feature.", action: _jsxs(Button, { onClick: onAddFeature, children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), "New Feature"] }) }) }));
67
67
  }
68
- return (_jsx("div", { "data-testid": "features-canvas", className: "h-full w-full", children: _jsx(ReactFlowProvider, { children: _jsxs(ReactFlow, { nodes: enrichedNodes, edges: edges, nodeTypes: nodeTypes, edgeTypes: edgeTypes, isValidConnection: isValidConnection, onConnect: onConnect, onNodesChange: onNodesChange, onNodeClick: onNodeClick, onPaneClick: onPaneClick, onMoveStart: onCanvasDrag, defaultViewport: { x: 30, y: 30, zoom: 0.85 }, nodesDraggable: false, nodesConnectable: false, elementsSelectable: false, children: [_jsx(Background, {}), _jsx(Controls, {}), toolbar] }) }) }));
68
+ return (_jsx("div", { "data-testid": "features-canvas", "data-no-drawer-close": true, className: "pointer-events-auto h-full w-full", children: _jsx(ReactFlowProvider, { children: _jsxs(ReactFlow, { nodes: enrichedNodes, edges: edges, nodeTypes: nodeTypes, edgeTypes: edgeTypes, isValidConnection: isValidConnection, onConnect: onConnect, onNodesChange: onNodesChange, onNodeClick: onNodeClick, onPaneClick: onPaneClick, onMoveStart: onCanvasDrag, defaultViewport: { x: 30, y: 30, zoom: 0.85 }, nodesDraggable: false, nodesConnectable: false, elementsSelectable: false, children: [_jsx(Background, {}), _jsx(Controls, {}), toolbar] }) }) }));
69
69
  }