@shepai/cli 1.136.0-pr396.e077930 → 1.136.0-pr417.01aebe9

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 (305) hide show
  1. package/apis/json-schema/FeatureFlags.yaml +0 -5
  2. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +5 -91
  3. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
  4. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.js +4 -6
  5. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts +8 -3
  6. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts.map +1 -1
  7. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.js +66 -8
  8. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  9. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +0 -1
  10. package/dist/packages/core/src/domain/generated/output.d.ts +0 -4
  11. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  12. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  13. package/dist/packages/core/src/infrastructure/di/container.js +0 -20
  14. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +0 -1
  15. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  16. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +0 -2
  17. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
  18. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +2 -3
  19. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +0 -10
  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 +0 -150
  22. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.d.ts.map +1 -1
  23. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.js +12 -5
  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 -16
  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/activity-tab.d.ts.map +1 -1
  32. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +0 -1
  33. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +1 -9
  34. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -1
  35. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +2 -2
  36. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts +1 -9
  37. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts.map +1 -1
  38. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +2 -3
  39. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts +0 -6
  40. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts.map +1 -1
  41. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.js +0 -30
  42. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.d.ts.map +1 -1
  43. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.js +0 -3
  44. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.d.ts.map +1 -1
  45. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.js +3 -5
  46. package/dist/src/presentation/web/components/common/repository-node/repository-node.js +1 -1
  47. package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.d.ts +0 -4
  48. package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.d.ts.map +1 -1
  49. package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.js +0 -11
  50. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts.map +1 -1
  51. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js +0 -3
  52. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +1 -1
  53. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.js +0 -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 +0 -5
  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 +0 -1
  58. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
  59. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +0 -1
  60. package/dist/src/presentation/web/hooks/feature-flags-context.d.ts.map +1 -1
  61. package/dist/src/presentation/web/hooks/feature-flags-context.js +0 -1
  62. package/dist/src/presentation/web/lib/feature-flags.d.ts +0 -2
  63. package/dist/src/presentation/web/lib/feature-flags.d.ts.map +1 -1
  64. package/dist/src/presentation/web/lib/feature-flags.js +0 -5
  65. package/dist/tsconfig.build.tsbuildinfo +1 -1
  66. package/package.json +1 -1
  67. package/web/.next/BUILD_ID +1 -1
  68. package/web/.next/build-manifest.json +2 -2
  69. package/web/.next/fallback-build-manifest.json +2 -2
  70. package/web/.next/prerender-manifest.json +3 -3
  71. package/web/.next/required-server-files.js +1 -1
  72. package/web/.next/required-server-files.json +1 -1
  73. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +50 -65
  74. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +2 -2
  75. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  76. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  77. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +50 -65
  78. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +2 -2
  79. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  80. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  81. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +62 -107
  82. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -2
  83. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  84. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  85. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +62 -107
  86. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -2
  87. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  88. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  89. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +46 -61
  90. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +2 -2
  91. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  92. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  93. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +50 -65
  94. package/web/.next/server/app/(dashboard)/create/page.js +2 -2
  95. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  96. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  97. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +62 -107
  98. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +2 -2
  99. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  100. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  101. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +62 -107
  102. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -2
  103. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  104. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  105. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +46 -61
  106. package/web/.next/server/app/(dashboard)/page.js +2 -2
  107. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  108. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  109. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +46 -61
  110. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +2 -2
  111. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  112. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  113. package/web/.next/server/app/_global-error.html +2 -2
  114. package/web/.next/server/app/_global-error.rsc +1 -1
  115. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  116. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  117. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  118. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  119. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  120. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +3 -3
  121. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  122. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  123. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  124. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  125. package/web/.next/server/app/settings/page/server-reference-manifest.json +8 -8
  126. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  127. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  128. package/web/.next/server/app/skills/page/server-reference-manifest.json +8 -8
  129. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  130. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  131. package/web/.next/server/app/tools/page/server-reference-manifest.json +8 -8
  132. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  133. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  134. package/web/.next/server/app/version/page/server-reference-manifest.json +3 -3
  135. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  136. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  137. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  138. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  139. package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js.map +1 -1
  140. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  141. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_b49d9c97.js +3 -0
  142. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_b49d9c97.js.map +1 -0
  143. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  144. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  145. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_28632197.js +3 -0
  146. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_28632197.js.map +1 -0
  147. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_10695d37.js +3 -0
  148. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_10695d37.js.map +1 -0
  149. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  150. package/web/.next/server/chunks/ssr/[root-of-the-server]__3ef34e4c._.js +1 -1
  151. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js +1 -1
  152. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js.map +1 -1
  153. package/web/.next/server/chunks/ssr/[root-of-the-server]__47ded061._.js +3 -0
  154. package/web/.next/server/chunks/ssr/[root-of-the-server]__47ded061._.js.map +1 -0
  155. package/web/.next/server/chunks/ssr/[root-of-the-server]__68ce373c._.js +3 -0
  156. package/web/.next/server/chunks/ssr/[root-of-the-server]__68ce373c._.js.map +1 -0
  157. package/web/.next/server/chunks/ssr/[root-of-the-server]__6ec59045._.js.map +1 -1
  158. package/web/.next/server/chunks/ssr/[root-of-the-server]__718766da._.js +3 -0
  159. package/web/.next/server/chunks/ssr/[root-of-the-server]__718766da._.js.map +1 -0
  160. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js +1 -1
  161. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js.map +1 -1
  162. package/web/.next/server/chunks/ssr/[root-of-the-server]__a5f9c6e5._.js +2 -2
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__a5f9c6e5._.js.map +1 -1
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
  165. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  166. package/web/.next/server/chunks/ssr/[root-of-the-server]__b3dbadca._.js +3 -0
  167. package/web/.next/server/chunks/ssr/[root-of-the-server]__b3dbadca._.js.map +1 -0
  168. package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js +1 -1
  169. package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js.map +1 -1
  170. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdd058b2._.js +3 -0
  171. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdd058b2._.js.map +1 -0
  172. package/web/.next/server/chunks/ssr/_0020fddd._.js +1 -1
  173. package/web/.next/server/chunks/ssr/_0020fddd._.js.map +1 -1
  174. package/web/.next/server/chunks/ssr/_02ec1aea._.js +1 -1
  175. package/web/.next/server/chunks/ssr/_02ec1aea._.js.map +1 -1
  176. package/web/.next/server/chunks/ssr/{_13f3c0ec._.js → _036a2f1a._.js} +2 -2
  177. package/web/.next/server/chunks/ssr/{_13f3c0ec._.js.map → _036a2f1a._.js.map} +1 -1
  178. package/web/.next/server/chunks/ssr/_7216273e._.js +3 -0
  179. package/web/.next/server/chunks/ssr/_7216273e._.js.map +1 -0
  180. package/web/.next/server/chunks/ssr/_7dca1882._.js +1 -1
  181. package/web/.next/server/chunks/ssr/_7dca1882._.js.map +1 -1
  182. package/web/.next/server/chunks/ssr/_a37f5f18._.js +1 -1
  183. package/web/.next/server/chunks/ssr/_a37f5f18._.js.map +1 -1
  184. package/web/.next/server/chunks/ssr/_a9f57758._.js +1 -1
  185. package/web/.next/server/chunks/ssr/_a9f57758._.js.map +1 -1
  186. package/web/.next/server/chunks/ssr/_d4b20e29._.js.map +1 -1
  187. package/web/.next/server/chunks/ssr/_d8575088._.js +1 -1
  188. package/web/.next/server/chunks/ssr/_d8575088._.js.map +1 -1
  189. package/web/.next/server/chunks/ssr/_e69a26ba._.js +4 -0
  190. package/web/.next/server/chunks/ssr/_e69a26ba._.js.map +1 -0
  191. package/web/.next/server/chunks/ssr/_f39a1adb._.js +1 -1
  192. package/web/.next/server/chunks/ssr/_f39a1adb._.js.map +1 -1
  193. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  194. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  195. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +3 -0
  196. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -0
  197. package/web/.next/server/chunks/ssr/src_presentation_web_53666118._.js +5 -0
  198. package/web/.next/server/chunks/ssr/src_presentation_web_53666118._.js.map +1 -0
  199. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_d95e128d.js +3 -0
  200. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_d95e128d.js.map +1 -0
  201. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js +1 -1
  202. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js.map +1 -1
  203. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js +1 -1
  204. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js.map +1 -1
  205. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  206. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  207. package/web/.next/server/chunks/ssr/src_presentation_web_cc376559._.js +3 -0
  208. package/web/.next/server/chunks/ssr/{src_presentation_web_28f803bd._.js.map → src_presentation_web_cc376559._.js.map} +1 -1
  209. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  210. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  211. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  212. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  213. package/web/.next/server/chunks/ssr/src_presentation_web_e4df6dd7._.js +5 -0
  214. package/web/.next/server/chunks/ssr/src_presentation_web_e4df6dd7._.js.map +1 -0
  215. package/web/.next/server/pages/500.html +2 -2
  216. package/web/.next/server/server-reference-manifest.js +1 -1
  217. package/web/.next/server/server-reference-manifest.json +307 -457
  218. package/web/.next/static/chunks/{4148e7a319ea7ec4.js → 01e0452d72421732.js} +1 -1
  219. package/web/.next/static/chunks/{f070c67389a686ff.js → 0b7fe2ac4f078f54.js} +1 -1
  220. package/web/.next/static/chunks/{ed248df9e975fd1f.js → 32674ed600fd2d02.js} +1 -1
  221. package/web/.next/static/chunks/{eeec829933170d8a.js → 33119fe287968581.js} +1 -1
  222. package/web/.next/static/chunks/{f010c3293515ab73.js → 419a8d8457d5c8e8.js} +1 -1
  223. package/web/.next/static/chunks/{031e65a4305571f7.js → 54c901337941d745.js} +1 -1
  224. package/web/.next/static/chunks/{132d824e337f12fe.js → 5cf49c75127f5c06.js} +1 -1
  225. package/web/.next/static/chunks/{6bfc9e17e141ac36.js → 666dabc5a947187d.js} +1 -1
  226. package/web/.next/static/chunks/{9db1dd8ad063626c.js → 6cbecb92bd68e7c8.js} +1 -1
  227. package/web/.next/static/chunks/{aa2236a4b7c3bd45.js → 76ef5cf3b4f4ef6b.js} +1 -1
  228. package/web/.next/static/chunks/{20a66a7159b97299.js → 8586bee9919f310e.js} +2 -2
  229. package/web/.next/static/chunks/92cd6f523639a6fa.css +1 -0
  230. package/web/.next/static/chunks/{5f67ffe1879b8536.js → bdc2d28b3db1cadf.js} +1 -1
  231. package/web/.next/static/chunks/d0dff217a94d4ee1.js +1 -0
  232. package/web/.next/static/chunks/da46061d83a9de54.js +1 -0
  233. package/web/.next/static/chunks/eb9841ec4d80af01.js +1 -0
  234. package/dist/packages/core/src/application/use-cases/features/get-branch-sync-status.use-case.d.ts +0 -25
  235. package/dist/packages/core/src/application/use-cases/features/get-branch-sync-status.use-case.d.ts.map +0 -1
  236. package/dist/packages/core/src/application/use-cases/features/get-branch-sync-status.use-case.js +0 -62
  237. package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.d.ts +0 -34
  238. package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.d.ts.map +0 -1
  239. package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.js +0 -139
  240. package/dist/packages/core/src/application/use-cases/repositories/sync-repository-main.use-case.d.ts +0 -16
  241. package/dist/packages/core/src/application/use-cases/repositories/sync-repository-main.use-case.d.ts.map +0 -1
  242. package/dist/packages/core/src/application/use-cases/repositories/sync-repository-main.use-case.js +0 -43
  243. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/042-add-feature-flag-git-rebase-sync.d.ts +0 -11
  244. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/042-add-feature-flag-git-rebase-sync.d.ts.map +0 -1
  245. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/042-add-feature-flag-git-rebase-sync.js +0 -17
  246. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.d.ts +0 -35
  247. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.d.ts.map +0 -1
  248. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.js +0 -66
  249. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.d.ts +0 -42
  250. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.d.ts.map +0 -1
  251. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.js +0 -169
  252. package/dist/src/presentation/web/app/actions/get-branch-sync-status.d.ts +0 -11
  253. package/dist/src/presentation/web/app/actions/get-branch-sync-status.d.ts.map +0 -1
  254. package/dist/src/presentation/web/app/actions/get-branch-sync-status.js +0 -22
  255. package/dist/src/presentation/web/app/actions/rebase-feature.d.ts +0 -5
  256. package/dist/src/presentation/web/app/actions/rebase-feature.d.ts.map +0 -1
  257. package/dist/src/presentation/web/app/actions/rebase-feature.js +0 -16
  258. package/dist/src/presentation/web/app/actions/sync-repository.d.ts +0 -5
  259. package/dist/src/presentation/web/app/actions/sync-repository.d.ts.map +0 -1
  260. package/dist/src/presentation/web/app/actions/sync-repository.js +0 -16
  261. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.d.ts +0 -12
  262. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.d.ts.map +0 -1
  263. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.js +0 -13
  264. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.stories.d.ts +0 -15
  265. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.stories.d.ts.map +0 -1
  266. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.stories.js +0 -86
  267. package/dist/src/presentation/web/hooks/use-branch-sync-status.d.ts +0 -14
  268. package/dist/src/presentation/web/hooks/use-branch-sync-status.d.ts.map +0 -1
  269. package/dist/src/presentation/web/hooks/use-branch-sync-status.js +0 -67
  270. package/web/.next/server/chunks/ssr/[root-of-the-server]__1626f5d7._.js +0 -4
  271. package/web/.next/server/chunks/ssr/[root-of-the-server]__1626f5d7._.js.map +0 -1
  272. package/web/.next/server/chunks/ssr/[root-of-the-server]__49557873._.js +0 -4
  273. package/web/.next/server/chunks/ssr/[root-of-the-server]__49557873._.js.map +0 -1
  274. package/web/.next/server/chunks/ssr/[root-of-the-server]__90fdc0ee._.js +0 -4
  275. package/web/.next/server/chunks/ssr/[root-of-the-server]__90fdc0ee._.js.map +0 -1
  276. package/web/.next/server/chunks/ssr/[root-of-the-server]__a7259d16._.js +0 -4
  277. package/web/.next/server/chunks/ssr/[root-of-the-server]__a7259d16._.js.map +0 -1
  278. package/web/.next/server/chunks/ssr/[root-of-the-server]__cb850066._.js +0 -3
  279. package/web/.next/server/chunks/ssr/[root-of-the-server]__cb850066._.js.map +0 -1
  280. package/web/.next/server/chunks/ssr/_149f6559._.js +0 -4
  281. package/web/.next/server/chunks/ssr/_149f6559._.js.map +0 -1
  282. package/web/.next/server/chunks/ssr/_1a09002f._.js +0 -4
  283. package/web/.next/server/chunks/ssr/_1a09002f._.js.map +0 -1
  284. package/web/.next/server/chunks/ssr/_48a8ee28._.js +0 -6
  285. package/web/.next/server/chunks/ssr/_48a8ee28._.js.map +0 -1
  286. package/web/.next/server/chunks/ssr/_51ed80a4._.js +0 -3
  287. package/web/.next/server/chunks/ssr/_51ed80a4._.js.map +0 -1
  288. package/web/.next/server/chunks/ssr/_6e8c85b1._.js +0 -6
  289. package/web/.next/server/chunks/ssr/_6e8c85b1._.js.map +0 -1
  290. package/web/.next/server/chunks/ssr/_83220ba0._.js +0 -4
  291. package/web/.next/server/chunks/ssr/_83220ba0._.js.map +0 -1
  292. package/web/.next/server/chunks/ssr/_939287c5._.js +0 -4
  293. package/web/.next/server/chunks/ssr/_939287c5._.js.map +0 -1
  294. package/web/.next/server/chunks/ssr/_cfbd1d7e._.js +0 -3
  295. package/web/.next/server/chunks/ssr/_cfbd1d7e._.js.map +0 -1
  296. package/web/.next/server/chunks/ssr/src_presentation_web_28f803bd._.js +0 -3
  297. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +0 -3
  298. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +0 -1
  299. package/web/.next/static/chunks/6a370f2709c81d83.js +0 -1
  300. package/web/.next/static/chunks/ab3afb0b942c1eb2.css +0 -1
  301. package/web/.next/static/chunks/b3cc94a1e319bee8.js +0 -1
  302. package/web/.next/static/chunks/f66c996402a430f5.js +0 -1
  303. /package/web/.next/static/{8o0yazCw1kyy56LNhgtTp → cTPv5o2etR55f5kz8U-6Q}/_buildManifest.js +0 -0
  304. /package/web/.next/static/{8o0yazCw1kyy56LNhgtTp → cTPv5o2etR55f5kz8U-6Q}/_clientMiddlewareManifest.json +0 -0
  305. /package/web/.next/static/{8o0yazCw1kyy56LNhgtTp → cTPv5o2etR55f5kz8U-6Q}/_ssgManifest.js +0 -0
@@ -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,11 +0,0 @@
1
- export declare function getBranchSyncStatus(featureId: string): Promise<{
2
- success: boolean;
3
- data?: {
4
- ahead: number;
5
- behind: number;
6
- baseBranch: string;
7
- checkedAt: string;
8
- };
9
- error?: string;
10
- }>;
11
- //# sourceMappingURL=get-branch-sync-status.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-branch-sync-status.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-branch-sync-status.ts"],"names":[],"mappings":"AAKA,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACpE,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAmBD"}
@@ -1,22 +0,0 @@
1
- 'use server';
2
- import { resolve } from '../../lib/server-container.js';
3
- export async function getBranchSyncStatus(featureId) {
4
- if (!featureId?.trim()) {
5
- return { success: false, error: 'Feature id is required' };
6
- }
7
- try {
8
- const useCase = resolve('GetBranchSyncStatusUseCase');
9
- const result = await useCase.execute(featureId);
10
- return {
11
- success: true,
12
- data: {
13
- ...result,
14
- checkedAt: new Date().toISOString(),
15
- },
16
- };
17
- }
18
- catch (error) {
19
- const message = error instanceof Error ? error.message : 'Failed to get branch sync status';
20
- return { success: false, error: message };
21
- }
22
- }
@@ -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"}
@@ -1,16 +0,0 @@
1
- 'use server';
2
- import { resolve } from '../../lib/server-container.js';
3
- export async function rebaseFeature(featureId) {
4
- if (!featureId?.trim()) {
5
- return { success: false, error: 'Feature id is required' };
6
- }
7
- try {
8
- const useCase = resolve('RebaseFeatureOnMainUseCase');
9
- await useCase.execute(featureId);
10
- return { success: true };
11
- }
12
- catch (error) {
13
- const message = error instanceof Error ? error.message : 'Failed to rebase feature';
14
- return { success: false, error: message };
15
- }
16
- }
@@ -1,5 +0,0 @@
1
- export declare function syncRepository(repositoryId: string): Promise<{
2
- success: boolean;
3
- error?: string;
4
- }>;
5
- //# sourceMappingURL=sync-repository.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync-repository.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/sync-repository.ts"],"names":[],"mappings":"AAKA,wBAAsB,cAAc,CAClC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAa/C"}
@@ -1,16 +0,0 @@
1
- 'use server';
2
- import { resolve } from '../../lib/server-container.js';
3
- export async function syncRepository(repositoryId) {
4
- if (!repositoryId?.trim()) {
5
- return { success: false, error: 'Repository id is required' };
6
- }
7
- try {
8
- const useCase = resolve('SyncRepositoryMainUseCase');
9
- await useCase.execute(repositoryId);
10
- return { success: true };
11
- }
12
- catch (error) {
13
- const message = error instanceof Error ? error.message : 'Failed to sync repository';
14
- return { success: false, error: message };
15
- }
16
- }
@@ -1,12 +0,0 @@
1
- import type { BranchSyncData } from '../../../hooks/use-branch-sync-status.js';
2
- export interface BranchSyncStatusProps {
3
- syncStatus: BranchSyncData | null;
4
- syncLoading: boolean;
5
- syncError: string | null;
6
- onRefreshSync: () => void;
7
- onRebaseOnMain: () => void;
8
- rebaseLoading: boolean;
9
- rebaseError: string | null;
10
- }
11
- export declare function BranchSyncStatus({ syncStatus, syncLoading, syncError, onRefreshSync, onRebaseOnMain, rebaseLoading, rebaseError, }: BranchSyncStatusProps): import("react/jsx-runtime").JSX.Element;
12
- //# sourceMappingURL=branch-sync-status.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"branch-sync-status.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,UAAU,EACV,WAAW,EACX,SAAS,EACT,aAAa,EACb,cAAc,EACd,aAAa,EACb,WAAW,GACZ,EAAE,qBAAqB,2CAkGvB"}
@@ -1,13 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { AlertTriangle, CheckCircle2, GitMerge, RefreshCw } from 'lucide-react';
4
- import { CometSpinner } from '../../ui/comet-spinner.js';
5
- import { ActionButton } from '../../common/action-button/index.js';
6
- import { Separator } from '../../ui/separator.js';
7
- export function BranchSyncStatus({ syncStatus, syncLoading, syncError, onRefreshSync, onRebaseOnMain, rebaseLoading, rebaseError, }) {
8
- const isRebasing = rebaseLoading;
9
- const isBehind = syncStatus != null && syncStatus.behind > 0;
10
- const isUpToDate = syncStatus?.behind === 0;
11
- const baseBranch = syncStatus?.baseBranch ?? 'main';
12
- return (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsxs("div", { "data-testid": "branch-sync-status", className: "flex flex-col gap-3 p-4", children: [_jsx("div", { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "BRANCH SYNC" }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("div", { className: "flex items-center gap-2", children: syncLoading && !syncStatus ? (_jsxs(_Fragment, { children: [_jsx(CometSpinner, { size: "sm", className: "shrink-0" }), _jsx("span", { className: "text-muted-foreground text-sm", children: "Checking..." })] })) : syncError ? (_jsxs(_Fragment, { children: [_jsx(AlertTriangle, { className: "h-4 w-4 shrink-0 text-red-500" }), _jsx("span", { className: "text-sm text-red-600", children: syncError })] })) : isRebasing ? (_jsxs(_Fragment, { children: [_jsx(CometSpinner, { size: "sm", className: "shrink-0" }), _jsxs("span", { className: "text-sm", children: ["Rebasing on", ' ', _jsx("code", { className: "bg-muted rounded px-1 py-0.5 font-mono text-xs", children: baseBranch }), "..."] })] })) : isBehind ? (_jsxs(_Fragment, { children: [_jsx(AlertTriangle, { className: "h-4 w-4 shrink-0 text-orange-500" }), _jsxs("span", { className: "text-sm", children: [syncStatus.behind, " commit", syncStatus.behind === 1 ? '' : 's', " behind", ' ', _jsx("code", { className: "bg-muted rounded px-1 py-0.5 font-mono text-xs", children: baseBranch }), syncStatus.ahead > 0 ? (_jsxs("span", { className: "text-muted-foreground ml-1", children: ["\u00B7 ", syncStatus.ahead, " ahead"] })) : null] })] })) : isUpToDate ? (_jsxs(_Fragment, { children: [_jsx(CheckCircle2, { className: "h-4 w-4 shrink-0 text-green-500" }), _jsxs("span", { className: "text-sm", children: ["Up to date with", ' ', _jsx("code", { className: "bg-muted rounded px-1 py-0.5 font-mono text-xs", children: baseBranch }), syncStatus.ahead > 0 ? (_jsxs("span", { className: "text-muted-foreground ml-1", children: ["\u00B7 ", syncStatus.ahead, " ahead"] })) : null] })] })) : null }), (syncStatus || syncError) && !isRebasing ? (_jsx("button", { "data-testid": "sync-refresh-button", onClick: onRefreshSync, disabled: syncLoading, className: "text-muted-foreground hover:text-foreground inline-flex items-center rounded p-1 transition-colors disabled:opacity-50", "aria-label": "Refresh sync status", children: _jsx(RefreshCw, { className: `h-3.5 w-3.5 ${syncLoading ? 'animate-spin' : ''}` }) })) : null] }), isBehind && !isRebasing ? (_jsx(ActionButton, { label: "Rebase on Main", onClick: onRebaseOnMain, loading: false, error: !!rebaseError, icon: GitMerge, variant: "outline", size: "sm" })) : null, rebaseError ? _jsx("p", { className: "text-destructive text-xs", children: rebaseError }) : null] })] }));
13
- }
@@ -1,15 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
- import { BranchSyncStatus } from './branch-sync-status.js';
3
- declare const meta: Meta<typeof BranchSyncStatus>;
4
- export default meta;
5
- type Story = StoryObj<typeof BranchSyncStatus>;
6
- export declare const Loading: Story;
7
- export declare const UpToDate: Story;
8
- export declare const UpToDateNoAhead: Story;
9
- export declare const Behind: Story;
10
- export declare const BehindOneCommit: Story;
11
- export declare const Rebasing: Story;
12
- export declare const RebaseError: Story;
13
- export declare const FetchError: Story;
14
- export declare const Refreshing: Story;
15
- //# sourceMappingURL=branch-sync-status.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"branch-sync-status.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAoBvC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/C,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAM7B,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAMpB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAM7B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAOtB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC"}
@@ -1,86 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { fn } from '@storybook/test';
3
- import { BranchSyncStatus } from './branch-sync-status.js';
4
- const meta = {
5
- title: 'Drawers/Feature/Tabs/BranchSyncStatus',
6
- component: BranchSyncStatus,
7
- tags: ['autodocs'],
8
- parameters: {
9
- layout: 'fullscreen',
10
- },
11
- decorators: [
12
- (Story) => (_jsx("div", { style: { height: '200px', width: '400px', border: '1px solid var(--color-border)' }, children: _jsx(Story, {}) })),
13
- ],
14
- args: {
15
- onRefreshSync: fn(),
16
- onRebaseOnMain: fn(),
17
- rebaseLoading: false,
18
- rebaseError: null,
19
- },
20
- };
21
- export default meta;
22
- export const Loading = {
23
- args: {
24
- syncStatus: null,
25
- syncLoading: true,
26
- syncError: null,
27
- },
28
- };
29
- export const UpToDate = {
30
- args: {
31
- syncStatus: { ahead: 3, behind: 0, baseBranch: 'main', checkedAt: new Date().toISOString() },
32
- syncLoading: false,
33
- syncError: null,
34
- },
35
- };
36
- export const UpToDateNoAhead = {
37
- args: {
38
- syncStatus: { ahead: 0, behind: 0, baseBranch: 'main', checkedAt: new Date().toISOString() },
39
- syncLoading: false,
40
- syncError: null,
41
- },
42
- };
43
- export const Behind = {
44
- args: {
45
- syncStatus: { ahead: 5, behind: 3, baseBranch: 'main', checkedAt: new Date().toISOString() },
46
- syncLoading: false,
47
- syncError: null,
48
- },
49
- };
50
- export const BehindOneCommit = {
51
- args: {
52
- syncStatus: { ahead: 0, behind: 1, baseBranch: 'main', checkedAt: new Date().toISOString() },
53
- syncLoading: false,
54
- syncError: null,
55
- },
56
- };
57
- export const Rebasing = {
58
- args: {
59
- syncStatus: { ahead: 5, behind: 3, baseBranch: 'main', checkedAt: new Date().toISOString() },
60
- syncLoading: false,
61
- syncError: null,
62
- rebaseLoading: true,
63
- },
64
- };
65
- export const RebaseError = {
66
- args: {
67
- syncStatus: { ahead: 5, behind: 3, baseBranch: 'main', checkedAt: new Date().toISOString() },
68
- syncLoading: false,
69
- syncError: null,
70
- rebaseError: 'Rebase failed: working directory has uncommitted changes',
71
- },
72
- };
73
- export const FetchError = {
74
- args: {
75
- syncStatus: null,
76
- syncLoading: false,
77
- syncError: 'Failed to check sync status',
78
- },
79
- };
80
- export const Refreshing = {
81
- args: {
82
- syncStatus: { ahead: 3, behind: 0, baseBranch: 'main', checkedAt: new Date().toISOString() },
83
- syncLoading: true,
84
- syncError: null,
85
- },
86
- };
@@ -1,14 +0,0 @@
1
- export interface BranchSyncData {
2
- ahead: number;
3
- behind: number;
4
- baseBranch: string;
5
- checkedAt: string;
6
- }
7
- export interface UseBranchSyncStatusResult {
8
- data: BranchSyncData | null;
9
- loading: boolean;
10
- error: string | null;
11
- refresh: () => void;
12
- }
13
- export declare function useBranchSyncStatus(featureId: string | null): UseBranchSyncStatusResult;
14
- //# sourceMappingURL=use-branch-sync-status.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-branch-sync-status.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/use-branch-sync-status.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAOD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,yBAAyB,CA2DvF"}
@@ -1,67 +0,0 @@
1
- 'use client';
2
- import { useState, useCallback, useEffect, useRef } from 'react';
3
- import { getBranchSyncStatus } from '../app/actions/get-branch-sync-status.js';
4
- const CACHE_TTL_MS = 30_000;
5
- /** Module-level cache so data survives component remounts / drawer close-reopen. */
6
- const cache = new Map();
7
- export function useBranchSyncStatus(featureId) {
8
- const [data, setData] = useState(() => {
9
- if (!featureId)
10
- return null;
11
- const cached = cache.get(featureId);
12
- return cached ? cached.data : null;
13
- });
14
- const [loading, setLoading] = useState(false);
15
- const [error, setError] = useState(null);
16
- const featureIdRef = useRef(featureId);
17
- featureIdRef.current = featureId;
18
- const fetchStatus = useCallback(async (id) => {
19
- setLoading(true);
20
- setError(null);
21
- try {
22
- const result = await getBranchSyncStatus(id);
23
- // Guard against stale responses if featureId changed during fetch
24
- if (featureIdRef.current !== id)
25
- return;
26
- if (result.success && result.data) {
27
- const syncData = result.data;
28
- cache.set(id, { data: syncData, timestamp: Date.now() });
29
- setData(syncData);
30
- }
31
- else {
32
- setError(result.error ?? 'Failed to check sync status');
33
- }
34
- }
35
- catch {
36
- if (featureIdRef.current !== id)
37
- return;
38
- setError('Failed to check sync status');
39
- }
40
- finally {
41
- if (featureIdRef.current === id) {
42
- setLoading(false);
43
- }
44
- }
45
- }, []);
46
- // Auto-fetch on mount if cache is stale
47
- useEffect(() => {
48
- if (!featureId) {
49
- setData(null);
50
- setError(null);
51
- return;
52
- }
53
- const cached = cache.get(featureId);
54
- if (cached) {
55
- setData(cached.data);
56
- if (Date.now() - cached.timestamp < CACHE_TTL_MS)
57
- return;
58
- }
59
- void fetchStatus(featureId);
60
- }, [featureId, fetchStatus]);
61
- const refresh = useCallback(() => {
62
- if (featureId) {
63
- void fetchStatus(featureId);
64
- }
65
- }, [featureId, fetchStatus]);
66
- return { data, loading, error, refresh };
67
- }
@@ -1,4 +0,0 @@
1
- module.exports=[92658,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"registerServerReference",{enumerable:!0,get:function(){return d.registerServerReference}});let d=a.r(28478)},12581,(a,b,c)=>{"use strict";function d(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
2
- Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},12513,73101,65324,a=>{"use strict";var b=a.i(92658),c=a.i(74533);let d={platform:process.platform,exec:(a,b)=>(0,c.execSync)(a,b)},e={darwin:"osascript -e 'POSIX path of (choose folder with prompt \"Select a repository folder\")'",linux:'zenity --file-selection --directory --title="Select a repository folder" 2>/dev/null',win32:"powershell -NoProfile -Command \"Add-Type -AssemblyName System.Windows.Forms; $f = New-Object System.Windows.Forms.FolderBrowserDialog; $f.Description = 'Select a repository folder'; if ($f.ShowDialog() -eq 'OK') { $f.SelectedPath } else { exit 1 }\""};class f{deps;constructor(a={}){this.deps={...d,...a}}getCommand(){return e[this.deps.platform]??null}pickFolder(){let a=this.getCommand();if(!a)throw Error(`Unsupported platform: ${this.deps.platform}`);try{let b=this.deps.exec(a,{encoding:"utf-8",timeout:6e4}).trim();return b.length>0?b:null}catch(a){var b;if("object"==typeof(b=a)&&null!==b&&"status"in b&&1===a.status)return null;throw a}}}var g=a.i(12581);async function h(){let a=new f;try{return{path:a.pickFolder()}}catch(a){return{path:null,error:a instanceof Error?a.message:"Failed to open folder dialog"}}}(0,g.ensureServerEntryExports)([h]),(0,b.registerServerReference)(h,"0041831b0d78250e4335442c501be4c4b165b7d756",null),a.s(["pickFolder",()=>h],12513);var i=a.i(96380);class j extends Error{constructor(a,b){super(a),this.name="GitHubAuthError",Object.setPrototypeOf(this,new.target.prototype),b&&(this.cause=b)}}class k extends Error{constructor(a,b){super(a),this.name="GitHubCloneError",Object.setPrototypeOf(this,new.target.prototype),b&&(this.cause=b)}}class l extends Error{constructor(a,b){super(a),this.name="GitHubUrlParseError",Object.setPrototypeOf(this,new.target.prototype),b&&(this.cause=b)}}async function m(a){try{let b=(0,i.resolve)("ListGitHubRepositoriesUseCase");return{repos:await b.execute(a)}}catch(a){if(a instanceof j)return{error:"GitHub CLI is not authenticated. Run `gh auth login` to sign in."};return{error:a instanceof Error?a.message:"Failed to list repositories"}}}async function n(a){let{url:b,dest:c}=a;if(!b?.trim())return{error:"GitHub URL is required"};try{let a=(0,i.resolve)("ImportGitHubRepositoryUseCase");return{repository:await a.execute({url:b,dest:c})}}catch(a){if(a instanceof j)return{error:"GitHub CLI is not authenticated. Run `gh auth login` to sign in."};if(a instanceof l)return{error:`Invalid GitHub URL: ${a.message}`};if(a instanceof k)return{error:`Clone failed: ${a.message}`};return{error:a instanceof Error?a.message:"Failed to import repository"}}}(0,g.ensureServerEntryExports)([m]),(0,b.registerServerReference)(m,"405785b8cc4bb8ae2275cbdbc38f6b85ed53506811",null),a.s(["listGitHubRepositories",()=>m],73101),(0,g.ensureServerEntryExports)([n]),(0,b.registerServerReference)(n,"40ea01625b426f01fe017b1f3f1ec873a836745752",null),a.s(["importGitHubRepository",()=>n],65324)},33841,46646,68670,85321,a=>{"use strict";var b=a.i(92658),c=a.i(2157),d=a.i(96380);let e=()=>void 0;function f(a){let b=!!process.env.DEBUG;return{info:b?(...b)=>console.info(a,...b):e,debug:b?(...b)=>console.debug(a,...b):e,warn:(...b)=>console.warn(a,...b),error:(...b)=>console.error(a,...b)}}var g=a.i(29918),h=a.i(81719),i=a.i(12581);let j=f("[deployFeature]");async function k(a){if(j.info(`called — featureId="${a}"`),!a?.trim())return j.warn("rejected — featureId is empty"),{success:!1,error:"featureId is required"};try{let b=(0,d.resolve)("IFeatureRepository"),e=await b.findById(a);if(!e)return j.warn(`feature not found in repository: "${a}"`),{success:!1,error:`Feature not found: ${a}`};j.info(`feature found — repositoryPath="${e.repositoryPath}", branch="${e.branch}"`);let f=(0,g.computeWorktreePath)(e.repositoryPath,e.branch);if(j.info(`computed worktreePath="${f}"`),!(0,c.existsSync)(f))return j.warn(`worktree path does not exist on disk: "${f}"`),{success:!1,error:`Worktree path does not exist: ${f}`};return j.info("worktree path exists, calling deploymentService.start()"),(0,d.resolve)("IDeploymentService").start(a,f,"feature"),j.info("start() returned successfully — state=Booting"),{success:!0,state:h.DeploymentState.Booting}}catch(b){let a=b instanceof Error?b.message:"Failed to deploy feature";return j.error(`error: ${a}`,b),{success:!1,error:a}}}(0,i.ensureServerEntryExports)([k]),(0,b.registerServerReference)(k,"404b3b564e1b62eec99aa45aed68a91c3d627585ce",null),a.s(["deployFeature",()=>k],33841);var l=a.i(50227);let m=f("[deployRepository]");async function n(a){if(m.info(`called — repositoryPath="${a}"`),!a||!(0,l.isAbsolute)(a))return m.warn("rejected — not an absolute path"),{success:!1,error:"repositoryPath must be an absolute path"};try{if(!(0,c.existsSync)(a))return m.warn(`directory does not exist: "${a}"`),{success:!1,error:`Directory does not exist: ${a}`};return m.info("directory exists, calling deploymentService.start()"),(0,d.resolve)("IDeploymentService").start(a,a,"repository"),m.info("start() returned successfully — state=Booting"),{success:!0,state:h.DeploymentState.Booting}}catch(b){let a=b instanceof Error?b.message:"Failed to deploy repository";return m.error(`error: ${a}`,b),{success:!1,error:a}}}async function o(a){if(!a?.trim())return{success:!1,error:"targetId is required"};try{let b=(0,d.resolve)("IDeploymentService");return await b.stop(a),{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to stop deployment"}}}async function p(a){return a?.trim()?(0,d.resolve)("IDeploymentService").getStatus(a):null}(0,i.ensureServerEntryExports)([n]),(0,b.registerServerReference)(n,"40f7ce0079616fd24f27c6e0c42886c882312d9822",null),a.s(["deployRepository",()=>n],46646),(0,i.ensureServerEntryExports)([o]),(0,b.registerServerReference)(o,"4090645a7ee7c05ff506ad9ff09c235951b5a01fa1",null),a.s(["stopDeployment",()=>o],68670),(0,i.ensureServerEntryExports)([p]),(0,b.registerServerReference)(p,"40179f75dcebaa8f4d42230cc47ef26853e8562dff",null),a.s(["getDeploymentStatus",()=>p],85321)},94691,a=>{"use strict";var b=a.i(92658),c=a.i(96380);async function d(a){return a?.trim()?(0,c.resolve)("IDeploymentService").getLogs(a):null}(0,a.i(12581).ensureServerEntryExports)([d]),(0,b.registerServerReference)(d,"40b852069ba9e1d43ad04e5dab3ce0cfe804aa2c53",null),a.s(["getDeploymentLogs",()=>d])},23504,27900,a=>{"use strict";var b=a.i(92658),c=a.i(96380);let d={"claude-opus-4-6":{displayName:"Opus 4.6",description:"Most capable, complex tasks"},"claude-sonnet-4-6":{displayName:"Sonnet 4.6",description:"Fast & balanced"},"claude-haiku-4-5":{displayName:"Haiku 4.5",description:"Lightweight & quick"},"gemini-3.1-pro":{displayName:"Gemini 3.1 Pro",description:"Advanced reasoning"},"gemini-3-flash":{displayName:"Gemini 3 Flash",description:"Ultra-fast responses"},"gemini-2.5-pro":{displayName:"Gemini 2.5 Pro",description:"Reliable workhorse"},"gemini-2.5-flash":{displayName:"Gemini 2.5 Flash",description:"Speed-optimized"},"gpt-5.4-high":{displayName:"GPT-5.4",description:"Latest reasoning model"},"gpt-5.2":{displayName:"GPT-5.2",description:"Flagship model"},"gpt-5.3-codex":{displayName:"GPT-5.3 Codex",description:"Code specialist"},"composer-1.5":{displayName:"Composer 1.5",description:"Multi-file editing"},"grok-code":{displayName:"Grok Code",description:"xAI code model"},"gpt-8":{displayName:"GPT-8",description:"Writes code before you think it"},"opus-7":{displayName:"Opus 7",description:"Achieved consciousness, ships on time"}},e={displayName:"",description:""};function f(a){let b=d[a];return b||{...e,displayName:a.replace(/^claude-/,"").replace(/^gemini-/,"Gemini ").replace(/^gpt-/,"GPT-").replace(/-/g," ").replace(/\b\w/g,a=>a.toUpperCase())}}var g=a.i(12581);let h={"claude-code":"Claude Code",cursor:"Cursor CLI","gemini-cli":"Gemini CLI",dev:"Demo"},i={"claude-code":0,cursor:1,"gemini-cli":2,dev:99};async function j(){try{let a=(0,c.resolve)("IAgentExecutorFactory");return a.getSupportedAgents().map(b=>({agentType:b,label:h[b]??b,models:a.getSupportedModels(b).map(a=>({id:a,...f(a)}))})).map(a=>"dev"===a.agentType&&0===a.models.length?{...a,models:[{id:"gpt-8",...f("gpt-8")},{id:"opus-7",...f("opus-7")}]}:a).filter(a=>a.models.length>0).sort((a,b)=>(i[a.agentType]??50)-(i[b.agentType]??50))}catch{return[]}}(0,g.ensureServerEntryExports)([j]),(0,b.registerServerReference)(j,"005b2f02900e8d8cc299fd897d83bce8be354524d5",null),a.s(["getAllAgentModels",()=>j],23504);var k=a.i(33244);async function l(a,b){if(!a.trim())return{ok:!1,error:"agent type is required"};try{let d=(0,c.resolve)("CompleteWebOnboardingUseCase"),e=await d.execute({agentType:a.trim(),model:b});return(0,k.resetSettings)(),(0,k.initializeSettings)(e),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:"Failed to update agent and model"}}}(0,g.ensureServerEntryExports)([l]),(0,b.registerServerReference)(l,"60a9491bb14c9949e95882d00c6620e1ec7a61aa40",null),a.s(["updateAgentAndModel",()=>l],27900)},31747,a=>{"use strict";var b=a.i(81719),c=a.i(14703),d=a.i(79372),e=a.i(29918);function f(a,f,g){let h=(f?.status===b.AgentRunStatus.running||f?.status===b.AgentRunStatus.pending)&&f?.pid?(0,d.isProcessAlive)(f.pid):void 0;return{name:a.name,description:a.description??a.slug,featureId:a.id,lifecycle:(0,c.deriveLifecycle)(a,f),repositoryPath:a.repositoryPath,branch:a.branch,worktreePath:a.worktreePath??(0,e.computeWorktreePath)(a.repositoryPath,a.branch),specPath:a.specPath,state:(0,c.deriveNodeState)(a,f,void 0!==h?{isPidAlive:h}:void 0),progress:(0,c.deriveProgress)(a),summary:a.description,userQuery:a.userQuery,createdAt:a.createdAt instanceof Date?a.createdAt.getTime():a.createdAt,...a.fast&&{fastMode:!0},approvalGates:a.approvalGates,push:a.push,openPr:a.openPr,...g?.enableEvidence!=null&&{enableEvidence:g.enableEvidence},...g?.commitEvidence!=null&&{commitEvidence:g.commitEvidence},...g?.ciWatchEnabled!=null&&{ciWatchEnabled:g.ciWatchEnabled},...g?.hideCiStatus!=null&&{hideCiStatus:g.hideCiStatus},...g?.repositoryName&&{repositoryName:g.repositoryName},...g?.baseBranch&&{baseBranch:g.baseBranch},...g?.oneLiner&&{oneLiner:g.oneLiner},...g?.remoteUrl&&{remoteUrl:g.remoteUrl},...f?.agentType&&{agentType:f.agentType},...f?.modelId&&{modelId:f.modelId},...f?.error&&{errorMessage:f.error},...null!=a.agentRunId&&{hasAgentRun:!0},...null!=a.plan&&{hasPlan:!0},...a.pr&&{pr:{url:a.pr.url,number:a.pr.number,status:a.pr.status,ciStatus:a.pr.ciStatus,commitHash:a.pr.commitHash,mergeable:a.pr.mergeable}}}}a.s(["buildFeatureNodeData",()=>f])},61402,76052,13008,74607,6542,740,12104,70319,54433,59020,a=>{"use strict";var b=a.i(92658),c=a.i(96380),d=a.i(12581);async function e(a,b){if(!a.trim())return{approved:!1,error:"Feature id is required"};try{let d=(0,c.resolve)("IFeatureRepository"),e=await d.findById(a);if(!e)return{approved:!1,error:"Feature not found"};if(!e.agentRunId)return{approved:!1,error:"Feature has no agent run"};let f=(0,c.resolve)("ApproveAgentRunUseCase"),g=await f.execute(e.agentRunId,b);if(!g.approved)return{approved:!1,error:g.reason};return{approved:!0}}catch(a){return{approved:!1,error:a instanceof Error?a.message:"Failed to approve feature"}}}async function f(a,b,d){if(!a.trim())return{rejected:!1,error:"Feature id is required"};if(!b.trim())return{rejected:!1,error:"Feedback is required"};try{let e=(0,c.resolve)("IFeatureRepository"),f=await e.findById(a);if(!f)return{rejected:!1,error:"Feature not found"};if(!f.agentRunId)return{rejected:!1,error:"Feature has no agent run"};let g=(0,c.resolve)("RejectAgentRunUseCase"),h=await g.execute(f.agentRunId,b,d);if(!h.rejected)return{rejected:!1,error:h.reason};return{rejected:!0,iteration:h.iteration,iterationWarning:h.iterationWarning}}catch(a){return{rejected:!1,error:a instanceof Error?a.message:"Failed to reject feature"}}}async function g(a){if(!a.trim())return{error:"Feature id is required"};try{let b=(0,c.resolve)("GetFeatureArtifactUseCase"),d=await b.execute(a),e={question:"Goal",context:d.oneLiner,questions:d.openQuestions.map((a,b)=>({id:`q-${b}`,question:a.question,type:"select",options:(a.options??[]).map((a,c)=>({id:`q-${b}-opt-${c}`,label:a.option,rationale:a.description,...a.selected?{recommended:!0}:{}}))})),finalAction:{id:"approve-reqs",label:"Approve Requirements",description:"Finalize and lock the requirements for implementation"}},f={question:"Goal",context:d.oneLiner,questions:d.openQuestions.filter(a=>a.resolved).map(a=>{let b=a.options?.find(a=>a.selected);return{question:a.question,selectedOption:b?.option??a.answer??"N/A",rationale:a.selectionRationale??b?.description??"",wasRecommended:!1}})};return{questionnaire:e,productDecisions:f,artifact:d}}catch(a){return{error:a instanceof Error?a.message:"Failed to load feature artifact"}}}async function h(a){if(!a.trim())return{error:"Feature id is required"};try{var b;let d=(0,c.resolve)("GetResearchArtifactUseCase");return{techDecisions:{name:(b=await d.execute(a)).name,summary:b.summary,decisions:b.decisions,technologies:b.technologies}}}catch(a){return{error:a instanceof Error?a.message:"Failed to load research artifact"}}}(0,d.ensureServerEntryExports)([e]),(0,b.registerServerReference)(e,"603afe8655caa38f0567fe15352a9ff902b73bed68",null),a.s(["approveFeature",()=>e],61402),(0,d.ensureServerEntryExports)([f]),(0,b.registerServerReference)(f,"703fee8308cb38263d7fe356d8717e2cd410163cfa",null),a.s(["rejectFeature",()=>f],76052),(0,d.ensureServerEntryExports)([g]),(0,b.registerServerReference)(g,"404973ff74bd0275a2e5a573169d4728ec49aae26f",null),a.s(["getFeatureArtifact",()=>g],13008),(0,d.ensureServerEntryExports)([h]),(0,b.registerServerReference)(h,"401087eb15e46e3ebcbeb9b8f1510b7195c9f7f8be",null),a.s(["getResearchArtifact",()=>h],74607);var i=a.i(66680),j=a.i(2157),k=a.i(50227),l=a.i(29918),m=a.i(32278),n=a.i(33244);async function o(a){if(!a.trim())return{error:"Feature id is required"};try{var b,d;let e,f,g=(0,c.resolve)("IFeatureRepository"),h=await g.findById(a);if(!h)return{error:"Feature not found"};let{workflow:o}=(0,n.getSettings)(),p=h.pr?{url:h.pr.url,number:h.pr.number,status:h.pr.status,commitHash:h.pr.commitHash,ciStatus:h.pr.ciStatus,mergeable:h.pr.mergeable}:void 0,q=h.worktreePath??(h.repositoryPath&&h.branch?(0,l.computeWorktreePath)(h.repositoryPath,h.branch):null),r=(0,c.resolve)("IGitPrService"),s=q??h.repositoryPath??null,t="main";if(s)try{t=await r.getDefaultBranch(s)}catch{}let u=h.branch?{source:h.branch,target:t}:void 0,v=h.repositoryPath?(b=h.repositoryPath,f=(0,i.createHash)("sha256").update(b).digest("hex").slice(0,16),(0,k.join)((0,m.getShepHomeDir)(),"repos",f,"evidence",a).replace(/\\/g,"/")):q?(0,k.join)((0,k.dirname)((0,k.dirname)(q)),"evidence",a).replace(/\\/g,"/"):null;if(v)try{let a=(0,k.join)(v,"manifest.json");(0,j.existsSync)(a)&&(d=JSON.parse((0,j.readFileSync)(a,"utf-8")),e=d.map(a=>{if(a.relativePath.startsWith("/")){if((0,j.existsSync)(a.relativePath))return a;let b=(0,k.join)(v,(0,k.basename)(a.relativePath)).replace(/\\/g,"/");return(0,j.existsSync)(b)?{...a,relativePath:b}:a}let b=(0,k.join)(v,(0,k.basename)(a.relativePath)).replace(/\\/g,"/");return{...a,relativePath:b}}))}catch{}if(!q)return{pr:p,branch:u,evidence:e,warning:p?void 0:"No PR or diff data available",hideCiStatus:o.hideCiStatus};try{let[a,b]=await Promise.all([r.getPrDiffSummary(q,t),r.getFileDiffs(q,t).catch(()=>void 0)]);return{pr:p,branch:u,diffSummary:a,fileDiffs:b,evidence:e,hideCiStatus:o.hideCiStatus}}catch{return{pr:p,branch:u,evidence:e,warning:"Diff statistics unavailable",hideCiStatus:o.hideCiStatus}}}catch(a){return{error:a instanceof Error?a.message:"Failed to load merge review data"}}}async function p(a){if(!a.trim())return{error:"Feature id is required"};try{let b=(0,c.resolve)("IPhaseTimingRepository"),d=(await b.findByFeatureId(a)).map(a=>({agentRunId:a.agentRunId,phase:a.phase,startedAt:a.startedAt,completedAt:a.completedAt,durationMs:null!=a.durationMs?Number(a.durationMs):void 0,waitingApprovalAt:a.waitingApprovalAt,approvalWaitMs:null!=a.approvalWaitMs?Number(a.approvalWaitMs):void 0,inputTokens:null!=a.inputTokens?Number(a.inputTokens):void 0,outputTokens:null!=a.outputTokens?Number(a.outputTokens):void 0,cacheCreationInputTokens:null!=a.cacheCreationInputTokens?Number(a.cacheCreationInputTokens):void 0,cacheReadInputTokens:null!=a.cacheReadInputTokens?Number(a.cacheReadInputTokens):void 0,costUsd:null!=a.costUsd?Number(a.costUsd):void 0,numTurns:a.numTurns??void 0,durationApiMs:null!=a.durationApiMs?Number(a.durationApiMs):void 0,exitCode:a.exitCode??void 0,errorMessage:a.errorMessage??void 0,prompt:a.prompt??void 0})),e=await q(a);return{timings:d,rejectionFeedback:e}}catch(a){return{error:a instanceof Error?a.message:"Failed to load phase timings"}}}async function q(b){try{let d=(0,c.resolve)("IFeatureRepository"),e=await d.findById(b);if(!e?.specPath)return[];let{readFileSync:f}=await a.A(6714),{join:g}=await a.A(11105),h=(await a.A(29718)).default,i=f(g(e.specPath,"spec.yaml"),"utf-8"),j=h.load(i);if(!Array.isArray(j?.rejectionFeedback))return[];return j.rejectionFeedback.map(a=>({iteration:Number(a.iteration??1),message:String(a.message??""),phase:a.phase?String(a.phase):void 0,timestamp:a.timestamp?String(a.timestamp):void 0,attachments:Array.isArray(a.attachments)?a.attachments.map(String):void 0}))}catch{return[]}}async function r(a){if(!a.trim())return{error:"Feature id is required"};try{let b=(0,c.resolve)("IFeatureRepository"),d=await b.findById(a);if(!d)return{error:"Feature not found"};if(!d.plan)return{plan:void 0};return{plan:{state:d.plan.state,overview:d.plan.overview,tasks:d.plan.tasks.map(a=>({title:a.title??"",description:a.description??"",state:a.state,actionItems:(a.actionItems??[]).map(a=>({name:a.name,description:a.description,acceptanceCriteria:(a.acceptanceCriteria??[]).map(a=>({description:a.description,verified:a.verified}))}))}))}}}catch(a){return{error:a instanceof Error?a.message:"Failed to load feature plan"}}}async function s(a){if(!a?.trim())return{success:!1,error:"Feature id is required"};try{let b=(0,c.resolve)("RebaseFeatureOnMainUseCase");return await b.execute(a),{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to rebase feature"}}}(0,d.ensureServerEntryExports)([o]),(0,b.registerServerReference)(o,"40460c9cb2ef5612698b17a859581a2b6ff9e164af",null),a.s(["getMergeReviewData",()=>o],6542),(0,d.ensureServerEntryExports)([p]),(0,b.registerServerReference)(p,"40f3ec6195b82578094c590baf9188aab30482a337",null),a.s(["getFeaturePhaseTimings",()=>p],740),(0,d.ensureServerEntryExports)([r]),(0,b.registerServerReference)(r,"40d9f3456354a7e8c3ef0095f5674137ac52de83df",null),a.s(["getFeaturePlan",()=>r],12104),(0,d.ensureServerEntryExports)([s]),(0,b.registerServerReference)(s,"40809acd02c6cbbdc1eab72378f145be89579f3722",null),a.s(["rebaseFeature",()=>s],70319);var t=a.i(31747);async function u(a){try{let b=(0,c.resolve)("IFeatureRepository"),d=(0,c.resolve)("IAgentRunRepository"),e=(0,c.resolve)("IRepositoryRepository"),f=(0,c.resolve)("IGitPrService"),g=(0,c.resolve)("GetFeatureArtifactUseCase"),h=await b.findById(a);if(!h)return null;let i=h.agentRunId?await d.findById(h.agentRunId):null,[j,k,l,m]=await Promise.all([e.findByPath(h.repositoryPath).catch(()=>null),f.getDefaultBranch(h.repositoryPath).catch(()=>"main"),g.execute(a).catch(()=>null),f.getRemoteUrl(h.repositoryPath).catch(()=>null)]),{workflow:o}=(0,n.getSettings)();return(0,t.buildFeatureNodeData)(h,i,{repositoryName:j?.name,baseBranch:k,oneLiner:l?.oneLiner,remoteUrl:m??void 0,enableEvidence:o.enableEvidence,commitEvidence:o.commitEvidence,hideCiStatus:o.hideCiStatus})}catch{return null}}async function v(a){if(!a?.trim())return{success:!1,error:"Feature id is required"};try{let b=(0,c.resolve)("GetBranchSyncStatusUseCase"),d=await b.execute(a);return{success:!0,data:{...d,checkedAt:new Date().toISOString()}}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to get branch sync status"}}}(0,d.ensureServerEntryExports)([u]),(0,b.registerServerReference)(u,"402c811a8aed03ab2b779f88e88b75066982206feb",null),a.s(["getFeatureDrawerData",()=>u],54433),(0,d.ensureServerEntryExports)([v]),(0,b.registerServerReference)(v,"40608984225545978b8ee69c042ca11a3417ed7428",null),a.s(["getBranchSyncStatus",()=>v],59020)},44226,a=>{"use strict";var b=a.i(12513),c=a.i(73101),d=a.i(65324),e=a.i(33841),f=a.i(46646),g=a.i(68670),h=a.i(85321),i=a.i(84095),j=a.i(56799),k=a.i(80496),l=a.i(93225),m=a.i(94691),n=a.i(41872),o=a.i(9959),p=a.i(79124),q=a.i(23504),r=a.i(27900),s=a.i(50845),t=a.i(26604),u=a.i(54723),v=a.i(18942),w=a.i(49560),x=a.i(39353),y=a.i(29207),z=a.i(61402),A=a.i(76052),B=a.i(13008),C=a.i(74607),D=a.i(6542),E=a.i(740),F=a.i(12104),G=a.i(70319),H=a.i(54433),I=a.i(59020);a.s([],57856),a.i(57856),a.s(["0041831b0d78250e4335442c501be4c4b165b7d756",()=>b.pickFolder,"004f1d877eb4492bc12a2fed2948fa4ce86c6f264a",()=>o.checkAgentAuth,"005b2f02900e8d8cc299fd897d83bce8be354524d5",()=>q.getAllAgentModels,"008d3281ea17aa1a9e41ca90dda2a4a87d0e875255",()=>p.checkToolStatus,"00917a586d67394b3da6d0baf52f29254f8e982bb8",()=>n.isAgentSetupComplete,"401087eb15e46e3ebcbeb9b8f1510b7195c9f7f8be",()=>C.getResearchArtifact,"40179f75dcebaa8f4d42230cc47ef26853e8562dff",()=>h.getDeploymentStatus,"402c811a8aed03ab2b779f88e88b75066982206feb",()=>H.getFeatureDrawerData,"4038d313048f93ca2b5bb727af52fbf062a939e434",()=>t.resumeFeature,"40460c9cb2ef5612698b17a859581a2b6ff9e164af",()=>D.getMergeReviewData,"404973ff74bd0275a2e5a573169d4728ec49aae26f",()=>B.getFeatureArtifact,"404b3b564e1b62eec99aa45aed68a91c3d627585ce",()=>e.deployFeature,"405785b8cc4bb8ae2275cbdbc38f6b85ed53506811",()=>c.listGitHubRepositories,"405a693dd4183b8f50fb56aff77d6b792630e8f06f",()=>k.openFolder,"405b8fa8c3dd2d9ee7c67c452864849db475977fb4",()=>j.openShell,"40608984225545978b8ee69c042ca11a3417ed7428",()=>I.getBranchSyncStatus,"406dcbfcf5cc76ec2abe200185050081c0a055ece2",()=>u.startFeature,"40809acd02c6cbbdc1eab72378f145be89579f3722",()=>G.rebaseFeature,"408fd0e05d38f95e6006e8c4b6125ad4e88c6bd3ac",()=>y.getFeatureMetadata,"4090645a7ee7c05ff506ad9ff09c235951b5a01fa1",()=>g.stopDeployment,"4094090e0a86ff88b41b64409830dd4c82879348ef",()=>i.openIde,"40b095ec1f6a3aefc9c114bec56318fd63a14c6870",()=>v.stopFeature,"40b7cb79adf94c2a0093346df280d7aebf69b38112",()=>w.addRepository,"40b852069ba9e1d43ad04e5dab3ce0cfe804aa2c53",()=>m.getDeploymentLogs,"40d0bb1c5483e4fe6899b41d7e5a4c0dda9245340b",()=>l.syncRepository,"40d9f3456354a7e8c3ef0095f5674137ac52de83df",()=>F.getFeaturePlan,"40e71d8ef54e483ed94ddb5e37507c09fb5c4408c4",()=>x.deleteRepository,"40ea01625b426f01fe017b1f3f1ec873a836745752",()=>d.importGitHubRepository,"40f3ec6195b82578094c590baf9188aab30482a337",()=>E.getFeaturePhaseTimings,"40f7ce0079616fd24f27c6e0c42886c882312d9822",()=>f.deployRepository,"603afe8655caa38f0567fe15352a9ff902b73bed68",()=>z.approveFeature,"60a9491bb14c9949e95882d00c6620e1ec7a61aa40",()=>r.updateAgentAndModel,"703fee8308cb38263d7fe356d8717e2cd410163cfa",()=>A.rejectFeature,"78bd5950034f669bfefbbd7358bf25fbfcb819efec",()=>s.deleteFeature],44226)},6714,a=>{a.v(a=>Promise.resolve().then(()=>a(2157)))},11105,a=>{a.v(a=>Promise.resolve().then(()=>a(50227)))},29718,a=>{a.v(b=>Promise.all(["server/chunks/ssr/90b01_js-yaml_dist_js-yaml_mjs_c897fb57._.js"].map(b=>a.l(b))).then(()=>b(32996)))}];
3
-
4
- //# sourceMappingURL=%5Broot-of-the-server%5D__1626f5d7._.js.map