@shepai/cli 1.66.4 → 1.68.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 (283) hide show
  1. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts.map +1 -1
  2. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +21 -1
  3. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.d.ts +15 -1
  4. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.d.ts.map +1 -1
  5. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.js +16 -2
  6. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.d.ts +12 -0
  7. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.d.ts.map +1 -0
  8. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.js +284 -0
  9. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.d.ts +33 -0
  10. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.d.ts.map +1 -0
  11. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.js +210 -0
  12. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +56 -0
  13. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -0
  14. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +32 -0
  15. package/dist/src/presentation/web/components/common/control-center-drawer/index.d.ts +3 -0
  16. package/dist/src/presentation/web/components/common/control-center-drawer/index.d.ts.map +1 -0
  17. package/dist/src/presentation/web/components/common/control-center-drawer/index.js +2 -0
  18. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar-config.d.ts +0 -4
  19. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar-config.d.ts.map +1 -1
  20. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.d.ts +1 -1
  21. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.d.ts.map +1 -1
  22. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.js +18 -12
  23. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.d.ts +4 -6
  24. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.d.ts.map +1 -1
  25. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.js +5 -13
  26. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  27. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +2 -13
  28. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +2 -10
  29. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
  30. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +21 -1
  31. package/dist/src/presentation/web/components/common/feature-create-drawer/index.d.ts +1 -1
  32. package/dist/src/presentation/web/components/common/feature-create-drawer/index.d.ts.map +1 -1
  33. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts.map +1 -1
  34. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.js +14 -20
  35. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts +7 -1
  36. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts.map +1 -1
  37. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.js +37 -2
  38. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +1 -0
  39. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  40. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  41. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +9 -2
  42. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts +1 -0
  43. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
  44. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +13 -1
  45. package/dist/src/presentation/web/components/common/index.d.ts +1 -0
  46. package/dist/src/presentation/web/components/common/index.d.ts.map +1 -1
  47. package/dist/src/presentation/web/components/common/index.js +1 -0
  48. package/dist/src/presentation/web/components/common/merge-review/merge-review.d.ts.map +1 -1
  49. package/dist/src/presentation/web/components/common/merge-review/merge-review.js +2 -2
  50. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts.map +1 -1
  51. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.js +1 -2
  52. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.js +1 -1
  53. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts.map +1 -1
  54. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.js +1 -2
  55. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.d.ts.map +1 -1
  56. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.js +5 -1
  57. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts +2 -0
  58. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts.map +1 -1
  59. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.js +13 -2
  60. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.d.ts.map +1 -1
  61. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.js +5 -2
  62. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.js +1 -1
  63. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.d.ts.map +1 -1
  64. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.js +1 -1
  65. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts.map +1 -1
  66. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.js +1 -2
  67. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  68. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +20 -215
  69. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  70. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +2 -1
  71. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts +2 -1
  72. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  73. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +4 -2
  74. package/dist/tsconfig.build.tsbuildinfo +1 -1
  75. package/package.json +2 -2
  76. package/web/.next/BUILD_ID +1 -1
  77. package/web/.next/build-manifest.json +5 -5
  78. package/web/.next/cache/.previewinfo +1 -1
  79. package/web/.next/cache/.rscinfo +1 -1
  80. package/web/.next/cache/.tsbuildinfo +1 -1
  81. package/web/.next/cache/config.json +3 -3
  82. package/web/.next/fallback-build-manifest.json +2 -2
  83. package/web/.next/prerender-manifest.json +3 -3
  84. package/web/.next/required-server-files.js +1 -1
  85. package/web/.next/required-server-files.json +1 -1
  86. package/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
  87. package/web/.next/server/app/_global-error.html +2 -2
  88. package/web/.next/server/app/_global-error.rsc +1 -1
  89. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  90. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  91. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  92. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  93. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  94. package/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
  95. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  96. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  97. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  98. package/web/.next/server/app/page/build-manifest.json +3 -3
  99. package/web/.next/server/app/page/server-reference-manifest.json +88 -88
  100. package/web/.next/server/app/page.js +1 -1
  101. package/web/.next/server/app/page.js.nft.json +1 -1
  102. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  103. package/web/.next/server/app/skills/page/build-manifest.json +3 -3
  104. package/web/.next/server/app/skills/page/server-reference-manifest.json +5 -5
  105. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  106. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  107. package/web/.next/server/app/tools/page/build-manifest.json +3 -3
  108. package/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
  109. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  110. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  111. package/web/.next/server/app/version/page/build-manifest.json +3 -3
  112. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  113. package/web/.next/server/app/version/page.js.nft.json +1 -1
  114. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  115. package/web/.next/server/chunks/ssr/403f9_next_dist_a53cb908._.js +3 -0
  116. package/web/.next/server/chunks/ssr/403f9_next_dist_a53cb908._.js.map +1 -0
  117. package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
  118. package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js.map +1 -1
  119. package/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  120. package/web/.next/server/chunks/ssr/{[root-of-the-server]__f5830fa9._.js → [root-of-the-server]__2ffb27f1._.js} +2 -2
  121. package/web/.next/server/chunks/ssr/{[root-of-the-server]__f5830fa9._.js.map → [root-of-the-server]__2ffb27f1._.js.map} +1 -1
  122. package/web/.next/server/chunks/ssr/[root-of-the-server]__551fb7e1._.js +1 -1
  123. package/web/.next/server/chunks/ssr/[root-of-the-server]__551fb7e1._.js.map +1 -1
  124. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  125. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
  126. package/web/.next/server/chunks/ssr/[root-of-the-server]__7f4180a1._.js +3 -0
  127. package/web/.next/server/chunks/ssr/[root-of-the-server]__7f4180a1._.js.map +1 -0
  128. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  129. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
  130. package/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js +4 -4
  131. package/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js.map +1 -1
  132. package/web/.next/server/chunks/ssr/[root-of-the-server]__e41b5eec._.js +9 -0
  133. package/web/.next/server/chunks/ssr/{[root-of-the-server]__f648005b._.js.map → [root-of-the-server]__e41b5eec._.js.map} +1 -1
  134. package/web/.next/server/chunks/ssr/[root-of-the-server]__eaf6100f._.js +3 -0
  135. package/web/.next/server/chunks/ssr/[root-of-the-server]__eaf6100f._.js.map +1 -0
  136. package/web/.next/server/chunks/ssr/_23c92688._.js +6 -0
  137. package/web/.next/server/chunks/ssr/_23c92688._.js.map +1 -0
  138. package/web/.next/server/chunks/ssr/_28993370._.js +1 -1
  139. package/web/.next/server/chunks/ssr/_28993370._.js.map +1 -1
  140. package/web/.next/server/chunks/ssr/_49bf495c._.js +3 -0
  141. package/web/.next/server/chunks/ssr/_49bf495c._.js.map +1 -0
  142. package/web/.next/server/chunks/ssr/_690ea95f._.js +3 -0
  143. package/web/.next/server/chunks/ssr/{_2900ed94._.js.map → _690ea95f._.js.map} +1 -1
  144. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/_c52cace8._.js → server/chunks/ssr/_725584e5._.js} +2 -2
  145. package/web/.next/server/chunks/ssr/_725584e5._.js.map +1 -0
  146. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  147. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  148. package/web/.next/server/middleware-build-manifest.js +3 -3
  149. package/web/.next/server/pages/500.html +2 -2
  150. package/web/.next/server/server-reference-manifest.js +1 -1
  151. package/web/.next/server/server-reference-manifest.json +115 -115
  152. package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
  153. package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +5 -5
  154. package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
  155. package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
  156. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
  157. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
  158. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
  159. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  160. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  161. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  162. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  163. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  164. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
  165. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  166. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  167. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  168. package/web/.next/standalone/src/presentation/web/.next/server/app/page/build-manifest.json +3 -3
  169. package/web/.next/standalone/src/presentation/web/.next/server/app/page/server-reference-manifest.json +88 -88
  170. package/web/.next/standalone/src/presentation/web/.next/server/app/page.js +1 -1
  171. package/web/.next/standalone/src/presentation/web/.next/server/app/page.js.nft.json +1 -1
  172. package/web/.next/standalone/src/presentation/web/.next/server/app/page_client-reference-manifest.js +1 -1
  173. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/build-manifest.json +3 -3
  174. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +5 -5
  175. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.nft.json +1 -1
  176. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  177. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/build-manifest.json +3 -3
  178. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
  179. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -1
  180. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  181. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/build-manifest.json +3 -3
  182. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  183. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
  184. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  185. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_a53cb908._.js +3 -0
  186. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
  187. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  188. 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
  189. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__551fb7e1._.js +1 -1
  190. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  191. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__7f4180a1._.js +3 -0
  192. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  193. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js +4 -4
  194. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__e41b5eec._.js +9 -0
  195. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__eaf6100f._.js +3 -0
  196. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_23c92688._.js +6 -0
  197. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_28993370._.js +1 -1
  198. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_49bf495c._.js +3 -0
  199. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_690ea95f._.js +3 -0
  200. package/web/.next/{server/chunks/ssr/_c52cace8._.js → standalone/src/presentation/web/.next/server/chunks/ssr/_725584e5._.js} +2 -2
  201. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  202. package/web/.next/standalone/src/presentation/web/.next/server/middleware-build-manifest.js +3 -3
  203. package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
  204. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
  205. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +115 -115
  206. package/web/.next/standalone/src/presentation/web/components/common/base-drawer/base-drawer.stories.tsx +16 -2
  207. package/web/.next/standalone/src/presentation/web/components/common/base-drawer/base-drawer.tsx +35 -6
  208. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.tsx +285 -0
  209. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/control-center-drawer.tsx +650 -0
  210. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/drawer-view.ts +82 -0
  211. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/index.ts +2 -0
  212. package/web/.next/standalone/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar-config.ts +0 -4
  213. package/web/.next/standalone/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.tsx +5 -14
  214. package/web/.next/standalone/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.tsx +58 -51
  215. package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.tsx +42 -1
  216. package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx +2 -16
  217. package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/index.ts +1 -0
  218. package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.tsx +55 -2
  219. package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/feature-drawer.tsx +97 -106
  220. package/web/.next/standalone/src/presentation/web/components/common/feature-node/feature-node-state-config.ts +1 -0
  221. package/web/.next/standalone/src/presentation/web/components/common/feature-node/feature-node.stories.tsx +14 -1
  222. package/web/.next/standalone/src/presentation/web/components/common/feature-node/feature-node.tsx +61 -1
  223. package/web/.next/standalone/src/presentation/web/components/common/index.ts +6 -0
  224. package/web/.next/standalone/src/presentation/web/components/common/merge-review/merge-review.stories.tsx +1 -2
  225. package/web/.next/standalone/src/presentation/web/components/common/merge-review/merge-review.tsx +1 -2
  226. package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.tsx +1 -2
  227. package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.tsx +1 -1
  228. package/web/.next/standalone/src/presentation/web/components/common/repository-node/repository-drawer.stories.tsx +28 -2
  229. package/web/.next/standalone/src/presentation/web/components/common/repository-node/repository-drawer.tsx +7 -2
  230. package/web/.next/standalone/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.tsx +1 -1
  231. package/web/.next/standalone/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.tsx +7 -6
  232. package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.tsx +1 -2
  233. package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.tsx +1 -2
  234. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +31 -348
  235. package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +2 -1
  236. package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.tsx +9 -1
  237. package/web/.next/standalone/src/presentation/web/server.js +1 -1
  238. package/web/.next/static/chunks/0751efba75563e6a.js +1 -0
  239. package/web/.next/static/chunks/33b4e5444019ab64.js +1 -0
  240. package/web/.next/static/chunks/{35f41ba0a6d626d7.js → 491ae2bbae40857c.js} +1 -1
  241. package/web/.next/static/chunks/49feba0d1a871e2b.js +10 -0
  242. package/web/.next/static/chunks/4b6cc9f65260f2bd.js +2 -0
  243. package/web/.next/static/chunks/{e0073669b6bc24df.js → 7f6db87dc1fe9c3b.js} +1 -1
  244. package/web/.next/static/chunks/a186bbb822ccb655.css +2 -0
  245. package/web/.next/static/chunks/a5c59952485e875e.js +1 -0
  246. package/web/.next/static/chunks/{8c60d1bd87239066.js → a9626385607910b3.js} +1 -1
  247. package/web/.next/static/chunks/c1c15470a7b058c8.js +1 -0
  248. package/web/.next/static/chunks/caa2e7e1618e2179.js +1 -0
  249. package/web/.next/static/chunks/fb703cf73aba2eb8.js +1 -0
  250. package/web/.next/static/chunks/{turbopack-b6b5b4f015327a9a.js → turbopack-958ac34b879d0dce.js} +1 -1
  251. package/web/.next/trace +1 -1
  252. package/web/.next/trace-build +1 -1
  253. package/web/.next/server/chunks/ssr/403f9_next_dist_623b646a._.js +0 -3
  254. package/web/.next/server/chunks/ssr/403f9_next_dist_623b646a._.js.map +0 -1
  255. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb51fac._.js +0 -3
  256. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb51fac._.js.map +0 -1
  257. package/web/.next/server/chunks/ssr/[root-of-the-server]__c1f0f2a8._.js +0 -3
  258. package/web/.next/server/chunks/ssr/[root-of-the-server]__c1f0f2a8._.js.map +0 -1
  259. package/web/.next/server/chunks/ssr/[root-of-the-server]__f648005b._.js +0 -9
  260. package/web/.next/server/chunks/ssr/_2900ed94._.js +0 -3
  261. package/web/.next/server/chunks/ssr/_6978d868._.js +0 -3
  262. package/web/.next/server/chunks/ssr/_6978d868._.js.map +0 -1
  263. package/web/.next/server/chunks/ssr/_85965278._.js +0 -6
  264. package/web/.next/server/chunks/ssr/_85965278._.js.map +0 -1
  265. package/web/.next/server/chunks/ssr/_c52cace8._.js.map +0 -1
  266. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_623b646a._.js +0 -3
  267. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6bb51fac._.js +0 -3
  268. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__c1f0f2a8._.js +0 -3
  269. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__f648005b._.js +0 -9
  270. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_2900ed94._.js +0 -3
  271. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_6978d868._.js +0 -3
  272. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_85965278._.js +0 -6
  273. package/web/.next/static/chunks/41a2adc09edfffaf.js +0 -1
  274. package/web/.next/static/chunks/5054c72b1c8f5912.js +0 -1
  275. package/web/.next/static/chunks/5f6d9f4647fc3093.js +0 -10
  276. package/web/.next/static/chunks/96f49affaceab206.css +0 -2
  277. package/web/.next/static/chunks/a6d1d774260fc927.js +0 -2
  278. package/web/.next/static/chunks/c0fdd832fc4ee8eb.js +0 -1
  279. package/web/.next/static/chunks/de70ba984363673f.js +0 -1
  280. package/web/.next/static/chunks/f5fb2f182ae9b015.js +0 -1
  281. /package/web/.next/static/{XGbKxw26cOCJQ-711YxBw → ntu60tngTU2e9MZgpdlz0}/_buildManifest.js +0 -0
  282. /package/web/.next/static/{XGbKxw26cOCJQ-711YxBw → ntu60tngTU2e9MZgpdlz0}/_clientMiddlewareManifest.json +0 -0
  283. /package/web/.next/static/{XGbKxw26cOCJQ-711YxBw → ntu60tngTU2e9MZgpdlz0}/_ssgManifest.js +0 -0
@@ -0,0 +1,82 @@
1
+ import type { FeatureNodeData } from '@/components/common/feature-node';
2
+ import type { RepositoryNodeData } from '@/components/common/repository-node';
3
+ import type { ParentFeatureOption } from '@/components/common/feature-create-drawer/feature-create-drawer';
4
+ import type { WorkflowDefaults } from '@/app/actions/get-workflow-defaults';
5
+
6
+ /**
7
+ * Discriminated union representing every possible drawer state in the control center.
8
+ * Only one view can be active at a time.
9
+ */
10
+ export type DrawerView =
11
+ /** Generic feature info (running, done, blocked, error, or unhandled action-required phases) */
12
+ | { type: 'feature'; node: FeatureNodeData }
13
+ /** requirements lifecycle + action-required → PRD questionnaire */
14
+ | { type: 'prd-review'; node: FeatureNodeData }
15
+ /** implementation lifecycle + action-required → tech decisions review */
16
+ | { type: 'tech-review'; node: FeatureNodeData }
17
+ /** review lifecycle + action-required|error → merge review */
18
+ | { type: 'merge-review'; node: FeatureNodeData }
19
+ /** Feature creation form */
20
+ | {
21
+ type: 'feature-create';
22
+ repositoryPath: string;
23
+ initialParentId?: string;
24
+ features: ParentFeatureOption[];
25
+ workflowDefaults?: WorkflowDefaults;
26
+ }
27
+ /** Repository node actions */
28
+ | { type: 'repository'; data: RepositoryNodeData };
29
+
30
+ /**
31
+ * Derives the active DrawerView from control-center state.
32
+ * Priority: feature-create > selected-node (prd/tech/merge/feature) > repository
33
+ */
34
+ export function computeDrawerView({
35
+ selectedNode,
36
+ isCreateDrawerOpen,
37
+ pendingRepositoryPath,
38
+ pendingParentFeatureId,
39
+ selectedRepoNode,
40
+ features,
41
+ workflowDefaults,
42
+ }: {
43
+ selectedNode: FeatureNodeData | null;
44
+ isCreateDrawerOpen: boolean;
45
+ pendingRepositoryPath: string;
46
+ pendingParentFeatureId: string | undefined;
47
+ selectedRepoNode: RepositoryNodeData | null;
48
+ features: ParentFeatureOption[];
49
+ workflowDefaults: WorkflowDefaults | undefined;
50
+ }): DrawerView | null {
51
+ if (isCreateDrawerOpen) {
52
+ return {
53
+ type: 'feature-create',
54
+ repositoryPath: pendingRepositoryPath,
55
+ initialParentId: pendingParentFeatureId,
56
+ features,
57
+ workflowDefaults,
58
+ };
59
+ }
60
+
61
+ if (selectedNode) {
62
+ if (selectedNode.lifecycle === 'requirements' && selectedNode.state === 'action-required') {
63
+ return { type: 'prd-review', node: selectedNode };
64
+ }
65
+ if (selectedNode.lifecycle === 'implementation' && selectedNode.state === 'action-required') {
66
+ return { type: 'tech-review', node: selectedNode };
67
+ }
68
+ if (
69
+ selectedNode.lifecycle === 'review' &&
70
+ (selectedNode.state === 'action-required' || selectedNode.state === 'error')
71
+ ) {
72
+ return { type: 'merge-review', node: selectedNode };
73
+ }
74
+ return { type: 'feature', node: selectedNode };
75
+ }
76
+
77
+ if (selectedRepoNode) {
78
+ return { type: 'repository', data: selectedRepoNode };
79
+ }
80
+
81
+ return null;
82
+ }
@@ -0,0 +1,2 @@
1
+ export { ControlCenterDrawer, type ControlCenterDrawerProps } from './control-center-drawer';
2
+ export { computeDrawerView, type DrawerView } from './drawer-view';
@@ -11,14 +11,10 @@ export interface DrawerActionBarProps {
11
11
  approveIcon?: ReactNode;
12
12
  /** Placeholder for the inline revision input */
13
13
  revisionPlaceholder?: string;
14
- /** Title for the reject feedback dialog */
15
- rejectDialogTitle?: string;
16
14
  /** Whether an approval/processing operation is in flight */
17
15
  isProcessing?: boolean;
18
16
  /** Whether a reject operation is in flight */
19
17
  isRejecting?: boolean;
20
- /** Whether to show the reject button (defaults to true when onReject is provided) */
21
- showRejectButton?: boolean;
22
18
  /** Content rendered between revision input and action buttons (e.g. progress bar) */
23
19
  children?: ReactNode;
24
20
  }
@@ -4,7 +4,7 @@ import { Check } from 'lucide-react';
4
4
  import { DrawerActionBar } from './drawer-action-bar';
5
5
 
6
6
  const meta: Meta<typeof DrawerActionBar> = {
7
- title: 'Composed/DrawerActionBar',
7
+ title: 'Drawers/Base/DrawerActionBar',
8
8
  component: DrawerActionBar,
9
9
  tags: ['autodocs'],
10
10
  parameters: {
@@ -37,7 +37,7 @@ export const WithIcon: Story = {
37
37
  },
38
38
  };
39
39
 
40
- /** With reject button. Plays "reject" sound on reject click, "approve" on approve. */
40
+ /** With revision input single line: chat input, send, approve. */
41
41
  export const WithReject: Story = {
42
42
  args: {
43
43
  onReject: fn().mockName('onReject'),
@@ -45,7 +45,7 @@ export const WithReject: Story = {
45
45
  },
46
46
  };
47
47
 
48
- /** Processing state — buttons disabled, no sounds play. */
48
+ /** Processing state — all controls disabled. */
49
49
  export const Processing: Story = {
50
50
  args: {
51
51
  onReject: fn().mockName('onReject'),
@@ -54,7 +54,7 @@ export const Processing: Story = {
54
54
  },
55
55
  };
56
56
 
57
- /** Rejecting state — buttons disabled. */
57
+ /** Rejecting state — all controls disabled. */
58
58
  export const Rejecting: Story = {
59
59
  args: {
60
60
  onReject: fn().mockName('onReject'),
@@ -63,7 +63,7 @@ export const Rejecting: Story = {
63
63
  },
64
64
  };
65
65
 
66
- /** With revision input and reject button. */
66
+ /** Custom revision placeholder. */
67
67
  export const WithRevisionInput: Story = {
68
68
  args: {
69
69
  onReject: fn().mockName('onReject'),
@@ -71,12 +71,3 @@ export const WithRevisionInput: Story = {
71
71
  revisionPlaceholder: 'Ask AI to revise the plan...',
72
72
  },
73
73
  };
74
-
75
- /** Custom reject dialog title. */
76
- export const CustomRejectTitle: Story = {
77
- args: {
78
- onReject: fn().mockName('onReject'),
79
- approveLabel: 'Approve Plan',
80
- rejectDialogTitle: 'Reject Plan',
81
- },
82
- };
@@ -1,10 +1,9 @@
1
1
  'use client';
2
2
 
3
3
  import { useState } from 'react';
4
- import { X } from 'lucide-react';
4
+ import { Send } from 'lucide-react';
5
5
  import { Button } from '@/components/ui/button';
6
- import { RejectFeedbackDialog } from '@/components/common/reject-feedback-dialog';
7
- import { DrawerRevisionInput } from '@/components/common/drawer-revision-input';
6
+ import { Input } from '@/components/ui/input';
8
7
  import { useSoundAction } from '@/hooks/use-sound-action';
9
8
  import type { DrawerActionBarProps } from './drawer-action-bar-config';
10
9
 
@@ -14,65 +13,73 @@ export function DrawerActionBar({
14
13
  approveLabel,
15
14
  approveIcon,
16
15
  revisionPlaceholder,
17
- rejectDialogTitle,
18
16
  isProcessing = false,
19
17
  isRejecting = false,
20
- showRejectButton = true,
21
18
  children,
22
19
  }: DrawerActionBarProps) {
23
- const [rejectDialogOpen, setRejectDialogOpen] = useState(false);
20
+ const [chatInput, setChatInput] = useState('');
24
21
  const approveSound = useSoundAction('approve');
25
- const rejectSound = useSoundAction('reject');
26
22
  const disabled = isProcessing || isRejecting;
27
23
 
24
+ function handleRevisionSubmit(e: { preventDefault: () => void }) {
25
+ e.preventDefault();
26
+ const text = chatInput.trim();
27
+ if (!text || !onReject) return;
28
+ onReject(text);
29
+ setChatInput('');
30
+ }
31
+
28
32
  return (
29
33
  <div className="border-border shrink-0 border-t">
30
34
  {children}
31
35
  {onReject ? (
32
- <DrawerRevisionInput
33
- onSubmit={onReject}
34
- placeholder={revisionPlaceholder}
35
- disabled={disabled || !onReject}
36
- />
37
- ) : null}
38
- <div className="flex items-center gap-2 px-4 pb-4">
39
- {onReject && showRejectButton ? (
40
- <>
41
- <Button
42
- type="button"
43
- variant="outline"
44
- className="text-destructive hover:text-destructive"
45
- disabled={disabled}
46
- onClick={() => {
47
- rejectSound.play();
48
- setRejectDialogOpen(true);
49
- }}
50
- >
51
- <X className="mr-1.5 h-4 w-4" />
52
- Reject
53
- </Button>
54
- <RejectFeedbackDialog
55
- open={rejectDialogOpen}
56
- onOpenChange={setRejectDialogOpen}
57
- onConfirm={onReject}
58
- isSubmitting={isRejecting}
59
- title={rejectDialogTitle}
60
- />
61
- </>
62
- ) : null}
63
- <Button
64
- type="button"
65
- className="flex-1"
66
- disabled={disabled}
67
- onClick={() => {
68
- approveSound.play();
69
- onApprove();
70
- }}
71
- >
72
- {approveIcon}
73
- {approveLabel}
74
- </Button>
75
- </div>
36
+ <form onSubmit={handleRevisionSubmit} className="flex items-center gap-2 p-4">
37
+ <Input
38
+ type="text"
39
+ placeholder={revisionPlaceholder ?? 'Ask AI to revise...'}
40
+ aria-label={revisionPlaceholder ?? 'Ask AI to revise...'}
41
+ disabled={disabled}
42
+ value={chatInput}
43
+ onChange={(e) => setChatInput(e.target.value)}
44
+ className="flex-1"
45
+ />
46
+ <Button
47
+ type="submit"
48
+ variant="secondary"
49
+ size="icon"
50
+ aria-label="Send"
51
+ disabled={disabled}
52
+ >
53
+ <Send />
54
+ </Button>
55
+ <Button
56
+ type="button"
57
+ disabled={disabled}
58
+ onClick={() => {
59
+ approveSound.play();
60
+ onApprove();
61
+ }}
62
+ >
63
+ {approveIcon}
64
+ {approveLabel}
65
+ </Button>
66
+ </form>
67
+ ) : (
68
+ <div className="flex items-center gap-2 px-4 pb-4">
69
+ <Button
70
+ type="button"
71
+ className="flex-1"
72
+ disabled={disabled}
73
+ onClick={() => {
74
+ approveSound.play();
75
+ onApprove();
76
+ }}
77
+ >
78
+ {approveIcon}
79
+ {approveLabel}
80
+ </Button>
81
+ </div>
82
+ )}
76
83
  </div>
77
84
  );
78
85
  }
@@ -41,7 +41,7 @@ import { Button } from '@/components/ui/button';
41
41
  * with full absolute paths, filenames, and sizes
42
42
  */
43
43
  const meta: Meta<typeof FeatureCreateDrawer> = {
44
- title: 'Composed/FeatureCreateDrawer',
44
+ title: 'Drawers/Feature/FeatureCreateDrawer',
45
45
  component: FeatureCreateDrawer,
46
46
  tags: ['autodocs'],
47
47
  parameters: {
@@ -309,6 +309,47 @@ export const WithWorkflowDefaults: Story = {
309
309
  * In Storybook, the native picker won't work (no backend), but submitted data
310
310
  * would show the paths if files were attached programmatically.
311
311
  */
312
+ /* ---------------------------------------------------------------------------
313
+ * In-drawer story — full page context, starts open
314
+ * ------------------------------------------------------------------------- */
315
+
316
+ function CreateDrawerShellTemplate() {
317
+ const [open, setOpen] = useState(true);
318
+
319
+ return (
320
+ <div style={{ height: '100vh', background: '#f8fafc', padding: '2rem' }}>
321
+ <button
322
+ type="button"
323
+ onClick={() => setOpen(true)}
324
+ style={{ padding: '8px 16px', border: '1px solid #ccc', borderRadius: '6px' }}
325
+ >
326
+ Open Drawer
327
+ </button>
328
+ <FeatureCreateDrawer
329
+ open={open}
330
+ onClose={() => {
331
+ setOpen(false);
332
+ logClose();
333
+ }}
334
+ onSubmit={(data) => {
335
+ logSubmit(data);
336
+ setOpen(false);
337
+ }}
338
+ repositoryPath="/Users/dev/my-repo"
339
+ />
340
+ </div>
341
+ );
342
+ }
343
+
344
+ /** Feature create drawer rendered inside a full-page context — starts open. */
345
+ export const InDrawer: Story = {
346
+ render: () => <CreateDrawerShellTemplate />,
347
+ };
348
+
349
+ /* ---------------------------------------------------------------------------
350
+ * Interactive story — full paths shown in submitted data panel
351
+ * ------------------------------------------------------------------------- */
352
+
312
353
  export const Interactive: Story = {
313
354
  render: function InteractiveRender() {
314
355
  const [open, setOpen] = useState(false);
@@ -22,7 +22,6 @@ import { Textarea } from '@/components/ui/textarea';
22
22
  import { Label } from '@/components/ui/label';
23
23
  import { CheckboxGroup } from '@/components/ui/checkbox-group';
24
24
  import { CheckboxGroupItem } from '@/components/ui/checkbox-group-item';
25
- import { Separator } from '@/components/ui/separator';
26
25
  import { Badge } from '@/components/ui/badge';
27
26
  import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';
28
27
  import type { FileAttachment } from '@shepai/core/infrastructure/services/file-dialog.service';
@@ -87,8 +86,6 @@ export function FeatureCreateDrawer({
87
86
  features,
88
87
  initialParentId,
89
88
  }: FeatureCreateDrawerProps) {
90
- const drawerOpenSound = useSoundAction('drawer-open');
91
- const drawerCloseSound = useSoundAction('drawer-close');
92
89
  const createSound = useSoundAction('create');
93
90
  const defaultGates = workflowDefaults?.approvalGates ?? EMPTY_GATES;
94
91
  const defaultPush = workflowDefaults?.push ?? false;
@@ -102,14 +99,6 @@ export function FeatureCreateDrawer({
102
99
  const [openPr, setOpenPr] = useState(defaultOpenPr);
103
100
  const [parentId, setParentId] = useState<string | undefined>(undefined);
104
101
 
105
- // Play drawer-open sound when the drawer opens
106
- const playDrawerOpen = drawerOpenSound.play;
107
- useEffect(() => {
108
- if (open) {
109
- playDrawerOpen();
110
- }
111
- }, [open, playDrawerOpen]);
112
-
113
102
  // Sync state when workflowDefaults load asynchronously
114
103
  useEffect(() => {
115
104
  if (workflowDefaults) {
@@ -137,10 +126,9 @@ export function FeatureCreateDrawer({
137
126
  }, [defaultGates, defaultPush, defaultOpenPr]);
138
127
 
139
128
  const handleClose = useCallback(() => {
140
- drawerCloseSound.play();
141
129
  resetForm();
142
130
  onClose();
143
- }, [onClose, resetForm, drawerCloseSound]);
131
+ }, [onClose, resetForm]);
144
132
 
145
133
  const handleSubmit = useCallback(
146
134
  (e: React.FormEvent) => {
@@ -227,10 +215,8 @@ export function FeatureCreateDrawer({
227
215
  </div>
228
216
  }
229
217
  >
230
- <Separator />
231
-
232
218
  {/* Form body */}
233
- <div className="p-4">
219
+ <div className="overflow-y-auto p-4">
234
220
  <form id="create-feature-form" onSubmit={handleSubmit} className="flex flex-col gap-4">
235
221
  {/* Feature name */}
236
222
  <div className="flex flex-col gap-1.5">
@@ -3,4 +3,5 @@ export {
3
3
  type FeatureCreateDrawerProps,
4
4
  type FeatureCreatePayload,
5
5
  type FileAttachment,
6
+ type ParentFeatureOption,
6
7
  } from './feature-create-drawer';
@@ -7,7 +7,7 @@ import type { FeatureLifecyclePhase, FeatureNodeState } from '@/components/commo
7
7
  import { Button } from '@/components/ui/button';
8
8
 
9
9
  const meta: Meta<typeof FeatureDrawer> = {
10
- title: 'Composed/FeatureDrawer',
10
+ title: 'Drawers/Feature/FeatureDrawer',
11
11
  component: FeatureDrawer,
12
12
  tags: ['autodocs'],
13
13
  parameters: {
@@ -91,6 +91,23 @@ const errorData: FeatureNodeData = {
91
91
  branch: 'feat/email-service',
92
92
  };
93
93
 
94
+ const reviewInProgressData: FeatureNodeData = {
95
+ name: 'Auth Module',
96
+ description: 'Implement OAuth2 authentication flow',
97
+ featureId: '#f6',
98
+ lifecycle: 'review',
99
+ state: 'running',
100
+ progress: 0,
101
+ agentType: 'claude-code',
102
+ repositoryPath: '/home/user/my-repo',
103
+ branch: 'feat/auth-module',
104
+ pr: {
105
+ url: 'https://github.com/org/repo/pull/17',
106
+ number: 17,
107
+ status: PrStatus.Open,
108
+ },
109
+ };
110
+
94
111
  /* ---------------------------------------------------------------------------
95
112
  * Trigger wrapper — starts closed, click to open
96
113
  * ------------------------------------------------------------------------- */
@@ -112,6 +129,11 @@ function DrawerTrigger({ data, label }: { data: FeatureNodeData; label: string }
112
129
  * Per-state stories
113
130
  * ------------------------------------------------------------------------- */
114
131
 
132
+ /** Feature drawer rendered inside a full-page context — starts open. Primary story. */
133
+ export const Default: Story = {
134
+ render: () => <FeatureDrawerShellTemplate data={runningData} />,
135
+ };
136
+
115
137
  export const Running: Story = {
116
138
  render: () => <DrawerTrigger data={runningData} label="Open Running" />,
117
139
  };
@@ -128,6 +150,11 @@ export const Blocked: Story = {
128
150
  render: () => <DrawerTrigger data={blockedData} label="Open Blocked" />,
129
151
  };
130
152
 
153
+ /** Review lifecycle + running state — matches the look/feel of review pending-action drawers. */
154
+ export const ReviewInProgress: Story = {
155
+ render: () => <DrawerTrigger data={reviewInProgressData} label="Open Review In Progress" />,
156
+ };
157
+
131
158
  export const Error: Story = {
132
159
  render: () => <DrawerTrigger data={errorData} label="Open Error" />,
133
160
  };
@@ -340,7 +367,7 @@ function DrawerTriggerWithDelete({
340
367
  );
341
368
  }
342
369
 
343
- /** FeatureDrawer with a delete button in the footer. */
370
+ /** FeatureDrawer with a delete icon button in the header. */
344
371
  export const WithDeleteButton: Story = {
345
372
  render: () => <DrawerTriggerWithDelete data={doneData} label="Open With Delete" />,
346
373
  };
@@ -406,3 +433,29 @@ export const PrStatusOpen: Story = {
406
433
  export const PrStatusMerged: Story = {
407
434
  render: () => <DrawerTrigger data={doneWithPrData} label="Open PR Status: Merged" />,
408
435
  };
436
+
437
+ /* ---------------------------------------------------------------------------
438
+ * In-drawer story — full page context, starts open
439
+ * ------------------------------------------------------------------------- */
440
+
441
+ function FeatureDrawerShellTemplate({ data }: { data: FeatureNodeData }) {
442
+ const [selected, setSelected] = useState<FeatureNodeData | null>(data);
443
+
444
+ return (
445
+ <div style={{ height: '100vh', background: '#f8fafc', padding: '2rem' }}>
446
+ <button
447
+ type="button"
448
+ onClick={() => setSelected(data)}
449
+ style={{ padding: '8px 16px', border: '1px solid #ccc', borderRadius: '6px' }}
450
+ >
451
+ Open Drawer
452
+ </button>
453
+ <FeatureDrawer selectedNode={selected} onClose={() => setSelected(null)} />
454
+ </div>
455
+ );
456
+ }
457
+
458
+ /** Feature drawer rendered inside a full-page context — starts open. */
459
+ export const InDrawer: Story = {
460
+ render: () => <FeatureDrawerShellTemplate data={runningData} />,
461
+ };