@shepai/cli 1.124.0-pr396.2dd2ae6 → 1.124.0-pr402.06ada70

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 (287) hide show
  1. package/dist/packages/core/src/application/ports/output/services/deployment-service.interface.d.ts +13 -2
  2. package/dist/packages/core/src/application/ports/output/services/deployment-service.interface.d.ts.map +1 -1
  3. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +5 -68
  4. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
  5. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.js +4 -6
  6. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  7. package/dist/packages/core/src/infrastructure/di/container.js +2 -15
  8. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/040-create-dev-servers-table.d.ts +21 -0
  9. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/040-create-dev-servers-table.d.ts.map +1 -0
  10. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/040-create-dev-servers-table.js +32 -0
  11. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.d.ts.map +1 -1
  12. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.js +9 -0
  13. package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.d.ts +24 -14
  14. package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.d.ts.map +1 -1
  15. package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.js +203 -31
  16. package/dist/packages/core/src/infrastructure/services/deployment/parse-port.d.ts +0 -6
  17. package/dist/packages/core/src/infrastructure/services/deployment/parse-port.d.ts.map +1 -1
  18. package/dist/packages/core/src/infrastructure/services/deployment/parse-port.js +6 -1
  19. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +0 -6
  20. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
  21. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +7 -127
  22. package/dist/src/presentation/web/app/actions/deploy-feature.js +1 -1
  23. package/dist/src/presentation/web/app/actions/deploy-repository.js +1 -1
  24. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  25. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +1 -2
  26. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.d.ts.map +1 -1
  27. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.js +4 -4
  28. package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.d.ts +0 -4
  29. package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.d.ts.map +1 -1
  30. package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.js +1 -32
  31. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +1 -4
  32. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -1
  33. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +2 -2
  34. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts +1 -4
  35. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts.map +1 -1
  36. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +3 -8
  37. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts +0 -6
  38. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts.map +1 -1
  39. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.js +0 -30
  40. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.d.ts.map +1 -1
  41. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.js +0 -3
  42. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.d.ts.map +1 -1
  43. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.js +3 -3
  44. package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
  45. package/dist/src/presentation/web/components/common/repository-node/repository-node.js +8 -5
  46. package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.d.ts +0 -4
  47. package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.d.ts.map +1 -1
  48. package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.js +0 -11
  49. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  50. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +12 -3
  51. package/dist/src/presentation/web/components/features/settings/notification-settings-section.d.ts.map +1 -1
  52. package/dist/src/presentation/web/components/features/settings/notification-settings-section.js +4 -8
  53. package/dist/src/presentation/web/components/features/settings/notification-settings-section.stories.js +3 -3
  54. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  55. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +12 -37
  56. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
  57. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +2 -3
  58. package/dist/src/presentation/web/hooks/use-deploy-action.d.ts.map +1 -1
  59. package/dist/src/presentation/web/hooks/use-deploy-action.js +69 -10
  60. package/dist/src/presentation/web/lib/layout-with-dagre.js +3 -3
  61. package/dist/tsconfig.build.tsbuildinfo +1 -1
  62. package/package.json +1 -1
  63. package/web/.next/BUILD_ID +1 -1
  64. package/web/.next/build-manifest.json +2 -2
  65. package/web/.next/fallback-build-manifest.json +2 -2
  66. package/web/.next/prerender-manifest.json +3 -3
  67. package/web/.next/required-server-files.js +1 -1
  68. package/web/.next/required-server-files.json +1 -1
  69. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +48 -63
  70. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +2 -2
  71. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  72. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  73. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +60 -90
  74. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -2
  75. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  76. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  77. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +60 -90
  78. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -2
  79. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  80. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  81. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +44 -59
  82. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +2 -2
  83. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  84. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  85. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +48 -63
  86. package/web/.next/server/app/(dashboard)/create/page.js +2 -2
  87. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  88. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  89. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +60 -90
  90. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +2 -2
  91. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  92. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  93. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +60 -90
  94. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -2
  95. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  96. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  97. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +44 -59
  98. package/web/.next/server/app/(dashboard)/page.js +2 -2
  99. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  100. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  101. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +44 -59
  102. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +2 -2
  103. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  104. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  105. package/web/.next/server/app/_global-error.html +2 -2
  106. package/web/.next/server/app/_global-error.rsc +1 -1
  107. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  108. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  109. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  110. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  111. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  112. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  113. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  114. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  115. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  116. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  117. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  118. package/web/.next/server/app/settings/page/server-reference-manifest.json +6 -6
  119. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  120. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  121. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  122. package/web/.next/server/app/skills/page.js +1 -2
  123. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  124. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  125. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  126. package/web/.next/server/app/tools/page.js +1 -2
  127. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  128. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  129. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  130. package/web/.next/server/app/version/page.js.nft.json +1 -1
  131. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  132. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  133. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  134. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  135. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  136. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  137. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_fdfbf5cc.js +3 -0
  138. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_fdfbf5cc.js.map +1 -0
  139. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_d8fa0b5f.js +3 -0
  140. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_d8fa0b5f.js.map +1 -0
  141. package/web/.next/server/chunks/ssr/[root-of-the-server]__06fef644._.js +1 -1
  142. package/web/.next/server/chunks/ssr/[root-of-the-server]__248b9fc3._.js +3 -0
  143. package/web/.next/server/chunks/ssr/[root-of-the-server]__248b9fc3._.js.map +1 -0
  144. package/web/.next/server/chunks/ssr/[root-of-the-server]__357de47c._.js +4 -0
  145. package/web/.next/server/chunks/ssr/[root-of-the-server]__357de47c._.js.map +1 -0
  146. package/web/.next/server/chunks/ssr/[root-of-the-server]__56ecbe40._.js +3 -0
  147. package/web/.next/server/chunks/ssr/[root-of-the-server]__56ecbe40._.js.map +1 -0
  148. package/web/.next/server/chunks/ssr/[root-of-the-server]__67fe07fe._.js +4 -0
  149. package/web/.next/server/chunks/ssr/[root-of-the-server]__67fe07fe._.js.map +1 -0
  150. package/web/.next/server/chunks/ssr/[root-of-the-server]__68c2d48e._.js +3 -0
  151. package/web/.next/server/chunks/ssr/[root-of-the-server]__68c2d48e._.js.map +1 -0
  152. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  153. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
  154. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +2 -2
  155. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -1
  156. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  157. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
  158. package/web/.next/server/chunks/ssr/[root-of-the-server]__8c553503._.js +2 -2
  159. package/web/.next/server/chunks/ssr/[root-of-the-server]__a50a7e39._.js +4 -0
  160. package/web/.next/server/chunks/ssr/[root-of-the-server]__a50a7e39._.js.map +1 -0
  161. package/web/.next/server/chunks/ssr/[root-of-the-server]__dfc367f2._.js +3 -0
  162. package/web/.next/server/chunks/ssr/{[root-of-the-server]__7a715c73._.js.map → [root-of-the-server]__dfc367f2._.js.map} +1 -1
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__e7f61cc6._.js +3 -0
  164. package/web/.next/server/chunks/ssr/{[root-of-the-server]__a32640a5._.js.map → [root-of-the-server]__e7f61cc6._.js.map} +1 -1
  165. package/web/.next/server/chunks/ssr/[root-of-the-server]__fe48d2dc._.js +3 -0
  166. package/web/.next/server/chunks/ssr/[root-of-the-server]__fe48d2dc._.js.map +1 -0
  167. package/web/.next/server/chunks/ssr/_2f6f48b8._.js +1 -1
  168. package/web/.next/server/chunks/ssr/_2f6f48b8._.js.map +1 -1
  169. package/web/.next/server/chunks/ssr/_7dca1882._.js +3 -0
  170. package/web/.next/server/chunks/ssr/_7dca1882._.js.map +1 -0
  171. package/web/.next/server/chunks/ssr/{_0e506641._.js → _918887c5._.js} +2 -2
  172. package/web/.next/server/chunks/ssr/_918887c5._.js.map +1 -0
  173. package/web/.next/server/chunks/ssr/_a2eff93a._.js +3 -0
  174. package/web/.next/server/chunks/ssr/_a2eff93a._.js.map +1 -0
  175. package/web/.next/server/chunks/ssr/{_1bb131c4._.js → _d4b20e29._.js} +2 -2
  176. package/web/.next/server/chunks/ssr/_d4b20e29._.js.map +1 -0
  177. package/web/.next/server/chunks/ssr/{_e2638d5f._.js → _d7f927ec._.js} +2 -2
  178. package/web/.next/server/chunks/ssr/{_e2638d5f._.js.map → _d7f927ec._.js.map} +1 -1
  179. package/web/.next/server/chunks/ssr/_e9703421._.js +1 -1
  180. package/web/.next/server/chunks/ssr/_e9703421._.js.map +1 -1
  181. package/web/.next/server/chunks/ssr/_f39a1adb._.js +3 -0
  182. package/web/.next/server/chunks/ssr/{_135edb9c._.js.map → _f39a1adb._.js.map} +1 -1
  183. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  184. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  185. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  186. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
  187. package/web/.next/server/chunks/ssr/src_presentation_web_073917db._.js +3 -0
  188. package/web/.next/server/chunks/ssr/src_presentation_web_073917db._.js.map +1 -0
  189. package/web/.next/server/chunks/ssr/src_presentation_web_9db47db7._.js +5 -0
  190. package/web/.next/server/chunks/ssr/{src_presentation_web_e4e3c09b._.js.map → src_presentation_web_9db47db7._.js.map} +1 -1
  191. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f66cd328.js +3 -0
  192. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f66cd328.js.map +1 -0
  193. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  194. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  195. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  196. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +1 -1
  197. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  198. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js.map +1 -1
  199. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  200. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  201. package/web/.next/server/chunks/ssr/src_presentation_web_ede4a227._.js +5 -0
  202. package/web/.next/server/chunks/ssr/{src_presentation_web_d1d40a09._.js.map → src_presentation_web_ede4a227._.js.map} +1 -1
  203. package/web/.next/server/pages/500.html +2 -2
  204. package/web/.next/server/server-reference-manifest.js +1 -1
  205. package/web/.next/server/server-reference-manifest.json +285 -392
  206. package/web/.next/static/chunks/01ba448cf76c6014.js +1 -0
  207. package/web/.next/static/chunks/{80f9e0cade7d717b.js → 04f47be1504521fc.js} +1 -1
  208. package/web/.next/static/chunks/0a514695ca5fabc3.js +2 -0
  209. package/web/.next/static/chunks/1be7ac7a24009333.css +1 -0
  210. package/web/.next/static/chunks/28f1dddebda55af2.js +1 -0
  211. package/web/.next/static/chunks/2ee4a1a94f6001ea.js +1 -0
  212. package/web/.next/static/chunks/{8b87caa5e8e72539.js → 33d7958650742d27.js} +1 -1
  213. package/web/.next/static/chunks/37ada233462bcaec.js +11 -0
  214. package/web/.next/static/chunks/469f49ae02e8a1f6.js +1 -0
  215. package/web/.next/static/chunks/54481c140fd8761a.js +1 -0
  216. package/web/.next/static/chunks/{0a25d970e4abd189.js → b609272225ffb749.js} +1 -1
  217. package/web/.next/static/chunks/b70dd4985a814b27.js +1 -0
  218. package/web/.next/static/chunks/e651e1ec05e5a806.js +1 -0
  219. package/web/.next/static/chunks/eb9841ec4d80af01.js +1 -0
  220. package/web/.next/static/chunks/f2c96db74a878fa1.js +1 -0
  221. package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.d.ts +0 -28
  222. package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.d.ts.map +0 -1
  223. package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.js +0 -81
  224. package/dist/packages/core/src/application/use-cases/repositories/sync-repository-main.use-case.d.ts +0 -16
  225. package/dist/packages/core/src/application/use-cases/repositories/sync-repository-main.use-case.d.ts.map +0 -1
  226. package/dist/packages/core/src/application/use-cases/repositories/sync-repository-main.use-case.js +0 -43
  227. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.d.ts +0 -35
  228. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.d.ts.map +0 -1
  229. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.js +0 -66
  230. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.d.ts +0 -42
  231. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.d.ts.map +0 -1
  232. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.js +0 -169
  233. package/dist/src/presentation/web/app/actions/rebase-feature.d.ts +0 -5
  234. package/dist/src/presentation/web/app/actions/rebase-feature.d.ts.map +0 -1
  235. package/dist/src/presentation/web/app/actions/rebase-feature.js +0 -16
  236. package/dist/src/presentation/web/app/actions/sync-repository.d.ts +0 -5
  237. package/dist/src/presentation/web/app/actions/sync-repository.d.ts.map +0 -1
  238. package/dist/src/presentation/web/app/actions/sync-repository.js +0 -16
  239. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_9efdd752.js +0 -3
  240. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_9efdd752.js.map +0 -1
  241. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_6ce19942.js +0 -3
  242. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_6ce19942.js.map +0 -1
  243. package/web/.next/server/chunks/ssr/[root-of-the-server]__14664e9b._.js +0 -4
  244. package/web/.next/server/chunks/ssr/[root-of-the-server]__14664e9b._.js.map +0 -1
  245. package/web/.next/server/chunks/ssr/[root-of-the-server]__16a547fc._.js +0 -3
  246. package/web/.next/server/chunks/ssr/[root-of-the-server]__16a547fc._.js.map +0 -1
  247. package/web/.next/server/chunks/ssr/[root-of-the-server]__4993a47c._.js +0 -3
  248. package/web/.next/server/chunks/ssr/[root-of-the-server]__4993a47c._.js.map +0 -1
  249. package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js +0 -3
  250. package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js.map +0 -1
  251. package/web/.next/server/chunks/ssr/[root-of-the-server]__7a715c73._.js +0 -3
  252. package/web/.next/server/chunks/ssr/[root-of-the-server]__a32640a5._.js +0 -3
  253. package/web/.next/server/chunks/ssr/[root-of-the-server]__a7de2711._.js +0 -4
  254. package/web/.next/server/chunks/ssr/[root-of-the-server]__a7de2711._.js.map +0 -1
  255. package/web/.next/server/chunks/ssr/[root-of-the-server]__c94704d6._.js +0 -3
  256. package/web/.next/server/chunks/ssr/[root-of-the-server]__c94704d6._.js.map +0 -1
  257. package/web/.next/server/chunks/ssr/_0e506641._.js.map +0 -1
  258. package/web/.next/server/chunks/ssr/_135edb9c._.js +0 -3
  259. package/web/.next/server/chunks/ssr/_1bb131c4._.js.map +0 -1
  260. package/web/.next/server/chunks/ssr/_966c4532._.js +0 -3
  261. package/web/.next/server/chunks/ssr/_966c4532._.js.map +0 -1
  262. package/web/.next/server/chunks/ssr/_cc77a143._.js +0 -3
  263. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +0 -1
  264. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_883074bc.js +0 -3
  265. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_883074bc.js.map +0 -1
  266. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +0 -3
  267. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +0 -1
  268. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +0 -3
  269. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +0 -1
  270. package/web/.next/server/chunks/ssr/src_presentation_web_d1d40a09._.js +0 -5
  271. package/web/.next/server/chunks/ssr/src_presentation_web_e4e3c09b._.js +0 -5
  272. package/web/.next/server/chunks/ssr/src_presentation_web_f6b57368._.js +0 -3
  273. package/web/.next/server/chunks/ssr/src_presentation_web_f6b57368._.js.map +0 -1
  274. package/web/.next/static/chunks/11fbcb908d07e234.js +0 -1
  275. package/web/.next/static/chunks/3925626b99dcd57a.css +0 -1
  276. package/web/.next/static/chunks/4b51f8f4e49665b8.js +0 -1
  277. package/web/.next/static/chunks/513b719e49ca003a.js +0 -11
  278. package/web/.next/static/chunks/77304c4f9c5bb158.js +0 -1
  279. package/web/.next/static/chunks/9b7dbb75030aac3e.js +0 -1
  280. package/web/.next/static/chunks/ac7251026c1e2cdf.js +0 -1
  281. package/web/.next/static/chunks/cd008e10baaeae9a.js +0 -1
  282. package/web/.next/static/chunks/d71ce7044ed5a85a.js +0 -2
  283. package/web/.next/static/chunks/db8d50abcf46d8b3.js +0 -1
  284. package/web/.next/static/chunks/e2ef95d904c360f3.js +0 -1
  285. /package/web/.next/static/{MpP2wa-zjPqcZxmpuDBjj → FXJ9jqgleHlSoq4JKo32G}/_buildManifest.js +0 -0
  286. /package/web/.next/static/{MpP2wa-zjPqcZxmpuDBjj → FXJ9jqgleHlSoq4JKo32G}/_clientMiddlewareManifest.json +0 -0
  287. /package/web/.next/static/{MpP2wa-zjPqcZxmpuDBjj → FXJ9jqgleHlSoq4JKo32G}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,93752,e=>{"use strict";let t=(0,e.i(3645).default)("code",[["path",{d:"m16 18 6-6-6-6",key:"eg8j8"}],["path",{d:"m8 6-6 6 6 6",key:"ppft3o"}]]);e.s(["default",()=>t])},95230,e=>{"use strict";let t=(0,e.i(3645).default)("download",[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]]);e.s(["default",()=>t])},16868,48306,80436,28267,86254,50032,42076,e=>{"use strict";var t=e.i(3645);let r=(0,t.default)("paperclip",[["path",{d:"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551",key:"1miecu"}]]);e.s(["PaperclipIcon",()=>r],16868);var a=e.i(20314),s=e.i(31777);function o({className:e,...t}){return(0,a.jsx)("textarea",{"data-slot":"textarea",className:(0,s.cn)("placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input field-sizing-content min-h-[80px] w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",e),...t})}e.s(["Textarea",()=>o],48306);var i=e.i(60253),n=e.i(15506),n=n,l=e.i(95230);e.s(["DownloadIcon",()=>l.default],80436);var l=l,d=e.i(2287),c=e.i(1693);e.s(["VisuallyHidden",0,c],28267);var c=c;let p=(0,t.default)("file",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}]]);var u=e.i(16298),u=u;let h=(0,t.default)("image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]);var m=e.i(93752),m=m;e.i(35364);let x=new Set([".png",".jpg",".jpeg",".gif",".svg",".webp",".ico",".bmp"]),f=new Set([".ts",".tsx",".js",".jsx",".json",".yaml",".yml",".xml",".html",".css",".md"]);function g(e){if(0===e)return"0 B";let t=Math.floor(Math.log(e)/Math.log(1024));return`${(e/Math.pow(1024,t)).toFixed(+(0!==t))} ${["B","KB","MB","GB"][t]}`}let b=new Set([".png",".jpg",".jpeg",".gif",".svg",".webp",".ico",".bmp"]);function v(e,t){let r=new URLSearchParams({path:e,mimeType:t});return`/api/attachments/preview?${r.toString()}`}function j({name:e,size:t,mimeType:r,path:o,onRemove:j,loading:w=!1,disabled:y=!1}){let C,k,N=(C=e.lastIndexOf("."))>=0?e.slice(C).toLowerCase():"",P=x.has(N)?h:".pdf"===N?u.default:f.has(N)?m.default:p,T=".pdf"===N?"bg-red-50 text-red-600":x.has(N)?"bg-blue-50 text-blue-600":f.has(N)?"bg-emerald-50 text-emerald-600":"bg-gray-50 text-gray-600",S=(k=e.lastIndexOf("."))>=0&&b.has(e.slice(k).toLowerCase());return w?(0,a.jsx)("div",{className:"flex h-12 w-12 items-center justify-center rounded-md border",children:(0,a.jsx)(n.default,{className:"text-muted-foreground h-5 w-5 animate-spin"})}):S?(0,a.jsxs)(d.Dialog,{children:[(0,a.jsxs)("div",{className:"group relative",children:[(0,a.jsx)(d.DialogTrigger,{asChild:!0,children:(0,a.jsx)("img",{src:v(o,r),alt:e,title:e,className:"h-12 w-12 cursor-pointer rounded-md border object-cover transition-opacity hover:opacity-80"})}),!y&&(0,a.jsx)("button",{type:"button",onClick:j,className:"absolute -top-1.5 -right-1.5 hidden h-5 w-5 cursor-pointer items-center justify-center rounded-full bg-black/70 text-white group-hover:flex","aria-label":`Remove ${e}`,children:(0,a.jsx)(i.X,{className:"h-3 w-3"})})]}),(0,a.jsxs)(d.DialogContent,{className:"max-w-3xl gap-0 overflow-hidden border-0 p-0 [&>button:last-child]:!cursor-pointer [&>button:last-child]:!rounded-full [&>button:last-child]:!bg-black/70 [&>button:last-child]:!p-1.5 [&>button:last-child]:!text-white [&>button:last-child]:!opacity-100 [&>button:last-child]:!shadow-lg [&>button:last-child]:!backdrop-blur-md [&>button:last-child]:hover:!bg-black/90",children:[(0,a.jsx)(c.Root,{children:(0,a.jsxs)(d.DialogTitle,{children:["Preview: ",e]})}),(0,a.jsx)("div",{className:"relative bg-black/90",children:(0,a.jsx)("img",{src:v(o,r),alt:e,className:"h-auto max-h-[70vh] w-full object-contain"})}),(0,a.jsxs)("div",{className:"bg-background flex items-center gap-3 px-4 py-3",children:[(0,a.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col",children:[(0,a.jsx)("span",{className:"truncate text-sm font-medium",children:e}),(0,a.jsx)("span",{className:"text-muted-foreground text-xs",children:g(t)})]}),(0,a.jsx)("a",{href:v(o,r),download:e,className:"text-muted-foreground hover:text-foreground shrink-0 cursor-pointer rounded p-1.5 transition-colors","aria-label":`Download ${e}`,children:(0,a.jsx)(l.default,{className:"h-4 w-4"})})]})]})]}):(0,a.jsxs)("div",{className:"group relative flex items-center gap-2 rounded-full border py-1 pr-3 pl-2",children:[(0,a.jsx)("div",{className:(0,s.cn)("flex h-6 w-6 shrink-0 items-center justify-center rounded-full",T),children:(0,a.jsx)(P,{className:"h-3 w-3"})}),(0,a.jsx)("span",{className:"max-w-[120px] truncate text-sm",children:e}),(0,a.jsx)("span",{className:"text-muted-foreground text-xs",children:g(t)}),!y&&(0,a.jsx)("button",{type:"button",onClick:j,className:"absolute -top-1.5 -right-1.5 hidden h-5 w-5 cursor-pointer items-center justify-center rounded-full bg-black/70 text-white group-hover:flex","aria-label":`Remove ${e}`,children:(0,a.jsx)(i.X,{className:"h-3 w-3"})})]})}async function w(){let e=await fetch("/api/dialog/pick-files",{method:"POST"});if(!e.ok)throw Error("Failed to open file dialog");let t=await e.json();return t.cancelled?null:t.files}e.s(["AttachmentChip",()=>j],86254),e.s([],50032),e.s(["pickFiles",()=>w],42076)},90382,e=>{"use strict";var t=e.i(20314),r=e.i(79054),a=e.i(91967),s=e.i(5978),o=e.i(22528),i=e.i(53532),n=e.i(41687),l=e.i(56720),d=e.i(13123),c=e.i(52740),p=e.i(39979),u=e.i(85995),h=e.i(87620),m=e.i(86874),x=e.i(36589),f=e.i(73772),g=e.i(13044),b="Popover",[v,j]=(0,o.createContextScope)(b,[c.createPopperScope]),w=(0,c.createPopperScope)(),[y,C]=v(b),k=e=>{let{__scopePopover:a,children:s,open:o,defaultOpen:i,onOpenChange:n,modal:l=!1}=e,p=w(a),u=r.useRef(null),[h,m]=r.useState(!1),[f,g]=(0,x.useControllableState)({prop:o,defaultProp:i??!1,onChange:n,caller:b});return(0,t.jsx)(c.Root,{...p,children:(0,t.jsx)(y,{scope:a,contentId:(0,d.useId)(),triggerRef:u,open:f,onOpenChange:g,onOpenToggle:r.useCallback(()=>g(e=>!e),[g]),hasCustomAnchor:h,onCustomAnchorAdd:r.useCallback(()=>m(!0),[]),onCustomAnchorRemove:r.useCallback(()=>m(!1),[]),modal:l,children:s})})};k.displayName=b;var N="PopoverAnchor",P=r.forwardRef((e,a)=>{let{__scopePopover:s,...o}=e,i=C(N,s),n=w(s),{onCustomAnchorAdd:l,onCustomAnchorRemove:d}=i;return r.useEffect(()=>(l(),()=>d()),[l,d]),(0,t.jsx)(c.Anchor,{...n,...o,ref:a})});P.displayName=N;var T="PopoverTrigger",S=r.forwardRef((e,r)=>{let{__scopePopover:o,...i}=e,n=C(T,o),l=w(o),d=(0,s.useComposedRefs)(r,n.triggerRef),p=(0,t.jsx)(h.Primitive.button,{type:"button","aria-haspopup":"dialog","aria-expanded":n.open,"aria-controls":n.contentId,"data-state":q(n.open),...i,ref:d,onClick:(0,a.composeEventHandlers)(e.onClick,n.onOpenToggle)});return n.hasCustomAnchor?p:(0,t.jsx)(c.Anchor,{asChild:!0,...l,children:p})});S.displayName=T;var R="PopoverPortal",[A,E]=v(R,{forceMount:void 0}),F=e=>{let{__scopePopover:r,forceMount:a,children:s,container:o}=e,i=C(R,r);return(0,t.jsx)(A,{scope:r,forceMount:a,children:(0,t.jsx)(u.Presence,{present:a||i.open,children:(0,t.jsx)(p.Portal,{asChild:!0,container:o,children:s})})})};F.displayName=R;var D="PopoverContent",O=r.forwardRef((e,r)=>{let a=E(D,e.__scopePopover),{forceMount:s=a.forceMount,...o}=e,i=C(D,e.__scopePopover);return(0,t.jsx)(u.Presence,{present:s||i.open,children:i.modal?(0,t.jsx)(z,{...o,ref:r}):(0,t.jsx)(L,{...o,ref:r})})});O.displayName=D;var I=(0,m.createSlot)("PopoverContent.RemoveScroll"),z=r.forwardRef((e,o)=>{let i=C(D,e.__scopePopover),n=r.useRef(null),l=(0,s.useComposedRefs)(o,n),d=r.useRef(!1);return r.useEffect(()=>{let e=n.current;if(e)return(0,f.hideOthers)(e)},[]),(0,t.jsx)(g.RemoveScroll,{as:I,allowPinchZoom:!0,children:(0,t.jsx)(M,{...e,ref:l,trapFocus:i.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:(0,a.composeEventHandlers)(e.onCloseAutoFocus,e=>{e.preventDefault(),d.current||i.triggerRef.current?.focus()}),onPointerDownOutside:(0,a.composeEventHandlers)(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,r=0===t.button&&!0===t.ctrlKey;d.current=2===t.button||r},{checkForDefaultPrevented:!1}),onFocusOutside:(0,a.composeEventHandlers)(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1})})})}),L=r.forwardRef((e,a)=>{let s=C(D,e.__scopePopover),o=r.useRef(!1),i=r.useRef(!1);return(0,t.jsx)(M,{...e,ref:a,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(o.current||s.triggerRef.current?.focus(),t.preventDefault()),o.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(o.current=!0,"pointerdown"===t.detail.originalEvent.type&&(i.current=!0));let r=t.target;s.triggerRef.current?.contains(r)&&t.preventDefault(),"focusin"===t.detail.originalEvent.type&&i.current&&t.preventDefault()}})}),M=r.forwardRef((e,r)=>{let{__scopePopover:a,trapFocus:s,onOpenAutoFocus:o,onCloseAutoFocus:d,disableOutsidePointerEvents:p,onEscapeKeyDown:u,onPointerDownOutside:h,onFocusOutside:m,onInteractOutside:x,...f}=e,g=C(D,a),b=w(a);return(0,n.useFocusGuards)(),(0,t.jsx)(l.FocusScope,{asChild:!0,loop:!0,trapped:s,onMountAutoFocus:o,onUnmountAutoFocus:d,children:(0,t.jsx)(i.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:p,onInteractOutside:x,onEscapeKeyDown:u,onPointerDownOutside:h,onFocusOutside:m,onDismiss:()=>g.onOpenChange(!1),children:(0,t.jsx)(c.Content,{"data-state":q(g.open),role:"dialog",id:g.contentId,...b,...f,ref:r,style:{...f.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})}),U="PopoverClose",B=r.forwardRef((e,r)=>{let{__scopePopover:s,...o}=e,i=C(U,s);return(0,t.jsx)(h.Primitive.button,{type:"button",...o,ref:r,onClick:(0,a.composeEventHandlers)(e.onClick,()=>i.onOpenChange(!1))})});B.displayName=U;var $=r.forwardRef((e,r)=>{let{__scopePopover:a,...s}=e,o=w(a);return(0,t.jsx)(c.Arrow,{...o,...s,ref:r})});function q(e){return e?"open":"closed"}$.displayName="PopoverArrow",e.s(["Anchor",()=>P,"Arrow",()=>$,"Close",()=>B,"Content",()=>O,"Popover",()=>k,"PopoverAnchor",()=>P,"PopoverArrow",()=>$,"PopoverClose",()=>B,"PopoverContent",()=>O,"PopoverPortal",()=>F,"PopoverTrigger",()=>S,"Portal",()=>F,"Root",()=>k,"Trigger",()=>S,"createPopoverScope",()=>j],89920);var H=e.i(89920),H=H,G=e.i(31777);let _=H.Root,K=H.Trigger;H.Anchor;let W=r.forwardRef(({className:e,align:r="center",sideOffset:a=4,...s},o)=>(0,t.jsx)(H.Portal,{children:(0,t.jsx)(H.Content,{ref:o,align:r,sideOffset:a,className:(0,G.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 rounded-md border p-4 shadow-md outline-none",e),...s})}));W.displayName=H.Content.displayName,e.s(["Popover",()=>_,"PopoverContent",()=>W,"PopoverTrigger",()=>K],90382)},51911,e=>{"use strict";var t=e.i(20314),r=e.i(79054),a=e.i(91967),s=e.i(5978),o=e.i(22528),i=e.i(36589),n=e.i(23405),l=e.i(77624),d=e.i(87620),c="Switch",[p,u]=(0,o.createContextScope)(c),[h,m]=p(c),x=r.forwardRef((e,o)=>{let{__scopeSwitch:n,name:l,checked:p,defaultChecked:u,required:m,disabled:x,value:f="on",onCheckedChange:g,form:j,...w}=e,[y,C]=r.useState(null),k=(0,s.useComposedRefs)(o,e=>C(e)),N=r.useRef(!1),P=!y||j||!!y.closest("form"),[T,S]=(0,i.useControllableState)({prop:p,defaultProp:u??!1,onChange:g,caller:c});return(0,t.jsxs)(h,{scope:n,checked:T,disabled:x,children:[(0,t.jsx)(d.Primitive.button,{type:"button",role:"switch","aria-checked":T,"aria-required":m,"data-state":v(T),"data-disabled":x?"":void 0,disabled:x,value:f,...w,ref:k,onClick:(0,a.composeEventHandlers)(e.onClick,e=>{S(e=>!e),P&&(N.current=e.isPropagationStopped(),N.current||e.stopPropagation())})}),P&&(0,t.jsx)(b,{control:y,bubbles:!N.current,name:l,value:f,checked:T,required:m,disabled:x,form:j,style:{transform:"translateX(-100%)"}})]})});x.displayName=c;var f="SwitchThumb",g=r.forwardRef((e,r)=>{let{__scopeSwitch:a,...s}=e,o=m(f,a);return(0,t.jsx)(d.Primitive.span,{"data-state":v(o.checked),"data-disabled":o.disabled?"":void 0,...s,ref:r})});g.displayName=f;var b=r.forwardRef(({__scopeSwitch:e,control:a,checked:o,bubbles:i=!0,...d},c)=>{let p=r.useRef(null),u=(0,s.useComposedRefs)(p,c),h=(0,n.usePrevious)(o),m=(0,l.useSize)(a);return r.useEffect(()=>{let e=p.current;if(!e)return;let t=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"checked").set;if(h!==o&&t){let r=new Event("click",{bubbles:i});t.call(e,o),e.dispatchEvent(r)}},[h,o,i]),(0,t.jsx)("input",{type:"checkbox","aria-hidden":!0,defaultChecked:o,...d,tabIndex:-1,ref:u,style:{...d.style,...m,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})});function v(e){return e?"checked":"unchecked"}b.displayName="SwitchBubbleInput",e.s(["Root",()=>x,"Switch",()=>x,"SwitchThumb",()=>g,"Thumb",()=>g,"createSwitchScope",()=>u],95291);var j=e.i(95291),j=j,w=e.i(31777);function y({className:e,size:r="default",...a}){return(0,t.jsx)(j.Root,{"data-slot":"switch","data-size":r,className:(0,w.cn)("peer group/switch focus-visible:border-ring focus-visible:ring-ring/50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80 inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6",e),...a,children:(0,t.jsx)(j.Thumb,{"data-slot":"switch-thumb",className:(0,w.cn)("bg-background dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0")})})}e.s(["Switch",()=>y],51911)},41413,e=>{"use strict";var t=e.i(20314),r=e.i(79054),a=e.i(23925),s=e.i(11345),o=e.i(76016),i=e.i(66875),n=e.i(47332),l=e.i(86782),d=e.i(29847),c=e.i(35364),p=e.i(90382),u=e.i(31777);function h({initialAgentType:e,initialModel:h,onAgentModelChange:m,disabled:x,className:f,mode:g}){let[b,v]=r.useState(!1),[j,w]=r.useState([]),[y,C]=r.useState(!0),[k,N]=r.useState(e),[P,T]=r.useState(h),[S,R]=r.useState(null),[A,E]=r.useState(0),[F,D]=r.useState(null);r.useEffect(()=>{(0,i.getAllAgentModels)().then(w).finally(()=>C(!1))},[]),r.useEffect(()=>{if(!b){let e=setTimeout(()=>{E(0),D(null)},150);return()=>clearTimeout(e)}},[b]);let O=async(e,t)=>{if(v(!1),e!==k||t!==P){if("override"===g){N(e),T(t),m?.(e,t);return}N(e),T(t),m?.(e,t),R(null);try{let r=await (0,n.updateAgentAndModel)(e,t||null);r.ok||(N(k),T(P),m?.(k,P),R(r.error??"Failed to save"))}catch{N(k),T(P),m?.(k,P),R("Failed to save")}}},I=(0,l.getAgentTypeIcon)(k),z=j.find(e=>e.agentType===k)?.label??k,L=P?(0,d.getModelMeta)(P).displayName||P:null,M=F?j.find(e=>e.agentType===F):null;return(0,t.jsxs)("div",{className:(0,u.cn)("flex flex-col gap-1",f),children:[(0,t.jsxs)(p.Popover,{open:b,onOpenChange:v,children:[(0,t.jsx)(p.PopoverTrigger,{asChild:!0,children:(0,t.jsx)(c.Button,{variant:"outline",role:"combobox","aria-expanded":b,disabled:(x??!1)||y,className:"w-auto cursor-pointer justify-start font-normal hover:border-violet-300 hover:bg-violet-50/50 dark:hover:border-violet-700 dark:hover:bg-violet-950/30",children:(0,t.jsxs)("span",{className:"flex items-center gap-2 truncate",children:[(0,t.jsx)(I,{className:"h-4 w-4 shrink-0"}),y?"Loading…":(0,t.jsxs)("span",{className:"flex items-center gap-1",children:[(0,t.jsx)("span",{className:"text-muted-foreground text-xs",children:z}),L?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{className:"text-muted-foreground/50 text-xs",children:"·"}),(0,t.jsx)("span",{className:"text-xs font-medium",children:L})]}):null]})]})})}),(0,t.jsx)(p.PopoverContent,{className:"w-(--radix-popover-trigger-width) overflow-hidden p-0",align:"start",children:(0,t.jsxs)("div",{className:"flex transition-transform duration-200 ease-in-out",style:{transform:`translateX(${1===A?"-50%":"0%"})`,width:"200%"},children:[(0,t.jsxs)("div",{className:"w-1/2 shrink-0",children:[(0,t.jsx)("div",{className:"text-muted-foreground border-b px-3 py-2 text-xs font-medium",children:"Select agent"}),j.map(e=>{let r=(0,l.getAgentTypeIcon)(e.agentType),s=k===e.agentType,i=e.models.length>0;return(0,t.jsxs)("button",{type:"button",className:(0,u.cn)("flex w-full cursor-pointer items-center gap-2.5 px-3 py-2 text-xs transition-colors","hover:bg-accent hover:text-accent-foreground",s&&"bg-accent/50"),onClick:()=>{i?(D(e.agentType),requestAnimationFrame(()=>{requestAnimationFrame(()=>E(1))})):O(e.agentType,"")},children:[(0,t.jsx)(r,{className:"h-4 w-4 shrink-0"}),(0,t.jsx)("span",{className:"flex-1 text-left",children:e.label}),s&&!i?(0,t.jsx)(a.Check,{className:"text-primary h-3.5 w-3.5 shrink-0"}):null,i?(0,t.jsx)(o.ChevronRight,{className:"text-muted-foreground h-3.5 w-3.5 shrink-0"}):null]},e.agentType)})]}),(0,t.jsx)("div",{className:"w-1/2 shrink-0",children:M?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("button",{type:"button",className:"text-muted-foreground hover:text-foreground flex w-full cursor-pointer items-center gap-1.5 border-b px-3 py-2 text-xs font-medium transition-colors",onClick:()=>{E(0),setTimeout(()=>D(null),220)},children:[(0,t.jsx)(s.ChevronLeft,{className:"h-3.5 w-3.5"}),M.label]}),M.models.map(e=>{let r=k===M.agentType&&P===e.id;return(0,t.jsxs)("button",{type:"button",className:(0,u.cn)("flex w-full cursor-pointer items-center gap-3 px-3 py-2 text-left transition-colors","hover:bg-accent hover:text-accent-foreground",r&&"bg-accent/50"),onClick:()=>O(M.agentType,e.id),children:[(0,t.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col",children:[(0,t.jsx)("span",{className:"text-xs font-medium",children:e.displayName}),(0,t.jsx)("span",{className:"text-muted-foreground text-xs",children:e.description})]}),r?(0,t.jsx)(a.Check,{className:"text-primary h-3.5 w-3.5 shrink-0"}):null]},e.id)})]}):null})]})})]}),!!S&&(0,t.jsx)("p",{className:"text-destructive text-sm",children:S})]})}e.s(["AgentModelPicker",()=>h])},15203,e=>{"use strict";var t=e.i(20314),r=e.i(79054),a=e.i(31406),s=e.i(60112),o=e.i(21023);let i=(0,o.createServerReference)("40883cf0c2818c099302ab65863d67e9a957a0209a",o.callServer,void 0,o.findSourceMapURL,"createFeature");var n=e.i(16868);let l=(0,e.i(3645).default)("chevrons-up-down",[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]]);var d=e.i(97667),c=e.i(53360),p=e.i(55016),u=e.i(91925),h=e.i(83428),m=e.i(31777),x=e.i(8361);e.i(1650);var f=e.i(11495),g=e.i(45811),b=e.i(35364),v=e.i(98127),j=e.i(48306),w=e.i(41957),y=e.i(81846),C=e.i(90382),k=e.i(51911),N=e.i(2828),P=e.i(30153);e.i(50032);var T=e.i(86254),S=e.i(41413),R=e.i(25235),A=e.i(78521),E=e.i(24048),F=e.i(42076);let D=new Set([".png",".jpg",".jpeg",".gif",".webp",".svg",".bmp",".ico",".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".txt",".md",".csv",".json",".yaml",".yml",".xml",".ts",".tsx",".js",".jsx",".py",".rb",".go",".rs",".java",".c",".cpp",".h",".hpp",".cs",".swift",".kt",".html",".css",".scss",".less",".sh",".bash",".zsh",".fish",".toml",".ini",".cfg",".conf",".env",".zip",".tar",".gz",".log"]),O=[{id:"allowPrd",label:"PRD",description:"Auto-approve requirements move to planning."},{id:"allowPlan",label:"Plan",description:"Auto-approve planning move to implementation."},{id:"allowMerge",label:"Merge",description:"Auto-approve merge move to Done."}],I={allowPrd:!1,allowPlan:!1,allowMerge:!1};function z({open:e,onClose:a,onSubmit:s,repositoryPath:o,isSubmitting:i=!1,workflowDefaults:l,features:d,repositories:u,initialParentId:h,currentAgentType:v,currentModel:C,initialDescription:R}){let A=(0,x.useSoundAction)("create"),E=o&&(!u||0===u.length||u.some(e=>e.path===o))?o:"",z=l?.approvalGates??I,U=l?.push??!1,B=l?.openPr??!1,$=l?.ciWatchEnabled!==!1,q=l?.enableEvidence??!1,H=l?.commitEvidence??!1,[G,_]=(0,r.useState)(R??"");(0,r.useEffect)(()=>{R&&_(R)},[R]);let[K,W]=(0,r.useState)([]),[V,X]=(0,r.useState)({...z}),[Y,Z]=(0,r.useState)(U),[J,Q]=(0,r.useState)(B),[ee,et]=(0,r.useState)(l?.ciWatchEnabled!==!1),[er,ea]=(0,r.useState)(q),[es,eo]=(0,r.useState)(H),[ei,en]=(0,r.useState)(void 0),[el,ed]=(0,r.useState)(!1),[ec,ep]=(0,r.useState)(!1),[eu,eh]=(0,r.useState)(void 0),[em,ex]=(0,r.useState)(void 0),[ef,eg]=(0,r.useState)(E||void 0),[eb,ev]=(0,r.useState)(u??[]),[ej,ew]=(0,r.useState)(!1),[ey,eC]=(0,r.useState)(null),[ek,eN]=(0,r.useState)(!1),eP=(0,r.useRef)(crypto.randomUUID()),eT=(0,r.useRef)(0),eS=(0,r.useRef)(null);(0,r.useEffect)(()=>{l&&(X({...l.approvalGates}),Z(l.push),Q(l.openPr),et(!1!==l.ciWatchEnabled),ea(l.enableEvidence),eo(l.commitEvidence))},[l]),(0,r.useEffect)(()=>{ev(u??[])},[u]),(0,r.useEffect)(()=>{e&&h&&en(h)},[e,h]);let eR=(0,r.useCallback)(()=>{_(""),W([]),X({...z}),Z(U),Q(B),et($),ea(q),eo(H),en(void 0),eg(E||void 0),ev(u??[]),ed(!1),ep(!1),eh(void 0),ex(void 0),eC(null),eT.current=0,ew(!1)},[z,U,B,q,$,H,E,u]),eA=""!==G.trim()||K.length>0,{attemptClose:eE}=(0,P.useGuardedDrawerClose)({open:e,isDirty:eA,onClose:a,onReset:eR}),eF=(0,r.useCallback)(async e=>{for(let t of(eC(null),e)){if(t.size>0xa00000)return void eC(`"${t.name}" exceeds 10 MB limit`);let e=function(e){let t=e.lastIndexOf(".");return t>=0?e.slice(t).toLowerCase():""}(t.name);if(e&&!D.has(e))return void eC(`File type "${e}" is not allowed`)}for(let t of e){let e=crypto.randomUUID();W(r=>[...r,{id:e,name:t.name,size:t.size,mimeType:t.type||"application/octet-stream",path:"",loading:!0}]);try{let r=new FormData;r.append("file",t),r.append("sessionId",eP.current);let a=await fetch("/api/attachments/upload",{method:"POST",body:r});if(!a.ok){let t=await a.json().catch(()=>({error:"Upload failed"}));W(t=>t.filter(t=>t.id!==e)),eC(t.error??"Upload failed");return}let s=await a.json();W(t=>t.some(t=>t.id!==e&&t.path===s.path)?t.filter(t=>t.id!==e):t.map(t=>t.id===e?{...s,id:e,loading:!1}:t))}catch{W(t=>t.filter(t=>t.id!==e)),eC("Upload failed")}}},[]),eD=(0,r.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),eT.current+=1,1===eT.current&&ew(!0)},[]),eO=(0,r.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),eT.current-=1,0===eT.current&&ew(!1)},[]),eI=(0,r.useCallback)(e=>{e.preventDefault(),e.stopPropagation()},[]),ez=(0,r.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),eT.current=0,ew(!1);let t=Array.from(e.dataTransfer.files);t.length>0&&eF(t)},[eF]),eL=(0,r.useCallback)(e=>{let t=e.clipboardData?.items;if(!t)return;let r=[];for(let e of Array.from(t))if("file"===e.kind){let t=e.getAsFile();t&&r.push(t)}r.length>0&&(e.preventDefault(),eF(r))},[eF]),eM=(0,r.useCallback)(e=>{if(e.preventDefault(),!G.trim())return;let t=ef??E;t&&(A.play(),s({description:G.trim(),attachments:K.filter(e=>!e.loading),repositoryPath:t,approvalGates:{allowPrd:V.allowPrd??!1,allowPlan:V.allowPlan??!1,allowMerge:V.allowMerge??!1},push:Y||J,openPr:J,ciWatchEnabled:ee,enableEvidence:er,commitEvidence:es,fast:el,...ec?{pending:ec}:{},...eu?{agentType:eu}:{},...em?{model:em}:{},...ei?{parentId:ei}:{},sessionId:eP.current}),eR())},[G,K,V,ef,E,s,Y,J,er,ee,es,el,ec,eu,em,ei,A,eR]),eU=(0,r.useCallback)(async()=>{try{let e=await (0,F.pickFiles)();if(!e)return;for(let t of e){let e=crypto.randomUUID();W(r=>[...r,{id:e,name:t.name,size:t.size,mimeType:"application/octet-stream",path:"",loading:!0}]);try{let r=await fetch("/api/attachments/upload-from-path",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:t.path,sessionId:eP.current})});if(!r.ok){let t=await r.json().catch(()=>({error:"Upload failed"}));W(t=>t.filter(t=>t.id!==e)),eC(t.error??"Upload failed");return}let a=await r.json();W(t=>t.some(t=>t.id!==e&&t.path===a.path)?t.filter(t=>t.id!==e):t.map(t=>t.id===e?{...a,id:e,loading:!1}:t))}catch{W(t=>t.filter(t=>t.id!==e)),eC("Upload failed")}}}catch{}},[]),eB=(0,r.useCallback)(e=>{W(t=>t.filter(t=>t.id!==e))},[]),e$=(0,r.useRef)(null),eq=(0,r.useCallback)(e=>{(e.ctrlKey||e.metaKey)&&"Enter"===e.key&&(e.preventDefault(),e$.current?.requestSubmit())},[]),eH=(0,r.useCallback)(()=>{eN(!0)},[]),eG=(0,r.useCallback)(()=>{setTimeout(()=>{let e=eS.current?.contains(document.activeElement),t=eS.current?.querySelector('[aria-expanded="true"]')!==null;e||t||eN(!1)},0)},[]),e_=d&&d.length>0,eK=!E&&!ef,eW=!E&&void 0!==u;return(0,t.jsx)(f.BaseDrawer,{open:e,onClose:eE,size:"md",modal:!1,dismissOnOutsideClick:!0,"data-testid":"feature-create-drawer",header:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("div",{className:"h-2.5 w-2.5 shrink-0 rounded-full bg-blue-500"}),(0,t.jsx)(g.DrawerTitle,{children:"NEW FEATURE"})]}),i?(0,t.jsx)(g.DrawerDescription,{asChild:!0,children:(0,t.jsx)("div",{children:(0,t.jsx)(y.Badge,{variant:"secondary",children:"Creating..."})})}):null]}),footer:(0,t.jsxs)("div",{className:"flex flex-row justify-end gap-2",children:[(0,t.jsx)(b.Button,{variant:"outline",onClick:eE,disabled:i,children:"Cancel"}),(0,t.jsx)(b.Button,{type:"submit",form:"create-feature-form",disabled:!G.trim()||i||eK,children:i?"Creating...":"+ Create Feature"})]}),children:(0,t.jsx)("div",{className:"overflow-y-auto p-4",children:(0,t.jsx)(N.TooltipProvider,{delayDuration:400,children:(0,t.jsxs)("form",{ref:e$,id:"create-feature-form",onSubmit:eM,onKeyDown:eq,className:"flex flex-col gap-4",children:[eW?(0,t.jsxs)("div",{className:"flex flex-col gap-1.5","data-testid":"repo-selector-section",children:[(0,t.jsx)(w.Label,{className:"text-muted-foreground text-xs font-semibold tracking-wider",children:"REPOSITORY"}),(0,t.jsx)(M,{repositories:eb,value:ef,onChange:eg,onAddRepository:e=>{ev(t=>[...t,e]),eg(e.path)},disabled:i})]}):E?(0,t.jsxs)("div",{className:"flex flex-col gap-1.5","data-testid":"repo-readonly-section",children:[(0,t.jsx)(w.Label,{className:"text-muted-foreground text-xs font-semibold tracking-wider",children:"REPOSITORY"}),(0,t.jsx)("p",{className:"text-sm","data-testid":"repo-readonly-label",children:u?.find(e=>e.path===E)?.name??E.split("/").pop()})]}):null,(0,t.jsxs)("div",{role:"region","aria-label":"File drop zone","data-drag-over":ej?"true":"false",onDragEnter:eD,onDragLeave:eO,onDragOver:eI,onDrop:ez,className:(0,m.cn)("flex flex-col gap-1.5 rounded-md border-2 border-transparent p-1 transition-colors",ej&&"border-primary/50 bg-primary/5"),children:[(0,t.jsx)(w.Label,{htmlFor:"feature-description",className:"text-muted-foreground text-xs font-semibold tracking-wider",children:"DESCRIBE YOUR FEATURE"}),(0,t.jsxs)("div",{ref:eS,onFocus:eH,onBlur:eG,className:(0,m.cn)("border-input flex h-56 flex-col overflow-hidden rounded-md border shadow-xs transition-[color,box-shadow]",ek&&"ring-ring/50 border-ring ring-[3px]"),children:[(0,t.jsx)(j.Textarea,{id:"feature-description",placeholder:"e.g. Add GitHub OAuth login with callback handling and token refresh...",value:G,onChange:e=>_(e.target.value),onPaste:eL,required:!0,disabled:i,className:"min-h-0 flex-1 resize-none rounded-none border-0 shadow-none focus-visible:ring-0"}),K.length>0&&(0,t.jsx)("div",{className:"flex flex-wrap items-center gap-1.5 px-3 py-2",children:K.map(e=>(0,t.jsx)(T.AttachmentChip,{name:e.name,size:e.size,mimeType:e.mimeType,path:e.path,onRemove:()=>eB(e.id),disabled:i,loading:e.loading},e.id))}),ey?(0,t.jsx)("p",{className:"text-destructive px-3 pb-2 text-xs",children:ey}):null,(0,t.jsxs)("div",{className:"border-input flex items-center gap-3 border-t px-3 py-1.5",children:[(0,t.jsx)(S.AgentModelPicker,{initialAgentType:eu??v??"claude-code",initialModel:em??C??"claude-sonnet-4-6",mode:"override",onAgentModelChange:(e,t)=>{eh(e),ex(t)},disabled:i,className:"w-55"}),(0,t.jsxs)(N.Tooltip,{children:[(0,t.jsx)(N.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"ml-auto flex cursor-pointer items-center gap-2",children:[(0,t.jsx)(k.Switch,{id:"pending-mode",checked:ec,onCheckedChange:ep,disabled:i}),(0,t.jsxs)(w.Label,{htmlFor:"pending-mode",className:"flex cursor-pointer items-center gap-1 text-sm font-medium",children:[(0,t.jsx)(p.Clock,{className:"h-3.5 w-3.5"}),"Pending"]})]})}),(0,t.jsx)(N.TooltipContent,{side:"bottom",children:"Create without starting — start manually later."})]}),(0,t.jsxs)(N.Tooltip,{children:[(0,t.jsx)(N.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-2",children:[(0,t.jsx)(k.Switch,{id:"fast-mode",checked:el,onCheckedChange:ed,disabled:i}),(0,t.jsxs)(w.Label,{htmlFor:"fast-mode",className:"flex cursor-pointer items-center gap-1 text-sm font-medium",children:[(0,t.jsx)(c.Zap,{className:"h-3.5 w-3.5"}),"Fast Mode"]})]})}),(0,t.jsx)(N.TooltipContent,{side:"bottom",children:"Skip SDLC phases and implement directly from your prompt."})]}),(0,t.jsxs)(N.Tooltip,{children:[(0,t.jsx)(N.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button",onClick:eU,disabled:i,"aria-label":"Attach files",className:"text-muted-foreground hover:text-foreground cursor-pointer rounded p-1 transition-colors",children:(0,t.jsx)(n.PaperclipIcon,{className:"h-4 w-4"})})}),(0,t.jsx)(N.TooltipContent,{side:"bottom",children:"Attach files"})]})]})]})]}),e_&&void 0!==h?(0,t.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,t.jsx)(w.Label,{htmlFor:"parent-feature",className:"text-muted-foreground text-xs font-semibold tracking-wider",children:"PARENT FEATURE"}),(0,t.jsx)(L,{features:d,value:ei,onChange:en,disabled:i})]}):null,(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsxs)("div",{className:"border-input flex items-center gap-4 rounded-md border px-3 py-2.5",children:[(0,t.jsxs)(N.Tooltip,{children:[(0,t.jsx)(N.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("span",{className:"text-muted-foreground w-16 shrink-0 cursor-default text-xs font-semibold tracking-wider",children:"APPROVE"})}),(0,t.jsx)(N.TooltipContent,{side:"bottom",children:"Auto-approve phase transitions without manual review."})]}),(0,t.jsx)("div",{className:"flex flex-1 items-center gap-4",children:O.map(e=>(0,t.jsxs)(N.Tooltip,{children:[(0,t.jsx)(N.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(k.Switch,{id:`approve-${e.id}`,size:"sm",checked:V[e.id]??!1,onCheckedChange:t=>X(r=>({...r,[e.id]:t})),disabled:i||el&&("allowPrd"===e.id||"allowPlan"===e.id)}),(0,t.jsx)(w.Label,{htmlFor:`approve-${e.id}`,className:"cursor-pointer text-xs font-medium",children:e.label})]})}),(0,t.jsx)(N.TooltipContent,{side:"bottom",children:el&&("allowPrd"===e.id||"allowPlan"===e.id)?"Skipped in Fast Mode":e.description})]},e.id))}),(0,t.jsxs)(N.Tooltip,{children:[(0,t.jsx)(N.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button",onClick:()=>{let e=O.every(e=>V[e.id]),t={};for(let r of O)t[r.id]=!e;X(t)},disabled:i,className:(0,m.cn)("text-muted-foreground hover:text-foreground cursor-pointer rounded px-1.5 py-0.5 text-[10px] font-semibold tracking-wider uppercase transition-colors",O.every(e=>V[e.id])&&"text-primary"),children:"All"})}),(0,t.jsx)(N.TooltipContent,{side:"bottom",children:"Toggle all approval gates"})]})]}),(0,t.jsxs)("div",{className:"border-input flex items-center gap-4 rounded-md border px-3 py-2.5",children:[(0,t.jsxs)(N.Tooltip,{children:[(0,t.jsx)(N.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("span",{className:"text-muted-foreground w-16 shrink-0 cursor-default text-xs font-semibold tracking-wider",children:"EVIDENCE"})}),(0,t.jsx)(N.TooltipContent,{side:"bottom",children:"Collect and attach evidence after implementation."})]}),(0,t.jsxs)("div",{className:"flex flex-1 items-center gap-4",children:[(0,t.jsxs)(N.Tooltip,{children:[(0,t.jsx)(N.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(k.Switch,{id:"enable-evidence",size:"sm",checked:er,onCheckedChange:e=>{ea(e),e||eo(!1)},disabled:i}),(0,t.jsx)(w.Label,{htmlFor:"enable-evidence",className:"cursor-pointer text-xs font-medium",children:"Collect"})]})}),(0,t.jsx)(N.TooltipContent,{side:"bottom",children:"Capture screenshots and artifacts after implementation."})]}),(0,t.jsxs)(N.Tooltip,{children:[(0,t.jsx)(N.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(k.Switch,{id:"commit-evidence",size:"sm",checked:es,onCheckedChange:eo,disabled:i||!er||!J}),(0,t.jsx)(w.Label,{htmlFor:"commit-evidence",className:(0,m.cn)("cursor-pointer text-xs font-medium",(!er||!J)&&"opacity-50"),children:"Add to PR"})]})}),(0,t.jsx)(N.TooltipContent,{side:"bottom",children:J?er?"Include evidence in the pull request body.":"Requires evidence collection to be enabled":"Requires PR to be enabled"})]})]})]}),(0,t.jsxs)("div",{className:"border-input flex items-center gap-4 rounded-md border px-3 py-2.5",children:[(0,t.jsx)("span",{className:"text-muted-foreground w-16 shrink-0 text-xs font-semibold tracking-wider",children:"GIT"}),(0,t.jsxs)("div",{className:"flex flex-1 items-center gap-4",children:[(0,t.jsxs)(N.Tooltip,{children:[(0,t.jsx)(N.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(k.Switch,{id:"push",size:"sm",checked:Y||J,onCheckedChange:e=>{Z(e),!e&&J&&Q(!1)},disabled:i}),(0,t.jsx)(w.Label,{htmlFor:"push",className:"cursor-pointer text-xs font-medium",children:"Push"})]})}),(0,t.jsx)(N.TooltipContent,{side:"bottom",children:"Push branch to remote after implementation."})]}),(0,t.jsxs)(N.Tooltip,{children:[(0,t.jsx)(N.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(k.Switch,{id:"open-pr",size:"sm",checked:J,onCheckedChange:e=>{Q(e),e||eo(!1)},disabled:i}),(0,t.jsx)(w.Label,{htmlFor:"open-pr",className:"cursor-pointer text-xs font-medium",children:"PR"})]})}),(0,t.jsx)(N.TooltipContent,{side:"bottom",children:"Open a pull request after pushing."})]}),(0,t.jsxs)(N.Tooltip,{children:[(0,t.jsx)(N.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(k.Switch,{id:"ci-watch",size:"sm",checked:ee,onCheckedChange:et,disabled:i}),(0,t.jsx)(w.Label,{htmlFor:"ci-watch",className:"cursor-pointer text-xs font-medium",children:"Watch"})]})}),(0,t.jsx)(N.TooltipContent,{side:"bottom",children:"Watch CI and auto-fix after push."})]})]})]})]})]})})})})}function L({features:e,value:a,onChange:s,disabled:o}){let[i,n]=(0,r.useState)(!1),[c,p]=(0,r.useState)(""),u=(0,r.useRef)(null),h=e.find(e=>e.id===a),x=c.trim()?e.filter(e=>e.name.toLowerCase().includes(c.toLowerCase())||e.id.toLowerCase().includes(c.toLowerCase())):e,f=(0,r.useCallback)(e=>{s(e),n(!1),p("")},[s]);return(0,r.useEffect)(()=>{i?setTimeout(()=>u.current?.focus(),0):p("")},[i]),(0,t.jsxs)(C.Popover,{open:i,onOpenChange:n,children:[(0,t.jsx)(C.PopoverTrigger,{asChild:!0,children:(0,t.jsxs)("button",{id:"parent-feature",type:"button",role:"combobox","aria-expanded":i,"aria-label":"Parent Feature",disabled:o,"data-testid":"parent-feature-combobox",className:(0,m.cn)("border-input bg-background ring-offset-background focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border px-3 py-2 text-sm focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50",!h&&"text-muted-foreground"),children:[(0,t.jsx)("span",{className:"truncate",children:h?`${h.name} (${h.id.slice(0,8)})`:"Select parent feature..."}),(0,t.jsx)(l,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),(0,t.jsx)(C.PopoverContent,{className:"w-80 p-0",align:"start","data-testid":"parent-feature-combobox-content",children:(0,t.jsxs)("div",{className:"flex flex-col",children:[(0,t.jsx)("div",{className:"border-b p-2",children:(0,t.jsx)(v.Input,{ref:u,placeholder:"Search features...",value:c,onChange:e=>p(e.target.value),className:"h-8 border-0 p-0 text-sm shadow-none focus-visible:ring-0","data-testid":"parent-feature-search"})}),(0,t.jsxs)("div",{className:"max-h-48 overflow-y-auto py-1",role:"listbox","aria-label":"Features",children:[(0,t.jsxs)("button",{type:"button",role:"option","aria-selected":void 0===a,onClick:()=>f(void 0),className:(0,m.cn)("hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm",void 0===a&&"bg-accent/50"),"data-testid":"parent-feature-option-none",children:[(0,t.jsx)(d.CheckIcon,{className:(0,m.cn)("h-4 w-4 shrink-0",void 0!==a&&"invisible")}),(0,t.jsx)("span",{className:"text-muted-foreground italic",children:"No parent"})]}),0===x.length&&c?(0,t.jsx)("p",{className:"text-muted-foreground px-3 py-2 text-sm",children:"No features found."}):x.map(e=>(0,t.jsxs)("button",{type:"button",role:"option","aria-selected":a===e.id,onClick:()=>f(e.id),className:(0,m.cn)("hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm",a===e.id&&"bg-accent/50"),"data-testid":`parent-feature-option-${e.id}`,children:[(0,t.jsx)(d.CheckIcon,{className:(0,m.cn)("h-4 w-4 shrink-0",a!==e.id&&"invisible")}),(0,t.jsxs)("span",{className:"truncate",children:[e.name," ",(0,t.jsxs)("span",{className:"text-muted-foreground font-mono text-xs",children:["(",e.id.slice(0,8),")"]})]})]},e.id))]})]})})]})}function M({repositories:e,value:a,onChange:s,onAddRepository:o,disabled:i}){let[n,c]=(0,r.useState)(!1),[p,x]=(0,r.useState)(""),[f,g]=(0,r.useState)(!1),[b,j]=(0,r.useState)(null),w=(0,r.useRef)(null),y=e.find(e=>e.path===a),k=p.trim()?e.filter(e=>e.name.toLowerCase().includes(p.toLowerCase())||e.path.toLowerCase().includes(p.toLowerCase())):e,N=(0,r.useCallback)(e=>{s(e),c(!1),x("")},[s]),P=(0,r.useCallback)(async()=>{if(!f){g(!0),j(null);try{let e=await (0,A.pickFolder)();if(!e)return void g(!1);let t=await (0,E.addRepository)({path:e});if(t.error){j(t.error),g(!1);return}if(t.repository){let e={id:t.repository.id,name:t.repository.name,path:t.repository.path};o?.(e),s(e.path),c(!1),x("")}}catch(e){j(e instanceof Error?e.message:"Failed to add repository")}finally{g(!1)}}},[f,o,s]);return(0,r.useEffect)(()=>{n?setTimeout(()=>w.current?.focus(),0):x("")},[n]),(0,t.jsxs)(C.Popover,{open:n,onOpenChange:c,children:[(0,t.jsx)(C.PopoverTrigger,{asChild:!0,children:(0,t.jsxs)("button",{type:"button",role:"combobox","aria-expanded":n,"aria-label":"Repository",disabled:i,"data-testid":"repository-combobox",className:(0,m.cn)("border-input bg-background ring-offset-background focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border px-3 py-2 text-sm focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50",!y&&"text-muted-foreground"),children:[(0,t.jsx)("span",{className:"truncate",children:y?y.name:"Select repository..."}),(0,t.jsx)(l,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),(0,t.jsx)(C.PopoverContent,{className:"w-80 p-0",align:"start","data-testid":"repository-combobox-content",children:(0,t.jsxs)("div",{className:"flex flex-col",children:[(0,t.jsx)("div",{className:"border-b p-2",children:(0,t.jsx)(v.Input,{ref:w,placeholder:"Search repositories...",value:p,onChange:e=>x(e.target.value),className:"h-8 border-0 p-0 text-sm shadow-none focus-visible:ring-0","data-testid":"repository-search"})}),(0,t.jsx)("div",{className:"max-h-48 overflow-y-auto py-1",role:"listbox","aria-label":"Repositories",children:0===k.length?(0,t.jsx)("p",{className:"text-muted-foreground px-3 py-2 text-sm","data-testid":"repository-empty",children:"No repositories found."}):k.map(e=>(0,t.jsxs)("button",{type:"button",role:"option","aria-selected":a===e.path,onClick:()=>N(e.path),className:(0,m.cn)("hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm",a===e.path&&"bg-accent/50"),"data-testid":`repository-option-${e.id}`,children:[(0,t.jsx)(d.CheckIcon,{className:(0,m.cn)("h-4 w-4 shrink-0",a!==e.path&&"invisible")}),(0,t.jsxs)("span",{className:"flex flex-col items-start truncate",children:[(0,t.jsx)("span",{className:"truncate",children:e.name}),(0,t.jsx)("span",{className:"text-muted-foreground truncate text-xs",children:e.path})]})]},e.id))}),(0,t.jsx)(R.Separator,{}),(0,t.jsxs)("button",{type:"button",onClick:P,disabled:f,className:"hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm","data-testid":"add-repository-item",children:[f?(0,t.jsx)(h.Loader2,{className:"h-4 w-4 shrink-0 animate-spin"}):(0,t.jsx)(u.FolderPlus,{className:"h-4 w-4 shrink-0"}),(0,t.jsx)("span",{children:"Add new repository..."})]}),b?(0,t.jsx)("p",{className:"px-3 pb-2 text-xs text-red-500","data-testid":"add-repository-error",children:b}):null]})})]})}function U({repositoryPath:e,initialParentId:o,initialDescription:n,features:l,repositories:d,workflowDefaults:c,currentAgentType:p,currentModel:u}){let h=(0,a.useRouter)(),[m,x]=(0,r.useState)(!1),f=(0,a.usePathname)().startsWith("/create"),g=!m&&f;(0,r.useEffect)(()=>{!f&&m&&x(!1)},[f,m]);let b=(0,r.useCallback)(()=>{h.push("/")},[h]),v=(0,r.useCallback)(e=>{x(!0),h.push("/"),i(e).then(t=>{t.error?s.toast.error(t.error):window.dispatchEvent(new CustomEvent("shep:feature-created",{detail:{featureId:t.feature.id,name:t.feature.name,description:t.feature.description,repositoryPath:t.feature.repositoryPath,parentId:e.parentId}}))}).catch(()=>{s.toast.error("Failed to create feature"),x(!1)})},[h]);return(0,t.jsx)(z,{open:g,onClose:b,onSubmit:v,repositoryPath:e,features:l,repositories:d,workflowDefaults:c,initialParentId:o,initialDescription:n,isSubmitting:m,currentAgentType:p,currentModel:u})}e.s(["CreateDrawerClient",()=>U],15203)}]);
@@ -1,28 +0,0 @@
1
- /**
2
- * Rebase Feature on Main Use Case
3
- *
4
- * Rebases a feature branch onto the latest main branch with auto-sync
5
- * and agent-powered conflict resolution.
6
- *
7
- * Flow: resolve feature → determine cwd (worktree or repo root) →
8
- * sync main → rebase → on conflict, delegate to ConflictResolutionService.
9
- */
10
- import type { IFeatureRepository } from '../../ports/output/repositories/feature-repository.interface.js';
11
- import type { IGitPrService } from '../../ports/output/services/git-pr-service.interface.js';
12
- import type { IWorktreeService } from '../../ports/output/services/worktree-service.interface.js';
13
- import type { ConflictResolutionService } from '../../../infrastructure/services/agents/conflict-resolution/conflict-resolution.service.js';
14
- export declare class RebaseFeatureOnMainUseCase {
15
- private readonly featureRepo;
16
- private readonly gitPrService;
17
- private readonly worktreeService;
18
- private readonly conflictResolutionService;
19
- constructor(featureRepo: IFeatureRepository, gitPrService: IGitPrService, worktreeService: IWorktreeService, conflictResolutionService: ConflictResolutionService);
20
- execute(featureId: string): Promise<void>;
21
- /**
22
- * Resolve the correct working directory for the feature.
23
- * Uses the worktree path if a worktree exists for this branch,
24
- * otherwise falls back to the repository root.
25
- */
26
- private resolveCwd;
27
- }
28
- //# sourceMappingURL=rebase-feature-on-main.use-case.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rebase-feature-on-main.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yDAAyD,CAAC;AAK7F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAClG,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4FAA4F,CAAC;AAE5I,qBACa,0BAA0B;IAGnC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,yBAAyB;gBANzB,WAAW,EAAE,kBAAkB,EAE/B,YAAY,EAAE,aAAa,EAE3B,eAAe,EAAE,gBAAgB,EAEjC,yBAAyB,EAAE,yBAAyB;IAGjE,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B/C;;;;OAIG;YACW,UAAU;CAOzB"}
@@ -1,81 +0,0 @@
1
- /**
2
- * Rebase Feature on Main Use Case
3
- *
4
- * Rebases a feature branch onto the latest main branch with auto-sync
5
- * and agent-powered conflict resolution.
6
- *
7
- * Flow: resolve feature → determine cwd (worktree or repo root) →
8
- * sync main → rebase → on conflict, delegate to ConflictResolutionService.
9
- */
10
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
11
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
12
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
13
- 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;
14
- return c > 3 && r && Object.defineProperty(target, key, r), r;
15
- };
16
- var __metadata = (this && this.__metadata) || function (k, v) {
17
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
18
- };
19
- var __param = (this && this.__param) || function (paramIndex, decorator) {
20
- return function (target, key) { decorator(target, key, paramIndex); }
21
- };
22
- import { injectable, inject } from 'tsyringe';
23
- import { GitPrError, GitPrErrorCode, } from '../../ports/output/services/git-pr-service.interface.js';
24
- let RebaseFeatureOnMainUseCase = class RebaseFeatureOnMainUseCase {
25
- featureRepo;
26
- gitPrService;
27
- worktreeService;
28
- conflictResolutionService;
29
- constructor(featureRepo, gitPrService, worktreeService, conflictResolutionService) {
30
- this.featureRepo = featureRepo;
31
- this.gitPrService = gitPrService;
32
- this.worktreeService = worktreeService;
33
- this.conflictResolutionService = conflictResolutionService;
34
- }
35
- async execute(featureId) {
36
- // Resolve feature by exact ID or prefix
37
- const feature = (await this.featureRepo.findById(featureId)) ??
38
- (await this.featureRepo.findByIdPrefix(featureId));
39
- if (!feature) {
40
- throw new Error(`Feature not found: "${featureId}"`);
41
- }
42
- // Determine working directory — worktree path if it exists, else repo root
43
- const cwd = await this.resolveCwd(feature.repositoryPath, feature.branch);
44
- const defaultBranch = await this.gitPrService.getDefaultBranch(feature.repositoryPath);
45
- // Auto-sync main before rebasing (per spec decision)
46
- await this.gitPrService.syncMain(cwd, defaultBranch);
47
- // Attempt rebase
48
- try {
49
- await this.gitPrService.rebaseOnMain(cwd, feature.branch, defaultBranch);
50
- }
51
- catch (error) {
52
- if (error instanceof GitPrError && error.code === GitPrErrorCode.REBASE_CONFLICT) {
53
- // Delegate to agent-powered conflict resolution
54
- await this.conflictResolutionService.resolve(cwd, feature.branch, defaultBranch);
55
- return;
56
- }
57
- throw error;
58
- }
59
- }
60
- /**
61
- * Resolve the correct working directory for the feature.
62
- * Uses the worktree path if a worktree exists for this branch,
63
- * otherwise falls back to the repository root.
64
- */
65
- async resolveCwd(repositoryPath, branch) {
66
- const hasWorktree = await this.worktreeService.exists(repositoryPath, branch);
67
- if (hasWorktree) {
68
- return this.worktreeService.getWorktreePath(repositoryPath, branch);
69
- }
70
- return repositoryPath;
71
- }
72
- };
73
- RebaseFeatureOnMainUseCase = __decorate([
74
- injectable(),
75
- __param(0, inject('IFeatureRepository')),
76
- __param(1, inject('IGitPrService')),
77
- __param(2, inject('IWorktreeService')),
78
- __param(3, inject('ConflictResolutionService')),
79
- __metadata("design:paramtypes", [Object, Object, Object, Function])
80
- ], RebaseFeatureOnMainUseCase);
81
- export { RebaseFeatureOnMainUseCase };
@@ -1,16 +0,0 @@
1
- /**
2
- * Sync Repository Main Use Case
3
- *
4
- * Syncs a repository's local main branch with the remote.
5
- * Resolves the repository by ID, determines its path and default branch,
6
- * then delegates to IGitPrService.syncMain().
7
- */
8
- import type { IRepositoryRepository } from '../../ports/output/repositories/repository-repository.interface.js';
9
- import type { IGitPrService } from '../../ports/output/services/git-pr-service.interface.js';
10
- export declare class SyncRepositoryMainUseCase {
11
- private readonly repositoryRepo;
12
- private readonly gitPrService;
13
- constructor(repositoryRepo: IRepositoryRepository, gitPrService: IGitPrService);
14
- execute(repoId: string): Promise<void>;
15
- }
16
- //# sourceMappingURL=sync-repository-main.use-case.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync-repository-main.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/repositories/sync-repository-main.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oEAAoE,CAAC;AAChH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yDAAyD,CAAC;AAE7F,qBACa,yBAAyB;IAGlC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAFZ,cAAc,EAAE,qBAAqB,EAErC,YAAY,EAAE,aAAa;IAGxC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAS7C"}
@@ -1,43 +0,0 @@
1
- /**
2
- * Sync Repository Main Use Case
3
- *
4
- * Syncs a repository's local main branch with the remote.
5
- * Resolves the repository by ID, determines its path and default branch,
6
- * then delegates to IGitPrService.syncMain().
7
- */
8
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
9
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
10
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
11
- 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;
12
- return c > 3 && r && Object.defineProperty(target, key, r), r;
13
- };
14
- var __metadata = (this && this.__metadata) || function (k, v) {
15
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
16
- };
17
- var __param = (this && this.__param) || function (paramIndex, decorator) {
18
- return function (target, key) { decorator(target, key, paramIndex); }
19
- };
20
- import { injectable, inject } from 'tsyringe';
21
- let SyncRepositoryMainUseCase = class SyncRepositoryMainUseCase {
22
- repositoryRepo;
23
- gitPrService;
24
- constructor(repositoryRepo, gitPrService) {
25
- this.repositoryRepo = repositoryRepo;
26
- this.gitPrService = gitPrService;
27
- }
28
- async execute(repoId) {
29
- const repository = await this.repositoryRepo.findById(repoId);
30
- if (!repository) {
31
- throw new Error(`Repository not found: "${repoId}"`);
32
- }
33
- const defaultBranch = await this.gitPrService.getDefaultBranch(repository.path);
34
- await this.gitPrService.syncMain(repository.path, defaultBranch);
35
- }
36
- };
37
- SyncRepositoryMainUseCase = __decorate([
38
- injectable(),
39
- __param(0, inject('IRepositoryRepository')),
40
- __param(1, inject('IGitPrService')),
41
- __metadata("design:paramtypes", [Object, Object])
42
- ], SyncRepositoryMainUseCase);
43
- export { SyncRepositoryMainUseCase };
@@ -1,35 +0,0 @@
1
- /**
2
- * Conflict Resolution Prompt Builder
3
- *
4
- * Builds prompts for the AI agent to resolve git rebase conflicts.
5
- * Follows the merge-prompts.ts pattern of pure functions returning
6
- * markdown strings.
7
- */
8
- export interface ConflictedFile {
9
- /** Relative file path from repo root */
10
- path: string;
11
- /** Full file contents including conflict markers */
12
- content: string;
13
- }
14
- export interface ConflictResolutionPromptParams {
15
- /** Files with conflict markers */
16
- conflictedFiles: ConflictedFile[];
17
- /** The feature branch being rebased */
18
- featureBranch: string;
19
- /** The base branch being rebased onto */
20
- baseBranch: string;
21
- /** 1-based attempt number */
22
- attemptNumber: number;
23
- /** Maximum allowed attempts */
24
- maxAttempts: number;
25
- /** Feedback from previous failed attempt (remaining markers info) */
26
- previousFeedback?: string;
27
- }
28
- /**
29
- * Build a prompt for the conflict resolution agent.
30
- *
31
- * The agent receives conflicted file contents and instructions to resolve
32
- * all conflict markers by editing files in the working directory.
33
- */
34
- export declare function buildConflictResolutionPrompt(params: ConflictResolutionPromptParams): string;
35
- //# sourceMappingURL=conflict-resolution.prompt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conflict-resolution.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,8BAA8B;IAC7C,kCAAkC;IAClC,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,uCAAuC;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,8BAA8B,GAAG,MAAM,CAgE5F"}
@@ -1,66 +0,0 @@
1
- /**
2
- * Conflict Resolution Prompt Builder
3
- *
4
- * Builds prompts for the AI agent to resolve git rebase conflicts.
5
- * Follows the merge-prompts.ts pattern of pure functions returning
6
- * markdown strings.
7
- */
8
- /**
9
- * Build a prompt for the conflict resolution agent.
10
- *
11
- * The agent receives conflicted file contents and instructions to resolve
12
- * all conflict markers by editing files in the working directory.
13
- */
14
- export function buildConflictResolutionPrompt(params) {
15
- const { conflictedFiles, featureBranch, baseBranch, attemptNumber, maxAttempts, previousFeedback, } = params;
16
- const fileSection = conflictedFiles
17
- .map((f) => `### \`${f.path}\`
18
-
19
- \`\`\`
20
- ${f.content}
21
- \`\`\``)
22
- .join('\n\n');
23
- const feedbackSection = previousFeedback
24
- ? `
25
- ## Previous Attempt Feedback
26
-
27
- Your previous resolution attempt (${attemptNumber - 1}/${maxAttempts}) was incomplete:
28
-
29
- ${previousFeedback}
30
-
31
- You MUST resolve all remaining conflict markers in this attempt.
32
- `
33
- : '';
34
- return `You are resolving git rebase conflicts (attempt ${attemptNumber}/${maxAttempts}).
35
-
36
- ## Branch Context
37
-
38
- - Feature branch: \`${featureBranch}\`
39
- - Base branch: \`${baseBranch}\`
40
- - The feature branch is being rebased onto the latest \`${baseBranch}\`.
41
- ${feedbackSection}
42
- ## Conflicted Files
43
-
44
- The following files contain conflict markers that must be resolved:
45
-
46
- ${fileSection}
47
-
48
- ## Instructions
49
-
50
- 1. Read each conflicted file listed above
51
- 2. Resolve ALL conflict markers (\`<<<<<<<\`, \`=======\`, \`>>>>>>>\`) by editing the files
52
- 3. For each conflict, determine the correct resolution by understanding the intent of both sides:
53
- - The \`<<<<<<< HEAD\` section contains changes from \`${baseBranch}\` (theirs during rebase)
54
- - The \`>>>>>>> ...\` section contains changes from \`${featureBranch}\` (ours during rebase)
55
- 4. Produce a merged result that preserves the intent of both sides where possible
56
- 5. If the changes conflict logically (not just textually), prefer the feature branch changes but ensure compatibility with the base branch
57
-
58
- ## Constraints
59
-
60
- - Edit ONLY the conflicted files listed above — do NOT modify any other files
61
- - Remove ALL conflict markers (\`<<<<<<<\`, \`=======\`, \`>>>>>>>\`) from every conflicted file
62
- - Do NOT add new files or delete files
63
- - Do NOT run git commands — only edit files to resolve conflicts
64
- - Do NOT run tests, builds, or linters — only resolve the conflict markers
65
- - Every conflicted file must have zero remaining conflict markers when you are done`;
66
- }
@@ -1,42 +0,0 @@
1
- /**
2
- * Conflict Resolution Service
3
- *
4
- * Orchestrates agent-powered conflict resolution during git rebase.
5
- * Follows the CI watch/fix loop pattern: detect conflict → invoke agent →
6
- * validate resolution → stage files → continue rebase, with retry logic.
7
- */
8
- import type { IAgentExecutorProvider } from '../../../../application/ports/output/agents/agent-executor-provider.interface.js';
9
- import type { IGitPrService } from '../../../../application/ports/output/services/git-pr-service.interface.js';
10
- export declare class ConflictResolutionService {
11
- private readonly agentProvider;
12
- private readonly gitPrService;
13
- constructor(agentProvider: IAgentExecutorProvider, gitPrService: IGitPrService);
14
- /**
15
- * Resolve all conflicts during a rebase operation.
16
- *
17
- * Handles multi-commit rebases where each commit may introduce conflicts.
18
- * For each conflicted commit: reads conflicted files, invokes agent to
19
- * resolve, validates no remaining markers, stages resolved files, and
20
- * continues the rebase. Retries up to MAX_RETRIES_PER_COMMIT times.
21
- *
22
- * If retries are exhausted, aborts the rebase and throws REBASE_CONFLICT.
23
- *
24
- * @param cwd - Working directory (repo root or worktree path)
25
- * @param featureBranch - Feature branch being rebased
26
- * @param baseBranch - Base branch being rebased onto
27
- */
28
- resolve(cwd: string, featureBranch: string, baseBranch: string): Promise<void>;
29
- /**
30
- * Read the contents of conflicted files from the working directory.
31
- */
32
- private readConflictedFileContents;
33
- /**
34
- * Validate that no conflict markers remain in the previously-conflicted files.
35
- */
36
- private validateResolution;
37
- /**
38
- * Build feedback about remaining conflict markers for retry attempts.
39
- */
40
- private buildFeedbackFromRemainingMarkers;
41
- }
42
- //# sourceMappingURL=conflict-resolution.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conflict-resolution.service.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wEAAwE,CAAC;AACrH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iEAAiE,CAAC;AAerG,qBACa,yBAAyB;IAGlC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAFZ,aAAa,EAAE,sBAAsB,EAErC,YAAY,EAAE,aAAa;IAG9C;;;;;;;;;;;;;OAaG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkEpF;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAWlC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACH,OAAO,CAAC,iCAAiC;CAyB1C"}
@@ -1,169 +0,0 @@
1
- /**
2
- * Conflict Resolution Service
3
- *
4
- * Orchestrates agent-powered conflict resolution during git rebase.
5
- * Follows the CI watch/fix loop pattern: detect conflict → invoke agent →
6
- * validate resolution → stage files → continue rebase, with retry logic.
7
- */
8
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
9
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
10
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
11
- 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;
12
- return c > 3 && r && Object.defineProperty(target, key, r), r;
13
- };
14
- var __metadata = (this && this.__metadata) || function (k, v) {
15
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
16
- };
17
- var __param = (this && this.__param) || function (paramIndex, decorator) {
18
- return function (target, key) { decorator(target, key, paramIndex); }
19
- };
20
- import { injectable, inject } from 'tsyringe';
21
- import { readFileSync } from 'node:fs';
22
- import { join } from 'node:path';
23
- import { GitPrError, GitPrErrorCode, } from '../../../../application/ports/output/services/git-pr-service.interface.js';
24
- import { buildConflictResolutionPrompt, } from './conflict-resolution.prompt.js';
25
- const MAX_RETRIES_PER_COMMIT = 3;
26
- /** Conflict markers that indicate unresolved conflicts */
27
- const CONFLICT_MARKERS = ['<<<<<<<', '=======', '>>>>>>>'];
28
- let ConflictResolutionService = class ConflictResolutionService {
29
- agentProvider;
30
- gitPrService;
31
- constructor(agentProvider, gitPrService) {
32
- this.agentProvider = agentProvider;
33
- this.gitPrService = gitPrService;
34
- }
35
- /**
36
- * Resolve all conflicts during a rebase operation.
37
- *
38
- * Handles multi-commit rebases where each commit may introduce conflicts.
39
- * For each conflicted commit: reads conflicted files, invokes agent to
40
- * resolve, validates no remaining markers, stages resolved files, and
41
- * continues the rebase. Retries up to MAX_RETRIES_PER_COMMIT times.
42
- *
43
- * If retries are exhausted, aborts the rebase and throws REBASE_CONFLICT.
44
- *
45
- * @param cwd - Working directory (repo root or worktree path)
46
- * @param featureBranch - Feature branch being rebased
47
- * @param baseBranch - Base branch being rebased onto
48
- */
49
- async resolve(cwd, featureBranch, baseBranch) {
50
- const executor = await this.agentProvider.getExecutor();
51
- // Outer loop: handle multi-commit rebases where rebaseContinue
52
- // may reveal conflicts on the next commit
53
- while (true) {
54
- const conflictedFiles = await this.gitPrService.getConflictedFiles(cwd);
55
- if (conflictedFiles.length === 0) {
56
- return; // No conflicts — rebase is complete
57
- }
58
- // Inner loop: retry agent resolution for the current commit's conflicts
59
- let resolved = false;
60
- for (let attempt = 1; attempt <= MAX_RETRIES_PER_COMMIT; attempt++) {
61
- const fileContents = this.readConflictedFileContents(cwd, conflictedFiles);
62
- const previousFeedback = attempt > 1 ? this.buildFeedbackFromRemainingMarkers(cwd, conflictedFiles) : undefined;
63
- const prompt = buildConflictResolutionPrompt({
64
- conflictedFiles: fileContents,
65
- featureBranch,
66
- baseBranch,
67
- attemptNumber: attempt,
68
- maxAttempts: MAX_RETRIES_PER_COMMIT,
69
- previousFeedback,
70
- });
71
- await executor.execute(prompt, { cwd });
72
- // Validate: check no conflict markers remain
73
- if (this.validateResolution(cwd, conflictedFiles)) {
74
- resolved = true;
75
- break;
76
- }
77
- }
78
- if (!resolved) {
79
- // Exhausted retries — abort and report
80
- await this.gitPrService.rebaseAbort(cwd);
81
- const remaining = conflictedFiles.join(', ');
82
- throw new GitPrError(`Failed to resolve conflicts after ${MAX_RETRIES_PER_COMMIT} attempts. ` +
83
- `Unresolved files: ${remaining}. The rebase has been aborted.`, GitPrErrorCode.REBASE_CONFLICT);
84
- }
85
- // Resolution succeeded — stage files and continue rebase
86
- await this.gitPrService.stageFiles(cwd, conflictedFiles);
87
- try {
88
- await this.gitPrService.rebaseContinue(cwd);
89
- // rebaseContinue succeeded — check if there are more conflicts
90
- // from subsequent commits (loop continues)
91
- return; // No more conflicts
92
- }
93
- catch (error) {
94
- if (error instanceof GitPrError && error.code === GitPrErrorCode.REBASE_CONFLICT) {
95
- // Next commit has conflicts — loop back to resolve them
96
- continue;
97
- }
98
- throw error; // Unexpected error
99
- }
100
- }
101
- }
102
- /**
103
- * Read the contents of conflicted files from the working directory.
104
- */
105
- readConflictedFileContents(cwd, filePaths) {
106
- return filePaths.map((filePath) => {
107
- try {
108
- const content = readFileSync(join(cwd, filePath), 'utf-8');
109
- return { path: filePath, content };
110
- }
111
- catch {
112
- return { path: filePath, content: '(unable to read file)' };
113
- }
114
- });
115
- }
116
- /**
117
- * Validate that no conflict markers remain in the previously-conflicted files.
118
- */
119
- validateResolution(cwd, filePaths) {
120
- for (const filePath of filePaths) {
121
- try {
122
- const content = readFileSync(join(cwd, filePath), 'utf-8');
123
- for (const marker of CONFLICT_MARKERS) {
124
- if (content.includes(marker)) {
125
- return false;
126
- }
127
- }
128
- }
129
- catch {
130
- return false;
131
- }
132
- }
133
- return true;
134
- }
135
- /**
136
- * Build feedback about remaining conflict markers for retry attempts.
137
- */
138
- buildFeedbackFromRemainingMarkers(cwd, filePaths) {
139
- const remaining = [];
140
- for (const filePath of filePaths) {
141
- try {
142
- const content = readFileSync(join(cwd, filePath), 'utf-8');
143
- const lines = content.split('\n');
144
- const markerLines = [];
145
- lines.forEach((line, index) => {
146
- if (CONFLICT_MARKERS.some((marker) => line.includes(marker))) {
147
- markerLines.push(index + 1);
148
- }
149
- });
150
- if (markerLines.length > 0) {
151
- remaining.push(`- \`${filePath}\`: conflict markers remain on lines ${markerLines.join(', ')}`);
152
- }
153
- }
154
- catch {
155
- remaining.push(`- \`${filePath}\`: unable to read file`);
156
- }
157
- }
158
- return remaining.length > 0
159
- ? remaining.join('\n')
160
- : 'No specific markers found, but validation failed.';
161
- }
162
- };
163
- ConflictResolutionService = __decorate([
164
- injectable(),
165
- __param(0, inject('IAgentExecutorProvider')),
166
- __param(1, inject('IGitPrService')),
167
- __metadata("design:paramtypes", [Object, Object])
168
- ], ConflictResolutionService);
169
- export { ConflictResolutionService };
@@ -1,5 +0,0 @@
1
- export declare function rebaseFeature(featureId: string): Promise<{
2
- success: boolean;
3
- error?: string;
4
- }>;
5
- //# sourceMappingURL=rebase-feature.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rebase-feature.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/rebase-feature.ts"],"names":[],"mappings":"AAKA,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAa/C"}