@shepai/cli 1.72.8 → 1.72.9-pr220.e1bfec0

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 (365) hide show
  1. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts +2 -1
  2. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
  3. package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.d.ts.map +1 -1
  4. package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.js +1 -0
  5. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts +20 -1
  6. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  7. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +68 -41
  8. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +10 -0
  9. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
  10. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.d.ts.map +1 -1
  11. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +1 -0
  12. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +1 -1
  13. package/dist/packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.d.ts.map +1 -1
  14. package/dist/packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.js +88 -13
  15. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +1 -1
  16. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +2 -1
  17. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
  18. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +3 -0
  19. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +2 -0
  20. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
  21. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +16 -3
  22. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
  23. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +5 -1
  24. package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
  25. package/dist/src/presentation/web/app/actions/create-feature.js +20 -2
  26. package/dist/src/presentation/web/app/actions/get-feature-metadata.d.ts +10 -0
  27. package/dist/src/presentation/web/app/actions/get-feature-metadata.d.ts.map +1 -0
  28. package/dist/src/presentation/web/app/actions/get-feature-metadata.js +14 -0
  29. package/dist/src/presentation/web/app/actions/get-graph-data.d.ts +10 -0
  30. package/dist/src/presentation/web/app/actions/get-graph-data.d.ts.map +1 -0
  31. package/dist/src/presentation/web/app/actions/get-graph-data.js +10 -0
  32. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  33. package/dist/src/presentation/web/app/api/agent-events/route.js +18 -0
  34. package/dist/src/presentation/web/components/common/add-repository-button/add-repository-button.d.ts.map +1 -0
  35. package/dist/src/presentation/web/components/common/add-repository-button/index.d.ts +2 -0
  36. package/dist/src/presentation/web/components/common/add-repository-button/index.d.ts.map +1 -0
  37. package/dist/src/presentation/web/components/common/{add-repository-node → add-repository-button}/index.js +0 -1
  38. package/dist/src/presentation/web/components/common/add-repository-button/pick-folder.d.ts.map +1 -0
  39. package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.d.ts.map +1 -1
  40. package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.js +21 -23
  41. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  42. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +35 -16
  43. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
  44. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +2 -0
  45. package/dist/src/presentation/web/components/common/index.d.ts +1 -1
  46. package/dist/src/presentation/web/components/common/index.d.ts.map +1 -1
  47. package/dist/src/presentation/web/components/common/index.js +1 -1
  48. package/dist/src/presentation/web/components/common/repository-node/repository-node.js +1 -1
  49. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.d.ts +1 -3
  50. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.d.ts.map +1 -1
  51. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.js +3 -7
  52. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.d.ts +0 -1
  53. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.d.ts.map +1 -1
  54. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.js +0 -11
  55. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +1 -1
  56. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  57. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +23 -4
  58. package/dist/src/presentation/web/components/features/control-center/control-center.stories.d.ts +0 -11
  59. package/dist/src/presentation/web/components/features/control-center/control-center.stories.d.ts.map +1 -1
  60. package/dist/src/presentation/web/components/features/control-center/control-center.stories.js +2 -37
  61. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +8 -0
  62. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  63. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +154 -258
  64. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts +2 -10
  65. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  66. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +12 -44
  67. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts.map +1 -1
  68. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.js +0 -46
  69. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +1 -1
  70. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts +1 -3
  71. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
  72. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
  73. package/dist/src/presentation/web/components/ui/scroll-area.js +1 -1
  74. package/dist/src/presentation/web/hooks/use-graph-state.d.ts +41 -0
  75. package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -0
  76. package/dist/src/presentation/web/hooks/use-graph-state.js +230 -0
  77. package/dist/src/presentation/web/lib/derive-graph.d.ts +52 -0
  78. package/dist/src/presentation/web/lib/derive-graph.d.ts.map +1 -0
  79. package/dist/src/presentation/web/lib/derive-graph.js +126 -0
  80. package/dist/src/presentation/web/lib/layout-with-dagre.d.ts.map +1 -1
  81. package/dist/src/presentation/web/lib/layout-with-dagre.js +1 -2
  82. package/dist/tsconfig.build.tsbuildinfo +1 -1
  83. package/package.json +1 -1
  84. package/web/.next/BUILD_ID +1 -1
  85. package/web/.next/build-manifest.json +2 -2
  86. package/web/.next/cache/.previewinfo +1 -1
  87. package/web/.next/cache/.rscinfo +1 -1
  88. package/web/.next/cache/.tsbuildinfo +1 -1
  89. package/web/.next/cache/config.json +3 -3
  90. package/web/.next/fallback-build-manifest.json +2 -2
  91. package/web/.next/prerender-manifest.json +3 -3
  92. package/web/.next/required-server-files.js +1 -1
  93. package/web/.next/required-server-files.json +1 -1
  94. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +43 -28
  95. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  96. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  97. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  98. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +49 -34
  99. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  100. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  101. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  102. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +39 -24
  103. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  104. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  105. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  106. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +43 -28
  107. package/web/.next/server/app/(dashboard)/create/page.js +1 -1
  108. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  109. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  110. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +49 -34
  111. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  112. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  113. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  114. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +39 -24
  115. package/web/.next/server/app/(dashboard)/page.js +1 -1
  116. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  117. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  118. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +39 -24
  119. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  120. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  121. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  122. package/web/.next/server/app/_global-error.html +2 -2
  123. package/web/.next/server/app/_global-error.rsc +1 -1
  124. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  125. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  126. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  127. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  128. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  129. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  130. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  131. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  132. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  133. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  134. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  135. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  136. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  137. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  138. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  139. package/web/.next/server/app/version/page.js.nft.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_4d623b8e.js +2 -2
  142. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
  143. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  144. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  145. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_816618e2.js +3 -0
  146. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_816618e2.js.map +1 -0
  147. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_ba2e050f.js +3 -0
  148. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_ba2e050f.js.map +1 -0
  149. package/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js +2 -2
  150. package/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js.map +1 -1
  151. package/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  152. package/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js +2 -2
  153. package/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js.map +1 -1
  154. package/web/.next/server/chunks/ssr/{[root-of-the-server]__cbae9863._.js → [root-of-the-server]__6258349c._.js} +2 -2
  155. package/web/.next/server/chunks/ssr/[root-of-the-server]__6258349c._.js.map +1 -0
  156. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  157. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
  158. package/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js +2 -2
  159. package/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js.map +1 -1
  160. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  161. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
  162. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__e5e09f72._.js → server/chunks/ssr/[root-of-the-server]__94a6d275._.js} +2 -2
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__94a6d275._.js.map +1 -0
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
  165. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  166. package/web/.next/server/chunks/ssr/_0e9d6bf7._.js +1 -1
  167. package/web/.next/server/chunks/ssr/_0e9d6bf7._.js.map +1 -1
  168. package/web/.next/server/chunks/ssr/_250a63ae._.js.map +1 -1
  169. package/web/.next/server/chunks/ssr/_61351ed3._.js +1 -1
  170. package/web/.next/server/chunks/ssr/_61351ed3._.js.map +1 -1
  171. package/web/.next/server/chunks/ssr/_63688261._.js +6 -0
  172. package/web/.next/server/chunks/ssr/_63688261._.js.map +1 -0
  173. package/web/.next/server/chunks/ssr/_8400c8bb._.js +1 -1
  174. package/web/.next/server/chunks/ssr/_8400c8bb._.js.map +1 -1
  175. package/web/.next/server/chunks/ssr/_9f940437._.js +1 -1
  176. package/web/.next/server/chunks/ssr/_9f940437._.js.map +1 -1
  177. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_398553b0._.js → server/chunks/ssr/src_presentation_web_2b91e4ec._.js} +2 -2
  178. package/web/.next/server/chunks/ssr/{src_presentation_web_5c87e8e4._.js.map → src_presentation_web_2b91e4ec._.js.map} +1 -1
  179. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_5c87e8e4._.js → server/chunks/ssr/src_presentation_web_5bcc1537._.js} +2 -2
  180. package/web/.next/server/chunks/ssr/{src_presentation_web_398553b0._.js.map → src_presentation_web_5bcc1537._.js.map} +1 -1
  181. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_5955c012.js +3 -0
  182. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_5955c012.js.map +1 -0
  183. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  184. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  185. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  186. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  187. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  188. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  189. package/web/.next/server/chunks/ssr/src_presentation_web_d5b0cb86._.js +8 -0
  190. package/web/.next/server/chunks/ssr/src_presentation_web_d5b0cb86._.js.map +1 -0
  191. package/web/.next/server/chunks/ssr/src_presentation_web_e626b63c._.js +8 -0
  192. package/web/.next/server/chunks/ssr/src_presentation_web_e626b63c._.js.map +1 -0
  193. package/web/.next/server/pages/500.html +2 -2
  194. package/web/.next/server/server-reference-manifest.js +1 -1
  195. package/web/.next/server/server-reference-manifest.json +175 -118
  196. package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
  197. package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +2 -2
  198. package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
  199. package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
  200. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +43 -28
  201. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  202. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  203. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  204. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +49 -34
  205. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  206. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  207. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  208. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +39 -24
  209. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  210. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  211. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  212. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +43 -28
  213. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js +1 -1
  214. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  215. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  216. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +49 -34
  217. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  218. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  219. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  220. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +39 -24
  221. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js +1 -1
  222. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  223. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  224. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +39 -24
  225. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  226. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  227. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  228. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
  229. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
  230. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  231. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  232. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  233. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  234. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  235. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  236. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  237. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  238. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  239. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.nft.json +1 -1
  240. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  241. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  242. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -1
  243. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  244. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  245. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
  246. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  247. package/web/.next/standalone/src/presentation/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
  248. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  249. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_816618e2.js +3 -0
  250. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_ba2e050f.js +3 -0
  251. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js +2 -2
  252. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  253. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js +2 -2
  254. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{[root-of-the-server]__cbae9863._.js → [root-of-the-server]__6258349c._.js} +2 -2
  255. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  256. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js +2 -2
  257. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  258. package/web/.next/{server/chunks/ssr/[root-of-the-server]__e5e09f72._.js → standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__94a6d275._.js} +2 -2
  259. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
  260. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_0e9d6bf7._.js +1 -1
  261. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_61351ed3._.js +1 -1
  262. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_63688261._.js +6 -0
  263. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_8400c8bb._.js +1 -1
  264. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_9f940437._.js +1 -1
  265. package/web/.next/{server/chunks/ssr/src_presentation_web_398553b0._.js → standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_2b91e4ec._.js} +2 -2
  266. package/web/.next/{server/chunks/ssr/src_presentation_web_5c87e8e4._.js → standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_5bcc1537._.js} +2 -2
  267. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_5955c012.js +3 -0
  268. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  269. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  270. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  271. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_d5b0cb86._.js +8 -0
  272. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_e626b63c._.js +8 -0
  273. package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
  274. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
  275. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +175 -118
  276. package/web/.next/standalone/src/presentation/web/CLAUDE.md +191 -0
  277. package/web/.next/standalone/src/presentation/web/app/actions/create-feature.ts +27 -2
  278. package/web/.next/standalone/src/presentation/web/app/actions/get-feature-metadata.ts +18 -0
  279. package/web/.next/standalone/src/presentation/web/app/actions/get-graph-data.ts +12 -0
  280. package/web/.next/standalone/src/presentation/web/app/api/agent-events/route.ts +21 -1
  281. package/web/.next/standalone/src/presentation/web/components/common/add-repository-button/index.ts +1 -0
  282. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/create-drawer-client.tsx +23 -26
  283. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx +44 -18
  284. package/web/.next/standalone/src/presentation/web/components/common/feature-node/derive-feature-state.ts +2 -0
  285. package/web/.next/standalone/src/presentation/web/components/common/index.ts +1 -5
  286. package/web/.next/standalone/src/presentation/web/components/common/repository-node/repository-node.tsx +2 -2
  287. package/web/.next/standalone/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.tsx +0 -13
  288. package/web/.next/standalone/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.tsx +1 -45
  289. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-empty-state.tsx +1 -1
  290. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +24 -8
  291. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center.stories.tsx +2 -41
  292. package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +183 -326
  293. package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.stories.tsx +0 -48
  294. package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.tsx +34 -82
  295. package/web/.next/standalone/src/presentation/web/components/layouts/app-shell/app-shell.tsx +1 -1
  296. package/web/.next/standalone/src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx +2 -14
  297. package/web/.next/standalone/src/presentation/web/components/ui/scroll-area.tsx +1 -1
  298. package/web/.next/standalone/src/presentation/web/hooks/use-graph-state.ts +343 -0
  299. package/web/.next/standalone/src/presentation/web/lib/derive-graph.ts +178 -0
  300. package/web/.next/standalone/src/presentation/web/lib/layout-with-dagre.ts +1 -2
  301. package/web/.next/standalone/src/presentation/web/server.js +1 -1
  302. package/web/.next/static/chunks/{71cf72022f08a8c9.js → 0a883e2efecfd563.js} +1 -1
  303. package/web/.next/static/chunks/{ebf172a84c9596ed.js → 596ca28d78baae25.js} +1 -1
  304. package/web/.next/static/chunks/{1c07b21eb8b32f25.js → 638824249d103905.js} +1 -1
  305. package/web/.next/static/chunks/63a80e9d4c4b0253.js +4 -0
  306. package/web/.next/static/chunks/71c9ecdceac1939f.css +2 -0
  307. package/web/.next/static/chunks/a040b058d79f4ade.js +1 -0
  308. package/web/.next/static/chunks/{fcafb841e3860687.js → c575ab63c138645b.js} +1 -1
  309. package/web/.next/static/chunks/cdc92cdf81005c84.js +1 -0
  310. package/web/.next/static/chunks/{fabfa54940973cc7.js → e05eb1cc84ee254a.js} +1 -1
  311. package/web/.next/static/chunks/{8682dcb376de62de.js → ef8f8940eac6c542.js} +1 -1
  312. package/web/.next/static/chunks/f32c98a709949c5b.js +1 -0
  313. package/web/.next/trace +1 -1
  314. package/web/.next/trace-build +1 -1
  315. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-button.d.ts.map +0 -1
  316. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node-config.d.ts +0 -7
  317. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node-config.d.ts.map +0 -1
  318. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node-config.js +0 -1
  319. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node.d.ts +0 -6
  320. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node.d.ts.map +0 -1
  321. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node.js +0 -23
  322. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node.stories.d.ts +0 -10
  323. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node.stories.d.ts.map +0 -1
  324. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node.stories.js +0 -33
  325. package/dist/src/presentation/web/components/common/add-repository-node/index.d.ts +0 -4
  326. package/dist/src/presentation/web/components/common/add-repository-node/index.d.ts.map +0 -1
  327. package/dist/src/presentation/web/components/common/add-repository-node/pick-folder.d.ts.map +0 -1
  328. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_2b7834f6.js +0 -3
  329. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_2b7834f6.js.map +0 -1
  330. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_6923c575.js +0 -3
  331. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_6923c575.js.map +0 -1
  332. package/web/.next/server/chunks/ssr/[root-of-the-server]__cbae9863._.js.map +0 -1
  333. package/web/.next/server/chunks/ssr/[root-of-the-server]__e5e09f72._.js.map +0 -1
  334. package/web/.next/server/chunks/ssr/_47ef589d._.js +0 -6
  335. package/web/.next/server/chunks/ssr/_47ef589d._.js.map +0 -1
  336. package/web/.next/server/chunks/ssr/src_presentation_web_1a32dbcb._.js +0 -8
  337. package/web/.next/server/chunks/ssr/src_presentation_web_1a32dbcb._.js.map +0 -1
  338. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f4952172.js +0 -3
  339. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f4952172.js.map +0 -1
  340. package/web/.next/server/chunks/ssr/src_presentation_web_c1bc6240._.js +0 -8
  341. package/web/.next/server/chunks/ssr/src_presentation_web_c1bc6240._.js.map +0 -1
  342. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_2b7834f6.js +0 -3
  343. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_6923c575.js +0 -3
  344. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_47ef589d._.js +0 -6
  345. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_1a32dbcb._.js +0 -8
  346. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f4952172.js +0 -3
  347. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_c1bc6240._.js +0 -8
  348. package/web/.next/standalone/src/presentation/web/components/common/add-repository-node/add-repository-node-config.ts +0 -8
  349. package/web/.next/standalone/src/presentation/web/components/common/add-repository-node/add-repository-node.stories.tsx +0 -70
  350. package/web/.next/standalone/src/presentation/web/components/common/add-repository-node/add-repository-node.tsx +0 -49
  351. package/web/.next/standalone/src/presentation/web/components/common/add-repository-node/index.ts +0 -3
  352. package/web/.next/static/chunks/3c79bca4d3f18f66.js +0 -1
  353. package/web/.next/static/chunks/5cd24ca47061a21d.js +0 -4
  354. package/web/.next/static/chunks/67f2a7a5e8dc358a.css +0 -2
  355. package/web/.next/static/chunks/991d4490d7a338d8.js +0 -1
  356. package/web/.next/static/chunks/c71589df79020ecb.js +0 -1
  357. /package/dist/src/presentation/web/components/common/{add-repository-node → add-repository-button}/add-repository-button.d.ts +0 -0
  358. /package/dist/src/presentation/web/components/common/{add-repository-node → add-repository-button}/add-repository-button.js +0 -0
  359. /package/dist/src/presentation/web/components/common/{add-repository-node → add-repository-button}/pick-folder.d.ts +0 -0
  360. /package/dist/src/presentation/web/components/common/{add-repository-node → add-repository-button}/pick-folder.js +0 -0
  361. /package/web/.next/standalone/src/presentation/web/components/common/{add-repository-node → add-repository-button}/add-repository-button.tsx +0 -0
  362. /package/web/.next/standalone/src/presentation/web/components/common/{add-repository-node → add-repository-button}/pick-folder.ts +0 -0
  363. /package/web/.next/static/{IKuYPxAuMvc4BtwKHlj30 → uMxPSDPwZCludF5408rWJ}/_buildManifest.js +0 -0
  364. /package/web/.next/static/{IKuYPxAuMvc4BtwKHlj30 → uMxPSDPwZCludF5408rWJ}/_clientMiddlewareManifest.json +0 -0
  365. /package/web/.next/static/{IKuYPxAuMvc4BtwKHlj30 → uMxPSDPwZCludF5408rWJ}/_ssgManifest.js +0 -0
@@ -9,7 +9,7 @@
9
9
  * - Application layer depends on this interface
10
10
  * - Infrastructure layer provides concrete implementation
11
11
  */
12
- import type { ApprovalGates } from '../../../../domain/generated/output.js';
12
+ import type { ApprovalGates, AgentType } from '../../../../domain/generated/output.js';
13
13
  /**
14
14
  * Service interface for feature agent background process management.
15
15
  */
@@ -31,6 +31,7 @@ export interface IFeatureAgentProcessService {
31
31
  push?: boolean;
32
32
  openPr?: boolean;
33
33
  resumePayload?: string;
34
+ agentType?: AgentType;
34
35
  }): number;
35
36
  /**
36
37
  * Check if a process is still alive.
@@ -1 +1 @@
1
- {"version":3,"file":"feature-agent-process.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/agents/feature-agent-process.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAE5E;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;;;;;;OAQG;IACH,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,aAAa,CAAC;QAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GACA,MAAM,CAAC;IAEV;;;;;OAKG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAE9B;;;;;OAKG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD"}
1
+ {"version":3,"file":"feature-agent-process.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/agents/feature-agent-process.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAEvF;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;;;;;;OAQG;IACH,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,aAAa,CAAC;QAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,SAAS,CAAC;KACvB,GACA,MAAM,CAAC;IAEV;;;;;OAKG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAE9B;;;;;OAKG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD"}
@@ -1 +1 @@
1
- {"version":3,"file":"approve-agent-run.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/agents/approve-agent-run.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gEAAgE,CAAC;AAC7G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAE1G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAI9E,qBACa,sBAAsB;IAG/B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAEnC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;gBANrB,kBAAkB,EAAE,mBAAmB,EAEvC,cAAc,EAAE,2BAA2B,EAE3C,iBAAiB,EAAE,kBAAkB,EAErC,qBAAqB,EAAE,sBAAsB;IAG1D,OAAO,CACX,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CA6FlD"}
1
+ {"version":3,"file":"approve-agent-run.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/agents/approve-agent-run.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gEAAgE,CAAC;AAC7G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAE1G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAI9E,qBACa,sBAAsB;IAG/B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAEnC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;gBANrB,kBAAkB,EAAE,mBAAmB,EAEvC,cAAc,EAAE,2BAA2B,EAE3C,iBAAiB,EAAE,kBAAkB,EAErC,qBAAqB,EAAE,sBAAsB;IAG1D,OAAO,CACX,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CA8FlD"}
@@ -107,6 +107,7 @@ let ApproveAgentRunUseCase = class ApproveAgentRunUseCase {
107
107
  push: feature?.push ?? false,
108
108
  openPr: feature?.openPr ?? false,
109
109
  ...(payload ? { resumePayload: JSON.stringify(payload) } : {}),
110
+ agentType: run.agentType,
110
111
  });
111
112
  return { approved: true, reason: 'Approved and resumed' };
112
113
  }
@@ -15,6 +15,7 @@
15
15
  * - specPath is persisted on the Feature record
16
16
  * - Initial lifecycle is Requirements
17
17
  */
18
+ import type { Feature } from '../../../../domain/generated/output.js';
18
19
  import type { IFeatureRepository } from '../../../ports/output/repositories/feature-repository.interface.js';
19
20
  import type { IWorktreeService } from '../../../ports/output/services/worktree-service.interface.js';
20
21
  import type { IFeatureAgentProcessService } from '../../../ports/output/agents/feature-agent-process.interface.js';
@@ -24,7 +25,7 @@ import type { IRepositoryRepository } from '../../../ports/output/repositories/r
24
25
  import type { IGitPrService } from '../../../ports/output/services/git-pr-service.interface.js';
25
26
  import { MetadataGenerator } from './metadata-generator.js';
26
27
  import { SlugResolver } from './slug-resolver.js';
27
- import type { CreateFeatureInput, CreateFeatureResult } from './types.js';
28
+ import type { CreateFeatureInput, CreateFeatureResult, CreateRecordResult } from './types.js';
28
29
  export declare class CreateFeatureUseCase {
29
30
  private readonly featureRepo;
30
31
  private readonly worktreeService;
@@ -36,6 +37,24 @@ export declare class CreateFeatureUseCase {
36
37
  private readonly repositoryRepo;
37
38
  private readonly gitPrService;
38
39
  constructor(featureRepo: IFeatureRepository, worktreeService: IWorktreeService, agentProcess: IFeatureAgentProcessService, runRepository: IAgentRunRepository, specInitializer: ISpecInitializerService, metadataGenerator: MetadataGenerator, slugResolver: SlugResolver, repositoryRepo: IRepositoryRepository, gitPrService: IGitPrService);
40
+ /**
41
+ * Full synchronous execution: creates record, initializes worktree/spec, spawns agent.
42
+ * Used by the CLI which shows a spinner and needs everything done before returning.
43
+ */
39
44
  execute(input: CreateFeatureInput): Promise<CreateFeatureResult>;
45
+ /**
46
+ * Phase 1 (fast): Creates the feature + agent run records in DB and returns immediately.
47
+ * The feature has a real UUID and a preliminary slug derived from the provided name.
48
+ * No AI calls, no git operations — just DB writes.
49
+ */
50
+ createRecord(input: CreateFeatureInput): Promise<CreateRecordResult>;
51
+ /**
52
+ * Phase 2 (slow): AI metadata generation, git worktree, spec init, agent spawn.
53
+ * Updates the feature record with refined metadata, branch, and specPath.
54
+ */
55
+ initializeAndSpawn(feature: Feature, input: CreateFeatureInput, shouldSpawn: boolean): Promise<{
56
+ warning?: string;
57
+ updatedFeature: Feature;
58
+ }>;
40
59
  }
41
60
  //# sourceMappingURL=create-feature.use-case.d.ts.map
@@ -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;AAMH,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,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE1E,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;gBAhBZ,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;IAGxC,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CA8JvE"}
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;AAEtE,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,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;gBAhBZ,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;IAG9C;;;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;IAgH1E;;;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;CAiE1D"}
@@ -55,22 +55,31 @@ let CreateFeatureUseCase = class CreateFeatureUseCase {
55
55
  this.repositoryRepo = repositoryRepo;
56
56
  this.gitPrService = gitPrService;
57
57
  }
58
+ /**
59
+ * Full synchronous execution: creates record, initializes worktree/spec, spawns agent.
60
+ * Used by the CLI which shows a spinner and needs everything done before returning.
61
+ */
58
62
  async execute(input) {
59
- // Resolve parent feature and determine child initial lifecycle (FR-8, FR-9, FR-12, FR-19)
63
+ const { feature, shouldSpawn } = await this.createRecord(input);
64
+ const { warning, updatedFeature } = await this.initializeAndSpawn(feature, input, shouldSpawn);
65
+ return { feature: updatedFeature, warning };
66
+ }
67
+ /**
68
+ * Phase 1 (fast): Creates the feature + agent run records in DB and returns immediately.
69
+ * The feature has a real UUID and a preliminary slug derived from the provided name.
70
+ * No AI calls, no git operations — just DB writes.
71
+ */
72
+ async createRecord(input) {
60
73
  let initialLifecycle = SdlcLifecycle.Requirements;
61
74
  let shouldSpawn = true;
62
- // When creating a child feature, always use the parent's repositoryPath (the
63
- // original repo root), not the caller's cwd which may be a worktree (FR-10).
64
75
  let effectiveRepoPath = input.repositoryPath;
65
76
  if (input.parentId) {
66
77
  const parent = await this.featureRepo.findById(input.parentId);
67
78
  if (!parent) {
68
79
  throw new Error(`Parent feature not found: ${input.parentId}`);
69
80
  }
70
- // Use the parent's repositoryPath so the child worktree branches from the
71
- // original repo, not from inside another worktree.
72
81
  effectiveRepoPath = parent.repositoryPath;
73
- // Cycle detection — O(depth) upward walk through ancestor chain (FR-19)
82
+ // Cycle detection — O(depth) upward walk through ancestor chain
74
83
  const visited = new Set([input.parentId]);
75
84
  let cursor = parent.parentId;
76
85
  while (cursor) {
@@ -81,10 +90,6 @@ let CreateFeatureUseCase = class CreateFeatureUseCase {
81
90
  const ancestor = await this.featureRepo.findById(cursor);
82
91
  cursor = ancestor?.parentId ?? undefined;
83
92
  }
84
- // Two-gate lifecycle logic (FR-9):
85
- // parent.lifecycle === Blocked → cascade block (FR-12)
86
- // parent.lifecycle not in POST_IMPLEMENTATION → early gate not met → Blocked
87
- // parent.lifecycle in POST_IMPLEMENTATION → gate satisfied → Started
88
93
  if (parent.lifecycle === SdlcLifecycle.Blocked ||
89
94
  !POST_IMPLEMENTATION.has(parent.lifecycle)) {
90
95
  initialLifecycle = SdlcLifecycle.Blocked;
@@ -95,29 +100,10 @@ let CreateFeatureUseCase = class CreateFeatureUseCase {
95
100
  shouldSpawn = true;
96
101
  }
97
102
  }
98
- // Ensure the target directory is a git repository (auto-init if needed)
99
- // Must run before slug resolution which needs git commands
100
- await this.worktreeService.ensureGitRepository(effectiveRepoPath);
101
- const metadata = await this.metadataGenerator.generateMetadata(input.userInput);
102
- const originalSlug = metadata.slug;
103
- // Find a unique slug — the branch may exist from a previous (deleted) feature
104
- const { slug, branch, warning } = await this.slugResolver.resolveUniqueSlug(originalSlug, effectiveRepoPath);
105
- // Determine next feature number for this repo
106
- const existingFeatures = await this.featureRepo.list({
107
- repositoryPath: effectiveRepoPath,
108
- });
109
- const featureNumber = existingFeatures.length + 1;
110
- const now = new Date();
111
- const runId = randomUUID();
112
- // Create git worktree branching from the repo's default branch
113
- const defaultBranch = await this.gitPrService.getDefaultBranch(effectiveRepoPath);
114
- const worktreePath = this.worktreeService.getWorktreePath(effectiveRepoPath, branch);
115
- await this.worktreeService.create(effectiveRepoPath, branch, worktreePath, defaultBranch);
116
- // Initialize spec directory — full user input goes into spec.yaml as-is
117
- const { specDir } = await this.specInitializer.initialize(worktreePath, slug, featureNumber, input.userInput);
118
103
  // Resolve or create repository entity for this path
119
104
  const normalizedPath = effectiveRepoPath.replace(/\/+$/, '') || effectiveRepoPath;
120
105
  let repository = await this.repositoryRepo.findByPath(normalizedPath);
106
+ const now = new Date();
121
107
  if (!repository) {
122
108
  const repoName = normalizedPath.split('/').pop() ?? normalizedPath;
123
109
  repository = {
@@ -132,14 +118,19 @@ let CreateFeatureUseCase = class CreateFeatureUseCase {
132
118
  throw new Error(`Failed to create or retrieve repository record for path: ${normalizedPath}`);
133
119
  }
134
120
  }
121
+ const featureName = input.name ?? input.userInput.slice(0, 100);
122
+ const runId = randomUUID();
123
+ const featureId = randomUUID();
124
+ // Use the feature ID as a temporary slug so it never collides with the
125
+ // AI-generated slug in initializeAndSpawn() → resolveUniqueSlug().
135
126
  const feature = {
136
- id: randomUUID(),
137
- name: metadata.name,
138
- slug,
139
- description: metadata.description,
127
+ id: featureId,
128
+ name: featureName,
129
+ slug: featureId,
130
+ description: input.description ?? '',
140
131
  userQuery: input.userInput,
141
132
  repositoryPath: effectiveRepoPath,
142
- branch,
133
+ branch: '',
143
134
  lifecycle: initialLifecycle,
144
135
  messages: [],
145
136
  relatedArtifacts: [],
@@ -151,14 +142,14 @@ let CreateFeatureUseCase = class CreateFeatureUseCase {
151
142
  allowMerge: false,
152
143
  },
153
144
  agentRunId: runId,
154
- specPath: specDir,
145
+ specPath: '',
155
146
  repositoryId: repository.id,
156
147
  ...(input.parentId ? { parentId: input.parentId } : {}),
157
148
  createdAt: now,
158
149
  updatedAt: now,
159
150
  };
160
151
  await this.featureRepo.create(feature);
161
- // Create agent run record and spawn background worker
152
+ // Create agent run record (pending state agent not spawned yet)
162
153
  const settings = getSettings();
163
154
  const agentRun = {
164
155
  id: runId,
@@ -174,16 +165,52 @@ let CreateFeatureUseCase = class CreateFeatureUseCase {
174
165
  updatedAt: now.toISOString(),
175
166
  };
176
167
  await this.runRepository.create(agentRun);
177
- // Only spawn the agent immediately if the child is not blocked (FR-9, FR-16)
168
+ return { feature, shouldSpawn };
169
+ }
170
+ /**
171
+ * Phase 2 (slow): AI metadata generation, git worktree, spec init, agent spawn.
172
+ * Updates the feature record with refined metadata, branch, and specPath.
173
+ */
174
+ async initializeAndSpawn(feature, input, shouldSpawn) {
175
+ const effectiveRepoPath = feature.repositoryPath;
176
+ // Ensure the target directory is a git repository (auto-init if needed)
177
+ await this.worktreeService.ensureGitRepository(effectiveRepoPath);
178
+ const metadata = await this.metadataGenerator.generateMetadata(input.userInput);
179
+ const originalSlug = metadata.slug;
180
+ const { slug, branch, warning } = await this.slugResolver.resolveUniqueSlug(originalSlug, effectiveRepoPath);
181
+ // Determine next feature number for this repo
182
+ const existingFeatures = await this.featureRepo.list({
183
+ repositoryPath: effectiveRepoPath,
184
+ });
185
+ const featureNumber = existingFeatures.length;
186
+ // Create git worktree branching from the repo's default branch
187
+ const defaultBranch = await this.gitPrService.getDefaultBranch(effectiveRepoPath);
188
+ const worktreePath = this.worktreeService.getWorktreePath(effectiveRepoPath, branch);
189
+ await this.worktreeService.create(effectiveRepoPath, branch, worktreePath, defaultBranch);
190
+ // Initialize spec directory — full user input goes into spec.yaml as-is
191
+ const { specDir } = await this.specInitializer.initialize(worktreePath, slug, featureNumber, input.userInput);
192
+ // Update feature record with refined metadata, branch, and specPath
193
+ const updatedFeature = {
194
+ ...feature,
195
+ name: metadata.name,
196
+ slug,
197
+ description: metadata.description,
198
+ branch,
199
+ specPath: specDir,
200
+ updatedAt: new Date(),
201
+ };
202
+ await this.featureRepo.update(updatedFeature);
203
+ // Spawn agent if not blocked
178
204
  if (shouldSpawn) {
179
- this.agentProcess.spawn(feature.id, runId, effectiveRepoPath, specDir, worktreePath, {
205
+ const agentRun = await this.runRepository.findById(feature.agentRunId);
206
+ this.agentProcess.spawn(feature.id, feature.agentRunId, effectiveRepoPath, specDir, worktreePath, {
180
207
  ...(input.approvalGates ? { approvalGates: input.approvalGates } : {}),
181
- threadId: agentRun.threadId,
208
+ threadId: agentRun?.threadId ?? randomUUID(),
182
209
  push: input.push ?? false,
183
210
  openPr: input.openPr ?? false,
184
211
  });
185
212
  }
186
- return { feature, warning };
213
+ return { warning, updatedFeature };
187
214
  }
188
215
  };
189
216
  CreateFeatureUseCase = __decorate([
@@ -7,9 +7,19 @@ export interface CreateFeatureInput {
7
7
  openPr?: boolean;
8
8
  /** Optional ID of the parent feature. When set, child may be created in Blocked state. */
9
9
  parentId?: string;
10
+ /** Pre-supplied name (skips AI metadata extraction for name). */
11
+ name?: string;
12
+ /** Pre-supplied description (skips AI metadata extraction for description). */
13
+ description?: string;
10
14
  }
11
15
  export interface CreateFeatureResult {
12
16
  feature: Feature;
13
17
  warning?: string;
14
18
  }
19
+ /** Result of the fast createRecord phase (before metadata/worktree/agent). */
20
+ export interface CreateRecordResult {
21
+ feature: Feature;
22
+ /** Whether the agent should be spawned (false when child is blocked). */
23
+ shouldSpawn: boolean;
24
+ }
15
25
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/use-cases/features/create/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AAErF,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/use-cases/features/create/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AAErF,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,yEAAyE;IACzE,WAAW,EAAE,OAAO,CAAC;CACtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"resume-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/resume-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAQlG,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,eAAe;gBANf,WAAW,EAAE,kBAAkB,EAE/B,OAAO,EAAE,mBAAmB,EAE5B,cAAc,EAAE,2BAA2B,EAE3C,eAAe,EAAE,gBAAgB;IAG9C,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAgG/D"}
1
+ {"version":3,"file":"resume-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/resume-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAQlG,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,eAAe;gBANf,WAAW,EAAE,kBAAkB,EAE/B,OAAO,EAAE,mBAAmB,EAE5B,cAAc,EAAE,2BAA2B,EAE3C,eAAe,EAAE,gBAAgB;IAG9C,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAiG/D"}
@@ -106,6 +106,7 @@ let ResumeFeatureUseCase = class ResumeFeatureUseCase {
106
106
  resumeFromInterrupt: lastRun.status === AgentRunStatus.waitingApproval,
107
107
  push: feature.push,
108
108
  openPr: feature.openPr,
109
+ agentType: lastRun.agentType,
109
110
  });
110
111
  return { feature, newRun };
111
112
  }
@@ -88,7 +88,7 @@ export function createDefaultSettings() {
88
88
  const notifications = {
89
89
  inApp: { enabled: true },
90
90
  browser: { enabled: true },
91
- desktop: { enabled: true },
91
+ desktop: { enabled: false },
92
92
  events: {
93
93
  agentStarted: true,
94
94
  phaseCompleted: true,
@@ -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;AAqDpF,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;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"}
@@ -9,15 +9,90 @@ import { RESEARCH_FIXTURE } from './fixtures/research.fixture.js';
9
9
  import { PLAN_FIXTURE } from './fixtures/plan.fixture.js';
10
10
  import { TASKS_FIXTURE } from './fixtures/tasks.fixture.js';
11
11
  const DEFAULT_DELAY_MS = 2000;
12
- const METADATA_RESULT = JSON.stringify({
13
- slug: 'dark-mode-toggle',
14
- name: 'Dark Mode Toggle',
15
- description: 'Add a dark-mode toggle to the Shep web UI settings panel',
16
- });
17
- // Satisfies merge-output-parser.ts COMMIT_SHA_RE and PR_URL_RE patterns
18
- const MERGE_COMMIT_RESULT = '[feat/042-dark-mode-toggle abc1234f] feat(ui): add dark-mode toggle\n' +
19
- 'https://github.com/shep-ai/shep/pull/42\nPull request #42 created successfully.';
20
- const MERGE_SQUASH_RESULT = 'Merged PR #42 with squash merge. Branch feat/042-dark-mode-toggle deleted.';
12
+ const ADJECTIVES = [
13
+ 'quantum',
14
+ 'blazing',
15
+ 'cosmic',
16
+ 'fuzzy',
17
+ 'turbo',
18
+ 'hyperbolic',
19
+ 'spectral',
20
+ 'chromatic',
21
+ 'orbital',
22
+ 'fractal',
23
+ 'velvet',
24
+ 'neon',
25
+ 'arctic',
26
+ 'molten',
27
+ 'prismatic',
28
+ 'phantom',
29
+ 'galactic',
30
+ 'atomic',
31
+ 'sonic',
32
+ 'ethereal',
33
+ ];
34
+ const NOUNS = [
35
+ 'widget',
36
+ 'pipeline',
37
+ 'dashboard',
38
+ 'renderer',
39
+ 'compiler',
40
+ 'beacon',
41
+ 'transformer',
42
+ 'navigator',
43
+ 'interceptor',
44
+ 'gateway',
45
+ 'synthesizer',
46
+ 'orchestrator',
47
+ 'resolver',
48
+ 'dispatcher',
49
+ 'emitter',
50
+ 'detector',
51
+ 'aggregator',
52
+ 'scheduler',
53
+ 'validator',
54
+ 'serializer',
55
+ ];
56
+ const VERBS = [
57
+ 'add',
58
+ 'implement',
59
+ 'integrate',
60
+ 'build',
61
+ 'create',
62
+ 'wire up',
63
+ 'introduce',
64
+ 'scaffold',
65
+ 'bootstrap',
66
+ 'enable',
67
+ ];
68
+ function randomMetadata() {
69
+ const adj = ADJECTIVES[Math.floor(Math.random() * ADJECTIVES.length)];
70
+ const noun = NOUNS[Math.floor(Math.random() * NOUNS.length)];
71
+ const verb = VERBS[Math.floor(Math.random() * VERBS.length)];
72
+ const slug = `${adj}-${noun}`;
73
+ const name = `${adj.charAt(0).toUpperCase() + adj.slice(1)} ${noun.charAt(0).toUpperCase() + noun.slice(1)}`;
74
+ return JSON.stringify({
75
+ slug,
76
+ name,
77
+ description: `${verb.charAt(0).toUpperCase() + verb.slice(1)} a ${adj} ${noun} to the application`,
78
+ });
79
+ }
80
+ function randomPrNumber() {
81
+ return Math.floor(Math.random() * 900) + 100;
82
+ }
83
+ function randomCommitHash() {
84
+ return Math.random().toString(16).slice(2, 10);
85
+ }
86
+ function mergeCommitResult() {
87
+ const pr = randomPrNumber();
88
+ const hash = randomCommitHash();
89
+ return (`[feat/dev-branch ${hash}] feat: dev implementation\n` +
90
+ `https://github.com/shep-ai/shep/pull/${pr}\nPull request #${pr} created successfully.`);
91
+ }
92
+ function mergeSquashResult() {
93
+ const pr = randomPrNumber();
94
+ return `Merged PR #${pr} with squash merge. Branch feat/dev-branch deleted.`;
95
+ }
21
96
  const IMPLEMENT_RESULT = 'Implementation complete. All tests pass.\npnpm test: 47 passed, 0 failed';
22
97
  const CI_FIX_RESULT = 'Fixed CI failure: corrected import path. All checks now passing.';
23
98
  /**
@@ -66,7 +141,7 @@ export class DevAgentExecutorService {
66
141
  dispatch(prompt) {
67
142
  // Metadata: mock-executor.service.ts extractUserInput pattern
68
143
  if (prompt.includes('User request:\n"'))
69
- return METADATA_RESULT;
144
+ return randomMetadata();
70
145
  // Analyze: analyze.prompt.ts:39
71
146
  if (prompt.includes('Write your analysis to:')) {
72
147
  const specDir = extractSpecDir(prompt);
@@ -113,13 +188,13 @@ export class DevAgentExecutorService {
113
188
  return IMPLEMENT_RESULT;
114
189
  // Merge commit/push/PR: merge-prompts.ts:88
115
190
  if (prompt.includes('performing git operations in a feature worktree'))
116
- return MERGE_COMMIT_RESULT;
191
+ return mergeCommitResult();
117
192
  // Merge squash (PR): merge-prompts.ts:131
118
193
  if (prompt.includes('merging a pull request via the GitHub CLI'))
119
- return MERGE_SQUASH_RESULT;
194
+ return mergeSquashResult();
120
195
  // Merge squash (local): merge-prompts.ts:168
121
196
  if (prompt.includes('performing a local merge'))
122
- return MERGE_SQUASH_RESULT;
197
+ return mergeSquashResult();
123
198
  // CI fix: merge.prompt.ts:28
124
199
  if (prompt.includes('fixing a CI failure'))
125
200
  return CI_FIX_RESULT;
@@ -71,7 +71,7 @@ export declare function createFeatureAgentGraph(depsOrExecutor: FeatureAgentGrap
71
71
  ciFixAttempts?: number | undefined;
72
72
  ciFixHistory?: import("../../../../domain/index.js").CiFixRecord[] | undefined;
73
73
  ciFixStatus?: "success" | "timeout" | "idle" | "watching" | "fixing" | "exhausted" | undefined;
74
- }, "__start__" | "analyze" | "requirements" | "research" | "plan" | "implement" | "validate_spec_analyze" | "validate_spec_requirements" | "validate_research" | "validate_plan_tasks" | "repair_spec_analyze" | "repair_spec_requirements" | "repair_research" | "repair_plan_tasks", {
74
+ }, "implement" | "__start__" | "analyze" | "requirements" | "research" | "plan" | "validate_spec_analyze" | "validate_spec_requirements" | "validate_research" | "validate_plan_tasks" | "repair_spec_analyze" | "repair_spec_requirements" | "repair_research" | "repair_plan_tasks", {
75
75
  featureId: {
76
76
  (): import("@langchain/langgraph").LastValue<string>;
77
77
  (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
@@ -7,7 +7,7 @@
7
7
  */
8
8
  import type { IFeatureAgentProcessService } from '../../../../application/ports/output/agents/feature-agent-process.interface.js';
9
9
  import type { IAgentRunRepository } from '../../../../application/ports/output/agents/agent-run-repository.interface.js';
10
- import { type ApprovalGates } from '../../../../domain/generated/output.js';
10
+ import { type ApprovalGates, type AgentType } from '../../../../domain/generated/output.js';
11
11
  export declare class FeatureAgentProcessService implements IFeatureAgentProcessService {
12
12
  private readonly runRepository;
13
13
  constructor(runRepository: IAgentRunRepository);
@@ -19,6 +19,7 @@ export declare class FeatureAgentProcessService implements IFeatureAgentProcessS
19
19
  push?: boolean;
20
20
  openPr?: boolean;
21
21
  resumePayload?: string;
22
+ agentType?: AgentType;
22
23
  }): number;
23
24
  isAlive(pid: number): boolean;
24
25
  checkAndMarkCrashed(runId: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"feature-agent-process.service.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sEAAsE,CAAC;AACxH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qEAAqE,CAAC;AAC/G,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAYlF,qBAAa,0BAA2B,YAAW,2BAA2B;IAChE,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,mBAAmB;IAE/D,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,aAAa,CAAC;QAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GACA,MAAM;IA0DT,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IASvB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAexD"}
1
+ {"version":3,"file":"feature-agent-process.service.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sEAAsE,CAAC;AACxH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qEAAqE,CAAC;AAC/G,OAAO,EAAkB,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAYlG,qBAAa,0BAA2B,YAAW,2BAA2B;IAChE,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,mBAAmB;IAE/D,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,aAAa,CAAC;QAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,SAAS,CAAC;KACvB,GACA,MAAM;IA6DT,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IASvB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAexD"}
@@ -62,6 +62,9 @@ export class FeatureAgentProcessService {
62
62
  if (options?.resumePayload) {
63
63
  args.push('--resume-payload', options.resumePayload);
64
64
  }
65
+ if (options?.agentType) {
66
+ args.push('--agent-type', options.agentType);
67
+ }
65
68
  // Create log file for worker output (for debugging)
66
69
  const logsDir = join(homedir(), '.shep', 'logs');
67
70
  mkdirSync(logsDir, { recursive: true });
@@ -9,6 +9,7 @@
9
9
  * CLI Args: --feature-id <id> --run-id <id> --repo <path> --spec-dir <path>
10
10
  */
11
11
  import 'reflect-metadata';
12
+ import { type AgentType } from '../../../../domain/generated/output.js';
12
13
  import type { ApprovalGates } from '../../../../domain/generated/output.js';
13
14
  export interface WorkerArgs {
14
15
  featureId: string;
@@ -23,6 +24,7 @@ export interface WorkerArgs {
23
24
  push?: boolean;
24
25
  openPr?: boolean;
25
26
  resumePayload?: string;
27
+ agentType?: AgentType;
26
28
  }
27
29
  /**
28
30
  * Parse CLI arguments into a WorkerArgs object.
@@ -1 +1 @@
1
- {"version":3,"file":"feature-agent-worker.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAEH,OAAO,kBAAkB,CAAC;AAqB1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAoD1D;AAgCD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA0M/D"}
1
+ {"version":3,"file":"feature-agent-worker.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAEH,OAAO,kBAAkB,CAAC;AAa1B,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAS9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA2D1D;AAgCD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAiN/D"}
@@ -53,6 +53,10 @@ export function parseWorkerArgs(args) {
53
53
  const openPr = args.includes('--open-pr');
54
54
  const threadIdx = args.indexOf('--thread-id');
55
55
  const threadId = threadIdx !== -1 && threadIdx + 1 < args.length ? args[threadIdx + 1] : undefined;
56
+ const agentTypeIdx = args.indexOf('--agent-type');
57
+ const agentType = agentTypeIdx !== -1 && agentTypeIdx + 1 < args.length
58
+ ? args[agentTypeIdx + 1]
59
+ : undefined;
56
60
  const resumePayloadIdx = args.indexOf('--resume-payload');
57
61
  const resumePayload = resumePayloadIdx !== -1 && resumePayloadIdx + 1 < args.length
58
62
  ? args[resumePayloadIdx + 1]
@@ -70,6 +74,7 @@ export function parseWorkerArgs(args) {
70
74
  push,
71
75
  openPr,
72
76
  resumePayload,
77
+ agentType,
73
78
  };
74
79
  }
75
80
  /** Simple worker logger — writes to stdout which is redirected to log file by the parent. */
@@ -119,9 +124,17 @@ export async function runWorker(args) {
119
124
  initializeSettings(settings);
120
125
  const runRepository = container.resolve('IAgentRunRepository');
121
126
  const executorProvider = container.resolve('IAgentExecutorProvider');
122
- // Create executor from configured agent settings
123
- log('Creating executor from configured agent settings...');
124
- const executor = executorProvider.getExecutor();
127
+ // Create executor use pinned agentType when resuming, otherwise fall back to settings
128
+ let executor;
129
+ if (args.agentType) {
130
+ log(`Creating executor from pinned agent type: ${args.agentType}`);
131
+ const factory = container.resolve('IAgentExecutorFactory');
132
+ executor = factory.createExecutor(args.agentType, settings.agent);
133
+ }
134
+ else {
135
+ log('Creating executor from configured agent settings...');
136
+ executor = executorProvider.getExecutor();
137
+ }
125
138
  // Resolve merge node dependencies
126
139
  const gitPrService = container.resolve('IGitPrService');
127
140
  const featureRepository = container.resolve('IFeatureRepository');
@@ -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;AAmBzE,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,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1F,YAAY,EAAE,aAAa,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,IAGnC,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAkQ7E"}
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;AAmBzE,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,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1F,YAAY,EAAE,aAAa,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,IAGnC,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAsQ7E"}
@@ -36,9 +36,13 @@ export function createMergeNode(deps) {
36
36
  // --- Rejection detection on resume ---
37
37
  // Use DB lifecycle (Review) instead of feature.yaml completedPhases to detect
38
38
  // resume, because feature.yaml is in the worktree which was already pushed.
39
+ // Also require _approvalAction to be set — this distinguishes a genuine resume
40
+ // (where the worker sets _approvalAction via Command({update})) from a first run
41
+ // where updateNodeLifecycle('merge') already set lifecycle=Review in the DB.
39
42
  const featureForResume = await deps.featureRepository.findById(state.featureId);
40
43
  const isResumeAfterInterrupt = featureForResume?.lifecycle === SdlcLifecycle.Review &&
41
- shouldInterrupt('merge', state.approvalGates);
44
+ shouldInterrupt('merge', state.approvalGates) &&
45
+ state._approvalAction !== null;
42
46
  if (isResumeAfterInterrupt && state._approvalAction === 'rejected') {
43
47
  const feedback = state._rejectionFeedback ?? '(no feedback)';
44
48
  log.info(`Merge rejected with feedback: "${feedback}" — scheduling re-execution`);
@@ -1 +1 @@
1
- {"version":3,"file":"create-feature.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/create-feature.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAEpE,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAQD,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE;QACd,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAqBD,wBAAsB,aAAa,CACjC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkChD"}
1
+ {"version":3,"file":"create-feature.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/create-feature.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAEpE,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAQD,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE;QACd,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAqBD,wBAAsB,aAAa,CACjC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA2DhD"}