@shepai/cli 1.136.1-pr440.ded6b06 → 1.137.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. package/apis/json-schema/Feature.yaml +0 -3
  2. package/apis/json-schema/FeatureFlags.yaml +5 -0
  3. package/apis/json-schema/SdlcLifecycle.yaml +0 -1
  4. package/dist/packages/core/src/application/ports/output/repositories/feature-repository.interface.d.ts +0 -2
  5. package/dist/packages/core/src/application/ports/output/repositories/feature-repository.interface.d.ts.map +1 -1
  6. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +91 -5
  7. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
  8. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.js +6 -4
  9. package/dist/packages/core/src/application/use-cases/features/get-branch-sync-status.use-case.d.ts +25 -0
  10. package/dist/packages/core/src/application/use-cases/features/get-branch-sync-status.use-case.d.ts.map +1 -0
  11. package/dist/packages/core/src/application/use-cases/features/get-branch-sync-status.use-case.js +62 -0
  12. package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.d.ts +34 -0
  13. package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.d.ts.map +1 -0
  14. package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.js +139 -0
  15. package/dist/packages/core/src/application/use-cases/repositories/sync-repository-main.use-case.d.ts +16 -0
  16. package/dist/packages/core/src/application/use-cases/repositories/sync-repository-main.use-case.d.ts.map +1 -0
  17. package/dist/packages/core/src/application/use-cases/repositories/sync-repository-main.use-case.js +43 -0
  18. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  19. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +1 -0
  20. package/dist/packages/core/src/domain/generated/output.d.ts +5 -6
  21. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  22. package/dist/packages/core/src/domain/generated/output.js +0 -1
  23. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  24. package/dist/packages/core/src/infrastructure/di/container.js +20 -10
  25. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts +0 -1
  26. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts.map +1 -1
  27. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.js +0 -6
  28. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +1 -0
  29. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  30. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +2 -0
  31. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/042-add-feature-flag-git-rebase-sync.d.ts +11 -0
  32. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/042-add-feature-flag-git-rebase-sync.d.ts.map +1 -0
  33. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/042-add-feature-flag-git-rebase-sync.js +17 -0
  34. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts.map +1 -1
  35. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +2 -7
  36. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
  37. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +3 -2
  38. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.d.ts +35 -0
  39. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.d.ts.map +1 -0
  40. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.js +66 -0
  41. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.d.ts +42 -0
  42. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.d.ts.map +1 -0
  43. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.js +169 -0
  44. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +10 -0
  45. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
  46. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +150 -0
  47. package/dist/src/presentation/cli/commands/feat/index.d.ts.map +1 -1
  48. package/dist/src/presentation/cli/commands/feat/index.js +1 -5
  49. package/dist/src/presentation/cli/commands/feat/ls.command.d.ts.map +1 -1
  50. package/dist/src/presentation/cli/commands/feat/ls.command.js +0 -5
  51. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.d.ts.map +1 -1
  52. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.js +6 -18
  53. package/dist/src/presentation/web/app/actions/get-branch-sync-status.d.ts +11 -0
  54. package/dist/src/presentation/web/app/actions/get-branch-sync-status.d.ts.map +1 -0
  55. package/dist/src/presentation/web/app/actions/get-branch-sync-status.js +22 -0
  56. package/dist/src/presentation/web/app/actions/rebase-feature.d.ts +5 -0
  57. package/dist/src/presentation/web/app/actions/rebase-feature.d.ts.map +1 -0
  58. package/dist/src/presentation/web/app/actions/rebase-feature.js +16 -0
  59. package/dist/src/presentation/web/app/actions/sync-repository.d.ts +5 -0
  60. package/dist/src/presentation/web/app/actions/sync-repository.d.ts.map +1 -0
  61. package/dist/src/presentation/web/app/actions/sync-repository.js +16 -0
  62. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  63. package/dist/src/presentation/web/app/api/agent-events/route.js +0 -1
  64. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  65. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +16 -1
  66. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.d.ts.map +1 -1
  67. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.js +4 -4
  68. package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.d.ts +4 -0
  69. package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.d.ts.map +1 -1
  70. package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.js +32 -1
  71. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map +1 -1
  72. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +1 -0
  73. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.d.ts +12 -0
  74. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.d.ts.map +1 -0
  75. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.js +13 -0
  76. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.stories.d.ts +15 -0
  77. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.stories.d.ts.map +1 -0
  78. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.stories.js +86 -0
  79. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +9 -1
  80. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -1
  81. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +2 -2
  82. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts +9 -1
  83. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts.map +1 -1
  84. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +3 -2
  85. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts +6 -0
  86. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts.map +1 -1
  87. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.js +34 -0
  88. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
  89. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +0 -6
  90. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +1 -3
  91. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  92. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +1 -11
  93. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  94. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +2 -16
  95. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts +0 -5
  96. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
  97. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +1 -75
  98. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.d.ts.map +1 -1
  99. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.js +3 -0
  100. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.d.ts.map +1 -1
  101. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.js +5 -3
  102. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts +2 -0
  103. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts.map +1 -1
  104. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.js +21 -0
  105. package/dist/src/presentation/web/components/common/repository-node/repository-node.js +1 -1
  106. package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.d.ts +4 -0
  107. package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.d.ts.map +1 -1
  108. package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.js +11 -0
  109. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  110. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +4 -13
  111. package/dist/src/presentation/web/components/features/control-center/control-center.stories.d.ts +0 -6
  112. package/dist/src/presentation/web/components/features/control-center/control-center.stories.d.ts.map +1 -1
  113. package/dist/src/presentation/web/components/features/control-center/control-center.stories.js +0 -70
  114. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +0 -6
  115. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  116. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +2 -43
  117. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts.map +1 -1
  118. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js +3 -0
  119. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +1 -1
  120. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.js +3 -0
  121. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  122. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +5 -0
  123. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
  124. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +1 -0
  125. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
  126. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +1 -0
  127. package/dist/src/presentation/web/hooks/feature-flags-context.d.ts.map +1 -1
  128. package/dist/src/presentation/web/hooks/feature-flags-context.js +1 -0
  129. package/dist/src/presentation/web/hooks/sidebar-features-context.d.ts.map +1 -1
  130. package/dist/src/presentation/web/hooks/sidebar-features-context.js +0 -1
  131. package/dist/src/presentation/web/hooks/use-branch-sync-status.d.ts +14 -0
  132. package/dist/src/presentation/web/hooks/use-branch-sync-status.d.ts.map +1 -0
  133. package/dist/src/presentation/web/hooks/use-branch-sync-status.js +67 -0
  134. package/dist/src/presentation/web/hooks/use-graph-state.d.ts +1 -1
  135. package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -1
  136. package/dist/src/presentation/web/hooks/use-graph-state.js +2 -17
  137. package/dist/src/presentation/web/lib/derive-graph.d.ts +0 -4
  138. package/dist/src/presentation/web/lib/derive-graph.d.ts.map +1 -1
  139. package/dist/src/presentation/web/lib/derive-graph.js +0 -12
  140. package/dist/src/presentation/web/lib/feature-flags.d.ts +2 -0
  141. package/dist/src/presentation/web/lib/feature-flags.d.ts.map +1 -1
  142. package/dist/src/presentation/web/lib/feature-flags.js +5 -0
  143. package/dist/tsconfig.build.tsbuildinfo +1 -1
  144. package/package.json +1 -1
  145. package/web/.next/BUILD_ID +1 -1
  146. package/web/.next/build-manifest.json +2 -2
  147. package/web/.next/fallback-build-manifest.json +2 -2
  148. package/web/.next/prerender-manifest.json +3 -3
  149. package/web/.next/required-server-files.js +2 -2
  150. package/web/.next/required-server-files.json +2 -2
  151. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +65 -80
  152. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +1 -1
  153. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  154. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  155. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +65 -80
  156. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  157. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  158. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  159. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +107 -92
  160. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -1
  161. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  162. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  163. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +107 -92
  164. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  165. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  166. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  167. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +61 -76
  168. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  169. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  170. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  171. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +65 -80
  172. package/web/.next/server/app/(dashboard)/create/page.js +1 -1
  173. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  174. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  175. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +107 -92
  176. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -1
  177. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  178. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  179. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +107 -92
  180. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  181. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  182. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  183. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +61 -76
  184. package/web/.next/server/app/(dashboard)/page.js +1 -1
  185. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  186. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  187. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +61 -76
  188. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  189. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  190. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  191. package/web/.next/server/app/_global-error.html +2 -2
  192. package/web/.next/server/app/_global-error.rsc +1 -1
  193. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  194. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  195. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  196. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  197. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  198. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +3 -3
  199. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  200. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  201. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  202. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  203. package/web/.next/server/app/settings/page/server-reference-manifest.json +8 -8
  204. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  205. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  206. package/web/.next/server/app/skills/page/server-reference-manifest.json +8 -8
  207. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  208. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  209. package/web/.next/server/app/tools/page/server-reference-manifest.json +8 -8
  210. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  211. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  212. package/web/.next/server/app/version/page/server-reference-manifest.json +3 -3
  213. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  214. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  215. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  216. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
  217. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
  218. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  219. package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js +1 -1
  220. package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js.map +1 -1
  221. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  222. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  223. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  224. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  225. package/web/.next/server/chunks/ssr/[root-of-the-server]__1626f5d7._.js +4 -0
  226. package/web/.next/server/chunks/ssr/[root-of-the-server]__1626f5d7._.js.map +1 -0
  227. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  228. package/web/.next/server/chunks/ssr/[root-of-the-server]__3ef34e4c._.js +1 -1
  229. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js +1 -1
  230. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js.map +1 -1
  231. package/web/.next/server/chunks/ssr/[root-of-the-server]__49557873._.js +4 -0
  232. package/web/.next/server/chunks/ssr/[root-of-the-server]__49557873._.js.map +1 -0
  233. package/web/.next/server/chunks/ssr/[root-of-the-server]__6ec59045._.js +1 -1
  234. package/web/.next/server/chunks/ssr/[root-of-the-server]__6ec59045._.js.map +1 -1
  235. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js +1 -1
  236. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js.map +1 -1
  237. package/web/.next/server/chunks/ssr/[root-of-the-server]__90fdc0ee._.js +4 -0
  238. package/web/.next/server/chunks/ssr/[root-of-the-server]__90fdc0ee._.js.map +1 -0
  239. package/web/.next/server/chunks/ssr/[root-of-the-server]__a5f9c6e5._.js +2 -2
  240. package/web/.next/server/chunks/ssr/[root-of-the-server]__a5f9c6e5._.js.map +1 -1
  241. package/web/.next/server/chunks/ssr/[root-of-the-server]__a7259d16._.js +4 -0
  242. package/web/.next/server/chunks/ssr/[root-of-the-server]__a7259d16._.js.map +1 -0
  243. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
  244. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  245. package/web/.next/server/chunks/ssr/[root-of-the-server]__cb850066._.js +3 -0
  246. package/web/.next/server/chunks/ssr/[root-of-the-server]__cb850066._.js.map +1 -0
  247. package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js +1 -1
  248. package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js.map +1 -1
  249. package/web/.next/server/chunks/ssr/_0020fddd._.js +1 -1
  250. package/web/.next/server/chunks/ssr/_0020fddd._.js.map +1 -1
  251. package/web/.next/server/chunks/ssr/_02ec1aea._.js +1 -1
  252. package/web/.next/server/chunks/ssr/_02ec1aea._.js.map +1 -1
  253. package/web/.next/server/chunks/ssr/_037421b9._.js +3 -0
  254. package/web/.next/server/chunks/ssr/_037421b9._.js.map +1 -0
  255. package/web/.next/server/chunks/ssr/{_a51673dd._.js → _149f6559._.js} +2 -2
  256. package/web/.next/server/chunks/ssr/{_2fdfd9ab._.js.map → _149f6559._.js.map} +1 -1
  257. package/web/.next/server/chunks/ssr/{_2fdfd9ab._.js → _1a09002f._.js} +2 -2
  258. package/web/.next/server/chunks/ssr/{_a51673dd._.js.map → _1a09002f._.js.map} +1 -1
  259. package/web/.next/server/chunks/ssr/{_65f6e0e0._.js → _48a8ee28._.js} +3 -3
  260. package/web/.next/server/chunks/ssr/{_d763f022._.js.map → _48a8ee28._.js.map} +1 -1
  261. package/web/.next/server/chunks/ssr/{_d763f022._.js → _6e8c85b1._.js} +3 -3
  262. package/web/.next/server/chunks/ssr/{_65f6e0e0._.js.map → _6e8c85b1._.js.map} +1 -1
  263. package/web/.next/server/chunks/ssr/_7dca1882._.js +1 -1
  264. package/web/.next/server/chunks/ssr/_7dca1882._.js.map +1 -1
  265. package/web/.next/server/chunks/ssr/{_d162e30d._.js → _83220ba0._.js} +2 -2
  266. package/web/.next/server/chunks/ssr/{_d162e30d._.js.map → _83220ba0._.js.map} +1 -1
  267. package/web/.next/server/chunks/ssr/{_ae587066._.js → _939287c5._.js} +2 -2
  268. package/web/.next/server/chunks/ssr/{_ae587066._.js.map → _939287c5._.js.map} +1 -1
  269. package/web/.next/server/chunks/ssr/_9cb5f6e3._.js +4 -0
  270. package/web/.next/server/chunks/ssr/_9cb5f6e3._.js.map +1 -0
  271. package/web/.next/server/chunks/ssr/_a37f5f18._.js +1 -1
  272. package/web/.next/server/chunks/ssr/_a37f5f18._.js.map +1 -1
  273. package/web/.next/server/chunks/ssr/_a9f57758._.js +1 -1
  274. package/web/.next/server/chunks/ssr/_a9f57758._.js.map +1 -1
  275. package/web/.next/server/chunks/ssr/_cfbd1d7e._.js +3 -0
  276. package/web/.next/server/chunks/ssr/_cfbd1d7e._.js.map +1 -0
  277. package/web/.next/server/chunks/ssr/_d4b20e29._.js.map +1 -1
  278. package/web/.next/server/chunks/ssr/_d8575088._.js +1 -1
  279. package/web/.next/server/chunks/ssr/_d8575088._.js.map +1 -1
  280. package/web/.next/server/chunks/ssr/_f39a1adb._.js +1 -1
  281. package/web/.next/server/chunks/ssr/_f39a1adb._.js.map +1 -1
  282. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  283. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  284. package/web/.next/server/chunks/ssr/src_presentation_web_951640a3._.js +3 -0
  285. package/web/.next/server/chunks/ssr/{src_presentation_web_eb026892._.js.map → src_presentation_web_951640a3._.js.map} +1 -1
  286. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js +1 -1
  287. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js.map +1 -1
  288. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js +1 -1
  289. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js.map +1 -1
  290. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
  291. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +1 -1
  292. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  293. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  294. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  295. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  296. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  297. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  298. package/web/.next/server/pages/500.html +2 -2
  299. package/web/.next/server/server-reference-manifest.js +1 -1
  300. package/web/.next/server/server-reference-manifest.json +457 -463
  301. package/web/.next/static/chunks/{bcc1bf1b0cd74b2d.js → 0bd451437bb30264.js} +1 -1
  302. package/web/.next/static/chunks/{b02f266e89ba1dd8.js → 29fe67f664ff2dc6.js} +1 -1
  303. package/web/.next/static/chunks/{57802507d72b99ee.js → 5aa808c7bec008f3.js} +1 -1
  304. package/web/.next/static/chunks/{232c8fb39d55eb0c.js → 5fe8c723c668f1ef.js} +2 -2
  305. package/web/.next/static/chunks/6a370f2709c81d83.js +1 -0
  306. package/web/.next/static/chunks/{16b41271842fdbc1.js → 92d66288f6e5f235.js} +1 -1
  307. package/web/.next/static/chunks/ab3afb0b942c1eb2.css +1 -0
  308. package/web/.next/static/chunks/{f3da449e6cc5524e.js → c17f8118fc760923.js} +1 -1
  309. package/web/.next/static/chunks/{35c8485fb1995cf7.js → c473e2924fbd8fd1.js} +1 -1
  310. package/web/.next/static/chunks/{2f0f60603e6a6ad3.js → d73ad54d54cd7e1d.js} +1 -1
  311. package/web/.next/static/chunks/db80bb0df7318fac.js +2 -0
  312. package/web/.next/static/chunks/{a0072880b46edce7.js → e4024647334fa56f.js} +1 -1
  313. package/web/.next/static/chunks/{0b7fe2ac4f078f54.js → f070c67389a686ff.js} +1 -1
  314. package/web/.next/static/chunks/{94f12c16e8804d19.js → f3e37f559952d6a1.js} +1 -1
  315. package/web/.next/static/chunks/f66c996402a430f5.js +1 -0
  316. package/web/.next/static/chunks/fa89e48e0d67e4dc.js +1 -0
  317. package/dist/packages/core/src/application/use-cases/features/archive-feature.use-case.d.ts +0 -20
  318. package/dist/packages/core/src/application/use-cases/features/archive-feature.use-case.d.ts.map +0 -1
  319. package/dist/packages/core/src/application/use-cases/features/archive-feature.use-case.js +0 -74
  320. package/dist/packages/core/src/application/use-cases/features/unarchive-feature.use-case.d.ts +0 -20
  321. package/dist/packages/core/src/application/use-cases/features/unarchive-feature.use-case.d.ts.map +0 -1
  322. package/dist/packages/core/src/application/use-cases/features/unarchive-feature.use-case.js +0 -65
  323. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-previous-lifecycle.d.ts +0 -12
  324. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-previous-lifecycle.d.ts.map +0 -1
  325. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-previous-lifecycle.js +0 -16
  326. package/dist/src/presentation/cli/commands/feat/archive.command.d.ts +0 -18
  327. package/dist/src/presentation/cli/commands/feat/archive.command.d.ts.map +0 -1
  328. package/dist/src/presentation/cli/commands/feat/archive.command.js +0 -54
  329. package/dist/src/presentation/cli/commands/feat/unarchive.command.d.ts +0 -17
  330. package/dist/src/presentation/cli/commands/feat/unarchive.command.d.ts.map +0 -1
  331. package/dist/src/presentation/cli/commands/feat/unarchive.command.js +0 -42
  332. package/dist/src/presentation/web/app/actions/archive-feature.d.ts +0 -6
  333. package/dist/src/presentation/web/app/actions/archive-feature.d.ts.map +0 -1
  334. package/dist/src/presentation/web/app/actions/archive-feature.js +0 -16
  335. package/dist/src/presentation/web/app/actions/unarchive-feature.d.ts +0 -6
  336. package/dist/src/presentation/web/app/actions/unarchive-feature.d.ts.map +0 -1
  337. package/dist/src/presentation/web/app/actions/unarchive-feature.js +0 -16
  338. package/web/.next/server/chunks/ssr/[root-of-the-server]__61564698._.js +0 -4
  339. package/web/.next/server/chunks/ssr/[root-of-the-server]__61564698._.js.map +0 -1
  340. package/web/.next/server/chunks/ssr/[root-of-the-server]__74ab160c._.js +0 -4
  341. package/web/.next/server/chunks/ssr/[root-of-the-server]__74ab160c._.js.map +0 -1
  342. package/web/.next/server/chunks/ssr/[root-of-the-server]__b3dbadca._.js +0 -3
  343. package/web/.next/server/chunks/ssr/[root-of-the-server]__b3dbadca._.js.map +0 -1
  344. package/web/.next/server/chunks/ssr/[root-of-the-server]__bd16cded._.js +0 -4
  345. package/web/.next/server/chunks/ssr/[root-of-the-server]__bd16cded._.js.map +0 -1
  346. package/web/.next/server/chunks/ssr/[root-of-the-server]__f14fffe1._.js +0 -4
  347. package/web/.next/server/chunks/ssr/[root-of-the-server]__f14fffe1._.js.map +0 -1
  348. package/web/.next/server/chunks/ssr/_0f5e9205._.js +0 -3
  349. package/web/.next/server/chunks/ssr/_0f5e9205._.js.map +0 -1
  350. package/web/.next/server/chunks/ssr/_29c444f1._.js +0 -4
  351. package/web/.next/server/chunks/ssr/_29c444f1._.js.map +0 -1
  352. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +0 -3
  353. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +0 -1
  354. package/web/.next/server/chunks/ssr/src_presentation_web_eb026892._.js +0 -3
  355. package/web/.next/static/chunks/24d61546fc6aa030.css +0 -1
  356. package/web/.next/static/chunks/5edd0e2e784ee069.js +0 -2
  357. package/web/.next/static/chunks/60f80d39976c5086.js +0 -1
  358. package/web/.next/static/chunks/d0dff217a94d4ee1.js +0 -1
  359. package/web/.next/static/chunks/eb9841ec4d80af01.js +0 -1
  360. /package/web/.next/static/{3V1jKEnSKFjbSLn1ERPdV → i847vZGPwgKFPH7P5kTBl}/_buildManifest.js +0 -0
  361. /package/web/.next/static/{3V1jKEnSKFjbSLn1ERPdV → i847vZGPwgKFPH7P5kTBl}/_clientMiddlewareManifest.json +0 -0
  362. /package/web/.next/static/{3V1jKEnSKFjbSLn1ERPdV → i847vZGPwgKFPH7P5kTBl}/_ssgManifest.js +0 -0
@@ -0,0 +1,169 @@
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 };
@@ -45,5 +45,15 @@ export declare class GitPrService implements IGitPrService {
45
45
  private parseGhError;
46
46
  private parsePrNumberFromUrl;
47
47
  private parseDiffStat;
48
+ syncMain(cwd: string, baseBranch: string): Promise<void>;
49
+ rebaseOnMain(cwd: string, featureBranch: string, baseBranch: string): Promise<void>;
50
+ getConflictedFiles(cwd: string): Promise<string[]>;
51
+ stageFiles(cwd: string, files: string[]): Promise<void>;
52
+ rebaseContinue(cwd: string): Promise<void>;
53
+ rebaseAbort(cwd: string): Promise<void>;
54
+ getBranchSyncStatus(cwd: string, featureBranch: string, baseBranch: string): Promise<{
55
+ ahead: number;
56
+ behind: number;
57
+ }>;
48
58
  }
49
59
  //# sourceMappingURL=git-pr.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"git-pr.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/git/git-pr.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git-pr.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/git/git-pr.service.ts"],"names":[],"mappings":"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"}
@@ -617,6 +617,14 @@ let GitPrService = class GitPrService {
617
617
  parseGitError(error) {
618
618
  const message = error instanceof Error ? error.message : String(error);
619
619
  const cause = error instanceof Error ? error : undefined;
620
+ // Rebase-specific: detect "CONFLICT" during rebase operations
621
+ if (message.includes('CONFLICT') && message.includes('rebase')) {
622
+ return new GitPrError(message, GitPrErrorCode.REBASE_CONFLICT, cause);
623
+ }
624
+ // Sync-specific: non-fast-forward or diverged branch
625
+ if (message.includes('non-fast-forward') || message.includes('diverged')) {
626
+ return new GitPrError(message, GitPrErrorCode.SYNC_FAILED, cause);
627
+ }
620
628
  if (message.includes('rejected') || message.includes('conflict')) {
621
629
  return new GitPrError(message, GitPrErrorCode.MERGE_CONFLICT, cause);
622
630
  }
@@ -657,6 +665,148 @@ let GitPrService = class GitPrService {
657
665
  commitCount,
658
666
  };
659
667
  }
668
+ // --- Rebase & Sync operations ---
669
+ async syncMain(cwd, baseBranch) {
670
+ try {
671
+ // Detect current branch
672
+ const { stdout } = await this.execFile('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd });
673
+ const currentBranch = stdout.trim();
674
+ if (currentBranch === baseBranch) {
675
+ // On the base branch — use git pull --ff-only
676
+ await this.execFile('git', ['pull', '--ff-only', 'origin', baseBranch], { cwd });
677
+ }
678
+ else {
679
+ // On a different branch — fetch the remote ref only (updates origin/<baseBranch>).
680
+ // We intentionally do NOT update the local <baseBranch> ref because it may be
681
+ // checked out in another worktree, which causes git to refuse the update with:
682
+ // "fatal: refusing to fetch into branch 'refs/heads/main' checked out at ..."
683
+ await this.execFile('git', ['fetch', 'origin', baseBranch], { cwd });
684
+ }
685
+ }
686
+ catch (error) {
687
+ const message = error instanceof Error ? error.message : String(error);
688
+ const cause = error instanceof Error ? error : undefined;
689
+ if (message.includes('non-fast-forward') ||
690
+ message.includes('Not possible to fast-forward') ||
691
+ message.includes('diverged')) {
692
+ throw new GitPrError(`Cannot fast-forward '${baseBranch}': local branch has diverged from remote. ` +
693
+ `Resolve the divergence manually with 'git checkout ${baseBranch} && git reset --hard origin/${baseBranch}' ` +
694
+ `if you want to discard local changes on ${baseBranch}.`, GitPrErrorCode.SYNC_FAILED, cause);
695
+ }
696
+ throw new GitPrError(`Failed to sync '${baseBranch}' with remote: ${message}`, GitPrErrorCode.GIT_ERROR, cause);
697
+ }
698
+ }
699
+ async rebaseOnMain(cwd, featureBranch, baseBranch) {
700
+ // Check for dirty worktree before starting
701
+ const dirty = await this.hasUncommittedChanges(cwd);
702
+ if (dirty) {
703
+ throw new GitPrError(`Cannot rebase: working directory has uncommitted changes. ` +
704
+ `Please commit or stash your changes before rebasing.`, GitPrErrorCode.GIT_ERROR);
705
+ }
706
+ // Checkout the feature branch
707
+ try {
708
+ await this.execFile('git', ['checkout', featureBranch], { cwd });
709
+ }
710
+ catch (error) {
711
+ const message = error instanceof Error ? error.message : String(error);
712
+ const cause = error instanceof Error ? error : undefined;
713
+ if (message.includes('did not match') ||
714
+ message.includes('not a commit') ||
715
+ message.includes('pathspec')) {
716
+ throw new GitPrError(`Branch '${featureBranch}' not found.`, GitPrErrorCode.BRANCH_NOT_FOUND, cause);
717
+ }
718
+ throw new GitPrError(`Failed to checkout '${featureBranch}': ${message}`, GitPrErrorCode.GIT_ERROR, cause);
719
+ }
720
+ // Rebase onto origin/<baseBranch> (the remote-tracking ref).
721
+ // We use origin/<baseBranch> rather than the local <baseBranch> because:
722
+ // 1. syncMain fetches origin/<baseBranch> — it's always up-to-date
723
+ // 2. The local <baseBranch> may be checked out in another worktree and stale
724
+ const rebaseTarget = `origin/${baseBranch}`;
725
+ try {
726
+ await this.execFile('git', ['rebase', rebaseTarget], { cwd });
727
+ }
728
+ catch (error) {
729
+ const message = error instanceof Error ? error.message : String(error);
730
+ const cause = error instanceof Error ? error : undefined;
731
+ // Detect rebase conflict from git stderr/exit code
732
+ if (message.includes('CONFLICT') || message.includes('could not apply')) {
733
+ // Get the list of conflicted files to include in the error message
734
+ let conflictedFiles = [];
735
+ try {
736
+ conflictedFiles = await this.getConflictedFiles(cwd);
737
+ }
738
+ catch {
739
+ // Failed to get conflicted files — still report the conflict
740
+ }
741
+ const fileList = conflictedFiles.length > 0 ? ` Conflicted files: ${conflictedFiles.join(', ')}` : '';
742
+ throw new GitPrError(`Rebase of '${featureBranch}' onto '${baseBranch}' encountered conflicts.${fileList}`, GitPrErrorCode.REBASE_CONFLICT, cause);
743
+ }
744
+ throw new GitPrError(`Rebase of '${featureBranch}' onto '${baseBranch}' failed: ${message}`, GitPrErrorCode.GIT_ERROR, cause);
745
+ }
746
+ }
747
+ async getConflictedFiles(cwd) {
748
+ try {
749
+ const { stdout } = await this.execFile('git', ['diff', '--name-only', '--diff-filter=U'], {
750
+ cwd,
751
+ });
752
+ return stdout
753
+ .trim()
754
+ .split('\n')
755
+ .filter((f) => f.length > 0)
756
+ .map((f) => f.replace(/\\/g, '/'));
757
+ }
758
+ catch (error) {
759
+ throw this.parseGitError(error);
760
+ }
761
+ }
762
+ async stageFiles(cwd, files) {
763
+ try {
764
+ await this.execFile('git', ['add', ...files], { cwd });
765
+ }
766
+ catch (error) {
767
+ throw this.parseGitError(error);
768
+ }
769
+ }
770
+ async rebaseContinue(cwd) {
771
+ try {
772
+ await this.execFile('git', ['rebase', '--continue'], {
773
+ cwd,
774
+ env: { ...process.env, GIT_EDITOR: 'true' },
775
+ });
776
+ }
777
+ catch (error) {
778
+ const message = error instanceof Error ? error.message : String(error);
779
+ const cause = error instanceof Error ? error : undefined;
780
+ if (message.includes('CONFLICT') || message.includes('could not apply')) {
781
+ throw new GitPrError(`Rebase continue encountered new conflicts: ${message}`, GitPrErrorCode.REBASE_CONFLICT, cause);
782
+ }
783
+ throw this.parseGitError(error);
784
+ }
785
+ }
786
+ async rebaseAbort(cwd) {
787
+ try {
788
+ await this.execFile('git', ['rebase', '--abort'], { cwd });
789
+ }
790
+ catch (error) {
791
+ throw this.parseGitError(error);
792
+ }
793
+ }
794
+ async getBranchSyncStatus(cwd, featureBranch, baseBranch) {
795
+ try {
796
+ const remoteRef = `origin/${baseBranch}`;
797
+ const [aheadResult, behindResult] = await Promise.all([
798
+ this.execFile('git', ['rev-list', '--count', `${remoteRef}..${featureBranch}`], { cwd }),
799
+ this.execFile('git', ['rev-list', '--count', `${featureBranch}..${remoteRef}`], { cwd }),
800
+ ]);
801
+ return {
802
+ ahead: parseInt(aheadResult.stdout.trim(), 10) || 0,
803
+ behind: parseInt(behindResult.stdout.trim(), 10) || 0,
804
+ };
805
+ }
806
+ catch (error) {
807
+ throw this.parseGitError(error);
808
+ }
809
+ }
660
810
  };
661
811
  GitPrService = __decorate([
662
812
  injectable(),
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAgB3C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAc3C"}
@@ -21,8 +21,6 @@ import { createApproveCommand } from './approve.command.js';
21
21
  import { createRejectCommand } from './reject.command.js';
22
22
  import { createLogsCommand } from './logs.command.js';
23
23
  import { createAdoptCommand } from './adopt.command.js';
24
- import { createArchiveCommand } from './archive.command.js';
25
- import { createUnarchiveCommand } from './unarchive.command.js';
26
24
  /**
27
25
  * Create the feat command group
28
26
  */
@@ -39,7 +37,5 @@ export function createFeatCommand() {
39
37
  .addCommand(createApproveCommand())
40
38
  .addCommand(createRejectCommand())
41
39
  .addCommand(createLogsCommand())
42
- .addCommand(createAdoptCommand())
43
- .addCommand(createArchiveCommand())
44
- .addCommand(createUnarchiveCommand());
40
+ .addCommand(createAdoptCommand());
45
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ls.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/ls.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkLpC,wBAAgB,eAAe,IAAI,OAAO,CAwGzC"}
1
+ {"version":3,"file":"ls.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/ls.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6KpC,wBAAgB,eAAe,IAAI,OAAO,CAsGzC"}
@@ -48,9 +48,6 @@ const STATUS_PRIORITY = {
48
48
  */
49
49
  function formatStatus(feature, run) {
50
50
  // Blocked features show "Waiting" — the parent relationship is conveyed by tree indentation
51
- if (feature.lifecycle === 'Archived') {
52
- return `${colors.muted(symbols.dotEmpty)} ${colors.muted('Archived')}`;
53
- }
54
51
  if (feature.lifecycle === 'Deleting') {
55
52
  return `${colors.muted(symbols.spinner[0])} ${colors.muted('Deleting')}`;
56
53
  }
@@ -171,7 +168,6 @@ export function createLsCommand() {
171
168
  .description('List features')
172
169
  .option('-r, --repo <path>', 'Filter by repository path')
173
170
  .option('--include-deleted', 'Include soft-deleted features')
174
- .option('--show-archived', 'Include archived features')
175
171
  .action(async (options) => {
176
172
  try {
177
173
  const useCase = container.resolve(ListFeaturesUseCase);
@@ -180,7 +176,6 @@ export function createLsCommand() {
180
176
  const filters = {
181
177
  ...(options.repo && { repositoryPath: options.repo }),
182
178
  ...(options.includeDeleted && { includeDeleted: true }),
183
- ...(options.showArchived && { includeArchived: true }),
184
179
  };
185
180
  const features = await useCase.execute(Object.keys(filters).length > 0 ? filters : undefined);
186
181
  // Load agent runs and phase timings for all features in parallel
@@ -1 +1 @@
1
- {"version":3,"file":"get-graph-data.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/(dashboard)/get-graph-data.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAE5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAI1C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAwFD,MAAM,MAAM,aAAa,GACrB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC;AA6B7B,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAAC,CAkExF"}
1
+ {"version":3,"file":"get-graph-data.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/(dashboard)/get-graph-data.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAE5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAI1C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAiFD,MAAM,MAAM,aAAa,GACrB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC;AA6B7B,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAAC,CA6DxF"}
@@ -31,13 +31,7 @@ async function refreshRepoGitInfo(repo) {
31
31
  gitInfoCache.set(repo.path, { kind: 'not-a-repo', checkedAt: Date.now() });
32
32
  return;
33
33
  }
34
- const cached = gitInfoCache.get(repo.path);
35
- if (cached?.kind === 'repo' && cached.sha === headSha) {
36
- // HEAD unchanged — just bump checkedAt
37
- cached.checkedAt = Date.now();
38
- return;
39
- }
40
- // HEAD changed — fetch branch + subject & author in parallel
34
+ // Fetch branch + subject & author in parallel
41
35
  const [currentBranch, logLine] = await Promise.all([
42
36
  gitCommand(repo.path, ['symbolic-ref', '--short', 'HEAD']),
43
37
  gitCommand(repo.path, ['log', '-1', `--format=%s${FIELD_SEP}%an`]),
@@ -45,7 +39,8 @@ async function refreshRepoGitInfo(repo) {
45
39
  if (!currentBranch)
46
40
  return;
47
41
  const [commitMessage, committer] = (logLine ?? '').split(FIELD_SEP);
48
- // Behind count
42
+ // Behind count — always compute, even when on the default branch,
43
+ // because local main can be behind origin/main.
49
44
  let behindCount = null;
50
45
  const defaultBranchRef = await gitCommand(repo.path, [
51
46
  'symbolic-ref',
@@ -53,7 +48,8 @@ async function refreshRepoGitInfo(repo) {
53
48
  'refs/remotes/origin/HEAD',
54
49
  ]);
55
50
  const defaultBranch = defaultBranchRef?.replace('origin/', '') ?? null;
56
- if (defaultBranch && currentBranch !== defaultBranch) {
51
+ if (defaultBranch) {
52
+ // Compare current branch (or default branch itself) against origin
57
53
  const behind = await gitCommand(repo.path, [
58
54
  'rev-list',
59
55
  '--count',
@@ -63,9 +59,6 @@ async function refreshRepoGitInfo(repo) {
63
59
  if (isNaN(behindCount))
64
60
  behindCount = null;
65
61
  }
66
- else {
67
- behindCount = 0;
68
- }
69
62
  gitInfoCache.set(repo.path, {
70
63
  kind: 'repo',
71
64
  sha: headSha,
@@ -108,12 +101,7 @@ export async function getGraphData() {
108
101
  const listFeatures = resolve('ListFeaturesUseCase');
109
102
  const listRepos = resolve('ListRepositoriesUseCase');
110
103
  const agentRunRepo = resolve('IAgentRunRepository');
111
- // Always include archived features so the client has full data for instant
112
- // show/hide toggle without a server round-trip (NFR-3).
113
- const [features, repositories] = await Promise.all([
114
- listFeatures.execute({ includeArchived: true }),
115
- listRepos.execute(),
116
- ]);
104
+ const [features, repositories] = await Promise.all([listFeatures.execute(), listRepos.execute()]);
117
105
  // Read git info from cache (zero git calls). Stale entries trigger
118
106
  // a fire-and-forget background refresh for the next poll cycle.
119
107
  const repoGitInfoMap = new Map();
@@ -0,0 +1,11 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,22 @@
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
+ }
@@ -0,0 +1,5 @@
1
+ export declare function rebaseFeature(featureId: string): Promise<{
2
+ success: boolean;
3
+ error?: string;
4
+ }>;
5
+ //# sourceMappingURL=rebase-feature.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,16 @@
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
+ }
@@ -0,0 +1,5 @@
1
+ export declare function syncRepository(repositoryId: string): Promise<{
2
+ success: boolean;
3
+ error?: string;
4
+ }>;
5
+ //# sourceMappingURL=sync-repository.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,16 @@
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 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/app/api/agent-events/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiBH,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAuEvC,wBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CA4R9C"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/app/api/agent-events/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiBH,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAsEvC,wBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CA4R9C"}
@@ -36,7 +36,6 @@ const LIFECYCLE_TO_NODE = {
36
36
  [SdlcLifecycle.Blocked]: 'blocked',
37
37
  [SdlcLifecycle.Pending]: 'pending',
38
38
  [SdlcLifecycle.Deleting]: 'blocked',
39
- [SdlcLifecycle.Archived]: 'archived',
40
39
  };
41
40
  const STATUS_TO_EVENT = {
42
41
  [AgentRunStatus.running]: {
@@ -1 +1 @@
1
- {"version":3,"file":"feature-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAI/D,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,UAAU,CAAC;IACjB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,wBAAwB,2CAimB1F"}
1
+ {"version":3,"file":"feature-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAK/D,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,UAAU,CAAC;IACjB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,wBAAwB,2CAgoB1F"}