@shepai/cli 1.72.9 → 1.73.0-pr222.ef53005

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 (449) hide show
  1. package/dist/packages/core/src/application/ports/output/agents/agent-executor-provider.interface.d.ts +1 -1
  2. package/dist/packages/core/src/application/ports/output/agents/agent-executor-provider.interface.d.ts.map +1 -1
  3. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts +20 -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 +68 -41
  6. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +10 -0
  7. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
  8. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  9. package/dist/packages/core/src/infrastructure/di/container.js +2 -1
  10. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-provider.service.d.ts +4 -2
  11. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-provider.service.d.ts.map +1 -1
  12. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-provider.service.js +8 -4
  13. package/dist/packages/core/src/infrastructure/services/agents/common/agent-runner.service.js +1 -1
  14. package/dist/packages/core/src/infrastructure/services/agents/common/structured-agent-caller.service.js +1 -1
  15. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +1 -1
  16. package/dist/packages/core/src/infrastructure/services/notifications/notification.service.d.ts.map +1 -1
  17. package/dist/packages/core/src/infrastructure/services/notifications/notification.service.js +2 -4
  18. package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
  19. package/dist/src/presentation/web/app/actions/create-feature.js +20 -2
  20. package/dist/src/presentation/web/app/actions/get-feature-metadata.d.ts +10 -0
  21. package/dist/src/presentation/web/app/actions/get-feature-metadata.d.ts.map +1 -0
  22. package/dist/src/presentation/web/app/actions/get-feature-metadata.js +14 -0
  23. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  24. package/dist/src/presentation/web/app/api/agent-events/route.js +15 -0
  25. package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
  26. package/dist/src/presentation/web/app/build-feature-node-data.js +2 -26
  27. package/dist/src/presentation/web/app/build-graph-nodes.d.ts.map +1 -1
  28. package/dist/src/presentation/web/app/build-graph-nodes.js +2 -26
  29. package/dist/src/presentation/web/app/layout.js +1 -1
  30. package/dist/src/presentation/web/components/common/add-repository-button/add-repository-button.d.ts.map +1 -0
  31. package/dist/src/presentation/web/components/common/add-repository-button/index.d.ts +2 -0
  32. package/dist/src/presentation/web/components/common/add-repository-button/index.d.ts.map +1 -0
  33. package/dist/src/presentation/web/components/common/{add-repository-node → add-repository-button}/index.js +0 -1
  34. package/dist/src/presentation/web/components/common/add-repository-button/pick-folder.d.ts.map +1 -0
  35. package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.d.ts.map +1 -1
  36. package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.js +13 -18
  37. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +2 -0
  38. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -1
  39. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +11 -11
  40. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  41. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +83 -144
  42. package/dist/src/presentation/web/components/common/control-center-drawer/index.d.ts +0 -1
  43. package/dist/src/presentation/web/components/common/control-center-drawer/index.d.ts.map +1 -1
  44. package/dist/src/presentation/web/components/common/control-center-drawer/index.js +0 -1
  45. package/dist/src/presentation/web/components/common/control-center-drawer/use-artifact-fetch.d.ts +13 -0
  46. package/dist/src/presentation/web/components/common/control-center-drawer/use-artifact-fetch.d.ts.map +1 -0
  47. package/dist/src/presentation/web/components/common/control-center-drawer/use-artifact-fetch.js +46 -0
  48. package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.d.ts.map +1 -1
  49. package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.js +7 -10
  50. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts +25 -0
  51. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
  52. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +45 -2
  53. package/dist/src/presentation/web/components/common/index.d.ts +2 -3
  54. package/dist/src/presentation/web/components/common/index.d.ts.map +1 -1
  55. package/dist/src/presentation/web/components/common/index.js +2 -3
  56. package/dist/src/presentation/web/components/common/repository-node/repository-node.js +1 -1
  57. package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.d.ts.map +1 -1
  58. package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.js +14 -39
  59. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.d.ts +1 -3
  60. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.d.ts.map +1 -1
  61. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.js +3 -7
  62. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.d.ts +0 -1
  63. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.d.ts.map +1 -1
  64. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.js +0 -11
  65. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +1 -1
  66. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  67. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +31 -14
  68. package/dist/src/presentation/web/components/features/control-center/control-center.stories.d.ts +0 -11
  69. package/dist/src/presentation/web/components/features/control-center/control-center.stories.d.ts.map +1 -1
  70. package/dist/src/presentation/web/components/features/control-center/control-center.stories.js +2 -37
  71. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +8 -0
  72. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  73. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +177 -350
  74. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts +2 -10
  75. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  76. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +11 -54
  77. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts.map +1 -1
  78. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.js +0 -46
  79. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +1 -1
  80. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts +1 -3
  81. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
  82. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
  83. package/dist/src/presentation/web/components/ui/alert-dialog.d.ts.map +1 -1
  84. package/dist/src/presentation/web/components/ui/alert-dialog.js +2 -2
  85. package/dist/src/presentation/web/components/ui/dialog.d.ts.map +1 -1
  86. package/dist/src/presentation/web/components/ui/dialog.js +2 -2
  87. package/dist/src/presentation/web/components/ui/scroll-area.js +1 -1
  88. package/dist/src/presentation/web/hooks/agent-events-provider.d.ts.map +1 -1
  89. package/dist/src/presentation/web/hooks/agent-events-provider.js +3 -2
  90. package/dist/src/presentation/web/hooks/use-agent-events.d.ts.map +1 -1
  91. package/dist/src/presentation/web/hooks/use-agent-events.js +19 -5
  92. package/dist/src/presentation/web/hooks/use-deploy-action.d.ts.map +1 -1
  93. package/dist/src/presentation/web/hooks/use-deploy-action.js +10 -13
  94. package/dist/src/presentation/web/hooks/use-graph-state.d.ts +42 -0
  95. package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -0
  96. package/dist/src/presentation/web/hooks/use-graph-state.js +257 -0
  97. package/dist/src/presentation/web/hooks/use-notifications.d.ts +1 -5
  98. package/dist/src/presentation/web/hooks/use-notifications.d.ts.map +1 -1
  99. package/dist/src/presentation/web/hooks/use-notifications.js +1 -26
  100. package/dist/src/presentation/web/hooks/use-notifications.stories.d.ts.map +1 -1
  101. package/dist/src/presentation/web/hooks/use-notifications.stories.js +28 -38
  102. package/dist/src/presentation/web/lib/derive-graph.d.ts +52 -0
  103. package/dist/src/presentation/web/lib/derive-graph.d.ts.map +1 -0
  104. package/dist/src/presentation/web/lib/derive-graph.js +126 -0
  105. package/dist/src/presentation/web/lib/layout-with-dagre.d.ts.map +1 -1
  106. package/dist/src/presentation/web/lib/layout-with-dagre.js +1 -2
  107. package/dist/src/presentation/web/lib/logger.d.ts +7 -0
  108. package/dist/src/presentation/web/lib/logger.d.ts.map +1 -0
  109. package/dist/src/presentation/web/lib/logger.js +11 -0
  110. package/dist/tsconfig.build.tsbuildinfo +1 -1
  111. package/package.json +1 -1
  112. package/web/.next/BUILD_ID +1 -1
  113. package/web/.next/build-manifest.json +2 -2
  114. package/web/.next/cache/.previewinfo +1 -1
  115. package/web/.next/cache/.rscinfo +1 -1
  116. package/web/.next/cache/.tsbuildinfo +1 -1
  117. package/web/.next/cache/config.json +3 -3
  118. package/web/.next/fallback-build-manifest.json +2 -2
  119. package/web/.next/prerender-manifest.json +3 -3
  120. package/web/.next/required-server-files.js +1 -1
  121. package/web/.next/required-server-files.json +1 -1
  122. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +45 -30
  123. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  124. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  125. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  126. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +51 -36
  127. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  128. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  129. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  130. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +41 -26
  131. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  132. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  133. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  134. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +45 -30
  135. package/web/.next/server/app/(dashboard)/create/page.js +1 -1
  136. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  137. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  138. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +51 -36
  139. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  140. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  141. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  142. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +41 -26
  143. package/web/.next/server/app/(dashboard)/page.js +1 -1
  144. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  145. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  146. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +41 -26
  147. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  148. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  149. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  150. package/web/.next/server/app/_global-error.html +2 -2
  151. package/web/.next/server/app/_global-error.rsc +1 -1
  152. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  153. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  154. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  155. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  156. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  157. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  158. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  159. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  160. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  161. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  162. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  163. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  164. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  165. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  166. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  167. package/web/.next/server/app/version/page.js.nft.json +1 -1
  168. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  169. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
  170. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
  171. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  172. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  173. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +3 -0
  174. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js.map +1 -0
  175. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +3 -0
  176. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js.map +1 -0
  177. package/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js +2 -2
  178. package/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js.map +1 -1
  179. package/web/.next/server/chunks/ssr/[root-of-the-server]__2018e25f._.js +1 -1
  180. package/web/.next/server/chunks/ssr/[root-of-the-server]__2018e25f._.js.map +1 -1
  181. package/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  182. package/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js +2 -2
  183. package/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js.map +1 -1
  184. package/web/.next/server/chunks/ssr/{[root-of-the-server]__cbae9863._.js → [root-of-the-server]__6258349c._.js} +2 -2
  185. package/web/.next/server/chunks/ssr/[root-of-the-server]__6258349c._.js.map +1 -0
  186. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  187. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
  188. package/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js +2 -2
  189. package/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js.map +1 -1
  190. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  191. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
  192. 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
  193. package/web/.next/server/chunks/ssr/[root-of-the-server]__94a6d275._.js.map +1 -0
  194. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
  195. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  196. package/web/.next/server/chunks/ssr/_07c2a32a._.js +1 -1
  197. package/web/.next/server/chunks/ssr/_07c2a32a._.js.map +1 -1
  198. package/web/.next/server/chunks/ssr/_0e9d6bf7._.js +1 -1
  199. package/web/.next/server/chunks/ssr/_0e9d6bf7._.js.map +1 -1
  200. package/web/.next/server/chunks/ssr/_4f7c70c9._.js +6 -0
  201. package/web/.next/server/chunks/ssr/_4f7c70c9._.js.map +1 -0
  202. package/web/.next/server/chunks/ssr/{_1978f325._.js → _5ee4f5a7._.js} +2 -2
  203. package/web/.next/server/chunks/ssr/_5ee4f5a7._.js.map +1 -0
  204. package/web/.next/server/chunks/ssr/_61351ed3._.js +1 -1
  205. package/web/.next/server/chunks/ssr/_61351ed3._.js.map +1 -1
  206. package/web/.next/server/chunks/ssr/_6e08ce21._.js +1 -1
  207. package/web/.next/server/chunks/ssr/_6e08ce21._.js.map +1 -1
  208. package/web/.next/server/chunks/ssr/_8400c8bb._.js +1 -1
  209. package/web/.next/server/chunks/ssr/_8400c8bb._.js.map +1 -1
  210. package/web/.next/server/chunks/ssr/_9f940437._.js +1 -1
  211. package/web/.next/server/chunks/ssr/_9f940437._.js.map +1 -1
  212. package/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js +8 -0
  213. package/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js.map +1 -0
  214. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_5ea689db._.js → server/chunks/ssr/src_presentation_web_30d7eeda._.js} +2 -2
  215. package/web/.next/server/chunks/ssr/{src_presentation_web_5ea689db._.js.map → src_presentation_web_30d7eeda._.js.map} +1 -1
  216. package/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.js +8 -0
  217. package/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.js.map +1 -0
  218. package/web/.next/server/chunks/ssr/{src_presentation_web_5ea689db._.js → src_presentation_web_565a14f8._.js} +2 -2
  219. package/web/.next/server/chunks/ssr/{src_presentation_web_7188a290._.js.map → src_presentation_web_565a14f8._.js.map} +1 -1
  220. package/web/.next/server/chunks/ssr/src_presentation_web_67178b88._.js +1 -1
  221. package/web/.next/server/chunks/ssr/src_presentation_web_67178b88._.js.map +1 -1
  222. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +3 -0
  223. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js.map +1 -0
  224. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js +1 -1
  225. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js.map +1 -1
  226. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  227. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  228. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  229. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  230. package/web/.next/server/pages/500.html +2 -2
  231. package/web/.next/server/server-reference-manifest.js +1 -1
  232. package/web/.next/server/server-reference-manifest.json +183 -126
  233. package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
  234. package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +2 -2
  235. package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
  236. package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
  237. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +45 -30
  238. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  239. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  240. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  241. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +51 -36
  242. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  243. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  244. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  245. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +41 -26
  246. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  247. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  248. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  249. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +45 -30
  250. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js +1 -1
  251. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  252. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  253. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +51 -36
  254. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  255. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  256. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  257. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +41 -26
  258. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js +1 -1
  259. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  260. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  261. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +41 -26
  262. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  263. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  264. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  265. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
  266. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
  267. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  268. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  269. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  270. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  271. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  272. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  273. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  274. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  275. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  276. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.nft.json +1 -1
  277. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  278. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  279. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -1
  280. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  281. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  282. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
  283. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  284. package/web/.next/standalone/src/presentation/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
  285. 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
  286. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +3 -0
  287. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +3 -0
  288. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js +2 -2
  289. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__2018e25f._.js +1 -1
  290. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  291. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js +2 -2
  292. 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
  293. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  294. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js +2 -2
  295. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  296. 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
  297. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
  298. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_07c2a32a._.js +1 -1
  299. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_0e9d6bf7._.js +1 -1
  300. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_4f7c70c9._.js +6 -0
  301. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_1978f325._.js → _5ee4f5a7._.js} +2 -2
  302. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_61351ed3._.js +1 -1
  303. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_6e08ce21._.js +1 -1
  304. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_8400c8bb._.js +1 -1
  305. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_9f940437._.js +1 -1
  306. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js +8 -0
  307. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{src_presentation_web_7188a290._.js → src_presentation_web_30d7eeda._.js} +2 -2
  308. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.js +8 -0
  309. package/web/.next/{server/chunks/ssr/src_presentation_web_7188a290._.js → standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js} +2 -2
  310. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_67178b88._.js +1 -1
  311. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +3 -0
  312. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js +1 -1
  313. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  314. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  315. package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
  316. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
  317. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +183 -126
  318. package/web/.next/standalone/src/presentation/web/CLAUDE.md +77 -33
  319. package/web/.next/standalone/src/presentation/web/app/actions/create-feature.ts +27 -2
  320. package/web/.next/standalone/src/presentation/web/app/actions/get-feature-metadata.ts +18 -0
  321. package/web/.next/standalone/src/presentation/web/app/api/agent-events/route.ts +17 -0
  322. package/web/.next/standalone/src/presentation/web/app/build-feature-node-data.ts +3 -30
  323. package/web/.next/standalone/src/presentation/web/app/build-graph-nodes.ts +3 -30
  324. package/web/.next/standalone/src/presentation/web/app/layout.tsx +1 -1
  325. package/web/.next/standalone/src/presentation/web/components/common/add-repository-button/index.ts +1 -0
  326. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/create-drawer-client.tsx +15 -21
  327. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/drawer-view.ts +12 -13
  328. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx +116 -141
  329. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/index.ts +0 -1
  330. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/use-artifact-fetch.ts +56 -0
  331. package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/use-feature-actions.ts +6 -7
  332. package/web/.next/standalone/src/presentation/web/components/common/feature-node/derive-feature-state.ts +63 -2
  333. package/web/.next/standalone/src/presentation/web/components/common/index.ts +2 -12
  334. package/web/.next/standalone/src/presentation/web/components/common/repository-node/repository-node.tsx +2 -2
  335. package/web/.next/standalone/src/presentation/web/components/common/repository-node/use-repository-actions.ts +29 -54
  336. package/web/.next/standalone/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.tsx +0 -13
  337. package/web/.next/standalone/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.tsx +1 -45
  338. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-empty-state.tsx +1 -1
  339. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +43 -36
  340. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center.stories.tsx +2 -41
  341. package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +226 -438
  342. package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.stories.tsx +0 -48
  343. package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.tsx +13 -76
  344. package/web/.next/standalone/src/presentation/web/components/layouts/app-shell/app-shell.tsx +1 -1
  345. package/web/.next/standalone/src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx +2 -14
  346. package/web/.next/standalone/src/presentation/web/components/ui/alert-dialog.tsx +2 -5
  347. package/web/.next/standalone/src/presentation/web/components/ui/dialog.tsx +2 -5
  348. package/web/.next/standalone/src/presentation/web/components/ui/scroll-area.tsx +1 -1
  349. package/web/.next/standalone/src/presentation/web/hooks/agent-events-provider.tsx +7 -2
  350. package/web/.next/standalone/src/presentation/web/hooks/use-agent-events.ts +20 -5
  351. package/web/.next/standalone/src/presentation/web/hooks/use-deploy-action.ts +13 -13
  352. package/web/.next/standalone/src/presentation/web/hooks/use-graph-state.ts +376 -0
  353. package/web/.next/standalone/src/presentation/web/hooks/use-notifications.stories.tsx +2 -30
  354. package/web/.next/standalone/src/presentation/web/hooks/use-notifications.ts +2 -36
  355. package/web/.next/standalone/src/presentation/web/lib/derive-graph.ts +178 -0
  356. package/web/.next/standalone/src/presentation/web/lib/layout-with-dagre.ts +1 -2
  357. package/web/.next/standalone/src/presentation/web/lib/logger.ts +12 -0
  358. package/web/.next/standalone/src/presentation/web/server.js +1 -1
  359. package/web/.next/static/chunks/0cfed3c69c312c09.js +4 -0
  360. package/web/.next/static/chunks/0ffccd7be73305c8.css +2 -0
  361. package/web/.next/static/chunks/{c92e1360ada8ca94.js → 1f5c93a8b939416d.js} +2 -2
  362. package/web/.next/static/chunks/3f205fd6adbfd20a.js +7 -0
  363. package/web/.next/static/chunks/4c63764a2d06e45e.js +1 -0
  364. package/web/.next/static/chunks/{d4492cd12fdf0891.js → 89e74b1c3eb43b03.js} +1 -1
  365. package/web/.next/static/chunks/{c83897e9213881bf.js → 937d7d4d58942872.js} +1 -1
  366. package/web/.next/static/chunks/95e3f47abe8032e5.js +1 -0
  367. package/web/.next/static/chunks/b835e88cdc8c63d2.js +1 -0
  368. package/web/.next/static/chunks/cb41849bcfaa304e.js +1 -0
  369. package/web/.next/static/chunks/e2342af6b68c94c1.js +1 -0
  370. package/web/.next/static/chunks/ed69d6b172ae2bfe.js +1 -0
  371. package/web/.next/static/chunks/{64850cf4081a2950.js → fd46753cd16664a9.js} +1 -1
  372. package/web/.next/trace +1 -1
  373. package/web/.next/trace-build +1 -1
  374. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-button.d.ts.map +0 -1
  375. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node-config.d.ts +0 -7
  376. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node-config.d.ts.map +0 -1
  377. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node-config.js +0 -1
  378. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node.d.ts +0 -6
  379. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node.d.ts.map +0 -1
  380. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node.js +0 -23
  381. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node.stories.d.ts +0 -10
  382. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node.stories.d.ts.map +0 -1
  383. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node.stories.js +0 -33
  384. package/dist/src/presentation/web/components/common/add-repository-node/index.d.ts +0 -4
  385. package/dist/src/presentation/web/components/common/add-repository-node/index.d.ts.map +0 -1
  386. package/dist/src/presentation/web/components/common/add-repository-node/pick-folder.d.ts.map +0 -1
  387. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.d.ts +0 -12
  388. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.d.ts.map +0 -1
  389. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.js +0 -337
  390. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.d.ts +0 -33
  391. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.d.ts.map +0 -1
  392. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.js +0 -214
  393. package/dist/src/presentation/web/components/common/notification-permission-banner/index.d.ts +0 -2
  394. package/dist/src/presentation/web/components/common/notification-permission-banner/index.d.ts.map +0 -1
  395. package/dist/src/presentation/web/components/common/notification-permission-banner/index.js +0 -1
  396. package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.d.ts +0 -2
  397. package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.d.ts.map +0 -1
  398. package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.js +0 -33
  399. package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.d.ts +0 -6
  400. package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.d.ts.map +0 -1
  401. package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.js +0 -24
  402. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_3a02d8a5.js +0 -3
  403. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_3a02d8a5.js.map +0 -1
  404. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_a3044852.js +0 -3
  405. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_a3044852.js.map +0 -1
  406. package/web/.next/server/chunks/ssr/[root-of-the-server]__cbae9863._.js.map +0 -1
  407. package/web/.next/server/chunks/ssr/[root-of-the-server]__e5e09f72._.js.map +0 -1
  408. package/web/.next/server/chunks/ssr/_1978f325._.js.map +0 -1
  409. package/web/.next/server/chunks/ssr/_38d24563._.js +0 -6
  410. package/web/.next/server/chunks/ssr/_38d24563._.js.map +0 -1
  411. package/web/.next/server/chunks/ssr/src_presentation_web_0a49d9ee._.js +0 -8
  412. package/web/.next/server/chunks/ssr/src_presentation_web_0a49d9ee._.js.map +0 -1
  413. package/web/.next/server/chunks/ssr/src_presentation_web_79b0305a._.js +0 -8
  414. package/web/.next/server/chunks/ssr/src_presentation_web_79b0305a._.js.map +0 -1
  415. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_cc16bd01.js +0 -3
  416. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_cc16bd01.js.map +0 -1
  417. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_3a02d8a5.js +0 -3
  418. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_a3044852.js +0 -3
  419. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_38d24563._.js +0 -6
  420. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_0a49d9ee._.js +0 -8
  421. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_79b0305a._.js +0 -8
  422. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_cc16bd01.js +0 -3
  423. package/web/.next/standalone/src/presentation/web/components/common/add-repository-node/add-repository-node-config.ts +0 -8
  424. package/web/.next/standalone/src/presentation/web/components/common/add-repository-node/add-repository-node.stories.tsx +0 -70
  425. package/web/.next/standalone/src/presentation/web/components/common/add-repository-node/add-repository-node.tsx +0 -49
  426. package/web/.next/standalone/src/presentation/web/components/common/add-repository-node/index.ts +0 -3
  427. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.tsx +0 -293
  428. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/control-center-drawer.tsx +0 -745
  429. package/web/.next/standalone/src/presentation/web/components/common/notification-permission-banner/index.ts +0 -1
  430. package/web/.next/standalone/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.tsx +0 -52
  431. package/web/.next/standalone/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.tsx +0 -55
  432. package/web/.next/static/chunks/0c54314c8c9c9739.js +0 -7
  433. package/web/.next/static/chunks/10cd08dae8c210ff.js +0 -1
  434. package/web/.next/static/chunks/15bf7ee1da91eb46.js +0 -4
  435. package/web/.next/static/chunks/3c79bca4d3f18f66.js +0 -1
  436. package/web/.next/static/chunks/67f2a7a5e8dc358a.css +0 -2
  437. package/web/.next/static/chunks/6cc840197626843b.js +0 -1
  438. package/web/.next/static/chunks/e3239b6c18cf8b96.js +0 -1
  439. package/web/.next/static/chunks/e9cc53ce8a7bdea6.js +0 -1
  440. package/web/.next/static/chunks/ef916db8c537211a.js +0 -1
  441. /package/dist/src/presentation/web/components/common/{add-repository-node → add-repository-button}/add-repository-button.d.ts +0 -0
  442. /package/dist/src/presentation/web/components/common/{add-repository-node → add-repository-button}/add-repository-button.js +0 -0
  443. /package/dist/src/presentation/web/components/common/{add-repository-node → add-repository-button}/pick-folder.d.ts +0 -0
  444. /package/dist/src/presentation/web/components/common/{add-repository-node → add-repository-button}/pick-folder.js +0 -0
  445. /package/web/.next/standalone/src/presentation/web/components/common/{add-repository-node → add-repository-button}/add-repository-button.tsx +0 -0
  446. /package/web/.next/standalone/src/presentation/web/components/common/{add-repository-node → add-repository-button}/pick-folder.ts +0 -0
  447. /package/web/.next/static/{Atrl1oUfRQej2kgJ972uS → 0yTXyENV4ko7rpM4-3vV8}/_buildManifest.js +0 -0
  448. /package/web/.next/static/{Atrl1oUfRQej2kgJ972uS → 0yTXyENV4ko7rpM4-3vV8}/_clientMiddlewareManifest.json +0 -0
  449. /package/web/.next/static/{Atrl1oUfRQej2kgJ972uS → 0yTXyENV4ko7rpM4-3vV8}/_ssgManifest.js +0 -0
@@ -1,5 +1,5 @@
1
1
  import type { IAgentExecutor } from './agent-executor.interface.js';
2
2
  export interface IAgentExecutorProvider {
3
- getExecutor(): IAgentExecutor;
3
+ getExecutor(): Promise<IAgentExecutor>;
4
4
  }
5
5
  //# sourceMappingURL=agent-executor-provider.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-executor-provider.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/agents/agent-executor-provider.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,MAAM,WAAW,sBAAsB;IACrC,WAAW,IAAI,cAAc,CAAC;CAC/B"}
1
+ {"version":3,"file":"agent-executor-provider.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/agents/agent-executor-provider.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,MAAM,WAAW,sBAAsB;IACrC,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;CACxC"}
@@ -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":"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;AAiHrC;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,SAAS,CAAC,CAuQrE;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;AAiHrC;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,SAAS,CAAC,CAwQrE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -171,7 +171,8 @@ export async function initializeContainer() {
171
171
  container.register('IAgentExecutorProvider', {
172
172
  useFactory: (c) => {
173
173
  const factory = c.resolve('IAgentExecutorFactory');
174
- return new AgentExecutorProvider(factory);
174
+ const settingsRepo = c.resolve('ISettingsRepository');
175
+ return new AgentExecutorProvider(factory, settingsRepo);
175
176
  },
176
177
  });
177
178
  container.register('IStructuredAgentCaller', {
@@ -1,9 +1,11 @@
1
1
  import type { IAgentExecutorProvider } from '../../../../application/ports/output/agents/agent-executor-provider.interface.js';
2
2
  import type { IAgentExecutorFactory } from '../../../../application/ports/output/agents/agent-executor-factory.interface.js';
3
3
  import type { IAgentExecutor } from '../../../../application/ports/output/agents/agent-executor.interface.js';
4
+ import type { ISettingsRepository } from '../../../../application/ports/output/repositories/settings.repository.interface.js';
4
5
  export declare class AgentExecutorProvider implements IAgentExecutorProvider {
5
6
  private readonly factory;
6
- constructor(factory: IAgentExecutorFactory);
7
- getExecutor(): IAgentExecutor;
7
+ private readonly settingsRepository;
8
+ constructor(factory: IAgentExecutorFactory, settingsRepository: ISettingsRepository);
9
+ getExecutor(): Promise<IAgentExecutor>;
8
10
  }
9
11
  //# sourceMappingURL=agent-executor-provider.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-executor-provider.service.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/common/agent-executor-provider.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kFAAkF,CAAC;AAC/H,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iFAAiF,CAAC;AAC7H,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yEAAyE,CAAC;AAG9G,qBAAa,qBAAsB,YAAW,sBAAsB;IACtD,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,qBAAqB;IAE3D,WAAW,IAAI,cAAc;CAI9B"}
1
+ {"version":3,"file":"agent-executor-provider.service.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/common/agent-executor-provider.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kFAAkF,CAAC;AAC/H,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iFAAiF,CAAC;AAC7H,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yEAAyE,CAAC;AAC9G,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oFAAoF,CAAC;AAE9H,qBAAa,qBAAsB,YAAW,sBAAsB;IAEhE,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBADlB,OAAO,EAAE,qBAAqB,EAC9B,kBAAkB,EAAE,mBAAmB;IAGpD,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC;CAO7C"}
@@ -1,11 +1,15 @@
1
- import { getSettings } from '../../settings.service.js';
2
1
  export class AgentExecutorProvider {
3
2
  factory;
4
- constructor(factory) {
3
+ settingsRepository;
4
+ constructor(factory, settingsRepository) {
5
5
  this.factory = factory;
6
+ this.settingsRepository = settingsRepository;
6
7
  }
7
- getExecutor() {
8
- const settings = getSettings();
8
+ async getExecutor() {
9
+ const settings = await this.settingsRepository.load();
10
+ if (!settings) {
11
+ throw new Error('Settings not found. Please run initialization first.');
12
+ }
9
13
  return this.factory.createExecutor(settings.agent.type, settings.agent);
10
14
  }
11
15
  }
@@ -76,7 +76,7 @@ export class AgentRunnerService {
76
76
  }
77
77
  const settings = getSettings();
78
78
  const agentType = settings.agent.type;
79
- const executor = this.executorProvider.getExecutor();
79
+ const executor = await this.executorProvider.getExecutor();
80
80
  const runId = crypto.randomUUID();
81
81
  const threadId = crypto.randomUUID();
82
82
  const now = new Date().toISOString();
@@ -25,7 +25,7 @@ let StructuredAgentCallerService = class StructuredAgentCallerService {
25
25
  this.executorProvider = executorProvider;
26
26
  }
27
27
  async call(prompt, schema, options) {
28
- const executor = this.executorProvider.getExecutor();
28
+ const executor = await this.executorProvider.getExecutor();
29
29
  if (executor.supportsFeature(AgentFeature.structuredOutput)) {
30
30
  return this.callWithNativeSchema(executor, prompt, schema, options);
31
31
  }
@@ -133,7 +133,7 @@ export async function runWorker(args) {
133
133
  }
134
134
  else {
135
135
  log('Creating executor from configured agent settings...');
136
- executor = executorProvider.getExecutor();
136
+ executor = await executorProvider.getExecutor();
137
137
  }
138
138
  // Resolve merge node dependencies
139
139
  const gitPrService = container.resolve('IGitPrService');
@@ -1 +1 @@
1
- {"version":3,"file":"notification.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/notifications/notification.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,iBAAiB,EAElB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8EAA8E,CAAC;AAEzH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAc7D,qBAAa,mBAAoB,YAAW,oBAAoB;IAC9D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAEtC,GAAG,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe;IAKlE,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;CAmBvC"}
1
+ {"version":3,"file":"notification.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/notifications/notification.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,iBAAiB,EAElB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8EAA8E,CAAC;AAEzH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAc7D,qBAAa,mBAAoB,YAAW,oBAAoB;IAC9D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAEtC,GAAG,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe;IAKlE,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;CAiBvC"}
@@ -39,9 +39,7 @@ export class NotificationService {
39
39
  if (notifications.inApp.enabled || notifications.browser.enabled) {
40
40
  this.bus.emit('notification', event);
41
41
  }
42
- // Dispatch to desktop notifier if desktop channel is enabled
43
- if (notifications.desktop.enabled) {
44
- this.desktopNotifier.send(event.featureName, event.message);
45
- }
42
+ // Desktop notifications disabled removed in favour of in-app toasts.
43
+ // The DesktopNotifier dependency is kept for API compatibility but never called.
46
44
  }
47
45
  }
@@ -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"}
@@ -27,15 +27,33 @@ export async function createFeature(input) {
27
27
  };
28
28
  try {
29
29
  const createFeatureUseCase = resolve('CreateFeatureUseCase');
30
- const result = await createFeatureUseCase.execute({
30
+ // Phase 1 (fast): create DB record with real UUID — returns immediately
31
+ const { feature, shouldSpawn } = await createFeatureUseCase.createRecord({
31
32
  userInput,
32
33
  repositoryPath,
33
34
  approvalGates: gates,
34
35
  push: push ?? false,
35
36
  openPr: openPr ?? false,
36
37
  ...(parentId ? { parentId } : {}),
38
+ name,
39
+ description,
37
40
  });
38
- return { feature: result.feature };
41
+ // Phase 2 (background): metadata generation, worktree, spec, agent spawn
42
+ // Fire-and-forget — the UI gets the real feature ID immediately
43
+ createFeatureUseCase
44
+ .initializeAndSpawn(feature, {
45
+ userInput,
46
+ repositoryPath,
47
+ approvalGates: gates,
48
+ push: push ?? false,
49
+ openPr: openPr ?? false,
50
+ ...(parentId ? { parentId } : {}),
51
+ }, shouldSpawn)
52
+ .catch((err) => {
53
+ // eslint-disable-next-line no-console
54
+ console.error('[createFeature] initializeAndSpawn failed:', err);
55
+ });
56
+ return { feature };
39
57
  }
40
58
  catch (error) {
41
59
  const message = error instanceof Error ? error.message : 'Failed to create feature';
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Lightweight server action to fetch a single feature's name and description.
3
+ * Used by the SSE effect to update node metadata after AI metadata generation
4
+ * without a full graph reconcile (which can overwrite SSE-driven state).
5
+ */
6
+ export declare function getFeatureMetadata(featureId: string): Promise<{
7
+ name: string;
8
+ description: string;
9
+ } | null>;
10
+ //# sourceMappingURL=get-feature-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-feature-metadata.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-feature-metadata.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAKvD"}
@@ -0,0 +1,14 @@
1
+ 'use server';
2
+ import { resolve } from '../../lib/server-container.js';
3
+ /**
4
+ * Lightweight server action to fetch a single feature's name and description.
5
+ * Used by the SSE effect to update node metadata after AI metadata generation
6
+ * without a full graph reconcile (which can overwrite SSE-driven state).
7
+ */
8
+ export async function getFeatureMetadata(featureId) {
9
+ const featureRepo = resolve('IFeatureRepository');
10
+ const feature = await featureRepo.findById(featureId);
11
+ if (!feature)
12
+ return null;
13
+ return { name: feature.name, description: feature.description };
14
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/app/api/agent-events/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgBH,eAAO,MAAM,OAAO,kBAAkB,CAAC;AA+DvC,wBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAkM9C"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/app/api/agent-events/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgBH,eAAO,MAAM,OAAO,kBAAkB,CAAC;AA+DvC,wBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAmN9C"}
@@ -153,6 +153,21 @@ export function GET(request) {
153
153
  });
154
154
  }
155
155
  }
156
+ // Check for feature name change (AI metadata generation updates name)
157
+ if (prev.featureName !== feature.name) {
158
+ prev.featureName = feature.name;
159
+ const nodeName = LIFECYCLE_TO_NODE[feature.lifecycle] ?? 'requirements';
160
+ emitEvent({
161
+ eventType: NotificationEventType.PhaseCompleted,
162
+ agentRunId: run.id,
163
+ featureId: feature.id,
164
+ featureName: feature.name,
165
+ phaseName: nodeName,
166
+ message: `Feature metadata updated`,
167
+ severity: NotificationSeverity.Info,
168
+ timestamp: new Date().toISOString(),
169
+ });
170
+ }
156
171
  // Check for lifecycle change (agent stays "running" but moves through phases)
157
172
  if (prev.lifecycle !== feature.lifecycle) {
158
173
  prev.lifecycle = feature.lifecycle;
@@ -1 +1 @@
1
- {"version":3,"file":"build-feature-node-data.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/app/build-feature-node-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAK9E,OAAO,KAAK,EAAE,eAAe,EAAyB,MAAM,kCAAkC,CAAC;AAsB/F;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,GAAG,eAAe,CA+B5F"}
1
+ {"version":3,"file":"build-feature-node-data.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/app/build-feature-node-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAM9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAExE;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,GAAG,eAAe,CAuB5F"}
@@ -1,38 +1,14 @@
1
- import { deriveNodeState, deriveProgress, } from '../components/common/feature-node/derive-feature-state.js';
2
- /** Map domain SdlcLifecycle enum values to UI FeatureLifecyclePhase (1:1). */
3
- const lifecycleMap = {
4
- Requirements: 'requirements',
5
- Research: 'research',
6
- Implementation: 'implementation',
7
- Review: 'review',
8
- 'Deploy & QA': 'deploy',
9
- Maintain: 'maintain',
10
- };
11
- /** Map agent graph node names (from agent_run.result) to UI lifecycle phases. */
12
- const nodeToLifecyclePhase = {
13
- analyze: 'requirements',
14
- requirements: 'requirements',
15
- research: 'research',
16
- plan: 'implementation',
17
- implement: 'implementation',
18
- merge: 'review',
19
- };
1
+ import { deriveNodeState, deriveProgress, deriveLifecycle, } from '../components/common/feature-node/derive-feature-state.js';
20
2
  /**
21
3
  * Builds a FeatureNodeData object from a Feature entity and optional AgentRun.
22
4
  * This is the single-feature version of the logic in `buildGraphNodes`.
23
5
  */
24
6
  export function buildFeatureNodeData(feature, run) {
25
- const agentNode = run?.result?.startsWith('node:') ? run.result.slice(5) : undefined;
26
- const lifecycle = run?.status === 'completed'
27
- ? 'maintain'
28
- : ((agentNode ? nodeToLifecyclePhase[agentNode] : undefined) ??
29
- lifecycleMap[feature.lifecycle] ??
30
- 'requirements');
31
7
  return {
32
8
  name: feature.name,
33
9
  description: feature.description ?? feature.slug,
34
10
  featureId: feature.id,
35
- lifecycle,
11
+ lifecycle: deriveLifecycle(feature, run),
36
12
  repositoryPath: feature.repositoryPath,
37
13
  branch: feature.branch,
38
14
  specPath: feature.specPath,
@@ -1 +1 @@
1
- {"version":3,"file":"build-graph-nodes.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/app/build-graph-nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAK1F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAuB1C,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,UAAU,EAAE,EAC1B,gBAAgB,EAAE,cAAc,EAAE,GACjC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAiE5C"}
1
+ {"version":3,"file":"build-graph-nodes.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/app/build-graph-nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAM1F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAG1C,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,UAAU,EAAE,EAC1B,gBAAgB,EAAE,cAAc,EAAE,GACjC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAiE5C"}
@@ -1,22 +1,4 @@
1
- import { deriveNodeState, deriveProgress, } from '../components/common/feature-node/derive-feature-state.js';
2
- /** Map domain SdlcLifecycle enum values to UI FeatureLifecyclePhase (1:1). */
3
- const lifecycleMap = {
4
- Requirements: 'requirements',
5
- Research: 'research',
6
- Implementation: 'implementation',
7
- Review: 'review',
8
- 'Deploy & QA': 'deploy',
9
- Maintain: 'maintain',
10
- };
11
- /** Map agent graph node names (from agent_run.result) to UI lifecycle phases. */
12
- const nodeToLifecyclePhase = {
13
- analyze: 'requirements',
14
- requirements: 'requirements',
15
- research: 'research',
16
- plan: 'implementation',
17
- implement: 'implementation',
18
- merge: 'review',
19
- };
1
+ import { deriveNodeState, deriveProgress, deriveLifecycle, } from '../components/common/feature-node/derive-feature-state.js';
20
2
  /**
21
3
  * Builds React Flow nodes and edges from persisted repositories and features.
22
4
  *
@@ -95,12 +77,6 @@ function appendFeatureNodes(repoFeatures, repoNodeId, allFeaturesWithRuns, nodes
95
77
  return aTime - bTime;
96
78
  });
97
79
  sorted.forEach(({ feature, run }) => {
98
- const agentNode = run?.result?.startsWith('node:') ? run.result.slice(5) : undefined;
99
- const lifecycle = run?.status === 'completed'
100
- ? 'maintain'
101
- : ((agentNode ? nodeToLifecyclePhase[agentNode] : undefined) ??
102
- lifecycleMap[feature.lifecycle] ??
103
- 'requirements');
104
80
  // Resolve blockedBy display name from parent feature
105
81
  let blockedBy;
106
82
  if (feature.parentId && feature.lifecycle === 'Blocked') {
@@ -113,7 +89,7 @@ function appendFeatureNodes(repoFeatures, repoNodeId, allFeaturesWithRuns, nodes
113
89
  name: feature.name,
114
90
  description: feature.description ?? feature.slug,
115
91
  featureId: feature.id,
116
- lifecycle,
92
+ lifecycle: deriveLifecycle(feature, run),
117
93
  repositoryPath: feature.repositoryPath,
118
94
  branch: feature.branch,
119
95
  specPath: feature.specPath,
@@ -36,5 +36,5 @@ export default function RootLayout({ children, }) {
36
36
  } catch (e) {}
37
37
  })();
38
38
  `,
39
- } }) }), _jsxs("body", { className: "min-h-screen antialiased", children: [_jsx(AppShell, { children: children }), _jsx(Toaster, {})] })] }));
39
+ } }) }), _jsxs("body", { className: "min-h-screen antialiased", children: [_jsx(AppShell, { children: children }), _jsx(Toaster, { position: "bottom-center" })] })] }));
40
40
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-repository-button.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/add-repository-button/add-repository-button.tsx"],"names":[],"mappings":"AAQA,UAAU,wBAAwB;IAChC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,EAAE,wBAAwB,2CAuCzE"}
@@ -0,0 +1,2 @@
1
+ export { AddRepositoryButton } from './add-repository-button.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/add-repository-button/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -1,2 +1 @@
1
- export { AddRepositoryNode } from './add-repository-node.js';
2
1
  export { AddRepositoryButton } from './add-repository-button.js';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pick-folder.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/add-repository-button/pick-folder.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQzD"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/create-drawer-client.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iEAAiE,CAAC;AAC3G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAG5E,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,wBAAgB,kBAAkB,CAAC,EACjC,cAAc,EACd,eAAe,EACf,QAAQ,EACR,gBAAgB,GACjB,EAAE,uBAAuB,2CAgFzB"}
1
+ {"version":3,"file":"create-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/create-drawer-client.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iEAAiE,CAAC;AAC3G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,wBAAgB,kBAAkB,CAAC,EACjC,cAAc,EACd,eAAe,EACf,QAAQ,EACR,gBAAgB,GACjB,EAAE,uBAAuB,2CA2EzB"}