@shepai/cli 1.37.2 → 1.38.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 (532) hide show
  1. package/README.md +1 -1
  2. package/dist/packages/core/src/application/use-cases/features/get-feature-artifact.use-case.d.ts +19 -0
  3. package/dist/packages/core/src/application/use-cases/features/get-feature-artifact.use-case.d.ts.map +1 -0
  4. package/dist/packages/core/src/application/use-cases/features/get-feature-artifact.use-case.js +52 -0
  5. package/dist/packages/core/src/application/use-cases/features/get-research-artifact.use-case.d.ts +19 -0
  6. package/dist/packages/core/src/application/use-cases/features/get-research-artifact.use-case.d.ts.map +1 -0
  7. package/dist/packages/core/src/application/use-cases/features/get-research-artifact.use-case.js +52 -0
  8. package/dist/packages/core/src/domain/factories/spec-yaml-parser.d.ts.map +1 -1
  9. package/dist/packages/core/src/domain/factories/spec-yaml-parser.js +3 -1
  10. package/dist/packages/core/src/domain/generated/output.d.ts +84 -0
  11. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  12. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  13. package/dist/packages/core/src/infrastructure/di/container.js +14 -2
  14. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.d.ts.map +1 -1
  15. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.js +27 -3
  16. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/research.prompt.d.ts.map +1 -1
  17. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/research.prompt.js +14 -1
  18. package/dist/packages/core/src/infrastructure/services/notifications/notification-bus.d.ts +2 -17
  19. package/dist/packages/core/src/infrastructure/services/notifications/notification-bus.d.ts.map +1 -1
  20. package/dist/packages/core/src/infrastructure/services/notifications/notification-bus.js +3 -27
  21. package/dist/src/presentation/cli/commands/feat/show.command.js +2 -2
  22. package/dist/src/presentation/web/app/actions/approve-feature.d.ts +5 -0
  23. package/dist/src/presentation/web/app/actions/approve-feature.d.ts.map +1 -0
  24. package/dist/src/presentation/web/app/actions/approve-feature.js +27 -0
  25. package/dist/src/presentation/web/app/actions/create-feature.d.ts +22 -0
  26. package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -0
  27. package/dist/src/presentation/web/app/actions/create-feature.js +41 -0
  28. package/dist/src/presentation/web/app/actions/delete-feature.d.ts +6 -0
  29. package/dist/src/presentation/web/app/actions/delete-feature.d.ts.map +1 -0
  30. package/dist/src/presentation/web/app/actions/delete-feature.js +16 -0
  31. package/dist/src/presentation/web/app/actions/get-feature-artifact.d.ts +10 -0
  32. package/dist/src/presentation/web/app/actions/get-feature-artifact.d.ts.map +1 -0
  33. package/dist/src/presentation/web/app/actions/get-feature-artifact.js +43 -0
  34. package/dist/src/presentation/web/app/actions/get-research-artifact.d.ts +14 -0
  35. package/dist/src/presentation/web/app/actions/get-research-artifact.d.ts.map +1 -0
  36. package/dist/src/presentation/web/app/actions/get-research-artifact.js +25 -0
  37. package/dist/src/presentation/web/app/actions/open-folder.d.ts +6 -0
  38. package/dist/src/presentation/web/app/actions/open-folder.d.ts.map +1 -0
  39. package/dist/src/presentation/web/app/actions/open-folder.js +39 -0
  40. package/dist/src/presentation/web/app/actions/open-ide.d.ts +12 -0
  41. package/dist/src/presentation/web/app/actions/open-ide.d.ts.map +1 -0
  42. package/dist/src/presentation/web/app/actions/open-ide.js +22 -0
  43. package/dist/src/presentation/web/app/actions/open-shell.d.ts +12 -0
  44. package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -0
  45. package/dist/src/presentation/web/app/actions/open-shell.js +45 -0
  46. package/dist/src/presentation/web/app/actions/pick-folder.d.ts +5 -0
  47. package/dist/src/presentation/web/app/actions/pick-folder.d.ts.map +1 -0
  48. package/dist/src/presentation/web/app/actions/pick-folder.js +13 -0
  49. package/dist/src/presentation/web/app/api/agent-events/route.d.ts +1 -1
  50. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  51. package/dist/src/presentation/web/app/api/agent-events/route.js +2 -9
  52. package/dist/src/presentation/web/app/api/dialog/pick-files/route.d.ts +1 -9
  53. package/dist/src/presentation/web/app/api/dialog/pick-files/route.d.ts.map +1 -1
  54. package/dist/src/presentation/web/app/api/dialog/pick-files/route.js +3 -6
  55. package/dist/src/presentation/web/app/page.d.ts.map +1 -1
  56. package/dist/src/presentation/web/app/page.js +1 -0
  57. package/dist/src/presentation/web/components/common/add-repository-node/pick-folder.d.ts +1 -1
  58. package/dist/src/presentation/web/components/common/add-repository-node/pick-folder.d.ts.map +1 -1
  59. package/dist/src/presentation/web/components/common/add-repository-node/pick-folder.js +6 -7
  60. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +1 -1
  61. package/dist/src/presentation/web/components/common/feature-create-drawer/pick-files.d.ts +1 -1
  62. package/dist/src/presentation/web/components/common/feature-create-drawer/pick-files.d.ts.map +1 -1
  63. package/dist/src/presentation/web/components/common/feature-create-drawer/pick-files.js +6 -7
  64. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts.map +1 -1
  65. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.js +7 -7
  66. package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.d.ts +4 -0
  67. package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.d.ts.map +1 -1
  68. package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.js +52 -14
  69. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.d.ts.map +1 -1
  70. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.js +2 -2
  71. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +2 -0
  72. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  73. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  74. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +33 -2
  75. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
  76. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +10 -0
  77. package/dist/src/presentation/web/components/common/index.d.ts +3 -0
  78. package/dist/src/presentation/web/components/common/index.d.ts.map +1 -1
  79. package/dist/src/presentation/web/components/common/index.js +3 -0
  80. package/dist/src/presentation/web/components/common/notification-permission-banner/index.d.ts +2 -0
  81. package/dist/src/presentation/web/components/common/notification-permission-banner/index.d.ts.map +1 -0
  82. package/dist/src/presentation/web/components/common/notification-permission-banner/index.js +1 -0
  83. package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.d.ts +2 -0
  84. package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.d.ts.map +1 -0
  85. package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.js +33 -0
  86. package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.d.ts +6 -0
  87. package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.d.ts.map +1 -0
  88. package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.js +24 -0
  89. package/dist/src/presentation/web/components/common/open-action-menu/config.d.ts +10 -0
  90. package/dist/src/presentation/web/components/common/open-action-menu/config.d.ts.map +1 -0
  91. package/dist/src/presentation/web/components/common/open-action-menu/config.js +1 -0
  92. package/dist/src/presentation/web/components/common/open-action-menu/index.d.ts +3 -0
  93. package/dist/src/presentation/web/components/common/open-action-menu/index.d.ts.map +1 -0
  94. package/dist/src/presentation/web/components/common/open-action-menu/index.js +1 -0
  95. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.d.ts +3 -0
  96. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.d.ts.map +1 -0
  97. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.js +18 -0
  98. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.d.ts +14 -0
  99. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.d.ts.map +1 -0
  100. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.js +54 -0
  101. package/dist/src/presentation/web/components/common/prd-questionnaire/index.d.ts +4 -0
  102. package/dist/src/presentation/web/components/common/prd-questionnaire/index.d.ts.map +1 -0
  103. package/dist/src/presentation/web/components/common/prd-questionnaire/index.js +2 -0
  104. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-config.d.ts +41 -0
  105. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-config.d.ts.map +1 -0
  106. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-config.js +1 -0
  107. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.d.ts +3 -0
  108. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.d.ts.map +1 -0
  109. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.js +7 -0
  110. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.d.ts +3 -0
  111. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.d.ts.map +1 -0
  112. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.js +42 -0
  113. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts +26 -0
  114. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts.map +1 -0
  115. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.js +267 -0
  116. package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
  117. package/dist/src/presentation/web/components/common/repository-node/repository-node.js +2 -2
  118. package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.d.ts +3 -0
  119. package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.d.ts.map +1 -1
  120. package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.js +51 -14
  121. package/dist/src/presentation/web/components/common/review-drawer-shell/index.d.ts +3 -0
  122. package/dist/src/presentation/web/components/common/review-drawer-shell/index.d.ts.map +1 -0
  123. package/dist/src/presentation/web/components/common/review-drawer-shell/index.js +1 -0
  124. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell-config.d.ts +24 -0
  125. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell-config.d.ts.map +1 -0
  126. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell-config.js +1 -0
  127. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.d.ts +3 -0
  128. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.d.ts.map +1 -0
  129. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.js +17 -0
  130. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.d.ts +14 -0
  131. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.d.ts.map +1 -0
  132. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.js +33 -0
  133. package/dist/src/presentation/web/components/common/tech-decisions-review/index.d.ts +4 -0
  134. package/dist/src/presentation/web/components/common/tech-decisions-review/index.d.ts.map +1 -0
  135. package/dist/src/presentation/web/components/common/tech-decisions-review/index.js +2 -0
  136. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.d.ts +3 -0
  137. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.d.ts.map +1 -0
  138. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.js +7 -0
  139. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review-config.d.ts +39 -0
  140. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review-config.d.ts.map +1 -0
  141. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review-config.js +1 -0
  142. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.d.ts +3 -0
  143. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.d.ts.map +1 -0
  144. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.js +39 -0
  145. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts +22 -0
  146. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts.map +1 -0
  147. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.js +108 -0
  148. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  149. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +133 -2
  150. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  151. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +28 -19
  152. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
  153. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +6 -1
  154. package/dist/src/presentation/web/components/ui/drawer.d.ts.map +1 -1
  155. package/dist/src/presentation/web/components/ui/drawer.js +3 -1
  156. package/dist/src/presentation/web/components/ui/dropdown-menu.d.ts +28 -0
  157. package/dist/src/presentation/web/components/ui/dropdown-menu.d.ts.map +1 -0
  158. package/dist/src/presentation/web/components/ui/dropdown-menu.js +33 -0
  159. package/dist/src/presentation/web/hooks/agent-events-provider.d.ts +13 -0
  160. package/dist/src/presentation/web/hooks/agent-events-provider.d.ts.map +1 -0
  161. package/dist/src/presentation/web/hooks/agent-events-provider.js +20 -0
  162. package/dist/src/presentation/web/hooks/use-agent-events.d.ts.map +1 -1
  163. package/dist/src/presentation/web/hooks/use-agent-events.js +21 -1
  164. package/dist/src/presentation/web/hooks/use-notifications.d.ts +1 -5
  165. package/dist/src/presentation/web/hooks/use-notifications.d.ts.map +1 -1
  166. package/dist/src/presentation/web/hooks/use-notifications.js +5 -10
  167. package/dist/src/presentation/web/next.config.d.ts.map +1 -1
  168. package/dist/src/presentation/web/next.config.js +5 -0
  169. package/dist/tsconfig.build.tsbuildinfo +1 -1
  170. package/package.json +2 -1
  171. package/web/.next/BUILD_ID +1 -1
  172. package/web/.next/app-path-routes-manifest.json +0 -5
  173. package/web/.next/build-manifest.json +6 -6
  174. package/web/.next/cache/.previewinfo +1 -1
  175. package/web/.next/cache/.rscinfo +1 -1
  176. package/web/.next/cache/.tsbuildinfo +1 -1
  177. package/web/.next/cache/config.json +3 -3
  178. package/web/.next/fallback-build-manifest.json +2 -2
  179. package/web/.next/prerender-manifest.json +3 -3
  180. package/web/.next/required-server-files.js +4 -4
  181. package/web/.next/required-server-files.json +4 -4
  182. package/web/.next/routes-manifest.json +1 -34
  183. package/web/.next/server/app/_global-error/page/build-manifest.json +4 -4
  184. package/web/.next/server/app/_global-error/page.js +1 -1
  185. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  186. package/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  187. package/web/.next/server/app/_global-error.html +2 -2
  188. package/web/.next/server/app/_global-error.rsc +7 -7
  189. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  190. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  191. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
  192. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  193. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  194. package/web/.next/server/app/_not-found/page/build-manifest.json +4 -4
  195. package/web/.next/server/app/_not-found/page.js +1 -1
  196. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  197. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  198. package/web/.next/server/app/api/agent-events/route.js +1 -1
  199. package/web/.next/server/app/api/agent-events/route.js.nft.json +1 -1
  200. package/web/.next/server/app/api/dialog/pick-files/route.js +2 -2
  201. package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
  202. package/web/.next/server/app/page/build-manifest.json +4 -4
  203. package/web/.next/server/app/page/server-reference-manifest.json +137 -1
  204. package/web/.next/server/app/page.js +2 -2
  205. package/web/.next/server/app/page.js.nft.json +1 -1
  206. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  207. package/web/.next/server/app/version/page/build-manifest.json +4 -4
  208. package/web/.next/server/app/version/page.js +1 -1
  209. package/web/.next/server/app/version/page.js.nft.json +1 -1
  210. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  211. package/web/.next/server/app-paths-manifest.json +0 -5
  212. package/web/.next/server/chunks/{403f9_next_567de315._.js → 403f9_next_435614de._.js} +7 -6
  213. package/web/.next/server/chunks/403f9_next_435614de._.js.map +1 -0
  214. package/web/.next/server/chunks/[externals]__ba6223e5._.js +3 -0
  215. package/web/.next/server/chunks/[root-of-the-server]__7d5c8b74._.js +6 -0
  216. package/web/.next/server/chunks/[root-of-the-server]__7d5c8b74._.js.map +1 -0
  217. package/web/.next/server/chunks/ssr/[externals]_node:path_d28a9bfe._.js +3 -0
  218. package/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js +12 -0
  219. package/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js.map +1 -0
  220. package/web/.next/server/chunks/ssr/[root-of-the-server]__19354aea._.js +9 -0
  221. package/web/.next/server/chunks/ssr/[root-of-the-server]__19354aea._.js.map +1 -0
  222. package/web/.next/server/chunks/ssr/{[root-of-the-server]__685eaa45._.js → [root-of-the-server]__32472b89._.js} +2 -2
  223. package/web/.next/server/chunks/ssr/{[root-of-the-server]__a21ef212._.js → [root-of-the-server]__d21f0894._.js} +2 -2
  224. package/web/.next/server/chunks/ssr/[root-of-the-server]__d21f0894._.js.map +1 -0
  225. package/web/.next/server/chunks/ssr/[root-of-the-server]__e1c44885._.js +3 -0
  226. package/web/.next/server/chunks/ssr/[root-of-the-server]__f12b60be._.js +1 -1
  227. package/web/.next/server/chunks/ssr/[root-of-the-server]__f47a461b._.js +3 -0
  228. package/web/.next/server/chunks/ssr/_285de9aa._.js +3 -0
  229. package/web/.next/server/chunks/ssr/_285de9aa._.js.map +1 -0
  230. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/_94d22d37._.js → server/chunks/ssr/_b1f2507a._.js} +4 -4
  231. package/web/.next/server/chunks/ssr/_b1f2507a._.js.map +1 -0
  232. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_version_version-page-client_tsx_fe9db753._.js +1 -1
  233. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_version_version-page-client_tsx_fe9db753._.js.map +1 -1
  234. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  235. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  236. package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_badge_tsx_964c2a3b._.js +1 -1
  237. package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_badge_tsx_964c2a3b._.js.map +1 -1
  238. package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js +1 -1
  239. package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js.map +1 -1
  240. package/web/.next/server/middleware-build-manifest.js +4 -4
  241. package/web/.next/server/pages/500.html +2 -2
  242. package/web/.next/server/server-reference-manifest.js +1 -1
  243. package/web/.next/server/server-reference-manifest.json +138 -2
  244. package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
  245. package/web/.next/standalone/src/presentation/web/.next/app-path-routes-manifest.json +0 -5
  246. package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +6 -6
  247. package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
  248. package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +4 -4
  249. package/web/.next/standalone/src/presentation/web/.next/routes-manifest.json +1 -34
  250. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page/build-manifest.json +4 -4
  251. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page.js +1 -1
  252. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  253. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  254. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
  255. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +7 -7
  256. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  257. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  258. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
  259. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  260. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  261. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/build-manifest.json +4 -4
  262. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js +1 -1
  263. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  264. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  265. package/web/.next/standalone/src/presentation/web/.next/server/app/api/agent-events/route.js +1 -1
  266. package/web/.next/standalone/src/presentation/web/.next/server/app/api/agent-events/route.js.nft.json +1 -1
  267. package/web/.next/standalone/src/presentation/web/.next/server/app/api/dialog/pick-files/route.js +2 -2
  268. package/web/.next/standalone/src/presentation/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
  269. package/web/.next/standalone/src/presentation/web/.next/server/app/page/build-manifest.json +4 -4
  270. package/web/.next/standalone/src/presentation/web/.next/server/app/page/server-reference-manifest.json +137 -1
  271. package/web/.next/standalone/src/presentation/web/.next/server/app/page.js +2 -2
  272. package/web/.next/standalone/src/presentation/web/.next/server/app/page.js.nft.json +1 -1
  273. package/web/.next/standalone/src/presentation/web/.next/server/app/page_client-reference-manifest.js +1 -1
  274. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/build-manifest.json +4 -4
  275. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js +1 -1
  276. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
  277. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  278. package/web/.next/standalone/src/presentation/web/.next/server/app-paths-manifest.json +0 -5
  279. package/web/.next/standalone/src/presentation/web/.next/server/chunks/{403f9_next_567de315._.js → 403f9_next_435614de._.js} +7 -6
  280. package/web/.next/standalone/src/presentation/web/.next/server/chunks/[externals]__ba6223e5._.js +3 -0
  281. package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__7d5c8b74._.js +6 -0
  282. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[externals]_node:path_d28a9bfe._.js +3 -0
  283. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js +12 -0
  284. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__19354aea._.js +9 -0
  285. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{[root-of-the-server]__685eaa45._.js → [root-of-the-server]__32472b89._.js} +2 -2
  286. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{[root-of-the-server]__a21ef212._.js → [root-of-the-server]__d21f0894._.js} +2 -2
  287. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__e1c44885._.js +3 -0
  288. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__f12b60be._.js +1 -1
  289. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__f47a461b._.js +3 -0
  290. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_285de9aa._.js +3 -0
  291. package/web/.next/{server/chunks/ssr/_94d22d37._.js → standalone/src/presentation/web/.next/server/chunks/ssr/_b1f2507a._.js} +4 -4
  292. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_version_version-page-client_tsx_fe9db753._.js +1 -1
  293. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  294. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_ui_badge_tsx_964c2a3b._.js +1 -1
  295. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js +1 -1
  296. package/web/.next/standalone/src/presentation/web/.next/server/middleware-build-manifest.js +4 -4
  297. package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
  298. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
  299. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +138 -2
  300. package/web/.next/standalone/src/presentation/web/app/actions/approve-feature.ts +38 -0
  301. package/web/.next/standalone/src/presentation/web/app/actions/create-feature.ts +81 -0
  302. package/web/.next/standalone/src/presentation/web/app/actions/delete-feature.ts +22 -0
  303. package/web/.next/standalone/src/presentation/web/app/actions/get-feature-artifact.ts +55 -0
  304. package/web/.next/standalone/src/presentation/web/app/actions/get-research-artifact.ts +42 -0
  305. package/web/.next/standalone/src/presentation/web/app/actions/open-folder.ts +44 -0
  306. package/web/.next/standalone/src/presentation/web/app/actions/open-ide.ts +37 -0
  307. package/web/.next/standalone/src/presentation/web/app/{api/shell/open/route.ts → actions/open-shell.ts} +19 -27
  308. package/web/.next/standalone/src/presentation/web/app/{api/dialog/pick-folder/route.ts → actions/pick-folder.ts} +5 -9
  309. package/web/.next/standalone/src/presentation/web/app/api/agent-events/route.ts +2 -14
  310. package/web/.next/standalone/src/presentation/web/app/api/dialog/pick-files/route.ts +8 -10
  311. package/web/.next/standalone/src/presentation/web/app/globals.css +10 -0
  312. package/web/.next/standalone/src/presentation/web/app/page.tsx +1 -0
  313. package/web/.next/standalone/src/presentation/web/components/common/add-repository-node/pick-folder.ts +7 -7
  314. package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx +1 -1
  315. package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/pick-files.ts +6 -7
  316. package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/feature-drawer.tsx +15 -19
  317. package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/use-feature-actions.ts +61 -17
  318. package/web/.next/standalone/src/presentation/web/components/common/feature-node/agent-type-icons.tsx +10 -2
  319. package/web/.next/standalone/src/presentation/web/components/common/feature-node/feature-node-state-config.ts +2 -0
  320. package/web/.next/standalone/src/presentation/web/components/common/feature-node/feature-node.stories.tsx +10 -0
  321. package/web/.next/standalone/src/presentation/web/components/common/feature-node/feature-node.tsx +38 -7
  322. package/web/.next/standalone/src/presentation/web/components/common/index.ts +18 -0
  323. package/web/.next/standalone/src/presentation/web/components/common/notification-permission-banner/index.ts +1 -0
  324. package/web/.next/standalone/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.tsx +52 -0
  325. package/web/.next/standalone/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.tsx +55 -0
  326. package/web/.next/standalone/src/presentation/web/components/common/open-action-menu/config.ts +10 -0
  327. package/web/.next/standalone/src/presentation/web/components/common/open-action-menu/index.ts +2 -0
  328. package/web/.next/standalone/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.tsx +64 -0
  329. package/web/.next/standalone/src/presentation/web/components/common/open-action-menu/open-action-menu.tsx +111 -0
  330. package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/index.ts +10 -0
  331. package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-config.ts +48 -0
  332. package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.tsx +34 -0
  333. package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.tsx +384 -0
  334. package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.tsx +216 -0
  335. package/web/.next/standalone/src/presentation/web/components/common/repository-node/repository-node.tsx +20 -1
  336. package/web/.next/standalone/src/presentation/web/components/common/repository-node/use-repository-actions.ts +83 -20
  337. package/web/.next/standalone/src/presentation/web/components/common/review-drawer-shell/index.ts +2 -0
  338. package/web/.next/standalone/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell-config.ts +24 -0
  339. package/web/.next/standalone/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.tsx +85 -0
  340. package/web/.next/standalone/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.tsx +139 -0
  341. package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/index.ts +8 -0
  342. package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.tsx +34 -0
  343. package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review-config.ts +42 -0
  344. package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.tsx +177 -0
  345. package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.tsx +188 -0
  346. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +189 -2
  347. package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +28 -19
  348. package/web/.next/standalone/src/presentation/web/components/layouts/app-shell/app-shell.tsx +11 -1
  349. package/web/.next/standalone/src/presentation/web/components/ui/drawer.tsx +4 -2
  350. package/web/.next/standalone/src/presentation/web/components/ui/dropdown-menu.tsx +187 -0
  351. package/web/.next/standalone/src/presentation/web/hooks/agent-events-provider.tsx +32 -0
  352. package/web/.next/standalone/src/presentation/web/hooks/use-agent-events.ts +23 -1
  353. package/web/.next/standalone/src/presentation/web/hooks/use-notifications.ts +5 -16
  354. package/web/.next/standalone/src/presentation/web/next.config.ts +6 -0
  355. package/web/.next/standalone/src/presentation/web/package.json +2 -1
  356. package/web/.next/standalone/src/presentation/web/server.js +1 -1
  357. package/web/.next/static/chunks/{70993ebedee7eab0.js → 084314470f2144d2.js} +1 -1
  358. package/web/.next/static/chunks/36bb03a0314fb990.css +2 -0
  359. package/web/.next/static/chunks/83ff3b6bbee54bce.js +1 -0
  360. package/web/.next/static/chunks/{fe5e04e707adb039.js → 8c0b96eb95dd31a9.js} +1 -1
  361. package/web/.next/static/chunks/{df7d29673e0ac11d.js → b13aa397579082e7.js} +1 -1
  362. package/web/.next/static/chunks/{f3b4460b1496ef52.js → cfe4dc9904fcfddb.js} +1 -1
  363. package/web/.next/static/chunks/e21d644e5a584136.js +1 -0
  364. package/web/.next/static/chunks/eca1959e083d0a45.js +10 -0
  365. package/web/.next/static/chunks/f9519a5c455143e6.js +1 -0
  366. package/web/.next/static/chunks/{c4b1e95eceaa36ca.js → fe6427c156bda6b0.js} +2 -2
  367. package/web/.next/static/chunks/{37bc3e283f734dca.js → fe70e73feb07bcfd.js} +1 -1
  368. package/web/.next/static/chunks/{turbopack-a5a88a85e7ac8e8d.js → turbopack-35ff53de4dab1e56.js} +2 -2
  369. package/web/.next/trace +1 -1
  370. package/web/.next/trace-build +1 -1
  371. package/web/.next/types/link.d.ts +1 -6
  372. package/web/.next/types/routes.d.ts +1 -6
  373. package/web/.next/types/validator.ts +0 -45
  374. package/web/package.json +2 -1
  375. package/dist/src/presentation/web/app/api/dialog/pick-folder/route.d.ts +0 -11
  376. package/dist/src/presentation/web/app/api/dialog/pick-folder/route.d.ts.map +0 -1
  377. package/dist/src/presentation/web/app/api/dialog/pick-folder/route.js +0 -16
  378. package/dist/src/presentation/web/app/api/features/[id]/route.d.ts +0 -11
  379. package/dist/src/presentation/web/app/api/features/[id]/route.d.ts.map +0 -1
  380. package/dist/src/presentation/web/app/api/features/[id]/route.js +0 -17
  381. package/dist/src/presentation/web/app/api/features/create/route.d.ts +0 -5
  382. package/dist/src/presentation/web/app/api/features/create/route.d.ts.map +0 -1
  383. package/dist/src/presentation/web/app/api/features/create/route.js +0 -65
  384. package/dist/src/presentation/web/app/api/ide/open/route.d.ts +0 -9
  385. package/dist/src/presentation/web/app/api/ide/open/route.d.ts.map +0 -1
  386. package/dist/src/presentation/web/app/api/ide/open/route.js +0 -36
  387. package/dist/src/presentation/web/app/api/shell/open/route.d.ts +0 -9
  388. package/dist/src/presentation/web/app/api/shell/open/route.d.ts.map +0 -1
  389. package/dist/src/presentation/web/app/api/shell/open/route.js +0 -57
  390. package/dist/src/presentation/web/app/api/validate-toolbar-input.d.ts +0 -18
  391. package/dist/src/presentation/web/app/api/validate-toolbar-input.d.ts.map +0 -1
  392. package/dist/src/presentation/web/app/api/validate-toolbar-input.js +0 -29
  393. package/web/.next/server/app/api/dialog/pick-folder/route/app-paths-manifest.json +0 -3
  394. package/web/.next/server/app/api/dialog/pick-folder/route/build-manifest.json +0 -11
  395. package/web/.next/server/app/api/dialog/pick-folder/route/server-reference-manifest.json +0 -4
  396. package/web/.next/server/app/api/dialog/pick-folder/route.js +0 -7
  397. package/web/.next/server/app/api/dialog/pick-folder/route.js.map +0 -5
  398. package/web/.next/server/app/api/dialog/pick-folder/route.js.nft.json +0 -1
  399. package/web/.next/server/app/api/dialog/pick-folder/route_client-reference-manifest.js +0 -2
  400. package/web/.next/server/app/api/features/[id]/route/app-paths-manifest.json +0 -3
  401. package/web/.next/server/app/api/features/[id]/route/build-manifest.json +0 -11
  402. package/web/.next/server/app/api/features/[id]/route/server-reference-manifest.json +0 -4
  403. package/web/.next/server/app/api/features/[id]/route.js +0 -7
  404. package/web/.next/server/app/api/features/[id]/route.js.map +0 -5
  405. package/web/.next/server/app/api/features/[id]/route.js.nft.json +0 -1
  406. package/web/.next/server/app/api/features/[id]/route_client-reference-manifest.js +0 -2
  407. package/web/.next/server/app/api/features/create/route/app-paths-manifest.json +0 -3
  408. package/web/.next/server/app/api/features/create/route/build-manifest.json +0 -11
  409. package/web/.next/server/app/api/features/create/route/server-reference-manifest.json +0 -4
  410. package/web/.next/server/app/api/features/create/route.js +0 -7
  411. package/web/.next/server/app/api/features/create/route.js.map +0 -5
  412. package/web/.next/server/app/api/features/create/route.js.nft.json +0 -1
  413. package/web/.next/server/app/api/features/create/route_client-reference-manifest.js +0 -2
  414. package/web/.next/server/app/api/ide/open/route/app-paths-manifest.json +0 -3
  415. package/web/.next/server/app/api/ide/open/route/build-manifest.json +0 -11
  416. package/web/.next/server/app/api/ide/open/route/server-reference-manifest.json +0 -4
  417. package/web/.next/server/app/api/ide/open/route.js +0 -7
  418. package/web/.next/server/app/api/ide/open/route.js.map +0 -5
  419. package/web/.next/server/app/api/ide/open/route.js.nft.json +0 -1
  420. package/web/.next/server/app/api/ide/open/route_client-reference-manifest.js +0 -2
  421. package/web/.next/server/app/api/shell/open/route/app-paths-manifest.json +0 -3
  422. package/web/.next/server/app/api/shell/open/route/build-manifest.json +0 -11
  423. package/web/.next/server/app/api/shell/open/route/server-reference-manifest.json +0 -4
  424. package/web/.next/server/app/api/shell/open/route.js +0 -7
  425. package/web/.next/server/app/api/shell/open/route.js.map +0 -5
  426. package/web/.next/server/app/api/shell/open/route.js.nft.json +0 -1
  427. package/web/.next/server/app/api/shell/open/route_client-reference-manifest.js +0 -2
  428. package/web/.next/server/chunks/403f9_next_567de315._.js.map +0 -1
  429. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_dialog_pick-folder_route_actions_375ed12f.js +0 -3
  430. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_features_[id]_route_actions_03b9a4b5.js +0 -3
  431. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_features_create_route_actions_de49a114.js +0 -3
  432. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_features_create_route_actions_de49a114.js.map +0 -1
  433. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_shell_open_route_actions_814dc5b6.js +0 -3
  434. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_shell_open_route_actions_814dc5b6.js.map +0 -1
  435. package/web/.next/server/chunks/[root-of-the-server]__04ae3a77._.js +0 -3
  436. package/web/.next/server/chunks/[root-of-the-server]__04ae3a77._.js.map +0 -1
  437. package/web/.next/server/chunks/[root-of-the-server]__3d63a020._.js +0 -8
  438. package/web/.next/server/chunks/[root-of-the-server]__3d63a020._.js.map +0 -1
  439. package/web/.next/server/chunks/[root-of-the-server]__a6bf88cc._.js +0 -4
  440. package/web/.next/server/chunks/[root-of-the-server]__a6bf88cc._.js.map +0 -1
  441. package/web/.next/server/chunks/[root-of-the-server]__acfd2769._.js +0 -3
  442. package/web/.next/server/chunks/[root-of-the-server]__acfd2769._.js.map +0 -1
  443. package/web/.next/server/chunks/[root-of-the-server]__ec87d735._.js +0 -3
  444. package/web/.next/server/chunks/[root-of-the-server]__ec87d735._.js.map +0 -1
  445. package/web/.next/server/chunks/[root-of-the-server]__ecaf05bc._.js +0 -3
  446. package/web/.next/server/chunks/[root-of-the-server]__ecaf05bc._.js.map +0 -1
  447. package/web/.next/server/chunks/[root-of-the-server]__f32c280c._.js +0 -3
  448. package/web/.next/server/chunks/[root-of-the-server]__f32c280c._.js.map +0 -1
  449. package/web/.next/server/chunks/b1a17_presentation_web__next-internal_server_app_api_ide_open_route_actions_9fe6e1cd.js +0 -3
  450. package/web/.next/server/chunks/b1a17_presentation_web__next-internal_server_app_api_ide_open_route_actions_9fe6e1cd.js.map +0 -1
  451. package/web/.next/server/chunks/ssr/[root-of-the-server]__1eade43f._.js +0 -3
  452. package/web/.next/server/chunks/ssr/[root-of-the-server]__1eade43f._.js.map +0 -1
  453. package/web/.next/server/chunks/ssr/[root-of-the-server]__97377864._.js +0 -3
  454. package/web/.next/server/chunks/ssr/[root-of-the-server]__a21ef212._.js.map +0 -1
  455. package/web/.next/server/chunks/ssr/[root-of-the-server]__f285e474._.js +0 -3
  456. package/web/.next/server/chunks/ssr/_09afa42a._.js +0 -10
  457. package/web/.next/server/chunks/ssr/_09afa42a._.js.map +0 -1
  458. package/web/.next/server/chunks/ssr/_4676cf52._.js +0 -3
  459. package/web/.next/server/chunks/ssr/_4676cf52._.js.map +0 -1
  460. package/web/.next/server/chunks/ssr/_94d22d37._.js.map +0 -1
  461. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_page_actions_a4e3cb6f.js +0 -3
  462. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_page_actions_a4e3cb6f.js.map +0 -1
  463. package/web/.next/standalone/src/presentation/web/.next/server/app/api/dialog/pick-folder/route/app-paths-manifest.json +0 -3
  464. package/web/.next/standalone/src/presentation/web/.next/server/app/api/dialog/pick-folder/route/build-manifest.json +0 -11
  465. package/web/.next/standalone/src/presentation/web/.next/server/app/api/dialog/pick-folder/route/server-reference-manifest.json +0 -4
  466. package/web/.next/standalone/src/presentation/web/.next/server/app/api/dialog/pick-folder/route.js +0 -7
  467. package/web/.next/standalone/src/presentation/web/.next/server/app/api/dialog/pick-folder/route.js.map +0 -5
  468. package/web/.next/standalone/src/presentation/web/.next/server/app/api/dialog/pick-folder/route.js.nft.json +0 -1
  469. package/web/.next/standalone/src/presentation/web/.next/server/app/api/dialog/pick-folder/route_client-reference-manifest.js +0 -2
  470. package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/[id]/route/app-paths-manifest.json +0 -3
  471. package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/[id]/route/build-manifest.json +0 -11
  472. package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/[id]/route/server-reference-manifest.json +0 -4
  473. package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/[id]/route.js +0 -7
  474. package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/[id]/route.js.map +0 -5
  475. package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/[id]/route.js.nft.json +0 -1
  476. package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/[id]/route_client-reference-manifest.js +0 -2
  477. package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/create/route/app-paths-manifest.json +0 -3
  478. package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/create/route/build-manifest.json +0 -11
  479. package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/create/route/server-reference-manifest.json +0 -4
  480. package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/create/route.js +0 -7
  481. package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/create/route.js.map +0 -5
  482. package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/create/route.js.nft.json +0 -1
  483. package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/create/route_client-reference-manifest.js +0 -2
  484. package/web/.next/standalone/src/presentation/web/.next/server/app/api/ide/open/route/app-paths-manifest.json +0 -3
  485. package/web/.next/standalone/src/presentation/web/.next/server/app/api/ide/open/route/build-manifest.json +0 -11
  486. package/web/.next/standalone/src/presentation/web/.next/server/app/api/ide/open/route/server-reference-manifest.json +0 -4
  487. package/web/.next/standalone/src/presentation/web/.next/server/app/api/ide/open/route.js +0 -7
  488. package/web/.next/standalone/src/presentation/web/.next/server/app/api/ide/open/route.js.map +0 -5
  489. package/web/.next/standalone/src/presentation/web/.next/server/app/api/ide/open/route.js.nft.json +0 -1
  490. package/web/.next/standalone/src/presentation/web/.next/server/app/api/ide/open/route_client-reference-manifest.js +0 -2
  491. package/web/.next/standalone/src/presentation/web/.next/server/app/api/shell/open/route/app-paths-manifest.json +0 -3
  492. package/web/.next/standalone/src/presentation/web/.next/server/app/api/shell/open/route/build-manifest.json +0 -11
  493. package/web/.next/standalone/src/presentation/web/.next/server/app/api/shell/open/route/server-reference-manifest.json +0 -4
  494. package/web/.next/standalone/src/presentation/web/.next/server/app/api/shell/open/route.js +0 -7
  495. package/web/.next/standalone/src/presentation/web/.next/server/app/api/shell/open/route.js.map +0 -5
  496. package/web/.next/standalone/src/presentation/web/.next/server/app/api/shell/open/route.js.nft.json +0 -1
  497. package/web/.next/standalone/src/presentation/web/.next/server/app/api/shell/open/route_client-reference-manifest.js +0 -2
  498. package/web/.next/standalone/src/presentation/web/.next/server/chunks/744ca_web__next-internal_server_app_api_dialog_pick-folder_route_actions_375ed12f.js +0 -3
  499. package/web/.next/standalone/src/presentation/web/.next/server/chunks/744ca_web__next-internal_server_app_api_features_[id]_route_actions_03b9a4b5.js +0 -3
  500. package/web/.next/standalone/src/presentation/web/.next/server/chunks/744ca_web__next-internal_server_app_api_features_create_route_actions_de49a114.js +0 -3
  501. package/web/.next/standalone/src/presentation/web/.next/server/chunks/744ca_web__next-internal_server_app_api_shell_open_route_actions_814dc5b6.js +0 -3
  502. package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__04ae3a77._.js +0 -3
  503. package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__3d63a020._.js +0 -8
  504. package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__a6bf88cc._.js +0 -4
  505. package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__acfd2769._.js +0 -3
  506. package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__ec87d735._.js +0 -3
  507. package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__ecaf05bc._.js +0 -3
  508. package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__f32c280c._.js +0 -3
  509. package/web/.next/standalone/src/presentation/web/.next/server/chunks/b1a17_presentation_web__next-internal_server_app_api_ide_open_route_actions_9fe6e1cd.js +0 -3
  510. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__1eade43f._.js +0 -3
  511. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__97377864._.js +0 -3
  512. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__f285e474._.js +0 -3
  513. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_09afa42a._.js +0 -10
  514. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_4676cf52._.js +0 -3
  515. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_page_actions_a4e3cb6f.js +0 -3
  516. package/web/.next/standalone/src/presentation/web/app/api/features/[id]/route.ts +0 -20
  517. package/web/.next/standalone/src/presentation/web/app/api/features/create/route.ts +0 -103
  518. package/web/.next/standalone/src/presentation/web/app/api/ide/open/route.ts +0 -44
  519. package/web/.next/standalone/src/presentation/web/app/api/validate-toolbar-input.ts +0 -46
  520. package/web/.next/static/chunks/54743561bbaa307a.js +0 -8
  521. package/web/.next/static/chunks/74f27128e5fbfe52.css +0 -2
  522. package/web/.next/static/chunks/9993505b2a26c454.js +0 -1
  523. package/web/.next/static/chunks/c95b4cf170b7f301.js +0 -1
  524. package/web/.next/static/chunks/e78d1b265b8110c3.js +0 -1
  525. /package/web/.next/server/chunks/{744ca_web__next-internal_server_app_api_dialog_pick-folder_route_actions_375ed12f.js.map → [externals]__ba6223e5._.js.map} +0 -0
  526. /package/web/.next/server/chunks/{744ca_web__next-internal_server_app_api_features_[id]_route_actions_03b9a4b5.js.map → ssr/[externals]_node:path_d28a9bfe._.js.map} +0 -0
  527. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__685eaa45._.js.map → [root-of-the-server]__32472b89._.js.map} +0 -0
  528. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__f285e474._.js.map → [root-of-the-server]__e1c44885._.js.map} +0 -0
  529. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__97377864._.js.map → [root-of-the-server]__f47a461b._.js.map} +0 -0
  530. /package/web/.next/static/{AaXDy79mMK8ywoCbOquJB → yvV-GEMagQiZhZAF0YqQs}/_buildManifest.js +0 -0
  531. /package/web/.next/static/{AaXDy79mMK8ywoCbOquJB → yvV-GEMagQiZhZAF0YqQs}/_clientMiddlewareManifest.json +0 -0
  532. /package/web/.next/static/{AaXDy79mMK8ywoCbOquJB → yvV-GEMagQiZhZAF0YqQs}/_ssgManifest.js +0 -0
@@ -0,0 +1,111 @@
1
+ 'use client';
2
+
3
+ import { useState } from 'react';
4
+ import {
5
+ Code2,
6
+ Terminal,
7
+ FolderOpen,
8
+ ChevronDown,
9
+ Copy,
10
+ Check,
11
+ Loader2,
12
+ CircleAlert,
13
+ } from 'lucide-react';
14
+ import { Button } from '@/components/ui/button';
15
+ import {
16
+ DropdownMenu,
17
+ DropdownMenuContent,
18
+ DropdownMenuItem,
19
+ DropdownMenuLabel,
20
+ DropdownMenuSeparator,
21
+ DropdownMenuTrigger,
22
+ } from '@/components/ui/dropdown-menu';
23
+ import type { OpenActionMenuProps } from './config';
24
+
25
+ const COPY_FEEDBACK_DELAY = 2000;
26
+
27
+ export function OpenActionMenu({ actions, repositoryPath, showSpecs }: OpenActionMenuProps) {
28
+ const [copied, setCopied] = useState(false);
29
+
30
+ const handleCopyPath = () => {
31
+ void navigator.clipboard.writeText(repositoryPath);
32
+ setCopied(true);
33
+ setTimeout(() => setCopied(false), COPY_FEEDBACK_DELAY);
34
+ };
35
+
36
+ const anyLoading = actions.ideLoading || actions.shellLoading || actions.specsLoading;
37
+ const anyError = actions.ideError ?? actions.shellError ?? actions.specsError;
38
+
39
+ return (
40
+ <DropdownMenu modal={false}>
41
+ <DropdownMenuTrigger asChild>
42
+ <Button variant="outline" size="sm" className="gap-1.5" disabled={anyLoading}>
43
+ {anyLoading ? (
44
+ <Loader2 className="size-4 animate-spin" />
45
+ ) : anyError ? (
46
+ <CircleAlert className="text-destructive size-4" />
47
+ ) : (
48
+ <FolderOpen className="size-4" />
49
+ )}
50
+ Open
51
+ <ChevronDown className="size-3 opacity-60" />
52
+ </Button>
53
+ </DropdownMenuTrigger>
54
+ <DropdownMenuContent align="start" className="w-48">
55
+ <DropdownMenuLabel>Open in</DropdownMenuLabel>
56
+
57
+ <DropdownMenuItem
58
+ onClick={actions.openInIde}
59
+ disabled={actions.ideLoading}
60
+ className="gap-2"
61
+ >
62
+ {actions.ideLoading ? (
63
+ <Loader2 className="size-4 animate-spin" />
64
+ ) : actions.ideError ? (
65
+ <CircleAlert className="text-destructive size-4" />
66
+ ) : (
67
+ <Code2 className="size-4" />
68
+ )}
69
+ IDE
70
+ </DropdownMenuItem>
71
+
72
+ <DropdownMenuItem
73
+ onClick={actions.openInShell}
74
+ disabled={actions.shellLoading}
75
+ className="gap-2"
76
+ >
77
+ {actions.shellLoading ? (
78
+ <Loader2 className="size-4 animate-spin" />
79
+ ) : actions.shellError ? (
80
+ <CircleAlert className="text-destructive size-4" />
81
+ ) : (
82
+ <Terminal className="size-4" />
83
+ )}
84
+ Terminal
85
+ </DropdownMenuItem>
86
+
87
+ <DropdownMenuItem
88
+ onClick={actions.openSpecsFolder}
89
+ disabled={actions.specsLoading || !showSpecs}
90
+ className="gap-2"
91
+ >
92
+ {actions.specsLoading ? (
93
+ <Loader2 className="size-4 animate-spin" />
94
+ ) : actions.specsError ? (
95
+ <CircleAlert className="text-destructive size-4" />
96
+ ) : (
97
+ <FolderOpen className="size-4" />
98
+ )}
99
+ Specs Folder
100
+ </DropdownMenuItem>
101
+
102
+ <DropdownMenuSeparator />
103
+
104
+ <DropdownMenuItem onClick={handleCopyPath} className="gap-2">
105
+ {copied ? <Check className="size-4 text-green-600" /> : <Copy className="size-4" />}
106
+ {copied ? 'Copied!' : 'Copy path'}
107
+ </DropdownMenuItem>
108
+ </DropdownMenuContent>
109
+ </DropdownMenu>
110
+ );
111
+ }
@@ -0,0 +1,10 @@
1
+ export { PrdQuestionnaire } from './prd-questionnaire';
2
+ export { PrdQuestionnaireDrawer } from './prd-questionnaire-drawer';
3
+ export type {
4
+ PrdQuestionnaireProps,
5
+ PrdQuestionnaireDrawerProps,
6
+ PrdOption,
7
+ PrdQuestion,
8
+ PrdFinalAction,
9
+ PrdQuestionnaireData,
10
+ } from './prd-questionnaire-config';
@@ -0,0 +1,48 @@
1
+ import type {
2
+ PrdOption,
3
+ PrdQuestion,
4
+ PrdFinalAction,
5
+ PrdQuestionnaireData,
6
+ } from '@shepai/core/domain/generated/output';
7
+
8
+ export type { PrdOption, PrdQuestion, PrdFinalAction, PrdQuestionnaireData };
9
+
10
+ export interface PrdQuestionnaireProps {
11
+ /** Questionnaire data from the domain (questions, context, finalAction) */
12
+ data: PrdQuestionnaireData;
13
+ /** Map of questionId to selected optionId (controlled state) */
14
+ selections: Record<string, string>;
15
+ /** Selection change callback */
16
+ onSelect: (questionId: string, optionId: string) => void;
17
+ /** Chat refinement submit callback */
18
+ onRefine: (text: string) => void;
19
+ /** Finalize requirements callback */
20
+ onApprove: (actionId: string) => void;
21
+ /** Controls disabled/animated state during refinement */
22
+ isProcessing?: boolean;
23
+ /** Show the goal/context header (default: false) */
24
+ showHeader?: boolean;
25
+ }
26
+
27
+ export interface PrdQuestionnaireDrawerProps extends PrdQuestionnaireProps {
28
+ /** Whether the drawer is open */
29
+ open: boolean;
30
+ /** Callback when drawer should close */
31
+ onClose: () => void;
32
+ /** Feature name shown in drawer header */
33
+ featureName: string;
34
+ /** Feature ID shown below the name */
35
+ featureId?: string;
36
+ /** Current lifecycle stage label */
37
+ lifecycleLabel?: string;
38
+ /** Absolute path to the repository on disk */
39
+ repositoryPath?: string;
40
+ /** Git branch name for this feature */
41
+ branch?: string;
42
+ /** Absolute path to the specs folder on disk */
43
+ specPath?: string;
44
+ /** Callback to delete the feature — shows delete button when provided */
45
+ onDelete?: (featureId: string) => void;
46
+ /** Whether a delete operation is in progress */
47
+ isDeleting?: boolean;
48
+ }
@@ -0,0 +1,34 @@
1
+ 'use client';
2
+
3
+ import { ReviewDrawerShell } from '@/components/common/review-drawer-shell';
4
+ import { PrdQuestionnaire } from './prd-questionnaire';
5
+ import type { PrdQuestionnaireDrawerProps } from './prd-questionnaire-config';
6
+
7
+ export function PrdQuestionnaireDrawer({
8
+ open,
9
+ onClose,
10
+ featureName,
11
+ featureId,
12
+ repositoryPath,
13
+ branch,
14
+ specPath,
15
+ onDelete,
16
+ isDeleting,
17
+ ...questionnaireProps
18
+ }: PrdQuestionnaireDrawerProps) {
19
+ return (
20
+ <ReviewDrawerShell
21
+ open={open}
22
+ onClose={onClose}
23
+ featureName={featureName}
24
+ featureId={featureId}
25
+ repositoryPath={repositoryPath}
26
+ branch={branch}
27
+ specPath={specPath}
28
+ onDelete={onDelete}
29
+ isDeleting={isDeleting}
30
+ >
31
+ <PrdQuestionnaire {...questionnaireProps} />
32
+ </ReviewDrawerShell>
33
+ );
34
+ }
@@ -0,0 +1,384 @@
1
+ import { useState } from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import { fn } from '@storybook/test';
4
+ import { PrdQuestionnaire } from './prd-questionnaire';
5
+ import { PrdQuestionnaireDrawer } from './prd-questionnaire-drawer';
6
+ import type { PrdQuestionnaireData } from './prd-questionnaire-config';
7
+
8
+ const mockQuestions: PrdQuestionnaireData['questions'] = [
9
+ {
10
+ id: 'problem',
11
+ question: 'What specific problem does this feature solve?',
12
+ type: 'select',
13
+ options: [
14
+ {
15
+ id: 'user_pain',
16
+ label: 'User Pain Point',
17
+ rationale: 'Addresses a recurring user complaint or friction',
18
+ recommended: true,
19
+ },
20
+ { id: 'market_gap', label: 'Market Gap', rationale: 'Fills a gap vs competitors' },
21
+ { id: 'tech_debt', label: 'Technical Debt', rationale: 'Reduces accumulated technical debt' },
22
+ {
23
+ id: 'compliance',
24
+ label: 'Compliance',
25
+ rationale: 'Meets regulatory or policy requirements',
26
+ },
27
+ ],
28
+ },
29
+ {
30
+ id: 'priority',
31
+ question: 'What is the business priority level?',
32
+ type: 'select',
33
+ options: [
34
+ { id: 'p0', label: 'P0 - Critical', rationale: 'Blocking issue, must fix immediately' },
35
+ { id: 'p1', label: 'P1 - High', rationale: 'Important for next release', recommended: true },
36
+ { id: 'p2', label: 'P2 - Medium', rationale: 'Nice to have, schedule when possible' },
37
+ { id: 'p3', label: 'P3 - Low', rationale: 'Backlog item, no urgency' },
38
+ ],
39
+ },
40
+ {
41
+ id: 'success',
42
+ question: 'What metrics define success?',
43
+ type: 'select',
44
+ options: [
45
+ {
46
+ id: 'adoption',
47
+ label: 'Adoption Rate',
48
+ rationale: 'Percentage of users who adopt the feature',
49
+ recommended: true,
50
+ },
51
+ {
52
+ id: 'performance',
53
+ label: 'Performance',
54
+ rationale: 'Latency, throughput, or resource improvements',
55
+ },
56
+ {
57
+ id: 'revenue',
58
+ label: 'Revenue Impact',
59
+ rationale: 'Direct or indirect revenue contribution',
60
+ },
61
+ {
62
+ id: 'satisfaction',
63
+ label: 'User Satisfaction',
64
+ rationale: 'NPS or CSAT score improvement',
65
+ },
66
+ ],
67
+ },
68
+ {
69
+ id: 'timeline',
70
+ question: 'What is the target timeline?',
71
+ type: 'select',
72
+ options: [
73
+ {
74
+ id: 'sprint',
75
+ label: 'This Sprint',
76
+ rationale: 'Deliverable within the current sprint',
77
+ recommended: true,
78
+ },
79
+ { id: 'quarter', label: 'This Quarter', rationale: 'Target completion within 3 months' },
80
+ { id: 'half', label: 'This Half', rationale: 'Target completion within 6 months' },
81
+ { id: 'year', label: 'This Year', rationale: 'Long-term initiative for the year' },
82
+ ],
83
+ },
84
+ {
85
+ id: 'scope',
86
+ question: 'What is the feature scope?',
87
+ type: 'select',
88
+ options: [
89
+ {
90
+ id: 'mvp',
91
+ label: 'MVP',
92
+ rationale: 'Minimum viable product — core functionality only',
93
+ recommended: true,
94
+ },
95
+ {
96
+ id: 'full',
97
+ label: 'Full Feature',
98
+ rationale: 'Complete feature with all planned capabilities',
99
+ },
100
+ { id: 'experiment', label: 'Experiment', rationale: 'A/B test or limited rollout' },
101
+ {
102
+ id: 'platform',
103
+ label: 'Platform',
104
+ rationale: 'Foundational work enabling future features',
105
+ },
106
+ ],
107
+ },
108
+ {
109
+ id: 'stakeholders',
110
+ question: 'Who are the primary stakeholders?',
111
+ type: 'select',
112
+ options: [
113
+ {
114
+ id: 'end_users',
115
+ label: 'End Users',
116
+ rationale: 'Direct users of the product',
117
+ recommended: true,
118
+ },
119
+ {
120
+ id: 'internal',
121
+ label: 'Internal Teams',
122
+ rationale: 'Engineering, product, or design teams',
123
+ },
124
+ {
125
+ id: 'enterprise',
126
+ label: 'Enterprise Clients',
127
+ rationale: 'B2B customers with specific needs',
128
+ },
129
+ {
130
+ id: 'partners',
131
+ label: 'Partners',
132
+ rationale: 'Third-party integrations or ecosystem partners',
133
+ },
134
+ ],
135
+ },
136
+ ];
137
+
138
+ const mockFinalAction = {
139
+ id: 'approve-reqs',
140
+ label: 'Approve Requirements',
141
+ description: 'Finalize and lock the requirements for implementation',
142
+ };
143
+
144
+ /* ─── Interactive wrapper for stories ─── */
145
+
146
+ function InteractiveQuestionnaire({
147
+ selections: initialSelections = {},
148
+ ...props
149
+ }: Omit<
150
+ React.ComponentProps<typeof PrdQuestionnaire>,
151
+ 'onSelect' | 'onRefine' | 'onApprove' | 'selections'
152
+ > & { selections?: Record<string, string> }) {
153
+ const [selections, setSelections] = useState<Record<string, string>>(initialSelections);
154
+
155
+ return (
156
+ <PrdQuestionnaire
157
+ {...props}
158
+ selections={selections}
159
+ onSelect={(qId, optId) => setSelections((prev) => ({ ...prev, [qId]: optId }))}
160
+ onRefine={fn().mockName('onRefine')}
161
+ onApprove={fn().mockName('onApprove')}
162
+ />
163
+ );
164
+ }
165
+
166
+ /* ─── Standalone PrdQuestionnaire ─── */
167
+
168
+ const meta: Meta<typeof PrdQuestionnaire> = {
169
+ title: 'Composed/PrdQuestionnaire',
170
+ component: PrdQuestionnaire,
171
+ tags: ['autodocs'],
172
+ parameters: {
173
+ layout: 'fullscreen',
174
+ },
175
+ argTypes: {
176
+ onSelect: { action: 'onSelect' },
177
+ onRefine: { action: 'onRefine' },
178
+ onApprove: { action: 'onApprove' },
179
+ },
180
+ decorators: [
181
+ (Story) => (
182
+ <div style={{ height: '600px', width: '400px', border: '1px solid var(--color-border)' }}>
183
+ <Story />
184
+ </div>
185
+ ),
186
+ ],
187
+ };
188
+
189
+ export default meta;
190
+ type Story = StoryObj<typeof PrdQuestionnaire>;
191
+
192
+ const mockData: PrdQuestionnaireData = {
193
+ question: 'Review Feature Requirements',
194
+ context:
195
+ 'Please review the AI-generated requirements below. Select the best option for each question, or ask the AI to refine them.',
196
+ questions: mockQuestions,
197
+ finalAction: mockFinalAction,
198
+ };
199
+
200
+ /** Default state — first step shown, no selections. Click options to auto-advance. */
201
+ export const Default: Story = {
202
+ render: () => <InteractiveQuestionnaire data={mockData} />,
203
+ };
204
+
205
+ /** Starting with partial selections — step dots reflect answered state. */
206
+ export const WithSelections: Story = {
207
+ render: () => (
208
+ <InteractiveQuestionnaire
209
+ data={mockData}
210
+ selections={{
211
+ problem: 'user_pain',
212
+ priority: 'p1',
213
+ success: 'adoption',
214
+ }}
215
+ />
216
+ ),
217
+ };
218
+
219
+ /** All questions answered — last step shows Approve button enabled. */
220
+ export const AllAnswered: Story = {
221
+ render: () => (
222
+ <InteractiveQuestionnaire
223
+ data={mockData}
224
+ selections={{
225
+ problem: 'user_pain',
226
+ priority: 'p1',
227
+ success: 'adoption',
228
+ timeline: 'sprint',
229
+ scope: 'mvp',
230
+ stakeholders: 'end_users',
231
+ }}
232
+ />
233
+ ),
234
+ };
235
+
236
+ /** Processing state — all inputs disabled, indeterminate progress bar. */
237
+ export const Refining: Story = {
238
+ args: {
239
+ data: mockData,
240
+ selections: {
241
+ problem: 'user_pain',
242
+ priority: 'p1',
243
+ },
244
+ isProcessing: true,
245
+ },
246
+ };
247
+
248
+ /** Single question — minimal stepper with one step. */
249
+ export const MinimalData: Story = {
250
+ render: () => (
251
+ <InteractiveQuestionnaire
252
+ data={{
253
+ question: 'Quick Check',
254
+ context: 'A simple yes/no decision.',
255
+ questions: [
256
+ {
257
+ id: 'confirm',
258
+ question: 'Should we proceed?',
259
+ type: 'select' as const,
260
+ options: [
261
+ {
262
+ id: 'yes',
263
+ label: 'Yes',
264
+ rationale: 'Proceed with implementation',
265
+ recommended: true,
266
+ },
267
+ { id: 'no', label: 'No', rationale: 'Go back and reconsider' },
268
+ ],
269
+ },
270
+ ],
271
+ finalAction: {
272
+ id: 'confirm-action',
273
+ label: 'Confirm',
274
+ description: 'Confirm the decision',
275
+ },
276
+ }}
277
+ />
278
+ ),
279
+ };
280
+
281
+ /* ─── Drawer Variant ─── */
282
+
283
+ type DrawerStory = StoryObj<typeof PrdQuestionnaireDrawer>;
284
+
285
+ const drawerMeta = {
286
+ title: 'Composed/PrdQuestionnaireDrawer',
287
+ component: PrdQuestionnaireDrawer,
288
+ tags: ['autodocs'],
289
+ parameters: {
290
+ layout: 'fullscreen',
291
+ },
292
+ };
293
+
294
+ function DrawerTemplate({
295
+ selections: initialSelections = {},
296
+ ...props
297
+ }: Omit<
298
+ React.ComponentProps<typeof PrdQuestionnaireDrawer>,
299
+ 'open' | 'onClose' | 'onSelect' | 'onRefine' | 'onApprove' | 'selections'
300
+ > & { selections?: Record<string, string> }) {
301
+ const [open, setOpen] = useState(true);
302
+ const [selections, setSelections] = useState<Record<string, string>>(initialSelections);
303
+
304
+ return (
305
+ <div style={{ height: '100vh', background: '#f8fafc', padding: '2rem' }}>
306
+ <button
307
+ type="button"
308
+ onClick={() => setOpen(true)}
309
+ style={{ padding: '8px 16px', border: '1px solid #ccc', borderRadius: '6px' }}
310
+ >
311
+ Open Drawer
312
+ </button>
313
+ <PrdQuestionnaireDrawer
314
+ {...props}
315
+ open={open}
316
+ onClose={() => setOpen(false)}
317
+ selections={selections}
318
+ onSelect={(qId, optId) => setSelections((prev) => ({ ...prev, [qId]: optId }))}
319
+ onRefine={fn().mockName('onRefine')}
320
+ onApprove={fn().mockName('onApprove')}
321
+ />
322
+ </div>
323
+ );
324
+ }
325
+
326
+ /** Drawer with stepper — navigate questions one at a time. */
327
+ export const InDrawer: DrawerStory = {
328
+ ...drawerMeta,
329
+ render: () => (
330
+ <DrawerTemplate
331
+ featureName="User Authentication Flow"
332
+ featureId="FEAT-042"
333
+ lifecycleLabel="Requirements"
334
+ data={mockData}
335
+ />
336
+ ),
337
+ };
338
+
339
+ /** Drawer with partial selections showing progress dots. */
340
+ export const InDrawerWithSelections: DrawerStory = {
341
+ ...drawerMeta,
342
+ render: () => (
343
+ <DrawerTemplate
344
+ featureName="User Authentication Flow"
345
+ featureId="FEAT-042"
346
+ lifecycleLabel="Requirements"
347
+ data={mockData}
348
+ selections={{
349
+ problem: 'user_pain',
350
+ priority: 'p1',
351
+ success: 'adoption',
352
+ }}
353
+ />
354
+ ),
355
+ };
356
+
357
+ /** Drawer with delete button visible. */
358
+ export const WithDeleteButton: DrawerStory = {
359
+ ...drawerMeta,
360
+ render: () => (
361
+ <DrawerTemplate
362
+ featureName="User Authentication Flow"
363
+ featureId="FEAT-042"
364
+ lifecycleLabel="Requirements"
365
+ data={mockData}
366
+ onDelete={fn().mockName('onDelete')}
367
+ />
368
+ ),
369
+ };
370
+
371
+ /** Drawer with delete in progress (button disabled). */
372
+ export const DeletingState: DrawerStory = {
373
+ ...drawerMeta,
374
+ render: () => (
375
+ <DrawerTemplate
376
+ featureName="User Authentication Flow"
377
+ featureId="FEAT-042"
378
+ lifecycleLabel="Requirements"
379
+ data={mockData}
380
+ onDelete={fn().mockName('onDelete')}
381
+ isDeleting
382
+ />
383
+ ),
384
+ };