@shepai/cli 1.78.1 → 1.79.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 (292) hide show
  1. package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.d.ts.map +1 -1
  2. package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.js +14 -1
  3. package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts +17 -0
  4. package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts.map +1 -0
  5. package/dist/src/presentation/web/app/actions/get-feature-phase-timings.js +25 -0
  6. package/dist/src/presentation/web/app/actions/get-feature-plan.d.ts +18 -0
  7. package/dist/src/presentation/web/app/actions/get-feature-plan.d.ts.map +1 -0
  8. package/dist/src/presentation/web/app/actions/get-feature-plan.js +31 -0
  9. package/dist/src/presentation/web/app/api/feature-logs/route.d.ts +16 -0
  10. package/dist/src/presentation/web/app/api/feature-logs/route.d.ts.map +1 -0
  11. package/dist/src/presentation/web/app/api/feature-logs/route.js +184 -0
  12. package/dist/src/presentation/web/app/build-feature-node-data.d.ts +7 -1
  13. package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
  14. package/dist/src/presentation/web/app/build-feature-node-data.js +7 -1
  15. package/dist/src/presentation/web/app/build-graph-nodes.js +7 -3
  16. package/dist/src/presentation/web/app/settings/page.js +1 -1
  17. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +7 -19
  18. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -1
  19. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +6 -6
  20. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  21. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +48 -85
  22. package/dist/src/presentation/web/components/common/feature-drawer/index.d.ts +1 -1
  23. package/dist/src/presentation/web/components/common/feature-drawer/index.d.ts.map +1 -1
  24. package/dist/src/presentation/web/components/common/feature-drawer/index.js +1 -1
  25. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts +8 -0
  26. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map +1 -0
  27. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +90 -0
  28. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts +20 -0
  29. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts.map +1 -0
  30. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.js +252 -0
  31. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +31 -0
  32. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -0
  33. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +123 -0
  34. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.d.ts +20 -0
  35. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.d.ts.map +1 -0
  36. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.js +315 -0
  37. package/dist/src/presentation/web/components/common/feature-drawer-tabs/index.d.ts +3 -0
  38. package/dist/src/presentation/web/components/common/feature-drawer-tabs/index.d.ts.map +1 -0
  39. package/dist/src/presentation/web/components/common/feature-drawer-tabs/index.js +1 -0
  40. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.d.ts +7 -0
  41. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.d.ts.map +1 -0
  42. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.js +35 -0
  43. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts +18 -0
  44. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts.map +1 -0
  45. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.js +89 -0
  46. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts +6 -0
  47. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts.map +1 -0
  48. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +78 -0
  49. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts +28 -0
  50. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts.map +1 -0
  51. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.js +157 -0
  52. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.d.ts +8 -0
  53. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.d.ts.map +1 -0
  54. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.js +40 -0
  55. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts +22 -0
  56. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts.map +1 -0
  57. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.js +188 -0
  58. package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.d.ts +30 -0
  59. package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.d.ts.map +1 -0
  60. package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.js +100 -0
  61. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +12 -0
  62. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  63. package/dist/src/presentation/web/components/common/index.d.ts +3 -4
  64. package/dist/src/presentation/web/components/common/index.d.ts.map +1 -1
  65. package/dist/src/presentation/web/components/common/index.js +3 -4
  66. package/dist/src/presentation/web/components/common/merge-review/index.d.ts +1 -2
  67. package/dist/src/presentation/web/components/common/merge-review/index.d.ts.map +1 -1
  68. package/dist/src/presentation/web/components/common/merge-review/index.js +0 -1
  69. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts +0 -8
  70. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts.map +1 -1
  71. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.js +1 -33
  72. package/dist/src/presentation/web/components/common/prd-questionnaire/index.d.ts +1 -2
  73. package/dist/src/presentation/web/components/common/prd-questionnaire/index.d.ts.map +1 -1
  74. package/dist/src/presentation/web/components/common/prd-questionnaire/index.js +0 -1
  75. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts +0 -10
  76. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts.map +1 -1
  77. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.js +1 -38
  78. package/dist/src/presentation/web/components/common/tech-decisions-review/index.d.ts +1 -2
  79. package/dist/src/presentation/web/components/common/tech-decisions-review/index.d.ts.map +1 -1
  80. package/dist/src/presentation/web/components/common/tech-decisions-review/index.js +0 -1
  81. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts +0 -8
  82. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts.map +1 -1
  83. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.js +1 -29
  84. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.js +2 -2
  85. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +9 -9
  86. package/dist/src/presentation/web/hooks/use-feature-logs.d.ts +7 -0
  87. package/dist/src/presentation/web/hooks/use-feature-logs.d.ts.map +1 -0
  88. package/dist/src/presentation/web/hooks/use-feature-logs.js +52 -0
  89. package/dist/tsconfig.build.tsbuildinfo +1 -1
  90. package/package.json +1 -1
  91. package/web/.next/BUILD_ID +1 -1
  92. package/web/.next/app-path-routes-manifest.json +1 -0
  93. package/web/.next/build-manifest.json +2 -2
  94. package/web/.next/fallback-build-manifest.json +2 -2
  95. package/web/.next/prerender-manifest.json +3 -3
  96. package/web/.next/required-server-files.js +1 -1
  97. package/web/.next/required-server-files.json +1 -1
  98. package/web/.next/routes-manifest.json +6 -0
  99. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +18 -18
  100. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  101. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  102. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +68 -38
  103. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  104. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  105. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  106. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
  107. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  108. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  109. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +18 -18
  110. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  111. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  112. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +68 -38
  113. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  114. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  115. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  116. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +14 -14
  117. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  118. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  119. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
  120. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  121. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  122. package/web/.next/server/app/_global-error.html +2 -2
  123. package/web/.next/server/app/_global-error.rsc +1 -1
  124. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  125. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  126. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  127. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  128. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  129. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  130. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  131. package/web/.next/server/app/api/feature-logs/route/app-paths-manifest.json +3 -0
  132. package/web/.next/server/app/api/feature-logs/route/build-manifest.json +11 -0
  133. package/web/.next/server/app/api/feature-logs/route/server-reference-manifest.json +4 -0
  134. package/web/.next/server/app/api/feature-logs/route.js +6 -0
  135. package/web/.next/server/app/api/feature-logs/route.js.map +5 -0
  136. package/web/.next/server/app/api/feature-logs/route.js.nft.json +1 -0
  137. package/web/.next/server/app/api/feature-logs/route_client-reference-manifest.js +2 -0
  138. package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
  139. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  140. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  141. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  142. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  143. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  144. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  145. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  146. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  147. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  148. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  149. package/web/.next/server/app-paths-manifest.json +1 -0
  150. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_feature-logs_route_actions_177445e7.js +3 -0
  151. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_feature-logs_route_actions_177445e7.js.map +1 -0
  152. package/web/.next/server/chunks/[root-of-the-server]__91d44424._.js +12 -0
  153. package/web/.next/server/chunks/[root-of-the-server]__91d44424._.js.map +1 -0
  154. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  155. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  156. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +1 -1
  157. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js.map +1 -1
  158. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
  159. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js.map +1 -1
  160. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
  161. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
  162. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js +1 -1
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
  165. package/web/.next/server/chunks/ssr/[root-of-the-server]__6eb2a2b0._.js +1 -1
  166. package/web/.next/server/chunks/ssr/[root-of-the-server]__6eb2a2b0._.js.map +1 -1
  167. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
  168. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  169. package/web/.next/server/chunks/ssr/{[root-of-the-server]__a337ca5c._.js → [root-of-the-server]__ae824a5b._.js} +2 -2
  170. package/web/.next/server/chunks/ssr/[root-of-the-server]__ae824a5b._.js.map +1 -0
  171. package/web/.next/server/chunks/ssr/[root-of-the-server]__b3a4cef4._.js +1 -1
  172. package/web/.next/server/chunks/ssr/[root-of-the-server]__b3a4cef4._.js.map +1 -1
  173. package/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js +1 -1
  174. package/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js.map +1 -1
  175. package/web/.next/server/chunks/ssr/[root-of-the-server]__f0d8d054._.js +2 -2
  176. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
  177. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
  178. package/web/.next/server/chunks/ssr/_1e3cf73b._.js +1 -1
  179. package/web/.next/server/chunks/ssr/_1e3cf73b._.js.map +1 -1
  180. package/web/.next/server/chunks/ssr/_34fbed18._.js +1 -1
  181. package/web/.next/server/chunks/ssr/_34fbed18._.js.map +1 -1
  182. package/web/.next/server/chunks/ssr/{_06db7efd._.js → _3e88ce9d._.js} +2 -2
  183. package/web/.next/server/chunks/ssr/{_06db7efd._.js.map → _3e88ce9d._.js.map} +1 -1
  184. package/web/.next/server/chunks/ssr/_5d4e7151._.js +3 -0
  185. package/web/.next/server/chunks/ssr/{_5c4ce700._.js.map → _5d4e7151._.js.map} +1 -1
  186. package/web/.next/server/chunks/ssr/_63868199._.js +1 -1
  187. package/web/.next/server/chunks/ssr/_63868199._.js.map +1 -1
  188. package/web/.next/server/chunks/ssr/{_b0924a46._.js → _83cf28a3._.js} +2 -2
  189. package/web/.next/server/chunks/ssr/{_b0924a46._.js.map → _83cf28a3._.js.map} +1 -1
  190. package/web/.next/server/chunks/ssr/{_4031d614._.js → _887258d0._.js} +2 -2
  191. package/web/.next/server/chunks/ssr/{_4031d614._.js.map → _887258d0._.js.map} +1 -1
  192. package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
  193. package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
  194. package/web/.next/server/chunks/ssr/_acb6a73d._.js +3 -0
  195. package/web/.next/server/chunks/ssr/{_a38f282a._.js.map → _acb6a73d._.js.map} +1 -1
  196. package/web/.next/server/chunks/ssr/{_5dab501b._.js → _ba97cfd3._.js} +2 -2
  197. package/web/.next/server/chunks/ssr/{_5dab501b._.js.map → _ba97cfd3._.js.map} +1 -1
  198. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  199. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  200. package/web/.next/server/chunks/ssr/node_modules__pnpm_d80c1060._.js +3 -0
  201. package/web/.next/server/chunks/ssr/node_modules__pnpm_d80c1060._.js.map +1 -0
  202. package/web/.next/server/chunks/ssr/src_presentation_web_7efa14ca._.js +3 -0
  203. package/web/.next/server/chunks/ssr/src_presentation_web_7efa14ca._.js.map +1 -0
  204. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +1 -1
  205. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js.map +1 -1
  206. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  207. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  208. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  209. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  210. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js +1 -1
  211. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js.map +1 -1
  212. package/web/.next/server/chunks/ssr/src_presentation_web_b59d79db._.js +3 -0
  213. package/web/.next/server/chunks/ssr/src_presentation_web_b59d79db._.js.map +1 -0
  214. package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js +2 -2
  215. package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js.map +1 -1
  216. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  217. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  218. package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js +2 -2
  219. package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js.map +1 -1
  220. package/web/.next/server/pages/500.html +2 -2
  221. package/web/.next/server/server-reference-manifest.js +1 -1
  222. package/web/.next/server/server-reference-manifest.json +108 -64
  223. package/web/.next/static/chunks/{87152e918f80ea8b.js → 297458261f67218c.js} +1 -1
  224. package/web/.next/static/chunks/{1f57d0c949dbb44d.js → 2a24ac257fc1c10b.js} +1 -1
  225. package/web/.next/static/chunks/352e25e1bb2b9edb.js +1 -0
  226. package/web/.next/static/chunks/{8fe834f8a3c36e2f.js → 47ecde22e9663419.js} +2 -2
  227. package/web/.next/static/chunks/{27c4a8493483e6f3.js → 49743c83c9bced40.js} +1 -1
  228. package/web/.next/static/chunks/4b20d522b4f5ca7e.js +1 -0
  229. package/web/.next/static/chunks/{9d8c6c874071efb2.js → 5688494bf052915d.js} +1 -1
  230. package/web/.next/static/chunks/77a956d5dd063fef.js +1 -0
  231. package/web/.next/static/chunks/{78455afb0164395c.js → 8eff15a7f35164f9.js} +2 -2
  232. package/web/.next/static/chunks/96bab6d3820504f3.css +2 -0
  233. package/web/.next/static/chunks/a1c2ecb710b44081.js +1 -0
  234. package/web/.next/static/chunks/{6f7ba7846dcc8b21.js → d8d464c156573994.js} +1 -1
  235. package/web/.next/static/chunks/e29d1e26c2694f78.js +1 -0
  236. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts +0 -9
  237. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts.map +0 -1
  238. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.js +0 -60
  239. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts +0 -47
  240. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts.map +0 -1
  241. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.js +0 -307
  242. package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.d.ts +0 -3
  243. package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.d.ts.map +0 -1
  244. package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.js +0 -8
  245. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.d.ts +0 -3
  246. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.d.ts.map +0 -1
  247. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.js +0 -8
  248. package/dist/src/presentation/web/components/common/review-drawer-shell/index.d.ts +0 -3
  249. package/dist/src/presentation/web/components/common/review-drawer-shell/index.d.ts.map +0 -1
  250. package/dist/src/presentation/web/components/common/review-drawer-shell/index.js +0 -1
  251. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell-config.d.ts +0 -26
  252. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell-config.d.ts.map +0 -1
  253. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell-config.js +0 -1
  254. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.d.ts +0 -3
  255. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.d.ts.map +0 -1
  256. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.js +0 -29
  257. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.d.ts +0 -14
  258. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.d.ts.map +0 -1
  259. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.js +0 -33
  260. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.d.ts +0 -3
  261. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.d.ts.map +0 -1
  262. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.js +0 -8
  263. package/dist/src/presentation/web/components/common/tech-review-tabs/index.d.ts +0 -3
  264. package/dist/src/presentation/web/components/common/tech-review-tabs/index.d.ts.map +0 -1
  265. package/dist/src/presentation/web/components/common/tech-review-tabs/index.js +0 -1
  266. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs-config.d.ts +0 -21
  267. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs-config.d.ts.map +0 -1
  268. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs-config.js +0 -1
  269. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.d.ts +0 -3
  270. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.d.ts.map +0 -1
  271. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.js +0 -12
  272. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.stories.d.ts +0 -16
  273. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.stories.d.ts.map +0 -1
  274. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.stories.js +0 -110
  275. package/web/.next/server/chunks/ssr/[root-of-the-server]__a337ca5c._.js.map +0 -1
  276. package/web/.next/server/chunks/ssr/_5c4ce700._.js +0 -3
  277. package/web/.next/server/chunks/ssr/_a38f282a._.js +0 -3
  278. package/web/.next/server/chunks/ssr/node_modules__pnpm_5412e589._.js +0 -3
  279. package/web/.next/server/chunks/ssr/node_modules__pnpm_5412e589._.js.map +0 -1
  280. package/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js +0 -3
  281. package/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js.map +0 -1
  282. package/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js +0 -3
  283. package/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js.map +0 -1
  284. package/web/.next/static/chunks/08c0a9667c05866c.css +0 -2
  285. package/web/.next/static/chunks/0fb8038f7ad4d2cf.js +0 -1
  286. package/web/.next/static/chunks/1211dcaac5963f92.js +0 -1
  287. package/web/.next/static/chunks/6a3e8ea6e1fd2113.js +0 -1
  288. package/web/.next/static/chunks/7336f9ec160c7bd8.js +0 -1
  289. package/web/.next/static/chunks/ba8b2aaa356a5487.js +0 -1
  290. /package/web/.next/static/{M0oz1_1InoSyr7OMLAKf7 → hVGa8-vd4pFs9splpgq-k}/_buildManifest.js +0 -0
  291. /package/web/.next/static/{M0oz1_1InoSyr7OMLAKf7 → hVGa8-vd4pFs9splpgq-k}/_clientMiddlewareManifest.json +0 -0
  292. /package/web/.next/static/{M0oz1_1InoSyr7OMLAKf7 → hVGa8-vd4pFs9splpgq-k}/_ssgManifest.js +0 -0
@@ -1,4 +1,3 @@
1
1
  export { MergeReview } from './merge-review.js';
2
- export { MergeReviewDrawer } from './merge-review-drawer.js';
3
- export type { MergeReviewProps, MergeReviewDrawerProps, MergeReviewData, } from './merge-review-config.js';
2
+ export type { MergeReviewProps, MergeReviewData } from './merge-review-config.js';
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/merge-review/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EACV,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,GAChB,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/merge-review/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,2 +1 @@
1
1
  export { MergeReview } from './merge-review.js';
2
- export { MergeReviewDrawer } from './merge-review-drawer.js';
@@ -1,6 +1,5 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react';
2
2
  import { MergeReview } from './merge-review.js';
3
- import { MergeReviewDrawer } from './merge-review-drawer.js';
4
3
  declare const meta: Meta<typeof MergeReview>;
5
4
  export default meta;
6
5
  type Story = StoryObj<typeof MergeReview>;
@@ -22,11 +21,4 @@ export declare const NoPrWithDiff: Story;
22
21
  export declare const NoPrNoDiff: Story;
23
22
  /** With implementation phases shown. */
24
23
  export declare const WithPhases: Story;
25
- type DrawerStory = StoryObj<typeof MergeReviewDrawer>;
26
- /** Merge review drawer with full data. */
27
- export declare const InDrawer: DrawerStory;
28
- /** Drawer with delete button visible. */
29
- export declare const WithDeleteButton: DrawerStory;
30
- /** Drawer without PR — direct merge with diff summary and branch info. */
31
- export declare const InDrawerNoPr: DrawerStory;
32
24
  //# sourceMappingURL=merge-review.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"merge-review.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/merge-review/merge-review.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAsC1D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CAclC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;AAE1C,kDAAkD;AAClD,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,aAAa,EAAE,KAS3B,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,YAAY,EAAE,KAS1B,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC;AAIF,KAAK,WAAW,GAAG,QAAQ,CAAC,OAAO,iBAAiB,CAAC,CAAC;AA6BtD,0CAA0C;AAC1C,eAAO,MAAM,QAAQ,EAAE,WAYtB,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,EAAE,WAa9B,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,YAAY,EAAE,WAiB1B,CAAC"}
1
+ {"version":3,"file":"merge-review.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/merge-review/merge-review.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAsC7C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CAclC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;AAE1C,kDAAkD;AAClD,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,aAAa,EAAE,KAS3B,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,YAAY,EAAE,KAS1B,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC"}
@@ -1,9 +1,7 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState } from 'react';
1
+ import { jsx as _jsx } from "react/jsx-runtime";
3
2
  import { fn } from '@storybook/test';
4
3
  import { PrStatus, CiStatus } from '../../../../../../packages/core/src/domain/generated/output.js';
5
4
  import { MergeReview } from './merge-review.js';
6
- import { MergeReviewDrawer } from './merge-review-drawer.js';
7
5
  const fullPr = {
8
6
  url: 'https://github.com/shep-ai/cli/pull/42',
9
7
  number: 42,
@@ -132,33 +130,3 @@ export const WithPhases = {
132
130
  ...defaultActions,
133
131
  },
134
132
  };
135
- const drawerMeta = {
136
- component: MergeReviewDrawer,
137
- tags: ['autodocs'],
138
- parameters: {
139
- layout: 'fullscreen',
140
- },
141
- };
142
- function DrawerTemplate(props) {
143
- const [open, setOpen] = useState(true);
144
- return (_jsxs("div", { style: { height: '100vh', background: '#f8fafc', padding: '2rem' }, children: [_jsx("button", { type: "button", onClick: () => setOpen(true), style: { padding: '8px 16px', border: '1px solid #ccc', borderRadius: '6px' }, children: "Open Drawer" }), _jsx(MergeReviewDrawer, { ...props, open: open, onClose: () => setOpen(false) })] }));
145
- }
146
- /** Merge review drawer with full data. */
147
- export const InDrawer = {
148
- ...drawerMeta,
149
- render: () => (_jsx(DrawerTemplate, { featureName: "Add User Authentication", featureId: "FEAT-042", repositoryPath: "/home/user/projects/my-app", branch: "feat/add-auth", data: fullData, ...defaultActions })),
150
- };
151
- /** Drawer with delete button visible. */
152
- export const WithDeleteButton = {
153
- ...drawerMeta,
154
- render: () => (_jsx(DrawerTemplate, { featureName: "Add User Authentication", featureId: "FEAT-042", repositoryPath: "/home/user/projects/my-app", branch: "feat/add-auth", data: fullData, ...defaultActions, onDelete: fn().mockName('onDelete') })),
155
- };
156
- /** Drawer without PR — direct merge with diff summary and branch info. */
157
- export const InDrawerNoPr = {
158
- ...drawerMeta,
159
- render: () => (_jsx(DrawerTemplate, { featureName: "Fix Login Bug", featureId: "FEAT-099", repositoryPath: "/home/user/projects/my-app", branch: "feat/fix-login", data: {
160
- branch: { source: 'feat/fix-login', target: 'main' },
161
- phases: samplePhases,
162
- diffSummary: fullData.diffSummary,
163
- }, ...defaultActions, onDelete: fn().mockName('onDelete') })),
164
- };
@@ -1,4 +1,3 @@
1
1
  export { PrdQuestionnaire } from './prd-questionnaire.js';
2
- export { PrdQuestionnaireDrawer } from './prd-questionnaire-drawer.js';
3
- export type { PrdQuestionnaireProps, PrdQuestionnaireDrawerProps, PrdOption, PrdQuestion, PrdFinalAction, PrdQuestionnaireData, } from './prd-questionnaire-config.js';
2
+ export type { PrdQuestionnaireProps, PrdOption, PrdQuestion, PrdFinalAction, PrdQuestionnaireData, } from './prd-questionnaire-config.js';
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/prd-questionnaire/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,YAAY,EACV,qBAAqB,EACrB,2BAA2B,EAC3B,SAAS,EACT,WAAW,EACX,cAAc,EACd,oBAAoB,GACrB,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/prd-questionnaire/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EACV,qBAAqB,EACrB,SAAS,EACT,WAAW,EACX,cAAc,EACd,oBAAoB,GACrB,MAAM,4BAA4B,CAAC"}
@@ -1,2 +1 @@
1
1
  export { PrdQuestionnaire } from './prd-questionnaire.js';
2
- export { PrdQuestionnaireDrawer } from './prd-questionnaire-drawer.js';
@@ -1,6 +1,5 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react';
2
2
  import { PrdQuestionnaire } from './prd-questionnaire.js';
3
- import { PrdQuestionnaireDrawer } from './prd-questionnaire-drawer.js';
4
3
  declare const meta: Meta<typeof PrdQuestionnaire>;
5
4
  export default meta;
6
5
  type Story = StoryObj<typeof PrdQuestionnaire>;
@@ -14,15 +13,6 @@ export declare const AllAnswered: Story;
14
13
  export declare const Refining: Story;
15
14
  /** Single question — minimal stepper with one step. */
16
15
  export declare const MinimalData: Story;
17
- type DrawerStory = StoryObj<typeof PrdQuestionnaireDrawer>;
18
- /** Drawer with stepper — navigate questions one at a time. */
19
- export declare const InDrawer: DrawerStory;
20
- /** Drawer with partial selections showing progress dots. */
21
- export declare const InDrawerWithSelections: DrawerStory;
22
- /** Drawer with delete button visible. */
23
- export declare const WithDeleteButton: DrawerStory;
24
- /** Drawer with delete in progress (button disabled). */
25
- export declare const DeletingState: DrawerStory;
26
16
  /** All answered with reject button visible on last step. */
27
17
  export declare const WithRejectButton: Story;
28
18
  /** Rejecting state — reject button disabled with spinner while reject action is in flight. */
@@ -1 +1 @@
1
- {"version":3,"file":"prd-questionnaire.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAiKpE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAkBvC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAU/C,sJAAsJ;AACtJ,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,cAAc,EAAE,KAW5B,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,WAAW,EAAE,KAczB,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,QAAQ,EAAE,KAStB,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,WAAW,EAAE,KA8BzB,CAAC;AAIF,KAAK,WAAW,GAAG,QAAQ,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAyC3D,8DAA8D;AAC9D,eAAO,MAAM,QAAQ,EAAE,WAWtB,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,sBAAsB,EAAE,WAepC,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,EAAE,WAW9B,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,aAAa,EAAE,WAY3B,CAAC;AAaF,4DAA4D;AAC5D,eAAO,MAAM,gBAAgB,EAAE,KAQ9B,CAAC;AAEF,8FAA8F;AAC9F,eAAO,MAAM,cAAc,EAAE,KAO5B,CAAC"}
1
+ {"version":3,"file":"prd-questionnaire.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAiKvD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAkBvC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAU/C,sJAAsJ;AACtJ,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,cAAc,EAAE,KAW5B,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,WAAW,EAAE,KAczB,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,QAAQ,EAAE,KAStB,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,WAAW,EAAE,KA8BzB,CAAC;AAaF,4DAA4D;AAC5D,eAAO,MAAM,gBAAgB,EAAE,KAQ9B,CAAC;AAEF,8FAA8F;AAC9F,eAAO,MAAM,cAAc,EAAE,KAO5B,CAAC"}
@@ -1,8 +1,7 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useState } from 'react';
3
3
  import { fn } from '@storybook/test';
4
4
  import { PrdQuestionnaire } from './prd-questionnaire.js';
5
- import { PrdQuestionnaireDrawer } from './prd-questionnaire-drawer.js';
6
5
  const mockQuestions = [
7
6
  {
8
7
  id: 'problem',
@@ -227,42 +226,6 @@ export const MinimalData = {
227
226
  },
228
227
  } })),
229
228
  };
230
- const drawerMeta = {
231
- component: PrdQuestionnaireDrawer,
232
- tags: ['autodocs'],
233
- parameters: {
234
- layout: 'fullscreen',
235
- },
236
- };
237
- function DrawerTemplate({ selections: initialSelections = {}, ...props }) {
238
- const [open, setOpen] = useState(true);
239
- const [selections, setSelections] = useState(initialSelections);
240
- return (_jsxs("div", { style: { height: '100vh', background: '#f8fafc', padding: '2rem' }, children: [_jsx("button", { type: "button", onClick: () => setOpen(true), style: { padding: '8px 16px', border: '1px solid #ccc', borderRadius: '6px' }, children: "Open Drawer" }), _jsx(PrdQuestionnaireDrawer, { ...props, open: open, onClose: () => setOpen(false), selections: selections, onSelect: (qId, optId) => setSelections((prev) => ({ ...prev, [qId]: optId })), onApprove: fn().mockName('onApprove') })] }));
241
- }
242
- /** Drawer with stepper — navigate questions one at a time. */
243
- export const InDrawer = {
244
- ...drawerMeta,
245
- render: () => (_jsx(DrawerTemplate, { featureName: "User Authentication Flow", featureDescription: "Implement OAuth2 login with social providers and MFA support", featureId: "FEAT-042", lifecycleLabel: "Requirements", data: mockData })),
246
- };
247
- /** Drawer with partial selections showing progress dots. */
248
- export const InDrawerWithSelections = {
249
- ...drawerMeta,
250
- render: () => (_jsx(DrawerTemplate, { featureName: "User Authentication Flow", featureId: "FEAT-042", lifecycleLabel: "Requirements", data: mockData, selections: {
251
- problem: 'user_pain',
252
- priority: 'p1',
253
- success: 'adoption',
254
- } })),
255
- };
256
- /** Drawer with delete button visible. */
257
- export const WithDeleteButton = {
258
- ...drawerMeta,
259
- render: () => (_jsx(DrawerTemplate, { featureName: "User Authentication Flow", featureId: "FEAT-042", lifecycleLabel: "Requirements", data: mockData, onDelete: fn().mockName('onDelete') })),
260
- };
261
- /** Drawer with delete in progress (button disabled). */
262
- export const DeletingState = {
263
- ...drawerMeta,
264
- render: () => (_jsx(DrawerTemplate, { featureName: "User Authentication Flow", featureId: "FEAT-042", lifecycleLabel: "Requirements", data: mockData, onDelete: fn().mockName('onDelete'), isDeleting: true })),
265
- };
266
229
  /* ─── Reject Variants ─── */
267
230
  const allAnsweredSelections = {
268
231
  problem: 'user_pain',
@@ -1,4 +1,3 @@
1
1
  export { TechDecisionsReview, TechDecisionsContent } from './tech-decisions-review.js';
2
- export { TechDecisionsDrawer } from './tech-decisions-drawer.js';
3
- export type { TechDecisionsReviewProps, TechDecisionsDrawerProps, TechDecisionsReviewData, TechDecision, } from './tech-decisions-review-config.js';
2
+ export type { TechDecisionsReviewProps, TechDecisionsReviewData, TechDecision, } from './tech-decisions-review-config.js';
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/tech-decisions-review/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EACV,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,EACvB,YAAY,GACb,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/tech-decisions-review/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpF,YAAY,EACV,wBAAwB,EACxB,uBAAuB,EACvB,YAAY,GACb,MAAM,gCAAgC,CAAC"}
@@ -1,2 +1 @@
1
1
  export { TechDecisionsReview, TechDecisionsContent } from './tech-decisions-review.js';
2
- export { TechDecisionsDrawer } from './tech-decisions-drawer.js';
@@ -1,6 +1,5 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react';
2
2
  import { TechDecisionsReview } from './tech-decisions-review.js';
3
- import { TechDecisionsDrawer } from './tech-decisions-drawer.js';
4
3
  declare const meta: Meta<typeof TechDecisionsReview>;
5
4
  export default meta;
6
5
  type Story = StoryObj<typeof TechDecisionsReview>;
@@ -12,13 +11,6 @@ export declare const Processing: Story;
12
11
  export declare const SingleDecision: Story;
13
12
  /** No technologies listed. */
14
13
  export declare const NoTechnologies: Story;
15
- type DrawerStory = StoryObj<typeof TechDecisionsDrawer>;
16
- /** Drawer with tech decisions list. */
17
- export declare const InDrawer: DrawerStory;
18
- /** Drawer with delete button visible. */
19
- export declare const WithDeleteButton: DrawerStory;
20
- /** Drawer with delete in progress (button disabled). */
21
- export declare const DeletingState: DrawerStory;
22
14
  /** With reject button visible next to approve. */
23
15
  export declare const WithRejectButton: Story;
24
16
  /** Rejecting state — reject button disabled while reject action is in flight. */
@@ -1 +1 @@
1
- {"version":3,"file":"tech-decisions-review.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AA0C9D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,mBAAmB,CAc1C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAElD,oHAAoH;AACpH,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAEF,uBAAuB;AACvB,eAAO,MAAM,cAAc,EAAE,KAM5B,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,cAAc,EAAE,KAM5B,CAAC;AAIF,KAAK,WAAW,GAAG,QAAQ,CAAC,OAAO,mBAAmB,CAAC,CAAC;AA6BxD,uCAAuC;AACvC,eAAO,MAAM,QAAQ,EAAE,WAWtB,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,EAAE,WAY9B,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,aAAa,EAAE,WAa3B,CAAC;AAIF,kDAAkD;AAClD,eAAO,MAAM,gBAAgB,EAAE,KAM9B,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,cAAc,EAAE,KAO5B,CAAC"}
1
+ {"version":3,"file":"tech-decisions-review.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AA0C9D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,mBAAmB,CAc1C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAElD,oHAAoH;AACpH,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAEF,uBAAuB;AACvB,eAAO,MAAM,cAAc,EAAE,KAM5B,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,cAAc,EAAE,KAM5B,CAAC;AAIF,kDAAkD;AAClD,eAAO,MAAM,gBAAgB,EAAE,KAM9B,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,cAAc,EAAE,KAO5B,CAAC"}
@@ -1,8 +1,6 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState } from 'react';
1
+ import { jsx as _jsx } from "react/jsx-runtime";
3
2
  import { fn } from '@storybook/test';
4
3
  import { TechDecisionsReview } from './tech-decisions-review.js';
5
- import { TechDecisionsDrawer } from './tech-decisions-drawer.js';
6
4
  const mockData = {
7
5
  name: 'Agent Executor Abstraction',
8
6
  summary: 'Research into the best approach for abstracting agent executors to support multiple AI backends (Claude Code, Cursor, custom agents).',
@@ -79,32 +77,6 @@ export const NoTechnologies = {
79
77
  onApprove: fn().mockName('onApprove'),
80
78
  },
81
79
  };
82
- const drawerMeta = {
83
- component: TechDecisionsDrawer,
84
- tags: ['autodocs'],
85
- parameters: {
86
- layout: 'fullscreen',
87
- },
88
- };
89
- function DrawerTemplate(props) {
90
- const [open, setOpen] = useState(true);
91
- return (_jsxs("div", { style: { height: '100vh', background: '#f8fafc', padding: '2rem' }, children: [_jsx("button", { type: "button", onClick: () => setOpen(true), style: { padding: '8px 16px', border: '1px solid #ccc', borderRadius: '6px' }, children: "Open Drawer" }), _jsx(TechDecisionsDrawer, { ...props, open: open, onClose: () => setOpen(false) })] }));
92
- }
93
- /** Drawer with tech decisions list. */
94
- export const InDrawer = {
95
- ...drawerMeta,
96
- render: () => (_jsx(DrawerTemplate, { featureName: "Agent Executor Abstraction", featureId: "FEAT-099", data: mockData, onApprove: fn().mockName('onApprove'), onReject: fn().mockName('onReject') })),
97
- };
98
- /** Drawer with delete button visible. */
99
- export const WithDeleteButton = {
100
- ...drawerMeta,
101
- render: () => (_jsx(DrawerTemplate, { featureName: "Agent Executor Abstraction", featureId: "FEAT-099", data: mockData, onApprove: fn().mockName('onApprove'), onReject: fn().mockName('onReject'), onDelete: fn().mockName('onDelete') })),
102
- };
103
- /** Drawer with delete in progress (button disabled). */
104
- export const DeletingState = {
105
- ...drawerMeta,
106
- render: () => (_jsx(DrawerTemplate, { featureName: "Agent Executor Abstraction", featureId: "FEAT-099", data: mockData, onApprove: fn().mockName('onApprove'), onReject: fn().mockName('onReject'), onDelete: fn().mockName('onDelete'), isDeleting: true })),
107
- };
108
80
  /* ─── Reject Variants ─── */
109
81
  /** With reject button visible next to approve. */
110
82
  export const WithRejectButton = {
@@ -88,7 +88,7 @@ export function AgentModelPicker({ initialAgentType, initialModel, onAgentModelC
88
88
  const GroupIcon = getAgentTypeIcon(group.agentType);
89
89
  const isActive = agentType === group.agentType;
90
90
  const hasModels = group.models.length > 0;
91
- return (_jsxs("button", { type: "button", className: cn('flex w-full cursor-pointer items-center gap-2.5 px-3 py-2 text-sm transition-colors', 'hover:bg-accent hover:text-accent-foreground', isActive && 'bg-accent/50'), onClick: () => {
91
+ return (_jsxs("button", { type: "button", className: cn('flex w-full cursor-pointer items-center gap-2.5 px-3 py-2 text-xs transition-colors', 'hover:bg-accent hover:text-accent-foreground', isActive && 'bg-accent/50'), onClick: () => {
92
92
  if (hasModels) {
93
93
  drillInto(group.agentType);
94
94
  }
@@ -98,6 +98,6 @@ export function AgentModelPicker({ initialAgentType, initialModel, onAgentModelC
98
98
  }, children: [_jsx(GroupIcon, { className: "h-4 w-4 shrink-0" }), _jsx("span", { className: "flex-1 text-left", children: group.label }), isActive && !hasModels ? (_jsx(Check, { className: "text-primary h-3.5 w-3.5 shrink-0" })) : null, hasModels ? (_jsx(ChevronRight, { className: "text-muted-foreground h-3.5 w-3.5 shrink-0" })) : null] }, group.agentType));
99
99
  })] }), _jsx("div", { className: "w-1/2 shrink-0", children: activeGroup ? (_jsxs(_Fragment, { children: [_jsxs("button", { type: "button", className: "text-muted-foreground hover:text-foreground flex w-full cursor-pointer items-center gap-1.5 border-b px-3 py-2 text-xs font-medium transition-colors", onClick: drillBack, children: [_jsx(ChevronLeft, { className: "h-3.5 w-3.5" }), activeGroup.label] }), activeGroup.models.map((m) => {
100
100
  const isSelected = agentType === activeGroup.agentType && model === m.id;
101
- return (_jsxs("button", { type: "button", className: cn('flex w-full cursor-pointer items-center gap-3 px-3 py-2 text-left transition-colors', 'hover:bg-accent hover:text-accent-foreground', isSelected && 'bg-accent/50'), onClick: () => handleSelect(activeGroup.agentType, m.id), children: [_jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [_jsx("span", { className: "text-sm font-medium", children: m.displayName }), _jsx("span", { className: "text-muted-foreground text-xs", children: m.description })] }), isSelected ? (_jsx(Check, { className: "text-primary h-3.5 w-3.5 shrink-0" })) : null] }, m.id));
101
+ return (_jsxs("button", { type: "button", className: cn('flex w-full cursor-pointer items-center gap-3 px-3 py-2 text-left transition-colors', 'hover:bg-accent hover:text-accent-foreground', isSelected && 'bg-accent/50'), onClick: () => handleSelect(activeGroup.agentType, m.id), children: [_jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [_jsx("span", { className: "text-xs font-medium", children: m.displayName }), _jsx("span", { className: "text-muted-foreground text-xs", children: m.description })] }), isSelected ? (_jsx(Check, { className: "text-primary h-3.5 w-3.5 shrink-0" })) : null] }, m.id));
102
102
  })] })) : null })] }) })] }), Boolean(error) && _jsx("p", { className: "text-destructive text-sm", children: error })] }));
103
103
  }
@@ -204,7 +204,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
204
204
  setActiveSection(entry.target.id.replace('section-', ''));
205
205
  }
206
206
  }
207
- }, { rootMargin: '-20% 0px -60% 0px', threshold: 0 });
207
+ }, { rootMargin: '-65px 0px -60% 0px', threshold: 0 });
208
208
  for (const el of els)
209
209
  observer.observe(el);
210
210
  return () => observer.disconnect();
@@ -220,13 +220,13 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
220
220
  void el.offsetHeight;
221
221
  el.style.animation = 'section-flash 1s ease-out';
222
222
  }, []);
223
- return (_jsxs("div", { "data-testid": "settings-page-client", className: "max-w-5xl", children: [_jsx("div", { className: "bg-background/95 supports-backdrop-filter:bg-background/80 sticky top-0 z-10 mb-4 grid grid-cols-1 gap-x-5 backdrop-blur lg:grid-cols-[1fr_280px]", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Settings2, { className: "text-muted-foreground h-4 w-4" }), _jsx("h1", { className: "text-sm font-bold tracking-tight", children: "Settings" }), _jsxs("span", { className: "relative h-4 w-16", children: [_jsx("span", { className: cn('text-muted-foreground absolute inset-0 flex items-center text-xs transition-opacity duration-300', showSaving ? 'opacity-100' : 'opacity-0'), children: "Saving..." }), _jsxs("span", { className: cn('absolute inset-0 flex items-center gap-1 text-xs text-green-600 transition-opacity duration-300', showSaved && !showSaving ? 'opacity-100' : 'opacity-0'), children: [_jsx(Check, { className: "h-3 w-3" }), "Saved"] })] }), _jsx("nav", { className: "ml-auto flex items-center gap-0.5", children: SECTIONS.map((s) => {
223
+ return (_jsxs("div", { "data-testid": "settings-page-client", className: "max-w-5xl", children: [_jsx("div", { className: "bg-background/95 supports-backdrop-filter:bg-background/80 sticky top-0 z-10 grid grid-cols-1 gap-x-5 pt-6 pb-4 backdrop-blur lg:grid-cols-[1fr_280px]", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Settings2, { className: "text-muted-foreground h-4 w-4" }), _jsx("h1", { className: "text-sm font-bold tracking-tight", children: "Settings" }), _jsxs("span", { className: "relative h-4 w-16", children: [_jsx("span", { className: cn('text-muted-foreground absolute inset-0 flex items-center text-xs transition-opacity duration-300', showSaving ? 'opacity-100' : 'opacity-0'), children: "Saving..." }), _jsxs("span", { className: cn('absolute inset-0 flex items-center gap-1 text-xs text-green-600 transition-opacity duration-300', showSaved && !showSaving ? 'opacity-100' : 'opacity-0'), children: [_jsx(Check, { className: "h-3 w-3" }), "Saved"] })] }), _jsx("nav", { className: "ml-auto flex items-center gap-0.5", children: SECTIONS.map((s) => {
224
224
  const SectionIcon = s.icon;
225
225
  const isActive = activeSection === s.id;
226
226
  return (_jsxs("button", { type: "button", onClick: () => scrollToSection(s.id), className: cn('flex cursor-pointer items-center gap-1 rounded-md px-1.5 py-1 text-[11px] transition-all', isActive
227
227
  ? 'bg-accent text-foreground font-medium'
228
228
  : 'text-muted-foreground/60 hover:text-foreground hover:bg-accent/50'), children: [_jsx(SectionIcon, { className: "h-3 w-3" }), _jsx("span", { className: "hidden sm:inline", children: s.label })] }, s.id));
229
- }) })] }) }), _jsxs("div", { className: "flex flex-col gap-3", children: [_jsxs("div", { id: "section-agent", className: "grid scroll-mt-14 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: Bot, title: "Agent", description: "AI coding agent and authentication", testId: "agent-settings-section", children: [_jsx(SettingsRow, { label: "Agent & Model", description: "Provider and model for all operations", htmlFor: "agent-model-picker", children: _jsx(AgentModelPicker, { initialAgentType: agentType, initialModel: settings.models.default, mode: "settings", onAgentModelChange: (newAgent) => setAgentType(newAgent), className: "w-55" }) }), _jsx(SettingsRow, { label: "Authentication", description: "How the agent authenticates", htmlFor: "auth-method", children: _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("div", { children: _jsxs(Select, { value: authMethod, disabled: true, children: [_jsx(SelectTrigger, { id: "auth-method", "data-testid": "auth-method-select", className: "w-55 cursor-not-allowed text-xs opacity-60", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: AUTH_METHOD_OPTIONS.map((opt) => (_jsx(SelectItem, { value: opt.value, children: opt.label }, opt.value))) })] }) }) }), _jsx(TooltipContent, { children: "Coming soon" })] }) }) }), authMethod === AgentAuthMethod.Token && (_jsx(SettingsRow, { label: "API Token", htmlFor: "agent-token", children: _jsxs("div", { className: "relative w-45", children: [_jsx(Input, { id: "agent-token", "data-testid": "agent-token-input", type: showToken ? 'text' : 'password', value: token, onChange: (e) => setToken(e.target.value), onBlur: () => {
229
+ }) })] }) }), _jsxs("div", { className: "flex flex-col gap-3", children: [_jsxs("div", { id: "section-agent", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: Bot, title: "Agent", description: "AI coding agent and authentication", testId: "agent-settings-section", children: [_jsx(SettingsRow, { label: "Agent & Model", description: "Provider and model for all operations", htmlFor: "agent-model-picker", children: _jsx(AgentModelPicker, { initialAgentType: agentType, initialModel: settings.models.default, mode: "settings", onAgentModelChange: (newAgent) => setAgentType(newAgent), className: "w-55" }) }), _jsx(SettingsRow, { label: "Authentication", description: "How the agent authenticates", htmlFor: "auth-method", children: _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("div", { children: _jsxs(Select, { value: authMethod, disabled: true, children: [_jsx(SelectTrigger, { id: "auth-method", "data-testid": "auth-method-select", className: "w-55 cursor-not-allowed text-xs opacity-60", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: AUTH_METHOD_OPTIONS.map((opt) => (_jsx(SelectItem, { value: opt.value, children: opt.label }, opt.value))) })] }) }) }), _jsx(TooltipContent, { children: "Coming soon" })] }) }) }), authMethod === AgentAuthMethod.Token && (_jsx(SettingsRow, { label: "API Token", htmlFor: "agent-token", children: _jsxs("div", { className: "relative w-45", children: [_jsx(Input, { id: "agent-token", "data-testid": "agent-token-input", type: showToken ? 'text' : 'password', value: token, onChange: (e) => setToken(e.target.value), onBlur: () => {
230
230
  if (token !== (settings.agent.token ?? '')) {
231
231
  save(buildAgentPayload({ token }));
232
232
  }
@@ -243,7 +243,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
243
243
  label: 'Configuration guide',
244
244
  href: 'https://github.com/shep-ai/cli/blob/main/docs/guides/configuration.md',
245
245
  },
246
- ], children: "Choose which AI coding agent powers your features. Each agent supports different models and capabilities. Authentication is resolved automatically via your active session." })] }), _jsxs("div", { id: "section-environment", className: "grid scroll-mt-14 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsx(SettingsSection, { icon: Terminal, title: "Environment", description: "Editor and shell preferences", testId: "environment-settings-section", children: _jsx(SettingsRow, { label: "Default Editor", description: "Editor launched for file operations", htmlFor: "default-editor", children: _jsxs(Select, { value: editor, onValueChange: (v) => {
246
+ ], children: "Choose which AI coding agent powers your features. Each agent supports different models and capabilities. Authentication is resolved automatically via your active session." })] }), _jsxs("div", { id: "section-environment", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsx(SettingsSection, { icon: Terminal, title: "Environment", description: "Editor and shell preferences", testId: "environment-settings-section", children: _jsx(SettingsRow, { label: "Default Editor", description: "Editor launched for file operations", htmlFor: "default-editor", children: _jsxs(Select, { value: editor, onValueChange: (v) => {
247
247
  setEditor(v);
248
248
  save({
249
249
  environment: { defaultEditor: v, shellPreference: shell },
@@ -256,7 +256,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
256
256
  label: 'Configuration guide',
257
257
  href: 'https://github.com/shep-ai/cli/blob/main/docs/guides/configuration.md',
258
258
  },
259
- ], children: "Your preferred editor is used when opening files for review or editing during the development workflow." })] }), _jsxs("div", { id: "section-workflow", className: "grid scroll-mt-14 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: GitBranch, title: "Workflow", description: "Automation behavior after implementation", testId: "workflow-settings-section", children: [_jsx(SwitchRow, { label: "Auto-approve PRD", description: "Skip manual review of requirements", id: "allow-prd", testId: "switch-allow-prd", checked: allowPrd, onChange: (v) => {
259
+ ], children: "Your preferred editor is used when opening files for review or editing during the development workflow." })] }), _jsxs("div", { id: "section-workflow", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: GitBranch, title: "Workflow", description: "Automation behavior after implementation", testId: "workflow-settings-section", children: [_jsx(SwitchRow, { label: "Auto-approve PRD", description: "Skip manual review of requirements", id: "allow-prd", testId: "switch-allow-prd", checked: allowPrd, onChange: (v) => {
260
260
  setAllowPrd(v);
261
261
  save(buildWorkflowPayload({ allowPrd: v }));
262
262
  } }), _jsx(SwitchRow, { label: "Auto-approve Plan", description: "Skip manual review of implementation plan", id: "allow-plan", testId: "switch-allow-plan", checked: allowPlan, onChange: (v) => {
@@ -280,7 +280,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
280
280
  label: 'Push & PR flags',
281
281
  href: 'https://github.com/shep-ai/cli/blob/main/specs/037-feature-pr-push-flags/spec.yaml',
282
282
  },
283
- ], children: "Control how autonomous each feature run is. Auto-approve skips the human review pause at each phase. Push and PR options control what happens after successful implementation." })] }), _jsxs("div", { id: "section-ci", className: "grid scroll-mt-14 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: Activity, title: "Continuous Integration", description: "Limits and timeouts for CI monitoring", testId: "ci-settings-section", children: [_jsx(SettingsRow, { label: "Max fix attempts", description: "Agent retries on failing CI", htmlFor: "ci-max-fix", children: _jsx(NumberStepper, { id: "ci-max-fix", testId: "ci-max-fix-input", placeholder: "3", value: ciMaxFix, onChange: setCiMaxFix, onBlur: () => {
283
+ ], children: "Control how autonomous each feature run is. Auto-approve skips the human review pause at each phase. Push and PR options control what happens after successful implementation." })] }), _jsxs("div", { id: "section-ci", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: Activity, title: "Continuous Integration", description: "Limits and timeouts for CI monitoring", testId: "ci-settings-section", children: [_jsx(SettingsRow, { label: "Max fix attempts", description: "Agent retries on failing CI", htmlFor: "ci-max-fix", children: _jsx(NumberStepper, { id: "ci-max-fix", testId: "ci-max-fix-input", placeholder: "3", value: ciMaxFix, onChange: setCiMaxFix, onBlur: () => {
284
284
  if (ciMaxFix !== originalCiMaxFix)
285
285
  save(buildWorkflowPayload({ ciMaxFix }));
286
286
  }, min: 1, max: 10 }) }), _jsx(SettingsRow, { label: "Watch timeout", description: "Max wait for CI completion", htmlFor: "ci-timeout", children: _jsx(NumberStepper, { id: "ci-timeout", testId: "ci-timeout-input", placeholder: "300", value: ciTimeout, onChange: setCiTimeout, onBlur: () => {
@@ -298,7 +298,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
298
298
  label: 'CI security gates',
299
299
  href: 'https://github.com/shep-ai/cli/blob/main/specs/003-cicd-security-gates/spec.md',
300
300
  },
301
- ], children: "When a feature completes, the agent can watch CI and auto-fix failures. These limits prevent runaway retries and control how much log output is sent to the agent for analysis." })] }), _jsxs("div", { id: "section-notifications", className: "grid scroll-mt-14 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: Bell, title: "Notifications", description: "How and when you get notified", testId: "notification-settings-section", children: [_jsx(SubsectionLabel, { children: "Channels" }), _jsx(SwitchRow, { label: "In-app", description: "Notifications inside the Shep UI", id: "notif-in-app", testId: "switch-in-app", checked: inApp, onChange: (v) => {
301
+ ], children: "When a feature completes, the agent can watch CI and auto-fix failures. These limits prevent runaway retries and control how much log output is sent to the agent for analysis." })] }), _jsxs("div", { id: "section-notifications", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: Bell, title: "Notifications", description: "How and when you get notified", testId: "notification-settings-section", children: [_jsx(SubsectionLabel, { children: "Channels" }), _jsx(SwitchRow, { label: "In-app", description: "Notifications inside the Shep UI", id: "notif-in-app", testId: "switch-in-app", checked: inApp, onChange: (v) => {
302
302
  setInApp(v);
303
303
  save(buildNotificationPayload({ inApp: v }));
304
304
  } }), _jsx(SwitchRow, { label: "Browser", description: "Push notifications via the browser", id: "notif-browser", testId: "switch-browser", checked: browser, onChange: (v) => {
@@ -348,7 +348,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
348
348
  label: 'Notification system',
349
349
  href: 'https://github.com/shep-ai/cli/blob/main/specs/021-agent-notifications/spec.yaml',
350
350
  },
351
- ], children: "Three notification channels keep you in the loop: in-app toasts, browser push notifications, and native desktop alerts. Fine-tune which agent lifecycle events trigger a notification." })] }), _jsxs("div", { id: "section-feature-flags", className: "grid scroll-mt-14 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: Flag, title: "Feature Flags", description: "Enable or disable experimental features", badge: "Experimental", testId: "feature-flags-settings-section", children: [_jsx(SwitchRow, { label: "Skills", description: "Enable the skills system for agent capabilities", id: "flag-skills", testId: "switch-flag-skills", checked: flags.skills, onChange: (v) => {
351
+ ], children: "Three notification channels keep you in the loop: in-app toasts, browser push notifications, and native desktop alerts. Fine-tune which agent lifecycle events trigger a notification." })] }), _jsxs("div", { id: "section-feature-flags", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: Flag, title: "Feature Flags", description: "Enable or disable experimental features", badge: "Experimental", testId: "feature-flags-settings-section", children: [_jsx(SwitchRow, { label: "Skills", description: "Enable the skills system for agent capabilities", id: "flag-skills", testId: "switch-flag-skills", checked: flags.skills, onChange: (v) => {
352
352
  const newFlags = { ...flags, skills: v };
353
353
  setFlags(newFlags);
354
354
  save({ featureFlags: newFlags });
@@ -360,7 +360,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
360
360
  const newFlags = { ...flags, debug: v };
361
361
  setFlags(newFlags);
362
362
  save({ featureFlags: newFlags });
363
- } })] }), _jsx(SectionHint, { children: "Experimental features that are still under development. Enable at your own risk \u2014 they may change or be removed in future versions. Debug mode adds verbose logging useful for troubleshooting." })] }), _jsxs("div", { id: "section-database", className: "grid scroll-mt-14 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: Database, title: "Database", description: "Local storage information", testId: "database-settings-section", children: [_jsx(SettingsRow, { label: "Location", description: "Path to the local SQLite database", children: _jsx("span", { className: "text-muted-foreground max-w-50 truncate font-mono text-xs", "data-testid": "shep-home-path", children: shepHome }) }), _jsx(SettingsRow, { label: "Size", children: _jsx("span", { className: "text-muted-foreground text-xs", "data-testid": "db-file-size", children: dbFileSize }) })] }), _jsx(SectionHint, { links: [
363
+ } })] }), _jsx(SectionHint, { children: "Experimental features that are still under development. Enable at your own risk \u2014 they may change or be removed in future versions. Debug mode adds verbose logging useful for troubleshooting." })] }), _jsxs("div", { id: "section-database", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: Database, title: "Database", description: "Local storage information", testId: "database-settings-section", children: [_jsx(SettingsRow, { label: "Location", description: "Path to the local SQLite database", children: _jsx("span", { className: "text-muted-foreground max-w-50 truncate font-mono text-xs", "data-testid": "shep-home-path", children: shepHome }) }), _jsx(SettingsRow, { label: "Size", children: _jsx("span", { className: "text-muted-foreground text-xs", "data-testid": "db-file-size", children: dbFileSize }) })] }), _jsx(SectionHint, { links: [
364
364
  {
365
365
  label: 'Settings service',
366
366
  href: 'https://github.com/shep-ai/cli/blob/main/docs/architecture/settings-service.md',
@@ -0,0 +1,7 @@
1
+ export interface UseFeatureLogsResult {
2
+ content: string;
3
+ isConnected: boolean;
4
+ error: string | null;
5
+ }
6
+ export declare function useFeatureLogs(featureId: string | null | undefined): UseFeatureLogsResult;
7
+ //# sourceMappingURL=use-feature-logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-feature-logs.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/use-feature-logs.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,oBAAoB,CA4DzF"}
@@ -0,0 +1,52 @@
1
+ 'use client';
2
+ import { useState, useEffect, useRef, useCallback } from 'react';
3
+ export function useFeatureLogs(featureId) {
4
+ const [content, setContent] = useState('');
5
+ const [isConnected, setIsConnected] = useState(false);
6
+ const [error, setError] = useState(null);
7
+ const eventSourceRef = useRef(null);
8
+ const cleanup = useCallback(() => {
9
+ if (eventSourceRef.current) {
10
+ eventSourceRef.current.close();
11
+ eventSourceRef.current = null;
12
+ }
13
+ setIsConnected(false);
14
+ }, []);
15
+ useEffect(() => {
16
+ if (!featureId) {
17
+ setContent('');
18
+ setIsConnected(false);
19
+ setError(null);
20
+ return;
21
+ }
22
+ // Reset state for new featureId
23
+ setContent('');
24
+ setError(null);
25
+ // Connect EventSource for live updates
26
+ const es = new EventSource(`/api/feature-logs?featureId=${featureId}`);
27
+ eventSourceRef.current = es;
28
+ es.onopen = () => {
29
+ setIsConnected(true);
30
+ };
31
+ es.addEventListener('initial', (event) => {
32
+ const data = JSON.parse(event.data);
33
+ setContent(data.content);
34
+ });
35
+ es.addEventListener('log', (event) => {
36
+ const data = JSON.parse(event.data);
37
+ setContent((prev) => prev + data.content);
38
+ });
39
+ es.addEventListener('error', (event) => {
40
+ const data = JSON.parse(event.data);
41
+ setError(data.error);
42
+ });
43
+ es.onerror = () => {
44
+ setIsConnected(false);
45
+ };
46
+ return () => {
47
+ es.close();
48
+ eventSourceRef.current = null;
49
+ };
50
+ }, [featureId, cleanup]);
51
+ return { content, isConnected, error };
52
+ }