@shepai/cli 1.178.0 → 1.178.1-pr536.42a22c6

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 (474) hide show
  1. package/apis/json-schema/Application.yaml +40 -0
  2. package/apis/json-schema/ApplicationStatus.yaml +8 -0
  3. package/dist/packages/core/src/application/ports/output/repositories/application-repository.interface.d.ts +17 -0
  4. package/dist/packages/core/src/application/ports/output/repositories/application-repository.interface.d.ts.map +1 -0
  5. package/dist/packages/core/src/application/ports/output/repositories/application-repository.interface.js +6 -0
  6. package/dist/packages/core/src/application/ports/output/repositories/index.d.ts +1 -0
  7. package/dist/packages/core/src/application/ports/output/repositories/index.d.ts.map +1 -1
  8. package/dist/packages/core/src/application/use-cases/applications/create-application.use-case.d.ts +29 -0
  9. package/dist/packages/core/src/application/use-cases/applications/create-application.use-case.d.ts.map +1 -0
  10. package/dist/packages/core/src/application/use-cases/applications/create-application.use-case.js +135 -0
  11. package/dist/packages/core/src/application/use-cases/applications/delete-application.use-case.d.ts +15 -0
  12. package/dist/packages/core/src/application/use-cases/applications/delete-application.use-case.d.ts.map +1 -0
  13. package/dist/packages/core/src/application/use-cases/applications/delete-application.use-case.js +45 -0
  14. package/dist/packages/core/src/application/use-cases/applications/get-application.use-case.d.ts +13 -0
  15. package/dist/packages/core/src/application/use-cases/applications/get-application.use-case.d.ts.map +1 -0
  16. package/dist/packages/core/src/application/use-cases/applications/get-application.use-case.js +33 -0
  17. package/dist/packages/core/src/application/use-cases/applications/index.d.ts +13 -0
  18. package/dist/packages/core/src/application/use-cases/applications/index.d.ts.map +1 -0
  19. package/dist/packages/core/src/application/use-cases/applications/index.js +10 -0
  20. package/dist/packages/core/src/application/use-cases/applications/list-applications.use-case.d.ts +13 -0
  21. package/dist/packages/core/src/application/use-cases/applications/list-applications.use-case.d.ts.map +1 -0
  22. package/dist/packages/core/src/application/use-cases/applications/list-applications.use-case.js +33 -0
  23. package/dist/packages/core/src/application/use-cases/applications/update-application.use-case.d.ts +14 -0
  24. package/dist/packages/core/src/application/use-cases/applications/update-application.use-case.d.ts.map +1 -0
  25. package/dist/packages/core/src/application/use-cases/applications/update-application.use-case.js +33 -0
  26. package/dist/packages/core/src/domain/generated/output.d.ts +42 -0
  27. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  28. package/dist/packages/core/src/domain/generated/output.js +6 -0
  29. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  30. package/dist/packages/core/src/infrastructure/di/container.js +32 -0
  31. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/application.mapper.d.ts +37 -0
  32. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/application.mapper.d.ts.map +1 -0
  33. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/application.mapper.js +52 -0
  34. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-create-applications-table.d.ts +5 -0
  35. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-create-applications-table.d.ts.map +1 -0
  36. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-create-applications-table.js +34 -0
  37. package/dist/packages/core/src/infrastructure/repositories/sqlite-application.repository.d.ts +21 -0
  38. package/dist/packages/core/src/infrastructure/repositories/sqlite-application.repository.d.ts.map +1 -0
  39. package/dist/packages/core/src/infrastructure/repositories/sqlite-application.repository.js +98 -0
  40. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
  41. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +31 -5
  42. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.d.ts +14 -0
  43. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.d.ts.map +1 -1
  44. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.js +63 -0
  45. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
  46. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +57 -10
  47. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.d.ts.map +1 -1
  48. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.js +11 -1
  49. package/dist/src/presentation/web/app/actions/check-all-agents-status.d.ts +7 -0
  50. package/dist/src/presentation/web/app/actions/check-all-agents-status.d.ts.map +1 -0
  51. package/dist/src/presentation/web/app/actions/check-all-agents-status.js +30 -0
  52. package/dist/src/presentation/web/app/actions/create-application.d.ts +13 -0
  53. package/dist/src/presentation/web/app/actions/create-application.d.ts.map +1 -0
  54. package/dist/src/presentation/web/app/actions/create-application.js +20 -0
  55. package/dist/src/presentation/web/app/actions/create-project-and-feature.d.ts +20 -0
  56. package/dist/src/presentation/web/app/actions/create-project-and-feature.d.ts.map +1 -0
  57. package/dist/src/presentation/web/app/actions/create-project-and-feature.js +84 -0
  58. package/dist/src/presentation/web/app/actions/delete-application.d.ts +4 -0
  59. package/dist/src/presentation/web/app/actions/delete-application.d.ts.map +1 -0
  60. package/dist/src/presentation/web/app/actions/delete-application.js +16 -0
  61. package/dist/src/presentation/web/app/application/[id]/page.d.ts +11 -0
  62. package/dist/src/presentation/web/app/application/[id]/page.d.ts.map +1 -0
  63. package/dist/src/presentation/web/app/application/[id]/page.js +16 -0
  64. package/dist/src/presentation/web/app/build-graph-nodes.d.ts +3 -1
  65. package/dist/src/presentation/web/app/build-graph-nodes.d.ts.map +1 -1
  66. package/dist/src/presentation/web/app/build-graph-nodes.js +19 -0
  67. package/dist/src/presentation/web/components/common/application-node/application-node-config.d.ts +24 -0
  68. package/dist/src/presentation/web/components/common/application-node/application-node-config.d.ts.map +1 -0
  69. package/dist/src/presentation/web/components/common/application-node/application-node-config.js +1 -0
  70. package/dist/src/presentation/web/components/common/application-node/application-node.d.ts +7 -0
  71. package/dist/src/presentation/web/components/common/application-node/application-node.d.ts.map +1 -0
  72. package/dist/src/presentation/web/components/common/application-node/application-node.js +41 -0
  73. package/dist/src/presentation/web/components/common/application-node/application-node.stories.d.ts +12 -0
  74. package/dist/src/presentation/web/components/common/application-node/application-node.stories.d.ts.map +1 -0
  75. package/dist/src/presentation/web/components/common/application-node/application-node.stories.js +100 -0
  76. package/dist/src/presentation/web/components/common/attachment-chip/attachment-chip.d.ts.map +1 -1
  77. package/dist/src/presentation/web/components/common/attachment-chip/attachment-chip.js +1 -1
  78. package/dist/src/presentation/web/components/features/application-page/application-page.d.ts +8 -0
  79. package/dist/src/presentation/web/components/features/application-page/application-page.d.ts.map +1 -0
  80. package/dist/src/presentation/web/components/features/application-page/application-page.js +86 -0
  81. package/dist/src/presentation/web/components/features/application-page/application-page.stories.d.ts +9 -0
  82. package/dist/src/presentation/web/components/features/application-page/application-page.stories.d.ts.map +1 -0
  83. package/dist/src/presentation/web/components/features/application-page/application-page.stories.js +51 -0
  84. package/dist/src/presentation/web/components/features/chat/ChatSheet.d.ts.map +1 -1
  85. package/dist/src/presentation/web/components/features/chat/ChatSheet.js +4 -2
  86. package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts +5 -1
  87. package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts.map +1 -1
  88. package/dist/src/presentation/web/components/features/chat/ChatTab.js +3 -3
  89. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts +3 -1
  90. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts.map +1 -1
  91. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +181 -120
  92. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts +4 -16
  93. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts.map +1 -1
  94. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.js +16 -109
  95. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  96. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +21 -3
  97. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +4 -0
  98. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  99. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +25 -1
  100. package/dist/src/presentation/web/components/features/control-center/use-fab-actions.d.ts +2 -1
  101. package/dist/src/presentation/web/components/features/control-center/use-fab-actions.d.ts.map +1 -1
  102. package/dist/src/presentation/web/components/features/control-center/use-fab-actions.js +9 -2
  103. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.d.ts.map +1 -1
  104. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.js +2 -9
  105. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts +2 -1
  106. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  107. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +2 -0
  108. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.d.ts +3 -1
  109. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.d.ts.map +1 -1
  110. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.js +9 -4
  111. package/dist/src/presentation/web/hooks/use-graph-state.d.ts +5 -0
  112. package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -1
  113. package/dist/src/presentation/web/hooks/use-graph-state.js +37 -2
  114. package/dist/src/presentation/web/lib/derive-graph.d.ts +11 -1
  115. package/dist/src/presentation/web/lib/derive-graph.d.ts.map +1 -1
  116. package/dist/src/presentation/web/lib/derive-graph.js +35 -1
  117. package/dist/src/presentation/web/lib/layout-with-dagre.d.ts.map +1 -1
  118. package/dist/src/presentation/web/lib/layout-with-dagre.js +1 -0
  119. package/dist/translations/ar/web.json +2 -1
  120. package/dist/translations/de/web.json +2 -1
  121. package/dist/translations/en/web.json +2 -1
  122. package/dist/translations/es/web.json +2 -1
  123. package/dist/translations/fr/web.json +2 -1
  124. package/dist/translations/he/web.json +2 -1
  125. package/dist/translations/pt/web.json +2 -1
  126. package/dist/translations/ru/web.json +2 -1
  127. package/dist/translations/uk/web.json +2 -1
  128. package/dist/tsconfig.build.tsbuildinfo +1 -1
  129. package/package.json +1 -1
  130. package/web/.next/BUILD_ID +1 -1
  131. package/web/.next/app-path-routes-manifest.json +1 -0
  132. package/web/.next/build-manifest.json +2 -2
  133. package/web/.next/fallback-build-manifest.json +2 -2
  134. package/web/.next/prerender-manifest.json +3 -3
  135. package/web/.next/required-server-files.js +3 -3
  136. package/web/.next/required-server-files.json +3 -3
  137. package/web/.next/routes-manifest.json +8 -0
  138. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +96 -81
  139. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +4 -3
  140. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  141. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  142. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +92 -77
  143. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +4 -3
  144. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  145. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  146. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +98 -83
  147. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +4 -3
  148. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  149. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  150. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +114 -99
  151. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +4 -3
  152. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  153. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  154. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +114 -99
  155. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +4 -3
  156. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  157. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  158. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +94 -79
  159. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +4 -3
  160. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  161. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  162. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +94 -79
  163. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +4 -3
  164. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  165. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  166. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +92 -77
  167. package/web/.next/server/app/(dashboard)/chat/page.js +4 -3
  168. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  169. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  170. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +98 -83
  171. package/web/.next/server/app/(dashboard)/create/page.js +4 -3
  172. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  173. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  174. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +114 -99
  175. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +4 -3
  176. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  177. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  178. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +114 -99
  179. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +4 -3
  180. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  181. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  182. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +92 -77
  183. package/web/.next/server/app/(dashboard)/page.js +4 -3
  184. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  185. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  186. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +94 -79
  187. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +4 -3
  188. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  189. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  190. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +94 -79
  191. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +4 -3
  192. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  193. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  194. package/web/.next/server/app/_global-error/page.js +1 -1
  195. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  196. package/web/.next/server/app/_global-error.html +2 -2
  197. package/web/.next/server/app/_global-error.rsc +1 -1
  198. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  199. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  200. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  201. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  202. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  203. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +27 -12
  204. package/web/.next/server/app/_not-found/page.js +2 -2
  205. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  206. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  207. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  208. package/web/.next/server/app/api/attachments/upload-from-path/route.js +1 -1
  209. package/web/.next/server/app/api/attachments/upload-from-path/route.js.nft.json +1 -1
  210. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  211. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  212. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  213. package/web/.next/server/app/application/[id]/page/app-paths-manifest.json +3 -0
  214. package/web/.next/server/app/application/[id]/page/build-manifest.json +18 -0
  215. package/web/.next/server/app/application/[id]/page/next-font-manifest.json +6 -0
  216. package/web/.next/server/app/application/[id]/page/react-loadable-manifest.json +1 -0
  217. package/web/.next/server/app/application/[id]/page/server-reference-manifest.json +110 -0
  218. package/web/.next/server/app/application/[id]/page.js +18 -0
  219. package/web/.next/server/app/application/[id]/page.js.map +5 -0
  220. package/web/.next/server/app/application/[id]/page.js.nft.json +1 -0
  221. package/web/.next/server/app/application/[id]/page_client-reference-manifest.js +2 -0
  222. package/web/.next/server/app/features/page/server-reference-manifest.json +27 -12
  223. package/web/.next/server/app/features/page.js +2 -2
  224. package/web/.next/server/app/features/page.js.nft.json +1 -1
  225. package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
  226. package/web/.next/server/app/settings/page/server-reference-manifest.json +33 -18
  227. package/web/.next/server/app/settings/page.js +2 -2
  228. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  229. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  230. package/web/.next/server/app/skills/page/server-reference-manifest.json +41 -26
  231. package/web/.next/server/app/skills/page.js +2 -2
  232. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  233. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  234. package/web/.next/server/app/tools/page/server-reference-manifest.json +37 -22
  235. package/web/.next/server/app/tools/page.js +2 -2
  236. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  237. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  238. package/web/.next/server/app/version/page/server-reference-manifest.json +27 -12
  239. package/web/.next/server/app/version/page.js +2 -2
  240. package/web/.next/server/app/version/page.js.nft.json +1 -1
  241. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  242. package/web/.next/server/app-paths-manifest.json +1 -0
  243. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  244. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  245. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  246. package/web/.next/server/chunks/{[root-of-the-server]__ea653642._.js → [root-of-the-server]__a5879003._.js} +2 -2
  247. package/web/.next/server/chunks/{[root-of-the-server]__ea653642._.js.map → [root-of-the-server]__a5879003._.js.map} +1 -1
  248. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js +1 -1
  249. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -1
  250. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  251. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  252. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_17d0c3c1.js +3 -0
  253. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_17d0c3c1.js.map +1 -0
  254. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_717a531e.js +3 -0
  255. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_717a531e.js.map +1 -0
  256. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_6ed3ab8b.js +3 -0
  257. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_6ed3ab8b.js.map +1 -0
  258. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  259. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  260. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
  261. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  262. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_281e0ef8._.js +1 -1
  263. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_281e0ef8._.js.map +1 -1
  264. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_a593f310._.js +1 -1
  265. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_a593f310._.js.map +1 -1
  266. package/web/.next/server/chunks/ssr/[root-of-the-server]__00efb844._.js +4 -0
  267. package/web/.next/server/chunks/ssr/[root-of-the-server]__00efb844._.js.map +1 -0
  268. package/web/.next/server/chunks/ssr/{[root-of-the-server]__d1040bd1._.js → [root-of-the-server]__090f24cb._.js} +2 -2
  269. package/web/.next/server/chunks/ssr/{[root-of-the-server]__d1040bd1._.js.map → [root-of-the-server]__090f24cb._.js.map} +1 -1
  270. package/web/.next/server/chunks/ssr/[root-of-the-server]__0d64745d._.js +3 -0
  271. package/web/.next/server/chunks/ssr/[root-of-the-server]__0d64745d._.js.map +1 -0
  272. package/web/.next/server/chunks/ssr/[root-of-the-server]__17dadd08._.js +4 -0
  273. package/web/.next/server/chunks/ssr/[root-of-the-server]__17dadd08._.js.map +1 -0
  274. package/web/.next/server/chunks/ssr/[root-of-the-server]__1a9687c4._.js +4 -0
  275. package/web/.next/server/chunks/ssr/[root-of-the-server]__1a9687c4._.js.map +1 -0
  276. package/web/.next/server/chunks/ssr/[root-of-the-server]__28c4e836._.js +3 -0
  277. package/web/.next/server/chunks/ssr/[root-of-the-server]__28c4e836._.js.map +1 -0
  278. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  279. package/web/.next/server/chunks/ssr/[root-of-the-server]__3b7cba7e._.js +3 -0
  280. package/web/.next/server/chunks/ssr/[root-of-the-server]__3b7cba7e._.js.map +1 -0
  281. package/web/.next/server/chunks/ssr/[root-of-the-server]__540c615f._.js +2 -2
  282. package/web/.next/server/chunks/ssr/[root-of-the-server]__540c615f._.js.map +1 -1
  283. package/web/.next/server/chunks/ssr/[root-of-the-server]__63272afd._.js +4 -0
  284. package/web/.next/server/chunks/ssr/[root-of-the-server]__63272afd._.js.map +1 -0
  285. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7e2919._.js +3 -0
  286. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7e2919._.js.map +1 -0
  287. package/web/.next/server/chunks/ssr/{[root-of-the-server]__efeeaed4._.js → [root-of-the-server]__7aa484f5._.js} +2 -2
  288. package/web/.next/server/chunks/ssr/{[root-of-the-server]__efeeaed4._.js.map → [root-of-the-server]__7aa484f5._.js.map} +1 -1
  289. package/web/.next/server/chunks/ssr/[root-of-the-server]__86ff0bc5._.js +2 -2
  290. package/web/.next/server/chunks/ssr/[root-of-the-server]__86ff0bc5._.js.map +1 -1
  291. package/web/.next/server/chunks/ssr/[root-of-the-server]__964b00e8._.js +3 -0
  292. package/web/.next/server/chunks/ssr/[root-of-the-server]__964b00e8._.js.map +1 -0
  293. package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js +4 -0
  294. package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js.map +1 -0
  295. package/web/.next/server/chunks/ssr/[root-of-the-server]__df7bfd53._.js +3 -0
  296. package/web/.next/server/chunks/ssr/[root-of-the-server]__df7bfd53._.js.map +1 -0
  297. package/web/.next/server/chunks/ssr/[root-of-the-server]__f5f982ad._.js +3 -0
  298. package/web/.next/server/chunks/ssr/[root-of-the-server]__f5f982ad._.js.map +1 -0
  299. package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
  300. package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
  301. package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
  302. package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
  303. package/web/.next/server/chunks/ssr/_1879404a._.js +1 -1
  304. package/web/.next/server/chunks/ssr/_1879404a._.js.map +1 -1
  305. package/web/.next/server/chunks/ssr/_295fffde._.js.map +1 -1
  306. package/web/.next/server/chunks/ssr/_2bea8166._.js +4 -0
  307. package/web/.next/server/chunks/ssr/_2bea8166._.js.map +1 -0
  308. package/web/.next/server/chunks/ssr/_45496654._.js.map +1 -1
  309. package/web/.next/server/chunks/ssr/_46a35540._.js +3 -0
  310. package/web/.next/server/chunks/ssr/_46a35540._.js.map +1 -0
  311. package/web/.next/server/chunks/ssr/_4e42f1b7._.js +3 -0
  312. package/web/.next/server/chunks/ssr/_4e42f1b7._.js.map +1 -0
  313. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  314. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  315. package/web/.next/server/chunks/ssr/_6dff070a._.js +3 -0
  316. package/web/.next/server/chunks/ssr/_6dff070a._.js.map +1 -0
  317. package/web/.next/server/chunks/ssr/_73e62e34._.js +7 -0
  318. package/web/.next/server/chunks/ssr/_73e62e34._.js.map +1 -0
  319. package/web/.next/server/chunks/ssr/{_83e1c526._.js → _946a7fc6._.js} +3 -3
  320. package/web/.next/server/chunks/ssr/_946a7fc6._.js.map +1 -0
  321. package/web/.next/server/chunks/ssr/_b0311e50._.js +3 -0
  322. package/web/.next/server/chunks/ssr/_b0311e50._.js.map +1 -0
  323. package/web/.next/server/chunks/ssr/_b7a43c05._.js +1 -1
  324. package/web/.next/server/chunks/ssr/_b7a43c05._.js.map +1 -1
  325. package/web/.next/server/chunks/ssr/_d485d3b9._.js +3 -0
  326. package/web/.next/server/chunks/ssr/_d485d3b9._.js.map +1 -0
  327. package/web/.next/server/chunks/ssr/_f3cd7f63._.js +9 -0
  328. package/web/.next/server/chunks/ssr/_f3cd7f63._.js.map +1 -0
  329. package/web/.next/server/chunks/ssr/{_496c9117._.js → _f86fc1bf._.js} +2 -2
  330. package/web/.next/server/chunks/ssr/_f86fc1bf._.js.map +1 -0
  331. package/web/.next/server/chunks/ssr/_f8c55130._.js +1 -1
  332. package/web/.next/server/chunks/ssr/_f8c55130._.js.map +1 -1
  333. package/web/.next/server/chunks/ssr/_f916587a._.js +3 -0
  334. package/web/.next/server/chunks/ssr/_f916587a._.js.map +1 -0
  335. package/web/.next/server/chunks/ssr/{_49b9ba41._.js → _fb9934d4._.js} +2 -2
  336. package/web/.next/server/chunks/ssr/{_49b9ba41._.js.map → _fb9934d4._.js.map} +1 -1
  337. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  338. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  339. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  340. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
  341. package/web/.next/server/chunks/ssr/src_presentation_web_2478c24c._.js +3 -0
  342. package/web/.next/server/chunks/ssr/src_presentation_web_2478c24c._.js.map +1 -0
  343. package/web/.next/server/chunks/ssr/src_presentation_web_25da4cf4._.js +3 -0
  344. package/web/.next/server/chunks/ssr/src_presentation_web_25da4cf4._.js.map +1 -0
  345. package/web/.next/server/chunks/ssr/src_presentation_web_35084e19._.js +3 -0
  346. package/web/.next/server/chunks/ssr/src_presentation_web_35084e19._.js.map +1 -0
  347. package/web/.next/server/chunks/ssr/src_presentation_web_4ed08aa4._.js +3 -0
  348. package/web/.next/server/chunks/ssr/src_presentation_web_4ed08aa4._.js.map +1 -0
  349. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_5149e11b.js +3 -0
  350. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_5149e11b.js.map +1 -0
  351. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1619f987.js +3 -0
  352. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1619f987.js.map +1 -0
  353. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_1b3c83ff.js +3 -0
  354. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_1b3c83ff.js.map +1 -0
  355. package/web/.next/server/chunks/ssr/src_presentation_web_a9f3bc05._.js +3 -0
  356. package/web/.next/server/chunks/ssr/src_presentation_web_a9f3bc05._.js.map +1 -0
  357. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +32 -0
  358. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +1 -0
  359. package/web/.next/server/chunks/ssr/src_presentation_web_b360e85a._.js +3 -0
  360. package/web/.next/server/chunks/ssr/src_presentation_web_b360e85a._.js.map +1 -0
  361. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  362. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  363. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
  364. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
  365. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  366. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  367. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
  368. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
  369. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +1 -1
  370. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +1 -1
  371. package/web/.next/server/pages/500.html +2 -2
  372. package/web/.next/server/server-reference-manifest.js +1 -1
  373. package/web/.next/server/server-reference-manifest.json +898 -701
  374. package/web/.next/static/chunks/{25a0d3f50b0a26c1.js → 04b48827bdc55056.js} +1 -1
  375. package/web/.next/static/chunks/07dd0cd365169ac6.js +1 -0
  376. package/web/.next/static/chunks/0dbc8228223540f0.js +1 -0
  377. package/web/.next/static/chunks/14742749d118b339.js +1 -0
  378. package/web/.next/static/chunks/{2cc487403c107f3f.js → 48b1ee6f9460e08a.js} +2 -2
  379. package/web/.next/static/chunks/54a8ad22d3f9a857.js +3 -0
  380. package/web/.next/static/chunks/57cc43fa9970f8d7.js +1 -0
  381. package/web/.next/static/chunks/63e6ce2311b8c44f.js +7 -0
  382. package/web/.next/static/chunks/73e5026c618f964b.css +1 -0
  383. package/web/.next/static/chunks/771b8283dff48366.js +5 -0
  384. package/web/.next/static/chunks/79f687a9b9f2dca3.js +1 -0
  385. package/web/.next/static/chunks/{35bf9838f21d1818.js → 82189e222fa39768.js} +1 -1
  386. package/web/.next/static/chunks/{e167803ac69c66c7.js → 9718f0d839d204ee.js} +1 -1
  387. package/web/.next/static/chunks/994f0ac30cd8661a.js +1 -0
  388. package/web/.next/static/chunks/a9dbf887ff5ea94d.js +1 -0
  389. package/web/.next/static/chunks/afd205387569eb16.js +1 -0
  390. package/web/.next/static/chunks/b99506a6f7bc2fa8.js +1 -0
  391. package/web/.next/static/chunks/{09edd35d194bec06.js → bcbae49e0f6d65ca.js} +3 -3
  392. package/web/.next/static/chunks/{5f57f0d80d3db147.js → c5e9b56c67a4f3d4.js} +1 -1
  393. package/web/.next/static/chunks/c9bd1dea77920749.js +1 -0
  394. package/web/.next/static/chunks/ce8d4b5094c4dd62.js +1 -0
  395. package/web/.next/static/chunks/e2644573ed9ceb22.js +1 -0
  396. package/web/.next/static/chunks/{36e3d626ed8defca.js → f202967c5b0ff87f.js} +2 -2
  397. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js +0 -4
  398. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js.map +0 -1
  399. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +0 -4
  400. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +0 -1
  401. package/web/.next/server/chunks/ssr/[root-of-the-server]__22d17c66._.js +0 -3
  402. package/web/.next/server/chunks/ssr/[root-of-the-server]__22d17c66._.js.map +0 -1
  403. package/web/.next/server/chunks/ssr/[root-of-the-server]__46b10380._.js +0 -3
  404. package/web/.next/server/chunks/ssr/[root-of-the-server]__46b10380._.js.map +0 -1
  405. package/web/.next/server/chunks/ssr/[root-of-the-server]__69dd3217._.js +0 -3
  406. package/web/.next/server/chunks/ssr/[root-of-the-server]__69dd3217._.js.map +0 -1
  407. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js +0 -4
  408. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js.map +0 -1
  409. package/web/.next/server/chunks/ssr/[root-of-the-server]__8b512877._.js +0 -3
  410. package/web/.next/server/chunks/ssr/[root-of-the-server]__8b512877._.js.map +0 -1
  411. package/web/.next/server/chunks/ssr/[root-of-the-server]__990dba2d._.js +0 -3
  412. package/web/.next/server/chunks/ssr/[root-of-the-server]__990dba2d._.js.map +0 -1
  413. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +0 -4
  414. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +0 -1
  415. package/web/.next/server/chunks/ssr/[root-of-the-server]__cc9c7bbb._.js +0 -3
  416. package/web/.next/server/chunks/ssr/[root-of-the-server]__cc9c7bbb._.js.map +0 -1
  417. package/web/.next/server/chunks/ssr/_43ba79e7._.js +0 -3
  418. package/web/.next/server/chunks/ssr/_43ba79e7._.js.map +0 -1
  419. package/web/.next/server/chunks/ssr/_496c9117._.js.map +0 -1
  420. package/web/.next/server/chunks/ssr/_64efdf53._.js +0 -3
  421. package/web/.next/server/chunks/ssr/_64efdf53._.js.map +0 -1
  422. package/web/.next/server/chunks/ssr/_6abfa39e._.js +0 -3
  423. package/web/.next/server/chunks/ssr/_6abfa39e._.js.map +0 -1
  424. package/web/.next/server/chunks/ssr/_7cb0396e._.js +0 -3
  425. package/web/.next/server/chunks/ssr/_7cb0396e._.js.map +0 -1
  426. package/web/.next/server/chunks/ssr/_83e1c526._.js.map +0 -1
  427. package/web/.next/server/chunks/ssr/_d9c0a97a._.js +0 -7
  428. package/web/.next/server/chunks/ssr/_d9c0a97a._.js.map +0 -1
  429. package/web/.next/server/chunks/ssr/_e680c57c._.js +0 -9
  430. package/web/.next/server/chunks/ssr/_e680c57c._.js.map +0 -1
  431. package/web/.next/server/chunks/ssr/node_modules__pnpm_ef15a0bd._.js +0 -3
  432. package/web/.next/server/chunks/ssr/node_modules__pnpm_ef15a0bd._.js.map +0 -1
  433. package/web/.next/server/chunks/ssr/src_presentation_web_06109d28._.js +0 -5
  434. package/web/.next/server/chunks/ssr/src_presentation_web_06109d28._.js.map +0 -1
  435. package/web/.next/server/chunks/ssr/src_presentation_web_0bca70f8._.js +0 -3
  436. package/web/.next/server/chunks/ssr/src_presentation_web_0bca70f8._.js.map +0 -1
  437. package/web/.next/server/chunks/ssr/src_presentation_web_367cdbe0._.js +0 -3
  438. package/web/.next/server/chunks/ssr/src_presentation_web_367cdbe0._.js.map +0 -1
  439. package/web/.next/server/chunks/ssr/src_presentation_web_57fed7fd._.js +0 -3
  440. package/web/.next/server/chunks/ssr/src_presentation_web_57fed7fd._.js.map +0 -1
  441. package/web/.next/server/chunks/ssr/src_presentation_web_7f567f6d._.js +0 -3
  442. package/web/.next/server/chunks/ssr/src_presentation_web_7f567f6d._.js.map +0 -1
  443. package/web/.next/server/chunks/ssr/src_presentation_web_972f58d5._.js +0 -3
  444. package/web/.next/server/chunks/ssr/src_presentation_web_972f58d5._.js.map +0 -1
  445. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js +0 -3
  446. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js.map +0 -1
  447. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js +0 -3
  448. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js.map +0 -1
  449. package/web/.next/server/chunks/ssr/src_presentation_web_a71b18a2._.js +0 -3
  450. package/web/.next/server/chunks/ssr/src_presentation_web_a71b18a2._.js.map +0 -1
  451. package/web/.next/server/chunks/ssr/src_presentation_web_bebe675e._.js +0 -3
  452. package/web/.next/server/chunks/ssr/src_presentation_web_bebe675e._.js.map +0 -1
  453. package/web/.next/server/chunks/ssr/src_presentation_web_c93e8bc6._.js +0 -3
  454. package/web/.next/server/chunks/ssr/src_presentation_web_c93e8bc6._.js.map +0 -1
  455. package/web/.next/server/chunks/ssr/src_presentation_web_e729f44a._.js +0 -5
  456. package/web/.next/server/chunks/ssr/src_presentation_web_e729f44a._.js.map +0 -1
  457. package/web/.next/static/chunks/0b7251e5d717dd17.js +0 -1
  458. package/web/.next/static/chunks/0fd39d549d277843.js +0 -1
  459. package/web/.next/static/chunks/124b79a5d2a760fb.css +0 -1
  460. package/web/.next/static/chunks/4052a4971fbbac9c.js +0 -1
  461. package/web/.next/static/chunks/46e2693dbc9262fd.js +0 -5
  462. package/web/.next/static/chunks/5df9da8b40e298ee.js +0 -7
  463. package/web/.next/static/chunks/8286914ac835a1cc.js +0 -1
  464. package/web/.next/static/chunks/8777b2a0a2e85fd1.js +0 -3
  465. package/web/.next/static/chunks/8b0a9cb5109fe899.js +0 -1
  466. package/web/.next/static/chunks/971e52f3f386ccfd.js +0 -1
  467. package/web/.next/static/chunks/9e9cddf8e38342e8.js +0 -1
  468. package/web/.next/static/chunks/ac586c86d71187fc.js +0 -1
  469. package/web/.next/static/chunks/b63e6727c84f30e2.js +0 -1
  470. package/web/.next/static/chunks/c10c0d6d458453bc.js +0 -1
  471. package/web/.next/static/chunks/c6fdd161a9e5b554.js +0 -1
  472. /package/web/.next/static/{sfBZvlx-erv7S1C49vRSU → gxMya5XttXE_aSwszy4nE}/_buildManifest.js +0 -0
  473. /package/web/.next/static/{sfBZvlx-erv7S1C49vRSU → gxMya5XttXE_aSwszy4nE}/_clientMiddlewareManifest.json +0 -0
  474. /package/web/.next/static/{sfBZvlx-erv7S1C49vRSU → gxMya5XttXE_aSwszy4nE}/_ssgManifest.js +0 -0
@@ -188,6 +188,69 @@ ${!state.commitSpecs ? '- Do NOT commit the `specs/` directory — it must stay
188
188
  - Do NOT run \`git pull\`, \`git rebase\`, or \`git merge\` — this is a fresh branch, push it directly
189
189
  - If there are no changes to commit, skip the commit step and report that no changes were found`;
190
190
  }
191
+ /**
192
+ * Build a prompt for agent-based local squash merge with conflict resolution.
193
+ *
194
+ * Used as a fallback when the programmatic localMergeSquash encounters merge
195
+ * conflicts. The agent resolves conflicts using its full coding capabilities,
196
+ * then commits and cleans up.
197
+ *
198
+ * @param repositoryPath - Path to the original repository (not worktree)
199
+ * @param featureBranch - Branch to squash-merge from
200
+ * @param baseBranch - Target branch (e.g. main)
201
+ * @param commitMessage - Commit message for the squash merge commit
202
+ * @param conflictDetails - Stdout/stderr from the failed merge attempt describing the conflicts
203
+ */
204
+ export function buildLocalSquashMergePrompt(repositoryPath, featureBranch, baseBranch, commitMessage, conflictDetails) {
205
+ return `You are resolving merge conflicts for a local squash merge.
206
+
207
+ ## Context
208
+
209
+ A programmatic \`git merge --squash\` of \`${featureBranch}\` into \`${baseBranch}\` failed due to merge conflicts.
210
+ The repo has already been cleaned up (merge aborted). You need to perform the merge manually, resolving all conflicts.
211
+
212
+ ## Conflict Details
213
+
214
+ \`\`\`
215
+ ${conflictDetails}
216
+ \`\`\`
217
+
218
+ ## Working Directory
219
+
220
+ ${repositoryPath}
221
+
222
+ ## Instructions
223
+
224
+ Follow these steps EXACTLY:
225
+
226
+ 1. Make sure you are on the \`${baseBranch}\` branch:
227
+ \`git checkout ${baseBranch}\`
228
+
229
+ 2. Start the squash merge:
230
+ \`git merge --squash ${featureBranch}\`
231
+
232
+ 3. Resolve ALL merge conflicts:
233
+ - For each conflicted file, open it and resolve the conflict markers (\`<<<<<<<\`, \`=======\`, \`>>>>>>>\`)
234
+ - Choose the correct resolution by understanding what both sides intended
235
+ - For lock files (package-lock.json, yarn.lock, pnpm-lock.yaml), accept the feature branch version and regenerate if possible, or accept theirs
236
+ - For config files (.gitignore, tsconfig.json, etc.), merge both sides' additions
237
+ - Stage each resolved file: \`git add <file>\`
238
+
239
+ 4. After ALL conflicts are resolved, commit:
240
+ \`git commit -m "${commitMessage.replace(/"/g, '\\"')}"\`
241
+
242
+ 5. Delete the feature branch:
243
+ \`git branch -d ${featureBranch}\` (non-fatal if it fails)
244
+
245
+ ## Constraints
246
+
247
+ - Work in the repository at: ${repositoryPath}
248
+ - Do NOT push — this is a local-only operation
249
+ - Do NOT modify any source code beyond resolving conflicts
250
+ - Do NOT create new files
251
+ - If a conflict cannot be resolved confidently, prefer the feature branch version (theirs in squash context)
252
+ - Ensure the final commit has no conflict markers remaining`;
253
+ }
191
254
  /**
192
255
  * Build a prompt for the CI watch/fix agent call.
193
256
  *
@@ -1 +1 @@
1
- {"version":3,"file":"git-pr.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/git/git-pr.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git-pr.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/git/git-pr.service.ts"],"names":[],"mappings":"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"}
@@ -216,6 +216,27 @@ let GitPrService = class GitPrService {
216
216
  }
217
217
  async localMergeSquash(cwd, featureBranch, baseBranch, commitMessage, hasRemote = false) {
218
218
  try {
219
+ // Clean up any stale merge/rebase state and dirty index BEFORE checkout.
220
+ // A previous failed merge may have left the repo in a merge state, causing
221
+ // "you need to resolve your current index first" on checkout.
222
+ try {
223
+ await this.execFile('git', ['merge', '--abort'], { cwd });
224
+ }
225
+ catch {
226
+ // No merge in progress — expected, non-fatal
227
+ }
228
+ try {
229
+ await this.execFile('git', ['reset', '--hard', 'HEAD'], { cwd });
230
+ }
231
+ catch {
232
+ // Reset failure is non-fatal
233
+ }
234
+ try {
235
+ await this.execFile('git', ['clean', '-fd'], { cwd });
236
+ }
237
+ catch {
238
+ // Clean failure is non-fatal
239
+ }
219
240
  // Fetch latest from remote if available
220
241
  if (hasRemote) {
221
242
  try {
@@ -236,16 +257,42 @@ let GitPrService = class GitPrService {
236
257
  // Pull failure is non-fatal — proceed with local state
237
258
  }
238
259
  }
239
- // Clean untracked files that may conflict with the merge (e.g. files created
240
- // by a prior agent call that leaked into the original repo directory)
260
+ // Squash merge the feature branch.
261
+ // git merge --squash writes conflict info to STDOUT (not stderr), so the
262
+ // error.message from execFile won't contain "CONFLICT". We must check
263
+ // error.stdout to detect conflicts and include it in diagnostics.
241
264
  try {
242
- await this.execFile('git', ['clean', '-fd'], { cwd });
265
+ await this.execFile('git', ['merge', '--squash', featureBranch], { cwd });
243
266
  }
244
- catch {
245
- // Clean failure is non-fatal
267
+ catch (mergeError) {
268
+ // Abort the in-progress merge to leave the repo clean
269
+ try {
270
+ await this.execFile('git', ['merge', '--abort'], { cwd });
271
+ }
272
+ catch {
273
+ // merge --abort may fail if there's no merge in progress; non-fatal
274
+ try {
275
+ await this.execFile('git', ['reset', '--merge'], { cwd });
276
+ }
277
+ catch {
278
+ // Last-resort cleanup; non-fatal
279
+ }
280
+ }
281
+ // Check stdout for CONFLICT text (git merge --squash puts it there, not stderr)
282
+ const stdout = mergeError?.stdout ?? '';
283
+ const stderr = mergeError?.stderr ?? '';
284
+ const combined = `${stdout}\n${stderr}`;
285
+ const mergeMsg = mergeError instanceof Error ? mergeError.message : String(mergeError);
286
+ if (combined.includes('CONFLICT') ||
287
+ combined.includes('conflict') ||
288
+ mergeMsg.includes('CONFLICT') ||
289
+ mergeMsg.includes('conflict')) {
290
+ throw new GitPrError(`Merge conflict while squash-merging ${featureBranch} into ${baseBranch}: ${combined.trim()}`, GitPrErrorCode.MERGE_CONFLICT, mergeError instanceof Error ? mergeError : undefined);
291
+ }
292
+ // Include stdout in the error for better diagnostics
293
+ const detail = combined.trim() || mergeMsg;
294
+ throw new GitPrError(`Local squash merge failed: ${detail}`, GitPrErrorCode.GIT_ERROR, mergeError instanceof Error ? mergeError : undefined);
246
295
  }
247
- // Squash merge the feature branch
248
- await this.execFile('git', ['merge', '--squash', featureBranch], { cwd });
249
296
  // Commit the squash merge (skip if nothing to commit — branches may be equivalent)
250
297
  const { stdout: status } = await this.execFile('git', ['status', '--porcelain'], { cwd });
251
298
  if (status.trim().length > 0) {
@@ -274,11 +321,11 @@ let GitPrService = class GitPrService {
274
321
  }
275
322
  }
276
323
  catch (error) {
324
+ // Re-throw GitPrErrors as-is (already properly classified above)
325
+ if (error instanceof GitPrError)
326
+ throw error;
277
327
  const message = error instanceof Error ? error.message : String(error);
278
328
  const cause = error instanceof Error ? error : undefined;
279
- if (message.includes('CONFLICT') || message.includes('conflict')) {
280
- throw new GitPrError(`Merge conflict while squash-merging ${featureBranch} into ${baseBranch}: ${message}`, GitPrErrorCode.MERGE_CONFLICT, cause);
281
- }
282
329
  throw new GitPrError(`Local squash merge failed: ${message}`, GitPrErrorCode.GIT_ERROR, cause);
283
330
  }
284
331
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get-graph-data.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/(dashboard)/get-graph-data.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAE5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAI1C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAiFD,MAAM,MAAM,aAAa,GACrB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC;AA6B7B,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAAC,CA+ExF"}
1
+ {"version":3,"file":"get-graph-data.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/(dashboard)/get-graph-data.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAE5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAI1C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAiFD,MAAM,MAAM,aAAa,GACrB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC;AA6B7B,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAAC,CAyFxF"}
@@ -102,11 +102,20 @@ export async function getGraphData() {
102
102
  const listFeatures = resolve('ListFeaturesUseCase');
103
103
  const listRepos = resolve('ListRepositoriesUseCase');
104
104
  const agentRunRepo = resolve('IAgentRunRepository');
105
+ // Resolve ListApplicationsUseCase — may not be registered in older environments
106
+ let listApplications = null;
107
+ try {
108
+ listApplications = resolve('ListApplicationsUseCase');
109
+ }
110
+ catch {
111
+ // Use case not registered — skip application nodes
112
+ }
105
113
  // Always include archived features so the client has full data for instant
106
114
  // show/hide toggle without a server round-trip (NFR-3).
107
- const [features, repositories] = await Promise.all([
115
+ const [features, repositories, applications] = await Promise.all([
108
116
  listFeatures.execute({ includeArchived: true }),
109
117
  listRepos.execute(),
118
+ listApplications ? listApplications.execute() : Promise.resolve([]),
110
119
  ]);
111
120
  // Read git info from cache (zero git calls). Stale entries trigger
112
121
  // a fire-and-forget background refresh for the next poll cycle.
@@ -142,6 +151,7 @@ export async function getGraphData() {
142
151
  ciWatchEnabled: workflow.ciWatchEnabled,
143
152
  repoGitInfo: repoGitInfoMap,
144
153
  repoGitStatus: repoGitStatusMap,
154
+ applications,
145
155
  });
146
156
  // Enrich feature nodes with deployment status
147
157
  let deploymentService = null;
@@ -0,0 +1,7 @@
1
+ export type AgentInstallMap = Record<string, boolean>;
2
+ /**
3
+ * Returns a map of agentType → installed (boolean) for all known agents.
4
+ * Agents without a tool mapping (e.g. "dev") are considered installed.
5
+ */
6
+ export declare function checkAllAgentsStatus(): Promise<AgentInstallMap>;
7
+ //# sourceMappingURL=check-all-agents-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-all-agents-status.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/check-all-agents-status.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtD;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,eAAe,CAAC,CAiBrE"}
@@ -0,0 +1,30 @@
1
+ 'use server';
2
+ import { resolve } from '../../lib/server-container.js';
3
+ const AGENT_TOOL_MAP = {
4
+ 'claude-code': 'claude-code',
5
+ cursor: 'cursor-cli',
6
+ 'gemini-cli': 'gemini-cli',
7
+ 'copilot-cli': 'copilot-cli',
8
+ 'codex-cli': 'codex-cli',
9
+ };
10
+ /**
11
+ * Returns a map of agentType → installed (boolean) for all known agents.
12
+ * Agents without a tool mapping (e.g. "dev") are considered installed.
13
+ */
14
+ export async function checkAllAgentsStatus() {
15
+ try {
16
+ const useCase = resolve('ListToolsUseCase');
17
+ const tools = await useCase.execute();
18
+ const result = {};
19
+ for (const [agentType, toolId] of Object.entries(AGENT_TOOL_MAP)) {
20
+ const tool = tools.find((t) => t.id === toolId);
21
+ result[agentType] = tool?.status.status === 'available';
22
+ }
23
+ // Dev/demo agents are always "installed"
24
+ result['dev'] = true;
25
+ return result;
26
+ }
27
+ catch {
28
+ return {};
29
+ }
30
+ }
@@ -0,0 +1,13 @@
1
+ import type { Application } from '../../../../../packages/core/src/domain/generated/output.js';
2
+ interface CreateApplicationInput {
3
+ description: string;
4
+ agentType?: string;
5
+ modelOverride?: string;
6
+ }
7
+ export declare function createApplication(input: CreateApplicationInput): Promise<{
8
+ application?: Application;
9
+ repositoryPath?: string;
10
+ error?: string;
11
+ }>;
12
+ export {};
13
+ //# sourceMappingURL=create-application.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-application.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/create-application.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAExE,UAAU,sBAAsB;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC;IAAE,WAAW,CAAC,EAAE,WAAW,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiBjF"}
@@ -0,0 +1,20 @@
1
+ 'use server';
2
+ import { resolve } from '../../lib/server-container.js';
3
+ export async function createApplication(input) {
4
+ if (!input.description?.trim()) {
5
+ return { error: 'Description is required' };
6
+ }
7
+ try {
8
+ const useCase = resolve('CreateApplicationUseCase');
9
+ const result = await useCase.execute({
10
+ description: input.description.trim(),
11
+ agentType: input.agentType,
12
+ modelOverride: input.modelOverride,
13
+ });
14
+ return { application: result.application, repositoryPath: result.repositoryPath };
15
+ }
16
+ catch (error) {
17
+ const message = error instanceof Error ? error.message : 'Failed to create application';
18
+ return { error: message };
19
+ }
20
+ }
@@ -0,0 +1,20 @@
1
+ import type { Feature, Repository } from '../../../../../packages/core/src/domain/generated/output.js';
2
+ interface QuickFeatureInput {
3
+ description: string;
4
+ attachments?: {
5
+ path: string;
6
+ name: string;
7
+ notes?: string;
8
+ }[];
9
+ agentType?: string;
10
+ model?: string;
11
+ fast?: boolean;
12
+ }
13
+ export declare function createProjectAndFeature(input: QuickFeatureInput): Promise<{
14
+ feature?: Feature;
15
+ repository?: Repository;
16
+ repositoryPath?: string;
17
+ error?: string;
18
+ }>;
19
+ export {};
20
+ //# sourceMappingURL=create-project-and-feature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-project-and-feature.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/create-project-and-feature.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAGhF,UAAU,iBAAiB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA6CD,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAC/E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CA6CD"}
@@ -0,0 +1,84 @@
1
+ 'use server';
2
+ import { resolve } from '../../lib/server-container.js';
3
+ import { createFeature } from './create-feature.js';
4
+ /**
5
+ * Default project instructions prepended to the user's description.
6
+ * These ensure that even a vague one-liner from a non-technical user
7
+ * results in a well-structured, runnable React application.
8
+ */
9
+ const PROJECT_PREAMBLE = `\
10
+ ## Project Requirements
11
+
12
+ Build this as a **React application** using Vite as the build tool.
13
+
14
+ ### Structure
15
+ - Initialize with \`npm create vite@latest . -- --template react-ts\` scaffolding
16
+ - Organize code into clear folders: \`src/components/\`, \`src/pages/\`, \`src/assets/\`
17
+ - Use TypeScript throughout
18
+ - Include a working \`package.json\` with all dependencies
19
+
20
+ ### Design & UI
21
+ - Create a polished, production-quality interface — not a prototype
22
+ - Use modern CSS (CSS modules or Tailwind CSS) with thoughtful spacing, typography, and color
23
+ - Make it fully responsive (mobile-first)
24
+ - Add subtle micro-interactions: hover states, transitions, focus rings
25
+ - Use professional placeholder content (realistic text, not lorem ipsum)
26
+ - Pick a cohesive color palette and apply it consistently
27
+
28
+ ### Quality
29
+ - Every component should be self-contained and reusable
30
+ - Include proper HTML semantics and accessibility (ARIA labels, alt text, keyboard nav)
31
+ - The app must start successfully with \`npm install && npm run dev\`
32
+
33
+ ---
34
+
35
+ ## What to Build
36
+ `;
37
+ /**
38
+ * Derive a concise project name from a free-form description.
39
+ * Takes the first handful of meaningful words — `CreateProjectUseCase`
40
+ * will then slugify + cap length for the actual directory name.
41
+ */
42
+ function deriveProjectName(description) {
43
+ return description.trim().split(/\s+/).slice(0, 6).join(' ');
44
+ }
45
+ export async function createProjectAndFeature(input) {
46
+ const { description, attachments, agentType, model } = input;
47
+ if (!description?.trim()) {
48
+ return { error: 'Description is required' };
49
+ }
50
+ try {
51
+ const createProject = resolve('CreateProjectUseCase');
52
+ const projectResult = await createProject.execute({
53
+ name: deriveProjectName(description),
54
+ });
55
+ if (!projectResult.ok) {
56
+ return { error: projectResult.error };
57
+ }
58
+ const projectPath = projectResult.path;
59
+ const addRepo = resolve('AddRepositoryUseCase');
60
+ const repository = await addRepo.execute({ path: projectPath });
61
+ // Enrich the user's prompt with project-quality instructions
62
+ const enrichedDescription = PROJECT_PREAMBLE + description.trim();
63
+ const featureResult = await createFeature({
64
+ description: enrichedDescription,
65
+ repositoryPath: projectPath,
66
+ attachments,
67
+ agentType,
68
+ model,
69
+ fast: input.fast,
70
+ });
71
+ if (featureResult.error) {
72
+ return { error: featureResult.error };
73
+ }
74
+ return {
75
+ feature: featureResult.feature,
76
+ repository,
77
+ repositoryPath: projectPath,
78
+ };
79
+ }
80
+ catch (error) {
81
+ const message = error instanceof Error ? error.message : 'Failed to create project';
82
+ return { error: message };
83
+ }
84
+ }
@@ -0,0 +1,4 @@
1
+ export declare function deleteApplication(id: string): Promise<{
2
+ error?: string;
3
+ }>;
4
+ //# sourceMappingURL=delete-application.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-application.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/delete-application.ts"],"names":[],"mappings":"AAKA,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAa/E"}
@@ -0,0 +1,16 @@
1
+ 'use server';
2
+ import { resolve } from '../../lib/server-container.js';
3
+ export async function deleteApplication(id) {
4
+ if (!id?.trim()) {
5
+ return { error: 'Application ID is required' };
6
+ }
7
+ try {
8
+ const useCase = resolve('DeleteApplicationUseCase');
9
+ await useCase.execute(id);
10
+ return {};
11
+ }
12
+ catch (error) {
13
+ const message = error instanceof Error ? error.message : 'Failed to delete application';
14
+ return { error: message };
15
+ }
16
+ }
@@ -0,0 +1,11 @@
1
+ /** Skip static pre-rendering since we need runtime DI container and server context. */
2
+ export declare const dynamic = "force-dynamic";
3
+ export default function ApplicationRoute({ params, searchParams, }: {
4
+ params: Promise<{
5
+ id: string;
6
+ }>;
7
+ searchParams: Promise<{
8
+ prompt?: string;
9
+ }>;
10
+ }): Promise<import("react/jsx-runtime").JSX.Element>;
11
+ //# sourceMappingURL=page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/app/application/[id]/page.tsx"],"names":[],"mappings":"AAKA,uFAAuF;AACvF,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,wBAA8B,gBAAgB,CAAC,EAC7C,MAAM,EACN,YAAY,GACb,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChC,YAAY,EAAE,OAAO,CAAC;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5C,oDAWA"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { resolve } from '../../../lib/server-container.js';
3
+ import { notFound } from 'next/navigation';
4
+ import { ApplicationPage } from '../../../components/features/application-page/application-page.js';
5
+ /** Skip static pre-rendering since we need runtime DI container and server context. */
6
+ export const dynamic = 'force-dynamic';
7
+ export default async function ApplicationRoute({ params, searchParams, }) {
8
+ const { id } = await params;
9
+ const { prompt } = await searchParams;
10
+ const getApp = resolve('GetApplicationUseCase');
11
+ const application = await getApp.execute(id);
12
+ if (!application) {
13
+ notFound();
14
+ }
15
+ return _jsx(ApplicationPage, { application: application, initialPrompt: prompt });
16
+ }
@@ -1,4 +1,4 @@
1
- import type { Feature, Repository, AgentRun } from '../../../../packages/core/src/domain/generated/output.js';
1
+ import type { Feature, Repository, AgentRun, Application } from '../../../../packages/core/src/domain/generated/output.js';
2
2
  import type { CanvasNodeType } from '../components/features/features-canvas/index.js';
3
3
  import type { Edge } from '@xyflow/react';
4
4
  export interface FeatureWithRun {
@@ -29,6 +29,8 @@ export interface BuildGraphNodesOptions {
29
29
  }>;
30
30
  /** Git info resolution status keyed by repository path */
31
31
  repoGitStatus?: Map<string, 'loading' | 'ready' | 'not-a-repo'>;
32
+ /** Application entities to render as independent nodes */
33
+ applications?: Application[];
32
34
  }
33
35
  export declare function buildGraphNodes(repositories: Repository[], featuresWithRuns: FeatureWithRun[], options?: BuildGraphNodesOptions): {
34
36
  nodes: CanvasNodeType[];
@@ -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;AAS1F,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,MAAM,WAAW,sBAAsB;IACrC,uEAAuE;IACvE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6EAA6E;IAC7E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qEAAqE;IACrE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0FAA0F;IAC1F,WAAW,CAAC,EAAE,GAAG,CACf,MAAM,EACN;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CACzF,CAAC;IACF,0DAA0D;IAC1D,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC,CAAC;CACjE;AAED,wBAAgB,eAAe,CAC7B,YAAY,EAAE,UAAU,EAAE,EAC1B,gBAAgB,EAAE,cAAc,EAAE,EAClC,OAAO,CAAC,EAAE,sBAAsB,GAC/B;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAoG5C"}
1
+ {"version":3,"file":"build-graph-nodes.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/app/build-graph-nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,UAAU,EACV,QAAQ,EACR,WAAW,EACZ,MAAM,sCAAsC,CAAC;AAS9C,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,MAAM,WAAW,sBAAsB;IACrC,uEAAuE;IACvE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6EAA6E;IAC7E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qEAAqE;IACrE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0FAA0F;IAC1F,WAAW,CAAC,EAAE,GAAG,CACf,MAAM,EACN;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CACzF,CAAC;IACF,0DAA0D;IAC1D,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC,CAAC;IAChE,0DAA0D;IAC1D,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;CAC9B;AAED,wBAAgB,eAAe,CAC7B,YAAY,EAAE,UAAU,EAAE,EAC1B,gBAAgB,EAAE,cAAc,EAAE,EAClC,OAAO,CAAC,EAAE,sBAAsB,GAC/B;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAwH5C"}
@@ -75,6 +75,25 @@ export function buildGraphNodes(repositories, featuresWithRuns, options) {
75
75
  }
76
76
  }
77
77
  }
78
+ // Add application nodes (independent — no edges)
79
+ if (options?.applications) {
80
+ for (const app of options.applications) {
81
+ const appNodeId = `app-${app.id}`;
82
+ nodes.push({
83
+ id: appNodeId,
84
+ type: 'applicationNode',
85
+ position: { x: 0, y: 0 },
86
+ data: {
87
+ id: app.id,
88
+ name: app.name,
89
+ description: app.description,
90
+ status: app.status,
91
+ repositoryPath: normalizePath(app.repositoryPath),
92
+ additionalPathCount: app.additionalPaths?.length ?? 0,
93
+ },
94
+ });
95
+ }
96
+ }
78
97
  return { nodes, edges };
79
98
  }
80
99
  function appendFeatureNodes(repoFeatures, repoNodeId, allFeaturesWithRuns, nodes, edges, repoName, options) {
@@ -0,0 +1,24 @@
1
+ import type { Node } from '@xyflow/react';
2
+ export interface ApplicationNodeData {
3
+ [key: string]: unknown;
4
+ /** Application domain entity ID (UUID), used for delete operations */
5
+ id: string;
6
+ /** Application name */
7
+ name: string;
8
+ /** Short description of the application */
9
+ description: string;
10
+ /** Current application status */
11
+ status: string;
12
+ /** Primary repository path associated with this application */
13
+ repositoryPath: string;
14
+ /** Number of additional repository paths beyond the primary one */
15
+ additionalPathCount: number;
16
+ /** Callback when the card is clicked */
17
+ onClick?: () => void;
18
+ /** Callback when the delete button is confirmed */
19
+ onDelete?: (id: string) => void;
20
+ /** Whether to render React Flow handles for edge connections */
21
+ showHandles?: boolean;
22
+ }
23
+ export type ApplicationNodeType = Node<ApplicationNodeData, 'applicationNode'>;
24
+ //# sourceMappingURL=application-node-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-node-config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/application-node/application-node-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,WAAW,mBAAmB;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,sEAAsE;IACtE,EAAE,EAAE,MAAM,CAAC;IACX,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,cAAc,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,gEAAgE;IAChE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ApplicationNodeData } from './application-node-config.js';
2
+ export declare function ApplicationNode({ data, selected, }: {
3
+ data: ApplicationNodeData;
4
+ selected?: boolean;
5
+ [key: string]: unknown;
6
+ }): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=application-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/application-node/application-node.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAQrE,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CA4KA"}
@@ -0,0 +1,41 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useState } from 'react';
4
+ import { Handle, Position } from '@xyflow/react';
5
+ import { LayoutGrid, Trash2 } from 'lucide-react';
6
+ import { useTranslation } from 'react-i18next';
7
+ import { cn } from '../../../lib/utils.js';
8
+ import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../../ui/dialog.js';
9
+ import { Button } from '../../ui/button.js';
10
+ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../ui/tooltip.js';
11
+ const STATUS_DOT_CLASSES = {
12
+ Active: 'bg-green-500',
13
+ Error: 'bg-red-500',
14
+ };
15
+ const STATUS_DOT_DEFAULT = 'bg-muted-foreground/40';
16
+ export function ApplicationNode({ data, selected, }) {
17
+ const { i18n } = useTranslation('web');
18
+ const isRtl = i18n.dir() === 'rtl';
19
+ const targetHandlePos = isRtl ? Position.Right : Position.Left;
20
+ const sourceHandlePos = isRtl ? Position.Left : Position.Right;
21
+ const [confirmOpen, setConfirmOpen] = useState(false);
22
+ const totalRepoCount = 1 + data.additionalPathCount;
23
+ const repoCountLabel = totalRepoCount === 1 ? '1 repository' : `${totalRepoCount} repositories`;
24
+ const statusDotClass = STATUS_DOT_CLASSES[data.status] ?? STATUS_DOT_DEFAULT;
25
+ return (_jsxs("div", { className: "group relative", style: { direction: isRtl ? 'rtl' : 'ltr' }, children: [_jsx(Handle, { type: "target", position: targetHandlePos, isConnectable: false, className: "opacity-0!", style: { top: 70 } }), data.onDelete && data.id ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "absolute -start-14 top-0 bottom-0 flex items-center justify-center ps-4 pe-3 opacity-0 transition-opacity group-hover:opacity-100", onPointerDown: (e) => e.stopPropagation(), children: _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { "aria-label": "Remove application", "data-testid": "application-node-delete-button", onClick: (e) => {
26
+ e.stopPropagation();
27
+ setConfirmOpen(true);
28
+ }, className: "bg-card text-muted-foreground hover:border-destructive hover:text-destructive flex h-7 w-7 cursor-pointer items-center justify-center rounded-full border shadow-sm transition-colors", children: _jsx(Trash2, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Remove application" })] }) }) }), _jsx(Dialog, { open: confirmOpen, onOpenChange: setConfirmOpen, children: _jsxs(DialogContent, { className: "max-w-xs", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Remove application?" }), _jsxs(DialogDescription, { children: ["This will remove ", _jsx("strong", { children: data.name }), " from your workspace."] })] }), _jsxs(DialogFooter, { className: "grid grid-cols-2 gap-2 sm:flex-none", children: [_jsx(DialogClose, { asChild: true, children: _jsx(Button, { variant: "outline", children: "Cancel" }) }), _jsx(Button, { variant: "destructive", onClick: () => {
29
+ setConfirmOpen(false);
30
+ data.onDelete?.(data.id);
31
+ }, children: "Remove" })] })] }) })] })) : null, _jsxs("div", { role: "button", tabIndex: 0, "data-testid": "application-node-card", "data-app-name": data.name, onClick: (e) => {
32
+ e.stopPropagation();
33
+ data.onClick?.();
34
+ }, onKeyDown: (e) => {
35
+ if (e.key === 'Enter' || e.key === ' ') {
36
+ e.preventDefault();
37
+ e.stopPropagation();
38
+ data.onClick?.();
39
+ }
40
+ }, className: cn('nodrag bg-card flex w-[26rem] cursor-pointer flex-col overflow-hidden rounded-xl border shadow-sm transition-[border-color,box-shadow] duration-200 dark:bg-neutral-800/80', selected && 'border-blue-400 dark:border-amber-500/60'), children: [_jsxs("div", { className: "flex items-center gap-3 px-4 py-3", children: [_jsx("div", { className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-indigo-500 to-violet-500", children: _jsx(LayoutGrid, { className: "h-4 w-4 text-white" }) }), _jsx("span", { "data-testid": "application-node-name", className: "min-w-0 truncate text-sm font-medium", children: data.name }), _jsxs("span", { className: "ms-auto flex shrink-0 items-center gap-1.5", children: [_jsx("span", { "data-testid": "application-node-status-dot", className: cn('h-2 w-2 rounded-full', statusDotClass) }), _jsx("span", { "data-testid": "application-node-status-text", className: "text-muted-foreground text-xs", children: data.status })] })] }), _jsx("div", { className: "px-3 pb-2", children: _jsxs("div", { className: "bg-muted h-[120px] overflow-hidden rounded-lg", children: [_jsxs("div", { className: "flex h-6 items-center gap-2 px-2", style: { background: 'var(--muted)' }, children: [_jsx("div", { className: "bg-muted-foreground/10 h-2 w-2 rounded-full" }), _jsx("div", { className: "bg-muted-foreground/10 h-2 w-2 rounded-full" }), _jsx("div", { className: "bg-muted-foreground/10 h-2 w-2 rounded-full" }), _jsx("div", { className: "bg-muted-foreground/10 ms-2 h-2 w-16 rounded" })] }), _jsxs("div", { className: "flex h-[calc(120px-1.5rem)]", children: [_jsxs("div", { className: "border-muted-foreground/5 flex w-[50px] flex-col gap-2 border-e p-2", children: [_jsx("div", { className: "bg-muted-foreground/10 h-2 w-full rounded" }), _jsx("div", { className: "bg-muted-foreground/10 h-2 w-3/4 rounded" }), _jsx("div", { className: "bg-muted-foreground/10 h-2 w-full rounded" })] }), _jsxs("div", { className: "flex flex-1 flex-col gap-2 p-3", children: [_jsx("div", { className: "bg-muted-foreground/10 h-2.5 w-2/3 rounded" }), _jsx("div", { className: "bg-muted-foreground/10 h-2 w-full rounded" }), _jsx("div", { className: "bg-muted-foreground/10 h-2 w-5/6 rounded" }), _jsx("div", { className: "bg-muted-foreground/10 h-2 w-3/4 rounded" })] })] })] }) }), _jsx("div", { className: "px-4 pb-3", children: _jsx("span", { "data-testid": "application-node-repo-count", className: "text-muted-foreground text-xs", children: repoCountLabel }) })] }), _jsx(Handle, { type: "source", position: sourceHandlePos, isConnectable: false, className: "opacity-0!", style: { top: 70 } })] }));
41
+ }