@shepai/cli 1.107.1 → 1.107.2-pr335.e03c737

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 (221) hide show
  1. package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts +2 -1
  2. package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts.map +1 -1
  3. package/dist/packages/core/src/application/use-cases/features/cleanup-feature-worktree.use-case.js +1 -1
  4. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  5. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +2 -2
  6. package/dist/packages/core/src/application/use-cases/features/create/metadata-generator.d.ts +5 -0
  7. package/dist/packages/core/src/application/use-cases/features/create/metadata-generator.d.ts.map +1 -1
  8. package/dist/packages/core/src/application/use-cases/features/create/metadata-generator.js +31 -13
  9. package/dist/packages/core/src/application/use-cases/features/delete-feature.use-case.js +1 -1
  10. package/dist/packages/core/src/application/use-cases/repositories/add-repository.use-case.d.ts.map +1 -1
  11. package/dist/packages/core/src/application/use-cases/repositories/add-repository.use-case.js +6 -2
  12. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  13. package/dist/packages/core/src/infrastructure/di/container.js +14 -3
  14. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +4 -4
  15. package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.js +4 -4
  16. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts.map +1 -1
  17. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.js +9 -0
  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 +26 -7
  20. package/dist/packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.d.ts.map +1 -1
  21. package/dist/packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.js +5 -3
  22. package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.d.ts.map +1 -1
  23. package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.js +7 -0
  24. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  25. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +1 -0
  26. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/evidence-prompts.d.ts.map +1 -1
  27. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/evidence-prompts.js +4 -3
  28. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.d.ts.map +1 -1
  29. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.js +2 -1
  30. package/dist/packages/core/src/infrastructure/services/agents/sessions/claude-code-session.repository.js +1 -1
  31. package/dist/packages/core/src/infrastructure/services/attachment-storage.service.js +3 -3
  32. package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.d.ts +1 -1
  33. package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.d.ts.map +1 -1
  34. package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.js +8 -7
  35. package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts +1 -1
  36. package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts.map +1 -1
  37. package/dist/packages/core/src/infrastructure/services/git/worktree.service.js +23 -8
  38. package/dist/packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.d.ts.map +1 -1
  39. package/dist/packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.js +4 -2
  40. package/dist/packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.d.ts.map +1 -1
  41. package/dist/packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.js +11 -9
  42. package/dist/packages/core/src/infrastructure/services/process/tree-kill.d.ts +12 -0
  43. package/dist/packages/core/src/infrastructure/services/process/tree-kill.d.ts.map +1 -0
  44. package/dist/packages/core/src/infrastructure/services/process/tree-kill.js +11 -0
  45. package/dist/packages/core/src/infrastructure/services/tool-installer/binary-exists.d.ts +25 -0
  46. package/dist/packages/core/src/infrastructure/services/tool-installer/binary-exists.d.ts.map +1 -0
  47. package/dist/packages/core/src/infrastructure/services/tool-installer/binary-exists.js +32 -0
  48. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.d.ts.map +1 -1
  49. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.js +4 -27
  50. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/alacritty.json +3 -2
  51. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/claude-code.json +3 -2
  52. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor-cli.json +3 -2
  53. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor.json +2 -1
  54. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/gh.json +2 -1
  55. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/git.json +2 -1
  56. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/vscode.json +2 -1
  57. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/warp.json +3 -2
  58. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/windsurf.json +3 -2
  59. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/zed.json +3 -2
  60. package/dist/src/presentation/cli/commands/daemon/start-daemon.d.ts.map +1 -1
  61. package/dist/src/presentation/cli/commands/daemon/start-daemon.js +1 -0
  62. package/dist/src/presentation/cli/commands/daemon/stop-daemon.d.ts.map +1 -1
  63. package/dist/src/presentation/cli/commands/daemon/stop-daemon.js +5 -4
  64. package/dist/src/presentation/cli/commands/upgrade.command.d.ts.map +1 -1
  65. package/dist/src/presentation/cli/commands/upgrade.command.js +4 -0
  66. package/dist/src/presentation/web/app/actions/deploy-repository.d.ts.map +1 -1
  67. package/dist/src/presentation/web/app/actions/deploy-repository.js +2 -1
  68. package/dist/src/presentation/web/app/actions/open-folder.d.ts.map +1 -1
  69. package/dist/src/presentation/web/app/actions/open-folder.js +4 -2
  70. package/dist/src/presentation/web/app/actions/open-ide.d.ts.map +1 -1
  71. package/dist/src/presentation/web/app/actions/open-ide.js +2 -1
  72. package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -1
  73. package/dist/src/presentation/web/app/actions/open-shell.js +4 -2
  74. package/dist/src/presentation/web/app/build-graph-nodes.d.ts.map +1 -1
  75. package/dist/src/presentation/web/app/build-graph-nodes.js +8 -5
  76. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  77. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +10 -20
  78. package/dist/src/presentation/web/components/common/merge-review/diff-view.js +1 -1
  79. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  80. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +12 -0
  81. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  82. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +32 -8
  83. package/dist/src/presentation/web/hooks/use-graph-state.d.ts +14 -0
  84. package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -1
  85. package/dist/src/presentation/web/hooks/use-graph-state.js +35 -1
  86. package/dist/src/presentation/web/lib/derive-graph.d.ts.map +1 -1
  87. package/dist/src/presentation/web/lib/derive-graph.js +4 -2
  88. package/dist/tsconfig.build.tsbuildinfo +1 -1
  89. package/package.json +10 -6
  90. package/web/.next/BUILD_ID +1 -1
  91. package/web/.next/build-manifest.json +2 -2
  92. package/web/.next/fallback-build-manifest.json +2 -2
  93. package/web/.next/prerender-manifest.json +3 -3
  94. package/web/.next/required-server-files.js +3 -3
  95. package/web/.next/required-server-files.json +3 -3
  96. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +20 -20
  97. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  98. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  99. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +26 -26
  100. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  101. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  102. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +26 -26
  103. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  104. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  105. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
  106. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  107. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  108. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +20 -20
  109. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  110. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  111. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +26 -26
  112. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  113. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  114. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +26 -26
  115. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  116. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  117. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +18 -18
  118. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  119. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  120. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
  121. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  122. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  123. package/web/.next/server/app/_global-error.html +2 -2
  124. package/web/.next/server/app/_global-error.rsc +1 -1
  125. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  126. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  127. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  128. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  129. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  130. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  131. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  132. package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
  133. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  134. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  135. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  136. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  137. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  138. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  139. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  140. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  141. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  142. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  143. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  144. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  145. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  146. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js +1 -1
  147. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js.map +1 -1
  148. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js +1 -1
  149. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js.map +1 -1
  150. package/web/.next/server/chunks/ssr/[root-of-the-server]__039967e3._.js +1 -1
  151. package/web/.next/server/chunks/ssr/[root-of-the-server]__039967e3._.js.map +1 -1
  152. package/web/.next/server/chunks/ssr/[root-of-the-server]__07a39ff2._.js +1 -1
  153. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
  154. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
  155. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +2 -2
  156. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js.map +1 -1
  157. package/web/.next/server/chunks/ssr/[root-of-the-server]__2773312c._.js +1 -1
  158. package/web/.next/server/chunks/ssr/[root-of-the-server]__2773312c._.js.map +1 -1
  159. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
  160. package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js +1 -1
  161. package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js.map +1 -1
  162. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js.map +1 -1
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
  165. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  166. package/web/.next/server/chunks/ssr/[root-of-the-server]__cbd8062c._.js +1 -1
  167. package/web/.next/server/chunks/ssr/[root-of-the-server]__cbd8062c._.js.map +1 -1
  168. package/web/.next/server/chunks/ssr/[root-of-the-server]__e70c5627._.js +1 -1
  169. package/web/.next/server/chunks/ssr/[root-of-the-server]__e70c5627._.js.map +1 -1
  170. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
  171. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
  172. package/web/.next/server/chunks/ssr/{_4d49c223._.js → _0314f5ef._.js} +2 -2
  173. package/web/.next/server/chunks/ssr/_0314f5ef._.js.map +1 -0
  174. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  175. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  176. package/web/.next/server/chunks/ssr/{_89745126._.js → _5cceebc2._.js} +2 -2
  177. package/web/.next/server/chunks/ssr/{_89745126._.js.map → _5cceebc2._.js.map} +1 -1
  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/_cc77a143._.js +1 -1
  181. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  182. package/web/.next/server/chunks/ssr/{_3c0076bc._.js → _e7f4342a._.js} +2 -2
  183. package/web/.next/server/chunks/ssr/{_3c0076bc._.js.map → _e7f4342a._.js.map} +1 -1
  184. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  185. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  186. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js +1 -1
  187. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js.map +1 -1
  188. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  189. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  190. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  191. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  192. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  193. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  194. package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js +2 -2
  195. package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js.map +1 -1
  196. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  197. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +1 -1
  198. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  199. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js.map +1 -1
  200. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  201. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  202. package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.js +2 -2
  203. package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.js.map +1 -1
  204. package/web/.next/server/pages/500.html +2 -2
  205. package/web/.next/server/server-reference-manifest.js +1 -1
  206. package/web/.next/server/server-reference-manifest.json +31 -31
  207. package/web/.next/static/chunks/{5ebc63ae73de50a3.js → 12debbecf940f9f4.js} +1 -1
  208. package/web/.next/static/chunks/{2eab3bb5550eccac.js → 1fa5f5d8cacab7a6.js} +1 -1
  209. package/web/.next/static/chunks/{9751a0c871920841.js → 28c2de3064d1f7f7.js} +1 -1
  210. package/web/.next/static/chunks/{e429067d6277ac20.js → 542837b8eafc1f70.js} +1 -1
  211. package/web/.next/static/chunks/{2c6298885de1484c.js → 83b8f1c9045f3f0c.js} +1 -1
  212. package/web/.next/static/chunks/{f28d2411c36c308b.js → 9177b327b379b61f.js} +1 -1
  213. package/web/.next/static/chunks/a1703e2e9adb6b7c.js +2 -0
  214. package/web/.next/static/chunks/{fa27e698e0daf727.js → a949fc447e78e19d.js} +1 -1
  215. package/web/.next/static/chunks/{eed22af4cf55faea.js → ccb531223ea544c6.js} +1 -1
  216. package/web/.next/static/chunks/{dd30ae99bcec5f69.js → d89266ba8c9b4e53.js} +2 -2
  217. package/web/.next/server/chunks/ssr/_4d49c223._.js.map +0 -1
  218. package/web/.next/static/chunks/281782a712ea79cb.js +0 -2
  219. /package/web/.next/static/{OYucSKP83TUMTV1zRbeB8 → -tvtxsxGKXaQ4TutMyzMz}/_buildManifest.js +0 -0
  220. /package/web/.next/static/{OYucSKP83TUMTV1zRbeB8 → -tvtxsxGKXaQ4TutMyzMz}/_clientMiddlewareManifest.json +0 -0
  221. /package/web/.next/static/{OYucSKP83TUMTV1zRbeB8 → -tvtxsxGKXaQ4TutMyzMz}/_ssgManifest.js +0 -0
@@ -53,11 +53,12 @@ export interface IWorktreeService {
53
53
  /**
54
54
  * Remove an existing worktree.
55
55
  *
56
+ * @param repoPath - Absolute path to the main repository (used as cwd for git)
56
57
  * @param worktreePath - Path to the worktree to remove
57
58
  * @param force - When true, passes --force to git worktree remove (handles dirty worktrees)
58
59
  * @throws WorktreeError if worktree not found or has uncommitted changes
59
60
  */
60
- remove(worktreePath: string, force?: boolean): Promise<void>;
61
+ remove(repoPath: string, worktreePath: string, force?: boolean): Promise<void>;
61
62
  /**
62
63
  * List all worktrees in a repository.
63
64
  *
@@ -1 +1 @@
1
- {"version":3,"file":"worktree-service.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/worktree-service.interface.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,oBAAY,iBAAiB;IAC3B,cAAc,mBAAmB;IACjC,aAAa,kBAAkB;IAC/B,SAAS,cAAc;IACvB,cAAc,mBAAmB;IACjC,SAAS,cAAc;CACxB;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;aAGpB,IAAI,EAAE,iBAAiB;aACvB,KAAK,CAAC,EAAE,KAAK;gBAF7B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,iBAAiB,EACvB,KAAK,CAAC,EAAE,KAAK,YAAA;CAKhC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;;;OASG;IACH,MAAM,CACJ,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzB;;;;;;OAMG;IACH,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7D;;;;;OAKG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAEhD;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3D;;;;;;OAMG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjE;;;;;;OAMG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvE;;;;;;OAMG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAE1D;;;;OAIG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvC;;;;;;;OAOG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD"}
1
+ {"version":3,"file":"worktree-service.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/worktree-service.interface.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,oBAAY,iBAAiB;IAC3B,cAAc,mBAAmB;IACjC,aAAa,kBAAkB;IAC/B,SAAS,cAAc;IACvB,cAAc,mBAAmB;IACjC,SAAS,cAAc;CACxB;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;aAGpB,IAAI,EAAE,iBAAiB;aACvB,KAAK,CAAC,EAAE,KAAK;gBAF7B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,iBAAiB,EACvB,KAAK,CAAC,EAAE,KAAK,YAAA;CAKhC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;;;OASG;IACH,MAAM,CACJ,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzB;;;;;;;OAOG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/E;;;;;OAKG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAEhD;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3D;;;;;;OAMG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjE;;;;;;OAMG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvE;;;;;;OAMG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAE1D;;;;OAIG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvC;;;;;;;OAOG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD"}
@@ -39,7 +39,7 @@ let CleanupFeatureWorktreeUseCase = class CleanupFeatureWorktreeUseCase {
39
39
  const worktreePath = feature.worktreePath ??
40
40
  this.worktreeService.getWorktreePath(feature.repositoryPath, feature.branch);
41
41
  try {
42
- await this.worktreeService.remove(worktreePath, true);
42
+ await this.worktreeService.remove(feature.repositoryPath, worktreePath, true);
43
43
  }
44
44
  catch (err) {
45
45
  // eslint-disable-next-line no-console
@@ -1 +1 @@
1
- {"version":3,"file":"create-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/use-cases/features/create/create-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AAMtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oEAAoE,CAAC;AAC7G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8DAA8D,CAAC;AACrG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iEAAiE,CAAC;AACnH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gEAAgE,CAAC;AAC1G,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8DAA8D,CAAC;AAC5G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uEAAuE,CAAC;AACnH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4DAA4D,CAAC;AAGhG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mEAAmE,CAAC;AAC7G,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE9F,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAlBjB,WAAW,EAAE,kBAAkB,EAE/B,eAAe,EAAE,gBAAgB,EAEjC,YAAY,EAAE,2BAA2B,EAEzC,aAAa,EAAE,mBAAmB,EAElC,eAAe,EAAE,uBAAuB,EAExC,iBAAiB,EAAE,iBAAiB,EAEpC,YAAY,EAAE,YAAY,EAE1B,cAAc,EAAE,qBAAqB,EAErC,YAAY,EAAE,aAAa,EAE3B,iBAAiB,EAAE,wBAAwB;IAG9D;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMtE;;;;OAIG;IACG,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwH1E;;;OAGG;IACG,kBAAkB,CACtB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,kBAAkB,EACzB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,CAAC;CAoG1D"}
1
+ {"version":3,"file":"create-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/use-cases/features/create/create-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AAMtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oEAAoE,CAAC;AAC7G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8DAA8D,CAAC;AACrG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iEAAiE,CAAC;AACnH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gEAAgE,CAAC;AAC1G,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8DAA8D,CAAC;AAC5G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uEAAuE,CAAC;AACnH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4DAA4D,CAAC;AAGhG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mEAAmE,CAAC;AAC7G,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE9F,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAlBjB,WAAW,EAAE,kBAAkB,EAE/B,eAAe,EAAE,gBAAgB,EAEjC,YAAY,EAAE,2BAA2B,EAEzC,aAAa,EAAE,mBAAmB,EAElC,eAAe,EAAE,uBAAuB,EAExC,iBAAiB,EAAE,iBAAiB,EAEpC,YAAY,EAAE,YAAY,EAE1B,cAAc,EAAE,qBAAqB,EAErC,YAAY,EAAE,aAAa,EAE3B,iBAAiB,EAAE,wBAAwB;IAG9D;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMtE;;;;OAIG;IACG,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAyH1E;;;OAGG;IACG,kBAAkB,CACtB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,kBAAkB,EACzB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,CAAC;CAoG1D"}
@@ -77,7 +77,7 @@ let CreateFeatureUseCase = class CreateFeatureUseCase {
77
77
  ? SdlcLifecycle.Implementation
78
78
  : SdlcLifecycle.Requirements;
79
79
  let shouldSpawn = true;
80
- let effectiveRepoPath = input.repositoryPath;
80
+ let effectiveRepoPath = input.repositoryPath.replace(/\\/g, '/');
81
81
  if (input.parentId) {
82
82
  const parent = await this.featureRepo.findById(input.parentId);
83
83
  if (!parent) {
@@ -106,7 +106,7 @@ let CreateFeatureUseCase = class CreateFeatureUseCase {
106
106
  }
107
107
  }
108
108
  // Resolve or create repository entity for this path
109
- const normalizedPath = effectiveRepoPath.replace(/\/+$/, '') || effectiveRepoPath;
109
+ const normalizedPath = effectiveRepoPath.replace(/\\/g, '/').replace(/\/+$/, '') || effectiveRepoPath;
110
110
  let repository = await this.repositoryRepo.findByPath(normalizedPath);
111
111
  const now = new Date();
112
112
  if (!repository) {
@@ -20,6 +20,11 @@ export declare class MetadataGenerator {
20
20
  * Errors are propagated to the caller.
21
21
  */
22
22
  generateMetadata(userInput: string, agentType?: AgentType): Promise<FeatureMetadata>;
23
+ /**
24
+ * Extract metadata locally from user input without AI.
25
+ * Used as fallback when the AI call fails or returns invalid data.
26
+ */
27
+ private extractMetadataLocally;
23
28
  /**
24
29
  * Convert text to kebab-case slug with 50-char limit.
25
30
  * Removes special characters, collapses spaces, limits length.
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-generator.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/use-cases/features/create/metadata-generator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mEAAmE,CAAC;AAEhH,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAgBD,qBACa,iBAAiB;IAG1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAAhB,gBAAgB,EAAE,sBAAsB;IAG3D;;;OAGG;IACG,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;IAoC1F;;;OAGG;IACH,OAAO,CAAC,MAAM;CAgBf"}
1
+ {"version":3,"file":"metadata-generator.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/use-cases/features/create/metadata-generator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mEAAmE,CAAC;AAEhH,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAgBD,qBACa,iBAAiB;IAG1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAAhB,gBAAgB,EAAE,sBAAsB;IAG3D;;;OAGG;IACG,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;IAwC1F;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAU9B;;;OAGG;IACH,OAAO,CAAC,MAAM;CAgBf"}
@@ -54,20 +54,38 @@ Return a JSON object with these fields:
54
54
  - slug: kebab-case identifier, 2-4 words MAX. Extract the core feature name (e.g., "github-oauth-login" from "add github oauth")
55
55
  - name: polished, professional title (improve upon user's wording)
56
56
  - description: refined 1-2 sentence description that captures the feature essence (not the request verbatim)`;
57
- const parsed = await this.structuredCaller.call(prompt, METADATA_SCHEMA, {
58
- maxTurns: 10,
59
- allowedTools: [],
60
- silent: true,
61
- agentType,
62
- });
63
- if (!parsed.slug || !parsed.name || !parsed.description) {
64
- throw new Error('Missing required fields in AI response');
57
+ try {
58
+ const parsed = await this.structuredCaller.call(prompt, METADATA_SCHEMA, {
59
+ maxTurns: 10,
60
+ allowedTools: [],
61
+ silent: true,
62
+ agentType,
63
+ });
64
+ if (parsed.slug && parsed.name && parsed.description) {
65
+ return {
66
+ slug: this.toSlug(parsed.slug),
67
+ name: parsed.name,
68
+ description: parsed.description,
69
+ };
70
+ }
65
71
  }
66
- return {
67
- slug: this.toSlug(parsed.slug),
68
- name: parsed.name,
69
- description: parsed.description,
70
- };
72
+ catch {
73
+ // AI-based metadata generation failed — fall through to local extraction
74
+ }
75
+ return this.extractMetadataLocally(userInput);
76
+ }
77
+ /**
78
+ * Extract metadata locally from user input without AI.
79
+ * Used as fallback when the AI call fails or returns invalid data.
80
+ */
81
+ extractMetadataLocally(userInput) {
82
+ const slug = this.toSlug(userInput);
83
+ // Capitalize first letter of each word for the name
84
+ const name = userInput
85
+ .slice(0, 80)
86
+ .replace(/\b\w/g, (c) => c.toUpperCase())
87
+ .trim();
88
+ return { slug, name, description: userInput.slice(0, 200).trim() };
71
89
  }
72
90
  /**
73
91
  * Convert text to kebab-case slug with 50-char limit.
@@ -106,7 +106,7 @@ let DeleteFeatureUseCase = class DeleteFeatureUseCase {
106
106
  const worktreePath = feature.worktreePath ??
107
107
  this.worktreeService.getWorktreePath(feature.repositoryPath, feature.branch);
108
108
  try {
109
- await this.worktreeService.remove(worktreePath, true);
109
+ await this.worktreeService.remove(feature.repositoryPath, worktreePath, true);
110
110
  }
111
111
  catch {
112
112
  // Worktree might already be removed - that's fine
@@ -1 +1 @@
1
- {"version":3,"file":"add-repository.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/repositories/add-repository.use-case.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oEAAoE,CAAC;AAEhH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAUD,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAAd,cAAc,EAAE,qBAAqB;IAGlD,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;CA8B9D"}
1
+ {"version":3,"file":"add-repository.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/repositories/add-repository.use-case.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oEAAoE,CAAC;AAEhH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAcD,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAAd,cAAc,EAAE,qBAAqB;IAGlD,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;CA8B9D"}
@@ -19,11 +19,15 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
19
19
  import { injectable, inject } from 'tsyringe';
20
20
  import { randomUUID } from 'node:crypto';
21
21
  /**
22
- * Normalizes a path by removing trailing slashes.
22
+ * Normalizes a path: backslashes forward slashes, trailing slashes removed.
23
+ * On Windows, the folder picker returns backslashes (C:\Users\...) while
24
+ * the CLI uses forward slashes (C:/Users/...). Normalize to forward slashes
25
+ * so the same directory is never stored under two different path strings.
23
26
  */
24
27
  function normalizePath(p) {
28
+ const forwardSlash = p.replace(/\\/g, '/');
25
29
  // Remove trailing slashes but keep root "/"
26
- return p.length > 1 ? p.replace(/\/+$/, '') : p;
30
+ return forwardSlash.length > 1 ? forwardSlash.replace(/\/+$/, '') : forwardSlash;
27
31
  }
28
32
  let AddRepositoryUseCase = class AddRepositoryUseCase {
29
33
  repositoryRepo;
@@ -1 +1 @@
1
- {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/di/container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAkHrC;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,SAAS,CAAC,CAiTrE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/di/container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAkHrC;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,SAAS,CAAC,CA8TrE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -126,8 +126,13 @@ export async function initializeContainer() {
126
126
  },
127
127
  });
128
128
  // Register external dependencies as tokens
129
+ // On Windows, agent CLIs ship as .cmd/.ps1 scripts (e.g. cursor's `agent.cmd`).
130
+ // execFile without shell: true cannot resolve .cmd extensions, causing ENOENT.
129
131
  const execFileAsync = promisify(execFile);
130
- container.registerInstance('ExecFunction', execFileAsync);
132
+ const execFn = process.platform === 'win32'
133
+ ? (file, args, options) => execFileAsync(file, args, { ...options, shell: true, windowsHide: true })
134
+ : execFileAsync;
135
+ container.registerInstance('ExecFunction', execFn);
131
136
  // Register services (singletons via @injectable + token)
132
137
  container.registerSingleton('IAgentValidator', AgentValidatorService);
133
138
  container.registerSingleton('IVersionService', VersionService);
@@ -184,9 +189,15 @@ export async function initializeContainer() {
184
189
  else {
185
190
  container.register('IAgentExecutorFactory', {
186
191
  useFactory: () => {
187
- // Wrap spawn to ensure stdio is explicitly set to 'pipe'
192
+ // Wrap spawn with sensible defaults: stdio piped and windowsHide on Win32.
193
+ // Each executor controls its own `shell` option — cursor needs shell: true
194
+ // for .cmd scripts, but claude-code must NOT use shell (DEP0190 / prompt mangling).
188
195
  const spawnWithPipe = (command, args, options) => {
189
- return spawn(command, args, { ...options, stdio: 'pipe' });
196
+ return spawn(command, args, {
197
+ stdio: 'pipe',
198
+ ...(process.platform === 'win32' ? { windowsHide: true } : {}),
199
+ ...options,
200
+ });
190
201
  };
191
202
  return new AgentExecutorFactory(spawnWithPipe);
192
203
  },
@@ -71,8 +71,8 @@ let SQLiteFeatureRepository = class SQLiteFeatureRepository {
71
71
  return fromDatabase(rows[0]);
72
72
  }
73
73
  async findBySlug(slug, repositoryPath) {
74
- const stmt = this.db.prepare('SELECT * FROM features WHERE slug = ? AND repository_path = ? AND deleted_at IS NULL');
75
- const row = stmt.get(slug, repositoryPath);
74
+ const stmt = this.db.prepare("SELECT * FROM features WHERE slug = ? AND REPLACE(repository_path, '\\', '/') = ? AND deleted_at IS NULL");
75
+ const row = stmt.get(slug, repositoryPath.replace(/\\/g, '/'));
76
76
  if (!row) {
77
77
  return null;
78
78
  }
@@ -85,8 +85,8 @@ let SQLiteFeatureRepository = class SQLiteFeatureRepository {
85
85
  conditions.push('deleted_at IS NULL');
86
86
  }
87
87
  if (filters?.repositoryPath) {
88
- conditions.push('repository_path = ?');
89
- params.push(filters.repositoryPath);
88
+ conditions.push("REPLACE(repository_path, '\\', '/') = ?");
89
+ params.push(filters.repositoryPath.replace(/\\/g, '/'));
90
90
  }
91
91
  if (filters?.lifecycle) {
92
92
  conditions.push('lifecycle = ?');
@@ -36,8 +36,8 @@ let SQLiteRepositoryRepository = class SQLiteRepositoryRepository {
36
36
  return row ? fromDatabase(row) : null;
37
37
  }
38
38
  async findByPath(path) {
39
- const stmt = this.db.prepare('SELECT * FROM repositories WHERE path = ? AND deleted_at IS NULL');
40
- const row = stmt.get(path);
39
+ const stmt = this.db.prepare("SELECT * FROM repositories WHERE REPLACE(path, '\\', '/') = ? AND deleted_at IS NULL");
40
+ const row = stmt.get(path.replace(/\\/g, '/'));
41
41
  return row ? fromDatabase(row) : null;
42
42
  }
43
43
  async list() {
@@ -50,8 +50,8 @@ let SQLiteRepositoryRepository = class SQLiteRepositoryRepository {
50
50
  stmt.run(id);
51
51
  }
52
52
  async findByPathIncludingDeleted(path) {
53
- const stmt = this.db.prepare('SELECT * FROM repositories WHERE path = ?');
54
- const row = stmt.get(path);
53
+ const stmt = this.db.prepare("SELECT * FROM repositories WHERE REPLACE(path, '\\', '/') = ?");
54
+ const row = stmt.get(path.replace(/\\/g, '/'));
55
55
  return row ? fromDatabase(row) : null;
56
56
  }
57
57
  async softDelete(id) {
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,4EAA4E,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAYjD;;;GAGG;AACH,qBAAa,yBAA0B,YAAW,cAAc;IAMlD,OAAO,CAAC,QAAQ,CAAC,KAAK;IALlC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAA8B;IAE3D,4EAA4E;IAC5E,OAAO,CAAC,MAAM,CAAS;gBAEM,KAAK,EAAE,aAAa;IAEjD,4EAA4E;IAC5E,OAAO,CAAC,GAAG;IAML,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAmHtF,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,CAAC,yBAAyB,CAAC;IA+F3C;;;OAGG;IACH,OAAO,CAAC,cAAc;IAmCtB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAI/C,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,eAAe;IAiCvB,OAAO,CAAC,eAAe;CAkExB"}
1
+ {"version":3,"file":"claude-code-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,4EAA4E,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAYjD;;;GAGG;AACH,qBAAa,yBAA0B,YAAW,cAAc;IAMlD,OAAO,CAAC,QAAQ,CAAC,KAAK;IALlC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAA8B;IAE3D,4EAA4E;IAC5E,OAAO,CAAC,MAAM,CAAS;gBAEM,KAAK,EAAE,aAAa;IAEjD,4EAA4E;IAC5E,OAAO,CAAC,GAAG;IAML,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAmHtF,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,CAAC,yBAAyB,CAAC;IA+F3C;;;OAGG;IACH,OAAO,CAAC,cAAc;IAmCtB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAI/C,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,eAAe;IAiCvB,OAAO,CAAC,eAAe;CAkExB"}
@@ -291,6 +291,15 @@ export class ClaudeCodeExecutorService {
291
291
  const spawnOpts = {};
292
292
  if (options?.cwd)
293
293
  spawnOpts.cwd = options.cwd;
294
+ // Explicitly pipe stdio so streams are available even when parent disconnects
295
+ spawnOpts.stdio = ['pipe', 'pipe', 'pipe'];
296
+ // On Windows: windowsHide=true to prevent blank console windows.
297
+ // Do NOT use shell=true — it causes DEP0190 argument escaping issues
298
+ // and mangles prompts with special characters. The claude CLI is a
299
+ // native .exe, so spawn() finds it on PATH without shell.
300
+ if (process.platform === 'win32') {
301
+ spawnOpts.windowsHide = true;
302
+ }
294
303
  // Strip CLAUDECODE env var to prevent "nested session" error when shep
295
304
  // is invoked from within a Claude Code session. The claude CLI checks for
296
305
  // this variable and refuses to start if it's set.
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,4EAA4E,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAsBjD;;;GAGG;AACH,qBAAa,qBAAsB,YAAW,cAAc;IAM9C,OAAO,CAAC,QAAQ,CAAC,KAAK;IALlC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAyB;IAEtD,4EAA4E;IAC5E,OAAO,CAAC,MAAM,CAAS;gBAEM,KAAK,EAAE,aAAa;IAEjD,4EAA4E;IAC5E,OAAO,CAAC,GAAG;IAMX,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAIzC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAkGtF,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,CAAC,yBAAyB,CAAC;IA8E3C;;OAEG;IACH,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,eAAe;CAgDxB"}
1
+ {"version":3,"file":"cursor-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,4EAA4E,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAsBjD;;;GAGG;AACH,qBAAa,qBAAsB,YAAW,cAAc;IAM9C,OAAO,CAAC,QAAQ,CAAC,KAAK;IALlC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAyB;IAEtD,4EAA4E;IAC5E,OAAO,CAAC,MAAM,CAAS;gBAEM,KAAK,EAAE,aAAa;IAEjD,4EAA4E;IAC5E,OAAO,CAAC,GAAG;IAMX,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAIzC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA0GtF,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,CAAC,yBAAyB,CAAC;IA8E3C;;OAEG;IACH,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,iBAAiB;IAwBzB,OAAO,CAAC,eAAe;CAgDxB"}
@@ -49,7 +49,9 @@ export class CursorExecutorService {
49
49
  }
50
50
  async execute(prompt, options) {
51
51
  this.silent = options?.silent ?? false;
52
- const args = this.buildStreamArgs(prompt, options);
52
+ // Use json (not stream-json) for execute() — outputs a single JSON result line.
53
+ // stream-json is unreliable on Windows where shell: true can mangle args.
54
+ const args = this.buildArgs(prompt, options);
53
55
  const spawnOpts = this.buildSpawnOptions(options);
54
56
  this.log(`Spawning: agent ${args.map((a) => (a.length > 80 ? `${a.slice(0, 77)}...` : a)).join(' ')}`);
55
57
  this.log(`Spawn cwd: ${spawnOpts.cwd ?? '(inherited)'}`);
@@ -62,8 +64,9 @@ export class CursorExecutorService {
62
64
  let stderr = '';
63
65
  let timedOut = false;
64
66
  let timeoutId;
65
- // Accumulated from assistant events
67
+ // Accumulated from JSON events or raw text fallback
66
68
  let resultText = '';
69
+ let rawText = '';
67
70
  let sessionId;
68
71
  let metadata;
69
72
  if (options?.timeout) {
@@ -83,16 +86,21 @@ export class CursorExecutorService {
83
86
  }
84
87
  }
85
88
  else if (parsed.type === 'result') {
89
+ // json format puts the full result text in parsed.result
90
+ if (typeof parsed.result === 'string' && parsed.result)
91
+ resultText = parsed.result;
86
92
  if (parsed.session_id)
87
93
  sessionId = parsed.session_id;
88
94
  if (parsed.duration_ms !== undefined) {
89
95
  metadata = { ...metadata, duration_ms: parsed.duration_ms };
90
96
  }
91
97
  }
92
- // user events and tool_call events: logged but don't affect result
98
+ // user, system, thinking events: logged but don't affect result
93
99
  }
94
100
  catch {
95
- /* malformed JSON — already logged */
101
+ // Non-JSON output accumulate as raw text fallback
102
+ if (line.length > 0)
103
+ rawText += `${line}\n`;
96
104
  }
97
105
  };
98
106
  proc.stdout?.on('data', (chunk) => {
@@ -119,7 +127,9 @@ export class CursorExecutorService {
119
127
  proc.on('close', (code) => {
120
128
  if (lineBuffer.trim())
121
129
  processLine(lineBuffer.trim());
122
- this.log(`Process closed with code ${code}, result=${resultText.length} chars`);
130
+ // Use raw text as fallback when no JSON result was captured
131
+ const finalText = resultText || rawText.trim();
132
+ this.log(`Process closed with code ${code}, result=${finalText.length} chars`);
123
133
  if (timeoutId)
124
134
  clearTimeout(timeoutId);
125
135
  if (timedOut) {
@@ -130,7 +140,7 @@ export class CursorExecutorService {
130
140
  reject(new Error(stderr.trim() || `Process exited with code ${code}`));
131
141
  return;
132
142
  }
133
- const result = { result: resultText };
143
+ const result = { result: finalText };
134
144
  if (sessionId)
135
145
  result.sessionId = sessionId;
136
146
  if (metadata)
@@ -244,7 +254,7 @@ export class CursorExecutorService {
244
254
  }
245
255
  }
246
256
  buildArgs(prompt, options) {
247
- const args = ['-p', prompt, '--output-format', 'json', '--force'];
257
+ const args = ['--yolo', '-p', prompt, '--output-format', 'json'];
248
258
  if (options?.resumeSession)
249
259
  args.push('--resume', options.resumeSession);
250
260
  if (options?.model)
@@ -264,6 +274,15 @@ export class CursorExecutorService {
264
274
  const spawnOpts = {};
265
275
  if (options?.cwd)
266
276
  spawnOpts.cwd = options.cwd;
277
+ // Explicitly pipe stdio so streams are available even when parent disconnects
278
+ spawnOpts.stdio = ['pipe', 'pipe', 'pipe'];
279
+ // On Windows: shell=true so Node.js can resolve .cmd/.ps1 scripts
280
+ // (Cursor CLI ships as `agent.cmd` on Windows, not a native .exe).
281
+ // windowsHide=true prevents blank console windows from flashing.
282
+ if (process.platform === 'win32') {
283
+ spawnOpts.shell = true;
284
+ spawnOpts.windowsHide = true;
285
+ }
267
286
  // Strip CLAUDECODE env var to prevent "nested session" error when shep
268
287
  // is invoked from within a Claude Code session.
269
288
  const { CLAUDECODE: _, ...cleanEnv } = process.env;
@@ -1 +1 @@
1
- {"version":3,"file":"dev-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,4EAA4E,CAAC;AAmIpF,qBAAa,uBAAwB,YAAW,cAAc;IAC5D,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;;IAM3B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAOvF,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,CAAC,yBAAyB,CAAC;IAK3C,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO;IAIhD,OAAO,CAAC,QAAQ;CAmEjB"}
1
+ {"version":3,"file":"dev-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,4EAA4E,CAAC;AAwIpF,qBAAa,uBAAwB,YAAW,cAAc;IAC5D,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;;IAM3B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAOvF,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,CAAC,yBAAyB,CAAC;IAK3C,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO;IAIhD,OAAO,CAAC,QAAQ;CAmEjB"}
@@ -101,20 +101,22 @@ const CI_FIX_RESULT = 'Fixed CI failure: corrected import path. All checks now p
101
101
  * plan.prompt.ts:199.
102
102
  */
103
103
  function extractSpecDir(prompt) {
104
+ // Match both Unix absolute paths (/...) and Windows absolute paths (C:\...)
105
+ const ABS_PATH = String.raw `(?:\/|[A-Za-z]:[/\\])[^\s\n]+`;
104
106
  // Analyze ("Write your analysis to:"), requirements ("Update the file at:"),
105
107
  // research ("Write your research to:")
106
- const fileMatch = prompt.match(/(?:Write your \w+ to|Update the file at):\s+(\/[^\s\n]+)/);
108
+ const fileMatch = prompt.match(new RegExp(`(?:Write your \\w+ to|Update the file at):\\s+(${ABS_PATH})`));
107
109
  if (fileMatch)
108
110
  return path.dirname(fileMatch[1]);
109
111
  // Plan: "Write to BOTH /path/plan.yaml AND /path/tasks.yaml"
110
- const planMatch = prompt.match(/Write to BOTH\s+(\/[^\s\n]+)\/plan\.yaml/);
112
+ const planMatch = prompt.match(new RegExp(`Write to BOTH\\s+(${ABS_PATH})[/\\\\]plan\\.yaml`));
111
113
  if (planMatch)
112
114
  return planMatch[1];
113
115
  return null;
114
116
  }
115
117
  /** Validate extracted specDir: must be absolute, no ".." traversal. */
116
118
  function validateSpecDir(specDir) {
117
- if (!specDir.startsWith('/'))
119
+ if (!path.isAbsolute(specDir))
118
120
  throw new Error(`DevAgentExecutorService: invalid specDir (not absolute): ${specDir}`);
119
121
  if (specDir.includes('..'))
120
122
  throw new Error(`DevAgentExecutorService: invalid specDir (contains ".."): ${specDir}`);
@@ -1 +1 @@
1
- {"version":3,"file":"gemini-cli-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EACZ,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,4EAA4E,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAMjD;;;GAGG;AACH,qBAAa,wBAAyB,YAAW,cAAc;IAO3D,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAP9B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAA6B;IAE1D,4EAA4E;IAC5E,OAAO,CAAC,MAAM,CAAS;gBAGJ,KAAK,EAAE,aAAa,EACpB,UAAU,CAAC,EAAE,WAAW,YAAA;IAG3C,4EAA4E;IAC5E,OAAO,CAAC,GAAG;IAMX,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAIzC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAsFtF,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,CAAC,yBAAyB,CAAC;IAsG3C;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAmDxB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAI3C;IAEF;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,SAAS;IAsBjB,OAAO,CAAC,iBAAiB;CAiB1B"}
1
+ {"version":3,"file":"gemini-cli-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EACZ,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,4EAA4E,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAMjD;;;GAGG;AACH,qBAAa,wBAAyB,YAAW,cAAc;IAO3D,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAP9B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAA6B;IAE1D,4EAA4E;IAC5E,OAAO,CAAC,MAAM,CAAS;gBAGJ,KAAK,EAAE,aAAa,EACpB,UAAU,CAAC,EAAE,WAAW,YAAA;IAG3C,4EAA4E;IAC5E,OAAO,CAAC,GAAG;IAMX,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAIzC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAsFtF,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,CAAC,yBAAyB,CAAC;IAsG3C;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAmDxB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAI3C;IAEF;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,SAAS;IAsBjB,OAAO,CAAC,iBAAiB;CA0B1B"}
@@ -323,6 +323,13 @@ export class GeminiCliExecutorService {
323
323
  const spawnOpts = {};
324
324
  if (options?.cwd)
325
325
  spawnOpts.cwd = options.cwd;
326
+ // Explicitly pipe stdio so streams are available even when parent disconnects
327
+ spawnOpts.stdio = ['pipe', 'pipe', 'pipe'];
328
+ // On Windows: windowsHide=true to prevent blank console windows.
329
+ // Gemini CLI is a native binary, so shell=true is NOT needed.
330
+ if (process.platform === 'win32') {
331
+ spawnOpts.windowsHide = true;
332
+ }
326
333
  // Strip CLAUDECODE env var to prevent "nested session" error when shep
327
334
  // is invoked from within a Claude Code session.
328
335
  const { CLAUDECODE: _, ...cleanEnv } = process.env;
@@ -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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"}
@@ -48,6 +48,7 @@ export function buildExecutorOptions(state) {
48
48
  return {
49
49
  cwd: state.worktreePath || state.repositoryPath,
50
50
  maxTurns: 5000,
51
+ timeout: 300_000, // 5 minutes per agent call — prevents infinite hangs
51
52
  ...(state.model ? { model: state.model } : {}),
52
53
  };
53
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"evidence-prompts.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/evidence-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,WAAW,qBAAqB;IACpC,kEAAkE;IAClE,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,iBAAiB,EACxB,OAAO,GAAE,qBAAiD,GACzD,MAAM,CA6LR"}
1
+ {"version":3,"file":"evidence-prompts.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/evidence-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,WAAW,qBAAqB;IACpC,kEAAkE;IAClE,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,iBAAiB,EACxB,OAAO,GAAE,qBAAiD,GACzD,MAAM,CA8LR"}
@@ -20,7 +20,7 @@ export function buildEvidencePrompt(state, options = { commitEvidence: false })
20
20
  // Worktree path is: ~/.shep/repos/<hash>/wt/<slug>
21
21
  // Evidence path is: ~/.shep/repos/<hash>/evidence/<featureId>/
22
22
  const repoHashDir = dirname(dirname(cwd)); // go up from wt/<slug>
23
- const shepEvidenceDir = join(repoHashDir, 'evidence', state.featureId);
23
+ const shepEvidenceDir = join(repoHashDir, 'evidence', state.featureId).replaceAll('\\', '/');
24
24
  const specSection = specContent
25
25
  ? `## Feature Specification (spec.yaml)
26
26
 
@@ -41,9 +41,10 @@ ${tasksContent}
41
41
  `
42
42
  : '';
43
43
  // Relative spec dir path from worktree root (e.g., "specs/057-sidenav-feature-toggle")
44
- const relativeSpecDir = relative(cwd, state.specDir);
44
+ // Normalize to forward slashes so prompts always use POSIX paths (even on Windows)
45
+ const relativeSpecDir = relative(cwd, state.specDir).replaceAll('\\', '/');
45
46
  const specEvidenceRelPath = `${relativeSpecDir}/evidence`;
46
- const specEvidenceAbsPath = join(state.specDir, 'evidence');
47
+ const specEvidenceAbsPath = join(state.specDir, 'evidence').replaceAll('\\', '/');
47
48
  const storageSection = options.commitEvidence
48
49
  ? `## Evidence Storage
49
50
 
@@ -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,CA0BR;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,CAuCnE"}
@@ -13,7 +13,8 @@ import { readSpecFile, createNodeLogger } from './node-helpers.js';
13
13
  */
14
14
  export function buildRepairPrompt(filename, content, errors, specDir) {
15
15
  const filenames = Array.isArray(filename) ? filename : [filename];
16
- const filePaths = filenames.map((f) => join(specDir, f));
16
+ // Normalize to forward slashes so prompts always use POSIX paths (even on Windows)
17
+ const filePaths = filenames.map((f) => join(specDir, f).replaceAll('\\', '/'));
17
18
  return [
18
19
  '## YAML Repair Task',
19
20
  '',
@@ -311,7 +311,7 @@ let ClaudeCodeSessionRepository = class ClaudeCodeSessionRepository {
311
311
  const home = os.homedir();
312
312
  if (filePath === home)
313
313
  return '~';
314
- if (filePath.startsWith(`${home}/`)) {
314
+ if (filePath.startsWith(`${home}${path.sep}`)) {
315
315
  return `~${filePath.slice(home.length)}`;
316
316
  }
317
317
  return filePath;
@@ -33,7 +33,7 @@ let AttachmentStorageService = class AttachmentStorageService {
33
33
  name: sanitized,
34
34
  size: BigInt(buffer.length),
35
35
  mimeType,
36
- path: filePath,
36
+ path: filePath.replace(/\\/g, '/'),
37
37
  createdAt: new Date(),
38
38
  sha256: hash,
39
39
  };
@@ -68,7 +68,7 @@ let AttachmentStorageService = class AttachmentStorageService {
68
68
  name: stored.name,
69
69
  size: stored.size,
70
70
  mimeType: stored.mimeType,
71
- path: newPath,
71
+ path: newPath.replace(/\\/g, '/'),
72
72
  createdAt: stored.createdAt,
73
73
  });
74
74
  }
@@ -84,7 +84,7 @@ let AttachmentStorageService = class AttachmentStorageService {
84
84
  name: file,
85
85
  size: BigInt(0),
86
86
  mimeType: 'application/octet-stream',
87
- path: filePath,
87
+ path: filePath.replace(/\\/g, '/'),
88
88
  createdAt: new Date(),
89
89
  });
90
90
  }
@@ -51,7 +51,7 @@ export declare class DeploymentService implements IDeploymentService {
51
51
  */
52
52
  off(event: 'log', handler: (entry: LogEntry) => void): void;
53
53
  /**
54
- * Send SIGKILL to a process group.
54
+ * Send SIGKILL to a process tree.
55
55
  */
56
56
  private killProcess;
57
57
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"deployment.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/deployment/deployment.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAG9D,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,QAAQ,EACT,MAAM,qEAAqE,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAoBzD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,eAAe,EAAE,OAAO,eAAe,CAAC;IACxC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;IAC7D,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CACnC;AAgBD,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;gBAElC,IAAI,GAAE,OAAO,CAAC,qBAAqB,CAAM;IAIrD;;;OAGG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IA+EjD;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAYpD;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyC3C;;OAEG;IACH,OAAO,IAAI,IAAI;IAOf;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,GAAG,IAAI;IAM5C;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI;IAI1D;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI;IAI3D;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA+D5B;;OAEG;YACW,aAAa;IAW3B;;OAEG;IACH,OAAO,CAAC,WAAW;CASpB"}
1
+ {"version":3,"file":"deployment.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/deployment/deployment.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAI9D,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,QAAQ,EACT,MAAM,qEAAqE,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAoBzD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,eAAe,EAAE,OAAO,eAAe,CAAC;IACxC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;IAC7D,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CACnC;AAgBD,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;gBAElC,IAAI,GAAE,OAAO,CAAC,qBAAqB,CAAM;IAIrD;;;OAGG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IA+EjD;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAYpD;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyC3C;;OAEG;IACH,OAAO,IAAI,IAAI;IAOf;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,GAAG,IAAI;IAM5C;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI;IAI1D;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI;IAI3D;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA+D5B;;OAEG;YACW,aAAa;IAW3B;;OAEG;IACH,OAAO,CAAC,WAAW;CASpB"}