@shepai/cli 1.72.9-pr220.e1bfec0 → 1.72.9-pr220.f17b60a

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 (278) hide show
  1. package/dist/packages/core/src/infrastructure/services/notifications/notification.service.d.ts.map +1 -1
  2. package/dist/packages/core/src/infrastructure/services/notifications/notification.service.js +2 -4
  3. package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
  4. package/dist/src/presentation/web/app/build-feature-node-data.js +2 -26
  5. package/dist/src/presentation/web/app/build-graph-nodes.d.ts.map +1 -1
  6. package/dist/src/presentation/web/app/build-graph-nodes.js +2 -26
  7. package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.d.ts.map +1 -1
  8. package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.js +0 -2
  9. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +2 -0
  10. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -1
  11. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +11 -11
  12. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  13. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +17 -27
  14. package/dist/src/presentation/web/components/common/control-center-drawer/index.d.ts +0 -1
  15. package/dist/src/presentation/web/components/common/control-center-drawer/index.d.ts.map +1 -1
  16. package/dist/src/presentation/web/components/common/control-center-drawer/index.js +0 -1
  17. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts +25 -0
  18. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
  19. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +45 -2
  20. package/dist/src/presentation/web/components/common/index.d.ts +1 -2
  21. package/dist/src/presentation/web/components/common/index.d.ts.map +1 -1
  22. package/dist/src/presentation/web/components/common/index.js +1 -2
  23. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  24. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +3 -4
  25. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  26. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +46 -58
  27. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  28. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +2 -13
  29. package/dist/src/presentation/web/components/ui/alert-dialog.d.ts.map +1 -1
  30. package/dist/src/presentation/web/components/ui/alert-dialog.js +2 -2
  31. package/dist/src/presentation/web/components/ui/dialog.d.ts.map +1 -1
  32. package/dist/src/presentation/web/components/ui/dialog.js +2 -2
  33. package/dist/src/presentation/web/hooks/use-agent-events.d.ts.map +1 -1
  34. package/dist/src/presentation/web/hooks/use-agent-events.js +6 -3
  35. package/dist/src/presentation/web/hooks/use-graph-state.d.ts +2 -1
  36. package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -1
  37. package/dist/src/presentation/web/hooks/use-graph-state.js +50 -23
  38. package/dist/src/presentation/web/hooks/use-notifications.d.ts +1 -5
  39. package/dist/src/presentation/web/hooks/use-notifications.d.ts.map +1 -1
  40. package/dist/src/presentation/web/hooks/use-notifications.js +1 -26
  41. package/dist/src/presentation/web/hooks/use-notifications.stories.d.ts.map +1 -1
  42. package/dist/src/presentation/web/hooks/use-notifications.stories.js +28 -38
  43. package/dist/tsconfig.build.tsbuildinfo +1 -1
  44. package/package.json +1 -1
  45. package/web/.next/BUILD_ID +1 -1
  46. package/web/.next/build-manifest.json +2 -2
  47. package/web/.next/cache/.previewinfo +1 -1
  48. package/web/.next/cache/.rscinfo +1 -1
  49. package/web/.next/cache/.tsbuildinfo +1 -1
  50. package/web/.next/cache/config.json +3 -3
  51. package/web/.next/fallback-build-manifest.json +2 -2
  52. package/web/.next/prerender-manifest.json +3 -3
  53. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +15 -15
  54. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  55. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  56. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +18 -18
  57. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  58. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  59. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +13 -13
  60. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  61. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  62. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +15 -15
  63. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  64. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  65. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +18 -18
  66. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  67. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  68. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +13 -13
  69. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  70. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  71. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +13 -13
  72. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  73. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  74. package/web/.next/server/app/_global-error.html +2 -2
  75. package/web/.next/server/app/_global-error.rsc +1 -1
  76. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  77. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  78. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  79. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  80. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  81. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  82. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  83. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  84. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  85. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  86. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  87. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  88. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  89. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  90. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  91. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  92. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  93. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_816618e2.js +1 -1
  94. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_816618e2.js.map +1 -1
  95. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_ba2e050f.js +1 -1
  96. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_ba2e050f.js.map +1 -1
  97. package/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js +2 -2
  98. package/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js.map +1 -1
  99. package/web/.next/server/chunks/ssr/[root-of-the-server]__2018e25f._.js +1 -1
  100. package/web/.next/server/chunks/ssr/[root-of-the-server]__2018e25f._.js.map +1 -1
  101. package/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js +2 -2
  102. package/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js.map +1 -1
  103. package/web/.next/server/chunks/ssr/[root-of-the-server]__6258349c._.js +1 -1
  104. package/web/.next/server/chunks/ssr/[root-of-the-server]__6258349c._.js.map +1 -1
  105. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  106. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
  107. package/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js +2 -2
  108. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  109. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
  110. package/web/.next/server/chunks/ssr/[root-of-the-server]__94a6d275._.js +1 -1
  111. package/web/.next/server/chunks/ssr/[root-of-the-server]__94a6d275._.js.map +1 -1
  112. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
  113. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  114. package/web/.next/server/chunks/ssr/_07c2a32a._.js +1 -1
  115. package/web/.next/server/chunks/ssr/_07c2a32a._.js.map +1 -1
  116. package/web/.next/server/chunks/ssr/_0e9d6bf7._.js +1 -1
  117. package/web/.next/server/chunks/ssr/_0e9d6bf7._.js.map +1 -1
  118. package/web/.next/server/chunks/ssr/_250a63ae._.js +1 -1
  119. package/web/.next/server/chunks/ssr/_250a63ae._.js.map +1 -1
  120. package/web/.next/server/chunks/ssr/_61351ed3._.js +1 -1
  121. package/web/.next/server/chunks/ssr/_61351ed3._.js.map +1 -1
  122. package/web/.next/server/chunks/ssr/_8400c8bb._.js +1 -1
  123. package/web/.next/server/chunks/ssr/_8400c8bb._.js.map +1 -1
  124. package/web/.next/server/chunks/ssr/{_63688261._.js → _8e87c87b._.js} +2 -2
  125. package/web/.next/server/chunks/ssr/{_63688261._.js.map → _8e87c87b._.js.map} +1 -1
  126. package/web/.next/server/chunks/ssr/_9f940437._.js +1 -1
  127. package/web/.next/server/chunks/ssr/_9f940437._.js.map +1 -1
  128. package/web/.next/server/chunks/ssr/src_presentation_web_2b91e4ec._.js +1 -1
  129. package/web/.next/server/chunks/ssr/src_presentation_web_2b91e4ec._.js.map +1 -1
  130. package/web/.next/server/chunks/ssr/src_presentation_web_5bcc1537._.js +1 -1
  131. package/web/.next/server/chunks/ssr/src_presentation_web_5bcc1537._.js.map +1 -1
  132. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_5955c012.js +1 -1
  133. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_5955c012.js.map +1 -1
  134. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  135. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  136. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  137. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  138. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  139. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  140. package/web/.next/server/chunks/ssr/src_presentation_web_d5b0cb86._.js +2 -2
  141. package/web/.next/server/chunks/ssr/src_presentation_web_d5b0cb86._.js.map +1 -1
  142. package/web/.next/server/chunks/ssr/src_presentation_web_e626b63c._.js +2 -2
  143. package/web/.next/server/chunks/ssr/src_presentation_web_e626b63c._.js.map +1 -1
  144. package/web/.next/server/pages/500.html +2 -2
  145. package/web/.next/server/server-reference-manifest.js +1 -1
  146. package/web/.next/server/server-reference-manifest.json +21 -21
  147. package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
  148. package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +2 -2
  149. package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
  150. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +15 -15
  151. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  152. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  153. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +18 -18
  154. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  155. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  156. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +13 -13
  157. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  158. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  159. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +15 -15
  160. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  161. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  162. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +18 -18
  163. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  164. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  165. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +13 -13
  166. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  167. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  168. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +13 -13
  169. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  170. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  171. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
  172. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
  173. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  174. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  175. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  176. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  177. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  178. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  179. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  180. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  181. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.nft.json +1 -1
  182. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  183. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  184. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -1
  185. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  186. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  187. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  188. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  189. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_816618e2.js +1 -1
  190. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_ba2e050f.js +1 -1
  191. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js +2 -2
  192. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__2018e25f._.js +1 -1
  193. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js +2 -2
  194. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6258349c._.js +1 -1
  195. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  196. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js +2 -2
  197. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  198. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__94a6d275._.js +1 -1
  199. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
  200. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_07c2a32a._.js +1 -1
  201. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_0e9d6bf7._.js +1 -1
  202. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_250a63ae._.js +1 -1
  203. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_61351ed3._.js +1 -1
  204. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_8400c8bb._.js +1 -1
  205. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_63688261._.js → _8e87c87b._.js} +2 -2
  206. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_9f940437._.js +1 -1
  207. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_2b91e4ec._.js +1 -1
  208. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_5bcc1537._.js +1 -1
  209. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_5955c012.js +1 -1
  210. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  211. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  212. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  213. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_d5b0cb86._.js +2 -2
  214. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_e626b63c._.js +2 -2
  215. package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
  216. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
  217. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +21 -21
  218. package/web/.next/standalone/src/presentation/web/app/build-feature-node-data.ts +3 -30
  219. package/web/.next/standalone/src/presentation/web/app/build-graph-nodes.ts +3 -30
  220. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/create-drawer-client.tsx +0 -2
  221. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/drawer-view.ts +12 -13
  222. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx +21 -37
  223. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/index.ts +0 -1
  224. package/web/.next/standalone/src/presentation/web/components/common/feature-node/derive-feature-state.ts +63 -2
  225. package/web/.next/standalone/src/presentation/web/components/common/index.ts +1 -7
  226. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +12 -21
  227. package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +65 -70
  228. package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.tsx +1 -18
  229. package/web/.next/standalone/src/presentation/web/components/ui/alert-dialog.tsx +2 -5
  230. package/web/.next/standalone/src/presentation/web/components/ui/dialog.tsx +2 -5
  231. package/web/.next/standalone/src/presentation/web/hooks/use-agent-events.ts +7 -3
  232. package/web/.next/standalone/src/presentation/web/hooks/use-graph-state.ts +104 -71
  233. package/web/.next/standalone/src/presentation/web/hooks/use-notifications.stories.tsx +2 -30
  234. package/web/.next/standalone/src/presentation/web/hooks/use-notifications.ts +2 -36
  235. package/web/.next/static/chunks/0ffccd7be73305c8.css +2 -0
  236. package/web/.next/static/chunks/3f205fd6adbfd20a.js +7 -0
  237. package/web/.next/static/chunks/76827713cb2b7333.js +1 -0
  238. package/web/.next/static/chunks/{c575ab63c138645b.js → 792aac476adb5875.js} +1 -1
  239. package/web/.next/static/chunks/7c8adcfd920a8f74.js +1 -0
  240. package/web/.next/static/chunks/{cdc92cdf81005c84.js → 83463b63971f5723.js} +1 -1
  241. package/web/.next/static/chunks/{63a80e9d4c4b0253.js → 98ca891a5c156aa5.js} +3 -3
  242. package/web/.next/static/chunks/{638824249d103905.js → 9b1770f05f1d95e5.js} +1 -1
  243. package/web/.next/static/chunks/a7f52757dff0cea0.js +1 -0
  244. package/web/.next/static/chunks/b6becf0de992842a.js +1 -0
  245. package/web/.next/static/chunks/{f32c98a709949c5b.js → cb41849bcfaa304e.js} +1 -1
  246. package/web/.next/static/chunks/d5e95c4482029a39.js +1 -0
  247. package/web/.next/trace +1 -1
  248. package/web/.next/trace-build +1 -1
  249. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.d.ts +0 -12
  250. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.d.ts.map +0 -1
  251. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.js +0 -337
  252. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.d.ts +0 -33
  253. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.d.ts.map +0 -1
  254. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.js +0 -214
  255. package/dist/src/presentation/web/components/common/notification-permission-banner/index.d.ts +0 -2
  256. package/dist/src/presentation/web/components/common/notification-permission-banner/index.d.ts.map +0 -1
  257. package/dist/src/presentation/web/components/common/notification-permission-banner/index.js +0 -1
  258. package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.d.ts +0 -2
  259. package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.d.ts.map +0 -1
  260. package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.js +0 -33
  261. package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.d.ts +0 -6
  262. package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.d.ts.map +0 -1
  263. package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.js +0 -24
  264. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.tsx +0 -293
  265. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/control-center-drawer.tsx +0 -745
  266. package/web/.next/standalone/src/presentation/web/components/common/notification-permission-banner/index.ts +0 -1
  267. package/web/.next/standalone/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.tsx +0 -52
  268. package/web/.next/standalone/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.tsx +0 -55
  269. package/web/.next/static/chunks/0a883e2efecfd563.js +0 -1
  270. package/web/.next/static/chunks/0c54314c8c9c9739.js +0 -7
  271. package/web/.next/static/chunks/596ca28d78baae25.js +0 -1
  272. package/web/.next/static/chunks/71c9ecdceac1939f.css +0 -2
  273. package/web/.next/static/chunks/a040b058d79f4ade.js +0 -1
  274. package/web/.next/static/chunks/e05eb1cc84ee254a.js +0 -1
  275. package/web/.next/static/chunks/ef8f8940eac6c542.js +0 -1
  276. /package/web/.next/static/{uMxPSDPwZCludF5408rWJ → eg0FTlsA4z_7CXbFfMgAr}/_buildManifest.js +0 -0
  277. /package/web/.next/static/{uMxPSDPwZCludF5408rWJ → eg0FTlsA4z_7CXbFfMgAr}/_clientMiddlewareManifest.json +0 -0
  278. /package/web/.next/static/{uMxPSDPwZCludF5408rWJ → eg0FTlsA4z_7CXbFfMgAr}/_ssgManifest.js +0 -0
@@ -1,214 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState } from 'react';
3
- import { PrStatus, CiStatus } from '../../../../../../packages/core/src/domain/generated/output.js';
4
- import { Button } from '../../ui/button.js';
5
- import { DrawerCloseGuardProvider } from '../../../hooks/drawer-close-guard.js';
6
- import { ControlCenterDrawer } from './control-center-drawer.js';
7
- const meta = {
8
- title: 'Drawers/ControlCenterDrawer',
9
- component: ControlCenterDrawer,
10
- tags: ['autodocs'],
11
- decorators: [
12
- (Story) => (_jsx(DrawerCloseGuardProvider, { children: _jsx(Story, {}) })),
13
- ],
14
- parameters: {
15
- layout: 'fullscreen',
16
- },
17
- };
18
- export default meta;
19
- /* ---------------------------------------------------------------------------
20
- * Fixtures
21
- * ------------------------------------------------------------------------- */
22
- const featureView = {
23
- type: 'feature',
24
- node: {
25
- name: 'Auth Module',
26
- description: 'Implement OAuth2 authentication flow',
27
- featureId: '#f1',
28
- lifecycle: 'implementation',
29
- state: 'running',
30
- progress: 45,
31
- agentType: 'claude-code',
32
- repositoryPath: '/home/user/my-repo',
33
- branch: 'feat/auth-module',
34
- specPath: '/home/user/my-repo/specs/001-auth-module',
35
- },
36
- };
37
- const featureDoneView = {
38
- type: 'feature',
39
- node: {
40
- name: 'Payment Gateway',
41
- description: 'Stripe integration for subscriptions',
42
- featureId: '#f3',
43
- lifecycle: 'maintain',
44
- state: 'done',
45
- progress: 100,
46
- runtime: '1h 42m',
47
- repositoryPath: '/home/user/my-repo',
48
- branch: 'feat/payment-gateway',
49
- pr: {
50
- url: 'https://github.com/org/repo/pull/42',
51
- number: 42,
52
- status: PrStatus.Merged,
53
- ciStatus: CiStatus.Success,
54
- commitHash: 'abc1234567890',
55
- },
56
- },
57
- };
58
- const featureErrorView = {
59
- type: 'feature',
60
- node: {
61
- name: 'Email Service',
62
- description: 'Transactional email with SendGrid',
63
- featureId: '#f5',
64
- lifecycle: 'review',
65
- state: 'error',
66
- progress: 30,
67
- errorMessage: 'Build failed: type mismatch in auth middleware',
68
- repositoryPath: '/home/user/my-repo',
69
- branch: 'feat/email-service',
70
- },
71
- };
72
- const prdReviewView = {
73
- type: 'prd-review',
74
- node: {
75
- name: 'API Rate Limiting',
76
- description: 'Sliding window rate limiting for public endpoints',
77
- featureId: 'feat-abc123',
78
- lifecycle: 'requirements',
79
- state: 'action-required',
80
- progress: 0,
81
- repositoryPath: '/home/user/my-repo',
82
- branch: 'feat/api-rate-limiting',
83
- specPath: '/home/user/my-repo/specs/002-rate-limiting',
84
- },
85
- };
86
- const techReviewView = {
87
- type: 'tech-review',
88
- node: {
89
- name: 'Search Index',
90
- description: 'Elasticsearch full-text search integration',
91
- featureId: 'feat-def456',
92
- lifecycle: 'implementation',
93
- state: 'action-required',
94
- progress: 0,
95
- repositoryPath: '/home/user/my-repo',
96
- branch: 'feat/search-index',
97
- specPath: '/home/user/my-repo/specs/003-search',
98
- },
99
- };
100
- const mergeReviewView = {
101
- type: 'merge-review',
102
- node: {
103
- name: 'Auth Module',
104
- description: 'OAuth2 authentication flow',
105
- featureId: 'feat-ghi789',
106
- lifecycle: 'review',
107
- state: 'action-required',
108
- progress: 100,
109
- repositoryPath: '/home/user/my-repo',
110
- branch: 'feat/auth-module',
111
- specPath: '/home/user/my-repo/specs/001-auth-module',
112
- pr: {
113
- url: 'https://github.com/org/repo/pull/17',
114
- number: 17,
115
- status: PrStatus.Open,
116
- ciStatus: CiStatus.Success,
117
- },
118
- },
119
- };
120
- const createView = {
121
- type: 'feature-create',
122
- repositoryPath: '/home/user/my-repo',
123
- features: [
124
- { id: 'feat-abc123', name: 'API Rate Limiting' },
125
- { id: 'feat-def456', name: 'Search Index' },
126
- ],
127
- workflowDefaults: {
128
- approvalGates: { allowPrd: true, allowPlan: false, allowMerge: false },
129
- push: true,
130
- openPr: false,
131
- },
132
- };
133
- const repositoryView = {
134
- type: 'repository',
135
- data: {
136
- id: 'repo-1',
137
- name: 'my-awesome-app',
138
- repositoryPath: '/home/user/my-awesome-app',
139
- },
140
- };
141
- /* ---------------------------------------------------------------------------
142
- * Trigger wrapper
143
- * ------------------------------------------------------------------------- */
144
- function Trigger({ view, label }) {
145
- const [activeView, setActiveView] = useState(null);
146
- return (_jsxs("div", { className: "flex h-screen items-start p-4", children: [_jsx(Button, { variant: "outline", onClick: () => setActiveView(view), children: label }), _jsx(ControlCenterDrawer, { view: activeView, onClose: () => setActiveView(null), onDelete: (_id) => undefined, onCreateSubmit: () => setActiveView(null) })] }));
147
- }
148
- /* ---------------------------------------------------------------------------
149
- * Stories — one per view type
150
- * ------------------------------------------------------------------------- */
151
- /** Feature info view — running state with progress. Default story. */
152
- export const Default = {
153
- render: () => _jsx(Trigger, { view: featureView, label: "Open Feature (Running)" }),
154
- };
155
- /** Feature info view — completed (maintain lifecycle, done state, merged PR). */
156
- export const FeatureDone = {
157
- render: () => _jsx(Trigger, { view: featureDoneView, label: "Open Feature (Done + PR)" }),
158
- };
159
- /** Feature info view — error state. */
160
- export const FeatureError = {
161
- render: () => _jsx(Trigger, { view: featureErrorView, label: "Open Feature (Error)" }),
162
- };
163
- /**
164
- * PRD review view — loads questionnaire data via server action.
165
- * Shows spinner in Storybook (no real API available).
166
- */
167
- export const PrdReview = {
168
- render: () => _jsx(Trigger, { view: prdReviewView, label: "Open PRD Review" }),
169
- };
170
- /**
171
- * Tech decisions review view — loads research artifact via server action.
172
- * Shows spinner in Storybook.
173
- */
174
- export const TechReview = {
175
- render: () => _jsx(Trigger, { view: techReviewView, label: "Open Tech Review" }),
176
- };
177
- /**
178
- * Merge review view — loads merge review data via server action.
179
- * Shows spinner in Storybook.
180
- */
181
- export const MergeReview = {
182
- render: () => _jsx(Trigger, { view: mergeReviewView, label: "Open Merge Review" }),
183
- };
184
- /** Feature create form. */
185
- export const FeatureCreate = {
186
- render: () => _jsx(Trigger, { view: createView, label: "Open Create Feature" }),
187
- };
188
- /** Repository actions view. */
189
- export const Repository = {
190
- render: () => _jsx(Trigger, { view: repositoryView, label: "Open Repository" }),
191
- };
192
- /* ---------------------------------------------------------------------------
193
- * Interactive switcher — cycle through all views
194
- * ------------------------------------------------------------------------- */
195
- const allViews = [
196
- { label: 'Feature (Running)', view: featureView },
197
- { label: 'Feature (Done)', view: featureDoneView },
198
- { label: 'Feature (Error)', view: featureErrorView },
199
- { label: 'PRD Review', view: prdReviewView },
200
- { label: 'Tech Review', view: techReviewView },
201
- { label: 'Merge Review', view: mergeReviewView },
202
- { label: 'Create Feature', view: createView },
203
- { label: 'Repository', view: repositoryView },
204
- ];
205
- function AllViewsSwitcher() {
206
- const [activeView, setActiveView] = useState(null);
207
- return (_jsxs("div", { className: "flex h-screen", children: [_jsxs("div", { className: "flex flex-col gap-2 p-4", children: [_jsx("span", { className: "text-muted-foreground mb-2 text-xs font-semibold tracking-wider uppercase", children: "Select view" }), allViews.map(({ label, view }) => (_jsx("button", { type: "button", onClick: () => setActiveView(view), className: `rounded-md px-3 py-1.5 text-left text-sm ${activeView?.type === view.type
208
- ? 'bg-primary text-primary-foreground'
209
- : 'bg-muted hover:bg-muted/80'}`, children: label }, label))), _jsx("button", { type: "button", onClick: () => setActiveView(null), className: "bg-destructive/10 text-destructive hover:bg-destructive/20 mt-2 rounded-md px-3 py-1.5 text-left text-sm", children: "Close drawer" })] }), _jsx(ControlCenterDrawer, { view: activeView, onClose: () => setActiveView(null), onDelete: (_id) => undefined, onCreateSubmit: () => setActiveView(null) })] }));
210
- }
211
- /** Interactive — click any view type to open that drawer panel. */
212
- export const AllViews = {
213
- render: () => _jsx(AllViewsSwitcher, {}),
214
- };
@@ -1,2 +0,0 @@
1
- export { NotificationPermissionBanner } from './notification-permission-banner.js';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/notification-permission-banner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC"}
@@ -1 +0,0 @@
1
- export { NotificationPermissionBanner } from './notification-permission-banner.js';
@@ -1,2 +0,0 @@
1
- export declare function NotificationPermissionBanner(): import("react/jsx-runtime").JSX.Element | null;
2
- //# sourceMappingURL=notification-permission-banner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"notification-permission-banner.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.tsx"],"names":[],"mappings":"AAQA,wBAAgB,4BAA4B,mDA8C3C"}
@@ -1,33 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useCallback, useEffect, useState } from 'react';
4
- import { Bell, X } from 'lucide-react';
5
- import { Button } from '../../ui/button.js';
6
- const DISMISSED_KEY = 'shep:notification-banner-dismissed';
7
- export function NotificationPermissionBanner() {
8
- const [visible, setVisible] = useState(false);
9
- useEffect(() => {
10
- if (typeof globalThis.Notification === 'undefined')
11
- return;
12
- if (globalThis.Notification.permission !== 'default')
13
- return;
14
- if (localStorage.getItem(DISMISSED_KEY) === 'true')
15
- return;
16
- setVisible(true);
17
- }, []);
18
- const handleEnable = useCallback(async () => {
19
- if (typeof globalThis.Notification === 'undefined')
20
- return;
21
- const result = await globalThis.Notification.requestPermission();
22
- if (result === 'granted' || result === 'denied') {
23
- setVisible(false);
24
- }
25
- }, []);
26
- const handleDismiss = useCallback(() => {
27
- localStorage.setItem(DISMISSED_KEY, 'true');
28
- setVisible(false);
29
- }, []);
30
- if (!visible)
31
- return null;
32
- return (_jsxs("div", { className: "bg-background absolute bottom-4 left-4 z-50 flex max-w-sm items-center gap-3 rounded-lg border p-3 shadow-lg", children: [_jsx(Bell, { className: "text-muted-foreground size-5 shrink-0" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "Enable desktop notifications to stay updated on feature progress." }), _jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [_jsx(Button, { size: "sm", onClick: handleEnable, children: "Enable" }), _jsx(Button, { variant: "ghost", size: "icon-xs", onClick: handleDismiss, "aria-label": "Dismiss notification banner", children: _jsx(X, {}) })] })] }));
33
- }
@@ -1,6 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
- declare const meta: Meta;
3
- export default meta;
4
- type Story = StoryObj<typeof meta>;
5
- export declare const Default: Story;
6
- //# sourceMappingURL=notification-permission-banner.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"notification-permission-banner.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAQvD,QAAA,MAAM,IAAI,EAAE,IAMX,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAgCnC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC"}
@@ -1,24 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Bell, X } from 'lucide-react';
3
- import { Button } from '../../ui/button.js';
4
- function noop() {
5
- // story placeholder
6
- }
7
- const meta = {
8
- title: 'Composed/NotificationPermissionBanner',
9
- parameters: {
10
- layout: 'padded',
11
- },
12
- tags: ['autodocs'],
13
- };
14
- export default meta;
15
- /**
16
- * Static render of the banner since the real component depends on the
17
- * browser Notification API which is unavailable in Storybook.
18
- */
19
- function BannerPreview() {
20
- return (_jsx("div", { className: "bg-muted/30 relative h-64 w-full rounded-lg border", children: _jsxs("div", { className: "bg-background absolute bottom-4 left-4 z-50 flex max-w-sm items-center gap-3 rounded-lg border p-3 shadow-lg", children: [_jsx(Bell, { className: "text-muted-foreground size-5 shrink-0" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "Enable desktop notifications to stay updated on feature progress." }), _jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [_jsx(Button, { size: "sm", onClick: noop, children: "Enable" }), _jsx(Button, { variant: "ghost", size: "icon-xs", onClick: noop, "aria-label": "Dismiss notification banner", children: _jsx(X, {}) })] })] }) }));
21
- }
22
- export const Default = {
23
- render: () => _jsx(BannerPreview, {}),
24
- };
@@ -1,293 +0,0 @@
1
- import { useState } from 'react';
2
- import type { Meta, StoryObj } from '@storybook/react';
3
- import { PrStatus, CiStatus } from '@shepai/core/domain/generated/output';
4
- import { Button } from '@/components/ui/button';
5
- import { DrawerCloseGuardProvider } from '@/hooks/drawer-close-guard';
6
- import { ControlCenterDrawer } from './control-center-drawer';
7
- import type { DrawerView } from './drawer-view';
8
-
9
- const meta: Meta<typeof ControlCenterDrawer> = {
10
- title: 'Drawers/ControlCenterDrawer',
11
- component: ControlCenterDrawer,
12
- tags: ['autodocs'],
13
- decorators: [
14
- (Story) => (
15
- <DrawerCloseGuardProvider>
16
- <Story />
17
- </DrawerCloseGuardProvider>
18
- ),
19
- ],
20
- parameters: {
21
- layout: 'fullscreen',
22
- },
23
- };
24
-
25
- export default meta;
26
- type Story = StoryObj<typeof ControlCenterDrawer>;
27
-
28
- /* ---------------------------------------------------------------------------
29
- * Fixtures
30
- * ------------------------------------------------------------------------- */
31
-
32
- const featureView: DrawerView = {
33
- type: 'feature',
34
- node: {
35
- name: 'Auth Module',
36
- description: 'Implement OAuth2 authentication flow',
37
- featureId: '#f1',
38
- lifecycle: 'implementation',
39
- state: 'running',
40
- progress: 45,
41
- agentType: 'claude-code',
42
- repositoryPath: '/home/user/my-repo',
43
- branch: 'feat/auth-module',
44
- specPath: '/home/user/my-repo/specs/001-auth-module',
45
- },
46
- };
47
-
48
- const featureDoneView: DrawerView = {
49
- type: 'feature',
50
- node: {
51
- name: 'Payment Gateway',
52
- description: 'Stripe integration for subscriptions',
53
- featureId: '#f3',
54
- lifecycle: 'maintain',
55
- state: 'done',
56
- progress: 100,
57
- runtime: '1h 42m',
58
- repositoryPath: '/home/user/my-repo',
59
- branch: 'feat/payment-gateway',
60
- pr: {
61
- url: 'https://github.com/org/repo/pull/42',
62
- number: 42,
63
- status: PrStatus.Merged,
64
- ciStatus: CiStatus.Success,
65
- commitHash: 'abc1234567890',
66
- },
67
- },
68
- };
69
-
70
- const featureErrorView: DrawerView = {
71
- type: 'feature',
72
- node: {
73
- name: 'Email Service',
74
- description: 'Transactional email with SendGrid',
75
- featureId: '#f5',
76
- lifecycle: 'review',
77
- state: 'error',
78
- progress: 30,
79
- errorMessage: 'Build failed: type mismatch in auth middleware',
80
- repositoryPath: '/home/user/my-repo',
81
- branch: 'feat/email-service',
82
- },
83
- };
84
-
85
- const prdReviewView: DrawerView = {
86
- type: 'prd-review',
87
- node: {
88
- name: 'API Rate Limiting',
89
- description: 'Sliding window rate limiting for public endpoints',
90
- featureId: 'feat-abc123',
91
- lifecycle: 'requirements',
92
- state: 'action-required',
93
- progress: 0,
94
- repositoryPath: '/home/user/my-repo',
95
- branch: 'feat/api-rate-limiting',
96
- specPath: '/home/user/my-repo/specs/002-rate-limiting',
97
- },
98
- };
99
-
100
- const techReviewView: DrawerView = {
101
- type: 'tech-review',
102
- node: {
103
- name: 'Search Index',
104
- description: 'Elasticsearch full-text search integration',
105
- featureId: 'feat-def456',
106
- lifecycle: 'implementation',
107
- state: 'action-required',
108
- progress: 0,
109
- repositoryPath: '/home/user/my-repo',
110
- branch: 'feat/search-index',
111
- specPath: '/home/user/my-repo/specs/003-search',
112
- },
113
- };
114
-
115
- const mergeReviewView: DrawerView = {
116
- type: 'merge-review',
117
- node: {
118
- name: 'Auth Module',
119
- description: 'OAuth2 authentication flow',
120
- featureId: 'feat-ghi789',
121
- lifecycle: 'review',
122
- state: 'action-required',
123
- progress: 100,
124
- repositoryPath: '/home/user/my-repo',
125
- branch: 'feat/auth-module',
126
- specPath: '/home/user/my-repo/specs/001-auth-module',
127
- pr: {
128
- url: 'https://github.com/org/repo/pull/17',
129
- number: 17,
130
- status: PrStatus.Open,
131
- ciStatus: CiStatus.Success,
132
- },
133
- },
134
- };
135
-
136
- const createView: DrawerView = {
137
- type: 'feature-create',
138
- repositoryPath: '/home/user/my-repo',
139
- features: [
140
- { id: 'feat-abc123', name: 'API Rate Limiting' },
141
- { id: 'feat-def456', name: 'Search Index' },
142
- ],
143
- workflowDefaults: {
144
- approvalGates: { allowPrd: true, allowPlan: false, allowMerge: false },
145
- push: true,
146
- openPr: false,
147
- },
148
- };
149
-
150
- const repositoryView: DrawerView = {
151
- type: 'repository',
152
- data: {
153
- id: 'repo-1',
154
- name: 'my-awesome-app',
155
- repositoryPath: '/home/user/my-awesome-app',
156
- },
157
- };
158
-
159
- /* ---------------------------------------------------------------------------
160
- * Trigger wrapper
161
- * ------------------------------------------------------------------------- */
162
-
163
- function Trigger({ view, label }: { view: DrawerView; label: string }) {
164
- const [activeView, setActiveView] = useState<DrawerView | null>(null);
165
-
166
- return (
167
- <div className="flex h-screen items-start p-4">
168
- <Button variant="outline" onClick={() => setActiveView(view)}>
169
- {label}
170
- </Button>
171
- <ControlCenterDrawer
172
- view={activeView}
173
- onClose={() => setActiveView(null)}
174
- onDelete={(_id) => undefined}
175
- onCreateSubmit={() => setActiveView(null)}
176
- />
177
- </div>
178
- );
179
- }
180
-
181
- /* ---------------------------------------------------------------------------
182
- * Stories — one per view type
183
- * ------------------------------------------------------------------------- */
184
-
185
- /** Feature info view — running state with progress. Default story. */
186
- export const Default: Story = {
187
- render: () => <Trigger view={featureView} label="Open Feature (Running)" />,
188
- };
189
-
190
- /** Feature info view — completed (maintain lifecycle, done state, merged PR). */
191
- export const FeatureDone: Story = {
192
- render: () => <Trigger view={featureDoneView} label="Open Feature (Done + PR)" />,
193
- };
194
-
195
- /** Feature info view — error state. */
196
- export const FeatureError: Story = {
197
- render: () => <Trigger view={featureErrorView} label="Open Feature (Error)" />,
198
- };
199
-
200
- /**
201
- * PRD review view — loads questionnaire data via server action.
202
- * Shows spinner in Storybook (no real API available).
203
- */
204
- export const PrdReview: Story = {
205
- render: () => <Trigger view={prdReviewView} label="Open PRD Review" />,
206
- };
207
-
208
- /**
209
- * Tech decisions review view — loads research artifact via server action.
210
- * Shows spinner in Storybook.
211
- */
212
- export const TechReview: Story = {
213
- render: () => <Trigger view={techReviewView} label="Open Tech Review" />,
214
- };
215
-
216
- /**
217
- * Merge review view — loads merge review data via server action.
218
- * Shows spinner in Storybook.
219
- */
220
- export const MergeReview: Story = {
221
- render: () => <Trigger view={mergeReviewView} label="Open Merge Review" />,
222
- };
223
-
224
- /** Feature create form. */
225
- export const FeatureCreate: Story = {
226
- render: () => <Trigger view={createView} label="Open Create Feature" />,
227
- };
228
-
229
- /** Repository actions view. */
230
- export const Repository: Story = {
231
- render: () => <Trigger view={repositoryView} label="Open Repository" />,
232
- };
233
-
234
- /* ---------------------------------------------------------------------------
235
- * Interactive switcher — cycle through all views
236
- * ------------------------------------------------------------------------- */
237
-
238
- const allViews: { label: string; view: DrawerView }[] = [
239
- { label: 'Feature (Running)', view: featureView },
240
- { label: 'Feature (Done)', view: featureDoneView },
241
- { label: 'Feature (Error)', view: featureErrorView },
242
- { label: 'PRD Review', view: prdReviewView },
243
- { label: 'Tech Review', view: techReviewView },
244
- { label: 'Merge Review', view: mergeReviewView },
245
- { label: 'Create Feature', view: createView },
246
- { label: 'Repository', view: repositoryView },
247
- ];
248
-
249
- function AllViewsSwitcher() {
250
- const [activeView, setActiveView] = useState<DrawerView | null>(null);
251
-
252
- return (
253
- <div className="flex h-screen">
254
- <div className="flex flex-col gap-2 p-4">
255
- <span className="text-muted-foreground mb-2 text-xs font-semibold tracking-wider uppercase">
256
- Select view
257
- </span>
258
- {allViews.map(({ label, view }) => (
259
- <button
260
- key={label}
261
- type="button"
262
- onClick={() => setActiveView(view)}
263
- className={`rounded-md px-3 py-1.5 text-left text-sm ${
264
- activeView?.type === view.type
265
- ? 'bg-primary text-primary-foreground'
266
- : 'bg-muted hover:bg-muted/80'
267
- }`}
268
- >
269
- {label}
270
- </button>
271
- ))}
272
- <button
273
- type="button"
274
- onClick={() => setActiveView(null)}
275
- className="bg-destructive/10 text-destructive hover:bg-destructive/20 mt-2 rounded-md px-3 py-1.5 text-left text-sm"
276
- >
277
- Close drawer
278
- </button>
279
- </div>
280
- <ControlCenterDrawer
281
- view={activeView}
282
- onClose={() => setActiveView(null)}
283
- onDelete={(_id) => undefined}
284
- onCreateSubmit={() => setActiveView(null)}
285
- />
286
- </div>
287
- );
288
- }
289
-
290
- /** Interactive — click any view type to open that drawer panel. */
291
- export const AllViews: Story = {
292
- render: () => <AllViewsSwitcher />,
293
- };