@shepai/cli 1.182.1 → 1.183.0

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 (519) hide show
  1. package/apis/json-schema/Application.yaml +7 -0
  2. package/dist/packages/core/src/application/ports/output/repositories/application-repository.interface.d.ts +1 -1
  3. package/dist/packages/core/src/application/ports/output/repositories/application-repository.interface.d.ts.map +1 -1
  4. package/dist/packages/core/src/application/use-cases/applications/create-application.use-case.d.ts +3 -3
  5. package/dist/packages/core/src/application/use-cases/applications/create-application.use-case.d.ts.map +1 -1
  6. package/dist/packages/core/src/application/use-cases/applications/create-application.use-case.js +13 -21
  7. package/dist/packages/core/src/application/use-cases/applications/list-applications.use-case.d.ts +19 -3
  8. package/dist/packages/core/src/application/use-cases/applications/list-applications.use-case.d.ts.map +1 -1
  9. package/dist/packages/core/src/application/use-cases/applications/list-applications.use-case.js +37 -4
  10. package/dist/packages/core/src/application/use-cases/applications/resume-application-workflow.use-case.d.ts +30 -0
  11. package/dist/packages/core/src/application/use-cases/applications/resume-application-workflow.use-case.d.ts.map +1 -0
  12. package/dist/packages/core/src/application/use-cases/applications/resume-application-workflow.use-case.js +122 -0
  13. package/dist/packages/core/src/domain/generated/output.d.ts +8 -0
  14. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  15. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  16. package/dist/packages/core/src/infrastructure/di/container.js +5 -0
  17. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/application.mapper.d.ts +2 -0
  18. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/application.mapper.d.ts.map +1 -1
  19. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/application.mapper.js +4 -0
  20. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/058-add-setup-complete-to-applications.d.ts +5 -0
  21. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/058-add-setup-complete-to-applications.d.ts.map +1 -0
  22. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/058-add-setup-complete-to-applications.js +10 -0
  23. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/059-add-agent-session-id-to-applications.d.ts +5 -0
  24. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/059-add-agent-session-id-to-applications.d.ts.map +1 -0
  25. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/059-add-agent-session-id-to-applications.js +10 -0
  26. package/dist/packages/core/src/infrastructure/repositories/sqlite-application.repository.d.ts +1 -1
  27. package/dist/packages/core/src/infrastructure/repositories/sqlite-application.repository.d.ts.map +1 -1
  28. package/dist/packages/core/src/infrastructure/repositories/sqlite-application.repository.js +10 -2
  29. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  30. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +4 -1
  31. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/fast-implement.prompt.d.ts.map +1 -1
  32. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/fast-implement.prompt.js +4 -1
  33. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.d.ts.map +1 -1
  34. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.js +4 -1
  35. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.d.ts.map +1 -1
  36. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.js +11 -6
  37. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/pr-branding.d.ts +2 -2
  38. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/pr-branding.d.ts.map +1 -1
  39. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/pr-branding.js +2 -2
  40. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
  41. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +3 -2
  42. package/dist/packages/core/src/infrastructure/services/git/pr-branding.d.ts +16 -5
  43. package/dist/packages/core/src/infrastructure/services/git/pr-branding.d.ts.map +1 -1
  44. package/dist/packages/core/src/infrastructure/services/git/pr-branding.js +38 -7
  45. package/dist/src/presentation/web/app/api/applications/[id]/resume/route.d.ts +20 -0
  46. package/dist/src/presentation/web/app/api/applications/[id]/resume/route.d.ts.map +1 -0
  47. package/dist/src/presentation/web/app/api/applications/[id]/resume/route.js +25 -0
  48. package/dist/src/presentation/web/app/api/applications/[id]/route.d.ts +19 -0
  49. package/dist/src/presentation/web/app/api/applications/[id]/route.d.ts.map +1 -0
  50. package/dist/src/presentation/web/app/api/applications/[id]/route.js +46 -0
  51. package/dist/src/presentation/web/app/api/applications/route.d.ts +9 -0
  52. package/dist/src/presentation/web/app/api/applications/route.d.ts.map +1 -0
  53. package/dist/src/presentation/web/app/api/applications/route.js +20 -0
  54. package/dist/src/presentation/web/app/application/[id]/page.d.ts +4 -4
  55. package/dist/src/presentation/web/app/application/[id]/page.d.ts.map +1 -1
  56. package/dist/src/presentation/web/app/application/[id]/page.js +2 -61
  57. package/dist/src/presentation/web/app/applications/page.d.ts +2 -0
  58. package/dist/src/presentation/web/app/applications/page.d.ts.map +1 -0
  59. package/dist/src/presentation/web/app/applications/page.js +5 -0
  60. package/dist/src/presentation/web/components/assistant-ui/thread.js +2 -2
  61. package/dist/src/presentation/web/components/common/application-node/application-node.d.ts.map +1 -1
  62. package/dist/src/presentation/web/components/common/application-node/application-node.js +3 -37
  63. package/dist/src/presentation/web/components/features/application-page/application-page-loader.d.ts +4 -0
  64. package/dist/src/presentation/web/components/features/application-page/application-page-loader.d.ts.map +1 -0
  65. package/dist/src/presentation/web/components/features/application-page/application-page-loader.js +47 -0
  66. package/dist/src/presentation/web/components/features/application-page/application-page.d.ts.map +1 -1
  67. package/dist/src/presentation/web/components/features/application-page/application-page.js +75 -54
  68. package/dist/src/presentation/web/components/features/application-page/application-page.stories.d.ts.map +1 -1
  69. package/dist/src/presentation/web/components/features/application-page/application-page.stories.js +1 -0
  70. package/dist/src/presentation/web/components/features/application-page/run-dev-button.d.ts +3 -1
  71. package/dist/src/presentation/web/components/features/application-page/run-dev-button.d.ts.map +1 -1
  72. package/dist/src/presentation/web/components/features/application-page/run-dev-button.js +6 -2
  73. package/dist/src/presentation/web/components/features/applications/application-card.d.ts +7 -0
  74. package/dist/src/presentation/web/components/features/applications/application-card.d.ts.map +1 -0
  75. package/dist/src/presentation/web/components/features/applications/application-card.js +82 -0
  76. package/dist/src/presentation/web/components/features/applications/application-card.stories.d.ts +13 -0
  77. package/dist/src/presentation/web/components/features/applications/application-card.stories.d.ts.map +1 -0
  78. package/dist/src/presentation/web/components/features/applications/application-card.stories.js +69 -0
  79. package/dist/src/presentation/web/components/features/applications/applications-page-client.d.ts +5 -0
  80. package/dist/src/presentation/web/components/features/applications/applications-page-client.d.ts.map +1 -0
  81. package/dist/src/presentation/web/components/features/applications/applications-page-client.js +28 -0
  82. package/dist/src/presentation/web/components/features/applications/applications-page-client.stories.d.ts +10 -0
  83. package/dist/src/presentation/web/components/features/applications/applications-page-client.stories.d.ts.map +1 -0
  84. package/dist/src/presentation/web/components/features/applications/applications-page-client.stories.js +93 -0
  85. package/dist/src/presentation/web/components/features/chat/ChatComposer.d.ts +3 -1
  86. package/dist/src/presentation/web/components/features/chat/ChatComposer.d.ts.map +1 -1
  87. package/dist/src/presentation/web/components/features/chat/ChatComposer.js +2 -2
  88. package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts +3 -1
  89. package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts.map +1 -1
  90. package/dist/src/presentation/web/components/features/chat/ChatTab.js +4 -3
  91. package/dist/src/presentation/web/components/features/chat/StepTracker.d.ts +6 -1
  92. package/dist/src/presentation/web/components/features/chat/StepTracker.d.ts.map +1 -1
  93. package/dist/src/presentation/web/components/features/chat/StepTracker.js +23 -20
  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 +3 -2
  96. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts +3 -1
  97. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  98. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +2 -2
  99. package/dist/src/presentation/web/components/features/settings/language-settings-section.d.ts.map +1 -1
  100. package/dist/src/presentation/web/components/features/settings/language-settings-section.js +1 -0
  101. package/dist/src/presentation/web/components/features/settings/language-settings-section.stories.d.ts +1 -0
  102. package/dist/src/presentation/web/components/features/settings/language-settings-section.stories.d.ts.map +1 -1
  103. package/dist/src/presentation/web/components/features/settings/language-settings-section.stories.js +5 -0
  104. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  105. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +23 -3
  106. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
  107. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
  108. package/dist/src/presentation/web/lib/derive-app-status.d.ts +23 -0
  109. package/dist/src/presentation/web/lib/derive-app-status.d.ts.map +1 -0
  110. package/dist/src/presentation/web/lib/derive-app-status.js +89 -0
  111. package/dist/src/presentation/web/lib/i18n.d.ts.map +1 -1
  112. package/dist/src/presentation/web/lib/i18n.js +3 -0
  113. package/dist/translations/ar/web.json +2 -1
  114. package/dist/translations/de/web.json +2 -1
  115. package/dist/translations/en/web.json +2 -1
  116. package/dist/translations/es/web.json +2 -1
  117. package/dist/translations/fr/web.json +2 -1
  118. package/dist/translations/he/web.json +2 -1
  119. package/dist/translations/pt/web.json +2 -1
  120. package/dist/translations/ru/web.json +2 -1
  121. package/dist/translations/uk/web.json +2 -1
  122. package/dist/tsconfig.build.tsbuildinfo +1 -1
  123. package/package.json +1 -1
  124. package/web/.next/BUILD_ID +1 -1
  125. package/web/.next/app-path-routes-manifest.json +4 -0
  126. package/web/.next/build-manifest.json +2 -2
  127. package/web/.next/fallback-build-manifest.json +2 -2
  128. package/web/.next/prerender-manifest.json +3 -3
  129. package/web/.next/required-server-files.js +2 -2
  130. package/web/.next/required-server-files.json +2 -2
  131. package/web/.next/routes-manifest.json +28 -0
  132. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +32 -32
  133. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +5 -5
  134. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  135. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  136. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +30 -30
  137. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +5 -5
  138. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  139. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  140. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +33 -33
  141. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +5 -5
  142. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  143. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  144. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +41 -41
  145. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +5 -5
  146. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  147. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  148. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +41 -41
  149. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +5 -5
  150. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  151. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  152. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +31 -31
  153. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +5 -5
  154. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  155. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  156. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +31 -31
  157. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +5 -5
  158. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  159. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  160. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +30 -30
  161. package/web/.next/server/app/(dashboard)/chat/page.js +5 -5
  162. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  163. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  164. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +33 -33
  165. package/web/.next/server/app/(dashboard)/create/page.js +5 -5
  166. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  167. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  168. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +41 -41
  169. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +5 -5
  170. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  171. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  172. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +41 -41
  173. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +5 -5
  174. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  175. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  176. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +30 -30
  177. package/web/.next/server/app/(dashboard)/page.js +5 -5
  178. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  179. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  180. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +31 -31
  181. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +5 -5
  182. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  183. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  184. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +31 -31
  185. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +5 -5
  186. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  187. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  188. package/web/.next/server/app/_global-error/page.js +1 -1
  189. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  190. package/web/.next/server/app/_global-error.html +2 -2
  191. package/web/.next/server/app/_global-error.rsc +1 -1
  192. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  193. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  194. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  195. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  196. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  197. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +7 -7
  198. package/web/.next/server/app/_not-found/page.js +1 -1
  199. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  200. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  201. package/web/.next/server/app/api/applications/[id]/resume/route/app-paths-manifest.json +3 -0
  202. package/web/.next/server/app/api/applications/[id]/resume/route/build-manifest.json +11 -0
  203. package/web/.next/server/app/api/applications/[id]/resume/route/server-reference-manifest.json +4 -0
  204. package/web/.next/server/app/api/applications/[id]/resume/route.js +7 -0
  205. package/web/.next/server/app/api/applications/[id]/resume/route.js.map +5 -0
  206. package/web/.next/server/app/api/applications/[id]/resume/route.js.nft.json +1 -0
  207. package/web/.next/server/app/api/applications/[id]/resume/route_client-reference-manifest.js +2 -0
  208. package/web/.next/server/app/api/applications/[id]/route/app-paths-manifest.json +3 -0
  209. package/web/.next/server/app/api/applications/[id]/route/build-manifest.json +11 -0
  210. package/web/.next/server/app/api/applications/[id]/route/server-reference-manifest.json +4 -0
  211. package/web/.next/server/app/api/applications/[id]/route.js +7 -0
  212. package/web/.next/server/app/api/applications/[id]/route.js.map +5 -0
  213. package/web/.next/server/app/api/applications/[id]/route.js.nft.json +1 -0
  214. package/web/.next/server/app/api/applications/[id]/route_client-reference-manifest.js +2 -0
  215. package/web/.next/server/app/api/applications/route/app-paths-manifest.json +3 -0
  216. package/web/.next/server/app/api/applications/route/build-manifest.json +11 -0
  217. package/web/.next/server/app/api/applications/route/server-reference-manifest.json +4 -0
  218. package/web/.next/server/app/api/applications/route.js +7 -0
  219. package/web/.next/server/app/api/applications/route.js.map +5 -0
  220. package/web/.next/server/app/api/applications/route.js.nft.json +1 -0
  221. package/web/.next/server/app/api/applications/route_client-reference-manifest.js +2 -0
  222. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  223. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  224. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  225. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  226. package/web/.next/server/app/application/[id]/page/server-reference-manifest.json +45 -30
  227. package/web/.next/server/app/application/[id]/page.js +3 -3
  228. package/web/.next/server/app/application/[id]/page.js.nft.json +1 -1
  229. package/web/.next/server/app/application/[id]/page_client-reference-manifest.js +1 -1
  230. package/web/.next/server/app/applications/page/app-paths-manifest.json +3 -0
  231. package/web/.next/server/app/applications/page/build-manifest.json +18 -0
  232. package/web/.next/server/app/applications/page/next-font-manifest.json +6 -0
  233. package/web/.next/server/app/applications/page/react-loadable-manifest.json +1 -0
  234. package/web/.next/server/app/applications/page/server-reference-manifest.json +230 -0
  235. package/web/.next/server/app/applications/page.js +19 -0
  236. package/web/.next/server/app/applications/page.js.map +5 -0
  237. package/web/.next/server/app/applications/page.js.nft.json +1 -0
  238. package/web/.next/server/app/applications/page_client-reference-manifest.js +2 -0
  239. package/web/.next/server/app/features/page/server-reference-manifest.json +7 -7
  240. package/web/.next/server/app/features/page.js +1 -1
  241. package/web/.next/server/app/features/page.js.nft.json +1 -1
  242. package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
  243. package/web/.next/server/app/settings/page/server-reference-manifest.json +10 -10
  244. package/web/.next/server/app/settings/page.js +1 -1
  245. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  246. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  247. package/web/.next/server/app/skills/page/server-reference-manifest.json +15 -15
  248. package/web/.next/server/app/skills/page.js +1 -1
  249. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  250. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  251. package/web/.next/server/app/tools/page/server-reference-manifest.json +13 -13
  252. package/web/.next/server/app/tools/page.js +1 -1
  253. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  254. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  255. package/web/.next/server/app/version/page/server-reference-manifest.json +7 -7
  256. package/web/.next/server/app/version/page.js +1 -1
  257. package/web/.next/server/app/version/page.js.nft.json +1 -1
  258. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  259. package/web/.next/server/app-paths-manifest.json +4 -0
  260. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_applications_[id]_route_actions_e31b426d.js +3 -0
  261. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_applications_[id]_route_actions_e31b426d.js.map +1 -0
  262. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_applications_route_actions_2b7d20d0.js +3 -0
  263. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_applications_route_actions_2b7d20d0.js.map +1 -0
  264. package/web/.next/server/chunks/[root-of-the-server]__3bb635e8._.js +3 -0
  265. package/web/.next/server/chunks/[root-of-the-server]__3bb635e8._.js.map +1 -0
  266. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  267. package/web/.next/server/chunks/[root-of-the-server]__ac0027b4._.js +3 -0
  268. package/web/.next/server/chunks/[root-of-the-server]__ac0027b4._.js.map +1 -0
  269. package/web/.next/server/chunks/[root-of-the-server]__b2a4bfcc._.js.map +1 -1
  270. package/web/.next/server/chunks/[root-of-the-server]__c8f90b29._.js +1 -1
  271. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  272. package/web/.next/server/chunks/[root-of-the-server]__ce82df38._.js +3 -0
  273. package/web/.next/server/chunks/[root-of-the-server]__ce82df38._.js.map +1 -0
  274. package/web/.next/server/chunks/f3a1f__next-internal_server_app_api_applications_[id]_resume_route_actions_3a66d646.js +3 -0
  275. package/web/.next/server/chunks/f3a1f__next-internal_server_app_api_applications_[id]_resume_route_actions_3a66d646.js.map +1 -0
  276. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4f9eef62.js +3 -0
  277. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4f9eef62.js.map +1 -0
  278. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_ffa16a22.js +3 -0
  279. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_ffa16a22.js.map +1 -0
  280. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_a1a998f9.js +3 -0
  281. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_a1a998f9.js.map +1 -0
  282. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  283. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  284. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
  285. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  286. package/web/.next/server/chunks/ssr/744ca_web_components_features_applications_applications-page-client_tsx_d0db9938._.js +3 -0
  287. package/web/.next/server/chunks/ssr/744ca_web_components_features_applications_applications-page-client_tsx_d0db9938._.js.map +1 -0
  288. package/web/.next/server/chunks/ssr/[root-of-the-server]__04f4895b._.js +3 -0
  289. package/web/.next/server/chunks/ssr/[root-of-the-server]__04f4895b._.js.map +1 -0
  290. package/web/.next/server/chunks/ssr/[root-of-the-server]__17dadd08._.js +1 -1
  291. package/web/.next/server/chunks/ssr/[root-of-the-server]__17dadd08._.js.map +1 -1
  292. package/web/.next/server/chunks/ssr/[root-of-the-server]__1925bef0._.js +1 -1
  293. package/web/.next/server/chunks/ssr/[root-of-the-server]__1a9687c4._.js +1 -1
  294. package/web/.next/server/chunks/ssr/[root-of-the-server]__1a9687c4._.js.map +1 -1
  295. package/web/.next/server/chunks/ssr/[root-of-the-server]__347fd0f6._.js +3 -0
  296. package/web/.next/server/chunks/ssr/[root-of-the-server]__347fd0f6._.js.map +1 -0
  297. package/web/.next/server/chunks/ssr/[root-of-the-server]__46dd2baf._.js +3 -0
  298. package/web/.next/server/chunks/ssr/[root-of-the-server]__46dd2baf._.js.map +1 -0
  299. package/web/.next/server/chunks/ssr/[root-of-the-server]__4ee8be85._.js +1 -1
  300. package/web/.next/server/chunks/ssr/[root-of-the-server]__73cb4ff6._.js +3 -0
  301. package/web/.next/server/chunks/ssr/[root-of-the-server]__73cb4ff6._.js.map +1 -0
  302. package/web/.next/server/chunks/ssr/{[root-of-the-server]__87bc4dac._.js → [root-of-the-server]__86ff0bc5._.js} +3 -3
  303. package/web/.next/server/chunks/ssr/[root-of-the-server]__86ff0bc5._.js.map +1 -0
  304. package/web/.next/server/chunks/ssr/[root-of-the-server]__91c50abe._.js +3 -0
  305. package/web/.next/server/chunks/ssr/[root-of-the-server]__91c50abe._.js.map +1 -0
  306. package/web/.next/server/chunks/ssr/[root-of-the-server]__a48af49f._.js +3 -0
  307. package/web/.next/server/chunks/ssr/[root-of-the-server]__a48af49f._.js.map +1 -0
  308. package/web/.next/server/chunks/ssr/[root-of-the-server]__bb391c45._.js +1 -1
  309. package/web/.next/server/chunks/ssr/[root-of-the-server]__bb391c45._.js.map +1 -1
  310. package/web/.next/server/chunks/ssr/[root-of-the-server]__d5e22d1a._.js +3 -0
  311. package/web/.next/server/chunks/ssr/{[root-of-the-server]__7aa484f5._.js.map → [root-of-the-server]__d5e22d1a._.js.map} +1 -1
  312. package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js +1 -1
  313. package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js.map +1 -1
  314. package/web/.next/server/chunks/ssr/[root-of-the-server]__e0aa2bcb._.js +3 -0
  315. package/web/.next/server/chunks/ssr/[root-of-the-server]__e0aa2bcb._.js.map +1 -0
  316. package/web/.next/server/chunks/ssr/[root-of-the-server]__e265da61._.js +1 -1
  317. package/web/.next/server/chunks/ssr/[root-of-the-server]__ef0b8905._.js +12 -0
  318. package/web/.next/server/chunks/ssr/[root-of-the-server]__ef0b8905._.js.map +1 -0
  319. package/web/.next/server/chunks/ssr/[root-of-the-server]__f5614810._.js +3 -0
  320. package/web/.next/server/chunks/ssr/{[root-of-the-server]__090f24cb._.js.map → [root-of-the-server]__f5614810._.js.map} +1 -1
  321. package/web/.next/server/chunks/ssr/[root-of-the-server]__fe5db6b2._.js +3 -0
  322. package/web/.next/server/chunks/ssr/[root-of-the-server]__fe5db6b2._.js.map +1 -0
  323. package/web/.next/server/chunks/ssr/_037e85c7._.js +3 -0
  324. package/web/.next/server/chunks/ssr/_037e85c7._.js.map +1 -0
  325. package/web/.next/server/chunks/ssr/{_774cbf7d._.js → _133ae3de._.js} +2 -2
  326. package/web/.next/server/chunks/ssr/{_774cbf7d._.js.map → _133ae3de._.js.map} +1 -1
  327. package/web/.next/server/chunks/ssr/_1879404a._.js +1 -1
  328. package/web/.next/server/chunks/ssr/_1879404a._.js.map +1 -1
  329. package/web/.next/server/chunks/ssr/_295fffde._.js.map +1 -1
  330. package/web/.next/server/chunks/ssr/_29b8ed64._.js +3 -0
  331. package/web/.next/server/chunks/ssr/_29b8ed64._.js.map +1 -0
  332. package/web/.next/server/chunks/ssr/_2bc302d1._.js +3 -0
  333. package/web/.next/server/chunks/ssr/_2bc302d1._.js.map +1 -0
  334. package/web/.next/server/chunks/ssr/_35294e79._.js +3 -0
  335. package/web/.next/server/chunks/ssr/_35294e79._.js.map +1 -0
  336. package/web/.next/server/chunks/ssr/_3683083e._.js +3 -0
  337. package/web/.next/server/chunks/ssr/_3683083e._.js.map +1 -0
  338. package/web/.next/server/chunks/ssr/_45496654._.js.map +1 -1
  339. package/web/.next/server/chunks/ssr/_4b57bcc3._.js +9 -0
  340. package/web/.next/server/chunks/ssr/_4b57bcc3._.js.map +1 -0
  341. package/web/.next/server/chunks/ssr/_519d77a9._.js +3 -0
  342. package/web/.next/server/chunks/ssr/_519d77a9._.js.map +1 -0
  343. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  344. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  345. package/web/.next/server/chunks/ssr/_82db03fd._.js +3 -0
  346. package/web/.next/server/chunks/ssr/_82db03fd._.js.map +1 -0
  347. package/web/.next/server/chunks/ssr/_8c3086bf._.js +3 -0
  348. package/web/.next/server/chunks/ssr/_8c3086bf._.js.map +1 -0
  349. package/web/.next/server/chunks/ssr/_9173e475._.js +21 -0
  350. package/web/.next/server/chunks/ssr/_9173e475._.js.map +1 -0
  351. package/web/.next/server/chunks/ssr/_946a7fc6._.js +1 -1
  352. package/web/.next/server/chunks/ssr/_946a7fc6._.js.map +1 -1
  353. package/web/.next/server/chunks/ssr/{_81e7a131._.js → _a08047ef._.js} +2 -2
  354. package/web/.next/server/chunks/ssr/_a08047ef._.js.map +1 -0
  355. package/web/.next/server/chunks/ssr/_bc03ac82._.js +4 -0
  356. package/web/.next/server/chunks/ssr/_bc03ac82._.js.map +1 -0
  357. package/web/.next/server/chunks/ssr/_d4c0792b._.js +3 -0
  358. package/web/.next/server/chunks/ssr/_d4c0792b._.js.map +1 -0
  359. package/web/.next/server/chunks/ssr/_e61d032d._.js +3 -0
  360. package/web/.next/server/chunks/ssr/_e61d032d._.js.map +1 -0
  361. package/web/.next/server/chunks/ssr/_e65abbd1._.js +3 -0
  362. package/web/.next/server/chunks/ssr/_e65abbd1._.js.map +1 -0
  363. package/web/.next/server/chunks/ssr/_f86fc1bf._.js +1 -1
  364. package/web/.next/server/chunks/ssr/_f86fc1bf._.js.map +1 -1
  365. package/web/.next/server/chunks/ssr/_f8c55130._.js +1 -1
  366. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  367. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  368. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  369. package/web/.next/server/chunks/ssr/node_modules__pnpm_28a53b5d._.js +3 -0
  370. package/web/.next/server/chunks/ssr/node_modules__pnpm_28a53b5d._.js.map +1 -0
  371. package/web/.next/server/chunks/ssr/src_presentation_web_47181610._.js +3 -0
  372. package/web/.next/server/chunks/ssr/src_presentation_web_47181610._.js.map +1 -0
  373. package/web/.next/server/chunks/ssr/src_presentation_web_5d3f4199._.js +3 -0
  374. package/web/.next/server/chunks/ssr/src_presentation_web_5d3f4199._.js.map +1 -0
  375. package/web/.next/server/chunks/ssr/src_presentation_web_6159fef8._.js +1 -1
  376. package/web/.next/server/chunks/ssr/src_presentation_web_6159fef8._.js.map +1 -1
  377. package/web/.next/server/chunks/ssr/src_presentation_web_61d96ba8._.js +3 -0
  378. package/web/.next/server/chunks/ssr/src_presentation_web_61d96ba8._.js.map +1 -0
  379. package/web/.next/server/chunks/ssr/src_presentation_web_6994959a._.js +3 -0
  380. package/web/.next/server/chunks/ssr/src_presentation_web_6994959a._.js.map +1 -0
  381. package/web/.next/server/chunks/ssr/src_presentation_web_77dadf68._.js +32 -0
  382. package/web/.next/server/chunks/ssr/src_presentation_web_77dadf68._.js.map +1 -0
  383. package/web/.next/server/chunks/ssr/src_presentation_web_9a543843._.js +3 -0
  384. package/web/.next/server/chunks/ssr/src_presentation_web_9a543843._.js.map +1 -0
  385. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_c3f6f57e.js +3 -0
  386. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_c3f6f57e.js.map +1 -0
  387. package/web/.next/server/chunks/ssr/src_presentation_web_ad42cc73._.js +1 -1
  388. package/web/.next/server/chunks/ssr/src_presentation_web_ad42cc73._.js.map +1 -1
  389. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_8514dfcd._.js +32 -0
  390. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_8514dfcd._.js.map +1 -0
  391. package/web/.next/server/chunks/ssr/src_presentation_web_b95ed206._.js +3 -0
  392. package/web/.next/server/chunks/ssr/src_presentation_web_b95ed206._.js.map +1 -0
  393. package/web/.next/server/chunks/ssr/src_presentation_web_bade80bd._.js +3 -0
  394. package/web/.next/server/chunks/ssr/src_presentation_web_bade80bd._.js.map +1 -0
  395. package/web/.next/server/chunks/ssr/src_presentation_web_c543cf3e._.js +3 -0
  396. package/web/.next/server/chunks/ssr/src_presentation_web_c543cf3e._.js.map +1 -0
  397. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
  398. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
  399. package/web/.next/server/chunks/ssr/src_presentation_web_components_common_base-drawer_base-drawer_tsx_97dfbbc8._.js +1 -1
  400. package/web/.next/server/chunks/ssr/src_presentation_web_components_common_base-drawer_base-drawer_tsx_97dfbbc8._.js.map +1 -1
  401. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
  402. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
  403. package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_dropdown-menu_tsx_229332e3._.js +3 -0
  404. package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_dropdown-menu_tsx_229332e3._.js.map +1 -0
  405. package/web/.next/server/chunks/ssr/translations_1562ae1a._.js +3 -0
  406. package/web/.next/server/chunks/ssr/translations_1562ae1a._.js.map +1 -0
  407. package/web/.next/server/pages/500.html +2 -2
  408. package/web/.next/server/server-reference-manifest.js +1 -1
  409. package/web/.next/server/server-reference-manifest.json +184 -72
  410. package/web/.next/static/chunks/019e71634c720ede.js +1 -0
  411. package/web/.next/static/chunks/040c5ff84a8ae1a3.js +7 -0
  412. package/web/.next/static/chunks/092ac28f5a4422a0.js +19 -0
  413. package/web/.next/static/chunks/0bd78b0cf1c1421f.js +1 -0
  414. package/web/.next/static/chunks/{996e4ea45364bf3c.js → 18c21c4f9f58b69a.js} +3 -3
  415. package/web/.next/static/chunks/2b5aea3575387b3a.js +1 -0
  416. package/web/.next/static/chunks/2cbe80f8e84d59a8.js +1 -0
  417. package/web/.next/static/chunks/{503d2e86f83285f9.js → 3219b06f6a34e573.js} +1 -1
  418. package/web/.next/static/chunks/37e434e579ecfa02.js +1 -0
  419. package/web/.next/static/chunks/4a7cf3b09e0495a4.js +1 -0
  420. package/web/.next/static/chunks/{83fc7ea32e18c9a5.js → 4ea617a22e21fb04.js} +1 -1
  421. package/web/.next/static/chunks/54d1d5a646a12d76.js +1 -0
  422. package/web/.next/static/chunks/{9e9b60f127270dfd.js → 553be530f22710a7.js} +1 -1
  423. package/web/.next/static/chunks/5795b9f399523c9e.js +1 -0
  424. package/web/.next/static/chunks/{d488e6b5cbbc6833.js → 6a88df64eaeb6322.js} +1 -1
  425. package/web/.next/static/chunks/{2fe20598e1b4793a.js → 6b2859ea368e7df3.js} +3 -3
  426. package/web/.next/static/chunks/6d8cae68371a845d.js +1 -0
  427. package/web/.next/static/chunks/{a2601dbbcb657c7d.js → 78607d521d916531.js} +1 -1
  428. package/web/.next/static/chunks/{7bf6ed16395220c4.js → 7d5a7551d452463d.js} +2 -2
  429. package/web/.next/static/chunks/80e778136b2f4c92.js +1 -0
  430. package/web/.next/static/chunks/a62fb058d660bea3.js +3 -0
  431. package/web/.next/static/chunks/adf16efe8bac05e9.css +1 -0
  432. package/web/.next/static/chunks/b0474319e5a50043.js +1 -0
  433. package/web/.next/static/chunks/b85532fb1545927c.js +5 -0
  434. package/web/.next/static/chunks/e0ae4dbd97b7af4c.js +1 -0
  435. package/web/.next/static/chunks/{2af89379fde6831d.js → f70998ac93012aef.js} +1 -1
  436. package/web/.next/server/chunks/ssr/[root-of-the-server]__013a0318._.js +0 -3
  437. package/web/.next/server/chunks/ssr/[root-of-the-server]__013a0318._.js.map +0 -1
  438. package/web/.next/server/chunks/ssr/[root-of-the-server]__090f24cb._.js +0 -3
  439. package/web/.next/server/chunks/ssr/[root-of-the-server]__24756fa9._.js +0 -12
  440. package/web/.next/server/chunks/ssr/[root-of-the-server]__24756fa9._.js.map +0 -1
  441. package/web/.next/server/chunks/ssr/[root-of-the-server]__70986695._.js +0 -3
  442. package/web/.next/server/chunks/ssr/[root-of-the-server]__70986695._.js.map +0 -1
  443. package/web/.next/server/chunks/ssr/[root-of-the-server]__7aa484f5._.js +0 -3
  444. package/web/.next/server/chunks/ssr/[root-of-the-server]__87bc4dac._.js.map +0 -1
  445. package/web/.next/server/chunks/ssr/[root-of-the-server]__a3a4ddef._.js +0 -3
  446. package/web/.next/server/chunks/ssr/[root-of-the-server]__a3a4ddef._.js.map +0 -1
  447. package/web/.next/server/chunks/ssr/[root-of-the-server]__a4222b95._.js +0 -3
  448. package/web/.next/server/chunks/ssr/[root-of-the-server]__a4222b95._.js.map +0 -1
  449. package/web/.next/server/chunks/ssr/[root-of-the-server]__a5ea76a6._.js +0 -3
  450. package/web/.next/server/chunks/ssr/[root-of-the-server]__a5ea76a6._.js.map +0 -1
  451. package/web/.next/server/chunks/ssr/[root-of-the-server]__a6f2b763._.js +0 -3
  452. package/web/.next/server/chunks/ssr/[root-of-the-server]__a6f2b763._.js.map +0 -1
  453. package/web/.next/server/chunks/ssr/[root-of-the-server]__f3ca7bea._.js +0 -3
  454. package/web/.next/server/chunks/ssr/[root-of-the-server]__f3ca7bea._.js.map +0 -1
  455. package/web/.next/server/chunks/ssr/_0277d3b5._.js +0 -21
  456. package/web/.next/server/chunks/ssr/_0277d3b5._.js.map +0 -1
  457. package/web/.next/server/chunks/ssr/_44531b76._.js +0 -9
  458. package/web/.next/server/chunks/ssr/_44531b76._.js.map +0 -1
  459. package/web/.next/server/chunks/ssr/_5dec4047._.js +0 -3
  460. package/web/.next/server/chunks/ssr/_5dec4047._.js.map +0 -1
  461. package/web/.next/server/chunks/ssr/_73aa3b20._.js +0 -3
  462. package/web/.next/server/chunks/ssr/_73aa3b20._.js.map +0 -1
  463. package/web/.next/server/chunks/ssr/_81e7a131._.js.map +0 -1
  464. package/web/.next/server/chunks/ssr/_869a3a15._.js +0 -3
  465. package/web/.next/server/chunks/ssr/_869a3a15._.js.map +0 -1
  466. package/web/.next/server/chunks/ssr/_b227ff50._.js +0 -3
  467. package/web/.next/server/chunks/ssr/_b227ff50._.js.map +0 -1
  468. package/web/.next/server/chunks/ssr/_d75dcb43._.js +0 -3
  469. package/web/.next/server/chunks/ssr/_d75dcb43._.js.map +0 -1
  470. package/web/.next/server/chunks/ssr/_e071ba48._.js +0 -3
  471. package/web/.next/server/chunks/ssr/_e071ba48._.js.map +0 -1
  472. package/web/.next/server/chunks/ssr/_eff1b518._.js +0 -3
  473. package/web/.next/server/chunks/ssr/_eff1b518._.js.map +0 -1
  474. package/web/.next/server/chunks/ssr/_f227429a._.js +0 -3
  475. package/web/.next/server/chunks/ssr/_f227429a._.js.map +0 -1
  476. package/web/.next/server/chunks/ssr/src_presentation_web_36f2bc45._.js +0 -3
  477. package/web/.next/server/chunks/ssr/src_presentation_web_36f2bc45._.js.map +0 -1
  478. package/web/.next/server/chunks/ssr/src_presentation_web_486908de._.js +0 -3
  479. package/web/.next/server/chunks/ssr/src_presentation_web_486908de._.js.map +0 -1
  480. package/web/.next/server/chunks/ssr/src_presentation_web_5c3596bc._.js +0 -3
  481. package/web/.next/server/chunks/ssr/src_presentation_web_5c3596bc._.js.map +0 -1
  482. package/web/.next/server/chunks/ssr/src_presentation_web_6326f81e._.js +0 -3
  483. package/web/.next/server/chunks/ssr/src_presentation_web_6326f81e._.js.map +0 -1
  484. package/web/.next/server/chunks/ssr/src_presentation_web_6b2fdcd8._.js +0 -3
  485. package/web/.next/server/chunks/ssr/src_presentation_web_6b2fdcd8._.js.map +0 -1
  486. package/web/.next/server/chunks/ssr/src_presentation_web_74703c9f._.js +0 -3
  487. package/web/.next/server/chunks/ssr/src_presentation_web_74703c9f._.js.map +0 -1
  488. package/web/.next/server/chunks/ssr/src_presentation_web_a8056dac._.js +0 -3
  489. package/web/.next/server/chunks/ssr/src_presentation_web_a8056dac._.js.map +0 -1
  490. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +0 -32
  491. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +0 -1
  492. package/web/.next/server/chunks/ssr/src_presentation_web_b00bfb08._.js +0 -3
  493. package/web/.next/server/chunks/ssr/src_presentation_web_b00bfb08._.js.map +0 -1
  494. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +0 -3
  495. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +0 -1
  496. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +0 -3
  497. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +0 -1
  498. package/web/.next/server/chunks/ssr/src_presentation_web_f1edcf5e._.js +0 -3
  499. package/web/.next/server/chunks/ssr/src_presentation_web_f1edcf5e._.js.map +0 -1
  500. package/web/.next/server/chunks/ssr/src_presentation_web_f9436804._.js +0 -3
  501. package/web/.next/server/chunks/ssr/src_presentation_web_f9436804._.js.map +0 -1
  502. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +0 -3
  503. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +0 -1
  504. package/web/.next/static/chunks/06b9d6dbf635c370.css +0 -1
  505. package/web/.next/static/chunks/1ae0cf5be30ef398.js +0 -1
  506. package/web/.next/static/chunks/3a71cab38909921e.js +0 -1
  507. package/web/.next/static/chunks/4e53adb5d07b7e3d.js +0 -1
  508. package/web/.next/static/chunks/5e7ac3508bef115f.js +0 -1
  509. package/web/.next/static/chunks/761a7c542b358739.js +0 -1
  510. package/web/.next/static/chunks/927442d2628f6e22.js +0 -1
  511. package/web/.next/static/chunks/a31f2264cedb23e9.js +0 -1
  512. package/web/.next/static/chunks/abf7d1b66555b758.js +0 -7
  513. package/web/.next/static/chunks/b99506a6f7bc2fa8.js +0 -1
  514. package/web/.next/static/chunks/d984d1d8d506291c.js +0 -7
  515. package/web/.next/static/chunks/e843a0d8e8c645c4.js +0 -1
  516. package/web/.next/static/chunks/f5ed0232d50b1ec8.js +0 -19
  517. /package/web/.next/static/{6GBQ7MHEYpZbJzqULwvXh → t-O8eMjJCUhhtd6CgtTXI}/_buildManifest.js +0 -0
  518. /package/web/.next/static/{6GBQ7MHEYpZbJzqULwvXh → t-O8eMjJCUhhtd6CgtTXI}/_clientMiddlewareManifest.json +0 -0
  519. /package/web/.next/static/{6GBQ7MHEYpZbJzqULwvXh → t-O8eMjJCUhhtd6CgtTXI}/_ssgManifest.js +0 -0
@@ -1,8 +1,8 @@
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 }: {
1
+ interface RouteProps {
4
2
  params: Promise<{
5
3
  id: string;
6
4
  }>;
7
- }): Promise<import("react/jsx-runtime").JSX.Element>;
5
+ }
6
+ export default function ApplicationRoute({ params }: RouteProps): Promise<import("react/jsx-runtime").JSX.Element>;
7
+ export {};
8
8
  //# sourceMappingURL=page.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/app/application/[id]/page.tsx"],"names":[],"mappings":"AAaA,uFAAuF;AACvF,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,wBAA8B,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,oDAoE7F"}
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/app/application/[id]/page.tsx"],"names":[],"mappings":"AAEA,UAAU,UAAU;IAClB,MAAM,EAAE,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjC;AAED,wBAA8B,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAAE,UAAU,oDAGpE"}
@@ -1,65 +1,6 @@
1
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
- import { DeploymentStatusProvider } from '../../../hooks/deployment-status-provider.js';
6
- /** Skip static pre-rendering since we need runtime DI container and server context. */
7
- export const dynamic = 'force-dynamic';
2
+ import { ApplicationPageLoader } from '../../../components/features/application-page/application-page-loader.js';
8
3
  export default async function ApplicationRoute({ params }) {
9
4
  const { id } = await params;
10
- const getApp = resolve('GetApplicationUseCase');
11
- const application = await getApp.execute(id);
12
- if (!application) {
13
- notFound();
14
- }
15
- // SSR-load the interactive chat state so the first user message (posted
16
- // by createApplication before navigation) renders on first paint — no
17
- // client-side fetch delay between mount and the message appearing.
18
- const getChatState = resolve('GetInteractiveChatStateUseCase');
19
- let initialChatState;
20
- try {
21
- initialChatState = await getChatState.execute({ featureId: `app-${application.id}` });
22
- }
23
- catch {
24
- // If chat state lookup fails (e.g. no session yet) ChatTab falls back
25
- // to fetching on mount. Not fatal.
26
- initialChatState = undefined;
27
- }
28
- // SSR-load the dev-server deployment status too. Before this, on a
29
- // page refresh while a dev server was running, we rendered the
30
- // empty-state "No dev server running" for a split second until the
31
- // client-side `hydrateOnMount` fetch returned. With the server
32
- // reading `DeploymentService.getStatus()` up front — it's a cheap
33
- // in-memory map lookup against state that was already reconciled
34
- // from SQLite on startup — the first paint already knows the URL
35
- // and the iframe loads instantly.
36
- let initialDeployment;
37
- try {
38
- const deploymentService = resolve('IDeploymentService');
39
- const status = deploymentService.getStatus(application.id);
40
- if (status && status.state !== 'Stopped') {
41
- initialDeployment = { state: status.state, url: status.url };
42
- }
43
- }
44
- catch {
45
- // Deployment service may not be registered in test environments —
46
- // fall back to client-side hydration.
47
- initialDeployment = undefined;
48
- }
49
- // Seed the provider with the current application's deployment so the
50
- // store's `hydrate()` writes the initial state/url into the entry keyed
51
- // by `application.id`. The application page is outside the (dashboard)
52
- // route group, so it has its own provider instance rather than sharing
53
- // the dashboard's.
54
- const initialDeployments = initialDeployment
55
- ? [
56
- {
57
- targetId: application.id,
58
- targetType: 'application',
59
- state: initialDeployment.state,
60
- url: initialDeployment.url,
61
- },
62
- ]
63
- : [];
64
- return (_jsx(DeploymentStatusProvider, { initialDeployments: initialDeployments, children: _jsx(ApplicationPage, { application: application, initialChatState: initialChatState, initialDeployment: initialDeployment }) }));
5
+ return _jsx(ApplicationPageLoader, { applicationId: id });
65
6
  }
@@ -0,0 +1,2 @@
1
+ export default function ApplicationsPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/applications/page.tsx"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,gBAAgB,4CAMvC"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { ApplicationsPageClient } from '../../components/features/applications/applications-page-client.js';
3
+ export default function ApplicationsPage() {
4
+ return (_jsx("div", { className: "dark:bg-background flex h-full flex-col overflow-y-auto bg-[#f6f7f8] p-6", children: _jsx(ApplicationsPageClient, {}) }));
5
+ }
@@ -61,7 +61,7 @@ const UserMessage = () => {
61
61
  if (text.startsWith(INTERACTION_PREFIX)) {
62
62
  return _jsx(InteractionResponseMessage, { text: text });
63
63
  }
64
- return (_jsxs(MessagePrimitive.Root, { className: "group animate-in fade-in-0 slide-in-from-bottom-1 flex w-full items-start gap-2.5 px-4 py-0.5 duration-300 ease-out", children: [_jsx("div", { className: "mt-0.5 flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-violet-500/15", children: _jsx(User, { className: "h-3.5 w-3.5 text-violet-500" }) }), _jsxs("div", { className: "flex max-w-[85%] min-w-0 flex-col gap-0.5", children: [_jsx("div", { className: "text-foreground mt-px overflow-hidden rounded-2xl rounded-tl-sm border border-violet-500/15 bg-violet-500/8 px-4 py-2 text-sm leading-relaxed break-words shadow-sm backdrop-blur-md", children: _jsx(MessagePrimitive.Content, { components: { Text: UserMessageText } }) }), _jsxs("div", { className: "flex items-center gap-1.5 opacity-0 transition-opacity group-hover:opacity-100", children: [_jsx(MessageMeta, {}), _jsx(ActionBarPrimitive.Root, { className: "flex items-center gap-1", children: _jsx(ActionBarPrimitive.Copy, { asChild: true, children: _jsx(IconButton, { tooltip: "Copy", children: _jsx(Copy, {}) }) }) })] })] })] }));
64
+ return (_jsxs(MessagePrimitive.Root, { className: "group animate-in fade-in-0 slide-in-from-bottom-1 flex w-full items-start gap-2.5 px-4 py-0.5 duration-300 ease-out", children: [_jsx("div", { className: "mt-0.5 flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-violet-500/15", children: _jsx(User, { className: "h-3.5 w-3.5 text-violet-500" }) }), _jsxs("div", { className: "flex max-w-[85%] min-w-0 flex-col gap-0.5", children: [_jsx("div", { className: "text-foreground mt-px overflow-hidden rounded-2xl rounded-tl-sm border border-violet-500/15 bg-violet-500/8 px-4 py-2 text-sm leading-relaxed break-words shadow-sm backdrop-blur-md dark:bg-violet-500/15", children: _jsx(MessagePrimitive.Content, { components: { Text: UserMessageText } }) }), _jsxs("div", { className: "flex items-center gap-1.5 opacity-0 transition-opacity group-hover:opacity-100", children: [_jsx(MessageMeta, {}), _jsx(ActionBarPrimitive.Root, { className: "flex items-center gap-1", children: _jsx(ActionBarPrimitive.Copy, { asChild: true, children: _jsx(IconButton, { tooltip: "Copy", children: _jsx(Copy, {}) }) }) })] })] })] }));
65
65
  };
66
66
  /** Compact green bubble showing the user's selections from an AskUserQuestion interaction. */
67
67
  function InteractionResponseMessage({ text }) {
@@ -96,7 +96,7 @@ const AssistantMessage = () => {
96
96
  if (toolEvent) {
97
97
  return (_jsxs(MessagePrimitive.Root, { className: "group animate-in fade-in-0 slide-in-from-bottom-1 flex w-full items-start gap-2.5 px-4 py-0.5 duration-300 ease-out", children: [_jsx("div", { className: "text-muted-foreground/40 mt-1 flex h-6 w-6 shrink-0 items-center justify-center", children: _jsx(Bot, { className: "h-3 w-3" }) }), _jsx("div", { className: "flex min-w-0 flex-1 items-center py-0.5", children: _jsx(ToolBubble, { text: rawText }) })] }));
98
98
  }
99
- return (_jsxs(MessagePrimitive.Root, { className: "group animate-in fade-in-0 slide-in-from-bottom-1 flex w-full items-start gap-2.5 px-4 py-0.5 duration-300 ease-out", children: [_jsx("div", { className: "bg-muted flex h-6 w-6 shrink-0 items-center justify-center rounded-full", children: _jsx(Bot, { className: "text-muted-foreground h-3.5 w-3.5" }) }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [_jsx("div", { className: "bg-muted/50 text-foreground mt-px overflow-hidden rounded-2xl rounded-tl-sm border border-white/5 px-4 py-2 text-sm leading-relaxed break-words shadow-sm backdrop-blur-md", children: _jsx(MessagePrimitive.Content, { components: { Text: AssistantMessageText } }) }), _jsxs("div", { className: "flex items-center gap-1.5 opacity-0 transition-opacity group-hover:opacity-100", children: [_jsx(MessageMeta, {}), _jsx(ActionBarPrimitive.Root, { className: "flex items-center gap-1", children: _jsx(ActionBarPrimitive.Copy, { asChild: true, children: _jsx(IconButton, { tooltip: "Copy", children: _jsx(Copy, {}) }) }) })] })] })] }));
99
+ return (_jsxs(MessagePrimitive.Root, { className: "group animate-in fade-in-0 slide-in-from-bottom-1 flex w-full items-start gap-2.5 px-4 py-0.5 duration-300 ease-out", children: [_jsx("div", { className: "bg-muted flex h-6 w-6 shrink-0 items-center justify-center rounded-full", children: _jsx(Bot, { className: "text-muted-foreground h-3.5 w-3.5" }) }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [_jsx("div", { className: "bg-muted/50 text-foreground mt-px overflow-hidden rounded-2xl rounded-tl-sm border border-white/5 px-4 py-2 text-sm leading-relaxed break-words shadow-sm backdrop-blur-md dark:bg-neutral-800/60", children: _jsx(MessagePrimitive.Content, { components: { Text: AssistantMessageText } }) }), _jsxs("div", { className: "flex items-center gap-1.5 opacity-0 transition-opacity group-hover:opacity-100", children: [_jsx(MessageMeta, {}), _jsx(ActionBarPrimitive.Root, { className: "flex items-center gap-1", children: _jsx(ActionBarPrimitive.Copy, { asChild: true, children: _jsx(IconButton, { tooltip: "Copy", children: _jsx(Copy, {}) }) }) })] })] })] }));
100
100
  };
101
101
  // ── Collapsible code block ───────────────────────────────────────────────
102
102
  const CODE_COLLAPSED_HEIGHT = 200; // px
@@ -1 +1 @@
1
- {"version":3,"file":"application-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/application-node/application-node.tsx"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AA8CrE,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,2CAuZA"}
1
+ {"version":3,"file":"application-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/application-node/application-node.tsx"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAMrE,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,2CAwZA"}
@@ -11,44 +11,10 @@ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../
11
11
  import { useTurnStatus } from '../../../hooks/turn-statuses-provider.js';
12
12
  import { useDeployAction } from '../../../hooks/use-deploy-action.js';
13
13
  import { DeploymentState } from '../../../../../../packages/core/src/domain/generated/output.js';
14
+ import { deriveAppLiveStatus } from '../../../lib/derive-app-status.js';
14
15
  /** Preview slot height. Roomier than the old 120px to give the live
15
16
  * iframe / start-preview CTA more presence on the canvas. */
16
17
  const PREVIEW_HEIGHT_PX = 180;
17
- /**
18
- * Pick the effective status for the card's status pill. "Idle" is
19
- * never shown. The fallback when nothing is actively happening is
20
- * "Ready" (standby) — unless the dev server is running, in which
21
- * case "Live" takes over as the persistent resting state.
22
- *
23
- * Priority (highest wins):
24
- *
25
- * - `processing` → "In Progress" (agent actively running a turn)
26
- * - `awaiting_input` → "Warning" (agent blocked on user question)
27
- * - deploymentUrl set → "Live" (dev server running at a real URL)
28
- * - persisted Error → "Error"
29
- * - otherwise → "Ready" (agent finished, preview not running)
30
- *
31
- * Note the `unread` turn status intentionally collapses into the
32
- * default branch — when the agent just finished a turn but the user
33
- * hasn't scrolled back to read it, we still show Ready (or Live if
34
- * the dev server is up). The user is already looking at the card,
35
- * a "you have unread output" nag adds no information.
36
- */
37
- function deriveLiveStatus(persistedStatus, turnStatus, deploymentUrl) {
38
- if (turnStatus === 'processing') {
39
- return { label: 'In Progress', dotClass: 'bg-violet-500', pulse: true };
40
- }
41
- if (turnStatus === 'awaiting_input') {
42
- return { label: 'Warning', dotClass: 'bg-amber-500', pulse: true };
43
- }
44
- if (deploymentUrl) {
45
- return { label: 'Live', dotClass: 'bg-emerald-500', pulse: true };
46
- }
47
- if (persistedStatus === 'Error') {
48
- return { label: 'Error', dotClass: 'bg-red-500', pulse: false };
49
- }
50
- return { label: 'Ready', dotClass: 'bg-sky-500', pulse: false };
51
- }
52
18
  export function ApplicationNode({ data, selected, }) {
53
19
  const { i18n } = useTranslation('web');
54
20
  const isRtl = i18n.dir() === 'rtl';
@@ -86,7 +52,7 @@ export function ApplicationNode({ data, selected, }) {
86
52
  // collapses the pill from "Live" back to "Ready" — there is
87
53
  // intentionally no secondary snapshot URL that could stay stale.
88
54
  const effectiveDeploymentUrl = deploy.url;
89
- const live = deriveLiveStatus(data.status, turnStatus, effectiveDeploymentUrl ?? undefined);
55
+ const live = deriveAppLiveStatus(data.status, turnStatus, !!effectiveDeploymentUrl);
90
56
  // Clicking anything in the "card controls" zone (Preview button,
91
57
  // open-in-new-tab) must not trigger the card's navigation-to-app
92
58
  // click handler. A single stopPropagation wrapper keeps every
@@ -116,7 +82,7 @@ export function ApplicationNode({ data, selected, }) {
116
82
  e.stopPropagation();
117
83
  data.onClick?.();
118
84
  }
119
- }, 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-4", 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('relative flex h-2 w-2 items-center justify-center rounded-full', live.dotClass), children: live.pulse ? (_jsx("span", { className: cn('absolute inline-flex h-full w-full animate-ping rounded-full opacity-60', live.dotClass) })) : null }), _jsx("span", { "data-testid": "application-node-status-text", className: "text-muted-foreground text-xs", children: live.label })] })] }), _jsx("div", { className: "px-4 pb-4", children: _jsxs("div", { className: "bg-muted group/preview relative overflow-hidden rounded-lg", style: { height: PREVIEW_HEIGHT_PX }, children: [effectiveDeploymentUrl ? (_jsx("iframe", { src: effectiveDeploymentUrl, title: `${data.name} live preview`,
85
+ }, 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', !selected && live.borderClass), children: [_jsxs("div", { className: "flex items-center gap-3 px-4 py-4", 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('relative flex h-2 w-2 items-center justify-center rounded-full', live.dotClass), children: live.pulse ? (_jsx("span", { className: cn('absolute inline-flex h-full w-full animate-ping rounded-full opacity-60', live.dotClass) })) : null }), _jsx("span", { "data-testid": "application-node-status-text", className: "text-muted-foreground text-xs", children: live.label })] })] }), _jsx("div", { className: "px-4 pb-4", children: _jsxs("div", { className: "bg-muted group/preview relative overflow-hidden rounded-lg", style: { height: PREVIEW_HEIGHT_PX }, children: [effectiveDeploymentUrl ? (_jsx("iframe", { src: effectiveDeploymentUrl, title: `${data.name} live preview`,
120
86
  // 2.5× inner size scaled to 0.4 = exactly 1.0
121
87
  // effective size. The iframe renders at a real
122
88
  // browser viewport (good enough for responsive
@@ -0,0 +1,4 @@
1
+ export declare function ApplicationPageLoader({ applicationId }: {
2
+ applicationId: string;
3
+ }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=application-page-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-page-loader.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/application-page/application-page-loader.tsx"],"names":[],"mappings":"AAkBA,wBAAgB,qBAAqB,CAAC,EAAE,aAAa,EAAE,EAAE;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,2CAsDjF"}
@@ -0,0 +1,47 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useQuery } from '@tanstack/react-query';
4
+ import { Loader2 } from 'lucide-react';
5
+ import { notFound } from 'next/navigation';
6
+ import { DeploymentStatusProvider } from '../../../hooks/deployment-status-provider.js';
7
+ import { ApplicationPage } from './application-page.js';
8
+ export function ApplicationPageLoader({ applicationId }) {
9
+ const { data, isLoading, error } = useQuery({
10
+ queryKey: ['application', applicationId],
11
+ queryFn: async () => {
12
+ const res = await fetch(`/api/applications/${applicationId}`);
13
+ if (res.status === 404)
14
+ throw new Error('not-found');
15
+ if (!res.ok)
16
+ throw new Error('Failed to fetch application');
17
+ return res.json();
18
+ },
19
+ staleTime: 60_000,
20
+ retry: (count, err) => {
21
+ if (err instanceof Error && err.message === 'not-found')
22
+ return false;
23
+ return count < 2;
24
+ },
25
+ });
26
+ if (error?.message === 'not-found') {
27
+ notFound();
28
+ }
29
+ if (isLoading || !data) {
30
+ return (_jsx("div", { className: "bg-background flex h-dvh items-center justify-center", children: _jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" }) }));
31
+ }
32
+ const { application, initialChatState, deployment } = data;
33
+ const initialDeployment = deployment
34
+ ? { state: deployment.state, url: deployment.url }
35
+ : undefined;
36
+ const initialDeployments = initialDeployment
37
+ ? [
38
+ {
39
+ targetId: application.id,
40
+ targetType: 'application',
41
+ state: initialDeployment.state,
42
+ url: initialDeployment.url,
43
+ },
44
+ ]
45
+ : [];
46
+ return (_jsx(DeploymentStatusProvider, { initialDeployments: initialDeployments, children: _jsx(ApplicationPage, { application: application, initialChatState: initialChatState, initialDeployment: initialDeployment }) }));
47
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"application-page.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/application-page/application-page.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,sCAAsC,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sFAAsF,CAAC;AA8nBtH;;;;;;GAMG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,eAAe,CAAC;IACvB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;CAC/C;AAED,wBAAgB,eAAe,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,EAAE,oBAAoB,2CAgGtF"}
1
+ {"version":3,"file":"application-page.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/application-page/application-page.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,sCAAsC,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sFAAsF,CAAC;AA0qBtH;;;;;;GAMG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,eAAe,CAAC;IACvB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;CAC/C;AAED,wBAAgB,eAAe,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,EAAE,oBAAoB,2CAwItF"}
@@ -1,13 +1,15 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useCallback, useEffect, useRef, useState } from 'react';
4
- import { useRouter } from 'next/navigation';
5
4
  import { useQuery } from '@tanstack/react-query';
6
5
  import { toast } from 'sonner';
7
- import { ArrowLeft, LayoutGrid, GitBranch, Copy, FolderOpen, ClipboardList, Cpu, FilePlus, FilePen, } from 'lucide-react';
6
+ import { LayoutGrid, GitBranch, Copy, FolderOpen, ClipboardList, Cpu, FilePlus, FilePen, Trash2, } from 'lucide-react';
7
+ import { useRouter } from 'next/navigation';
8
8
  import { DeploymentState } from '../../../../../../packages/core/src/domain/generated/output.js';
9
9
  import { cn } from '../../../lib/utils.js';
10
10
  import { Button } from '../../ui/button.js';
11
+ import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../../ui/dialog.js';
12
+ import { deleteApplication } from '../../../app/actions/delete-application.js';
11
13
  import { ChatTab } from '../../features/chat/ChatTab.js';
12
14
  import { APPLICATION_CREATION_PLACEHOLDER_STEPS } from '../../features/chat/workflow-placeholder.js';
13
15
  import { TerminalTab } from '../../features/application-page/terminal-tab.js';
@@ -16,6 +18,7 @@ import { RunDevButton } from '../../features/application-page/run-dev-button.js'
16
18
  import { WebPreviewTab } from '../../features/application-page/web-preview-tab.js';
17
19
  import { useDeployAction } from '../../../hooks/use-deploy-action.js';
18
20
  import { useTurnStatus } from '../../../hooks/turn-statuses-provider.js';
21
+ import { deriveAppLiveStatus } from '../../../lib/derive-app-status.js';
19
22
  import { chatQueryKey, fetchChatState } from '../../features/chat/chat-state-query.js';
20
23
  import { openFolder } from '../../../app/actions/open-folder.js';
21
24
  import { getApplicationDebugPrompt } from '../../../app/actions/get-application-debug-prompt.js';
@@ -35,35 +38,8 @@ const VIEW_LABELS = {
35
38
  terminal: 'Terminal',
36
39
  web: 'Web',
37
40
  };
38
- /**
39
- * Derive a single effective status label + dot color. "Idle" is
40
- * never shown. MUST match the priority order in
41
- * `components/common/application-node/application-node.tsx` so the
42
- * canvas card and the application page agree on every parameter.
43
- *
44
- * Priority (highest wins):
45
- *
46
- * - `processing` → "In Progress" (agent actively running a turn)
47
- * - `awaiting_input` → "Warning" (agent blocked on user question)
48
- * - deployReady → "Live" (dev server running at a real URL)
49
- * - persisted Error → "Error"
50
- * - otherwise → "Ready" (agent finished, preview not running)
51
- */
52
- function deriveLiveStatusPill(persistedStatus, turnStatus, deployReady) {
53
- if (turnStatus === 'processing') {
54
- return { label: 'In Progress', dotClass: 'bg-violet-500', pulse: true };
55
- }
56
- if (turnStatus === 'awaiting_input') {
57
- return { label: 'Warning', dotClass: 'bg-amber-500', pulse: true };
58
- }
59
- if (deployReady) {
60
- return { label: 'Live', dotClass: 'bg-emerald-500', pulse: true };
61
- }
62
- if (persistedStatus === 'Error') {
63
- return { label: 'Error', dotClass: 'bg-red-500', pulse: false };
64
- }
65
- return { label: 'Ready', dotClass: 'bg-sky-500', pulse: false };
66
- }
41
+ /* Status derivation is shared with canvas nodes and application cards
42
+ * via `lib/derive-app-status.ts` single source of truth. */
67
43
  /* ------------------------------------------------------------------ */
68
44
  /* Short path helper */
69
45
  /* ------------------------------------------------------------------ */
@@ -73,8 +49,8 @@ function shortPath(path) {
73
49
  const idx = normalized.lastIndexOf('/');
74
50
  return idx === -1 ? normalized : normalized.slice(idx + 1);
75
51
  }
76
- function AppTopBar({ application, activeView, onViewChange, onBack, initialChatState, deploy, }) {
77
- return (_jsxs("header", { className: cn('bg-background/95 supports-[backdrop-filter]:bg-background/70 sticky top-0 z-20 flex shrink-0 items-center gap-2 border-b px-3 backdrop-blur', TOP_BAR_HEIGHT_CLASS), children: [_jsx(Button, { variant: "ghost", size: "icon", "aria-label": "Back to canvas", onClick: onBack, className: "h-7 w-7", children: _jsx(ArrowLeft, { className: "h-3.5 w-3.5" }) }), _jsx("div", { className: "flex h-6 w-6 shrink-0 items-center justify-center rounded-md bg-gradient-to-br from-indigo-500 to-violet-500", children: _jsx(LayoutGrid, { className: "h-3 w-3 text-white" }) }), _jsx("h1", { className: "min-w-0 truncate text-sm font-semibold", children: application.name }), _jsx(StatusPill, { applicationId: application.id, persistedStatus: application.status, deployReady: deploy.status === DeploymentState.Ready }), _jsx(Divider, {}), _jsx(PathCluster, { repositoryPath: application.repositoryPath }), _jsx("div", { className: "flex-1" }), _jsx(SessionChip, { featureId: `app-${application.id}`, initialChatState: initialChatState }), _jsx(CopyPromptButton, { applicationId: application.id }), _jsx(RunDevButton, { deploy: deploy }), _jsx(ViewSwitcher, { active: activeView, onChange: onViewChange })] }));
52
+ function AppTopBar({ application, activeView, onViewChange, agentRunning, initialChatState, deploy, }) {
53
+ return (_jsxs("header", { className: cn('bg-background/95 supports-[backdrop-filter]:bg-background/70 sticky top-0 z-20 flex shrink-0 items-center gap-2 border-b px-3 backdrop-blur', TOP_BAR_HEIGHT_CLASS), children: [_jsx("div", { className: "flex h-6 w-6 shrink-0 items-center justify-center rounded-md bg-gradient-to-br from-indigo-500 to-violet-500", children: _jsx(LayoutGrid, { className: "h-3 w-3 text-white" }) }), _jsx("h1", { className: "min-w-0 truncate text-sm font-semibold", children: application.name }), _jsx(StatusPill, { applicationId: application.id, persistedStatus: application.status, deployReady: deploy.status === DeploymentState.Ready }), _jsx(Divider, {}), _jsx(PathCluster, { repositoryPath: application.repositoryPath }), _jsx("div", { className: "flex-1" }), _jsx(SessionChip, { featureId: `app-${application.id}`, initialChatState: initialChatState, persistedSessionId: application.agentSessionId }), _jsx(CopyPromptButton, { applicationId: application.id }), _jsx(DeleteButton, { applicationId: application.id, applicationName: application.name }), _jsx(RunDevButton, { deploy: deploy, disabled: agentRunning }), _jsx(ViewSwitcher, { active: activeView, onChange: onViewChange, disabledTabs: agentRunning ? ['web'] : [] })] }));
78
54
  }
79
55
  /* ------------------------------------------------------------------ */
80
56
  /* Path cluster — short path + copy + open-in-file-manager */
@@ -135,12 +111,7 @@ function GitStatusCluster({ repositoryPath }) {
135
111
  /* ------------------------------------------------------------------ */
136
112
  /* Session chip — model + short session id, live via shared query */
137
113
  /* ------------------------------------------------------------------ */
138
- function SessionChip({ featureId, initialChatState, }) {
139
- // Reads from the SAME TanStack Query cache entry the chat tab uses.
140
- // The `message`/`session_status`/`turn_status` SSE events inside
141
- // ChatTab's useChatRuntime mutate this cache directly, so the chip
142
- // updates live as the session transitions booting → ready and the
143
- // SDK reports back its assigned session id.
114
+ function SessionChip({ featureId, initialChatState, persistedSessionId, }) {
144
115
  const { data: chatState } = useQuery({
145
116
  queryKey: chatQueryKey(featureId),
146
117
  queryFn: () => fetchChatState(featureId),
@@ -150,7 +121,9 @@ function SessionChip({ featureId, initialChatState, }) {
150
121
  refetchOnReconnect: false,
151
122
  });
152
123
  const sessionInfo = chatState?.sessionInfo;
153
- const sessionId = sessionInfo?.sessionId ?? null;
124
+ // Prefer the persisted ID from the Application entity (always available),
125
+ // fall back to the live session info (only available while session is active).
126
+ const sessionId = persistedSessionId ?? sessionInfo?.sessionId ?? null;
154
127
  const model = sessionInfo?.model ?? null;
155
128
  const shortId = sessionId ? sessionId.slice(0, 8) : null;
156
129
  const handleCopy = useCallback(async () => {
@@ -201,6 +174,21 @@ function CopyPromptButton({ applicationId }) {
201
174
  }, [applicationId, busy]);
202
175
  return (_jsx(Button, { variant: "ghost", size: "icon", onClick: handleClick, disabled: busy, className: "text-muted-foreground hover:text-foreground h-7 w-7", "aria-label": "Copy full generated prompt (debug)", title: "Copy full generated prompt (debug) \u2014 system + user message", children: _jsx(ClipboardList, { className: "h-3.5 w-3.5" }) }));
203
176
  }
177
+ function DeleteButton({ applicationId, applicationName, }) {
178
+ const router = useRouter();
179
+ const [confirmOpen, setConfirmOpen] = useState(false);
180
+ return (_jsxs(_Fragment, { children: [_jsx(Button, { variant: "ghost", size: "icon", onClick: () => setConfirmOpen(true), className: "text-muted-foreground hover:text-destructive h-7 w-7", "aria-label": "Delete application", title: "Delete application", children: _jsx(Trash2, { className: "h-3.5 w-3.5" }) }), _jsx(Dialog, { open: confirmOpen, onOpenChange: setConfirmOpen, children: _jsxs(DialogContent, { className: "max-w-xs", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Delete application?" }), _jsxs(DialogDescription, { children: ["This will permanently remove ", _jsx("strong", { children: applicationName }), "."] })] }), _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: async () => {
181
+ setConfirmOpen(false);
182
+ const result = await deleteApplication(applicationId);
183
+ if (result.error) {
184
+ toast.error('Failed to delete', { description: result.error });
185
+ }
186
+ else {
187
+ toast.success('Application deleted');
188
+ router.push('/applications');
189
+ }
190
+ }, children: "Delete" })] })] }) })] }));
191
+ }
204
192
  function StatusPill({ applicationId, persistedStatus, deployReady, }) {
205
193
  // Read live turn status from the global SSE subscription and fold
206
194
  // it PLUS the dev-server deploy state onto the persisted status so
@@ -208,18 +196,19 @@ function StatusPill({ applicationId, persistedStatus, deployReady, }) {
208
196
  // "Unread" / "Live") instead of being stuck at the coarse DB
209
197
  // snapshot which almost always reads "Idle".
210
198
  const turnStatus = useTurnStatus(`app-${applicationId}`);
211
- const live = deriveLiveStatusPill(persistedStatus, turnStatus, deployReady);
199
+ const live = deriveAppLiveStatus(persistedStatus, turnStatus, deployReady);
212
200
  return (_jsxs("span", { className: "border-border/60 inline-flex h-5 shrink-0 items-center gap-1 rounded-full border px-2 text-[10px] font-medium tracking-wide uppercase", children: [_jsx("span", { className: cn('relative flex h-1.5 w-1.5 items-center justify-center rounded-full', live.dotClass), children: live.pulse ? (_jsx("span", { className: cn('absolute inline-flex h-full w-full animate-ping rounded-full opacity-60', live.dotClass) })) : null }), live.label] }));
213
201
  }
214
202
  function Divider() {
215
203
  return _jsx("span", { className: "bg-border/60 mx-1 h-4 w-px shrink-0" });
216
204
  }
217
- function ViewSwitcher({ active, onChange, }) {
205
+ function ViewSwitcher({ active, onChange, disabledTabs = [], }) {
218
206
  return (_jsx("div", { role: "tablist", "aria-label": "Right pane view", className: "bg-muted/60 flex items-center rounded-md p-0.5", children: VIEW_TABS.map((v) => {
219
207
  const selected = v === active;
220
- return (_jsx("button", { type: "button", role: "tab", "aria-selected": selected, onClick: () => onChange(v), className: cn('h-6 cursor-pointer rounded-sm px-2.5 text-[11px] font-medium transition-colors', selected
208
+ const disabled = disabledTabs.includes(v);
209
+ return (_jsx("button", { type: "button", role: "tab", "aria-selected": selected, "aria-disabled": disabled, disabled: disabled, onClick: () => onChange(v), className: cn('h-6 rounded-sm px-2.5 text-[11px] font-medium transition-colors', disabled ? 'text-muted-foreground/40 cursor-not-allowed' : 'cursor-pointer', !disabled && selected
221
210
  ? 'bg-background text-foreground shadow-sm'
222
- : 'text-muted-foreground hover:text-foreground'), children: VIEW_LABELS[v] }, v));
211
+ : !disabled && 'text-muted-foreground hover:text-foreground'), children: VIEW_LABELS[v] }, v));
223
212
  }) }));
224
213
  }
225
214
  /* ------------------------------------------------------------------ */
@@ -271,7 +260,6 @@ function ViewBody({ activeView, applicationId, terminalCwd, deploy, }) {
271
260
  return (_jsxs("div", { className: "relative flex min-h-0 flex-1", children: [_jsx("div", { className: cn('absolute inset-0 flex min-h-0 flex-col', activeView === 'terminal' ? 'visible' : 'pointer-events-none invisible'), "aria-hidden": activeView !== 'terminal', children: _jsx(TerminalTab, { cwd: terminalCwd }) }), _jsx("div", { className: cn('absolute inset-0 flex min-h-0 flex-col', activeView === 'ide' ? 'visible' : 'pointer-events-none invisible'), "aria-hidden": activeView !== 'ide', children: _jsx(IdeTab, { applicationId: applicationId }) }), hasWebContent ? (_jsx("div", { className: cn('absolute inset-0 flex min-h-0 flex-col', activeView === 'web' ? 'visible' : 'pointer-events-none invisible'), "aria-hidden": activeView !== 'web', children: _jsx(WebPreviewTab, { deploy: deploy }) })) : (activeView === 'web' && _jsx(WebPreviewTab, { deploy: deploy }))] }));
272
261
  }
273
262
  export function ApplicationPage({ application, initialChatState }) {
274
- const router = useRouter();
275
263
  const [activeView, setActiveView] = useState('ide');
276
264
  // Hoisted dev-server state — subscribes to the shared
277
265
  // DeploymentStatusProvider scoped to this application's id. The server
@@ -285,6 +273,39 @@ export function ApplicationPage({ application, initialChatState }) {
285
273
  targetType: 'application',
286
274
  repositoryPath: application.repositoryPath,
287
275
  });
276
+ // ── Agent-running detection ────────────────────────────────
277
+ // While the agent is processing, the dev server is likely being
278
+ // modified — disable preview and auto-restart when done.
279
+ const turnStatus = useTurnStatus(`app-${application.id}`);
280
+ const agentRunning = turnStatus === 'processing';
281
+ const prevAgentRunningRef = useRef(false);
282
+ // Track whether the dev server was running before the agent started,
283
+ // so we only restart it (not cold-start) after the agent finishes.
284
+ const wasRunningBeforeAgentRef = useRef(false);
285
+ useEffect(() => {
286
+ const wasRunning = prevAgentRunningRef.current;
287
+ prevAgentRunningRef.current = agentRunning;
288
+ if (agentRunning && !wasRunning) {
289
+ // Agent just started — stop the dev server if running, remember
290
+ // that it was running so we can restart after.
291
+ if (deploy.status === DeploymentState.Ready || deploy.status === DeploymentState.Booting) {
292
+ wasRunningBeforeAgentRef.current = true;
293
+ void deploy.stop();
294
+ }
295
+ // Switch away from web tab while agent works
296
+ if (activeView === 'web') {
297
+ setActiveView('ide');
298
+ }
299
+ }
300
+ if (!agentRunning && wasRunning) {
301
+ // Agent just finished — restart the dev server if it was
302
+ // previously running.
303
+ if (wasRunningBeforeAgentRef.current) {
304
+ wasRunningBeforeAgentRef.current = false;
305
+ void deploy.deploy();
306
+ }
307
+ }
308
+ }, [agentRunning, deploy, activeView]);
288
309
  // When the dev server transitions to Ready, auto-switch the right
289
310
  // pane to the Web tab the first time it happens so the user
290
311
  // immediately sees their app without an extra click. Only triggers
@@ -299,15 +320,15 @@ export function ApplicationPage({ application, initialChatState }) {
299
320
  hasAutoSwitchedRef.current = false;
300
321
  }
301
322
  }, [deploy.status, deploy.url]);
302
- // Back control center. We navigate AND refresh so the dashboard layout
303
- // re-runs `getGraphData()` server-side. Without `router.refresh()` the
304
- // App Router serves the cached RSC from when the user was last on `/`,
305
- // which does NOT include the application they just created.
306
- const handleBack = useCallback(() => {
307
- router.push('/');
308
- router.refresh();
309
- }, [router]);
310
- return (_jsxs("div", { className: "bg-background flex h-dvh flex-col", children: [_jsx(AppTopBar, { application: application, activeView: activeView, onViewChange: setActiveView, onBack: handleBack, initialChatState: initialChatState, deploy: deploy }), _jsx(ResizableSplit, { left: _jsx(ChatTab, { featureId: `app-${application.id}`, worktreePath: application.repositoryPath, initialAgent: application.agentType, initialModel: application.modelOverride, initialChatState: initialChatState, hideHeader: true, workflowPlaceholder: APPLICATION_CREATION_PLACEHOLDER_STEPS, onAllStepsComplete: () => {
323
+ // Prevent switching to web tab while agent is running
324
+ const handleViewChange = useCallback((view) => {
325
+ if (view === 'web' && agentRunning)
326
+ return;
327
+ setActiveView(view);
328
+ }, [agentRunning]);
329
+ return (_jsxs("div", { className: "bg-background flex h-dvh flex-col", children: [_jsx(AppTopBar, { application: application, activeView: activeView, onViewChange: handleViewChange, agentRunning: agentRunning, initialChatState: initialChatState, deploy: deploy }), _jsx(ResizableSplit, { left: _jsx(ChatTab, { featureId: `app-${application.id}`, worktreePath: application.repositoryPath, initialAgent: application.agentType, initialModel: application.modelOverride, initialChatState: initialChatState, hideHeader: true, workflowPlaceholder: APPLICATION_CREATION_PLACEHOLDER_STEPS, onResumeWorkflow: () => {
330
+ void fetch(`/api/applications/${application.id}/resume`, { method: 'POST' });
331
+ }, onAllStepsComplete: () => {
311
332
  // Kick off the dev server as soon as the agent has
312
333
  // finished the scaffold workflow. The Idle→Ready
313
334
  // transition in the deploy hook then auto-switches
@@ -1 +1 @@
1
- {"version":3,"file":"application-page.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/application-page/application-page.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAgBrD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,eAAe,CAOtC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAWpB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAWxB,CAAC"}
1
+ {"version":3,"file":"application-page.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/application-page/application-page.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAiBrD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,eAAe,CAOtC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAWpB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAWxB,CAAC"}
@@ -8,6 +8,7 @@ const baseApp = {
8
8
  repositoryPath: '/home/user/projects/my-todo-app',
9
9
  additionalPaths: [],
10
10
  status: ApplicationStatus.Idle,
11
+ setupComplete: false,
11
12
  createdAt: new Date().toISOString(),
12
13
  updatedAt: new Date().toISOString(),
13
14
  };
@@ -2,6 +2,8 @@ import type { DeployActionState } from '../../../hooks/use-deploy-action.js';
2
2
  export interface RunDevButtonProps {
3
3
  deploy: DeployActionState;
4
4
  className?: string;
5
+ /** When true the button is grayed out and non-interactive (e.g. agent is running). */
6
+ disabled?: boolean;
5
7
  /**
6
8
  * Visual density of the Ready state.
7
9
  *
@@ -15,5 +17,5 @@ export interface RunDevButtonProps {
15
17
  */
16
18
  variant?: 'full' | 'compact';
17
19
  }
18
- export declare function RunDevButton({ deploy, className, variant }: RunDevButtonProps): import("react/jsx-runtime").JSX.Element;
20
+ export declare function RunDevButton({ deploy, className, disabled, variant }: RunDevButtonProps): import("react/jsx-runtime").JSX.Element;
19
21
  //# sourceMappingURL=run-dev-button.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-dev-button.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/application-page/run-dev-button.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAgB,EAAE,EAAE,iBAAiB,2CAuJtF"}
1
+ {"version":3,"file":"run-dev-button.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/application-page/run-dev-button.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAgB,EAAE,EAAE,iBAAiB,2CA+JhG"}
@@ -33,7 +33,7 @@ import { useCallback } from 'react';
33
33
  import { Play, Square, Loader2, TriangleAlert, ExternalLink } from 'lucide-react';
34
34
  import { DeploymentState } from '../../../../../../packages/core/src/domain/generated/output.js';
35
35
  import { cn } from '../../../lib/utils.js';
36
- export function RunDevButton({ deploy, className, variant = 'full' }) {
36
+ export function RunDevButton({ deploy, className, disabled, variant = 'full' }) {
37
37
  const openUrl = useCallback(() => {
38
38
  if (deploy.url)
39
39
  window.open(deploy.url, '_blank', 'noopener,noreferrer');
@@ -76,5 +76,9 @@ export function RunDevButton({ deploy, className, variant = 'full' }) {
76
76
  // ────────────────────────────────────────────────────────────
77
77
  // Idle — default "Preview" button (Shep AI purple)
78
78
  // ────────────────────────────────────────────────────────────
79
- return (_jsxs("button", { type: "button", onClick: deploy.deploy, className: cn('inline-flex h-7 shrink-0 items-center gap-1.5 rounded-md border border-violet-500/50 bg-gradient-to-br from-indigo-500/15 to-violet-500/20 px-2.5 text-[11px] font-medium text-violet-700 transition-colors hover:from-indigo-500/25 hover:to-violet-500/30 dark:text-violet-300', className), title: "Install dependencies and preview the app", "aria-label": "Preview app", children: [_jsx(Play, { className: "h-3 w-3 fill-current" }), _jsx("span", { children: "Preview" })] }));
79
+ return (_jsxs("button", { type: "button", onClick: deploy.deploy, disabled: disabled, className: cn('inline-flex h-7 shrink-0 items-center gap-1.5 rounded-md border px-2.5 text-[11px] font-medium transition-colors', disabled
80
+ ? 'border-border bg-muted text-muted-foreground/40 cursor-not-allowed'
81
+ : 'border-violet-500/50 bg-gradient-to-br from-indigo-500/15 to-violet-500/20 text-violet-700 hover:from-indigo-500/25 hover:to-violet-500/30 dark:text-violet-300', className), title: disabled
82
+ ? 'Preview disabled while agent is running'
83
+ : 'Install dependencies and preview the app', "aria-label": "Preview app", children: [_jsx(Play, { className: "h-3 w-3 fill-current" }), _jsx("span", { children: "Preview" })] }));
80
84
  }
@@ -0,0 +1,7 @@
1
+ import type { ApplicationWithStatus } from '../../../../../../packages/core/src/application/use-cases/applications/list-applications.use-case.js';
2
+ export interface ApplicationCardProps {
3
+ application: ApplicationWithStatus;
4
+ className?: string;
5
+ }
6
+ export declare function ApplicationCard({ application, className }: ApplicationCardProps): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=application-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-card.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/applications/application-card.tsx"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4EAA4E,CAAC;AAExH,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,qBAAqB,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,eAAe,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,oBAAoB,2CA0O/E"}