@shepai/cli 1.126.0 → 1.127.0-pr406.1b65b22

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 (368) hide show
  1. package/apis/json-schema/FeatureFlags.yaml +5 -0
  2. package/dist/packages/core/src/application/ports/output/repositories/feature-repository.interface.d.ts +11 -0
  3. package/dist/packages/core/src/application/ports/output/repositories/feature-repository.interface.d.ts.map +1 -1
  4. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +5 -2
  5. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
  6. package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts +25 -0
  7. package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts.map +1 -1
  8. package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.d.ts.map +1 -1
  9. package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.js +7 -2
  10. package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.d.ts.map +1 -1
  11. package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.js +7 -2
  12. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts +49 -0
  13. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts.map +1 -0
  14. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.js +188 -0
  15. package/dist/packages/core/src/application/use-cases/features/branch-name-utils.d.ts +33 -0
  16. package/dist/packages/core/src/application/use-cases/features/branch-name-utils.d.ts.map +1 -0
  17. package/dist/packages/core/src/application/use-cases/features/branch-name-utils.js +77 -0
  18. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  19. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +1 -0
  20. package/dist/packages/core/src/domain/generated/output.d.ts +4 -0
  21. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  22. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  23. package/dist/packages/core/src/infrastructure/di/container.js +5 -0
  24. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +1 -0
  25. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  26. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +2 -0
  27. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/040-add-feature-flag-adopt-branch.d.ts +10 -0
  28. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/040-add-feature-flag-adopt-branch.d.ts.map +1 -0
  29. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/040-add-feature-flag-adopt-branch.js +15 -0
  30. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.d.ts +5 -0
  31. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.d.ts.map +1 -1
  32. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.js +9 -0
  33. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts +1 -0
  34. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts.map +1 -1
  35. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +8 -0
  36. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
  37. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +3 -2
  38. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
  39. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +1 -0
  40. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +1 -1
  41. package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts +2 -0
  42. package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts.map +1 -1
  43. package/dist/packages/core/src/infrastructure/services/git/worktree.service.js +39 -0
  44. package/dist/src/presentation/cli/commands/feat/adopt.command.d.ts +14 -0
  45. package/dist/src/presentation/cli/commands/feat/adopt.command.d.ts.map +1 -0
  46. package/dist/src/presentation/cli/commands/feat/adopt.command.js +46 -0
  47. package/dist/src/presentation/cli/commands/feat/index.d.ts.map +1 -1
  48. package/dist/src/presentation/cli/commands/feat/index.js +3 -1
  49. package/dist/src/presentation/web/app/(dashboard)/@drawer/adopt/page.d.ts +10 -0
  50. package/dist/src/presentation/web/app/(dashboard)/@drawer/adopt/page.d.ts.map +1 -0
  51. package/dist/src/presentation/web/app/(dashboard)/@drawer/adopt/page.js +32 -0
  52. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.d.ts.map +1 -1
  53. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.js +37 -32
  54. package/dist/src/presentation/web/app/actions/adopt-branch.d.ts +11 -0
  55. package/dist/src/presentation/web/app/actions/adopt-branch.d.ts.map +1 -0
  56. package/dist/src/presentation/web/app/actions/adopt-branch.js +20 -0
  57. package/dist/src/presentation/web/app/actions/approve-feature.d.ts.map +1 -1
  58. package/dist/src/presentation/web/app/actions/approve-feature.js +4 -9
  59. package/dist/src/presentation/web/app/actions/list-branches.d.ts +6 -0
  60. package/dist/src/presentation/web/app/actions/list-branches.d.ts.map +1 -0
  61. package/dist/src/presentation/web/app/actions/list-branches.js +18 -0
  62. package/dist/src/presentation/web/app/actions/reject-feature.d.ts.map +1 -1
  63. package/dist/src/presentation/web/app/actions/reject-feature.js +4 -9
  64. package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
  65. package/dist/src/presentation/web/app/build-feature-node-data.js +1 -0
  66. package/dist/src/presentation/web/app/build-graph-nodes.js +1 -0
  67. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.d.ts +20 -0
  68. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.d.ts.map +1 -0
  69. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.js +105 -0
  70. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.d.ts +38 -0
  71. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.d.ts.map +1 -0
  72. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.js +161 -0
  73. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-drawer-client.d.ts +7 -0
  74. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-drawer-client.d.ts.map +1 -0
  75. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-drawer-client.js +78 -0
  76. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -1
  77. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +4 -1
  78. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
  79. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +4 -0
  80. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +2 -0
  81. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  82. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts.map +1 -1
  83. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js +3 -1
  84. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +1 -1
  85. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.js +3 -0
  86. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  87. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +10 -1
  88. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
  89. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +1 -0
  90. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
  91. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +16 -3
  92. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +1 -1
  93. package/dist/src/presentation/web/hooks/feature-flags-context.d.ts.map +1 -1
  94. package/dist/src/presentation/web/hooks/feature-flags-context.js +6 -1
  95. package/dist/src/presentation/web/hooks/use-feature-logs.d.ts.map +1 -1
  96. package/dist/src/presentation/web/hooks/use-feature-logs.js +7 -2
  97. package/dist/src/presentation/web/lib/feature-flags.d.ts +2 -0
  98. package/dist/src/presentation/web/lib/feature-flags.d.ts.map +1 -1
  99. package/dist/src/presentation/web/lib/feature-flags.js +5 -0
  100. package/dist/tsconfig.build.tsbuildinfo +1 -1
  101. package/package.json +1 -1
  102. package/web/.next/BUILD_ID +1 -1
  103. package/web/.next/app-path-routes-manifest.json +1 -0
  104. package/web/.next/build-manifest.json +4 -4
  105. package/web/.next/fallback-build-manifest.json +2 -2
  106. package/web/.next/prerender-manifest.json +3 -3
  107. package/web/.next/required-server-files.js +3 -3
  108. package/web/.next/required-server-files.json +3 -3
  109. package/web/.next/routes-manifest.json +6 -0
  110. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/app-paths-manifest.json +3 -0
  111. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/build-manifest.json +18 -0
  112. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/next-font-manifest.json +6 -0
  113. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/react-loadable-manifest.json +1 -0
  114. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +335 -0
  115. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +21 -0
  116. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.map +5 -0
  117. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -0
  118. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +2 -0
  119. package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +2 -2
  120. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +22 -22
  121. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  122. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  123. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  124. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/build-manifest.json +2 -2
  125. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +28 -28
  126. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -1
  127. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  128. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  129. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +2 -2
  130. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +28 -28
  131. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  132. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  133. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  134. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +2 -2
  135. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +20 -20
  136. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  137. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  138. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  139. package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +2 -2
  140. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +22 -22
  141. package/web/.next/server/app/(dashboard)/create/page.js +1 -1
  142. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  143. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  144. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/build-manifest.json +2 -2
  145. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +28 -28
  146. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -1
  147. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  148. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  149. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +2 -2
  150. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +28 -28
  151. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  152. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  153. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  154. package/web/.next/server/app/(dashboard)/page/build-manifest.json +2 -2
  155. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +20 -20
  156. package/web/.next/server/app/(dashboard)/page.js +1 -1
  157. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  158. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  159. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +2 -2
  160. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +20 -20
  161. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  162. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  163. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  164. package/web/.next/server/app/_global-error/page/build-manifest.json +2 -2
  165. package/web/.next/server/app/_global-error/page.js +1 -1
  166. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  167. package/web/.next/server/app/_global-error.html +2 -2
  168. package/web/.next/server/app/_global-error.rsc +1 -1
  169. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  170. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  171. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  172. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  173. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  174. package/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
  175. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  176. package/web/.next/server/app/_not-found/page.js +1 -1
  177. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  178. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  179. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  180. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  181. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  182. package/web/.next/server/app/settings/page/build-manifest.json +2 -2
  183. package/web/.next/server/app/settings/page/server-reference-manifest.json +6 -6
  184. package/web/.next/server/app/settings/page.js +1 -1
  185. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  186. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  187. package/web/.next/server/app/skills/page/build-manifest.json +2 -2
  188. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  189. package/web/.next/server/app/skills/page.js +3 -3
  190. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  191. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  192. package/web/.next/server/app/tools/page/build-manifest.json +2 -2
  193. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  194. package/web/.next/server/app/tools/page.js +1 -1
  195. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  196. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  197. package/web/.next/server/app/version/page/build-manifest.json +2 -2
  198. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  199. package/web/.next/server/app/version/page.js +1 -1
  200. package/web/.next/server/app/version/page.js.nft.json +1 -1
  201. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  202. package/web/.next/server/app-paths-manifest.json +1 -0
  203. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  204. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  205. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  206. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  207. package/web/.next/server/chunks/[root-of-the-server]__dcd4f847._.js.map +1 -1
  208. package/web/.next/server/chunks/ssr/403f9_next_dist_client_components_94d75bc3._.js +3 -0
  209. package/web/.next/server/chunks/ssr/403f9_next_dist_client_components_94d75bc3._.js.map +1 -0
  210. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_fbb88113.js +3 -0
  211. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_fbb88113.js.map +1 -0
  212. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  213. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  214. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_fdfbf5cc.js +1 -1
  215. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_fdfbf5cc.js.map +1 -1
  216. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_d8fa0b5f.js +1 -1
  217. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_d8fa0b5f.js.map +1 -1
  218. package/web/.next/server/chunks/ssr/[root-of-the-server]__02c84e6b._.js +3 -0
  219. package/web/.next/server/chunks/ssr/[root-of-the-server]__02c84e6b._.js.map +1 -0
  220. package/web/.next/server/chunks/ssr/[root-of-the-server]__06fef644._.js +1 -1
  221. package/web/.next/server/chunks/ssr/[root-of-the-server]__248b9fc3._.js +1 -1
  222. package/web/.next/server/chunks/ssr/[root-of-the-server]__248b9fc3._.js.map +1 -1
  223. package/web/.next/server/chunks/ssr/[root-of-the-server]__357de47c._.js +2 -2
  224. package/web/.next/server/chunks/ssr/[root-of-the-server]__357de47c._.js.map +1 -1
  225. package/web/.next/server/chunks/ssr/{[root-of-the-server]__2dddfea9._.js → [root-of-the-server]__4af0afe0._.js} +2 -2
  226. package/web/.next/server/chunks/ssr/{[root-of-the-server]__2dddfea9._.js.map → [root-of-the-server]__4af0afe0._.js.map} +1 -1
  227. package/web/.next/server/chunks/ssr/[root-of-the-server]__4ed9b909._.js +3 -0
  228. package/web/.next/server/chunks/ssr/[root-of-the-server]__4ed9b909._.js.map +1 -0
  229. package/web/.next/server/chunks/ssr/[root-of-the-server]__6677a82c._.js +1 -1
  230. package/web/.next/server/chunks/ssr/[root-of-the-server]__6677a82c._.js.map +1 -1
  231. package/web/.next/server/chunks/ssr/[root-of-the-server]__67fe07fe._.js +1 -1
  232. package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js +1 -1
  233. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  234. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
  235. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +2 -2
  236. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -1
  237. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  238. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
  239. package/web/.next/server/chunks/ssr/[root-of-the-server]__8c553503._.js +2 -2
  240. package/web/.next/server/chunks/ssr/{[root-of-the-server]__4c7486cb._.js → [root-of-the-server]__9bc1434f._.js} +2 -2
  241. package/web/.next/server/chunks/ssr/{[root-of-the-server]__4c7486cb._.js.map → [root-of-the-server]__9bc1434f._.js.map} +1 -1
  242. package/web/.next/server/chunks/ssr/[root-of-the-server]__a50a7e39._.js +2 -2
  243. package/web/.next/server/chunks/ssr/[root-of-the-server]__a50a7e39._.js.map +1 -1
  244. package/web/.next/server/chunks/ssr/[root-of-the-server]__c1262d08._.js +3 -0
  245. package/web/.next/server/chunks/ssr/[root-of-the-server]__c1262d08._.js.map +1 -0
  246. package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js +1 -1
  247. package/web/.next/server/chunks/ssr/[root-of-the-server]__dfc367f2._.js +1 -1
  248. package/web/.next/server/chunks/ssr/[root-of-the-server]__dfc367f2._.js.map +1 -1
  249. package/web/.next/server/chunks/ssr/[root-of-the-server]__e7f61cc6._.js +1 -1
  250. package/web/.next/server/chunks/ssr/[root-of-the-server]__e7f61cc6._.js.map +1 -1
  251. package/web/.next/server/chunks/ssr/[root-of-the-server]__fe48d2dc._.js +1 -1
  252. package/web/.next/server/chunks/ssr/[root-of-the-server]__fe48d2dc._.js.map +1 -1
  253. package/web/.next/server/chunks/ssr/_1e8676be._.js +3 -0
  254. package/web/.next/server/chunks/ssr/_1e8676be._.js.map +1 -0
  255. package/web/.next/server/chunks/ssr/_2f6f48b8._.js +1 -1
  256. package/web/.next/server/chunks/ssr/_2f6f48b8._.js.map +1 -1
  257. package/web/.next/server/chunks/ssr/_4093a637._.js +5 -0
  258. package/web/.next/server/chunks/ssr/_4093a637._.js.map +1 -0
  259. package/web/.next/server/chunks/ssr/_583a83fb._.js +3 -0
  260. package/web/.next/server/chunks/ssr/_583a83fb._.js.map +1 -0
  261. package/web/.next/server/chunks/ssr/_7dca1882._.js +1 -1
  262. package/web/.next/server/chunks/ssr/_7dca1882._.js.map +1 -1
  263. package/web/.next/server/chunks/ssr/_918887c5._.js +1 -1
  264. package/web/.next/server/chunks/ssr/_918887c5._.js.map +1 -1
  265. package/web/.next/server/chunks/ssr/_9f56cf8f._.js +3 -0
  266. package/web/.next/server/chunks/ssr/_9f56cf8f._.js.map +1 -0
  267. package/web/.next/server/chunks/ssr/_a187fd7e._.js +3 -0
  268. package/web/.next/server/chunks/ssr/_a187fd7e._.js.map +1 -0
  269. package/web/.next/server/chunks/ssr/_a37f5f18._.js +1 -1
  270. package/web/.next/server/chunks/ssr/_a37f5f18._.js.map +1 -1
  271. package/web/.next/server/chunks/ssr/_a5aa6371._.js +9 -0
  272. package/web/.next/server/chunks/ssr/_a5aa6371._.js.map +1 -0
  273. package/web/.next/server/chunks/ssr/_a9f57758._.js +3 -0
  274. package/web/.next/server/chunks/ssr/_a9f57758._.js.map +1 -0
  275. package/web/.next/server/chunks/ssr/_b730ac57._.js +3 -0
  276. package/web/.next/server/chunks/ssr/_b730ac57._.js.map +1 -0
  277. package/web/.next/server/chunks/ssr/{_821bbcc5._.js → _d1966be3._.js} +2 -2
  278. package/web/.next/server/chunks/ssr/{_821bbcc5._.js.map → _d1966be3._.js.map} +1 -1
  279. package/web/.next/server/chunks/ssr/_d4b20e29._.js.map +1 -1
  280. package/web/.next/server/chunks/ssr/_d5206f22._.js +4 -0
  281. package/web/.next/server/chunks/ssr/_d5206f22._.js.map +1 -0
  282. package/web/.next/server/chunks/ssr/_f39a1adb._.js +1 -1
  283. package/web/.next/server/chunks/ssr/_f39a1adb._.js.map +1 -1
  284. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  285. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  286. package/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js +3 -0
  287. package/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js.map +1 -0
  288. package/web/.next/server/chunks/ssr/node_modules__pnpm_026172d1._.js +3 -0
  289. package/web/.next/server/chunks/ssr/node_modules__pnpm_026172d1._.js.map +1 -0
  290. package/web/.next/server/chunks/ssr/src_presentation_web_3cc5cb5e._.js +3 -0
  291. package/web/.next/server/chunks/ssr/src_presentation_web_3cc5cb5e._.js.map +1 -0
  292. package/web/.next/server/chunks/ssr/src_presentation_web_9db47db7._.js +2 -2
  293. package/web/.next/server/chunks/ssr/src_presentation_web_9db47db7._.js.map +1 -1
  294. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f66cd328.js +1 -1
  295. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f66cd328.js.map +1 -1
  296. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  297. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  298. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  299. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  300. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  301. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  302. package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js +3 -0
  303. package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js.map +1 -0
  304. package/web/.next/server/chunks/ssr/src_presentation_web_ede4a227._.js +2 -2
  305. package/web/.next/server/chunks/ssr/src_presentation_web_ede4a227._.js.map +1 -1
  306. package/web/.next/server/middleware-build-manifest.js +2 -2
  307. package/web/.next/server/pages/500.html +2 -2
  308. package/web/.next/server/server-reference-manifest.js +1 -1
  309. package/web/.next/server/server-reference-manifest.json +204 -34
  310. package/web/.next/static/chunks/05e9c71e5e4cf531.js +1 -0
  311. package/web/.next/static/chunks/{dcfed2c9b7cd1cb4.js → 16c4164a0e6aa7c3.js} +1 -1
  312. package/web/.next/static/chunks/{4ac11847f73b50d6.js → 16e02bbe4eb1dd17.js} +1 -1
  313. package/web/.next/static/chunks/33d2f67ad4814aba.css +1 -0
  314. package/web/.next/static/chunks/57cb8990b023ce27.js +1 -0
  315. package/web/.next/static/chunks/59ccf20a119e23db.js +1 -0
  316. package/web/.next/static/chunks/{de8b0265f780e212.js → 5f1b6a05f366bf8e.js} +2 -2
  317. package/web/.next/static/chunks/66e734755d9ad3fb.js +1 -0
  318. package/web/.next/static/chunks/8080c842b0358904.js +1 -0
  319. package/web/.next/static/chunks/{ed3a602003bcb31b.js → 89aac43287d73b02.js} +1 -1
  320. package/web/.next/static/chunks/a8ba3f3e2b0f87aa.js +1 -0
  321. package/web/.next/static/chunks/adbba8744ae9545d.js +1 -0
  322. package/web/.next/static/chunks/{112cf5891d1ca558.js → c839d87a827831b2.js} +1 -1
  323. package/web/.next/static/chunks/{37ada233462bcaec.js → cd45aed9c46e1bf5.js} +1 -1
  324. package/web/.next/static/chunks/d04de4be30ab78ca.js +3 -0
  325. package/web/.next/static/chunks/dab7751020a01248.js +1 -0
  326. package/web/.next/static/chunks/{044f4665499a9656.js → e6041d1ebdc8cc22.js} +1 -1
  327. package/web/.next/static/chunks/{4ac4a43b7eb441e1.js → ecb6179341fddc5b.js} +2 -2
  328. package/web/.next/static/chunks/{turbopack-426d9bc2450816ba.js → turbopack-080e470ea902d0ba.js} +1 -1
  329. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_d0119342._.js +0 -3
  330. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_d0119342._.js.map +0 -1
  331. package/web/.next/server/chunks/ssr/[root-of-the-server]__52485955._.js +0 -3
  332. package/web/.next/server/chunks/ssr/[root-of-the-server]__52485955._.js.map +0 -1
  333. package/web/.next/server/chunks/ssr/[root-of-the-server]__56ecbe40._.js +0 -3
  334. package/web/.next/server/chunks/ssr/[root-of-the-server]__56ecbe40._.js.map +0 -1
  335. package/web/.next/server/chunks/ssr/_243e3685._.js +0 -3
  336. package/web/.next/server/chunks/ssr/_243e3685._.js.map +0 -1
  337. package/web/.next/server/chunks/ssr/_3a4c94e3._.js +0 -3
  338. package/web/.next/server/chunks/ssr/_3a4c94e3._.js.map +0 -1
  339. package/web/.next/server/chunks/ssr/_6d26a08f._.js +0 -3
  340. package/web/.next/server/chunks/ssr/_6d26a08f._.js.map +0 -1
  341. package/web/.next/server/chunks/ssr/_9ac70f88._.js +0 -5
  342. package/web/.next/server/chunks/ssr/_9ac70f88._.js.map +0 -1
  343. package/web/.next/server/chunks/ssr/_b56e7571._.js +0 -3
  344. package/web/.next/server/chunks/ssr/_b56e7571._.js.map +0 -1
  345. package/web/.next/server/chunks/ssr/_e9703421._.js +0 -3
  346. package/web/.next/server/chunks/ssr/_e9703421._.js.map +0 -1
  347. package/web/.next/server/chunks/ssr/_f1a649e3._.js +0 -9
  348. package/web/.next/server/chunks/ssr/_f1a649e3._.js.map +0 -1
  349. package/web/.next/server/chunks/ssr/node_modules__pnpm_bc66dcc6._.js +0 -3
  350. package/web/.next/server/chunks/ssr/node_modules__pnpm_bc66dcc6._.js.map +0 -1
  351. package/web/.next/server/chunks/ssr/src_presentation_web_aeddd007._.js +0 -3
  352. package/web/.next/server/chunks/ssr/src_presentation_web_aeddd007._.js.map +0 -1
  353. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +0 -3
  354. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +0 -1
  355. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +0 -3
  356. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js.map +0 -1
  357. package/web/.next/static/chunks/1be7ac7a24009333.css +0 -1
  358. package/web/.next/static/chunks/303a1217006489b9.js +0 -1
  359. package/web/.next/static/chunks/4443ee9c7733399b.js +0 -1
  360. package/web/.next/static/chunks/52b56677c842e45f.js +0 -3
  361. package/web/.next/static/chunks/5fb66ee5a353a6c6.js +0 -1
  362. package/web/.next/static/chunks/6cfc75060a243290.js +0 -1
  363. package/web/.next/static/chunks/d60f93a1a25ab09d.js +0 -1
  364. package/web/.next/static/chunks/dbbb446493f21874.js +0 -1
  365. package/web/.next/static/chunks/de66f8d6a67c2361.js +0 -1
  366. /package/web/.next/static/{4hN7Gtw--ruMbDn0FRI2- → TEtbIL-AhuswilrJSNSgH}/_buildManifest.js +0 -0
  367. /package/web/.next/static/{4hN7Gtw--ruMbDn0FRI2- → TEtbIL-AhuswilrJSNSgH}/_clientMiddlewareManifest.json +0 -0
  368. /package/web/.next/static/{4hN7Gtw--ruMbDn0FRI2- → TEtbIL-AhuswilrJSNSgH}/_ssgManifest.js +0 -0
@@ -14,8 +14,13 @@ properties:
14
14
  type: boolean
15
15
  default: false
16
16
  description: Enable debug UI elements and verbose client-side logging
17
+ adoptBranch:
18
+ type: boolean
19
+ default: false
20
+ description: Enable adopt branch feature to import existing branches as tracked features
17
21
  required:
18
22
  - skills
19
23
  - envDeploy
20
24
  - debug
25
+ - adoptBranch
21
26
  description: Feature flag toggles for runtime feature control
@@ -57,6 +57,17 @@ export interface IFeatureRepository {
57
57
  * @returns The feature or null if not found
58
58
  */
59
59
  findBySlug(slug: string, repositoryPath: string): Promise<Feature | null>;
60
+ /**
61
+ * Find a feature by its branch name within a repository (excludes soft-deleted).
62
+ *
63
+ * Used for duplicate adoption detection — ensures a branch is not already
64
+ * tracked as a feature before adopting it.
65
+ *
66
+ * @param branch - The exact git branch name
67
+ * @param repositoryPath - The repository path to scope the search
68
+ * @returns The feature or null if not found
69
+ */
70
+ findByBranch(branch: string, repositoryPath: string): Promise<Feature | null>;
60
71
  /**
61
72
  * List features with optional filters.
62
73
  * Excludes soft-deleted features unless includeDeleted is true.
@@ -1 +1 @@
1
- {"version":3,"file":"feature-repository.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/repositories/feature-repository.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAErF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,2EAA2E;IAC3E,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAE9C;;;;;;OAMG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAExD;;;;;;OAMG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAE1E;;;;;;OAMG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAEvD;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExC;;;;;;;OAOG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAErD;;;;OAIG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElC;;;;OAIG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC"}
1
+ {"version":3,"file":"feature-repository.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/repositories/feature-repository.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAErF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,2EAA2E;IAC3E,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAE9C;;;;;;OAMG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAExD;;;;;;OAMG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAE1E;;;;;;;;;OASG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAE9E;;;;;;OAMG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAEvD;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExC;;;;;;;OAOG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAErD;;;;OAIG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElC;;;;OAIG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC"}
@@ -196,12 +196,15 @@ export interface IGitPrService {
196
196
  */
197
197
  createPr(cwd: string, prYamlPath: string): Promise<PrCreateResult>;
198
198
  /**
199
- * Merge a pull request.
199
+ * Merge a pull request immediately.
200
+ *
201
+ * The PR must be in a mergeable state (all required checks passed, reviews
202
+ * approved). If not, this throws GitPrError with MERGE_FAILED code.
200
203
  *
201
204
  * @param cwd - Working directory path
202
205
  * @param prNumber - PR number to merge
203
206
  * @param strategy - Merge strategy (squash, merge, rebase)
204
- * @throws GitPrError with MERGE_FAILED code
207
+ * @throws GitPrError with MERGE_FAILED code if the PR cannot be merged
205
208
  */
206
209
  mergePr(cwd: string, prNumber: number, strategy?: MergeStrategy): Promise<void>;
207
210
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"git-pr-service.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/git-pr-service.interface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git-pr-service.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/git-pr-service.interface.ts"],"names":[],"mappings":"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"}
@@ -50,6 +50,21 @@ export interface IWorktreeService {
50
50
  * @throws WorktreeError with appropriate code
51
51
  */
52
52
  create(repoPath: string, branch: string, worktreePath: string, startPoint?: string): Promise<WorktreeInfo>;
53
+ /**
54
+ * Create a worktree for an already-existing branch (no -b flag).
55
+ *
56
+ * Unlike create(), this does not create a new branch. It attaches a worktree
57
+ * to a branch that already exists locally or as a remote tracking ref.
58
+ * For remote-only branches, pass "origin/<branch>" as the branch argument
59
+ * so that git automatically sets up local tracking.
60
+ *
61
+ * @param repoPath - Path to the git repository
62
+ * @param branch - Existing branch name or remote tracking ref (e.g., "origin/my-branch")
63
+ * @param worktreePath - Path for the new worktree directory
64
+ * @returns Information about the created worktree
65
+ * @throws WorktreeError with appropriate code
66
+ */
67
+ addExisting(repoPath: string, branch: string, worktreePath: string): Promise<WorktreeInfo>;
53
68
  /**
54
69
  * Remove an existing worktree.
55
70
  *
@@ -98,6 +113,16 @@ export interface IWorktreeService {
98
113
  * @returns Computed worktree path (e.g., /repo/.worktrees/branch-name)
99
114
  */
100
115
  getWorktreePath(repoPath: string, branch: string): string;
116
+ /**
117
+ * List all local and remote branch names in a repository.
118
+ *
119
+ * Returns unique branch names (without remote prefixes like "origin/").
120
+ * Excludes HEAD pointers and the current branch marker.
121
+ *
122
+ * @param repoPath - Path to the git repository
123
+ * @returns Array of branch name strings
124
+ */
125
+ listBranches(repoPath: string): Promise<string[]>;
101
126
  /**
102
127
  * Prune stale worktree entries whose directories no longer exist.
103
128
  *
@@ -1 +1 @@
1
- {"version":3,"file":"worktree-service.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/worktree-service.interface.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,oBAAY,iBAAiB;IAC3B,cAAc,mBAAmB;IACjC,aAAa,kBAAkB;IAC/B,SAAS,cAAc;IACvB,cAAc,mBAAmB;IACjC,SAAS,cAAc;CACxB;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;aAGpB,IAAI,EAAE,iBAAiB;aACvB,KAAK,CAAC,EAAE,KAAK;gBAF7B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,iBAAiB,EACvB,KAAK,CAAC,EAAE,KAAK,YAAA;CAKhC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;;;OASG;IACH,MAAM,CACJ,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzB;;;;;;;OAOG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/E;;;;;OAKG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAEhD;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3D;;;;;;OAMG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjE;;;;;;OAMG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvE;;;;;;OAMG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAE1D;;;;OAIG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvC;;;;;;;OAOG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD"}
1
+ {"version":3,"file":"worktree-service.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/worktree-service.interface.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,oBAAY,iBAAiB;IAC3B,cAAc,mBAAmB;IACjC,aAAa,kBAAkB;IAC/B,SAAS,cAAc;IACvB,cAAc,mBAAmB;IACjC,SAAS,cAAc;CACxB;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;aAGpB,IAAI,EAAE,iBAAiB;aACvB,KAAK,CAAC,EAAE,KAAK;gBAF7B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,iBAAiB,EACvB,KAAK,CAAC,EAAE,KAAK,YAAA;CAKhC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;;;OASG;IACH,MAAM,CACJ,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzB;;;;;;;;;;;;;OAaG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAE3F;;;;;;;OAOG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/E;;;;;OAKG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAEhD;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3D;;;;;;OAMG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjE;;;;;;OAMG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvE;;;;;;OAMG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAE1D;;;;;;;;OAQG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAElD;;;;OAIG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvC;;;;;;;OAOG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD"}
@@ -1 +1 @@
1
- {"version":3,"file":"approve-agent-run.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/agents/approve-agent-run.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gEAAgE,CAAC;AAC7G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAE1G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAI9E,qBACa,sBAAsB;IAG/B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAEnC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;gBANrB,kBAAkB,EAAE,mBAAmB,EAEvC,cAAc,EAAE,2BAA2B,EAE3C,iBAAiB,EAAE,kBAAkB,EAErC,qBAAqB,EAAE,sBAAsB;IAG1D,OAAO,CACX,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAgGlD"}
1
+ {"version":3,"file":"approve-agent-run.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/agents/approve-agent-run.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gEAAgE,CAAC;AAC7G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAE1G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAI9E,qBACa,sBAAsB;IAG/B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAEnC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;gBANrB,kBAAkB,EAAE,mBAAmB,EAEvC,cAAc,EAAE,2BAA2B,EAE3C,iBAAiB,EAAE,kBAAkB,EAErC,qBAAqB,EAAE,sBAAsB;IAG1D,OAAO,CACX,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAqGlD"}
@@ -41,10 +41,15 @@ let ApproveAgentRunUseCase = class ApproveAgentRunUseCase {
41
41
  if (!run) {
42
42
  return { approved: false, reason: 'Agent run not found' };
43
43
  }
44
- if (run.status !== AgentRunStatus.waitingApproval) {
44
+ const APPROVABLE_STATUSES = new Set([
45
+ AgentRunStatus.waitingApproval,
46
+ AgentRunStatus.failed,
47
+ AgentRunStatus.interrupted,
48
+ ]);
49
+ if (!APPROVABLE_STATUSES.has(run.status)) {
45
50
  return {
46
51
  approved: false,
47
- reason: `Agent run is not waiting for approval (status: ${run.status})`,
52
+ reason: `Agent run is not in an approvable state (status: ${run.status})`,
48
53
  };
49
54
  }
50
55
  // Look up the feature to get specPath
@@ -1 +1 @@
1
- {"version":3,"file":"reject-agent-run.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/agents/reject-agent-run.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gEAAgE,CAAC;AAC7G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAU1G,qBACa,qBAAqB;IAG9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAEnC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;gBANrB,kBAAkB,EAAE,mBAAmB,EAEvC,cAAc,EAAE,2BAA2B,EAE3C,iBAAiB,EAAE,kBAAkB,EAErC,qBAAqB,EAAE,sBAAsB;IAG1D,OAAO,CACX,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC;QACT,QAAQ,EAAE,OAAO,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,CAAC;CAsHH"}
1
+ {"version":3,"file":"reject-agent-run.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/agents/reject-agent-run.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gEAAgE,CAAC;AAC7G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAU1G,qBACa,qBAAqB;IAG9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAEnC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;gBANrB,kBAAkB,EAAE,mBAAmB,EAEvC,cAAc,EAAE,2BAA2B,EAE3C,iBAAiB,EAAE,kBAAkB,EAErC,qBAAqB,EAAE,sBAAsB;IAG1D,OAAO,CACX,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC;QACT,QAAQ,EAAE,OAAO,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,CAAC;CA2HH"}
@@ -41,10 +41,15 @@ let RejectAgentRunUseCase = class RejectAgentRunUseCase {
41
41
  if (!run) {
42
42
  return { rejected: false, reason: 'Agent run not found' };
43
43
  }
44
- if (run.status !== AgentRunStatus.waitingApproval) {
44
+ const REJECTABLE_STATUSES = new Set([
45
+ AgentRunStatus.waitingApproval,
46
+ AgentRunStatus.failed,
47
+ AgentRunStatus.interrupted,
48
+ ]);
49
+ if (!REJECTABLE_STATUSES.has(run.status)) {
45
50
  return {
46
51
  rejected: false,
47
- reason: `Agent run is not waiting for approval (status: ${run.status})`,
52
+ reason: `Agent run is not in a rejectable state (status: ${run.status})`,
48
53
  };
49
54
  }
50
55
  // Validate non-empty feedback
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Adopt Branch Use Case
3
+ *
4
+ * Imports an existing git branch into Shep's feature tracking system.
5
+ * Creates a worktree (if needed), derives feature metadata from the branch name,
6
+ * and persists a Feature entity. Branches with an open PR get lifecycle=Review
7
+ * (shown as "REVIEW" in the UI); all others get lifecycle=Maintain (completed).
8
+ *
9
+ * This is a standalone use case — it does NOT extend or modify CreateFeatureUseCase.
10
+ * It needs only three dependencies: IFeatureRepository, IRepositoryRepository, and IWorktreeService.
11
+ */
12
+ import type { Feature } from '../../../domain/generated/output.js';
13
+ import type { IFeatureRepository } from '../../ports/output/repositories/feature-repository.interface.js';
14
+ import type { IRepositoryRepository } from '../../ports/output/repositories/repository-repository.interface.js';
15
+ import type { IWorktreeService } from '../../ports/output/services/worktree-service.interface.js';
16
+ import type { IGitPrService } from '../../ports/output/services/git-pr-service.interface.js';
17
+ export interface AdoptBranchInput {
18
+ branchName: string;
19
+ repositoryPath: string;
20
+ }
21
+ export interface AdoptBranchResult {
22
+ feature: Feature;
23
+ }
24
+ export declare class AdoptBranchUseCase {
25
+ private readonly featureRepo;
26
+ private readonly repositoryRepo;
27
+ private readonly worktreeService;
28
+ private readonly gitPrService;
29
+ constructor(featureRepo: IFeatureRepository, repositoryRepo: IRepositoryRepository, worktreeService: IWorktreeService, gitPrService: IGitPrService);
30
+ execute(input: AdoptBranchInput): Promise<AdoptBranchResult>;
31
+ /**
32
+ * Resolve the git ref to use for worktree creation.
33
+ * Returns the branch name for local branches, or "origin/<branch>" for remote-only.
34
+ * Throws if branch does not exist anywhere.
35
+ */
36
+ private resolveBranchRef;
37
+ /**
38
+ * Detect if the branch has an open PR (or one whose closure we cannot confirm).
39
+ * Returns PullRequest data if found, undefined otherwise.
40
+ * Gracefully returns undefined if gh CLI is unavailable or the repo has no remote.
41
+ */
42
+ private detectPrForBranch;
43
+ /**
44
+ * Find or create a Repository entity for the given path.
45
+ * Mirrors the pattern from CreateFeatureUseCase.
46
+ */
47
+ private resolveRepository;
48
+ }
49
+ //# sourceMappingURL=adopt-branch.use-case.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adopt-branch.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/adopt-branch.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,qCAAqC,CAAC;AAEhF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oEAAoE,CAAC;AAChH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAClG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yDAAyD,CAAC;AAG7F,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;CAClB;AAKD,qBACa,kBAAkB;IAG3B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,YAAY;gBANZ,WAAW,EAAE,kBAAkB,EAE/B,cAAc,EAAE,qBAAqB,EAErC,eAAe,EAAE,gBAAgB,EAEjC,YAAY,EAAE,aAAa;IAGxC,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAyFlE;;;;OAIG;YACW,gBAAgB;IAiB9B;;;;OAIG;YACW,iBAAiB;IA4B/B;;;OAGG;YACW,iBAAiB;CAuBhC"}
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Adopt Branch Use Case
3
+ *
4
+ * Imports an existing git branch into Shep's feature tracking system.
5
+ * Creates a worktree (if needed), derives feature metadata from the branch name,
6
+ * and persists a Feature entity. Branches with an open PR get lifecycle=Review
7
+ * (shown as "REVIEW" in the UI); all others get lifecycle=Maintain (completed).
8
+ *
9
+ * This is a standalone use case — it does NOT extend or modify CreateFeatureUseCase.
10
+ * It needs only three dependencies: IFeatureRepository, IRepositoryRepository, and IWorktreeService.
11
+ */
12
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
13
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
14
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
15
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
16
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
17
+ };
18
+ var __metadata = (this && this.__metadata) || function (k, v) {
19
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
20
+ };
21
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
22
+ return function (target, key) { decorator(target, key, paramIndex); }
23
+ };
24
+ import { injectable, inject } from 'tsyringe';
25
+ import { randomUUID } from 'node:crypto';
26
+ import { SdlcLifecycle, PrStatus } from '../../../domain/generated/output.js';
27
+ import { deriveName, deriveSlug } from './branch-name-utils.js';
28
+ /** Branches that must not be adopted as features. */
29
+ const PROTECTED_BRANCHES = new Set(['main', 'master']);
30
+ let AdoptBranchUseCase = class AdoptBranchUseCase {
31
+ featureRepo;
32
+ repositoryRepo;
33
+ worktreeService;
34
+ gitPrService;
35
+ constructor(featureRepo, repositoryRepo, worktreeService, gitPrService) {
36
+ this.featureRepo = featureRepo;
37
+ this.repositoryRepo = repositoryRepo;
38
+ this.worktreeService = worktreeService;
39
+ this.gitPrService = gitPrService;
40
+ }
41
+ async execute(input) {
42
+ const { branchName, repositoryPath } = input;
43
+ // --- Guard: reject main/master ---
44
+ if (PROTECTED_BRANCHES.has(branchName)) {
45
+ throw new Error(`Cannot adopt the "${branchName}" branch. The main branch should not be tracked as a feature.`);
46
+ }
47
+ // --- Guard: duplicate adoption ---
48
+ const existing = await this.featureRepo.findByBranch(branchName, repositoryPath);
49
+ if (existing) {
50
+ throw new Error(`Branch "${branchName}" is already tracked as feature "${existing.name}" (${existing.id}). ` +
51
+ 'A branch can only be adopted once per repository.');
52
+ }
53
+ // --- Derive slug and check uniqueness ---
54
+ const slug = deriveSlug(branchName);
55
+ const slugCollision = await this.featureRepo.findBySlug(slug, repositoryPath);
56
+ if (slugCollision) {
57
+ throw new Error(`A feature with slug "${slug}" already exists in this repository (feature "${slugCollision.name}"). ` +
58
+ `Cannot adopt branch "${branchName}" because its derived slug collides.`);
59
+ }
60
+ // --- Validate branch existence (local or remote) ---
61
+ const branchRef = await this.resolveBranchRef(branchName, repositoryPath);
62
+ // --- Resolve or create repository entity ---
63
+ const repository = await this.resolveRepository(repositoryPath);
64
+ // --- Create or reuse worktree ---
65
+ const worktreePath = this.worktreeService.getWorktreePath(repositoryPath, slug);
66
+ const worktreeExists = await this.worktreeService.exists(repositoryPath, branchName);
67
+ if (!worktreeExists) {
68
+ await this.worktreeService.addExisting(repositoryPath, branchRef, worktreePath);
69
+ }
70
+ // --- Detect open PR for this branch ---
71
+ const prData = await this.detectPrForBranch(branchName, repositoryPath);
72
+ // --- Derive feature metadata ---
73
+ const name = deriveName(branchName);
74
+ const now = new Date();
75
+ const hasOpenPr = prData !== undefined;
76
+ // If the branch has an open (not yet merged) PR, place the feature in
77
+ // Review so the node shows "REVIEW" instead of "COMPLETED". Only truly
78
+ // finished branches (no PR, merged PR, or closed PR) get Maintain.
79
+ const lifecycle = prData?.status === PrStatus.Open ? SdlcLifecycle.Review : SdlcLifecycle.Maintain;
80
+ // --- Persist feature ---
81
+ const feature = {
82
+ id: randomUUID(),
83
+ name,
84
+ slug,
85
+ description: '',
86
+ userQuery: '',
87
+ repositoryPath,
88
+ branch: branchName,
89
+ lifecycle,
90
+ messages: [],
91
+ relatedArtifacts: [],
92
+ fast: false,
93
+ push: false,
94
+ openPr: hasOpenPr,
95
+ approvalGates: {
96
+ allowPrd: false,
97
+ allowPlan: false,
98
+ allowMerge: false,
99
+ },
100
+ worktreePath,
101
+ repositoryId: repository.id,
102
+ pr: prData,
103
+ createdAt: now,
104
+ updatedAt: now,
105
+ };
106
+ await this.featureRepo.create(feature);
107
+ return { feature };
108
+ }
109
+ /**
110
+ * Resolve the git ref to use for worktree creation.
111
+ * Returns the branch name for local branches, or "origin/<branch>" for remote-only.
112
+ * Throws if branch does not exist anywhere.
113
+ */
114
+ async resolveBranchRef(branchName, repositoryPath) {
115
+ const localExists = await this.worktreeService.branchExists(repositoryPath, branchName);
116
+ if (localExists) {
117
+ return branchName;
118
+ }
119
+ const remoteExists = await this.worktreeService.remoteBranchExists(repositoryPath, branchName);
120
+ if (remoteExists) {
121
+ return `origin/${branchName}`;
122
+ }
123
+ throw new Error(`Branch "${branchName}" does not exist locally or on the remote. ` +
124
+ 'Check the branch name spelling and ensure you have fetched from the remote.');
125
+ }
126
+ /**
127
+ * Detect if the branch has an open PR (or one whose closure we cannot confirm).
128
+ * Returns PullRequest data if found, undefined otherwise.
129
+ * Gracefully returns undefined if gh CLI is unavailable or the repo has no remote.
130
+ */
131
+ async detectPrForBranch(branchName, repositoryPath) {
132
+ try {
133
+ const hasRemote = await this.gitPrService.hasRemote(repositoryPath);
134
+ if (!hasRemote)
135
+ return undefined;
136
+ const prStatuses = await this.gitPrService.listPrStatuses(repositoryPath);
137
+ const match = prStatuses.find((pr) => pr.headRefName === branchName);
138
+ if (!match)
139
+ return undefined;
140
+ // If the PR is definitively closed (not merged), skip it
141
+ if (match.state === PrStatus.Closed)
142
+ return undefined;
143
+ // Open or Merged — attach PR data
144
+ return {
145
+ url: match.url,
146
+ number: match.number,
147
+ status: match.state,
148
+ mergeable: match.mergeable,
149
+ };
150
+ }
151
+ catch {
152
+ // gh CLI not installed, auth failure, etc. — gracefully skip PR detection
153
+ return undefined;
154
+ }
155
+ }
156
+ /**
157
+ * Find or create a Repository entity for the given path.
158
+ * Mirrors the pattern from CreateFeatureUseCase.
159
+ */
160
+ async resolveRepository(repositoryPath) {
161
+ const normalizedPath = repositoryPath.replace(/\\/g, '/').replace(/\/+$/, '') || repositoryPath;
162
+ let repository = await this.repositoryRepo.findByPath(normalizedPath);
163
+ if (!repository) {
164
+ const now = new Date();
165
+ const repoName = normalizedPath.split('/').pop() ?? normalizedPath;
166
+ repository = await this.repositoryRepo.create({
167
+ id: randomUUID(),
168
+ name: repoName,
169
+ path: normalizedPath,
170
+ createdAt: now,
171
+ updatedAt: now,
172
+ });
173
+ if (!repository) {
174
+ throw new Error(`Failed to create or retrieve repository record for path: ${normalizedPath}`);
175
+ }
176
+ }
177
+ return repository;
178
+ }
179
+ };
180
+ AdoptBranchUseCase = __decorate([
181
+ injectable(),
182
+ __param(0, inject('IFeatureRepository')),
183
+ __param(1, inject('IRepositoryRepository')),
184
+ __param(2, inject('IWorktreeService')),
185
+ __param(3, inject('IGitPrService')),
186
+ __metadata("design:paramtypes", [Object, Object, Object, Object])
187
+ ], AdoptBranchUseCase);
188
+ export { AdoptBranchUseCase };
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Pure utility functions for deriving feature metadata from git branch names.
3
+ *
4
+ * Used by the AdoptBranchUseCase to generate a human-readable feature name
5
+ * and a URL-safe slug from any git branch name.
6
+ */
7
+ /**
8
+ * Derive a human-readable feature name from a git branch name.
9
+ *
10
+ * Strips known prefixes (feat/, fix/, etc.), replaces hyphens and underscores
11
+ * with spaces, and title-cases each word.
12
+ *
13
+ * @example deriveName('fix/login-bug') → "Login Bug"
14
+ * @example deriveName('feat/user-auth') → "User Auth"
15
+ * @example deriveName('my-cool-feature') → "My Cool Feature"
16
+ * @example deriveName('feat/auth/login-bug') → "Auth Login Bug"
17
+ * @example deriveName('release/v1.0.0') → "V1.0.0"
18
+ */
19
+ export declare function deriveName(branch: string): string;
20
+ /**
21
+ * Derive a URL-safe slug from a git branch name.
22
+ *
23
+ * Lowercases the full branch name, converts slashes and special characters
24
+ * to hyphens, collapses consecutive hyphens, and trims leading/trailing hyphens.
25
+ *
26
+ * @example deriveSlug('fix/login-bug') → "fix-login-bug"
27
+ * @example deriveSlug('feat/user-auth') → "feat-user-auth"
28
+ * @example deriveSlug('my-cool-feature') → "my-cool-feature"
29
+ * @example deriveSlug('release/v1.0.0') → "release-v1-0-0"
30
+ * @example deriveSlug('feat/auth/login-bug') → "feat-auth-login-bug"
31
+ */
32
+ export declare function deriveSlug(branch: string): string;
33
+ //# sourceMappingURL=branch-name-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-name-utils.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/branch-name-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAsBH;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAwBjD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMjD"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Pure utility functions for deriving feature metadata from git branch names.
3
+ *
4
+ * Used by the AdoptBranchUseCase to generate a human-readable feature name
5
+ * and a URL-safe slug from any git branch name.
6
+ */
7
+ /**
8
+ * Common branch name prefixes that are stripped when deriving a feature name.
9
+ * These are conventional prefixes from gitflow, conventional commits, etc.
10
+ */
11
+ const KNOWN_PREFIXES = [
12
+ 'feat/',
13
+ 'fix/',
14
+ 'chore/',
15
+ 'refactor/',
16
+ 'docs/',
17
+ 'test/',
18
+ 'ci/',
19
+ 'build/',
20
+ 'perf/',
21
+ 'style/',
22
+ 'revert/',
23
+ 'hotfix/',
24
+ 'release/',
25
+ ];
26
+ /**
27
+ * Derive a human-readable feature name from a git branch name.
28
+ *
29
+ * Strips known prefixes (feat/, fix/, etc.), replaces hyphens and underscores
30
+ * with spaces, and title-cases each word.
31
+ *
32
+ * @example deriveName('fix/login-bug') → "Login Bug"
33
+ * @example deriveName('feat/user-auth') → "User Auth"
34
+ * @example deriveName('my-cool-feature') → "My Cool Feature"
35
+ * @example deriveName('feat/auth/login-bug') → "Auth Login Bug"
36
+ * @example deriveName('release/v1.0.0') → "V1.0.0"
37
+ */
38
+ export function deriveName(branch) {
39
+ let remaining = branch;
40
+ // Strip known prefix (only the first matching one)
41
+ for (const prefix of KNOWN_PREFIXES) {
42
+ if (remaining.startsWith(prefix)) {
43
+ remaining = remaining.slice(prefix.length);
44
+ break;
45
+ }
46
+ }
47
+ // Replace slashes, hyphens, and underscores with spaces
48
+ const words = remaining
49
+ .replace(/[/_-]+/g, ' ')
50
+ .trim()
51
+ .split(/\s+/)
52
+ .filter((w) => w.length > 0);
53
+ if (words.length === 0) {
54
+ return branch;
55
+ }
56
+ // Title-case each word
57
+ return words.map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(' ');
58
+ }
59
+ /**
60
+ * Derive a URL-safe slug from a git branch name.
61
+ *
62
+ * Lowercases the full branch name, converts slashes and special characters
63
+ * to hyphens, collapses consecutive hyphens, and trims leading/trailing hyphens.
64
+ *
65
+ * @example deriveSlug('fix/login-bug') → "fix-login-bug"
66
+ * @example deriveSlug('feat/user-auth') → "feat-user-auth"
67
+ * @example deriveSlug('my-cool-feature') → "my-cool-feature"
68
+ * @example deriveSlug('release/v1.0.0') → "release-v1-0-0"
69
+ * @example deriveSlug('feat/auth/login-bug') → "feat-auth-login-bug"
70
+ */
71
+ export function deriveSlug(branch) {
72
+ return branch
73
+ .toLowerCase()
74
+ .replace(/[^a-z0-9-]/g, '-') // Replace non-alphanumeric chars (except hyphens) with hyphens
75
+ .replace(/-+/g, '-') // Collapse consecutive hyphens
76
+ .replace(/^-+|-+$/g, ''); // Trim leading/trailing hyphens
77
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"settings-defaults.factory.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/domain/factories/settings-defaults.factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,QAAQ,EAUT,MAAM,qBAAqB,CAAC;AA6C7B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,IAAI,QAAQ,CA+EhD"}
1
+ {"version":3,"file":"settings-defaults.factory.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/domain/factories/settings-defaults.factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,QAAQ,EAUT,MAAM,qBAAqB,CAAC;AA6C7B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,IAAI,QAAQ,CAgFhD"}
@@ -122,6 +122,7 @@ export function createDefaultSettings() {
122
122
  skills: false,
123
123
  envDeploy: true,
124
124
  debug: false,
125
+ adoptBranch: false,
125
126
  };
126
127
  return {
127
128
  id: globalThis.crypto.randomUUID(),
@@ -530,6 +530,10 @@ export type FeatureFlags = {
530
530
  * Enable debug UI elements and verbose client-side logging
531
531
  */
532
532
  debug: boolean;
533
+ /**
534
+ * Enable adopt branch feature to import existing branches as tracked features
535
+ */
536
+ adoptBranch: boolean;
533
537
  };
534
538
  /**
535
539
  * Global Shep platform settings (singleton)