@shepai/cli 1.122.2-pr392.a8f2b76 → 1.122.2-pr394.daae4c9

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 (286) hide show
  1. package/dist/packages/core/src/application/ports/output/repositories/feature-repository.interface.d.ts +11 -0
  2. package/dist/packages/core/src/application/ports/output/repositories/feature-repository.interface.d.ts.map +1 -1
  3. package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts +15 -0
  4. package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts.map +1 -1
  5. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts +40 -0
  6. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts.map +1 -0
  7. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.js +146 -0
  8. package/dist/packages/core/src/application/use-cases/features/branch-name-utils.d.ts +33 -0
  9. package/dist/packages/core/src/application/use-cases/features/branch-name-utils.d.ts.map +1 -0
  10. package/dist/packages/core/src/application/use-cases/features/branch-name-utils.js +77 -0
  11. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  12. package/dist/packages/core/src/infrastructure/di/container.js +5 -0
  13. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts +1 -0
  14. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts.map +1 -1
  15. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +8 -0
  16. package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts +1 -0
  17. package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts.map +1 -1
  18. package/dist/packages/core/src/infrastructure/services/git/worktree.service.js +15 -0
  19. package/dist/src/presentation/cli/commands/feat/adopt.command.d.ts +14 -0
  20. package/dist/src/presentation/cli/commands/feat/adopt.command.d.ts.map +1 -0
  21. package/dist/src/presentation/cli/commands/feat/adopt.command.js +43 -0
  22. package/dist/src/presentation/cli/commands/feat/index.d.ts.map +1 -1
  23. package/dist/src/presentation/cli/commands/feat/index.js +3 -1
  24. package/dist/src/presentation/web/app/(dashboard)/@drawer/adopt/page.d.ts +10 -0
  25. package/dist/src/presentation/web/app/(dashboard)/@drawer/adopt/page.d.ts.map +1 -0
  26. package/dist/src/presentation/web/app/(dashboard)/@drawer/adopt/page.js +22 -0
  27. package/dist/src/presentation/web/app/actions/adopt-branch.d.ts +11 -0
  28. package/dist/src/presentation/web/app/actions/adopt-branch.d.ts.map +1 -0
  29. package/dist/src/presentation/web/app/actions/adopt-branch.js +20 -0
  30. package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts +0 -2
  31. package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts.map +1 -1
  32. package/dist/src/presentation/web/app/actions/get-feature-phase-timings.js +0 -2
  33. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.d.ts +9 -0
  34. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.d.ts.map +1 -0
  35. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.js +27 -0
  36. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.d.ts +32 -0
  37. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.d.ts.map +1 -0
  38. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.js +115 -0
  39. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-drawer-client.d.ts +5 -0
  40. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-drawer-client.d.ts.map +1 -0
  41. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-drawer-client.js +56 -0
  42. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  43. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +9 -20
  44. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map +1 -1
  45. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +31 -130
  46. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -1
  47. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +0 -13
  48. package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.d.ts.map +1 -1
  49. package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.js +9 -18
  50. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts.map +1 -1
  51. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +18 -18
  52. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  53. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +17 -31
  54. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.d.ts.map +1 -1
  55. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.js +22 -29
  56. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +1 -1
  57. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
  58. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +14 -5
  59. package/dist/src/presentation/web/hooks/sidebar-features-context.d.ts +0 -2
  60. package/dist/src/presentation/web/hooks/sidebar-features-context.d.ts.map +1 -1
  61. package/dist/src/presentation/web/hooks/sidebar-features-context.js +1 -2
  62. package/dist/tsconfig.build.tsbuildinfo +1 -1
  63. package/package.json +1 -1
  64. package/web/.next/BUILD_ID +1 -1
  65. package/web/.next/app-path-routes-manifest.json +1 -0
  66. package/web/.next/build-manifest.json +4 -4
  67. package/web/.next/fallback-build-manifest.json +2 -2
  68. package/web/.next/prerender-manifest.json +3 -3
  69. package/web/.next/required-server-files.js +1 -1
  70. package/web/.next/required-server-files.json +1 -1
  71. package/web/.next/routes-manifest.json +6 -0
  72. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/app-paths-manifest.json +3 -0
  73. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/build-manifest.json +18 -0
  74. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/next-font-manifest.json +6 -0
  75. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/react-loadable-manifest.json +1 -0
  76. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +320 -0
  77. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +20 -0
  78. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.map +5 -0
  79. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -0
  80. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +2 -0
  81. package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +2 -2
  82. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +22 -22
  83. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  84. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  85. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/build-manifest.json +2 -2
  86. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +28 -28
  87. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  88. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  89. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +2 -2
  90. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +28 -28
  91. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  92. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  93. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +2 -2
  94. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +20 -20
  95. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  96. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  97. package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +2 -2
  98. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +22 -22
  99. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  100. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  101. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/build-manifest.json +2 -2
  102. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +28 -28
  103. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  104. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  105. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +2 -2
  106. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +28 -28
  107. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  108. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  109. package/web/.next/server/app/(dashboard)/page/build-manifest.json +2 -2
  110. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +20 -20
  111. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  112. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  113. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +2 -2
  114. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +20 -20
  115. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  116. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  117. package/web/.next/server/app/_global-error/page/build-manifest.json +2 -2
  118. package/web/.next/server/app/_global-error.html +2 -2
  119. package/web/.next/server/app/_global-error.rsc +1 -1
  120. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  121. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  122. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  123. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  124. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  125. package/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
  126. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  127. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  128. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  129. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  130. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  131. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  132. package/web/.next/server/app/settings/page/build-manifest.json +2 -2
  133. package/web/.next/server/app/settings/page/server-reference-manifest.json +6 -6
  134. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  135. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  136. package/web/.next/server/app/skills/page/build-manifest.json +2 -2
  137. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  138. package/web/.next/server/app/skills/page.js +4 -4
  139. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  140. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  141. package/web/.next/server/app/tools/page/build-manifest.json +2 -2
  142. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  143. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  144. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  145. package/web/.next/server/app/version/page/build-manifest.json +2 -2
  146. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  147. package/web/.next/server/app/version/page.js.nft.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/[root-of-the-server]__a402b567._.js +1 -1
  151. package/web/.next/server/chunks/ssr/403f9_next_dist_client_components_94d75bc3._.js +3 -0
  152. package/web/.next/server/chunks/ssr/403f9_next_dist_client_components_94d75bc3._.js.map +1 -0
  153. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_0b3f4f0d.js +3 -0
  154. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_0b3f4f0d.js.map +1 -0
  155. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_adopt-drawer-client_tsx_6c5e4bbb._.js +3 -0
  156. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_adopt-drawer-client_tsx_6c5e4bbb._.js.map +1 -0
  157. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  158. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  159. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_f30d0343.js +1 -1
  160. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_f30d0343.js.map +1 -1
  161. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_9f1775bb.js +1 -1
  162. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_9f1775bb.js.map +1 -1
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__06fef644._.js +1 -1
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__2698e9f4._.js +1 -1
  165. package/web/.next/server/chunks/ssr/[root-of-the-server]__2698e9f4._.js.map +1 -1
  166. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  167. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
  168. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +2 -2
  169. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -1
  170. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  171. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
  172. package/web/.next/server/chunks/ssr/[root-of-the-server]__8c553503._.js +2 -2
  173. package/web/.next/server/chunks/ssr/[root-of-the-server]__8e3bf5d7._.js +1 -1
  174. package/web/.next/server/chunks/ssr/[root-of-the-server]__8e3bf5d7._.js.map +1 -1
  175. package/web/.next/server/chunks/ssr/[root-of-the-server]__a022445f._.js +2 -2
  176. package/web/.next/server/chunks/ssr/[root-of-the-server]__a7de2711._.js +2 -2
  177. package/web/.next/server/chunks/ssr/[root-of-the-server]__c07f9f79._.js +1 -1
  178. package/web/.next/server/chunks/ssr/[root-of-the-server]__c07f9f79._.js.map +1 -1
  179. package/web/.next/server/chunks/ssr/[root-of-the-server]__c605a375._.js +1 -1
  180. package/web/.next/server/chunks/ssr/[root-of-the-server]__c605a375._.js.map +1 -1
  181. package/web/.next/server/chunks/ssr/[root-of-the-server]__e2227c0f._.js +3 -0
  182. package/web/.next/server/chunks/ssr/[root-of-the-server]__e2227c0f._.js.map +1 -0
  183. package/web/.next/server/chunks/ssr/[root-of-the-server]__e7258841._.js +3 -0
  184. package/web/.next/server/chunks/ssr/[root-of-the-server]__e7258841._.js.map +1 -0
  185. package/web/.next/server/chunks/ssr/[root-of-the-server]__ec26e818._.js +3 -0
  186. package/web/.next/server/chunks/ssr/[root-of-the-server]__ec26e818._.js.map +1 -0
  187. package/web/.next/server/chunks/ssr/[root-of-the-server]__f0589cc3._.js +3 -0
  188. package/web/.next/server/chunks/ssr/[root-of-the-server]__f0589cc3._.js.map +1 -0
  189. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  190. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  191. package/web/.next/server/chunks/ssr/_19a2fb35._.js +3 -0
  192. package/web/.next/server/chunks/ssr/_19a2fb35._.js.map +1 -0
  193. package/web/.next/server/chunks/ssr/_1e1b2639._.js +3 -0
  194. package/web/.next/server/chunks/ssr/_1e1b2639._.js.map +1 -0
  195. package/web/.next/server/chunks/ssr/_2f6f48b8._.js +1 -1
  196. package/web/.next/server/chunks/ssr/_2f6f48b8._.js.map +1 -1
  197. package/web/.next/server/chunks/ssr/_4093a637._.js +5 -0
  198. package/web/.next/server/chunks/ssr/_4093a637._.js.map +1 -0
  199. package/web/.next/server/chunks/ssr/{_36dccae9._.js → _5317c57e._.js} +2 -2
  200. package/web/.next/server/chunks/ssr/{_36dccae9._.js.map → _5317c57e._.js.map} +1 -1
  201. package/web/.next/server/chunks/ssr/_a4a44cc0._.js +3 -0
  202. package/web/.next/server/chunks/ssr/_a4a44cc0._.js.map +1 -0
  203. package/web/.next/server/chunks/ssr/_b56e7571._.js +3 -0
  204. package/web/.next/server/chunks/ssr/_b56e7571._.js.map +1 -0
  205. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  206. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  207. package/web/.next/server/chunks/ssr/_d5206f22._.js +4 -0
  208. package/web/.next/server/chunks/ssr/_d5206f22._.js.map +1 -0
  209. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  210. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  211. package/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js +3 -0
  212. package/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js.map +1 -0
  213. package/web/.next/server/chunks/ssr/node_modules__pnpm_026172d1._.js +3 -0
  214. package/web/.next/server/chunks/ssr/node_modules__pnpm_026172d1._.js.map +1 -0
  215. package/web/.next/server/chunks/ssr/src_presentation_web_5f039db1._.js +2 -2
  216. package/web/.next/server/chunks/ssr/src_presentation_web_5f039db1._.js.map +1 -1
  217. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_2a52b697.js +1 -1
  218. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_2a52b697.js.map +1 -1
  219. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  220. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  221. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  222. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  223. package/web/.next/server/chunks/ssr/src_presentation_web_c4337169._.js +2 -2
  224. package/web/.next/server/chunks/ssr/src_presentation_web_c4337169._.js.map +1 -1
  225. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  226. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  227. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  228. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  229. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  230. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  231. package/web/.next/server/middleware-build-manifest.js +2 -2
  232. package/web/.next/server/pages/500.html +2 -2
  233. package/web/.next/server/server-reference-manifest.js +1 -1
  234. package/web/.next/server/server-reference-manifest.json +189 -34
  235. package/web/.next/static/chunks/0d2af96e64960ef5.css +1 -0
  236. package/web/.next/static/chunks/430ef376bd249b14.js +1 -0
  237. package/web/.next/static/chunks/4796c6e7d84294d7.js +1 -0
  238. package/web/.next/static/chunks/52c0456129cb8a10.js +1 -0
  239. package/web/.next/static/chunks/767cf20dbde41522.js +1 -0
  240. package/web/.next/static/chunks/78e2f79d08767e8d.js +9 -0
  241. package/web/.next/static/chunks/{90e7434ef9395b62.js → 7f0206527c67e121.js} +1 -1
  242. package/web/.next/static/chunks/{ed3a602003bcb31b.js → 89aac43287d73b02.js} +1 -1
  243. package/web/.next/static/chunks/{1c19bf1f99269544.js → 9f4eb9f1618c8bd9.js} +1 -1
  244. package/web/.next/static/chunks/a8d65187623d628b.js +5 -0
  245. package/web/.next/static/chunks/{816ee0f2c6b490a4.js → b14644925c7af7f5.js} +2 -2
  246. package/web/.next/static/chunks/b4a6061718adb25e.js +2 -0
  247. package/web/.next/static/chunks/bf108ed551e585e6.js +1 -0
  248. package/web/.next/static/chunks/c6356369a45d19d6.js +1 -0
  249. package/web/.next/static/chunks/ca946dcbfbb2df74.js +1 -0
  250. package/web/.next/static/chunks/cafcbd67d82d65db.js +1 -0
  251. package/web/.next/static/chunks/d6d6af31b7ef545b.js +1 -0
  252. package/web/.next/static/chunks/f83551c20dcda199.js +1 -0
  253. package/web/.next/static/chunks/{turbopack-426d9bc2450816ba.js → turbopack-080e470ea902d0ba.js} +1 -1
  254. package/web/.next/server/chunks/ssr/[root-of-the-server]__52485955._.js +0 -3
  255. package/web/.next/server/chunks/ssr/[root-of-the-server]__52485955._.js.map +0 -1
  256. package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js +0 -3
  257. package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js.map +0 -1
  258. package/web/.next/server/chunks/ssr/[root-of-the-server]__f646b99a._.js +0 -3
  259. package/web/.next/server/chunks/ssr/[root-of-the-server]__f646b99a._.js.map +0 -1
  260. package/web/.next/server/chunks/ssr/_0dc2cfd3._.js +0 -3
  261. package/web/.next/server/chunks/ssr/_0dc2cfd3._.js.map +0 -1
  262. package/web/.next/server/chunks/ssr/_3a4c94e3._.js +0 -3
  263. package/web/.next/server/chunks/ssr/_3a4c94e3._.js.map +0 -1
  264. package/web/.next/server/chunks/ssr/_75f4ccb3._.js +0 -3
  265. package/web/.next/server/chunks/ssr/_75f4ccb3._.js.map +0 -1
  266. package/web/.next/server/chunks/ssr/_9ac70f88._.js +0 -5
  267. package/web/.next/server/chunks/ssr/_9ac70f88._.js.map +0 -1
  268. package/web/.next/server/chunks/ssr/_d99705a5._.js +0 -3
  269. package/web/.next/server/chunks/ssr/_d99705a5._.js.map +0 -1
  270. package/web/.next/server/chunks/ssr/src_presentation_web_60c91521._.js +0 -3
  271. package/web/.next/server/chunks/ssr/src_presentation_web_60c91521._.js.map +0 -1
  272. package/web/.next/static/chunks/275f0d403059b5b4.js +0 -1
  273. package/web/.next/static/chunks/3911a7175044e784.js +0 -1
  274. package/web/.next/static/chunks/52b56677c842e45f.js +0 -3
  275. package/web/.next/static/chunks/61df7e9671cf4e76.css +0 -1
  276. package/web/.next/static/chunks/6272719b144b6c1a.js +0 -11
  277. package/web/.next/static/chunks/691a93561029b01b.js +0 -2
  278. package/web/.next/static/chunks/6db4aa6aed9e6545.js +0 -1
  279. package/web/.next/static/chunks/845d8e58a91014e6.js +0 -1
  280. package/web/.next/static/chunks/a92706d178a3fa6c.js +0 -1
  281. package/web/.next/static/chunks/bf479173877b0a2f.js +0 -1
  282. package/web/.next/static/chunks/dbbb446493f21874.js +0 -1
  283. package/web/.next/static/chunks/f90f55b8e972bd8e.js +0 -1
  284. /package/web/.next/static/{x39t_TXToqcf-uNwPMhq8 → eu15XGqVtBSCUjVy2GmoQ}/_buildManifest.js +0 -0
  285. /package/web/.next/static/{x39t_TXToqcf-uNwPMhq8 → eu15XGqVtBSCUjVy2GmoQ}/_clientMiddlewareManifest.json +0 -0
  286. /package/web/.next/static/{x39t_TXToqcf-uNwPMhq8 → eu15XGqVtBSCUjVy2GmoQ}/_ssgManifest.js +0 -0
@@ -0,0 +1,20 @@
1
+ 'use server';
2
+ import { resolve } from '../../lib/server-container.js';
3
+ export async function adoptBranch(input) {
4
+ const { branchName, repositoryPath } = input;
5
+ if (!branchName?.trim()) {
6
+ return { error: 'Branch name is required' };
7
+ }
8
+ if (!repositoryPath?.trim()) {
9
+ return { error: 'Repository path is required' };
10
+ }
11
+ try {
12
+ const useCase = resolve('AdoptBranchUseCase');
13
+ const result = await useCase.execute({ branchName, repositoryPath });
14
+ return { feature: result.feature };
15
+ }
16
+ catch (error) {
17
+ const message = error instanceof Error ? error.message : 'Failed to adopt branch';
18
+ return { error: message };
19
+ }
20
+ }
@@ -13,8 +13,6 @@ export interface PhaseTimingData {
13
13
  costUsd?: number;
14
14
  numTurns?: number;
15
15
  durationApiMs?: number;
16
- exitCode?: string;
17
- errorMessage?: string;
18
16
  }
19
17
  export interface RejectionFeedbackData {
20
18
  iteration: number;
@@ -1 +1 @@
1
- {"version":3,"file":"get-feature-phase-timings.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-feature-phase-timings.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,KAAK,qBAAqB,GACtB;IAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IAAC,iBAAiB,EAAE,qBAAqB,EAAE,CAAA;CAAE,GAC1E;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtB,wBAAsB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAsC9F"}
1
+ {"version":3,"file":"get-feature-phase-timings.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-feature-phase-timings.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,KAAK,qBAAqB,GACtB;IAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IAAC,iBAAiB,EAAE,qBAAqB,EAAE,CAAA;CAAE,GAC1E;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtB,wBAAsB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAoC9F"}
@@ -22,8 +22,6 @@ export async function getFeaturePhaseTimings(featureId) {
22
22
  costUsd: t.costUsd != null ? Number(t.costUsd) : undefined,
23
23
  numTurns: t.numTurns ?? undefined,
24
24
  durationApiMs: t.durationApiMs != null ? Number(t.durationApiMs) : undefined,
25
- exitCode: t.exitCode ?? undefined,
26
- errorMessage: t.errorMessage ?? undefined,
27
25
  }));
28
26
  // Read rejection feedback from spec.yaml
29
27
  const rejectionFeedback = await readRejectionFeedback(featureId);
@@ -0,0 +1,9 @@
1
+ export interface AdoptBranchDrawerProps {
2
+ open: boolean;
3
+ onClose: () => void;
4
+ onSubmit: (branchName: string) => void;
5
+ isSubmitting?: boolean;
6
+ error?: string;
7
+ }
8
+ export declare function AdoptBranchDrawer({ open, onClose, onSubmit, isSubmitting, error, }: AdoptBranchDrawerProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=adopt-branch-drawer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adopt-branch-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.tsx"],"names":[],"mappings":"AAUA,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,YAAoB,EACpB,KAAK,GACN,EAAE,sBAAsB,2CAoGxB"}
@@ -0,0 +1,27 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useState, useCallback } from 'react';
4
+ import { GitBranch, Loader2 } from 'lucide-react';
5
+ import { BaseDrawer } from '../../common/base-drawer/index.js';
6
+ import { DrawerTitle, DrawerDescription } from '../../ui/drawer.js';
7
+ import { Button } from '../../ui/button.js';
8
+ import { Input } from '../../ui/input.js';
9
+ import { Label } from '../../ui/label.js';
10
+ export function AdoptBranchDrawer({ open, onClose, onSubmit, isSubmitting = false, error, }) {
11
+ const [branchName, setBranchName] = useState('');
12
+ const handleSubmit = useCallback((e) => {
13
+ e.preventDefault();
14
+ const trimmed = branchName.trim();
15
+ if (!trimmed || isSubmitting)
16
+ return;
17
+ onSubmit(trimmed);
18
+ }, [branchName, isSubmitting, onSubmit]);
19
+ const handleClose = useCallback(() => {
20
+ setBranchName('');
21
+ onClose();
22
+ }, [onClose]);
23
+ // Reset form when drawer closes
24
+ const isDisabled = !branchName.trim() || isSubmitting;
25
+ const header = (_jsxs("div", { children: [_jsxs(DrawerTitle, { className: "flex items-center gap-2", children: [_jsx(GitBranch, { className: "h-4 w-4" }), "Adopt Branch"] }), _jsx(DrawerDescription, { className: "text-muted-foreground text-sm", children: "Import an existing git branch into Shep's feature tracking" })] }));
26
+ return (_jsx(BaseDrawer, { open: open, onClose: handleClose, size: "sm", modal: false, header: header, "data-testid": "adopt-branch-drawer", children: _jsxs("form", { onSubmit: handleSubmit, className: "flex flex-1 flex-col", children: [_jsx("div", { className: "flex-1 overflow-y-auto p-4", children: _jsxs("div", { className: "flex flex-col gap-4", children: [_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Label, { htmlFor: "branch-name", children: "Branch name" }), _jsx(Input, { id: "branch-name", placeholder: "e.g. fix/login-bug or feat/user-auth", value: branchName, onChange: (e) => setBranchName(e.target.value), disabled: isSubmitting, autoFocus: true, "data-testid": "adopt-branch-input" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Enter the name of a local or remote branch to adopt as a tracked feature." })] }), error ? (_jsx("p", { className: "text-destructive text-sm", "data-testid": "adopt-branch-error", children: error })) : null] }) }), _jsx("div", { className: "border-t p-4", children: _jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { type: "button", variant: "outline", onClick: handleClose, disabled: isSubmitting, className: "flex-1", children: "Cancel" }), _jsx(Button, { type: "submit", disabled: isDisabled, className: "flex-1", "data-testid": "adopt-branch-submit", children: isSubmitting ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), "Adopting..."] })) : ('Adopt Branch') })] }) })] }) }));
27
+ }
@@ -0,0 +1,32 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { AdoptBranchDrawer } from './adopt-branch-drawer.js';
3
+ /**
4
+ * **AdoptBranchDrawer** is a right-side sliding drawer for importing an
5
+ * existing git branch into Shep's feature tracking system.
6
+ *
7
+ * ### Form
8
+ * - **Branch name** (required) — text input for the branch name
9
+ * - **Adopt Branch** button — disabled when input is empty or submitting
10
+ * - **Cancel** button — closes the drawer
11
+ *
12
+ * ### States
13
+ * - Default: empty input, submit disabled
14
+ * - Loading: input disabled, button shows spinner
15
+ * - Error: error message shown below input
16
+ */
17
+ declare const meta: Meta<typeof AdoptBranchDrawer>;
18
+ export default meta;
19
+ type Story = StoryObj<typeof AdoptBranchDrawer>;
20
+ /** Default empty form — click the trigger button to open the adopt branch drawer. */
21
+ export declare const Default: Story;
22
+ /** Pre-opened drawer for quick visual inspection. */
23
+ export declare const PreOpened: Story;
24
+ /** Drawer with branch name typed in — ready to submit. */
25
+ export declare const WithBranchName: Story;
26
+ /** Loading state — input disabled, button shows spinner. */
27
+ export declare const Loading: Story;
28
+ /** Error state — error message visible below input. */
29
+ export declare const WithError: Story;
30
+ /** Adopt branch drawer rendered inside a full-page context — starts open. */
31
+ export declare const InDrawer: Story;
32
+ //# sourceMappingURL=adopt-branch-drawer.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adopt-branch-drawer.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAO1D;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,iBAAiB,CAcxC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAkDhD,qFAAqF;AACrF,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,qDAAqD;AACrD,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,cAAc,EAAE,KAU5B,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,SAAS,EAAE,KAWvB,CAAC;AAiCF,6EAA6E;AAC7E,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC"}
@@ -0,0 +1,115 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { within, userEvent, fn } from '@storybook/test';
4
+ import { AdoptBranchDrawer } from './adopt-branch-drawer.js';
5
+ import { Button } from '../../ui/button.js';
6
+ /* ---------------------------------------------------------------------------
7
+ * Meta
8
+ * ------------------------------------------------------------------------- */
9
+ /**
10
+ * **AdoptBranchDrawer** is a right-side sliding drawer for importing an
11
+ * existing git branch into Shep's feature tracking system.
12
+ *
13
+ * ### Form
14
+ * - **Branch name** (required) — text input for the branch name
15
+ * - **Adopt Branch** button — disabled when input is empty or submitting
16
+ * - **Cancel** button — closes the drawer
17
+ *
18
+ * ### States
19
+ * - Default: empty input, submit disabled
20
+ * - Loading: input disabled, button shows spinner
21
+ * - Error: error message shown below input
22
+ */
23
+ const meta = {
24
+ title: 'Drawers/Feature/AdoptBranchDrawer',
25
+ component: AdoptBranchDrawer,
26
+ tags: ['autodocs'],
27
+ parameters: {
28
+ layout: 'fullscreen',
29
+ },
30
+ argTypes: {
31
+ open: { control: 'boolean', description: 'Controls drawer visibility' },
32
+ onClose: { description: 'Called when the drawer is dismissed' },
33
+ onSubmit: { description: 'Called with the branch name when the form is submitted' },
34
+ isSubmitting: { control: 'boolean', description: 'Shows loading state' },
35
+ error: { control: 'text', description: 'Error message to display' },
36
+ },
37
+ };
38
+ export default meta;
39
+ /* ---------------------------------------------------------------------------
40
+ * Shared action loggers
41
+ * ------------------------------------------------------------------------- */
42
+ const logSubmit = fn().mockName('onSubmit');
43
+ const logClose = fn().mockName('onClose');
44
+ /* ---------------------------------------------------------------------------
45
+ * Trigger wrapper
46
+ * ------------------------------------------------------------------------- */
47
+ function AdoptDrawerTrigger({ label = 'Open Adopt Branch', isSubmitting = false, error, }) {
48
+ const [open, setOpen] = useState(false);
49
+ return (_jsxs("div", { className: "flex h-screen items-start p-4", children: [_jsx(Button, { variant: "outline", onClick: () => setOpen(true), children: label }), _jsx(AdoptBranchDrawer, { open: open, onClose: () => {
50
+ setOpen(false);
51
+ logClose();
52
+ }, onSubmit: (branchName) => {
53
+ logSubmit(branchName);
54
+ setOpen(false);
55
+ }, isSubmitting: isSubmitting, error: error })] }));
56
+ }
57
+ /* ---------------------------------------------------------------------------
58
+ * Stories
59
+ * ------------------------------------------------------------------------- */
60
+ /** Default empty form — click the trigger button to open the adopt branch drawer. */
61
+ export const Default = {
62
+ render: () => _jsx(AdoptDrawerTrigger, {}),
63
+ };
64
+ /** Pre-opened drawer for quick visual inspection. */
65
+ export const PreOpened = {
66
+ render: () => _jsx(AdoptDrawerTrigger, { label: "Open Drawer" }),
67
+ play: async ({ canvasElement }) => {
68
+ const canvas = within(canvasElement);
69
+ await userEvent.click(canvas.getByRole('button', { name: 'Open Drawer' }));
70
+ },
71
+ };
72
+ /** Drawer with branch name typed in — ready to submit. */
73
+ export const WithBranchName = {
74
+ render: () => _jsx(AdoptDrawerTrigger, { label: "Open (With Branch)" }),
75
+ play: async ({ canvasElement }) => {
76
+ const canvas = within(canvasElement);
77
+ await userEvent.click(canvas.getByRole('button', { name: 'Open (With Branch)' }));
78
+ const body = within(canvasElement.ownerDocument.body);
79
+ const input = await body.findByPlaceholderText('e.g. fix/login-bug or feat/user-auth');
80
+ await userEvent.type(input, 'fix/login-bug');
81
+ },
82
+ };
83
+ /** Loading state — input disabled, button shows spinner. */
84
+ export const Loading = {
85
+ render: () => _jsx(AdoptDrawerTrigger, { label: "Open (Loading)", isSubmitting: true }),
86
+ play: async ({ canvasElement }) => {
87
+ const canvas = within(canvasElement);
88
+ await userEvent.click(canvas.getByRole('button', { name: 'Open (Loading)' }));
89
+ },
90
+ };
91
+ /** Error state — error message visible below input. */
92
+ export const WithError = {
93
+ render: () => (_jsx(AdoptDrawerTrigger, { label: "Open (Error)", error: 'Branch "main" cannot be adopted. The main branch should not be tracked as a feature.' })),
94
+ play: async ({ canvasElement }) => {
95
+ const canvas = within(canvasElement);
96
+ await userEvent.click(canvas.getByRole('button', { name: 'Open (Error)' }));
97
+ },
98
+ };
99
+ /* ---------------------------------------------------------------------------
100
+ * Shell template — starts open in full-page context
101
+ * ------------------------------------------------------------------------- */
102
+ function AdoptDrawerShellTemplate() {
103
+ const [open, setOpen] = useState(true);
104
+ 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(AdoptBranchDrawer, { open: open, onClose: () => {
105
+ setOpen(false);
106
+ logClose();
107
+ }, onSubmit: (branchName) => {
108
+ logSubmit(branchName);
109
+ setOpen(false);
110
+ } })] }));
111
+ }
112
+ /** Adopt branch drawer rendered inside a full-page context — starts open. */
113
+ export const InDrawer = {
114
+ render: () => _jsx(AdoptDrawerShellTemplate, {}),
115
+ };
@@ -0,0 +1,5 @@
1
+ export interface AdoptDrawerClientProps {
2
+ repositoryPath: string;
3
+ }
4
+ export declare function AdoptDrawerClient({ repositoryPath }: AdoptDrawerClientProps): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=adopt-drawer-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adopt-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/adopt-drawer-client.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,cAAc,EAAE,EAAE,sBAAsB,2CAoE3E"}
@@ -0,0 +1,56 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useState, useCallback, useEffect } from 'react';
4
+ import { useRouter, usePathname } from 'next/navigation';
5
+ import { toast } from 'sonner';
6
+ import { adoptBranch } from '../../../app/actions/adopt-branch.js';
7
+ import { AdoptBranchDrawer } from './adopt-branch-drawer.js';
8
+ export function AdoptDrawerClient({ repositoryPath }) {
9
+ const router = useRouter();
10
+ const pathname = usePathname();
11
+ const [isSubmitting, setIsSubmitting] = useState(false);
12
+ const [error, setError] = useState();
13
+ const isOnAdoptRoute = pathname.startsWith('/adopt');
14
+ const isOpen = !isSubmitting && isOnAdoptRoute;
15
+ // Reset isSubmitting once the route has actually changed away from /adopt
16
+ useEffect(() => {
17
+ if (!isOnAdoptRoute && isSubmitting) {
18
+ setIsSubmitting(false);
19
+ }
20
+ }, [isOnAdoptRoute, isSubmitting]);
21
+ // Clear error when drawer reopens
22
+ useEffect(() => {
23
+ if (isOnAdoptRoute) {
24
+ setError(undefined);
25
+ }
26
+ }, [isOnAdoptRoute]);
27
+ const onClose = useCallback(() => {
28
+ router.push('/');
29
+ }, [router]);
30
+ const onSubmit = useCallback((branchName) => {
31
+ setError(undefined);
32
+ setIsSubmitting(true);
33
+ router.push('/');
34
+ adoptBranch({ branchName, repositoryPath })
35
+ .then((result) => {
36
+ if (result.error) {
37
+ toast.error(result.error);
38
+ return;
39
+ }
40
+ window.dispatchEvent(new CustomEvent('shep:feature-created', {
41
+ detail: {
42
+ featureId: result.feature.id,
43
+ name: result.feature.name,
44
+ description: result.feature.description,
45
+ repositoryPath: result.feature.repositoryPath,
46
+ },
47
+ }));
48
+ toast.success(`Branch adopted as "${result.feature.name}"`);
49
+ })
50
+ .catch(() => {
51
+ toast.error('Failed to adopt branch');
52
+ setIsSubmitting(false);
53
+ });
54
+ }, [router, repositoryPath]);
55
+ return (_jsx(AdoptBranchDrawer, { open: isOpen, onClose: onClose, onSubmit: onSubmit, isSubmitting: isSubmitting, error: error }));
56
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"feature-create-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feature-create-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx"],"names":[],"mappings":"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"}
@@ -95,17 +95,6 @@ const EMPTY_GATES = {
95
95
  };
96
96
  export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, isSubmitting = false, workflowDefaults, features, repositories, initialParentId, currentAgentType, currentModel, initialDescription, }) {
97
97
  const createSound = useSoundAction('create');
98
- // Validate repositoryPath from URL against active repos — prevents stale URL params
99
- // from selecting deleted repos after add/delete/re-add cycles.
100
- // Trust the prop when: repos not loaded yet (undefined), empty list (no repos to check),
101
- // or the path matches an active repo.
102
- const validRepoPath = !repositoryPath
103
- ? ''
104
- : !repositories ||
105
- repositories.length === 0 ||
106
- repositories.some((r) => r.path === repositoryPath)
107
- ? repositoryPath
108
- : '';
109
98
  const defaultGates = workflowDefaults?.approvalGates ?? EMPTY_GATES;
110
99
  const defaultPush = workflowDefaults?.push ?? false;
111
100
  const defaultOpenPr = workflowDefaults?.openPr ?? false;
@@ -131,7 +120,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
131
120
  const [pending, setPending] = useState(false);
132
121
  const [overrideAgent, setOverrideAgent] = useState(undefined);
133
122
  const [overrideModel, setOverrideModel] = useState(undefined);
134
- const [selectedRepoPath, setSelectedRepoPath] = useState(validRepoPath || undefined);
123
+ const [selectedRepoPath, setSelectedRepoPath] = useState(repositoryPath || undefined);
135
124
  const [localRepos, setLocalRepos] = useState(repositories ?? []);
136
125
  const [isDragOver, setIsDragOver] = useState(false);
137
126
  const [uploadError, setUploadError] = useState(null);
@@ -171,7 +160,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
171
160
  setEnableEvidence(defaultEnableEvidence);
172
161
  setCommitEvidence(defaultCommitEvidence);
173
162
  setParentId(undefined);
174
- setSelectedRepoPath(validRepoPath || undefined);
163
+ setSelectedRepoPath(repositoryPath || undefined);
175
164
  setLocalRepos(repositories ?? []);
176
165
  setFast(false);
177
166
  setPending(false);
@@ -187,7 +176,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
187
176
  defaultEnableEvidence,
188
177
  defaultCiWatch,
189
178
  defaultCommitEvidence,
190
- validRepoPath,
179
+ repositoryPath,
191
180
  repositories,
192
181
  ]);
193
182
  // Track whether the form has unsaved data
@@ -305,7 +294,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
305
294
  e.preventDefault();
306
295
  if (!description.trim())
307
296
  return;
308
- const effectiveRepoPath = selectedRepoPath ?? validRepoPath;
297
+ const effectiveRepoPath = selectedRepoPath ?? repositoryPath;
309
298
  if (!effectiveRepoPath)
310
299
  return;
311
300
  createSound.play();
@@ -336,7 +325,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
336
325
  attachments,
337
326
  approvalGates,
338
327
  selectedRepoPath,
339
- validRepoPath,
328
+ repositoryPath,
340
329
  onSubmit,
341
330
  push,
342
331
  openPr,
@@ -425,13 +414,13 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
425
414
  }, 0);
426
415
  }, []);
427
416
  const hasFeatures = features && features.length > 0;
428
- const needsRepo = !validRepoPath && !selectedRepoPath;
429
- const showRepoSelector = !validRepoPath && repositories !== undefined;
417
+ const needsRepo = !repositoryPath && !selectedRepoPath;
418
+ const showRepoSelector = !repositoryPath && repositories !== undefined;
430
419
  return (_jsx(BaseDrawer, { open: open, onClose: attemptClose, size: "md", modal: false, dismissOnOutsideClick: true, "data-testid": "feature-create-drawer", header: _jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("div", { className: "h-2.5 w-2.5 shrink-0 rounded-full bg-blue-500" }), _jsx(DrawerTitle, { children: "NEW FEATURE" })] }), isSubmitting ? (_jsx(DrawerDescription, { asChild: true, children: _jsx("div", { children: _jsx(Badge, { variant: "secondary", children: "Creating..." }) }) })) : null] }), footer: _jsxs("div", { className: "flex flex-row justify-end gap-2", children: [_jsx(Button, { variant: "outline", onClick: attemptClose, disabled: isSubmitting, children: "Cancel" }), _jsx(Button, { type: "submit", form: "create-feature-form", disabled: !description.trim() || isSubmitting || needsRepo, children: isSubmitting ? 'Creating...' : '+ Create Feature' })] }), children: _jsx("div", { className: "overflow-y-auto p-4", children: _jsx(TooltipProvider, { delayDuration: 400, children: _jsxs("form", { ref: formRef, id: "create-feature-form", onSubmit: handleSubmit, onKeyDown: handleKeyDown, className: "flex flex-col gap-4", children: [showRepoSelector ? (_jsxs("div", { className: "flex flex-col gap-1.5", "data-testid": "repo-selector-section", children: [_jsx(Label, { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "REPOSITORY" }), _jsx(RepositoryCombobox, { repositories: localRepos, value: selectedRepoPath, onChange: setSelectedRepoPath, onAddRepository: (repo) => {
431
420
  setLocalRepos((prev) => [...prev, repo]);
432
421
  setSelectedRepoPath(repo.path);
433
- }, disabled: isSubmitting })] })) : validRepoPath ? (_jsxs("div", { className: "flex flex-col gap-1.5", "data-testid": "repo-readonly-section", children: [_jsx(Label, { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "REPOSITORY" }), _jsx("p", { className: "text-sm", "data-testid": "repo-readonly-label", children: repositories?.find((r) => r.path === validRepoPath)?.name ??
434
- validRepoPath.split('/').pop() })] })) : null, _jsxs("div", { role: "region", "aria-label": "File drop zone", "data-drag-over": isDragOver ? 'true' : 'false', onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, className: cn('flex flex-col gap-1.5 rounded-md border-2 border-transparent p-1 transition-colors', isDragOver && 'border-primary/50 bg-primary/5'), children: [_jsx(Label, { htmlFor: "feature-description", className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "DESCRIBE YOUR FEATURE" }), _jsxs("div", { ref: promptContainerRef, onFocus: handlePromptFocus, onBlur: handlePromptBlur, className: cn('border-input flex h-56 flex-col overflow-hidden rounded-md border shadow-xs transition-[color,box-shadow]', isPromptFocused && 'ring-ring/50 border-ring ring-[3px]'), children: [_jsx(Textarea, { id: "feature-description", placeholder: "e.g. Add GitHub OAuth login with callback handling and token refresh...", value: description, onChange: (e) => setDescription(e.target.value), onPaste: handlePaste, required: true, disabled: isSubmitting, className: "min-h-0 flex-1 resize-none rounded-none border-0 shadow-none focus-visible:ring-0" }), attachments.length > 0 && (_jsx("div", { className: "flex flex-wrap items-center gap-1.5 px-3 py-2", children: attachments.map((file) => (_jsx(AttachmentChip, { name: file.name, size: file.size, mimeType: file.mimeType, path: file.path, onRemove: () => handleRemoveFile(file.id), disabled: isSubmitting, loading: file.loading }, file.id))) })), uploadError ? (_jsx("p", { className: "text-destructive px-3 pb-2 text-xs", children: uploadError })) : null, _jsxs("div", { className: "border-input flex items-center gap-3 border-t px-3 py-1.5", children: [_jsx(AgentModelPicker, { initialAgentType: overrideAgent ?? currentAgentType ?? 'claude-code', initialModel: overrideModel ?? currentModel ?? 'claude-sonnet-4-6', mode: "override", onAgentModelChange: (agent, model) => {
422
+ }, disabled: isSubmitting })] })) : repositoryPath ? (_jsxs("div", { className: "flex flex-col gap-1.5", "data-testid": "repo-readonly-section", children: [_jsx(Label, { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "REPOSITORY" }), _jsx("p", { className: "text-sm", "data-testid": "repo-readonly-label", children: repositories?.find((r) => r.path === repositoryPath)?.name ??
423
+ repositoryPath.split('/').pop() })] })) : null, _jsxs("div", { role: "region", "aria-label": "File drop zone", "data-drag-over": isDragOver ? 'true' : 'false', onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, className: cn('flex flex-col gap-1.5 rounded-md border-2 border-transparent p-1 transition-colors', isDragOver && 'border-primary/50 bg-primary/5'), children: [_jsx(Label, { htmlFor: "feature-description", className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "DESCRIBE YOUR FEATURE" }), _jsxs("div", { ref: promptContainerRef, onFocus: handlePromptFocus, onBlur: handlePromptBlur, className: cn('border-input flex h-56 flex-col overflow-hidden rounded-md border shadow-xs transition-[color,box-shadow]', isPromptFocused && 'ring-ring/50 border-ring ring-[3px]'), children: [_jsx(Textarea, { id: "feature-description", placeholder: "e.g. Add GitHub OAuth login with callback handling and token refresh...", value: description, onChange: (e) => setDescription(e.target.value), onPaste: handlePaste, required: true, disabled: isSubmitting, className: "min-h-0 flex-1 resize-none rounded-none border-0 shadow-none focus-visible:ring-0" }), attachments.length > 0 && (_jsx("div", { className: "flex flex-wrap items-center gap-1.5 px-3 py-2", children: attachments.map((file) => (_jsx(AttachmentChip, { name: file.name, size: file.size, mimeType: file.mimeType, path: file.path, onRemove: () => handleRemoveFile(file.id), disabled: isSubmitting, loading: file.loading }, file.id))) })), uploadError ? (_jsx("p", { className: "text-destructive px-3 pb-2 text-xs", children: uploadError })) : null, _jsxs("div", { className: "border-input flex items-center gap-3 border-t px-3 py-1.5", children: [_jsx(AgentModelPicker, { initialAgentType: overrideAgent ?? currentAgentType ?? 'claude-code', initialModel: overrideModel ?? currentModel ?? 'claude-sonnet-4-6', mode: "override", onAgentModelChange: (agent, model) => {
435
424
  setOverrideAgent(agent);
436
425
  setOverrideModel(model);
437
426
  }, disabled: isSubmitting, className: "w-55" }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "ml-auto flex cursor-pointer items-center gap-2", children: [_jsx(Switch, { id: "pending-mode", checked: pending, onCheckedChange: setPending, disabled: isSubmitting }), _jsxs(Label, { htmlFor: "pending-mode", className: "flex cursor-pointer items-center gap-1 text-sm font-medium", children: [_jsx(Clock, { className: "h-3.5 w-3.5" }), "Pending"] })] }) }), _jsx(TooltipContent, { side: "bottom", children: "Create without starting \u2014 start manually later." })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "flex cursor-pointer items-center gap-2", children: [_jsx(Switch, { id: "fast-mode", checked: fast, onCheckedChange: setFast, disabled: isSubmitting }), _jsxs(Label, { htmlFor: "fast-mode", className: "flex cursor-pointer items-center gap-1 text-sm font-medium", children: [_jsx(Zap, { className: "h-3.5 w-3.5" }), "Fast Mode"] })] }) }), _jsx(TooltipContent, { side: "bottom", children: "Skip SDLC phases and implement directly from your prompt." })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: handleAddFiles, disabled: isSubmitting, "aria-label": "Attach files", className: "text-muted-foreground hover:text-foreground cursor-pointer rounded p-1 transition-colors", children: _jsx(PaperclipIcon, { className: "h-4 w-4" }) }) }), _jsx(TooltipContent, { side: "bottom", children: "Attach files" })] })] })] })] }), hasFeatures && initialParentId !== undefined ? (_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Label, { htmlFor: "parent-feature", className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "PARENT FEATURE" }), _jsx(ParentFeatureCombobox, { features: features, value: parentId, onChange: setParentId, disabled: isSubmitting })] })) : null, _jsxs("div", { className: "flex flex-col gap-2", children: [_jsxs("div", { className: "border-input flex items-center gap-4 rounded-md border px-3 py-2.5", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "text-muted-foreground w-16 shrink-0 cursor-default text-xs font-semibold tracking-wider", children: "APPROVE" }) }), _jsx(TooltipContent, { side: "bottom", children: "Auto-approve phase transitions without manual review." })] }), _jsx("div", { className: "flex flex-1 items-center gap-4", children: AUTO_APPROVE_OPTIONS.map((opt) => (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "flex cursor-pointer items-center gap-1.5", children: [_jsx(Switch, { id: `approve-${opt.id}`, size: "sm", checked: approvalGates[opt.id] ?? false, onCheckedChange: (v) => setApprovalGates((prev) => ({ ...prev, [opt.id]: v })), disabled: isSubmitting ||
@@ -1 +1 @@
1
- {"version":3,"file":"activity-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/activity-tab.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACtB,MAAM,yCAAyC,CAAC;AAmEjD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,iBAAiB,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC7C;AAmED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,mEAAmE;IACnE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,eAAe,EAAE,EAC1B,QAAQ,CAAC,EAAE,qBAAqB,EAAE,GACjC,iBAAiB,EAAE,CAgErB;AA6BD,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,gBAAgB,2CAqE3F"}
1
+ {"version":3,"file":"activity-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/activity-tab.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACtB,MAAM,yCAAyC,CAAC;AA4DjD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,iBAAiB,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC7C;AA6BD;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,mEAAmE;IACnE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,eAAe,EAAE,EAC1B,QAAQ,CAAC,EAAE,qBAAqB,EAAE,GACjC,iBAAiB,EAAE,CAgErB;AAMD,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,gBAAgB,2CAqE3F"}