@shepai/cli 1.175.0 → 1.175.1-pr536.17338e9

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 (457) 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 +128 -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/application/use-cases/repositories/create-project.use-case.d.ts +32 -0
  27. package/dist/packages/core/src/application/use-cases/repositories/create-project.use-case.d.ts.map +1 -0
  28. package/dist/packages/core/src/application/use-cases/repositories/create-project.use-case.js +120 -0
  29. package/dist/packages/core/src/domain/generated/output.d.ts +42 -0
  30. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  31. package/dist/packages/core/src/domain/generated/output.js +6 -0
  32. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  33. package/dist/packages/core/src/infrastructure/di/container.js +37 -0
  34. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/application.mapper.d.ts +37 -0
  35. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/application.mapper.d.ts.map +1 -0
  36. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/application.mapper.js +52 -0
  37. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-create-applications-table.d.ts +5 -0
  38. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-create-applications-table.d.ts.map +1 -0
  39. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-create-applications-table.js +34 -0
  40. package/dist/packages/core/src/infrastructure/repositories/sqlite-application.repository.d.ts +21 -0
  41. package/dist/packages/core/src/infrastructure/repositories/sqlite-application.repository.d.ts.map +1 -0
  42. package/dist/packages/core/src/infrastructure/repositories/sqlite-application.repository.js +98 -0
  43. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.d.ts.map +1 -1
  44. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.js +44 -4
  45. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +1 -1
  46. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.d.ts.map +1 -1
  47. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.js +11 -1
  48. package/dist/src/presentation/web/app/actions/check-all-agents-status.d.ts +7 -0
  49. package/dist/src/presentation/web/app/actions/check-all-agents-status.d.ts.map +1 -0
  50. package/dist/src/presentation/web/app/actions/check-all-agents-status.js +30 -0
  51. package/dist/src/presentation/web/app/actions/create-application.d.ts +13 -0
  52. package/dist/src/presentation/web/app/actions/create-application.d.ts.map +1 -0
  53. package/dist/src/presentation/web/app/actions/create-application.js +20 -0
  54. package/dist/src/presentation/web/app/actions/create-project-and-feature.d.ts +20 -0
  55. package/dist/src/presentation/web/app/actions/create-project-and-feature.d.ts.map +1 -0
  56. package/dist/src/presentation/web/app/actions/create-project-and-feature.js +70 -0
  57. package/dist/src/presentation/web/app/actions/delete-application.d.ts +4 -0
  58. package/dist/src/presentation/web/app/actions/delete-application.d.ts.map +1 -0
  59. package/dist/src/presentation/web/app/actions/delete-application.js +16 -0
  60. package/dist/src/presentation/web/app/application/[id]/page.d.ts +11 -0
  61. package/dist/src/presentation/web/app/application/[id]/page.d.ts.map +1 -0
  62. package/dist/src/presentation/web/app/application/[id]/page.js +16 -0
  63. package/dist/src/presentation/web/app/build-graph-nodes.d.ts +3 -1
  64. package/dist/src/presentation/web/app/build-graph-nodes.d.ts.map +1 -1
  65. package/dist/src/presentation/web/app/build-graph-nodes.js +19 -0
  66. package/dist/src/presentation/web/components/common/application-node/application-node-config.d.ts +24 -0
  67. package/dist/src/presentation/web/components/common/application-node/application-node-config.d.ts.map +1 -0
  68. package/dist/src/presentation/web/components/common/application-node/application-node-config.js +1 -0
  69. package/dist/src/presentation/web/components/common/application-node/application-node.d.ts +7 -0
  70. package/dist/src/presentation/web/components/common/application-node/application-node.d.ts.map +1 -0
  71. package/dist/src/presentation/web/components/common/application-node/application-node.js +41 -0
  72. package/dist/src/presentation/web/components/common/application-node/application-node.stories.d.ts +12 -0
  73. package/dist/src/presentation/web/components/common/application-node/application-node.stories.d.ts.map +1 -0
  74. package/dist/src/presentation/web/components/common/application-node/application-node.stories.js +100 -0
  75. package/dist/src/presentation/web/components/common/attachment-chip/attachment-chip.d.ts.map +1 -1
  76. package/dist/src/presentation/web/components/common/attachment-chip/attachment-chip.js +1 -1
  77. package/dist/src/presentation/web/components/features/application-page/application-page.d.ts +8 -0
  78. package/dist/src/presentation/web/components/features/application-page/application-page.d.ts.map +1 -0
  79. package/dist/src/presentation/web/components/features/application-page/application-page.js +86 -0
  80. package/dist/src/presentation/web/components/features/application-page/application-page.stories.d.ts +9 -0
  81. package/dist/src/presentation/web/components/features/application-page/application-page.stories.d.ts.map +1 -0
  82. package/dist/src/presentation/web/components/features/application-page/application-page.stories.js +51 -0
  83. package/dist/src/presentation/web/components/features/chat/ChatSheet.d.ts.map +1 -1
  84. package/dist/src/presentation/web/components/features/chat/ChatSheet.js +4 -2
  85. package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts +5 -1
  86. package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts.map +1 -1
  87. package/dist/src/presentation/web/components/features/chat/ChatTab.js +3 -3
  88. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts +3 -1
  89. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts.map +1 -1
  90. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +189 -118
  91. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts +4 -16
  92. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts.map +1 -1
  93. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.js +16 -109
  94. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  95. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +43 -3
  96. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +4 -0
  97. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  98. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +25 -1
  99. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.d.ts.map +1 -1
  100. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.js +2 -2
  101. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts +2 -1
  102. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  103. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +2 -0
  104. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.d.ts +3 -1
  105. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.d.ts.map +1 -1
  106. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.js +9 -4
  107. package/dist/src/presentation/web/hooks/use-graph-state.d.ts +5 -0
  108. package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -1
  109. package/dist/src/presentation/web/hooks/use-graph-state.js +37 -2
  110. package/dist/src/presentation/web/lib/derive-graph.d.ts +11 -1
  111. package/dist/src/presentation/web/lib/derive-graph.d.ts.map +1 -1
  112. package/dist/src/presentation/web/lib/derive-graph.js +35 -1
  113. package/dist/src/presentation/web/lib/layout-with-dagre.d.ts.map +1 -1
  114. package/dist/src/presentation/web/lib/layout-with-dagre.js +1 -0
  115. package/dist/translations/ar/web.json +6 -1
  116. package/dist/translations/de/web.json +6 -1
  117. package/dist/translations/en/web.json +6 -1
  118. package/dist/translations/es/web.json +6 -1
  119. package/dist/translations/fr/web.json +6 -1
  120. package/dist/translations/he/web.json +6 -1
  121. package/dist/translations/pt/web.json +6 -1
  122. package/dist/translations/ru/web.json +6 -1
  123. package/dist/tsconfig.build.tsbuildinfo +1 -1
  124. package/package.json +1 -1
  125. package/web/.next/BUILD_ID +1 -1
  126. package/web/.next/app-path-routes-manifest.json +1 -0
  127. package/web/.next/build-manifest.json +2 -2
  128. package/web/.next/fallback-build-manifest.json +2 -2
  129. package/web/.next/prerender-manifest.json +3 -3
  130. package/web/.next/required-server-files.js +3 -3
  131. package/web/.next/required-server-files.json +3 -3
  132. package/web/.next/routes-manifest.json +8 -0
  133. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +94 -79
  134. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +3 -3
  135. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  136. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  137. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +90 -75
  138. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +3 -3
  139. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  140. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  141. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +96 -81
  142. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +3 -3
  143. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  144. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  145. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +112 -97
  146. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +3 -3
  147. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  148. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  149. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +112 -97
  150. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +3 -3
  151. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  152. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  153. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +92 -77
  154. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +3 -3
  155. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  156. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  157. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +92 -77
  158. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +3 -3
  159. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  160. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  161. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +90 -75
  162. package/web/.next/server/app/(dashboard)/chat/page.js +3 -3
  163. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  164. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  165. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +96 -81
  166. package/web/.next/server/app/(dashboard)/create/page.js +3 -3
  167. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  168. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  169. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +112 -97
  170. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +3 -3
  171. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  172. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  173. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +112 -97
  174. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +3 -3
  175. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  176. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  177. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +90 -75
  178. package/web/.next/server/app/(dashboard)/page.js +3 -3
  179. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  180. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  181. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +92 -77
  182. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +3 -3
  183. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  184. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  185. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +92 -77
  186. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +3 -3
  187. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  188. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  189. package/web/.next/server/app/_global-error/page.js +1 -1
  190. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  191. package/web/.next/server/app/_global-error.html +2 -2
  192. package/web/.next/server/app/_global-error.rsc +1 -1
  193. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  194. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  195. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  196. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  197. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  198. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +27 -12
  199. package/web/.next/server/app/_not-found/page.js +2 -2
  200. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  201. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  202. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  203. package/web/.next/server/app/api/attachments/upload-from-path/route.js +1 -1
  204. package/web/.next/server/app/api/attachments/upload-from-path/route.js.nft.json +1 -1
  205. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  206. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  207. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  208. package/web/.next/server/app/application/[id]/page/app-paths-manifest.json +3 -0
  209. package/web/.next/server/app/application/[id]/page/build-manifest.json +18 -0
  210. package/web/.next/server/app/application/[id]/page/next-font-manifest.json +6 -0
  211. package/web/.next/server/app/application/[id]/page/react-loadable-manifest.json +1 -0
  212. package/web/.next/server/app/application/[id]/page/server-reference-manifest.json +110 -0
  213. package/web/.next/server/app/application/[id]/page.js +18 -0
  214. package/web/.next/server/app/application/[id]/page.js.map +5 -0
  215. package/web/.next/server/app/application/[id]/page.js.nft.json +1 -0
  216. package/web/.next/server/app/application/[id]/page_client-reference-manifest.js +2 -0
  217. package/web/.next/server/app/features/page/server-reference-manifest.json +27 -12
  218. package/web/.next/server/app/features/page.js +2 -2
  219. package/web/.next/server/app/features/page.js.nft.json +1 -1
  220. package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
  221. package/web/.next/server/app/settings/page/server-reference-manifest.json +33 -18
  222. package/web/.next/server/app/settings/page.js +2 -2
  223. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  224. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  225. package/web/.next/server/app/skills/page/server-reference-manifest.json +41 -26
  226. package/web/.next/server/app/skills/page.js +2 -2
  227. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  228. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  229. package/web/.next/server/app/tools/page/server-reference-manifest.json +37 -22
  230. package/web/.next/server/app/tools/page.js +2 -2
  231. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  232. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  233. package/web/.next/server/app/version/page/server-reference-manifest.json +27 -12
  234. package/web/.next/server/app/version/page.js +2 -2
  235. package/web/.next/server/app/version/page.js.nft.json +1 -1
  236. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  237. package/web/.next/server/app-paths-manifest.json +1 -0
  238. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  239. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  240. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  241. package/web/.next/server/chunks/{[root-of-the-server]__ea653642._.js → [root-of-the-server]__a5879003._.js} +2 -2
  242. package/web/.next/server/chunks/{[root-of-the-server]__ea653642._.js.map → [root-of-the-server]__a5879003._.js.map} +1 -1
  243. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js +1 -1
  244. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -1
  245. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  246. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  247. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_c4b92435.js +3 -0
  248. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_c4b92435.js.map +1 -0
  249. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_e4478080.js +3 -0
  250. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_e4478080.js.map +1 -0
  251. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_9b144ef8.js +3 -0
  252. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_9b144ef8.js.map +1 -0
  253. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  254. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  255. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
  256. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  257. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_281e0ef8._.js +1 -1
  258. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_281e0ef8._.js.map +1 -1
  259. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_a593f310._.js +1 -1
  260. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_a593f310._.js.map +1 -1
  261. package/web/.next/server/chunks/ssr/[root-of-the-server]__00efb844._.js +4 -0
  262. package/web/.next/server/chunks/ssr/[root-of-the-server]__00efb844._.js.map +1 -0
  263. package/web/.next/server/chunks/ssr/{[root-of-the-server]__d1040bd1._.js → [root-of-the-server]__090f24cb._.js} +2 -2
  264. package/web/.next/server/chunks/ssr/{[root-of-the-server]__d1040bd1._.js.map → [root-of-the-server]__090f24cb._.js.map} +1 -1
  265. package/web/.next/server/chunks/ssr/[root-of-the-server]__0d64745d._.js +3 -0
  266. package/web/.next/server/chunks/ssr/[root-of-the-server]__0d64745d._.js.map +1 -0
  267. package/web/.next/server/chunks/ssr/[root-of-the-server]__17dadd08._.js +4 -0
  268. package/web/.next/server/chunks/ssr/[root-of-the-server]__17dadd08._.js.map +1 -0
  269. package/web/.next/server/chunks/ssr/[root-of-the-server]__1a9687c4._.js +4 -0
  270. package/web/.next/server/chunks/ssr/[root-of-the-server]__1a9687c4._.js.map +1 -0
  271. package/web/.next/server/chunks/ssr/{[root-of-the-server]__51ec77a8._.js → [root-of-the-server]__234748ae._.js} +2 -2
  272. package/web/.next/server/chunks/ssr/{[root-of-the-server]__aa72e794._.js.map → [root-of-the-server]__234748ae._.js.map} +1 -1
  273. package/web/.next/server/chunks/ssr/[root-of-the-server]__23b5ca2c._.js +1 -1
  274. package/web/.next/server/chunks/ssr/{[root-of-the-server]__66047a1b._.js → [root-of-the-server]__2a2005ad._.js} +2 -2
  275. package/web/.next/server/chunks/ssr/{[root-of-the-server]__a932cd3a._.js.map → [root-of-the-server]__2a2005ad._.js.map} +1 -1
  276. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  277. package/web/.next/server/chunks/ssr/{[root-of-the-server]__22d17c66._.js → [root-of-the-server]__3a6d2b30._.js} +2 -2
  278. package/web/.next/server/chunks/ssr/[root-of-the-server]__3a6d2b30._.js.map +1 -0
  279. package/web/.next/server/chunks/ssr/[root-of-the-server]__540c615f._.js +2 -2
  280. package/web/.next/server/chunks/ssr/[root-of-the-server]__540c615f._.js.map +1 -1
  281. package/web/.next/server/chunks/ssr/{[root-of-the-server]__a932cd3a._.js → [root-of-the-server]__5d481a91._.js} +2 -2
  282. package/web/.next/server/chunks/ssr/{[root-of-the-server]__51ec77a8._.js.map → [root-of-the-server]__5d481a91._.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]__7528eb6f._.js +1 -1
  288. package/web/.next/server/chunks/ssr/{[root-of-the-server]__efeeaed4._.js → [root-of-the-server]__7aa484f5._.js} +2 -2
  289. package/web/.next/server/chunks/ssr/{[root-of-the-server]__efeeaed4._.js.map → [root-of-the-server]__7aa484f5._.js.map} +1 -1
  290. package/web/.next/server/chunks/ssr/[root-of-the-server]__86ff0bc5._.js +2 -2
  291. package/web/.next/server/chunks/ssr/[root-of-the-server]__86ff0bc5._.js.map +1 -1
  292. package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js +4 -0
  293. package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js.map +1 -0
  294. package/web/.next/server/chunks/ssr/{[root-of-the-server]__aa72e794._.js → [root-of-the-server]__e7504e4a._.js} +2 -2
  295. package/web/.next/server/chunks/ssr/{[root-of-the-server]__66047a1b._.js.map → [root-of-the-server]__e7504e4a._.js.map} +1 -1
  296. package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
  297. package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
  298. package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
  299. package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
  300. package/web/.next/server/chunks/ssr/_1879404a._.js +1 -1
  301. package/web/.next/server/chunks/ssr/_1879404a._.js.map +1 -1
  302. package/web/.next/server/chunks/ssr/_295fffde._.js.map +1 -1
  303. package/web/.next/server/chunks/ssr/_2bea8166._.js +4 -0
  304. package/web/.next/server/chunks/ssr/_2bea8166._.js.map +1 -0
  305. package/web/.next/server/chunks/ssr/_45496654._.js.map +1 -1
  306. package/web/.next/server/chunks/ssr/_46a35540._.js +3 -0
  307. package/web/.next/server/chunks/ssr/_46a35540._.js.map +1 -0
  308. package/web/.next/server/chunks/ssr/_4e42f1b7._.js +3 -0
  309. package/web/.next/server/chunks/ssr/_4e42f1b7._.js.map +1 -0
  310. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  311. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  312. package/web/.next/server/chunks/ssr/_6f66d7ac._.js +3 -0
  313. package/web/.next/server/chunks/ssr/_6f66d7ac._.js.map +1 -0
  314. package/web/.next/server/chunks/ssr/_73e62e34._.js +7 -0
  315. package/web/.next/server/chunks/ssr/_73e62e34._.js.map +1 -0
  316. package/web/.next/server/chunks/ssr/{_af6b8b94._.js → _946a7fc6._.js} +3 -3
  317. package/web/.next/server/chunks/ssr/_946a7fc6._.js.map +1 -0
  318. package/web/.next/server/chunks/ssr/{_e0dd6fcf._.js → _a0ddd745._.js} +2 -2
  319. package/web/.next/server/chunks/ssr/{_e0dd6fcf._.js.map → _a0ddd745._.js.map} +1 -1
  320. package/web/.next/server/chunks/ssr/_b0311e50._.js +3 -0
  321. package/web/.next/server/chunks/ssr/_b0311e50._.js.map +1 -0
  322. package/web/.next/server/chunks/ssr/_b7a43c05._.js +1 -1
  323. package/web/.next/server/chunks/ssr/_b7a43c05._.js.map +1 -1
  324. package/web/.next/server/chunks/ssr/_d485d3b9._.js +3 -0
  325. package/web/.next/server/chunks/ssr/_d485d3b9._.js.map +1 -0
  326. package/web/.next/server/chunks/ssr/_f3cd7f63._.js +9 -0
  327. package/web/.next/server/chunks/ssr/_f3cd7f63._.js.map +1 -0
  328. package/web/.next/server/chunks/ssr/{_4cbb7f95._.js → _f86fc1bf._.js} +2 -2
  329. package/web/.next/server/chunks/ssr/_f86fc1bf._.js.map +1 -0
  330. package/web/.next/server/chunks/ssr/_f8c55130._.js +1 -1
  331. package/web/.next/server/chunks/ssr/_f8c55130._.js.map +1 -1
  332. package/web/.next/server/chunks/ssr/_f916587a._.js +3 -0
  333. package/web/.next/server/chunks/ssr/_f916587a._.js.map +1 -0
  334. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  335. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  336. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  337. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
  338. package/web/.next/server/chunks/ssr/src_presentation_web_139547d4._.js +3 -0
  339. package/web/.next/server/chunks/ssr/src_presentation_web_139547d4._.js.map +1 -0
  340. package/web/.next/server/chunks/ssr/src_presentation_web_5b7ef96a._.js +3 -0
  341. package/web/.next/server/chunks/ssr/{src_presentation_web_807cba76._.js.map → src_presentation_web_5b7ef96a._.js.map} +1 -1
  342. package/web/.next/server/chunks/ssr/src_presentation_web_5f6f6651._.js +3 -0
  343. package/web/.next/server/chunks/ssr/src_presentation_web_5f6f6651._.js.map +1 -0
  344. package/web/.next/server/chunks/ssr/src_presentation_web_9cd4b94c._.js +3 -0
  345. package/web/.next/server/chunks/ssr/{src_presentation_web_e3a30e30._.js.map → src_presentation_web_9cd4b94c._.js.map} +1 -1
  346. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_bc9fae39.js +3 -0
  347. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_bc9fae39.js.map +1 -0
  348. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1619f987.js +3 -0
  349. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1619f987.js.map +1 -0
  350. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_1b3c83ff.js +3 -0
  351. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_1b3c83ff.js.map +1 -0
  352. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +30 -1
  353. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +1 -1
  354. package/web/.next/server/chunks/ssr/src_presentation_web_b3759f18._.js +3 -0
  355. package/web/.next/server/chunks/ssr/{src_presentation_web_17d39233._.js.map → src_presentation_web_b3759f18._.js.map} +1 -1
  356. package/web/.next/server/chunks/ssr/src_presentation_web_bceeb973._.js +3 -0
  357. package/web/.next/server/chunks/ssr/{src_presentation_web_e1cd1869._.js.map → src_presentation_web_bceeb973._.js.map} +1 -1
  358. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  359. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  360. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
  361. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
  362. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  363. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  364. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
  365. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
  366. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +1 -1
  367. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +1 -1
  368. package/web/.next/server/pages/500.html +2 -2
  369. package/web/.next/server/server-reference-manifest.js +1 -1
  370. package/web/.next/server/server-reference-manifest.json +883 -686
  371. package/web/.next/static/chunks/0dbc8228223540f0.js +1 -0
  372. package/web/.next/static/chunks/2090882dcaad5f8f.js +3 -0
  373. package/web/.next/static/chunks/{238fdbed09dc61b6.js → 288a6a7b2abf36ae.js} +2 -2
  374. package/web/.next/static/chunks/357c3d4c713a444b.js +1 -0
  375. package/web/.next/static/chunks/{39054eabee156e55.js → 39cd2f842b9377e5.js} +3 -3
  376. package/web/.next/static/chunks/{873e837cd1179cdd.js → 4b63765a2c9294db.js} +1 -1
  377. package/web/.next/static/chunks/67499ef845dda801.js +1 -0
  378. package/web/.next/static/chunks/{940c842293a6ee9b.js → 6a5b9181d2b5160c.js} +1 -1
  379. package/web/.next/static/chunks/771b8283dff48366.js +5 -0
  380. package/web/.next/static/chunks/79f687a9b9f2dca3.js +1 -0
  381. package/web/.next/static/chunks/7acc65394c377946.js +1 -0
  382. package/web/.next/static/chunks/{bc41a393614b1192.js → 89a6fefe537cca64.js} +1 -1
  383. package/web/.next/static/chunks/8da227cb5d5c25b1.js +7 -0
  384. package/web/.next/static/chunks/90cce661ba250a41.js +1 -0
  385. package/web/.next/static/chunks/{a22ee308ae1509ca.js → 97a84c58c17399ee.js} +1 -1
  386. package/web/.next/static/chunks/994f0ac30cd8661a.js +1 -0
  387. package/web/.next/static/chunks/{09edd35d194bec06.js → bcbae49e0f6d65ca.js} +3 -3
  388. package/web/.next/static/chunks/bdd3467bb34c2b76.css +1 -0
  389. package/web/.next/static/chunks/bf5da7f887552cca.js +1 -0
  390. package/web/.next/static/chunks/c9bd1dea77920749.js +1 -0
  391. package/web/.next/static/chunks/ce8d4b5094c4dd62.js +1 -0
  392. package/web/.next/static/chunks/d2f65dc6c7e99186.js +1 -0
  393. package/web/.next/static/chunks/{2ad924f5ba5ec0a6.js → e9ab2deb269fa340.js} +1 -1
  394. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js +0 -3
  395. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js.map +0 -1
  396. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js +0 -3
  397. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js.map +0 -1
  398. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js +0 -3
  399. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js.map +0 -1
  400. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js +0 -4
  401. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js.map +0 -1
  402. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +0 -4
  403. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +0 -1
  404. package/web/.next/server/chunks/ssr/[root-of-the-server]__22d17c66._.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]__b7b96453._.js +0 -4
  410. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +0 -1
  411. package/web/.next/server/chunks/ssr/_2b021b35._.js +0 -3
  412. package/web/.next/server/chunks/ssr/_2b021b35._.js.map +0 -1
  413. package/web/.next/server/chunks/ssr/_43ba79e7._.js +0 -3
  414. package/web/.next/server/chunks/ssr/_43ba79e7._.js.map +0 -1
  415. package/web/.next/server/chunks/ssr/_4cbb7f95._.js.map +0 -1
  416. package/web/.next/server/chunks/ssr/_6abfa39e._.js +0 -3
  417. package/web/.next/server/chunks/ssr/_6abfa39e._.js.map +0 -1
  418. package/web/.next/server/chunks/ssr/_7cb0396e._.js +0 -3
  419. package/web/.next/server/chunks/ssr/_7cb0396e._.js.map +0 -1
  420. package/web/.next/server/chunks/ssr/_af6b8b94._.js.map +0 -1
  421. package/web/.next/server/chunks/ssr/_d9c0a97a._.js +0 -7
  422. package/web/.next/server/chunks/ssr/_d9c0a97a._.js.map +0 -1
  423. package/web/.next/server/chunks/ssr/_e680c57c._.js +0 -9
  424. package/web/.next/server/chunks/ssr/_e680c57c._.js.map +0 -1
  425. package/web/.next/server/chunks/ssr/node_modules__pnpm_ef15a0bd._.js +0 -3
  426. package/web/.next/server/chunks/ssr/node_modules__pnpm_ef15a0bd._.js.map +0 -1
  427. package/web/.next/server/chunks/ssr/src_presentation_web_17d39233._.js +0 -3
  428. package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js +0 -5
  429. package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js.map +0 -1
  430. package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js +0 -5
  431. package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js.map +0 -1
  432. package/web/.next/server/chunks/ssr/src_presentation_web_807cba76._.js +0 -3
  433. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js +0 -3
  434. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js.map +0 -1
  435. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js +0 -3
  436. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js.map +0 -1
  437. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js +0 -3
  438. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js.map +0 -1
  439. package/web/.next/server/chunks/ssr/src_presentation_web_e1cd1869._.js +0 -3
  440. package/web/.next/server/chunks/ssr/src_presentation_web_e3a30e30._.js +0 -3
  441. package/web/.next/static/chunks/0b07ee72b0c639ef.js +0 -7
  442. package/web/.next/static/chunks/1b336d1266a0aa3d.js +0 -1
  443. package/web/.next/static/chunks/28f6b1cab38ab025.js +0 -3
  444. package/web/.next/static/chunks/46e2693dbc9262fd.js +0 -5
  445. package/web/.next/static/chunks/8b0a9cb5109fe899.js +0 -1
  446. package/web/.next/static/chunks/971e52f3f386ccfd.js +0 -1
  447. package/web/.next/static/chunks/a20f2d6f76f469b7.css +0 -1
  448. package/web/.next/static/chunks/b2aa69e4b0b032d9.js +0 -1
  449. package/web/.next/static/chunks/b63e6727c84f30e2.js +0 -1
  450. package/web/.next/static/chunks/b65e555419a0c664.js +0 -1
  451. package/web/.next/static/chunks/b7b5d65a5dd2fff1.js +0 -1
  452. package/web/.next/static/chunks/ba0e0fa2d1a650bb.js +0 -1
  453. package/web/.next/static/chunks/c10c0d6d458453bc.js +0 -1
  454. package/web/.next/static/chunks/d26542df5ecc8717.js +0 -1
  455. /package/web/.next/static/{9rcv3ICw0kZNuv3TVdO8E → GfIqHvmVtZCXK5PAbtkQf}/_buildManifest.js +0 -0
  456. /package/web/.next/static/{9rcv3ICw0kZNuv3TVdO8E → GfIqHvmVtZCXK5PAbtkQf}/_clientMiddlewareManifest.json +0 -0
  457. /package/web/.next/static/{9rcv3ICw0kZNuv3TVdO8E → GfIqHvmVtZCXK5PAbtkQf}/_ssgManifest.js +0 -0
@@ -0,0 +1,98 @@
1
+ /**
2
+ * SQLite Application Repository Implementation
3
+ *
4
+ * Implements IApplicationRepository using better-sqlite3.
5
+ */
6
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
7
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
8
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
9
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
10
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
11
+ };
12
+ var __metadata = (this && this.__metadata) || function (k, v) {
13
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
14
+ };
15
+ import { injectable } from 'tsyringe';
16
+ import { toDatabase, fromDatabase, } from '../persistence/sqlite/mappers/application.mapper.js';
17
+ let SQLiteApplicationRepository = class SQLiteApplicationRepository {
18
+ db;
19
+ constructor(db) {
20
+ this.db = db;
21
+ }
22
+ async create(application) {
23
+ const row = toDatabase(application);
24
+ const stmt = this.db.prepare(`
25
+ INSERT INTO applications (
26
+ id, name, slug, description, repository_path, additional_paths,
27
+ agent_type, model_override, status, created_at, updated_at, deleted_at
28
+ ) VALUES (
29
+ @id, @name, @slug, @description, @repository_path, @additional_paths,
30
+ @agent_type, @model_override, @status, @created_at, @updated_at, @deleted_at
31
+ )
32
+ `);
33
+ stmt.run(row);
34
+ }
35
+ async findById(id) {
36
+ const stmt = this.db.prepare('SELECT * FROM applications WHERE id = ? AND deleted_at IS NULL');
37
+ const row = stmt.get(id);
38
+ return row ? fromDatabase(row) : null;
39
+ }
40
+ async findBySlug(slug) {
41
+ const stmt = this.db.prepare('SELECT * FROM applications WHERE slug = ? AND deleted_at IS NULL');
42
+ const row = stmt.get(slug);
43
+ return row ? fromDatabase(row) : null;
44
+ }
45
+ async findByPath(path) {
46
+ const stmt = this.db.prepare("SELECT * FROM applications WHERE REPLACE(repository_path, '\\', '/') = ? AND deleted_at IS NULL");
47
+ const row = stmt.get(path.replace(/\\/g, '/'));
48
+ return row ? fromDatabase(row) : null;
49
+ }
50
+ async list() {
51
+ const stmt = this.db.prepare('SELECT * FROM applications WHERE deleted_at IS NULL ORDER BY created_at ASC');
52
+ const rows = stmt.all();
53
+ return rows.map(fromDatabase);
54
+ }
55
+ async update(id, fields) {
56
+ const now = Date.now();
57
+ const setClauses = ['updated_at = ?'];
58
+ const values = [now];
59
+ if (fields.name !== undefined) {
60
+ setClauses.push('name = ?');
61
+ values.push(fields.name);
62
+ }
63
+ if (fields.status !== undefined) {
64
+ setClauses.push('status = ?');
65
+ values.push(fields.status);
66
+ }
67
+ if (fields.additionalPaths !== undefined) {
68
+ setClauses.push('additional_paths = ?');
69
+ values.push(JSON.stringify(fields.additionalPaths));
70
+ }
71
+ if (fields.agentType !== undefined) {
72
+ setClauses.push('agent_type = ?');
73
+ values.push(fields.agentType);
74
+ }
75
+ if (fields.modelOverride !== undefined) {
76
+ setClauses.push('model_override = ?');
77
+ values.push(fields.modelOverride);
78
+ }
79
+ values.push(id);
80
+ const stmt = this.db.prepare(`UPDATE applications SET ${setClauses.join(', ')} WHERE id = ? AND deleted_at IS NULL`);
81
+ stmt.run(...values);
82
+ }
83
+ async softDelete(id) {
84
+ const now = Date.now();
85
+ const stmt = this.db.prepare('UPDATE applications SET deleted_at = ?, updated_at = ? WHERE id = ?');
86
+ stmt.run(now, now, id);
87
+ }
88
+ async restore(id) {
89
+ const now = Date.now();
90
+ const stmt = this.db.prepare('UPDATE applications SET deleted_at = NULL, updated_at = ? WHERE id = ?');
91
+ stmt.run(now, id);
92
+ }
93
+ };
94
+ SQLiteApplicationRepository = __decorate([
95
+ injectable(),
96
+ __metadata("design:paramtypes", [Object])
97
+ ], SQLiteApplicationRepository);
98
+ export { SQLiteApplicationRepository };
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code-interactive-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAOH,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACvB,6BAA6B,EAI9B,MAAM,wFAAwF,CAAC;AAgBhG,qBAAa,6BAA8B,YAAW,yBAAyB;IACvE,aAAa,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAOvF,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,6BAA6B,CAAC;IAOzC;;;;;;OAMG;IACH,OAAO,CAAC,OAAO;IAmBf,OAAO,CAAC,eAAe;IAgDvB,OAAO,CAAC,WAAW;IAqCnB;;;;;;OAMG;YACY,SAAS;IA6BxB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,aAAa;CA4PtB"}
1
+ {"version":3,"file":"claude-code-interactive-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAOH,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACvB,6BAA6B,EAI9B,MAAM,wFAAwF,CAAC;AAsDhG,qBAAa,6BAA8B,YAAW,yBAAyB;IACvE,aAAa,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAOvF,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,6BAA6B,CAAC;IAOzC;;;;;;OAMG;IACH,OAAO,CAAC,OAAO;IAmBf,OAAO,CAAC,eAAe;IAmDvB,OAAO,CAAC,WAAW;IAqCnB;;;;;;OAMG;YACY,SAAS;IA6BxB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,aAAa;CA4PtB"}
@@ -39,6 +39,43 @@
39
39
  import { unstable_v2_createSession, unstable_v2_resumeSession, } from '@anthropic-ai/claude-agent-sdk';
40
40
  /** Default model used when options.model is not specified. */
41
41
  const DEFAULT_MODEL = 'claude-sonnet-4-6';
42
+ /**
43
+ * All standard Claude Code tool names to auto-allow without permission prompts.
44
+ *
45
+ * The V2 SDK API hardcodes `allowDangerouslySkipPermissions: false`, so
46
+ * `permissionMode: 'bypassPermissions'` does not work. Instead, V2 provides
47
+ * `allowedTools` to pre-approve tools at the CLI level — no callback needed.
48
+ *
49
+ * AskUserQuestion is intentionally excluded: it is intercepted by the
50
+ * `canUseTool` callback so the session service can pause the stream and
51
+ * collect user answers before resuming.
52
+ */
53
+ const AUTO_ALLOWED_TOOLS = [
54
+ 'Bash',
55
+ 'Read',
56
+ 'Write',
57
+ 'Edit',
58
+ 'Glob',
59
+ 'Grep',
60
+ 'LS',
61
+ 'Agent',
62
+ 'WebFetch',
63
+ 'WebSearch',
64
+ 'NotebookEdit',
65
+ 'NotebookRead',
66
+ 'TodoWrite',
67
+ 'TaskCreate',
68
+ 'TaskGet',
69
+ 'TaskList',
70
+ 'TaskUpdate',
71
+ 'TaskOutput',
72
+ 'TaskStop',
73
+ 'EnterPlanMode',
74
+ 'ExitPlanMode',
75
+ 'SendMessage',
76
+ 'KillShell',
77
+ 'LSP',
78
+ ];
42
79
  /**
43
80
  * Process-level mutex for process.chdir().
44
81
  *
@@ -113,10 +150,13 @@ export class ClaudeCodeInteractiveExecutor {
113
150
  : undefined;
114
151
  return {
115
152
  model: options.model ?? DEFAULT_MODEL,
116
- // When onUserQuestion is provided, use canUseTool to intercept AskUserQuestion
117
- // while auto-allowing everything else (replaces bypassPermissions).
118
- // When not provided, use bypassPermissions for backward compatibility.
119
- ...(canUseTool ? { canUseTool } : { permissionMode: 'bypassPermissions' }),
153
+ // Auto-allow all standard tools at the CLI level. This replaces the V1
154
+ // bypassPermissions approach V2 hardcodes allowDangerouslySkipPermissions
155
+ // to false, so bypassPermissions silently falls back to default mode.
156
+ allowedTools: AUTO_ALLOWED_TOOLS,
157
+ // When onUserQuestion is provided, use canUseTool to intercept
158
+ // AskUserQuestion while auto-allowing any unlisted tools as a fallback.
159
+ ...(canUseTool ? { canUseTool } : {}),
120
160
  env: cleanEnv,
121
161
  // Forward system prompt using preset+append pattern
122
162
  ...(options.systemPrompt && {
@@ -89,7 +89,7 @@ export declare function createFeatureAgentGraph(depsOrExecutor: FeatureAgentGrap
89
89
  ciFixAttempts?: number | undefined;
90
90
  ciFixHistory?: import("../../../../domain/index.js").CiFixRecord[] | undefined;
91
91
  ciFixStatus?: "success" | "timeout" | "idle" | "watching" | "fixing" | "exhausted" | undefined;
92
- }, "plan" | "implement" | "__start__" | "analyze" | "requirements" | "research" | "validate_spec_analyze" | "validate_spec_requirements" | "validate_research" | "validate_plan_tasks" | "repair_spec_analyze" | "repair_spec_requirements" | "repair_research" | "repair_plan_tasks", {
92
+ }, "implement" | "__start__" | "analyze" | "requirements" | "research" | "plan" | "validate_spec_analyze" | "validate_spec_requirements" | "validate_research" | "validate_plan_tasks" | "repair_spec_analyze" | "repair_spec_requirements" | "repair_research" | "repair_plan_tasks", {
93
93
  featureId: {
94
94
  (): import("@langchain/langgraph").LastValue<string>;
95
95
  (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
@@ -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":"AAIA,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;AAoCD,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,CAsCD"}
@@ -0,0 +1,70 @@
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
+ export async function createProjectAndFeature(input) {
38
+ const { description, attachments, agentType, model } = input;
39
+ if (!description?.trim()) {
40
+ return { error: 'Description is required' };
41
+ }
42
+ try {
43
+ const createProject = resolve('CreateProjectUseCase');
44
+ const { repository, projectPath } = await createProject.execute({
45
+ description: description.trim(),
46
+ });
47
+ // Enrich the user's prompt with project-quality instructions
48
+ const enrichedDescription = PROJECT_PREAMBLE + description.trim();
49
+ const featureResult = await createFeature({
50
+ description: enrichedDescription,
51
+ repositoryPath: projectPath,
52
+ attachments,
53
+ agentType,
54
+ model,
55
+ fast: input.fast,
56
+ });
57
+ if (featureResult.error) {
58
+ return { error: featureResult.error };
59
+ }
60
+ return {
61
+ feature: featureResult.feature,
62
+ repository,
63
+ repositoryPath: projectPath,
64
+ };
65
+ }
66
+ catch (error) {
67
+ const message = error instanceof Error ? error.message : 'Failed to create project';
68
+ return { error: message };
69
+ }
70
+ }
@@ -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
+ }
@@ -0,0 +1,12 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import type { ApplicationNodeData } from './application-node-config.js';
3
+ declare const meta: Meta<ApplicationNodeData>;
4
+ export default meta;
5
+ type Story = StoryObj<ApplicationNodeData>;
6
+ export declare const Default: Story;
7
+ export declare const Active: Story;
8
+ export declare const Error: Story;
9
+ export declare const WithDeleteButton: Story;
10
+ export declare const LongName: Story;
11
+ export declare const Multiple: Story;
12
+ //# sourceMappingURL=application-node.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-node.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/application-node/application-node.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,KAAK,EAAE,mBAAmB,EAAuB,MAAM,2BAA2B,CAAC;AAgC1F,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAcnC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AAE3C,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAKpB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAKnB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAQ9B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAqCF,eAAO,MAAM,QAAQ,EAAE,KAwBtB,CAAC"}