@shepai/cli 1.116.0-pr367.8e10c48 → 1.116.1

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 (382) hide show
  1. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +14 -0
  2. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
  3. package/dist/packages/core/src/application/ports/output/services/index.d.ts +0 -2
  4. package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
  5. package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts +2 -1
  6. package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts.map +1 -1
  7. package/dist/packages/core/src/application/use-cases/features/cleanup-feature-worktree.use-case.d.ts.map +1 -1
  8. package/dist/packages/core/src/application/use-cases/features/cleanup-feature-worktree.use-case.js +6 -1
  9. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts +3 -1
  10. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  11. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +30 -2
  12. package/dist/packages/core/src/application/use-cases/features/delete-feature.use-case.js +1 -1
  13. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  14. package/dist/packages/core/src/infrastructure/di/container.js +4 -20
  15. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts.map +1 -1
  16. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.js +6 -1
  17. package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.d.ts +12 -1
  18. package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.d.ts.map +1 -1
  19. package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.js +98 -26
  20. package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.d.ts.map +1 -1
  21. package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.js +13 -1
  22. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
  23. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.js +1 -0
  24. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
  25. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +18 -1
  26. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence.node.d.ts.map +1 -1
  27. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence.node.js +1 -0
  28. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.d.ts.map +1 -1
  29. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.js +1 -0
  30. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/implement.node.d.ts.map +1 -1
  31. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/implement.node.js +1 -0
  32. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.d.ts.map +1 -1
  33. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.js +13 -1
  34. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts +4 -0
  35. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
  36. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +9 -17
  37. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +2 -0
  38. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  39. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +8 -4
  40. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.js +7 -4
  41. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.d.ts.map +1 -1
  42. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.js +1 -0
  43. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/validate.node.d.ts.map +1 -1
  44. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/validate.node.js +1 -0
  45. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +1 -0
  46. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
  47. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +71 -1
  48. package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts +1 -1
  49. package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts.map +1 -1
  50. package/dist/packages/core/src/infrastructure/services/git/worktree.service.js +5 -3
  51. package/dist/packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.d.ts.map +1 -1
  52. package/dist/packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.js +3 -1
  53. package/dist/packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.d.ts.map +1 -1
  54. package/dist/packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.js +5 -1
  55. package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.d.ts.map +1 -1
  56. package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.js +12 -0
  57. package/dist/src/presentation/cli/commands/ui.command.d.ts.map +1 -1
  58. package/dist/src/presentation/cli/commands/ui.command.js +0 -15
  59. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
  60. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
  61. package/dist/src/presentation/web/dev-server.js +0 -20
  62. package/dist/tsconfig.build.tsbuildinfo +1 -1
  63. package/package.json +1 -1
  64. package/web/.next/BUILD_ID +1 -1
  65. package/web/.next/app-path-routes-manifest.json +1 -5
  66. package/web/.next/build-manifest.json +6 -6
  67. package/web/.next/fallback-build-manifest.json +2 -2
  68. package/web/.next/prerender-manifest.json +3 -3
  69. package/web/.next/required-server-files.js +2 -2
  70. package/web/.next/required-server-files.json +2 -2
  71. package/web/.next/routes-manifest.json +0 -24
  72. package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +4 -4
  73. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +20 -20
  74. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  75. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  76. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/build-manifest.json +4 -4
  77. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +26 -26
  78. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  79. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  80. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +4 -4
  81. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +26 -26
  82. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  83. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  84. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +4 -4
  85. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
  86. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  87. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  88. package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +4 -4
  89. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +20 -20
  90. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  91. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  92. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/build-manifest.json +4 -4
  93. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +26 -26
  94. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  95. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  96. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +4 -4
  97. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +26 -26
  98. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  99. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  100. package/web/.next/server/app/(dashboard)/page/build-manifest.json +4 -4
  101. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +18 -18
  102. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  103. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  104. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +4 -4
  105. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
  106. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  107. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  108. package/web/.next/server/app/_global-error/page/build-manifest.json +4 -4
  109. package/web/.next/server/app/_global-error.html +2 -2
  110. package/web/.next/server/app/_global-error.rsc +1 -1
  111. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  112. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  113. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  114. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  115. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  116. package/web/.next/server/app/_not-found/page/build-manifest.json +4 -4
  117. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  118. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  119. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  120. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  121. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  122. package/web/.next/server/app/settings/page/build-manifest.json +4 -4
  123. package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
  124. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  125. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  126. package/web/.next/server/app/skills/page/build-manifest.json +4 -4
  127. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  128. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  129. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  130. package/web/.next/server/app/tools/page/build-manifest.json +4 -4
  131. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  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/build-manifest.json +4 -4
  135. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  136. package/web/.next/server/app/version/page.js.nft.json +1 -1
  137. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  138. package/web/.next/server/app-paths-manifest.json +1 -5
  139. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  140. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  141. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  142. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js +1 -1
  143. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js.map +1 -1
  144. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js +1 -1
  145. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js.map +1 -1
  146. package/web/.next/server/chunks/ssr/[root-of-the-server]__039967e3._.js +1 -1
  147. package/web/.next/server/chunks/ssr/[root-of-the-server]__039967e3._.js.map +1 -1
  148. package/web/.next/server/chunks/ssr/[root-of-the-server]__07a39ff2._.js +1 -1
  149. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
  150. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
  151. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +2 -2
  152. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js.map +1 -1
  153. package/web/.next/server/chunks/ssr/[root-of-the-server]__2773312c._.js +1 -1
  154. package/web/.next/server/chunks/ssr/[root-of-the-server]__2773312c._.js.map +1 -1
  155. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
  156. package/web/.next/server/chunks/ssr/[root-of-the-server]__6367aea0._.js +3 -0
  157. package/web/.next/server/chunks/ssr/[root-of-the-server]__6367aea0._.js.map +1 -0
  158. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
  159. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js.map +1 -1
  160. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
  161. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  162. package/web/.next/server/chunks/ssr/[root-of-the-server]__b1e68e34._.js +3 -0
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__b1e68e34._.js.map +1 -0
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__cbd8062c._.js +1 -1
  165. package/web/.next/server/chunks/ssr/[root-of-the-server]__cbd8062c._.js.map +1 -1
  166. package/web/.next/server/chunks/ssr/[root-of-the-server]__e70c5627._.js +1 -1
  167. package/web/.next/server/chunks/ssr/[root-of-the-server]__e70c5627._.js.map +1 -1
  168. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
  169. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
  170. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  171. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  172. package/web/.next/server/chunks/ssr/{node_modules__pnpm_747b43ac._.js → _1bb131c4._.js} +2 -2
  173. package/web/.next/server/chunks/ssr/_1bb131c4._.js.map +1 -0
  174. package/web/.next/server/chunks/ssr/_273d4632._.js +3 -0
  175. package/web/.next/server/chunks/ssr/_273d4632._.js.map +1 -0
  176. package/web/.next/server/chunks/ssr/_6d26a08f._.js +3 -0
  177. package/web/.next/server/chunks/ssr/_6d26a08f._.js.map +1 -0
  178. package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
  179. package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
  180. package/web/.next/server/chunks/ssr/_8e762bfa._.js +3 -0
  181. package/web/.next/server/chunks/ssr/{_28862ed0._.js.map → _8e762bfa._.js.map} +1 -1
  182. package/web/.next/server/chunks/ssr/{_383572e0._.js → _9f6e3d20._.js} +2 -2
  183. package/web/.next/server/chunks/ssr/_9f6e3d20._.js.map +1 -0
  184. package/web/.next/server/chunks/ssr/_a68d7e1c._.js +9 -0
  185. package/web/.next/server/chunks/ssr/_a68d7e1c._.js.map +1 -0
  186. package/web/.next/server/chunks/ssr/_b5fc318a._.js +3 -0
  187. package/web/.next/server/chunks/ssr/_b5fc318a._.js.map +1 -0
  188. package/web/.next/server/chunks/ssr/_c1fbab88._.js +3 -0
  189. package/web/.next/server/chunks/ssr/_c1fbab88._.js.map +1 -0
  190. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  191. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  192. package/web/.next/server/chunks/ssr/_f4d222d6._.js +1 -1
  193. package/web/.next/server/chunks/ssr/_f5316e67._.js +3 -0
  194. package/web/.next/server/chunks/ssr/_f5316e67._.js.map +1 -0
  195. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  196. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  197. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js +1 -1
  198. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js.map +1 -1
  199. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  200. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  201. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  202. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  203. package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js +2 -2
  204. package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js.map +1 -1
  205. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  206. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  207. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  208. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  209. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  210. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  211. package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.js +2 -2
  212. package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.js.map +1 -1
  213. package/web/.next/server/middleware-build-manifest.js +4 -4
  214. package/web/.next/server/pages/500.html +2 -2
  215. package/web/.next/server/server-reference-manifest.js +1 -1
  216. package/web/.next/server/server-reference-manifest.json +32 -54
  217. package/web/.next/static/chunks/17fd217453792496.js +11 -0
  218. package/web/.next/static/chunks/303a1217006489b9.js +1 -0
  219. package/web/.next/static/chunks/33479aee057faf05.js +1 -0
  220. package/web/.next/static/chunks/{c6dc0749ac370da4.js → 3375766cc7dda1d8.js} +2 -2
  221. package/web/.next/static/chunks/{f60771797b58531f.js → 35bf7817ea1c468d.js} +1 -1
  222. package/web/.next/static/chunks/3a806cf059241bc9.js +1 -0
  223. package/web/.next/static/chunks/{604d36c352fff6c0.js → 3c962e81416806a3.js} +2 -2
  224. package/web/.next/static/chunks/3fc8dae693118412.js +1 -0
  225. package/web/.next/static/chunks/57b45edf86522369.css +1 -0
  226. package/web/.next/static/chunks/5d83ac35ca137033.js +1 -0
  227. package/web/.next/static/chunks/619af41a8d3232e5.js +1 -0
  228. package/web/.next/static/chunks/{98e3a7cf58fc912a.js → 672e3da3ad26005b.js} +1 -1
  229. package/web/.next/static/chunks/{e510518c9ca6e844.js → 814f40e65ab8e09e.js} +1 -1
  230. package/web/.next/static/chunks/84a181ff3270fd9f.js +1 -0
  231. package/web/.next/static/chunks/b1f3c0e8e9872ef8.js +1 -0
  232. package/web/.next/static/chunks/{51ca7e4cad588da4.js → b5357e9cc8668be7.js} +1 -1
  233. package/web/.next/static/chunks/{385710675a1d06c9.js → b830ce63d018922d.js} +1 -1
  234. package/web/.next/static/chunks/ed3a602003bcb31b.js +1 -0
  235. package/web/.next/static/chunks/fcde0cbb2976b933.js +1 -0
  236. package/web/.next/static/chunks/{turbopack-b1685b5f87ad1d60.js → turbopack-426d9bc2450816ba.js} +1 -1
  237. package/dist/packages/core/src/application/ports/output/services/tunnel-service.interface.d.ts +0 -41
  238. package/dist/packages/core/src/application/ports/output/services/tunnel-service.interface.d.ts.map +0 -1
  239. package/dist/packages/core/src/application/ports/output/services/tunnel-service.interface.js +0 -14
  240. package/dist/packages/core/src/application/ports/output/services/webhook-service.interface.d.ts +0 -65
  241. package/dist/packages/core/src/application/ports/output/services/webhook-service.interface.d.ts.map +0 -1
  242. package/dist/packages/core/src/application/ports/output/services/webhook-service.interface.js +0 -10
  243. package/dist/packages/core/src/infrastructure/services/tunnel/cloudflare-tunnel.service.d.ts +0 -36
  244. package/dist/packages/core/src/infrastructure/services/tunnel/cloudflare-tunnel.service.d.ts.map +0 -1
  245. package/dist/packages/core/src/infrastructure/services/tunnel/cloudflare-tunnel.service.js +0 -148
  246. package/dist/packages/core/src/infrastructure/services/webhook/github-webhook.service.d.ts +0 -75
  247. package/dist/packages/core/src/infrastructure/services/webhook/github-webhook.service.d.ts.map +0 -1
  248. package/dist/packages/core/src/infrastructure/services/webhook/github-webhook.service.js +0 -372
  249. package/dist/packages/core/src/infrastructure/services/webhook/webhook-manager.service.d.ts +0 -82
  250. package/dist/packages/core/src/infrastructure/services/webhook/webhook-manager.service.d.ts.map +0 -1
  251. package/dist/packages/core/src/infrastructure/services/webhook/webhook-manager.service.js +0 -192
  252. package/dist/src/presentation/web/app/actions/load-webhook-status.d.ts +0 -3
  253. package/dist/src/presentation/web/app/actions/load-webhook-status.d.ts.map +0 -1
  254. package/dist/src/presentation/web/app/actions/load-webhook-status.js +0 -19
  255. package/dist/src/presentation/web/app/api/webhooks/deliveries/route.d.ts +0 -9
  256. package/dist/src/presentation/web/app/api/webhooks/deliveries/route.d.ts.map +0 -1
  257. package/dist/src/presentation/web/app/api/webhooks/deliveries/route.js +0 -27
  258. package/dist/src/presentation/web/app/api/webhooks/github/route.d.ts +0 -17
  259. package/dist/src/presentation/web/app/api/webhooks/github/route.d.ts.map +0 -1
  260. package/dist/src/presentation/web/app/api/webhooks/github/route.js +0 -70
  261. package/dist/src/presentation/web/app/api/webhooks/status/route.d.ts +0 -9
  262. package/dist/src/presentation/web/app/api/webhooks/status/route.d.ts.map +0 -1
  263. package/dist/src/presentation/web/app/api/webhooks/status/route.js +0 -26
  264. package/dist/src/presentation/web/app/webhooks/page.d.ts +0 -4
  265. package/dist/src/presentation/web/app/webhooks/page.d.ts.map +0 -1
  266. package/dist/src/presentation/web/app/webhooks/page.js +0 -9
  267. package/dist/src/presentation/web/components/features/webhooks/types.d.ts +0 -32
  268. package/dist/src/presentation/web/components/features/webhooks/types.d.ts.map +0 -1
  269. package/dist/src/presentation/web/components/features/webhooks/types.js +0 -1
  270. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.d.ts +0 -6
  271. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.d.ts.map +0 -1
  272. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.js +0 -38
  273. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.stories.d.ts +0 -9
  274. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.stories.d.ts.map +0 -1
  275. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.stories.js +0 -69
  276. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.d.ts +0 -7
  277. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.d.ts.map +0 -1
  278. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.js +0 -11
  279. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.stories.d.ts +0 -9
  280. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.stories.d.ts.map +0 -1
  281. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.stories.js +0 -31
  282. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.d.ts +0 -6
  283. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.d.ts.map +0 -1
  284. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.js +0 -21
  285. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.stories.d.ts +0 -9
  286. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.stories.d.ts.map +0 -1
  287. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.stories.js +0 -56
  288. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.d.ts +0 -6
  289. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.d.ts.map +0 -1
  290. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.js +0 -39
  291. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.stories.d.ts +0 -8
  292. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.stories.d.ts.map +0 -1
  293. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.stories.js +0 -59
  294. package/web/.next/server/app/api/webhooks/deliveries/route/app-paths-manifest.json +0 -3
  295. package/web/.next/server/app/api/webhooks/deliveries/route/build-manifest.json +0 -11
  296. package/web/.next/server/app/api/webhooks/deliveries/route/server-reference-manifest.json +0 -4
  297. package/web/.next/server/app/api/webhooks/deliveries/route.js +0 -6
  298. package/web/.next/server/app/api/webhooks/deliveries/route.js.map +0 -5
  299. package/web/.next/server/app/api/webhooks/deliveries/route.js.nft.json +0 -1
  300. package/web/.next/server/app/api/webhooks/deliveries/route_client-reference-manifest.js +0 -2
  301. package/web/.next/server/app/api/webhooks/github/route/app-paths-manifest.json +0 -3
  302. package/web/.next/server/app/api/webhooks/github/route/build-manifest.json +0 -11
  303. package/web/.next/server/app/api/webhooks/github/route/server-reference-manifest.json +0 -4
  304. package/web/.next/server/app/api/webhooks/github/route.js +0 -6
  305. package/web/.next/server/app/api/webhooks/github/route.js.map +0 -5
  306. package/web/.next/server/app/api/webhooks/github/route.js.nft.json +0 -1
  307. package/web/.next/server/app/api/webhooks/github/route_client-reference-manifest.js +0 -2
  308. package/web/.next/server/app/api/webhooks/status/route/app-paths-manifest.json +0 -3
  309. package/web/.next/server/app/api/webhooks/status/route/build-manifest.json +0 -11
  310. package/web/.next/server/app/api/webhooks/status/route/server-reference-manifest.json +0 -4
  311. package/web/.next/server/app/api/webhooks/status/route.js +0 -6
  312. package/web/.next/server/app/api/webhooks/status/route.js.map +0 -5
  313. package/web/.next/server/app/api/webhooks/status/route.js.nft.json +0 -1
  314. package/web/.next/server/app/api/webhooks/status/route_client-reference-manifest.js +0 -2
  315. package/web/.next/server/app/webhooks/page/app-paths-manifest.json +0 -3
  316. package/web/.next/server/app/webhooks/page/build-manifest.json +0 -18
  317. package/web/.next/server/app/webhooks/page/next-font-manifest.json +0 -6
  318. package/web/.next/server/app/webhooks/page/react-loadable-manifest.json +0 -1
  319. package/web/.next/server/app/webhooks/page/server-reference-manifest.json +0 -35
  320. package/web/.next/server/app/webhooks/page.js +0 -16
  321. package/web/.next/server/app/webhooks/page.js.map +0 -5
  322. package/web/.next/server/app/webhooks/page.js.nft.json +0 -1
  323. package/web/.next/server/app/webhooks/page_client-reference-manifest.js +0 -2
  324. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_deliveries_route_actions_d9e34c8d.js +0 -3
  325. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_deliveries_route_actions_d9e34c8d.js.map +0 -1
  326. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_github_route_actions_1b0d0c38.js +0 -3
  327. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_github_route_actions_1b0d0c38.js.map +0 -1
  328. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_status_route_actions_1a0d86a1.js +0 -3
  329. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_status_route_actions_1a0d86a1.js.map +0 -1
  330. package/web/.next/server/chunks/[root-of-the-server]__15e5d45c._.js +0 -3
  331. package/web/.next/server/chunks/[root-of-the-server]__15e5d45c._.js.map +0 -1
  332. package/web/.next/server/chunks/[root-of-the-server]__23be381e._.js +0 -3
  333. package/web/.next/server/chunks/[root-of-the-server]__23be381e._.js.map +0 -1
  334. package/web/.next/server/chunks/[root-of-the-server]__9fc760c0._.js +0 -3
  335. package/web/.next/server/chunks/[root-of-the-server]__9fc760c0._.js.map +0 -1
  336. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_activity_22f9667f.js +0 -3
  337. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_activity_22f9667f.js.map +0 -1
  338. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d847b7b._.js +0 -3
  339. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d847b7b._.js.map +0 -1
  340. package/web/.next/server/chunks/ssr/[root-of-the-server]__87a7ae30._.js +0 -3
  341. package/web/.next/server/chunks/ssr/[root-of-the-server]__87a7ae30._.js.map +0 -1
  342. package/web/.next/server/chunks/ssr/[root-of-the-server]__920dccd5._.js +0 -4
  343. package/web/.next/server/chunks/ssr/[root-of-the-server]__920dccd5._.js.map +0 -1
  344. package/web/.next/server/chunks/ssr/[root-of-the-server]__a42f5a88._.js +0 -3
  345. package/web/.next/server/chunks/ssr/[root-of-the-server]__a42f5a88._.js.map +0 -1
  346. package/web/.next/server/chunks/ssr/_26b2c311._.js +0 -3
  347. package/web/.next/server/chunks/ssr/_26b2c311._.js.map +0 -1
  348. package/web/.next/server/chunks/ssr/_27dd06aa._.js +0 -3
  349. package/web/.next/server/chunks/ssr/_27dd06aa._.js.map +0 -1
  350. package/web/.next/server/chunks/ssr/_28862ed0._.js +0 -3
  351. package/web/.next/server/chunks/ssr/_383572e0._.js.map +0 -1
  352. package/web/.next/server/chunks/ssr/_809c53f6._.js +0 -9
  353. package/web/.next/server/chunks/ssr/_809c53f6._.js.map +0 -1
  354. package/web/.next/server/chunks/ssr/_9eea4c51._.js +0 -3
  355. package/web/.next/server/chunks/ssr/_9eea4c51._.js.map +0 -1
  356. package/web/.next/server/chunks/ssr/_a4899a76._.js +0 -3
  357. package/web/.next/server/chunks/ssr/_a4899a76._.js.map +0 -1
  358. package/web/.next/server/chunks/ssr/_b7eb93fc._.js +0 -4
  359. package/web/.next/server/chunks/ssr/_b7eb93fc._.js.map +0 -1
  360. package/web/.next/server/chunks/ssr/_e0a01382._.js +0 -3
  361. package/web/.next/server/chunks/ssr/_e0a01382._.js.map +0 -1
  362. package/web/.next/server/chunks/ssr/_f8b36e2c._.js +0 -3
  363. package/web/.next/server/chunks/ssr/_f8b36e2c._.js.map +0 -1
  364. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_webhooks_webhooks-page-client_tsx_b2662ea3._.js +0 -3
  365. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_webhooks_webhooks-page-client_tsx_b2662ea3._.js.map +0 -1
  366. package/web/.next/server/chunks/ssr/node_modules__pnpm_747b43ac._.js.map +0 -1
  367. package/web/.next/static/chunks/06b948216df083c1.js +0 -1
  368. package/web/.next/static/chunks/2bdc11361b8f2602.js +0 -1
  369. package/web/.next/static/chunks/31f35710932542ef.js +0 -1
  370. package/web/.next/static/chunks/40b6bcf1a2de4a0f.js +0 -1
  371. package/web/.next/static/chunks/4714eb891fa4fd81.js +0 -1
  372. package/web/.next/static/chunks/523340641468b5f2.js +0 -1
  373. package/web/.next/static/chunks/5f6161ceb4263319.js +0 -1
  374. package/web/.next/static/chunks/9a7361e2365b2d8e.js +0 -1
  375. package/web/.next/static/chunks/9af45e885bd4ccef.js +0 -1
  376. package/web/.next/static/chunks/bbfb591f6aaa7255.css +0 -1
  377. package/web/.next/static/chunks/c7e793951b20a67f.js +0 -1
  378. package/web/.next/static/chunks/e9621b096a69e4e8.js +0 -11
  379. package/web/.next/static/chunks/f644140e21b75f61.js +0 -1
  380. /package/web/.next/static/{kQ3LD6zhRbOzb0MYK2n5b → oySSHprbXXpmQhRjypXRR}/_buildManifest.js +0 -0
  381. /package/web/.next/static/{kQ3LD6zhRbOzb0MYK2n5b → oySSHprbXXpmQhRjypXRR}/_clientMiddlewareManifest.json +0 -0
  382. /package/web/.next/static/{kQ3LD6zhRbOzb0MYK2n5b → oySSHprbXXpmQhRjypXRR}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"evidence.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence.node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAEpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAerD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,IAG3C,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAsE7E"}
1
+ {"version":3,"file":"evidence.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence.node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAEpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAerD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,IAG3C,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAuE7E"}
@@ -33,6 +33,7 @@ import { hasSettings, getSettings } from '../../../settings.service.js';
33
33
  export function createEvidenceNode(executor) {
34
34
  const log = createNodeLogger('evidence');
35
35
  return async (state) => {
36
+ log.activate();
36
37
  log.info('Starting evidence collection');
37
38
  reportNodeStart('evidence');
38
39
  await updateNodeLifecycle('evidence');
@@ -1 +1 @@
1
- {"version":3,"file":"fast-implement.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAEpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAUrD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,IAGhD,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAmD7E"}
1
+ {"version":3,"file":"fast-implement.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAEpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAUrD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,IAGhD,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAoD7E"}
@@ -29,6 +29,7 @@ import { hasSettings, getSettings } from '../../../settings.service.js';
29
29
  export function createFastImplementNode(executor) {
30
30
  const log = createNodeLogger('fast-implement');
31
31
  return async (state) => {
32
+ log.activate();
32
33
  log.info('Starting fast implementation');
33
34
  reportNodeStart('fast-implement');
34
35
  await updateNodeLifecycle('fast-implement');
@@ -1 +1 @@
1
- {"version":3,"file":"implement.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/implement.node.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAEpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAwErD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,IAG5C,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAwL7E"}
1
+ {"version":3,"file":"implement.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/implement.node.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAEpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAwErD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,IAG5C,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAyL7E"}
@@ -52,6 +52,7 @@ function updateFeatureProgress(specDir, completedCount, totalCount, currentPhase
52
52
  export function createImplementNode(executor) {
53
53
  const log = createNodeLogger('implement');
54
54
  return async (state) => {
55
+ log.activate();
55
56
  log.info('Starting implementation phase orchestration');
56
57
  reportNodeStart('implement');
57
58
  await updateNodeLifecycle('implement');
@@ -1 +1 @@
1
- {"version":3,"file":"ci-watch-fix-loop.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AACpG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yEAAyE,CAAC;AAClH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iEAAiE,CAAC;AAKrG,OAAO,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+DAA+D,CAAC;AAK3G,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,YAAY,EAAE,aAAa,CAAC;IAC5B,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,qBAAqB,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/E,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,EAAE,UAAU,CAAC;CACjB;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAEpG,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,WAAW,EAAE,gBAAgB,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAkI3B"}
1
+ {"version":3,"file":"ci-watch-fix-loop.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AACpG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yEAAyE,CAAC;AAClH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iEAAiE,CAAC;AAKrG,OAAO,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+DAA+D,CAAC;AAK3G,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,YAAY,EAAE,aAAa,CAAC;IAC5B,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,qBAAqB,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/E,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,EAAE,UAAU,CAAC;CACjB;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAEpG,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,WAAW,EAAE,gBAAgB,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CA6I3B"}
@@ -28,7 +28,19 @@ export async function runCiWatchFixLoop(deps, params) {
28
28
  let ciFixStatus;
29
29
  log.info(`Starting CI watch (maxAttempts=${maxAttempts}, timeout=${timeoutMs}ms)`);
30
30
  // Check if any CI run exists for this branch
31
- const initialCiStatus = await gitPrService.getCiStatus(cwd, branch);
31
+ let initialCiStatus;
32
+ try {
33
+ initialCiStatus = await gitPrService.getCiStatus(cwd, branch);
34
+ }
35
+ catch (err) {
36
+ // Handle GitHub API rate limits gracefully — skip CI watching
37
+ const errMsg = err instanceof Error ? err.message : String(err);
38
+ if (errMsg.includes('rate limit') || errMsg.includes('403')) {
39
+ log.info('GitHub API rate limit hit — skipping CI watch');
40
+ return { ciStatus: CiStatus.Success, ciFixAttempts, ciFixHistory, ciFixStatus: 'idle' };
41
+ }
42
+ throw err;
43
+ }
32
44
  if (!initialCiStatus.runUrl) {
33
45
  // No CI run detected — check if PR has merge conflicts which would prevent CI from running
34
46
  if (params.prNumber != null) {
@@ -23,6 +23,10 @@ export interface MergeNodeDeps {
23
23
  hasRemote: (cwd: string) => Promise<boolean>;
24
24
  getDefaultBranch: (cwd: string) => Promise<string>;
25
25
  featureRepository: Pick<IFeatureRepository, 'findById' | 'update'>;
26
+ /**
27
+ * Perform a local squash merge (deterministic git commands, no agent needed).
28
+ */
29
+ localMergeSquash: (cwd: string, featureBranch: string, baseBranch: string, commitMessage: string, hasRemote?: boolean) => Promise<void>;
26
30
  /**
27
31
  * Verify that featureBranch has been merged into baseBranch.
28
32
  * Returns true if baseBranch contains all commits from featureBranch.
@@ -1 +1 @@
1
- {"version":3,"file":"merge.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AACpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yEAAyE,CAAC;AAClH,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACd,MAAM,iEAAiE,CAAC;AAkBzE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,uEAAuE,CAAC;AAE3H,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,cAAc,CAAC;IACzB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1E,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC;IACnE;;;OAGG;IACH,WAAW,EAAE,CACX,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,MAAM,KACrB,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB;;OAEG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,YAAY,EAAE,aAAa,CAAC;IAC5B,6BAA6B,EAAE,IAAI,CAAC,6BAA6B,EAAE,SAAS,CAAC,CAAC;CAC/E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,IAGnC,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CA6S7E"}
1
+ {"version":3,"file":"merge.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AACpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yEAAyE,CAAC;AAClH,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACd,MAAM,iEAAiE,CAAC;AAkBzE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,uEAAuE,CAAC;AAE3H,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,cAAc,CAAC;IACzB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1E,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC;IACnE;;OAEG;IACH,gBAAgB,EAAE,CAChB,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,OAAO,KAChB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB;;;OAGG;IACH,WAAW,EAAE,CACX,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,MAAM,KACrB,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB;;OAEG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,YAAY,EAAE,aAAa,CAAC;IAC5B,6BAA6B,EAAE,IAAI,CAAC,6BAA6B,EAAE,SAAS,CAAC,CAAC;CAC/E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,IAGnC,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CA8R7E"}
@@ -18,7 +18,7 @@ import { createNodeLogger, shouldInterrupt, retryExecute, buildExecutorOptions,
18
18
  import { reportNodeStart } from '../../heartbeat.js';
19
19
  import { recordPhaseStart, recordPhaseEnd, recordApprovalWaitStart, } from '../../phase-timing-context.js';
20
20
  import { updateNodeLifecycle } from '../../lifecycle-context.js';
21
- import { buildCommitPushPrPrompt, buildMergeSquashPrompt } from '../prompts/merge-prompts.js';
21
+ import { buildCommitPushPrPrompt } from '../prompts/merge-prompts.js';
22
22
  import { parseCommitHash, parsePrUrl } from './merge-output-parser.js';
23
23
  import { runCiWatchFixLoop } from './ci-watch-fix-loop.js';
24
24
  /**
@@ -30,6 +30,7 @@ import { runCiWatchFixLoop } from './ci-watch-fix-loop.js';
30
30
  export function createMergeNode(deps) {
31
31
  const log = createNodeLogger('merge');
32
32
  return async (state) => {
33
+ log.activate();
33
34
  log.info('Starting merge flow');
34
35
  reportNodeStart('merge');
35
36
  await updateNodeLifecycle('merge');
@@ -211,23 +212,14 @@ export function createMergeNode(deps) {
211
212
  merged = true;
212
213
  }
213
214
  else {
214
- // No PR: local merge via agent in the ORIGINAL repo (not the worktree,
215
+ // No PR: programmatic local squash merge in the ORIGINAL repo (not the worktree,
215
216
  // which IS the feature branch and must not be modified during merge).
216
- log.info('Agent call: merge/squash (local, no PR)');
217
- // Record base branch HEAD before merge so verification can detect
218
- // agents that modify the tree during squash (e.g. adding .gitignore).
219
- const premergeBaseSha = await deps.revParse(state.repositoryPath, baseBranch);
220
- const mergePrompt = buildMergeSquashPrompt({ ...state, prUrl, prNumber, commitHash }, branch, baseBranch, remoteAvailable);
221
- const mergeOptions = { ...options, cwd: state.repositoryPath };
222
- await retryExecute(executor, mergePrompt, mergeOptions, { logger: log });
223
- // Verify the merge actually succeeded (agent may report success without merging)
224
- const mergeVerified = await deps.verifyMerge(state.repositoryPath, branch, baseBranch, premergeBaseSha);
225
- if (!mergeVerified) {
226
- throw new Error(`Merge verification failed: ${branch} was not merged into ${baseBranch}. ` +
227
- `The agent may have encountered errors during the merge operation.`);
228
- }
229
- log.info('Merge verified: feature branch is ancestor of base branch');
230
- messages.push(`[merge] Agent completed local merge operation`);
217
+ // Uses direct git commands instead of an agent for reliability.
218
+ log.info('Programmatic local squash merge (no agent needed)');
219
+ const commitMsg = `feat: squash merge ${branch} into ${baseBranch}`;
220
+ await deps.localMergeSquash(state.repositoryPath, branch, baseBranch, commitMsg, remoteAvailable);
221
+ log.info('Local squash merge completed successfully');
222
+ messages.push(`[merge] Local squash merge completed`);
231
223
  merged = true;
232
224
  }
233
225
  }
@@ -13,6 +13,8 @@ import type { FeatureAgentState } from '../state.js';
13
13
  * Also sets the current phase so executor logs inherit the node context.
14
14
  */
15
15
  export declare function createNodeLogger(nodeName: string): {
16
+ /** Activate this node's phase in the global log context. */
17
+ activate(): void;
16
18
  info(message: string): void;
17
19
  error(message: string): void;
18
20
  };
@@ -1 +1 @@
1
- {"version":3,"file":"node-helpers.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node-helpers.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.ts"],"names":[],"mappings":"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"}
@@ -18,8 +18,11 @@ import { getLogPrefix, setCurrentPhase } from '../log-context.js';
18
18
  * Also sets the current phase so executor logs inherit the node context.
19
19
  */
20
20
  export function createNodeLogger(nodeName) {
21
- setCurrentPhase(nodeName);
22
21
  return {
22
+ /** Activate this node's phase in the global log context. */
23
+ activate() {
24
+ setCurrentPhase(nodeName);
25
+ },
23
26
  info(message) {
24
27
  const ts = new Date().toISOString();
25
28
  process.stdout.write(`[${ts}] [${nodeName}] ${getLogPrefix()}${message}\n`);
@@ -48,7 +51,7 @@ export function buildExecutorOptions(state, overrides) {
48
51
  return {
49
52
  cwd: state.worktreePath || state.repositoryPath,
50
53
  maxTurns: 5000,
51
- timeout: 600_000, // 10 minutes per agent call — prevents infinite hangs
54
+ timeout: 1_800_000, // 30 minutes per agent call — prevents infinite hangs
52
55
  ...(state.model ? { model: state.model } : {}),
53
56
  ...overrides,
54
57
  };
@@ -104,8 +107,8 @@ export function shouldInterrupt(nodeName, gates) {
104
107
  return false;
105
108
  }
106
109
  const API_ERROR_RE = /API Error: (400|429|5\d{2})/;
107
- const NETWORK_ERROR_RE = /ECONNREFUSED|ETIMEDOUT|ENOTFOUND|timed out/i;
108
- const NON_RETRYABLE_RE = /Process exited with code|ENOENT|SyntaxError/;
110
+ const NETWORK_ERROR_RE = /ECONNREFUSED|ETIMEDOUT|ENOTFOUND|network timed out/i;
111
+ const NON_RETRYABLE_RE = /Process exited with code|ENOENT|SyntaxError|Agent execution timed out/;
109
112
  /**
110
113
  * Classify an error message into a retry category.
111
114
  *
@@ -317,6 +320,7 @@ Before proceeding with this phase:
317
320
  export function executeNode(nodeName, executor, buildPrompt) {
318
321
  const log = createNodeLogger(nodeName);
319
322
  return async (state) => {
323
+ log.activate();
320
324
  log.info('Starting...');
321
325
  reportNodeStart(nodeName);
322
326
  // Update feature lifecycle to reflect the current phase
@@ -14,11 +14,14 @@ function formatTaskSection(task) {
14
14
  }
15
15
  if (task.tdd) {
16
16
  section += `\n**TDD Guidance:**\n`;
17
- section += `- Write tests for: ${task.tdd.red.join('; ')}\n`;
18
- section += `- Implement: ${task.tdd.green.join('; ')}\n`;
19
- section += `- Then consider: ${task.tdd.refactor.join('; ')}\n`;
17
+ if (task.tdd.red?.length)
18
+ section += `- Write tests for: ${task.tdd.red.join('; ')}\n`;
19
+ if (task.tdd.green?.length)
20
+ section += `- Implement: ${task.tdd.green.join('; ')}\n`;
21
+ if (task.tdd.refactor?.length)
22
+ section += `- Then consider: ${task.tdd.refactor.join('; ')}\n`;
20
23
  }
21
- if (task.dependencies.length > 0) {
24
+ if (task.dependencies?.length) {
22
25
  section += `\nDepends on: ${task.dependencies.join(', ')}\n`;
23
26
  }
24
27
  return section;
@@ -1 +1 @@
1
- {"version":3,"file":"repair.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAGpG;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,EAC3B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,MAAM,GACd,MAAM,CA2BR;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,EAC3B,QAAQ,EAAE,cAAc,GACvB,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAuCnE"}
1
+ {"version":3,"file":"repair.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAGpG;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,EAC3B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,MAAM,GACd,MAAM,CA2BR;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,EAC3B,QAAQ,EAAE,cAAc,GACvB,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAwCnE"}
@@ -49,6 +49,7 @@ export function createRepairNode(filename, executor) {
49
49
  const label = Array.isArray(filename) ? filename.join('+') : filename;
50
50
  const log = createNodeLogger(`repair:${label}`);
51
51
  return async (state) => {
52
+ log.activate();
52
53
  log.info(`Repairing ${label} (attempt ${state.validationRetries})`);
53
54
  const filenames = Array.isArray(filename) ? filename : [filename];
54
55
  const contents = filenames.map((f) => readSpecFile(state.specDir, f));
@@ -1 +1 @@
1
- {"version":3,"file":"validate.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/validate.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,KAAK,eAAe,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,gBAAgB,CAAC;AAE3D;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,eAAe,GACtB,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAsDnE"}
1
+ {"version":3,"file":"validate.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/validate.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,KAAK,eAAe,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,gBAAgB,CAAC;AAE3D;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,eAAe,GACtB,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAuDnE"}
@@ -8,6 +8,7 @@ import { readSpecFile, safeYamlLoad, createNodeLogger } from './node-helpers.js'
8
8
  export function createValidateNode(filename, schema) {
9
9
  const log = createNodeLogger(`validate:${filename}`);
10
10
  return async (state) => {
11
+ log.activate();
11
12
  log.info(`Validating ${filename}`);
12
13
  const content = readSpecFile(state.specDir, filename);
13
14
  if (!content) {
@@ -19,6 +19,7 @@ export declare class GitPrService implements IGitPrService {
19
19
  push(cwd: string, branch: string, setUpstream?: boolean): Promise<void>;
20
20
  createPr(cwd: string, prYamlPath: string): Promise<PrCreateResult>;
21
21
  mergePr(cwd: string, prNumber: number, strategy?: MergeStrategy): Promise<void>;
22
+ localMergeSquash(cwd: string, featureBranch: string, baseBranch: string, commitMessage: string, hasRemote?: boolean): Promise<void>;
22
23
  mergeBranch(cwd: string, sourceBranch: string, targetBranch: string): Promise<void>;
23
24
  getCiStatus(cwd: string, branch: string): Promise<CiStatusResult>;
24
25
  watchCi(cwd: string, branch: string, timeoutMs?: number): Promise<CiStatusResult>;
@@ -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":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wEAAwE,CAAC;AAC5G,OAAO,KAAK,EACV,cAAc,EAGd,WAAW,EACX,QAAQ,EACR,aAAa,EACb,cAAc,EACd,YAAY,EACb,MAAM,wEAAwE,CAAC;AAQhF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,qBACa,YAAa,YAAW,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,YAAY;IAErE,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKxC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAgBjD,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgF9C,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKnD,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKpD,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAWxD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAuClE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,aAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUzF,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnF,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAsBjE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAmDjF,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAWhF,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAevE,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAaxE,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,aAAa;IAmFf,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAoCpD,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAc/E,WAAW,CACf,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,OAAO,CAAC;IA6CnB;;;OAGG;YACW,UAAU;IAmBlB,cAAc,CAClB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,WAAW,SAAS,GACnB,OAAO,CAAC,MAAM,CAAC;IAWlB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,aAAa;CAiBtB"}
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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"}
@@ -18,7 +18,9 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
18
18
  };
19
19
  import { injectable, inject } from 'tsyringe';
20
20
  import { GitPrError, GitPrErrorCode, } from '../../../application/ports/output/services/git-pr-service.interface.js';
21
- import { readFileSync } from 'node:fs';
21
+ import { readFileSync, writeFileSync, unlinkSync } from 'node:fs';
22
+ import { tmpdir } from 'node:os';
23
+ import { join } from 'node:path';
22
24
  import yaml from 'js-yaml';
23
25
  let GitPrService = class GitPrService {
24
26
  execFile;
@@ -192,6 +194,74 @@ let GitPrService = class GitPrService {
192
194
  throw new GitPrError(message, GitPrErrorCode.MERGE_FAILED, cause);
193
195
  }
194
196
  }
197
+ async localMergeSquash(cwd, featureBranch, baseBranch, commitMessage, hasRemote = false) {
198
+ try {
199
+ // Fetch latest from remote if available
200
+ if (hasRemote) {
201
+ try {
202
+ await this.execFile('git', ['fetch', 'origin'], { cwd });
203
+ }
204
+ catch {
205
+ // Fetch failure is non-fatal — proceed with local state
206
+ }
207
+ }
208
+ // Checkout base branch
209
+ await this.execFile('git', ['checkout', baseBranch], { cwd });
210
+ // Pull latest base if remote available
211
+ if (hasRemote) {
212
+ try {
213
+ await this.execFile('git', ['pull', 'origin', baseBranch], { cwd });
214
+ }
215
+ catch {
216
+ // Pull failure is non-fatal — proceed with local state
217
+ }
218
+ }
219
+ // Clean untracked files that may conflict with the merge (e.g. files created
220
+ // by a prior agent call that leaked into the original repo directory)
221
+ try {
222
+ await this.execFile('git', ['clean', '-fd'], { cwd });
223
+ }
224
+ catch {
225
+ // Clean failure is non-fatal
226
+ }
227
+ // Squash merge the feature branch
228
+ await this.execFile('git', ['merge', '--squash', featureBranch], { cwd });
229
+ // Commit the squash merge (skip if nothing to commit — branches may be equivalent)
230
+ const { stdout: status } = await this.execFile('git', ['status', '--porcelain'], { cwd });
231
+ if (status.trim().length > 0) {
232
+ // Write commit message to a temp file to avoid shell splitting on Windows
233
+ // (DI-injected execFile uses shell: true on Windows, which splits on spaces)
234
+ const msgFile = join(tmpdir(), `shep-merge-msg-${Date.now()}.txt`);
235
+ try {
236
+ writeFileSync(msgFile, commitMessage, 'utf8');
237
+ await this.execFile('git', ['commit', '--file', msgFile], { cwd });
238
+ }
239
+ finally {
240
+ try {
241
+ unlinkSync(msgFile);
242
+ }
243
+ catch {
244
+ // Cleanup failure is non-fatal
245
+ }
246
+ }
247
+ }
248
+ // Delete the feature branch after successful merge
249
+ try {
250
+ await this.execFile('git', ['branch', '-d', featureBranch], { cwd });
251
+ }
252
+ catch {
253
+ // Branch deletion failure is non-fatal (branch may have already been deleted)
254
+ }
255
+ }
256
+ catch (error) {
257
+ const message = error instanceof Error ? error.message : String(error);
258
+ const cause = error instanceof Error ? error : undefined;
259
+ if (message.includes('CONFLICT') || message.includes('conflict')) {
260
+ throw new GitPrError(`Merge conflict while squash-merging ${featureBranch} into ${baseBranch}: ${message}`, GitPrErrorCode.MERGE_CONFLICT, cause);
261
+ }
262
+ throw new GitPrError(`Local squash merge failed: ${message}`, GitPrErrorCode.GIT_ERROR, cause);
263
+ }
264
+ }
195
265
  async mergeBranch(cwd, sourceBranch, targetBranch) {
196
266
  try {
197
267
  await this.execFile('git', ['checkout', targetBranch], { cwd });
@@ -18,7 +18,7 @@ export declare class WorktreeService implements IWorktreeService {
18
18
  private readonly execFile;
19
19
  constructor(execFile: ExecFunction);
20
20
  create(repoPath: string, branch: string, worktreePath: string, startPoint?: string): Promise<WorktreeInfo>;
21
- remove(worktreePath: string, force?: boolean): Promise<void>;
21
+ remove(repoPath: string, worktreePath: string, force?: boolean): Promise<void>;
22
22
  prune(repoPath: string): Promise<void>;
23
23
  list(repoPath: string): Promise<WorktreeInfo[]>;
24
24
  exists(repoPath: string, branch: string): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"worktree.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/git/worktree.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,0EAA0E,CAAC;AAQlF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEjD,qBACa,eAAgB,YAAW,gBAAgB;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,YAAY;IAErE,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC;IAuBlB,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5D,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAO/C,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK1D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWhE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWtE,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC1D,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAMzD,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,aAAa;IAgCrB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,qBAAqB;CAsB9B"}
1
+ {"version":3,"file":"worktree.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/git/worktree.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,0EAA0E,CAAC;AAQlF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEjD,qBACa,eAAgB,YAAW,gBAAgB;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,YAAY;IAErE,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC;IAuBlB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAW9E,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAO/C,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK1D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWhE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWtE,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC1D,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAQzD,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,aAAa;IAgCrB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,qBAAqB;CAsB9B"}
@@ -50,13 +50,13 @@ let WorktreeService = class WorktreeService {
50
50
  }
51
51
  return created;
52
52
  }
53
- async remove(worktreePath, force) {
53
+ async remove(repoPath, worktreePath, force) {
54
54
  try {
55
55
  const args = ['worktree', 'remove'];
56
56
  if (force)
57
57
  args.push('--force');
58
58
  args.push(worktreePath);
59
- await this.execFile('git', args, {});
59
+ await this.execFile('git', args, { cwd: repoPath });
60
60
  }
61
61
  catch (error) {
62
62
  throw this.parseGitError(error);
@@ -136,7 +136,9 @@ let WorktreeService = class WorktreeService {
136
136
  }
137
137
  }
138
138
  getWorktreePath(repoPath, branch) {
139
- const repoHash = createHash('sha256').update(repoPath).digest('hex').slice(0, 16);
139
+ // Normalize separators before hashing so C:\foo and C:/foo produce the same hash
140
+ const normalizedRepoPath = repoPath.replace(/\\/g, '/');
141
+ const repoHash = createHash('sha256').update(normalizedRepoPath).digest('hex').slice(0, 16);
140
142
  const slug = branch.replace(/\//g, '-');
141
143
  return path.join(getShepHomeDir(), 'repos', repoHash, 'wt', slug).replace(/\\/g, '/');
142
144
  }
@@ -1 +1 @@
1
- {"version":3,"file":"compute-worktree-path.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAI5E"}
1
+ {"version":3,"file":"compute-worktree-path.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAM5E"}
@@ -17,7 +17,9 @@ import { getShepHomeDir } from '../filesystem/shep-directory.service.js';
17
17
  * @returns Absolute path to the worktree directory under ~/.shep/repos/
18
18
  */
19
19
  export function computeWorktreePath(repoPath, branch) {
20
- const repoHash = createHash('sha256').update(repoPath).digest('hex').slice(0, 16);
20
+ // Normalize separators before hashing so C:\foo and C:/foo produce the same hash
21
+ const normalizedRepoPath = repoPath.replace(/\\/g, '/');
22
+ const repoHash = createHash('sha256').update(normalizedRepoPath).digest('hex').slice(0, 16);
21
23
  const slug = branch.replace(/\//g, '-');
22
24
  return join(getShepHomeDir(), 'repos', repoHash, 'wt', slug).replace(/\\/g, '/');
23
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"json-driven-ide-launcher.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EAChB,MAAM,8EAA8E,CAAC;AAetF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAGnF;AAED,qBACa,4BAA6B,YAAW,mBAAmB;IACtE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;;IAiB1C,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/B,OAAO,CAAC,eAAe,CAAC;IA8DrB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAQ5D"}
1
+ {"version":3,"file":"json-driven-ide-launcher.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EAChB,MAAM,8EAA8E,CAAC;AAetF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAGnF;AAED,qBACa,4BAA6B,YAAW,mBAAmB;IACtE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;;IAiB1C,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/B,OAAO,CAAC,eAAe,CAAC;IAkErB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAQ5D"}
@@ -83,7 +83,11 @@ let JsonDrivenIdeLauncherService = class JsonDrivenIdeLauncherService {
83
83
  child = spawn(resolved, [], opts);
84
84
  }
85
85
  else {
86
- const [command, ...args] = resolved.split(/\s+/);
86
+ // Split the template BEFORE substituting {dir} so that directory
87
+ // paths containing spaces are kept as a single argument.
88
+ const parts = openCmd.split(/\s+/);
89
+ const command = parts[0].replace('{dir}', directoryPath);
90
+ const args = parts.slice(1).map((p) => p.replace('{dir}', directoryPath));
87
91
  child = spawn(command, args, opts);
88
92
  }
89
93
  if (opts.detached)
@@ -1 +1 @@
1
- {"version":3,"file":"pr-sync-watcher.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gFAAgF,CAAC;AACzH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4EAA4E,CAAC;AACtH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wEAAwE,CAAC;AAK5G,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8EAA8E,CAAC;AACzH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAqB3C,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;IAC7C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAuB;IAC3D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IACrE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;IAC9D,OAAO,CAAC,QAAQ,CAAC,EAAE,CAA2B;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,SAAS,CAAK;gBAGpB,WAAW,EAAE,kBAAkB,EAC/B,YAAY,EAAE,mBAAmB,EACjC,YAAY,EAAE,aAAa,EAC3B,mBAAmB,EAAE,oBAAoB,EACzC,cAAc,GAAE,MAAiC,EACjD,EAAE,GAAE,QAAQ,CAAC,QAAQ,GAAG,IAAW;IAWrC,SAAS,IAAI,OAAO;IAIpB,KAAK,IAAI,IAAI;IAcb,IAAI,IAAI,IAAI;IASZ,gFAAgF;IAChF,OAAO,CAAC,cAAc;IAiBtB,0FAA0F;IAC1F,OAAO,CAAC,iBAAiB;YAUX,IAAI;IA6ClB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,oBAAoB;YAYd,iBAAiB;YA+CjB,cAAc;IAoL5B,8EAA8E;YAChE,gBAAgB;IAW9B,OAAO,CAAC,gBAAgB;CAoBzB;AAMD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,kBAAkB,EAC/B,YAAY,EAAE,mBAAmB,EACjC,YAAY,EAAE,aAAa,EAC3B,mBAAmB,EAAE,oBAAoB,EACzC,cAAc,CAAC,EAAE,MAAM,EACvB,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,GAC5B,IAAI,CAaN;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,oBAAoB,CAQvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC"}
1
+ {"version":3,"file":"pr-sync-watcher.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gFAAgF,CAAC;AACzH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4EAA4E,CAAC;AACtH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wEAAwE,CAAC;AAK5G,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8EAA8E,CAAC;AACzH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAqB3C,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;IAC7C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAuB;IAC3D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IACrE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;IAC9D,OAAO,CAAC,QAAQ,CAAC,EAAE,CAA2B;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,SAAS,CAAK;gBAGpB,WAAW,EAAE,kBAAkB,EAC/B,YAAY,EAAE,mBAAmB,EACjC,YAAY,EAAE,aAAa,EAC3B,mBAAmB,EAAE,oBAAoB,EACzC,cAAc,GAAE,MAAiC,EACjD,EAAE,GAAE,QAAQ,CAAC,QAAQ,GAAG,IAAW;IAWrC,SAAS,IAAI,OAAO;IAIpB,KAAK,IAAI,IAAI;IAcb,IAAI,IAAI,IAAI;IASZ,gFAAgF;IAChF,OAAO,CAAC,cAAc;IAiBtB,0FAA0F;IAC1F,OAAO,CAAC,iBAAiB;YAUX,IAAI;IA6ClB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,oBAAoB;YAYd,iBAAiB;YA+CjB,cAAc;IAkM5B,8EAA8E;YAChE,gBAAgB;IAW9B,OAAO,CAAC,gBAAgB;CAoBzB;AAMD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,kBAAkB,EAC/B,YAAY,EAAE,mBAAmB,EACjC,YAAY,EAAE,aAAa,EAC3B,mBAAmB,EAAE,oBAAoB,EACzC,cAAc,CAAC,EAAE,MAAM,EACvB,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,GAC5B,IAAI,CAaN;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,oBAAoB,CAQvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC"}
@@ -250,6 +250,18 @@ export class PrSyncWatcherService {
250
250
  console.log(`${TAG} PR #${pr.number} status changed: ${tracked.prStatus} -> ${newPrStatus} for "${feature.name}"`);
251
251
  feature.pr = { ...pr, status: newPrStatus };
252
252
  if (newPrStatus === PrStatus.Merged) {
253
+ // Re-fetch to avoid racing with the merge node which may have already
254
+ // transitioned this feature to Maintain and performed cleanup.
255
+ const freshFeature = await this.featureRepo.findById(feature.id);
256
+ if (freshFeature?.lifecycle === SdlcLifecycle.Maintain) {
257
+ // eslint-disable-next-line no-console
258
+ console.log(`${TAG} Feature "${feature.name}" already in Maintain — skipping duplicate transition`);
259
+ tracked.prStatus = newPrStatus;
260
+ // Still update the PR status on the record so it reflects Merged
261
+ feature.pr = { ...(freshFeature.pr ?? pr), status: PrStatus.Merged };
262
+ await this.featureRepo.update({ ...freshFeature, pr: feature.pr, updatedAt: new Date() });
263
+ return;
264
+ }
253
265
  feature.lifecycle = SdlcLifecycle.Maintain;
254
266
  await this.completeAgentRun(feature);
255
267
  this.emitNotification(NotificationEventType.PrMerged, feature.id, feature.agentRunId ?? '', feature.name, `PR #${pr.number} merged for ${feature.name}`, NotificationSeverity.Success);
@@ -1 +1 @@
1
- {"version":3,"file":"ui.command.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/cli/commands/ui.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,EAAwB,MAAM,WAAW,CAAC;AAuC1D;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAwGzC"}
1
+ {"version":3,"file":"ui.command.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/cli/commands/ui.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,EAAwB,MAAM,WAAW,CAAC;AAgC1D;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CA0FzC"}
@@ -23,7 +23,6 @@ import { initializeNotificationWatcher, getNotificationWatcher, } from '../../..
23
23
  import { initializePrSyncWatcher, getPrSyncWatcher, } from '../../../../packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.js';
24
24
  import { getExistingConnection } from '../../../../packages/core/src/infrastructure/persistence/sqlite/connection.js';
25
25
  import { BrowserOpenerService } from '../../../../packages/core/src/infrastructure/services/browser-opener.service.js';
26
- import { initializeWebhookManager, getWebhookManager, hasWebhookManager, } from '../../../../packages/core/src/infrastructure/services/webhook/webhook-manager.service.js';
27
26
  import { colors, fmt, messages } from '../ui/index.js';
28
27
  function parsePort(value) {
29
28
  const port = parseInt(value, 10);
@@ -71,17 +70,6 @@ Examples:
71
70
  const db = getExistingConnection();
72
71
  initializePrSyncWatcher(featureRepo, runRepo, gitPrService, notificationService, undefined, db);
73
72
  getPrSyncWatcher().start();
74
- // Start webhook system (optional — falls back to polling if cloudflared is not available)
75
- try {
76
- const tunnelService = container.resolve('ITunnelService');
77
- const webhookService = container.resolve('IWebhookService');
78
- initializeWebhookManager(tunnelService, webhookService);
79
- // Start is async and non-blocking — failures are logged, not thrown
80
- void getWebhookManager().start(port);
81
- }
82
- catch {
83
- // Webhook system is optional; polling continues to work
84
- }
85
73
  const url = `http://localhost:${port}`;
86
74
  messages.success(`Server ready at ${fmt.code(url)}`);
87
75
  messages.info('Press Ctrl+C to stop');
@@ -103,9 +91,6 @@ Examples:
103
91
  // Force exit after 5s if graceful shutdown stalls
104
92
  const forceExit = setTimeout(() => process.exit(0), 5000);
105
93
  forceExit.unref();
106
- if (hasWebhookManager()) {
107
- await getWebhookManager().stop();
108
- }
109
94
  getPrSyncWatcher().stop();
110
95
  getNotificationWatcher().stop();
111
96
  await service.stop();
@@ -1 +1 @@
1
- {"version":3,"file":"app-sidebar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAG/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,iBAAiB,CAAC;IAEhC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,YAAY,EAEZ,cAAc,GACf,EAAE,eAAe,2CAsHjB"}
1
+ {"version":3,"file":"app-sidebar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAG/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,iBAAiB,CAAC;IAEhC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,YAAY,EAEZ,cAAc,GACf,EAAE,eAAe,2CAgHjB"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { usePathname } from 'next/navigation';
4
- import { Home, Wrench, Puzzle, Settings, Webhook } from 'lucide-react';
4
+ import { Home, Wrench, Puzzle, Settings } from 'lucide-react';
5
5
  import { Sidebar, SidebarHeader, SidebarContent, SidebarMenu, SidebarMenuItem, SidebarRail, useSidebar, } from '../../ui/sidebar.js';
6
6
  import { ScrollArea } from '../../ui/scroll-area.js';
7
7
  import { SidebarNavItem } from '../../common/sidebar-nav-item/index.js';
@@ -29,7 +29,7 @@ export function AppSidebar({ features, featureFlags, onFeatureClick, }) {
29
29
  'flex min-w-0 flex-1 items-center gap-2 overflow-hidden px-2',
30
30
  'transition-opacity duration-200 ease-out',
31
31
  expandedVisible ? 'opacity-100' : 'opacity-0',
32
- ].join(' '), "aria-hidden": !expandedVisible, children: [_jsx(ShepLogo, { className: "shrink-0", size: 20, variant: versionData.isDev ? 'dev' : 'default' }), _jsx("span", { className: "truncate text-sm font-semibold tracking-tight", children: "Shep" }), _jsx(VersionBadge, { version: versionData.version, branch: versionData.branch || undefined, commitHash: versionData.commitHash || undefined, isDev: versionData.isDev, packageName: versionData.packageName, description: versionData.description, instancePath: versionData.instancePath || undefined })] })) : null, _jsx(SidebarCollapseToggle, { className: "shrink-0 transition-all duration-200" })] }) }), _jsx(SidebarNavItem, { icon: Home, label: "Control Center", href: "/", active: pathname === '/' }), _jsx(SidebarNavItem, { icon: Wrench, label: "Tools", href: "/tools", active: pathname === '/tools' }), featureFlags.skills ? (_jsx(SidebarNavItem, { icon: Puzzle, label: "Skills", href: "/skills", active: pathname === '/skills' })) : null, _jsx(SidebarNavItem, { icon: Webhook, label: "Webhooks", href: "/webhooks", active: pathname === '/webhooks' }), _jsx(SidebarNavItem, { icon: Settings, label: "Settings", href: "/settings", active: pathname === '/settings' })] }) }), _jsx(SidebarContent, { children: showExpanded ? (_jsxs("div", { className: [
32
+ ].join(' '), "aria-hidden": !expandedVisible, children: [_jsx(ShepLogo, { className: "shrink-0", size: 20, variant: versionData.isDev ? 'dev' : 'default' }), _jsx("span", { className: "truncate text-sm font-semibold tracking-tight", children: "Shep" }), _jsx(VersionBadge, { version: versionData.version, branch: versionData.branch || undefined, commitHash: versionData.commitHash || undefined, isDev: versionData.isDev, packageName: versionData.packageName, description: versionData.description, instancePath: versionData.instancePath || undefined })] })) : null, _jsx(SidebarCollapseToggle, { className: "shrink-0 transition-all duration-200" })] }) }), _jsx(SidebarNavItem, { icon: Home, label: "Control Center", href: "/", active: pathname === '/' }), _jsx(SidebarNavItem, { icon: Wrench, label: "Tools", href: "/tools", active: pathname === '/tools' }), featureFlags.skills ? (_jsx(SidebarNavItem, { icon: Puzzle, label: "Skills", href: "/skills", active: pathname === '/skills' })) : null, _jsx(SidebarNavItem, { icon: Settings, label: "Settings", href: "/settings", active: pathname === '/settings' })] }) }), _jsx(SidebarContent, { children: showExpanded ? (_jsxs("div", { className: [
33
33
  'min-w-0 overflow-hidden transition-opacity duration-200 ease-out',
34
34
  '[&_[data-sidebar=group-label]]:!mt-0 [&_[data-sidebar=group-label]]:!opacity-100 [&_[data-sidebar=group-label]]:!transition-none',
35
35
  expandedVisible ? 'opacity-100' : 'opacity-0',