@shepai/cli 1.202.1-pr606.60460ac → 1.202.2

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 (372) hide show
  1. package/package.json +1 -1
  2. package/web/.next/BUILD_ID +1 -1
  3. package/web/.next/build-manifest.json +2 -2
  4. package/web/.next/fallback-build-manifest.json +2 -2
  5. package/web/.next/prerender-manifest.json +3 -3
  6. package/web/.next/required-server-files.js +2 -2
  7. package/web/.next/required-server-files.json +2 -2
  8. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/react-loadable-manifest.json +4 -4
  9. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +37 -37
  10. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  11. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  12. package/web/.next/server/app/(dashboard)/@drawer/chat/page/react-loadable-manifest.json +4 -4
  13. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +35 -35
  14. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  15. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  16. package/web/.next/server/app/(dashboard)/@drawer/create/page/react-loadable-manifest.json +4 -4
  17. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +38 -38
  18. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  19. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  20. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/react-loadable-manifest.json +4 -4
  21. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +47 -47
  22. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  23. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  24. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/react-loadable-manifest.json +4 -4
  25. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +47 -47
  26. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  27. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  28. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/react-loadable-manifest.json +4 -4
  29. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +36 -36
  30. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  31. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  32. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/react-loadable-manifest.json +4 -4
  33. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +36 -36
  34. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  35. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  36. package/web/.next/server/app/(dashboard)/chat/page/react-loadable-manifest.json +4 -4
  37. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +35 -35
  38. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  39. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  40. package/web/.next/server/app/(dashboard)/control-center/page/react-loadable-manifest.json +4 -4
  41. package/web/.next/server/app/(dashboard)/control-center/page/server-reference-manifest.json +35 -35
  42. package/web/.next/server/app/(dashboard)/control-center/page.js.nft.json +1 -1
  43. package/web/.next/server/app/(dashboard)/control-center/page_client-reference-manifest.js +1 -1
  44. package/web/.next/server/app/(dashboard)/create/page/react-loadable-manifest.json +4 -4
  45. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +38 -38
  46. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  47. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  48. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/react-loadable-manifest.json +4 -4
  49. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +47 -47
  50. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  51. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  52. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/react-loadable-manifest.json +4 -4
  53. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +47 -47
  54. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  55. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  56. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/react-loadable-manifest.json +4 -4
  57. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +36 -36
  58. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  59. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  60. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/react-loadable-manifest.json +4 -4
  61. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +36 -36
  62. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  63. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  64. package/web/.next/server/app/_global-error.html +2 -2
  65. package/web/.next/server/app/_global-error.rsc +1 -1
  66. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  67. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  68. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  69. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  70. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  71. package/web/.next/server/app/_not-found/page/react-loadable-manifest.json +4 -4
  72. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +9 -9
  73. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  74. package/web/.next/server/app/agent-questions/page/react-loadable-manifest.json +4 -4
  75. package/web/.next/server/app/agent-questions/page/server-reference-manifest.json +11 -11
  76. package/web/.next/server/app/agent-questions/page_client-reference-manifest.js +1 -1
  77. package/web/.next/server/app/agents/[agentType]/page/react-loadable-manifest.json +4 -4
  78. package/web/.next/server/app/agents/[agentType]/page/server-reference-manifest.json +13 -13
  79. package/web/.next/server/app/agents/[agentType]/page_client-reference-manifest.js +1 -1
  80. package/web/.next/server/app/agents/page/react-loadable-manifest.json +4 -4
  81. package/web/.next/server/app/agents/page/server-reference-manifest.json +10 -10
  82. package/web/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  83. package/web/.next/server/app/application/[id]/page/react-loadable-manifest.json +4 -4
  84. package/web/.next/server/app/application/[id]/page/server-reference-manifest.json +18 -18
  85. package/web/.next/server/app/application/[id]/page.js.nft.json +1 -1
  86. package/web/.next/server/app/application/[id]/page_client-reference-manifest.js +1 -1
  87. package/web/.next/server/app/application/[id]/supervisor/page/react-loadable-manifest.json +4 -4
  88. package/web/.next/server/app/application/[id]/supervisor/page/server-reference-manifest.json +10 -10
  89. package/web/.next/server/app/application/[id]/supervisor/page_client-reference-manifest.js +1 -1
  90. package/web/.next/server/app/applications/page/react-loadable-manifest.json +4 -4
  91. package/web/.next/server/app/applications/page/server-reference-manifest.json +20 -20
  92. package/web/.next/server/app/applications/page.js.nft.json +1 -1
  93. package/web/.next/server/app/applications/page_client-reference-manifest.js +1 -1
  94. package/web/.next/server/app/features/page/react-loadable-manifest.json +4 -4
  95. package/web/.next/server/app/features/page/server-reference-manifest.json +31 -31
  96. package/web/.next/server/app/features/page.js.nft.json +1 -1
  97. package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
  98. package/web/.next/server/app/onboarding/page/react-loadable-manifest.json +4 -4
  99. package/web/.next/server/app/onboarding/page/server-reference-manifest.json +9 -9
  100. package/web/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  101. package/web/.next/server/app/page/react-loadable-manifest.json +4 -4
  102. package/web/.next/server/app/page/server-reference-manifest.json +9 -9
  103. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  104. package/web/.next/server/app/projects/[slug]/items/[itemId]/page/react-loadable-manifest.json +4 -4
  105. package/web/.next/server/app/projects/[slug]/items/[itemId]/page/server-reference-manifest.json +16 -16
  106. package/web/.next/server/app/projects/[slug]/items/[itemId]/page_client-reference-manifest.js +1 -1
  107. package/web/.next/server/app/projects/[slug]/page/react-loadable-manifest.json +4 -4
  108. package/web/.next/server/app/projects/[slug]/page/server-reference-manifest.json +28 -28
  109. package/web/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  110. package/web/.next/server/app/projects/[slug]/pages/page/react-loadable-manifest.json +4 -4
  111. package/web/.next/server/app/projects/[slug]/pages/page/server-reference-manifest.json +12 -12
  112. package/web/.next/server/app/projects/[slug]/pages/page_client-reference-manifest.js +1 -1
  113. package/web/.next/server/app/projects/[slug]/settings/page/react-loadable-manifest.json +4 -4
  114. package/web/.next/server/app/projects/[slug]/settings/page/server-reference-manifest.json +18 -18
  115. package/web/.next/server/app/projects/[slug]/settings/page_client-reference-manifest.js +1 -1
  116. package/web/.next/server/app/projects/page/react-loadable-manifest.json +4 -4
  117. package/web/.next/server/app/projects/page/server-reference-manifest.json +10 -10
  118. package/web/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  119. package/web/.next/server/app/settings/page/react-loadable-manifest.json +4 -4
  120. package/web/.next/server/app/settings/page/server-reference-manifest.json +15 -15
  121. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  122. package/web/.next/server/app/skills/page/react-loadable-manifest.json +4 -4
  123. package/web/.next/server/app/skills/page/server-reference-manifest.json +17 -17
  124. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  125. package/web/.next/server/app/supervisor/feature/[featureId]/page/react-loadable-manifest.json +4 -4
  126. package/web/.next/server/app/supervisor/feature/[featureId]/page/server-reference-manifest.json +10 -10
  127. package/web/.next/server/app/supervisor/feature/[featureId]/page_client-reference-manifest.js +1 -1
  128. package/web/.next/server/app/supervisor/page/react-loadable-manifest.json +4 -4
  129. package/web/.next/server/app/supervisor/page/server-reference-manifest.json +10 -10
  130. package/web/.next/server/app/supervisor/page_client-reference-manifest.js +1 -1
  131. package/web/.next/server/app/supervisor/repo/[repositoryId]/page/react-loadable-manifest.json +4 -4
  132. package/web/.next/server/app/supervisor/repo/[repositoryId]/page/server-reference-manifest.json +10 -10
  133. package/web/.next/server/app/supervisor/repo/[repositoryId]/page_client-reference-manifest.js +1 -1
  134. package/web/.next/server/app/tools/page/react-loadable-manifest.json +4 -4
  135. package/web/.next/server/app/tools/page/server-reference-manifest.json +15 -15
  136. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  137. package/web/.next/server/app/version/page/react-loadable-manifest.json +4 -4
  138. package/web/.next/server/app/version/page/server-reference-manifest.json +9 -9
  139. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  140. package/web/.next/server/chunks/[root-of-the-server]__10e976f3._.js +1 -1
  141. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_agent-questions_page_actions_4b694f8d.js +1 -1
  142. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_agent-questions_page_actions_4b694f8d.js.map +1 -1
  143. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_agents_[agentType]_page_actions_103679a6.js +1 -1
  144. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_agents_[agentType]_page_actions_103679a6.js.map +1 -1
  145. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_projects_[slug]_pages_page_actions_19d50f6c.js +1 -1
  146. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_projects_[slug]_pages_page_actions_19d50f6c.js.map +1 -1
  147. package/web/.next/server/chunks/ssr/744ca_web_app_projects_[slug]_items_[itemId]_work-item-detail-client_tsx_d2e02407._.js +1 -1
  148. package/web/.next/server/chunks/ssr/744ca_web_app_projects_[slug]_items_[itemId]_work-item-detail-client_tsx_d2e02407._.js.map +1 -1
  149. package/web/.next/server/chunks/ssr/744ca_web_app_projects_[slug]_settings_project-settings-client_tsx_e8b85ddc._.js +1 -1
  150. package/web/.next/server/chunks/ssr/744ca_web_app_projects_[slug]_settings_project-settings-client_tsx_e8b85ddc._.js.map +1 -1
  151. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
  152. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  153. package/web/.next/server/chunks/ssr/744ca_web_components_features_applications_applications-page-client_tsx_d0db9938._.js +1 -1
  154. package/web/.next/server/chunks/ssr/744ca_web_components_features_applications_applications-page-client_tsx_d0db9938._.js.map +1 -1
  155. package/web/.next/server/chunks/ssr/[root-of-the-server]__0af8610a._.js +3 -3
  156. package/web/.next/server/chunks/ssr/[root-of-the-server]__0af8610a._.js.map +1 -1
  157. package/web/.next/server/chunks/ssr/[root-of-the-server]__0b652a2f._.js +1 -1
  158. package/web/.next/server/chunks/ssr/{[root-of-the-server]__8b73253b._.js → [root-of-the-server]__2e388ba3._.js} +2 -2
  159. package/web/.next/server/chunks/ssr/{[root-of-the-server]__8b73253b._.js.map → [root-of-the-server]__2e388ba3._.js.map} +1 -1
  160. package/web/.next/server/chunks/ssr/[root-of-the-server]__56cf47e7._.js +1 -1
  161. package/web/.next/server/chunks/ssr/[root-of-the-server]__56cf47e7._.js.map +1 -1
  162. package/web/.next/server/chunks/ssr/[root-of-the-server]__648730d4._.js +1 -1
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__68df6415._.js +1 -1
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__68df6415._.js.map +1 -1
  165. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bc6bf96._.js +1 -1
  166. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bc6bf96._.js.map +1 -1
  167. package/web/.next/server/chunks/ssr/[root-of-the-server]__9852cb08._.js +2 -2
  168. package/web/.next/server/chunks/ssr/[root-of-the-server]__9852cb08._.js.map +1 -1
  169. package/web/.next/server/chunks/ssr/[root-of-the-server]__a1167cec._.js +1 -1
  170. package/web/.next/server/chunks/ssr/[root-of-the-server]__a1167cec._.js.map +1 -1
  171. package/web/.next/server/chunks/ssr/[root-of-the-server]__a12d0ad7._.js +3 -0
  172. package/web/.next/server/chunks/ssr/{[root-of-the-server]__52ca7f88._.js.map → [root-of-the-server]__a12d0ad7._.js.map} +1 -1
  173. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba699bec._.js +1 -1
  174. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba699bec._.js.map +1 -1
  175. package/web/.next/server/chunks/ssr/[root-of-the-server]__e0741ee1._.js +1 -1
  176. package/web/.next/server/chunks/ssr/[root-of-the-server]__e0fa59e6._.js +1 -1
  177. package/web/.next/server/chunks/ssr/[root-of-the-server]__e0fa59e6._.js.map +1 -1
  178. package/web/.next/server/chunks/ssr/[root-of-the-server]__ea26ff90._.js +3 -3
  179. package/web/.next/server/chunks/ssr/[root-of-the-server]__ff0095e3._.js +1 -1
  180. package/web/.next/server/chunks/ssr/_07036593._.js +1 -1
  181. package/web/.next/server/chunks/ssr/_07036593._.js.map +1 -1
  182. package/web/.next/server/chunks/ssr/_0d2a7595._.js +1 -1
  183. package/web/.next/server/chunks/ssr/_0d2a7595._.js.map +1 -1
  184. package/web/.next/server/chunks/ssr/_101de7c3._.js +1 -1
  185. package/web/.next/server/chunks/ssr/_101de7c3._.js.map +1 -1
  186. package/web/.next/server/chunks/ssr/{_db111d21._.js → _10f54ace._.js} +2 -2
  187. package/web/.next/server/chunks/ssr/{_db111d21._.js.map → _10f54ace._.js.map} +1 -1
  188. package/web/.next/server/chunks/ssr/_24fca3cf._.js +1 -1
  189. package/web/.next/server/chunks/ssr/_24fca3cf._.js.map +1 -1
  190. package/web/.next/server/chunks/ssr/{_6ff832ad._.js → _2759af76._.js} +2 -2
  191. package/web/.next/server/chunks/ssr/{_6ff832ad._.js.map → _2759af76._.js.map} +1 -1
  192. package/web/.next/server/chunks/ssr/_2bc48f3d._.js +1 -1
  193. package/web/.next/server/chunks/ssr/_2bc48f3d._.js.map +1 -1
  194. package/web/.next/server/chunks/ssr/{_fb539286._.js → _2bef1982._.js} +2 -2
  195. package/web/.next/server/chunks/ssr/{_fb539286._.js.map → _2bef1982._.js.map} +1 -1
  196. package/web/.next/server/chunks/ssr/_32f66845._.js +1 -1
  197. package/web/.next/server/chunks/ssr/_408848e6._.js +1 -1
  198. package/web/.next/server/chunks/ssr/_408848e6._.js.map +1 -1
  199. package/web/.next/server/chunks/ssr/_40e02782._.js +1 -1
  200. package/web/.next/server/chunks/ssr/_40e02782._.js.map +1 -1
  201. package/web/.next/server/chunks/ssr/_486d45d6._.js +1 -1
  202. package/web/.next/server/chunks/ssr/_486d45d6._.js.map +1 -1
  203. package/web/.next/server/chunks/ssr/{_824d5772._.js → _498cba11._.js} +2 -2
  204. package/web/.next/server/chunks/ssr/{_824d5772._.js.map → _498cba11._.js.map} +1 -1
  205. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  206. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  207. package/web/.next/server/chunks/ssr/_5cbb0e22._.js +1 -1
  208. package/web/.next/server/chunks/ssr/_5cbb0e22._.js.map +1 -1
  209. package/web/.next/server/chunks/ssr/{_5a3edc88._.js → _673be4f1._.js} +2 -2
  210. package/web/.next/server/chunks/ssr/{_5a3edc88._.js.map → _673be4f1._.js.map} +1 -1
  211. package/web/.next/server/chunks/ssr/_7ba67729._.js +1 -1
  212. package/web/.next/server/chunks/ssr/_7ba67729._.js.map +1 -1
  213. package/web/.next/server/chunks/ssr/_805ae1aa._.js +1 -1
  214. package/web/.next/server/chunks/ssr/_805ae1aa._.js.map +1 -1
  215. package/web/.next/server/chunks/ssr/_87cf18c3._.js +1 -1
  216. package/web/.next/server/chunks/ssr/_87cf18c3._.js.map +1 -1
  217. package/web/.next/server/chunks/ssr/_8a700ff4._.js +1 -1
  218. package/web/.next/server/chunks/ssr/_8a700ff4._.js.map +1 -1
  219. package/web/.next/server/chunks/ssr/_95b97274._.js +1 -1
  220. package/web/.next/server/chunks/ssr/_95b97274._.js.map +1 -1
  221. package/web/.next/server/chunks/ssr/{_fbcfaf3a._.js → _9d18d1b1._.js} +2 -2
  222. package/web/.next/server/chunks/ssr/{_fbcfaf3a._.js.map → _9d18d1b1._.js.map} +1 -1
  223. package/web/.next/server/chunks/ssr/{_70ff64a1._.js → _a93687e6._.js} +2 -2
  224. package/web/.next/server/chunks/ssr/{_70ff64a1._.js.map → _a93687e6._.js.map} +1 -1
  225. package/web/.next/server/chunks/ssr/_c2e196ee._.js +1 -1
  226. package/web/.next/server/chunks/ssr/_c2e196ee._.js.map +1 -1
  227. package/web/.next/server/chunks/ssr/_ca3b7bf7._.js +1 -1
  228. package/web/.next/server/chunks/ssr/_ca3b7bf7._.js.map +1 -1
  229. package/web/.next/server/chunks/ssr/_d53224a9._.js +1 -1
  230. package/web/.next/server/chunks/ssr/_d53224a9._.js.map +1 -1
  231. package/web/.next/server/chunks/ssr/_d573dcc2._.js +1 -1
  232. package/web/.next/server/chunks/ssr/_e2671e14._.js +1 -1
  233. package/web/.next/server/chunks/ssr/_e2671e14._.js.map +1 -1
  234. package/web/.next/server/chunks/ssr/_ecd45b17._.js +1 -1
  235. package/web/.next/server/chunks/ssr/_ecd45b17._.js.map +1 -1
  236. package/web/.next/server/chunks/ssr/{_f0d45e47._.js → _f46d2018._.js} +2 -2
  237. package/web/.next/server/chunks/ssr/{_f0d45e47._.js.map → _f46d2018._.js.map} +1 -1
  238. package/web/.next/server/chunks/ssr/_f602cc9f._.js +1 -1
  239. package/web/.next/server/chunks/ssr/_f602cc9f._.js.map +1 -1
  240. package/web/.next/server/chunks/ssr/{_20a56008._.js → _f71954a5._.js} +2 -2
  241. package/web/.next/server/chunks/ssr/{_20a56008._.js.map → _f71954a5._.js.map} +1 -1
  242. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  243. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  244. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  245. package/web/.next/server/chunks/ssr/src_presentation_web_0e291f0b._.js +1 -1
  246. package/web/.next/server/chunks/ssr/src_presentation_web_0e291f0b._.js.map +1 -1
  247. package/web/.next/server/chunks/ssr/{src_presentation_web_40673f0c._.js → src_presentation_web_16c83ab4._.js} +2 -2
  248. package/web/.next/server/chunks/ssr/{src_presentation_web_40673f0c._.js.map → src_presentation_web_16c83ab4._.js.map} +1 -1
  249. package/web/.next/server/chunks/ssr/src_presentation_web_1d8d177f._.js +1 -1
  250. package/web/.next/server/chunks/ssr/src_presentation_web_1d8d177f._.js.map +1 -1
  251. package/web/.next/server/chunks/ssr/src_presentation_web_450b58fc._.js +1 -1
  252. package/web/.next/server/chunks/ssr/src_presentation_web_450b58fc._.js.map +1 -1
  253. package/web/.next/server/chunks/ssr/src_presentation_web_47727150._.js +1 -1
  254. package/web/.next/server/chunks/ssr/src_presentation_web_47727150._.js.map +1 -1
  255. package/web/.next/server/chunks/ssr/src_presentation_web_64fcfc84._.js +1 -1
  256. package/web/.next/server/chunks/ssr/src_presentation_web_64fcfc84._.js.map +1 -1
  257. package/web/.next/server/chunks/ssr/src_presentation_web_74b7bdb2._.js +1 -1
  258. package/web/.next/server/chunks/ssr/src_presentation_web_74b7bdb2._.js.map +1 -1
  259. package/web/.next/server/chunks/ssr/src_presentation_web_82aeca34._.js +1 -1
  260. package/web/.next/server/chunks/ssr/src_presentation_web_82aeca34._.js.map +1 -1
  261. package/web/.next/server/chunks/ssr/src_presentation_web_8a564d47._.js +1 -1
  262. package/web/.next/server/chunks/ssr/src_presentation_web_8a564d47._.js.map +1 -1
  263. package/web/.next/server/chunks/ssr/src_presentation_web_9a543843._.js +1 -1
  264. package/web/.next/server/chunks/ssr/src_presentation_web_9a543843._.js.map +1 -1
  265. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_f4f3fad9.js +1 -1
  266. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_f4f3fad9.js.map +1 -1
  267. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_agents_page_actions_d4bd4711.js +1 -1
  268. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_agents_page_actions_d4bd4711.js.map +1 -1
  269. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_onboarding_page_actions_bb695e8d.js +1 -1
  270. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_onboarding_page_actions_bb695e8d.js.map +1 -1
  271. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_page_actions_ac47e420.js +1 -1
  272. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_page_actions_ac47e420.js.map +1 -1
  273. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_projects_page_actions_c91a23a8.js +1 -1
  274. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_projects_page_actions_c91a23a8.js.map +1 -1
  275. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_63c2d912.js +1 -1
  276. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_63c2d912.js.map +1 -1
  277. package/web/.next/server/chunks/ssr/src_presentation_web_a53a3da6._.js +1 -1
  278. package/web/.next/server/chunks/ssr/src_presentation_web_a53a3da6._.js.map +1 -1
  279. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_246617fe._.js +3 -3
  280. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_adopt-local-directory_ts_75f1f28c._.js +1 -1
  281. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_adopt-local-directory_ts_75f1f28c._.js.map +1 -1
  282. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_9453ce8b._.js +1 -1
  283. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-directory_ts_1209d917._.js +1 -1
  284. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-directory_ts_1209d917._.js.map +1 -1
  285. package/web/.next/server/chunks/ssr/src_presentation_web_app_features_feature-tree-page-client_tsx_34c5cbbf._.js +1 -1
  286. package/web/.next/server/chunks/ssr/src_presentation_web_b1b3c26c._.js +1 -1
  287. package/web/.next/server/chunks/ssr/src_presentation_web_b1b3c26c._.js.map +1 -1
  288. package/web/.next/server/chunks/ssr/src_presentation_web_b98a4353._.js +1 -1
  289. package/web/.next/server/chunks/ssr/src_presentation_web_b98a4353._.js.map +1 -1
  290. package/web/.next/server/chunks/ssr/src_presentation_web_c96ca051._.js +1 -1
  291. package/web/.next/server/chunks/ssr/src_presentation_web_c96ca051._.js.map +1 -1
  292. package/web/.next/server/chunks/ssr/{src_presentation_web_e812a69b._.js → src_presentation_web_cb0d2c28._.js} +2 -2
  293. package/web/.next/server/chunks/ssr/{src_presentation_web_e812a69b._.js.map → src_presentation_web_cb0d2c28._.js.map} +1 -1
  294. package/web/.next/server/chunks/ssr/src_presentation_web_components_66643378._.js +1 -1
  295. package/web/.next/server/chunks/ssr/src_presentation_web_components_66643378._.js.map +1 -1
  296. package/web/.next/server/chunks/ssr/src_presentation_web_components_agent-editor_agent-editor-tabs_tsx_d5a954b4._.js +1 -1
  297. package/web/.next/server/chunks/ssr/src_presentation_web_components_agent-editor_agent-editor-tabs_tsx_d5a954b4._.js.map +1 -1
  298. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
  299. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
  300. package/web/.next/server/chunks/ssr/src_presentation_web_d3858f16._.js +1 -1
  301. package/web/.next/server/chunks/ssr/src_presentation_web_d3858f16._.js.map +1 -1
  302. package/web/.next/server/chunks/ssr/src_presentation_web_d7f8130c._.js +1 -1
  303. package/web/.next/server/chunks/ssr/src_presentation_web_d7f8130c._.js.map +1 -1
  304. package/web/.next/server/chunks/ssr/src_presentation_web_dddd8ccd._.js +1 -1
  305. package/web/.next/server/chunks/ssr/src_presentation_web_dddd8ccd._.js.map +1 -1
  306. package/web/.next/server/chunks/ssr/src_presentation_web_e13d58b0._.js +1 -1
  307. package/web/.next/server/chunks/ssr/src_presentation_web_e13d58b0._.js.map +1 -1
  308. package/web/.next/server/chunks/ssr/src_presentation_web_ee94a9aa._.js +1 -1
  309. package/web/.next/server/chunks/ssr/src_presentation_web_ee94a9aa._.js.map +1 -1
  310. package/web/.next/server/chunks/ssr/src_presentation_web_f0fcfdff._.js +1 -1
  311. package/web/.next/server/chunks/ssr/src_presentation_web_f0fcfdff._.js.map +1 -1
  312. package/web/.next/server/chunks/ssr/src_presentation_web_f17e8516._.js +1 -1
  313. package/web/.next/server/chunks/ssr/src_presentation_web_f17e8516._.js.map +1 -1
  314. package/web/.next/server/chunks/ssr/src_presentation_web_f7180fec._.js +1 -1
  315. package/web/.next/server/chunks/ssr/src_presentation_web_f7180fec._.js.map +1 -1
  316. package/web/.next/server/pages/500.html +2 -2
  317. package/web/.next/server/server-reference-manifest.js +1 -1
  318. package/web/.next/server/server-reference-manifest.json +111 -111
  319. package/web/.next/static/chunks/{5faa828877b1e669.js → 03dda23205877d8b.js} +1 -1
  320. package/web/.next/static/chunks/{4bf4f333302e24a4.js → 054e3a5f5ff4db71.js} +1 -1
  321. package/web/.next/static/chunks/{a868014dbe1b4e42.js → 06e58041911c290b.js} +1 -1
  322. package/web/.next/static/chunks/{b5ff852fee23795d.js → 089ef5b749d79ebd.js} +1 -1
  323. package/web/.next/static/chunks/{1a093b13a9d6952e.js → 0d106010c498c198.js} +2 -2
  324. package/web/.next/static/chunks/193e5a0540757f5e.js +1 -0
  325. package/web/.next/static/chunks/{9abc3e68af98e636.js → 25111a2f2597f500.js} +1 -1
  326. package/web/.next/static/chunks/285e724d07901ef6.js +1 -0
  327. package/web/.next/static/chunks/{3c396f63ebefe875.js → 2b2bfc0465b18a7d.js} +1 -1
  328. package/web/.next/static/chunks/{6af99a08ccacdbce.js → 2b436562e69d2827.js} +1 -1
  329. package/web/.next/static/chunks/{8c96a835b3b0dc44.js → 2e3844d0ac487ac7.js} +1 -1
  330. package/web/.next/static/chunks/325859b8a9482427.js +1 -0
  331. package/web/.next/static/chunks/{2773e7b2587bc9cc.js → 44ab458ceb89d85d.js} +1 -1
  332. package/web/.next/static/chunks/4fdf36904f5421a6.js +1 -0
  333. package/web/.next/static/chunks/59004c65d552581c.js +1 -0
  334. package/web/.next/static/chunks/{0edcdc8a2dd06b7a.js → 5c4837e88a3431b8.js} +1 -1
  335. package/web/.next/static/chunks/{a131f868af7f1f7c.js → 74cdd562eb663f72.js} +1 -1
  336. package/web/.next/static/chunks/{0315591c972888a6.js → 7670d76d4ee743e6.js} +1 -1
  337. package/web/.next/static/chunks/{02d88da9fd656fcd.js → 83fc784ce05a701e.js} +1 -1
  338. package/web/.next/static/chunks/{460cedaa85c821e7.js → 8dd4fdd20b103a66.js} +1 -1
  339. package/web/.next/static/chunks/9336bdc7fc319282.js +1 -0
  340. package/web/.next/static/chunks/9d285565922b2de7.js +1 -0
  341. package/web/.next/static/chunks/{45eeca36eabbed23.js → 9f7f2a11937d87eb.js} +1 -1
  342. package/web/.next/static/chunks/{c3931fdbae836be6.js → a7c7bcfb6f7696a3.js} +1 -1
  343. package/web/.next/static/chunks/{9f7985e2a73929a2.js → a8f57d2a12849f32.js} +1 -1
  344. package/web/.next/static/chunks/{0e1c933065a1100a.js → abe98954ccdf29db.js} +1 -1
  345. package/web/.next/static/chunks/{4378715fa2b5e7de.js → b05808da85e8b34c.js} +1 -1
  346. package/web/.next/static/chunks/{b5dc7979d66caa38.js → b5f83e5e1dad23d5.js} +1 -1
  347. package/web/.next/static/chunks/{6d2074fa3453d333.js → b8293a56f257e5a2.js} +1 -1
  348. package/web/.next/static/chunks/{bc5b87e4068ba11d.js → c61c5e97c76dc733.js} +1 -1
  349. package/web/.next/static/chunks/c6b411bf31744ca7.js +1 -0
  350. package/web/.next/static/chunks/{bdaa907bf3d1d932.js → c732d6cc4c5e4343.js} +1 -1
  351. package/web/.next/static/chunks/{25a200f055ae5cba.js → d214d6a670f48d79.js} +1 -1
  352. package/web/.next/static/chunks/{6901861cb53ab483.js → d7b17a93a26e97c8.js} +1 -1
  353. package/web/.next/static/chunks/{a0325f77bbccc63d.js → d8f14fac959a6bd0.js} +1 -1
  354. package/web/.next/static/chunks/{24ea54516dc249c0.js → d98912f5b6cf4938.js} +1 -1
  355. package/web/.next/static/chunks/{21500b3fe3754296.js → df79667c16344317.js} +1 -1
  356. package/web/.next/static/chunks/{05e8df10619fb980.js → ec8f19328ad1ecd4.js} +1 -1
  357. package/web/.next/static/chunks/{e6e6ba783b2e4d14.js → f0157331838ac962.js} +1 -1
  358. package/web/.next/static/chunks/{c687ed21b9518d73.js → f757d865fae71faf.js} +1 -1
  359. package/web/.next/static/chunks/fb3cbb7f575a7128.js +1 -0
  360. package/web/.next/server/chunks/ssr/[root-of-the-server]__52ca7f88._.js +0 -3
  361. package/web/.next/static/chunks/03d7b81c2554d52f.js +0 -1
  362. package/web/.next/static/chunks/15acdaaea57bb459.js +0 -1
  363. package/web/.next/static/chunks/39fe1c1397d5483b.js +0 -1
  364. package/web/.next/static/chunks/495883829026f13f.js +0 -1
  365. package/web/.next/static/chunks/4b3a4f416a6eb1ac.js +0 -1
  366. package/web/.next/static/chunks/4b4160f36cf2a3d6.js +0 -1
  367. package/web/.next/static/chunks/7269537b2188650d.js +0 -1
  368. package/web/.next/static/chunks/b1534b2f3d814fef.js +0 -1
  369. package/web/.next/static/chunks/f6dc1ba364203bb2.js +0 -1
  370. /package/web/.next/static/{My4IQDygZ4BFTXkkKanja → 9zd-B2rWybTaAgE74IKiK}/_buildManifest.js +0 -0
  371. /package/web/.next/static/{My4IQDygZ4BFTXkkKanja → 9zd-B2rWybTaAgE74IKiK}/_clientMiddlewareManifest.json +0 -0
  372. /package/web/.next/static/{My4IQDygZ4BFTXkkKanja → 9zd-B2rWybTaAgE74IKiK}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/terminal.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/external-link.ts","../../../../../../../src/presentation/web/components/ui/dialog.tsx","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/play.ts","../../../../../../../src/presentation/web/hooks/deployment-status-provider.tsx","../../../../../../../src/presentation/web/app/actions/data%3A8ff2c2%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A8971d4%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A1007b3%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3Ad37b7f%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A449bfa%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/hooks/deployment-status-store.ts","../../../../../../../src/presentation/web/hooks/use-deploy-action.ts","../../../../../../../src/presentation/web/components/common/base-drawer/base-drawer.tsx","../../../../../../../src/presentation/web/components/common/action-button/action-button.tsx","../../../../../../../src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.tsx","../../../../../../../src/presentation/web/components/common/server-log-viewer/server-log-viewer.tsx","../../../../../../../src/presentation/web/app/actions/data%3Ad30714%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/hooks/use-deployment-logs.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 19h8', key: 'baeox8' }],\n ['path', { d: 'm4 17 6-6-6-6', key: '1yngyt' }],\n];\n\n/**\n * @component @name Terminal\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTloOCIgLz4KICA8cGF0aCBkPSJtNCAxNyA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/terminal\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Terminal = createLucideIcon('terminal', __iconNode);\n\nexport default Terminal;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M15 3h6v6', key: '1q9fwt' }],\n ['path', { d: 'M10 14 21 3', key: 'gplh6r' }],\n ['path', { d: 'M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6', key: 'a6xqqp' }],\n];\n\n/**\n * @component @name ExternalLink\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgM2g2djYiIC8+CiAgPHBhdGggZD0iTTEwIDE0IDIxIDMiIC8+CiAgPHBhdGggZD0iTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/external-link\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ExternalLink = createLucideIcon('external-link', __iconNode);\n\nexport default ExternalLink;\n","'use client';\n\nimport * as React from 'react';\nimport { Dialog as DialogPrimitive } from 'radix-ui';\nimport { X } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, onClick, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 fixed inset-0 z-50 bg-black/80 duration-150',\n className\n )}\n onClick={(e) => {\n // Prevent overlay clicks from propagating to document-level handlers\n // (e.g. BaseDrawer outside-click) — only the dialog should dismiss.\n e.stopPropagation();\n onClick?.(e);\n }}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'bg-background data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border p-6 shadow-lg duration-150 sm:rounded-lg',\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute end-4 top-4 cursor-pointer rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn('flex flex-col space-y-1.5 text-center sm:text-start', className)}\n {...props}\n />\n);\nDialogHeader.displayName = 'DialogHeader';\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)}\n {...props}\n />\n);\nDialogFooter.displayName = 'DialogFooter';\n\nconst DialogTitle = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-lg leading-none font-semibold tracking-tight', className)}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z',\n key: '10ikf1',\n },\n ],\n];\n\n/**\n * @component @name Play\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSA1YTIgMiAwIDAgMSAzLjAwOC0xLjcyOGwxMS45OTcgNi45OThhMiAyIDAgMCAxIC4wMDMgMy40NThsLTEyIDdBMiAyIDAgMCAxIDUgMTl6IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/play\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Play = createLucideIcon('play', __iconNode);\n\nexport default Play;\n","'use client';\n\n/**\n * DeploymentStatusProvider\n *\n * Wraps the dashboard with a shared deployment-status store seeded from\n * SSR data (ListDeploymentsUseCase via get-graph-data). All components\n * that call `useDeployAction(targetId)` subscribe to the same store, so\n * the \"click Run on node → tab shows URL instantly\" bug and the\n * \"URL lost after refresh\" bug are both resolved by construction.\n *\n * All business logic lives in use cases on the backend. This provider\n * owns only UI state transitions: which entries are hydrated, which are\n * loading, which have errors, and which need polling.\n */\n\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n type ReactNode,\n} from 'react';\nimport type { DeploymentStatusEntry } from '@shepai/core/application/ports/output/services/deployment-service.interface';\nimport { DeploymentState } from '@shepai/core/domain/generated/output';\nimport { deployFeature } from '@/app/actions/deploy-feature';\nimport { deployRepository } from '@/app/actions/deploy-repository';\nimport { deployApplication } from '@/app/actions/deploy-application';\nimport { stopDeployment } from '@/app/actions/stop-deployment';\nimport { getDeploymentStatus } from '@/app/actions/get-deployment-status';\nimport { createLogger } from '@/lib/logger';\nimport {\n DeploymentStatusStore,\n type DeploymentEntryState,\n EMPTY_ENTRY,\n} from './deployment-status-store';\n\nconst log = createLogger('[DeploymentStatusProvider]');\n\nconst POLL_INTERVAL_MS = 3000;\nconst ACTIVE_STATES: ReadonlySet<DeploymentState> = new Set([\n DeploymentState.Booting,\n DeploymentState.Ready,\n]);\n\nexport interface DeployActionInput {\n targetId: string;\n targetType: 'feature' | 'repository' | 'application';\n repositoryPath: string;\n branch?: string;\n}\n\ninterface DeploymentContextValue {\n store: DeploymentStatusStore;\n deploy: (input: DeployActionInput) => Promise<void>;\n stop: (targetId: string) => Promise<void>;\n ensureHydrated: (targetId: string) => void;\n}\n\nconst DeploymentStatusContext = createContext<DeploymentContextValue | null>(null);\n\nexport function DeploymentStatusProvider({\n initialDeployments,\n children,\n}: {\n initialDeployments: DeploymentStatusEntry[];\n children: ReactNode;\n}) {\n // One store per provider instance. Stable across renders.\n const storeRef = useRef<DeploymentStatusStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = new DeploymentStatusStore();\n storeRef.current.hydrate(initialDeployments);\n }\n const store = storeRef.current;\n\n // Re-hydrate when SSR data changes (e.g. after graph-data poll).\n useEffect(() => {\n store.hydrate(initialDeployments);\n }, [initialDeployments, store]);\n\n // ── Polling ──────────────────────────────────────────────────────────\n // One interval per targetId. Started when an entry becomes active\n // (Booting/Ready) and stopped when it is no longer active.\n const pollIntervalsRef = useRef<Map<string, ReturnType<typeof setInterval>>>(new Map());\n\n const stopPolling = useCallback((targetId: string) => {\n const existing = pollIntervalsRef.current.get(targetId);\n if (existing) {\n clearInterval(existing);\n pollIntervalsRef.current.delete(targetId);\n }\n }, []);\n\n const startPolling = useCallback(\n (targetId: string) => {\n if (pollIntervalsRef.current.has(targetId)) return;\n const interval = setInterval(async () => {\n let result;\n try {\n result = await getDeploymentStatus(targetId);\n } catch (err) {\n log.warn(`poll failed for \"${targetId}\"`, err);\n store.setStatus(targetId, null);\n stopPolling(targetId);\n return;\n }\n if (!result || result.state === DeploymentState.Stopped) {\n store.setStatus(targetId, null);\n stopPolling(targetId);\n return;\n }\n store.setStatus(targetId, result);\n }, POLL_INTERVAL_MS);\n pollIntervalsRef.current.set(targetId, interval);\n },\n [store, stopPolling]\n );\n\n // Reconcile polling with store state on every change.\n useEffect(() => {\n const intervals = pollIntervalsRef.current;\n const reconcile = () => {\n // Stop polls for entries that are no longer active.\n for (const [targetId] of intervals) {\n const entry = store.getEntry(targetId);\n if (!entry.status || !ACTIVE_STATES.has(entry.status)) {\n stopPolling(targetId);\n }\n }\n };\n const unsubscribe = store.subscribeAll(reconcile);\n return () => {\n unsubscribe();\n for (const [, interval] of intervals) clearInterval(interval);\n intervals.clear();\n };\n }, [store, stopPolling]);\n\n // ── Mount hydration per targetId ─────────────────────────────────────\n // When a hook subscribes to a targetId that was not in the SSR hydration\n // (e.g. a stale page with deployments started in another tab), fetch its\n // status once from the backend via getDeploymentStatus → use case.\n const ensureHydrated = useCallback(\n (targetId: string) => {\n if (!targetId) return;\n const entry = store.getEntry(targetId);\n if (entry.hydrated) return;\n // After the first SSR seed runs, ListDeploymentsUseCase has provided\n // the complete deployment universe — any targetId not in that list\n // is definitively idle, so there is no need to ask the server again.\n // Just mark this id hydrated locally and skip the network call.\n // This kills the burst of N server-action POSTs that happened on\n // canvas mount when most nodes had no active deployment.\n if (store.isFullyHydrated()) {\n store.update(targetId, { hydrated: true });\n return;\n }\n // Mark hydrated immediately to dedupe concurrent callers.\n store.update(targetId, { hydrated: true });\n void (async () => {\n try {\n const result = await getDeploymentStatus(targetId);\n store.setStatus(targetId, result);\n if (result && ACTIVE_STATES.has(result.state)) startPolling(targetId);\n } catch (err) {\n log.warn(`ensureHydrated failed for \"${targetId}\"`, err);\n }\n })();\n },\n [store, startPolling]\n );\n\n // ── Actions ──────────────────────────────────────────────────────────\n const deploy = useCallback(\n async (input: DeployActionInput) => {\n store.update(input.targetId, { deployLoading: true, deployError: null });\n try {\n const result =\n input.targetType === 'feature'\n ? await deployFeature(input.targetId)\n : input.targetType === 'application'\n ? await deployApplication(input.targetId)\n : await deployRepository(input.repositoryPath);\n if (!result.success) {\n store.update(input.targetId, {\n deployLoading: false,\n deployError: result.error ?? 'An unexpected error occurred',\n });\n return;\n }\n store.update(input.targetId, {\n deployLoading: false,\n status: result.state ?? null,\n url: null,\n hydrated: true,\n targetType: input.targetType,\n });\n startPolling(input.targetId);\n } catch (err) {\n const message = err instanceof Error ? err.message : 'An unexpected error occurred';\n store.update(input.targetId, { deployLoading: false, deployError: message });\n }\n },\n [store, startPolling]\n );\n\n const stop = useCallback(\n async (targetId: string) => {\n if (!targetId) return;\n store.update(targetId, { stopLoading: true });\n try {\n const result = await stopDeployment(targetId);\n if (result.success) {\n stopPolling(targetId);\n store.update(targetId, {\n stopLoading: false,\n status: null,\n url: null,\n });\n } else {\n store.update(targetId, { stopLoading: false });\n }\n } catch (err) {\n log.warn('stop error (non-critical)', err);\n store.update(targetId, { stopLoading: false });\n }\n },\n [store, stopPolling]\n );\n\n const value = useMemo<DeploymentContextValue>(\n () => ({ store, deploy, stop, ensureHydrated }),\n [store, deploy, stop, ensureHydrated]\n );\n\n return (\n <DeploymentStatusContext.Provider value={value}>{children}</DeploymentStatusContext.Provider>\n );\n}\n\nexport function useDeploymentStatusContext(): DeploymentContextValue {\n const ctx = useContext(DeploymentStatusContext);\n if (!ctx) {\n throw new Error('useDeploymentStatusContext must be used within a <DeploymentStatusProvider>');\n }\n return ctx;\n}\n\n/**\n * Non-throwing variant used by presentational hooks (e.g. useDeployAction)\n * that may render inside Storybook or other isolated contexts without\n * a provider. Returns a stub store/actions that do nothing.\n */\nexport function useDeploymentStatusContextOptional(): DeploymentContextValue {\n const ctx = useContext(DeploymentStatusContext);\n if (ctx) return ctx;\n return FALLBACK_CONTEXT;\n}\n\nconst FALLBACK_STORE = new DeploymentStatusStore();\nconst FALLBACK_CONTEXT: DeploymentContextValue = {\n store: FALLBACK_STORE,\n deploy: async () => {\n /* no-op */\n },\n stop: async () => {\n /* no-op */\n },\n ensureHydrated: () => {\n /* no-op */\n },\n};\n\nexport { EMPTY_ENTRY, type DeploymentEntryState };\n","/* __next_internal_action_entry_do_not_use__ [{\"401846920f6fb739e32233d9d6a6df7945b8621c00\":\"deployFeature\"},\"src/presentation/web/app/actions/deploy-feature.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"401846920f6fb739e32233d9d6a6df7945b8621c00\",callServer,void 0,findSourceMapURL,\"deployFeature\");export{$$RSC_SERVER_ACTION_0 as deployFeature};","/* __next_internal_action_entry_do_not_use__ [{\"408a28f520d819792447d4b47d9b73a5ddf7296469\":\"deployRepository\"},\"src/presentation/web/app/actions/deploy-repository.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"408a28f520d819792447d4b47d9b73a5ddf7296469\",callServer,void 0,findSourceMapURL,\"deployRepository\");export{$$RSC_SERVER_ACTION_0 as deployRepository};","/* __next_internal_action_entry_do_not_use__ [{\"4005923232df16201d86b35c46dbbe719725cbcd26\":\"deployApplication\"},\"src/presentation/web/app/actions/deploy-application.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"4005923232df16201d86b35c46dbbe719725cbcd26\",callServer,void 0,findSourceMapURL,\"deployApplication\");export{$$RSC_SERVER_ACTION_0 as deployApplication};","/* __next_internal_action_entry_do_not_use__ [{\"409ab95b1ec58ad7dd578b018e11d5bd766839f8bc\":\"stopDeployment\"},\"src/presentation/web/app/actions/stop-deployment.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"409ab95b1ec58ad7dd578b018e11d5bd766839f8bc\",callServer,void 0,findSourceMapURL,\"stopDeployment\");export{$$RSC_SERVER_ACTION_0 as stopDeployment};","/* __next_internal_action_entry_do_not_use__ [{\"40ed3ea24841c9c4280513ab004dcdbce3d545bcdb\":\"getDeploymentStatus\"},\"src/presentation/web/app/actions/get-deployment-status.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40ed3ea24841c9c4280513ab004dcdbce3d545bcdb\",callServer,void 0,findSourceMapURL,\"getDeploymentStatus\");export{$$RSC_SERVER_ACTION_0 as getDeploymentStatus};","/**\n * Deployment Status Store\n *\n * External store (useSyncExternalStore-compatible) that holds the shared\n * deployment state keyed by targetId. Multiple components subscribed to\n * the same targetId see the same state — fixes the node/drawer-out-of-sync\n * bug and makes page-refresh hydration trivial.\n *\n * Mutation paths (deploy/stop/poll) go through server actions that wrap\n * use cases — this module stores state only and never contains business\n * logic.\n */\n\nimport type { DeploymentState } from '@shepai/core/domain/generated/output';\nimport type {\n DeploymentStatus,\n DeploymentStatusEntry,\n} from '@shepai/core/application/ports/output/services/deployment-service.interface';\n\nexport interface DeploymentEntryState {\n status: DeploymentState | null;\n url: string | null;\n targetType: string | null;\n /** Whether mount-hydration (listDeployments / getDeploymentStatus) has completed for this targetId. */\n hydrated: boolean;\n deployLoading: boolean;\n stopLoading: boolean;\n deployError: string | null;\n}\n\nexport const EMPTY_ENTRY: DeploymentEntryState = {\n status: null,\n url: null,\n targetType: null,\n hydrated: false,\n deployLoading: false,\n stopLoading: false,\n deployError: null,\n};\n\ntype Listener = () => void;\n\nexport class DeploymentStatusStore {\n private entries = new Map<string, DeploymentEntryState>();\n private listeners = new Map<string, Set<Listener>>();\n private globalListeners = new Set<Listener>();\n /**\n * Set true after the first SSR seed runs. Because `ListDeploymentsUseCase`\n * returns the full universe of currently-tracked deployments, any\n * targetId NOT present in that list is definitively idle — there is no\n * need to fire a per-node `getDeploymentStatus` server action on mount.\n * Without this flag, every canvas node (most of which have no\n * deployment) was triggering one POST /control-center on initial render,\n * producing the burst of 30+ server-action calls observed on dashboard\n * load.\n */\n private fullyHydrated = false;\n\n /** Has the store been seeded at least once from SSR? */\n isFullyHydrated(): boolean {\n return this.fullyHydrated;\n }\n\n /** Seed the store from SSR data (ListDeploymentsUseCase output). */\n hydrate(entries: DeploymentStatusEntry[]): void {\n // Mark every SSR entry as hydrated and merge into the map.\n const seen = new Set<string>();\n for (const entry of entries) {\n seen.add(entry.targetId);\n this.update(entry.targetId, {\n status: entry.state,\n url: entry.url,\n targetType: entry.targetType,\n hydrated: true,\n });\n }\n // Any previously tracked entries missing from the SSR list are stale —\n // mark them hydrated with null state so subscribers learn their\n // deployment is gone.\n for (const [targetId, existing] of this.entries) {\n if (!seen.has(targetId) && existing.hydrated && existing.status !== null) {\n this.update(targetId, { status: null, url: null });\n } else if (!seen.has(targetId) && !existing.hydrated) {\n this.update(targetId, { hydrated: true });\n }\n }\n this.fullyHydrated = true;\n }\n\n getEntry(targetId: string): DeploymentEntryState {\n return this.entries.get(targetId) ?? EMPTY_ENTRY;\n }\n\n update(targetId: string, patch: Partial<DeploymentEntryState>): void {\n const current = this.entries.get(targetId) ?? EMPTY_ENTRY;\n const next: DeploymentEntryState = { ...current, ...patch };\n this.entries.set(targetId, next);\n this.notify(targetId);\n }\n\n /** Apply a status snapshot (from a server action result) to a targetId. */\n setStatus(targetId: string, status: DeploymentStatus | null): void {\n if (status === null) {\n this.update(targetId, { status: null, url: null, hydrated: true });\n return;\n }\n this.update(targetId, {\n status: status.state,\n url: status.url,\n hydrated: true,\n });\n }\n\n subscribe(targetId: string, listener: Listener): () => void {\n let set = this.listeners.get(targetId);\n if (!set) {\n set = new Set();\n this.listeners.set(targetId, set);\n }\n set.add(listener);\n return () => {\n set?.delete(listener);\n if (set?.size === 0) this.listeners.delete(targetId);\n };\n }\n\n subscribeAll(listener: Listener): () => void {\n this.globalListeners.add(listener);\n return () => {\n this.globalListeners.delete(listener);\n };\n }\n\n private notify(targetId: string): void {\n const set = this.listeners.get(targetId);\n if (set) for (const l of set) l();\n for (const l of this.globalListeners) l();\n }\n}\n","'use client';\n\n/**\n * useDeployAction\n *\n * Thin subscriber to the shared DeploymentStatusProvider, scoped to one\n * targetId. All components that call this hook with the same targetId\n * see the same state — a click on a node updates the drawer instantly,\n * and state survives page refresh via SSR hydration.\n *\n * Business logic (start/stop/status) lives in backend use cases — this\n * hook contains zero decision-making code.\n */\n\nimport { useEffect, useSyncExternalStore, useCallback } from 'react';\nimport type { DeploymentState } from '@shepai/core/domain/generated/output';\nimport {\n useDeploymentStatusContextOptional,\n type DeployActionInput,\n} from './deployment-status-provider';\n\nexport type { DeployActionInput };\n\n/** Stable no-op unsubscribe for hooks called with a null input. */\nfunction noop(): void {\n /* no-op */\n}\n\nexport interface DeployActionState {\n deploy: () => Promise<void>;\n stop: () => Promise<void>;\n deployLoading: boolean;\n stopLoading: boolean;\n deployError: string | null;\n status: DeploymentState | null;\n url: string | null;\n}\n\nexport function useDeployAction(input: DeployActionInput | null): DeployActionState {\n const { store, deploy, stop, ensureHydrated } = useDeploymentStatusContextOptional();\n const targetId = input?.targetId ?? '';\n\n // Subscribe to the store entry for this targetId.\n const subscribe = useCallback(\n (listener: () => void) => {\n if (!targetId) return noop;\n return store.subscribe(targetId, listener);\n },\n [store, targetId]\n );\n const getSnapshot = useCallback(\n () => (targetId ? store.getEntry(targetId) : store.getEntry('')),\n [store, targetId]\n );\n const entry = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n // On mount (or when targetId changes), ensure the entry is hydrated.\n useEffect(() => {\n if (targetId) ensureHydrated(targetId);\n }, [targetId, ensureHydrated]);\n\n const handleDeploy = useCallback(async () => {\n if (!input) return;\n await deploy(input);\n }, [deploy, input]);\n\n const handleStop = useCallback(async () => {\n if (!targetId) return;\n await stop(targetId);\n }, [stop, targetId]);\n\n return {\n deploy: handleDeploy,\n stop: handleStop,\n deployLoading: entry.deployLoading,\n stopLoading: entry.stopLoading,\n deployError: entry.deployError,\n status: entry.status,\n url: entry.url,\n };\n}\n","'use client';\n\nimport { useRef, useEffect } from 'react';\nimport { XIcon, Play, Square } from 'lucide-react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\nimport { ActionButton } from '@/components/common/action-button';\nimport { DeploymentStatusBadge } from '@/components/common/deployment-status-badge';\nimport {\n Drawer,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerOverlay,\n DrawerTitle,\n DrawerDescription,\n} from '@/components/ui/drawer';\nimport { Separator } from '@/components/ui/separator';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { useTranslation } from 'react-i18next';\nimport { useDeployAction, type DeployActionInput } from '@/hooks/use-deploy-action';\nimport { useFeatureFlags } from '@/hooks/feature-flags-context';\n\nconst drawerVariants = cva('', {\n variants: {\n size: {\n sm: 'w-96',\n md: 'w-2xl',\n lg: 'w-[772px]',\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n});\n\nexport interface BaseDrawerProps extends VariantProps<typeof drawerVariants> {\n open: boolean;\n onClose: () => void;\n modal?: boolean;\n /** When true, clicking anywhere outside the drawer closes it, ignoring `data-no-drawer-close` guards. */\n dismissOnOutsideClick?: boolean;\n title?: string;\n header?: React.ReactNode;\n children: React.ReactNode;\n footer?: React.ReactNode;\n className?: string;\n 'data-testid'?: string;\n deployTarget?: DeployActionInput;\n}\n\nexport function BaseDrawer({\n open,\n onClose,\n modal = false,\n dismissOnOutsideClick = false,\n title = 'Drawer',\n size,\n header,\n children,\n footer,\n className,\n 'data-testid': testId,\n deployTarget,\n}: BaseDrawerProps) {\n const { i18n } = useTranslation();\n const featureFlags = useFeatureFlags();\n const contentRef = useRef<HTMLDivElement>(null);\n const drawerDirection = i18n.dir() === 'rtl' ? 'left' : 'right';\n\n // Close when clicking outside the drawer panel (no overlay needed — canvas stays draggable).\n // Uses `click` (not `pointerdown`) so canvas drags don't trigger this.\n useEffect(() => {\n if (!open || modal) return;\n\n const handleClick = (e: MouseEvent) => {\n const target = e.target as Element;\n // If the clicked element was unmounted by React before the event reached\n // the document (e.g. a \"Next\" button removed on the last step), it is no\n // longer in the DOM tree — treat it as an internal click, not an outside one.\n if (!document.body.contains(target)) return;\n if (contentRef.current?.contains(target)) return;\n // Don't close when clicking inside Radix overlays.\n // When dismissOnOutsideClick is false (default), also respect data-no-drawer-close guards.\n const ignoreSelector = dismissOnOutsideClick\n ? '[role=\"alertdialog\"], [role=\"dialog\"], [role=\"menu\"], [role=\"listbox\"], [data-radix-popper-content-wrapper]'\n : '[data-no-drawer-close], [role=\"alertdialog\"], [role=\"dialog\"], [role=\"menu\"], [role=\"listbox\"], [data-radix-popper-content-wrapper]';\n if (target.closest(ignoreSelector)) return;\n onClose();\n };\n\n document.addEventListener('click', handleClick);\n return () => document.removeEventListener('click', handleClick);\n }, [open, modal, onClose, dismissOnOutsideClick]);\n\n return (\n <Drawer\n direction={drawerDirection}\n modal={modal}\n handleOnly\n open={open}\n onOpenChange={(isOpen) => {\n if (!isOpen) onClose();\n }}\n >\n {modal ? <DrawerOverlay /> : null}\n <DrawerContent\n ref={contentRef}\n direction={drawerDirection}\n showCloseButton={false}\n className={cn(\n drawerVariants({ size }),\n 'bg-white/85 backdrop-blur-xl dark:bg-neutral-800/85',\n className\n )}\n data-testid={testId}\n onInteractOutside={modal ? undefined : (e) => e.preventDefault()}\n >\n {/* Visually hidden title & description required by Radix Dialog for accessibility */}\n <DrawerTitle asChild>\n <span className=\"sr-only\">{title}</span>\n </DrawerTitle>\n <DrawerDescription asChild>\n <span className=\"sr-only\">{title}</span>\n </DrawerDescription>\n\n {/* Close button */}\n <button\n type=\"button\"\n aria-label=\"Close\"\n onClick={onClose}\n className=\"ring-offset-background focus:ring-ring absolute end-3 top-2 z-50 rounded-sm p-1 opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden\"\n data-testid={testId ? `${testId}-close-button` : undefined}\n >\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </button>\n\n {/* Header slot */}\n {header ? <DrawerHeader className=\"shrink-0\">{header}</DrawerHeader> : null}\n\n {/* Separator between header and content — matches review drawer style */}\n {header ? <Separator /> : null}\n\n {/* Dev server bar — rendered when deployTarget is provided and env deploy is enabled */}\n {featureFlags.envDeploy && deployTarget ? <DeployBar deployTarget={deployTarget} /> : null}\n\n {/* Scrollable content area. Consumers should add p-4 for consistent spacing. */}\n {/* Footer components like DrawerActionBar typically include border-t. */}\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden\">{children}</div>\n\n {/* Footer slot */}\n {footer ? <DrawerFooter className=\"shrink-0\">{footer}</DrawerFooter> : null}\n </DrawerContent>\n </Drawer>\n );\n}\n\nfunction DeployBar({ deployTarget }: { deployTarget: DeployActionInput }) {\n const deployAction = useDeployAction(deployTarget);\n const isDeploymentActive = deployAction.status === 'Booting' || deployAction.status === 'Ready';\n\n return (\n <div data-testid=\"base-drawer-deploy-bar\" className=\"flex items-center gap-2 px-4 pt-3 pb-3\">\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span>\n <ActionButton\n label={isDeploymentActive ? 'Stop Dev Server' : 'Start Dev Server'}\n onClick={isDeploymentActive ? deployAction.stop : deployAction.deploy}\n loading={deployAction.deployLoading || deployAction.stopLoading}\n error={!!deployAction.deployError}\n icon={isDeploymentActive ? Square : Play}\n iconOnly\n variant=\"outline\"\n size=\"icon-sm\"\n />\n </span>\n </TooltipTrigger>\n <TooltipContent>\n {isDeploymentActive ? 'Stop Dev Server' : 'Start Dev Server'}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n {isDeploymentActive ? (\n <DeploymentStatusBadge\n status={deployAction.status}\n url={deployAction.url}\n targetId={deployTarget.targetId}\n />\n ) : null}\n </div>\n );\n}\n","'use client';\n\nimport type { LucideIcon } from 'lucide-react';\nimport { Loader2, CircleAlert } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { useSoundAction } from '@/hooks/use-sound-action';\n\nexport interface ActionButtonProps {\n label: string;\n onClick: () => void;\n loading: boolean;\n error: boolean;\n icon: LucideIcon;\n /** When true, omits label text — label is still used as aria-label. */\n iconOnly?: boolean;\n /** Button variant. @default 'outline' */\n variant?: 'outline' | 'ghost' | 'default' | 'destructive' | 'secondary' | 'link';\n /** Button size. @default 'sm' */\n size?: 'default' | 'xs' | 'sm' | 'lg' | 'icon' | 'icon-xs' | 'icon-sm' | 'icon-lg';\n}\n\nexport function ActionButton({\n label,\n onClick,\n loading,\n error,\n icon: Icon,\n iconOnly = false,\n variant = 'outline',\n size = 'sm',\n}: ActionButtonProps) {\n const clickSound = useSoundAction('click');\n\n const handleClick = () => {\n clickSound.play();\n onClick();\n };\n\n return (\n <Button\n variant={variant}\n size={size}\n aria-label={label}\n disabled={loading}\n onClick={handleClick}\n className={cn(\n 'gap-1.5',\n error && 'text-destructive hover:text-destructive',\n !error &&\n iconOnly &&\n variant === 'ghost' &&\n 'text-muted-foreground cursor-pointer rounded-full transition-colors hover:text-blue-500'\n )}\n >\n {loading ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : error ? (\n <CircleAlert className=\"size-4\" />\n ) : (\n <Icon className=\"size-4\" />\n )}\n {iconOnly ? null : label}\n </Button>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { Loader2, ExternalLink, Terminal } from 'lucide-react';\nimport { DeploymentState } from '@shepai/core/domain/generated/output';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { ServerLogViewer } from '@/components/common/server-log-viewer';\n\nexport interface DeploymentStatusBadgeProps {\n status: DeploymentState | null;\n url?: string | null;\n targetId?: string;\n}\n\nconst tbBtn =\n 'text-muted-foreground hover:bg-foreground/8 hover:text-foreground inline-flex size-7 items-center justify-center rounded-[3px]';\n\nexport function DeploymentStatusBadge({ status, url, targetId }: DeploymentStatusBadgeProps) {\n const [logViewerOpen, setLogViewerOpen] = useState(false);\n const showLogButton =\n targetId && (status === DeploymentState.Booting || status === DeploymentState.Ready);\n\n switch (status) {\n case DeploymentState.Booting:\n return (\n <>\n <div className=\"flex items-center gap-1 pl-1\">\n <Loader2 className=\"size-3 animate-spin text-blue-500\" />\n <span className=\"text-muted-foreground text-[11px]\">Starting...</span>\n {showLogButton ? (\n <TooltipProvider delayDuration={300}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n aria-label=\"View server logs\"\n className={tbBtn}\n onClick={(e) => {\n e.stopPropagation();\n setLogViewerOpen(true);\n }}\n >\n <Terminal className=\"size-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\" className=\"text-xs\">\n Server logs\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : null}\n </div>\n {showLogButton ? (\n <ServerLogViewer\n open={logViewerOpen}\n onOpenChange={setLogViewerOpen}\n targetId={targetId}\n />\n ) : null}\n </>\n );\n case DeploymentState.Ready:\n return (\n <>\n <div className=\"flex translate-y-px items-center gap-1 pl-1\">\n <span className=\"inline-block size-1.5 rounded-full bg-green-500\" />\n {url ? (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-0.5 text-[11px] text-green-600 hover:text-green-500 dark:text-green-400 dark:hover:text-green-300\"\n onClick={(e) => e.stopPropagation()}\n >\n {url}\n <ExternalLink className=\"size-2.5 shrink-0\" />\n </a>\n ) : (\n <span className=\"text-[11px] text-green-600 dark:text-green-400\">Ready</span>\n )}\n {showLogButton ? (\n <TooltipProvider delayDuration={300}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n aria-label=\"View server logs\"\n className={tbBtn}\n onClick={(e) => {\n e.stopPropagation();\n setLogViewerOpen(true);\n }}\n >\n <Terminal className=\"size-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\" className=\"text-xs\">\n Server logs\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : null}\n </div>\n {showLogButton ? (\n <ServerLogViewer\n open={logViewerOpen}\n onOpenChange={setLogViewerOpen}\n targetId={targetId}\n />\n ) : null}\n </>\n );\n default:\n return null;\n }\n}\n","'use client';\n\nimport { useRef, useEffect, useCallback } from 'react';\nimport { Terminal } from 'lucide-react';\nimport type { LogEntry } from '@shepai/core/application/ports/output/services/deployment-service.interface';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog';\nimport { useDeploymentLogs } from '@/hooks/use-deployment-logs';\n\nexport interface ServerLogViewerProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n targetId: string;\n}\n\nexport interface ServerLogViewerContentProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n logs: LogEntry[];\n isConnected: boolean;\n}\n\nconst AUTO_SCROLL_THRESHOLD = 50;\n\nexport function ServerLogViewer({ open, onOpenChange, targetId }: ServerLogViewerProps) {\n const { logs, isConnected } = useDeploymentLogs(open ? targetId : null);\n\n return (\n <ServerLogViewerContent\n open={open}\n onOpenChange={onOpenChange}\n logs={logs}\n isConnected={isConnected}\n />\n );\n}\n\nexport function ServerLogViewerContent({\n open,\n onOpenChange,\n logs,\n isConnected,\n}: ServerLogViewerContentProps) {\n const scrollRef = useRef<HTMLDivElement>(null);\n const isAtBottomRef = useRef(true);\n\n const handleScroll = useCallback(() => {\n const el = scrollRef.current;\n if (!el) return;\n isAtBottomRef.current =\n el.scrollTop + el.clientHeight >= el.scrollHeight - AUTO_SCROLL_THRESHOLD;\n }, []);\n\n useEffect(() => {\n if (isAtBottomRef.current && scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [logs]);\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n className=\"flex h-[calc(100vh-48px)] max-h-[calc(100vh-48px)] w-full max-w-[calc(100vw-48px)] flex-col gap-0 bg-zinc-950 p-0 text-zinc-100 sm:rounded-lg\"\n aria-describedby={undefined}\n >\n <DialogHeader className=\"flex flex-row items-center justify-between border-b border-zinc-800 px-4 py-3\">\n <div className=\"flex items-center gap-2\">\n <Terminal className=\"h-4 w-4 text-zinc-400\" />\n <DialogTitle className=\"text-sm font-medium text-zinc-100\">Server Logs</DialogTitle>\n </div>\n <div className=\"flex items-center gap-2 pe-8\">\n <span\n className={`inline-block h-2 w-2 rounded-full ${isConnected ? 'bg-green-500' : 'bg-zinc-500'}`}\n />\n <span className=\"text-xs text-zinc-400\">\n {isConnected ? 'Connected' : 'Disconnected'}\n </span>\n </div>\n </DialogHeader>\n\n <div\n ref={scrollRef}\n onScroll={handleScroll}\n className=\"flex-1 overflow-auto p-4 font-mono text-sm leading-relaxed\"\n >\n {logs.length === 0 ? (\n <p className=\"text-zinc-500\">Waiting for log output...</p>\n ) : (\n logs.map((entry) => (\n <LogLine key={`${entry.timestamp}-${entry.stream}-${entry.line}`} entry={entry} />\n ))\n )}\n {!isConnected && logs.length > 0 && (\n <div className=\"mt-2 border-t border-zinc-800 pt-2 text-zinc-500\">[Server stopped]</div>\n )}\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction LogLine({ entry }: { entry: LogEntry }) {\n return (\n <div\n data-stream={entry.stream}\n className={entry.stream === 'stderr' ? 'text-red-400' : 'text-zinc-200'}\n >\n <span className=\"break-all whitespace-pre-wrap\">{entry.line}</span>\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"405723722c9eb9b4888b52203cfb121401f0c61a80\":\"getDeploymentLogs\"},\"src/presentation/web/app/actions/get-deployment-logs.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"405723722c9eb9b4888b52203cfb121401f0c61a80\",callServer,void 0,findSourceMapURL,\"getDeploymentLogs\");export{$$RSC_SERVER_ACTION_0 as getDeploymentLogs};","'use client';\n\nimport { useState, useEffect, useRef, useCallback } from 'react';\nimport type { LogEntry } from '@shepai/core/application/ports/output/services/deployment-service.interface';\nimport { getDeploymentLogs } from '@/app/actions/get-deployment-logs';\n\nexport interface UseDeploymentLogsResult {\n logs: LogEntry[];\n isConnected: boolean;\n}\n\nexport function useDeploymentLogs(targetId: string | null | undefined): UseDeploymentLogsResult {\n const [logs, setLogs] = useState<LogEntry[]>([]);\n const [isConnected, setIsConnected] = useState(false);\n const eventSourceRef = useRef<EventSource | null>(null);\n\n const cleanup = useCallback(() => {\n if (eventSourceRef.current) {\n eventSourceRef.current.close();\n eventSourceRef.current = null;\n }\n setIsConnected(false);\n }, []);\n\n useEffect(() => {\n if (!targetId) {\n setLogs([]);\n setIsConnected(false);\n return;\n }\n\n // Fetch initial logs\n getDeploymentLogs(targetId)\n .then((initialLogs) => {\n if (initialLogs) {\n setLogs(initialLogs);\n }\n })\n .catch(() => {\n // Initial fetch failed — logs stay empty, SSE will still connect\n });\n\n // Connect EventSource for live updates\n const es = new EventSource(`/api/deployment-logs?targetId=${targetId}`);\n eventSourceRef.current = es;\n\n es.onopen = () => {\n setIsConnected(true);\n };\n\n es.addEventListener('log', (event: MessageEvent) => {\n const entry: LogEntry = JSON.parse(event.data);\n setLogs((prev) => [...prev, entry]);\n });\n\n es.onerror = () => {\n setIsConnected(false);\n };\n\n return () => {\n es.close();\n eventSourceRef.current = null;\n };\n }, [targetId, cleanup]);\n\n return { logs, isConnected };\n}\n"],"names":[],"mappings":"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","ignoreList":[0,1,3]}
1
+ {"version":3,"sources":["../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/terminal.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/external-link.ts","../../../../../../../src/presentation/web/components/ui/dialog.tsx","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/play.ts","../../../../../../../src/presentation/web/hooks/deployment-status-provider.tsx","../../../../../../../src/presentation/web/app/actions/data%3Aa62c26%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A1c2efc%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A0b0b29%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3Aa83ef5%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3Af3627a%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/hooks/deployment-status-store.ts","../../../../../../../src/presentation/web/hooks/use-deploy-action.ts","../../../../../../../src/presentation/web/components/common/base-drawer/base-drawer.tsx","../../../../../../../src/presentation/web/components/common/action-button/action-button.tsx","../../../../../../../src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.tsx","../../../../../../../src/presentation/web/components/common/server-log-viewer/server-log-viewer.tsx","../../../../../../../src/presentation/web/app/actions/data%3A886f06%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/hooks/use-deployment-logs.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 19h8', key: 'baeox8' }],\n ['path', { d: 'm4 17 6-6-6-6', key: '1yngyt' }],\n];\n\n/**\n * @component @name Terminal\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTloOCIgLz4KICA8cGF0aCBkPSJtNCAxNyA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/terminal\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Terminal = createLucideIcon('terminal', __iconNode);\n\nexport default Terminal;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M15 3h6v6', key: '1q9fwt' }],\n ['path', { d: 'M10 14 21 3', key: 'gplh6r' }],\n ['path', { d: 'M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6', key: 'a6xqqp' }],\n];\n\n/**\n * @component @name ExternalLink\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgM2g2djYiIC8+CiAgPHBhdGggZD0iTTEwIDE0IDIxIDMiIC8+CiAgPHBhdGggZD0iTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/external-link\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ExternalLink = createLucideIcon('external-link', __iconNode);\n\nexport default ExternalLink;\n","'use client';\n\nimport * as React from 'react';\nimport { Dialog as DialogPrimitive } from 'radix-ui';\nimport { X } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, onClick, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 fixed inset-0 z-50 bg-black/80 duration-150',\n className\n )}\n onClick={(e) => {\n // Prevent overlay clicks from propagating to document-level handlers\n // (e.g. BaseDrawer outside-click) — only the dialog should dismiss.\n e.stopPropagation();\n onClick?.(e);\n }}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'bg-background data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border p-6 shadow-lg duration-150 sm:rounded-lg',\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute end-4 top-4 cursor-pointer rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn('flex flex-col space-y-1.5 text-center sm:text-start', className)}\n {...props}\n />\n);\nDialogHeader.displayName = 'DialogHeader';\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)}\n {...props}\n />\n);\nDialogFooter.displayName = 'DialogFooter';\n\nconst DialogTitle = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-lg leading-none font-semibold tracking-tight', className)}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z',\n key: '10ikf1',\n },\n ],\n];\n\n/**\n * @component @name Play\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSA1YTIgMiAwIDAgMSAzLjAwOC0xLjcyOGwxMS45OTcgNi45OThhMiAyIDAgMCAxIC4wMDMgMy40NThsLTEyIDdBMiAyIDAgMCAxIDUgMTl6IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/play\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Play = createLucideIcon('play', __iconNode);\n\nexport default Play;\n","'use client';\n\n/**\n * DeploymentStatusProvider\n *\n * Wraps the dashboard with a shared deployment-status store seeded from\n * SSR data (ListDeploymentsUseCase via get-graph-data). All components\n * that call `useDeployAction(targetId)` subscribe to the same store, so\n * the \"click Run on node → tab shows URL instantly\" bug and the\n * \"URL lost after refresh\" bug are both resolved by construction.\n *\n * All business logic lives in use cases on the backend. This provider\n * owns only UI state transitions: which entries are hydrated, which are\n * loading, which have errors, and which need polling.\n */\n\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n type ReactNode,\n} from 'react';\nimport type { DeploymentStatusEntry } from '@shepai/core/application/ports/output/services/deployment-service.interface';\nimport { DeploymentState } from '@shepai/core/domain/generated/output';\nimport { deployFeature } from '@/app/actions/deploy-feature';\nimport { deployRepository } from '@/app/actions/deploy-repository';\nimport { deployApplication } from '@/app/actions/deploy-application';\nimport { stopDeployment } from '@/app/actions/stop-deployment';\nimport { getDeploymentStatus } from '@/app/actions/get-deployment-status';\nimport { createLogger } from '@/lib/logger';\nimport {\n DeploymentStatusStore,\n type DeploymentEntryState,\n EMPTY_ENTRY,\n} from './deployment-status-store';\n\nconst log = createLogger('[DeploymentStatusProvider]');\n\nconst POLL_INTERVAL_MS = 3000;\nconst ACTIVE_STATES: ReadonlySet<DeploymentState> = new Set([\n DeploymentState.Booting,\n DeploymentState.Ready,\n]);\n\nexport interface DeployActionInput {\n targetId: string;\n targetType: 'feature' | 'repository' | 'application';\n repositoryPath: string;\n branch?: string;\n}\n\ninterface DeploymentContextValue {\n store: DeploymentStatusStore;\n deploy: (input: DeployActionInput) => Promise<void>;\n stop: (targetId: string) => Promise<void>;\n ensureHydrated: (targetId: string) => void;\n}\n\nconst DeploymentStatusContext = createContext<DeploymentContextValue | null>(null);\n\nexport function DeploymentStatusProvider({\n initialDeployments,\n children,\n}: {\n initialDeployments: DeploymentStatusEntry[];\n children: ReactNode;\n}) {\n // One store per provider instance. Stable across renders.\n const storeRef = useRef<DeploymentStatusStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = new DeploymentStatusStore();\n storeRef.current.hydrate(initialDeployments);\n }\n const store = storeRef.current;\n\n // Re-hydrate when SSR data changes (e.g. after graph-data poll).\n useEffect(() => {\n store.hydrate(initialDeployments);\n }, [initialDeployments, store]);\n\n // ── Polling ──────────────────────────────────────────────────────────\n // One interval per targetId. Started when an entry becomes active\n // (Booting/Ready) and stopped when it is no longer active.\n const pollIntervalsRef = useRef<Map<string, ReturnType<typeof setInterval>>>(new Map());\n\n const stopPolling = useCallback((targetId: string) => {\n const existing = pollIntervalsRef.current.get(targetId);\n if (existing) {\n clearInterval(existing);\n pollIntervalsRef.current.delete(targetId);\n }\n }, []);\n\n const startPolling = useCallback(\n (targetId: string) => {\n if (pollIntervalsRef.current.has(targetId)) return;\n const interval = setInterval(async () => {\n let result;\n try {\n result = await getDeploymentStatus(targetId);\n } catch (err) {\n log.warn(`poll failed for \"${targetId}\"`, err);\n store.setStatus(targetId, null);\n stopPolling(targetId);\n return;\n }\n if (!result || result.state === DeploymentState.Stopped) {\n store.setStatus(targetId, null);\n stopPolling(targetId);\n return;\n }\n store.setStatus(targetId, result);\n }, POLL_INTERVAL_MS);\n pollIntervalsRef.current.set(targetId, interval);\n },\n [store, stopPolling]\n );\n\n // Reconcile polling with store state on every change.\n useEffect(() => {\n const intervals = pollIntervalsRef.current;\n const reconcile = () => {\n // Stop polls for entries that are no longer active.\n for (const [targetId] of intervals) {\n const entry = store.getEntry(targetId);\n if (!entry.status || !ACTIVE_STATES.has(entry.status)) {\n stopPolling(targetId);\n }\n }\n };\n const unsubscribe = store.subscribeAll(reconcile);\n return () => {\n unsubscribe();\n for (const [, interval] of intervals) clearInterval(interval);\n intervals.clear();\n };\n }, [store, stopPolling]);\n\n // ── Mount hydration per targetId ─────────────────────────────────────\n // When a hook subscribes to a targetId that was not in the SSR hydration\n // (e.g. a stale page with deployments started in another tab), fetch its\n // status once from the backend via getDeploymentStatus → use case.\n const ensureHydrated = useCallback(\n (targetId: string) => {\n if (!targetId) return;\n const entry = store.getEntry(targetId);\n if (entry.hydrated) return;\n // After the first SSR seed runs, ListDeploymentsUseCase has provided\n // the complete deployment universe — any targetId not in that list\n // is definitively idle, so there is no need to ask the server again.\n // Just mark this id hydrated locally and skip the network call.\n // This kills the burst of N server-action POSTs that happened on\n // canvas mount when most nodes had no active deployment.\n if (store.isFullyHydrated()) {\n store.update(targetId, { hydrated: true });\n return;\n }\n // Mark hydrated immediately to dedupe concurrent callers.\n store.update(targetId, { hydrated: true });\n void (async () => {\n try {\n const result = await getDeploymentStatus(targetId);\n store.setStatus(targetId, result);\n if (result && ACTIVE_STATES.has(result.state)) startPolling(targetId);\n } catch (err) {\n log.warn(`ensureHydrated failed for \"${targetId}\"`, err);\n }\n })();\n },\n [store, startPolling]\n );\n\n // ── Actions ──────────────────────────────────────────────────────────\n const deploy = useCallback(\n async (input: DeployActionInput) => {\n store.update(input.targetId, { deployLoading: true, deployError: null });\n try {\n const result =\n input.targetType === 'feature'\n ? await deployFeature(input.targetId)\n : input.targetType === 'application'\n ? await deployApplication(input.targetId)\n : await deployRepository(input.repositoryPath);\n if (!result.success) {\n store.update(input.targetId, {\n deployLoading: false,\n deployError: result.error ?? 'An unexpected error occurred',\n });\n return;\n }\n store.update(input.targetId, {\n deployLoading: false,\n status: result.state ?? null,\n url: null,\n hydrated: true,\n targetType: input.targetType,\n });\n startPolling(input.targetId);\n } catch (err) {\n const message = err instanceof Error ? err.message : 'An unexpected error occurred';\n store.update(input.targetId, { deployLoading: false, deployError: message });\n }\n },\n [store, startPolling]\n );\n\n const stop = useCallback(\n async (targetId: string) => {\n if (!targetId) return;\n store.update(targetId, { stopLoading: true });\n try {\n const result = await stopDeployment(targetId);\n if (result.success) {\n stopPolling(targetId);\n store.update(targetId, {\n stopLoading: false,\n status: null,\n url: null,\n });\n } else {\n store.update(targetId, { stopLoading: false });\n }\n } catch (err) {\n log.warn('stop error (non-critical)', err);\n store.update(targetId, { stopLoading: false });\n }\n },\n [store, stopPolling]\n );\n\n const value = useMemo<DeploymentContextValue>(\n () => ({ store, deploy, stop, ensureHydrated }),\n [store, deploy, stop, ensureHydrated]\n );\n\n return (\n <DeploymentStatusContext.Provider value={value}>{children}</DeploymentStatusContext.Provider>\n );\n}\n\nexport function useDeploymentStatusContext(): DeploymentContextValue {\n const ctx = useContext(DeploymentStatusContext);\n if (!ctx) {\n throw new Error('useDeploymentStatusContext must be used within a <DeploymentStatusProvider>');\n }\n return ctx;\n}\n\n/**\n * Non-throwing variant used by presentational hooks (e.g. useDeployAction)\n * that may render inside Storybook or other isolated contexts without\n * a provider. Returns a stub store/actions that do nothing.\n */\nexport function useDeploymentStatusContextOptional(): DeploymentContextValue {\n const ctx = useContext(DeploymentStatusContext);\n if (ctx) return ctx;\n return FALLBACK_CONTEXT;\n}\n\nconst FALLBACK_STORE = new DeploymentStatusStore();\nconst FALLBACK_CONTEXT: DeploymentContextValue = {\n store: FALLBACK_STORE,\n deploy: async () => {\n /* no-op */\n },\n stop: async () => {\n /* no-op */\n },\n ensureHydrated: () => {\n /* no-op */\n },\n};\n\nexport { EMPTY_ENTRY, type DeploymentEntryState };\n","/* __next_internal_action_entry_do_not_use__ [{\"40aa1efa0fed8941c16c9537ba0c5d988cf13fecaf\":\"deployFeature\"},\"src/presentation/web/app/actions/deploy-feature.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40aa1efa0fed8941c16c9537ba0c5d988cf13fecaf\",callServer,void 0,findSourceMapURL,\"deployFeature\");export{$$RSC_SERVER_ACTION_0 as deployFeature};","/* __next_internal_action_entry_do_not_use__ [{\"403a844cbb36e5d50051fe552f050ed35a8b88f317\":\"deployRepository\"},\"src/presentation/web/app/actions/deploy-repository.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"403a844cbb36e5d50051fe552f050ed35a8b88f317\",callServer,void 0,findSourceMapURL,\"deployRepository\");export{$$RSC_SERVER_ACTION_0 as deployRepository};","/* __next_internal_action_entry_do_not_use__ [{\"40559cc32878be443a5d902e563fa65ac29566c575\":\"deployApplication\"},\"src/presentation/web/app/actions/deploy-application.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40559cc32878be443a5d902e563fa65ac29566c575\",callServer,void 0,findSourceMapURL,\"deployApplication\");export{$$RSC_SERVER_ACTION_0 as deployApplication};","/* __next_internal_action_entry_do_not_use__ [{\"403c93928208c54fe25784ff60dcb073f25d1055c1\":\"stopDeployment\"},\"src/presentation/web/app/actions/stop-deployment.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"403c93928208c54fe25784ff60dcb073f25d1055c1\",callServer,void 0,findSourceMapURL,\"stopDeployment\");export{$$RSC_SERVER_ACTION_0 as stopDeployment};","/* __next_internal_action_entry_do_not_use__ [{\"402a545f24583952d99d18566abf474dd10d07741b\":\"getDeploymentStatus\"},\"src/presentation/web/app/actions/get-deployment-status.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"402a545f24583952d99d18566abf474dd10d07741b\",callServer,void 0,findSourceMapURL,\"getDeploymentStatus\");export{$$RSC_SERVER_ACTION_0 as getDeploymentStatus};","/**\n * Deployment Status Store\n *\n * External store (useSyncExternalStore-compatible) that holds the shared\n * deployment state keyed by targetId. Multiple components subscribed to\n * the same targetId see the same state — fixes the node/drawer-out-of-sync\n * bug and makes page-refresh hydration trivial.\n *\n * Mutation paths (deploy/stop/poll) go through server actions that wrap\n * use cases — this module stores state only and never contains business\n * logic.\n */\n\nimport type { DeploymentState } from '@shepai/core/domain/generated/output';\nimport type {\n DeploymentStatus,\n DeploymentStatusEntry,\n} from '@shepai/core/application/ports/output/services/deployment-service.interface';\n\nexport interface DeploymentEntryState {\n status: DeploymentState | null;\n url: string | null;\n targetType: string | null;\n /** Whether mount-hydration (listDeployments / getDeploymentStatus) has completed for this targetId. */\n hydrated: boolean;\n deployLoading: boolean;\n stopLoading: boolean;\n deployError: string | null;\n}\n\nexport const EMPTY_ENTRY: DeploymentEntryState = {\n status: null,\n url: null,\n targetType: null,\n hydrated: false,\n deployLoading: false,\n stopLoading: false,\n deployError: null,\n};\n\ntype Listener = () => void;\n\nexport class DeploymentStatusStore {\n private entries = new Map<string, DeploymentEntryState>();\n private listeners = new Map<string, Set<Listener>>();\n private globalListeners = new Set<Listener>();\n /**\n * Set true after the first SSR seed runs. Because `ListDeploymentsUseCase`\n * returns the full universe of currently-tracked deployments, any\n * targetId NOT present in that list is definitively idle — there is no\n * need to fire a per-node `getDeploymentStatus` server action on mount.\n * Without this flag, every canvas node (most of which have no\n * deployment) was triggering one POST /control-center on initial render,\n * producing the burst of 30+ server-action calls observed on dashboard\n * load.\n */\n private fullyHydrated = false;\n\n /** Has the store been seeded at least once from SSR? */\n isFullyHydrated(): boolean {\n return this.fullyHydrated;\n }\n\n /** Seed the store from SSR data (ListDeploymentsUseCase output). */\n hydrate(entries: DeploymentStatusEntry[]): void {\n // Mark every SSR entry as hydrated and merge into the map.\n const seen = new Set<string>();\n for (const entry of entries) {\n seen.add(entry.targetId);\n this.update(entry.targetId, {\n status: entry.state,\n url: entry.url,\n targetType: entry.targetType,\n hydrated: true,\n });\n }\n // Any previously tracked entries missing from the SSR list are stale —\n // mark them hydrated with null state so subscribers learn their\n // deployment is gone.\n for (const [targetId, existing] of this.entries) {\n if (!seen.has(targetId) && existing.hydrated && existing.status !== null) {\n this.update(targetId, { status: null, url: null });\n } else if (!seen.has(targetId) && !existing.hydrated) {\n this.update(targetId, { hydrated: true });\n }\n }\n this.fullyHydrated = true;\n }\n\n getEntry(targetId: string): DeploymentEntryState {\n return this.entries.get(targetId) ?? EMPTY_ENTRY;\n }\n\n update(targetId: string, patch: Partial<DeploymentEntryState>): void {\n const current = this.entries.get(targetId) ?? EMPTY_ENTRY;\n const next: DeploymentEntryState = { ...current, ...patch };\n this.entries.set(targetId, next);\n this.notify(targetId);\n }\n\n /** Apply a status snapshot (from a server action result) to a targetId. */\n setStatus(targetId: string, status: DeploymentStatus | null): void {\n if (status === null) {\n this.update(targetId, { status: null, url: null, hydrated: true });\n return;\n }\n this.update(targetId, {\n status: status.state,\n url: status.url,\n hydrated: true,\n });\n }\n\n subscribe(targetId: string, listener: Listener): () => void {\n let set = this.listeners.get(targetId);\n if (!set) {\n set = new Set();\n this.listeners.set(targetId, set);\n }\n set.add(listener);\n return () => {\n set?.delete(listener);\n if (set?.size === 0) this.listeners.delete(targetId);\n };\n }\n\n subscribeAll(listener: Listener): () => void {\n this.globalListeners.add(listener);\n return () => {\n this.globalListeners.delete(listener);\n };\n }\n\n private notify(targetId: string): void {\n const set = this.listeners.get(targetId);\n if (set) for (const l of set) l();\n for (const l of this.globalListeners) l();\n }\n}\n","'use client';\n\n/**\n * useDeployAction\n *\n * Thin subscriber to the shared DeploymentStatusProvider, scoped to one\n * targetId. All components that call this hook with the same targetId\n * see the same state — a click on a node updates the drawer instantly,\n * and state survives page refresh via SSR hydration.\n *\n * Business logic (start/stop/status) lives in backend use cases — this\n * hook contains zero decision-making code.\n */\n\nimport { useEffect, useSyncExternalStore, useCallback } from 'react';\nimport type { DeploymentState } from '@shepai/core/domain/generated/output';\nimport {\n useDeploymentStatusContextOptional,\n type DeployActionInput,\n} from './deployment-status-provider';\n\nexport type { DeployActionInput };\n\n/** Stable no-op unsubscribe for hooks called with a null input. */\nfunction noop(): void {\n /* no-op */\n}\n\nexport interface DeployActionState {\n deploy: () => Promise<void>;\n stop: () => Promise<void>;\n deployLoading: boolean;\n stopLoading: boolean;\n deployError: string | null;\n status: DeploymentState | null;\n url: string | null;\n}\n\nexport function useDeployAction(input: DeployActionInput | null): DeployActionState {\n const { store, deploy, stop, ensureHydrated } = useDeploymentStatusContextOptional();\n const targetId = input?.targetId ?? '';\n\n // Subscribe to the store entry for this targetId.\n const subscribe = useCallback(\n (listener: () => void) => {\n if (!targetId) return noop;\n return store.subscribe(targetId, listener);\n },\n [store, targetId]\n );\n const getSnapshot = useCallback(\n () => (targetId ? store.getEntry(targetId) : store.getEntry('')),\n [store, targetId]\n );\n const entry = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n // On mount (or when targetId changes), ensure the entry is hydrated.\n useEffect(() => {\n if (targetId) ensureHydrated(targetId);\n }, [targetId, ensureHydrated]);\n\n const handleDeploy = useCallback(async () => {\n if (!input) return;\n await deploy(input);\n }, [deploy, input]);\n\n const handleStop = useCallback(async () => {\n if (!targetId) return;\n await stop(targetId);\n }, [stop, targetId]);\n\n return {\n deploy: handleDeploy,\n stop: handleStop,\n deployLoading: entry.deployLoading,\n stopLoading: entry.stopLoading,\n deployError: entry.deployError,\n status: entry.status,\n url: entry.url,\n };\n}\n","'use client';\n\nimport { useRef, useEffect } from 'react';\nimport { XIcon, Play, Square } from 'lucide-react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\nimport { ActionButton } from '@/components/common/action-button';\nimport { DeploymentStatusBadge } from '@/components/common/deployment-status-badge';\nimport {\n Drawer,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerOverlay,\n DrawerTitle,\n DrawerDescription,\n} from '@/components/ui/drawer';\nimport { Separator } from '@/components/ui/separator';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { useTranslation } from 'react-i18next';\nimport { useDeployAction, type DeployActionInput } from '@/hooks/use-deploy-action';\nimport { useFeatureFlags } from '@/hooks/feature-flags-context';\n\nconst drawerVariants = cva('', {\n variants: {\n size: {\n sm: 'w-96',\n md: 'w-2xl',\n lg: 'w-[772px]',\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n});\n\nexport interface BaseDrawerProps extends VariantProps<typeof drawerVariants> {\n open: boolean;\n onClose: () => void;\n modal?: boolean;\n /** When true, clicking anywhere outside the drawer closes it, ignoring `data-no-drawer-close` guards. */\n dismissOnOutsideClick?: boolean;\n title?: string;\n header?: React.ReactNode;\n children: React.ReactNode;\n footer?: React.ReactNode;\n className?: string;\n 'data-testid'?: string;\n deployTarget?: DeployActionInput;\n}\n\nexport function BaseDrawer({\n open,\n onClose,\n modal = false,\n dismissOnOutsideClick = false,\n title = 'Drawer',\n size,\n header,\n children,\n footer,\n className,\n 'data-testid': testId,\n deployTarget,\n}: BaseDrawerProps) {\n const { i18n } = useTranslation();\n const featureFlags = useFeatureFlags();\n const contentRef = useRef<HTMLDivElement>(null);\n const drawerDirection = i18n.dir() === 'rtl' ? 'left' : 'right';\n\n // Close when clicking outside the drawer panel (no overlay needed — canvas stays draggable).\n // Uses `click` (not `pointerdown`) so canvas drags don't trigger this.\n useEffect(() => {\n if (!open || modal) return;\n\n const handleClick = (e: MouseEvent) => {\n const target = e.target as Element;\n // If the clicked element was unmounted by React before the event reached\n // the document (e.g. a \"Next\" button removed on the last step), it is no\n // longer in the DOM tree — treat it as an internal click, not an outside one.\n if (!document.body.contains(target)) return;\n if (contentRef.current?.contains(target)) return;\n // Don't close when clicking inside Radix overlays.\n // When dismissOnOutsideClick is false (default), also respect data-no-drawer-close guards.\n const ignoreSelector = dismissOnOutsideClick\n ? '[role=\"alertdialog\"], [role=\"dialog\"], [role=\"menu\"], [role=\"listbox\"], [data-radix-popper-content-wrapper]'\n : '[data-no-drawer-close], [role=\"alertdialog\"], [role=\"dialog\"], [role=\"menu\"], [role=\"listbox\"], [data-radix-popper-content-wrapper]';\n if (target.closest(ignoreSelector)) return;\n onClose();\n };\n\n document.addEventListener('click', handleClick);\n return () => document.removeEventListener('click', handleClick);\n }, [open, modal, onClose, dismissOnOutsideClick]);\n\n return (\n <Drawer\n direction={drawerDirection}\n modal={modal}\n handleOnly\n open={open}\n onOpenChange={(isOpen) => {\n if (!isOpen) onClose();\n }}\n >\n {modal ? <DrawerOverlay /> : null}\n <DrawerContent\n ref={contentRef}\n direction={drawerDirection}\n showCloseButton={false}\n className={cn(\n drawerVariants({ size }),\n 'bg-white/85 backdrop-blur-xl dark:bg-neutral-800/85',\n className\n )}\n data-testid={testId}\n onInteractOutside={modal ? undefined : (e) => e.preventDefault()}\n >\n {/* Visually hidden title & description required by Radix Dialog for accessibility */}\n <DrawerTitle asChild>\n <span className=\"sr-only\">{title}</span>\n </DrawerTitle>\n <DrawerDescription asChild>\n <span className=\"sr-only\">{title}</span>\n </DrawerDescription>\n\n {/* Close button */}\n <button\n type=\"button\"\n aria-label=\"Close\"\n onClick={onClose}\n className=\"ring-offset-background focus:ring-ring absolute end-3 top-2 z-50 rounded-sm p-1 opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden\"\n data-testid={testId ? `${testId}-close-button` : undefined}\n >\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </button>\n\n {/* Header slot */}\n {header ? <DrawerHeader className=\"shrink-0\">{header}</DrawerHeader> : null}\n\n {/* Separator between header and content — matches review drawer style */}\n {header ? <Separator /> : null}\n\n {/* Dev server bar — rendered when deployTarget is provided and env deploy is enabled */}\n {featureFlags.envDeploy && deployTarget ? <DeployBar deployTarget={deployTarget} /> : null}\n\n {/* Scrollable content area. Consumers should add p-4 for consistent spacing. */}\n {/* Footer components like DrawerActionBar typically include border-t. */}\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden\">{children}</div>\n\n {/* Footer slot */}\n {footer ? <DrawerFooter className=\"shrink-0\">{footer}</DrawerFooter> : null}\n </DrawerContent>\n </Drawer>\n );\n}\n\nfunction DeployBar({ deployTarget }: { deployTarget: DeployActionInput }) {\n const deployAction = useDeployAction(deployTarget);\n const isDeploymentActive = deployAction.status === 'Booting' || deployAction.status === 'Ready';\n\n return (\n <div data-testid=\"base-drawer-deploy-bar\" className=\"flex items-center gap-2 px-4 pt-3 pb-3\">\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span>\n <ActionButton\n label={isDeploymentActive ? 'Stop Dev Server' : 'Start Dev Server'}\n onClick={isDeploymentActive ? deployAction.stop : deployAction.deploy}\n loading={deployAction.deployLoading || deployAction.stopLoading}\n error={!!deployAction.deployError}\n icon={isDeploymentActive ? Square : Play}\n iconOnly\n variant=\"outline\"\n size=\"icon-sm\"\n />\n </span>\n </TooltipTrigger>\n <TooltipContent>\n {isDeploymentActive ? 'Stop Dev Server' : 'Start Dev Server'}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n {isDeploymentActive ? (\n <DeploymentStatusBadge\n status={deployAction.status}\n url={deployAction.url}\n targetId={deployTarget.targetId}\n />\n ) : null}\n </div>\n );\n}\n","'use client';\n\nimport type { LucideIcon } from 'lucide-react';\nimport { Loader2, CircleAlert } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { useSoundAction } from '@/hooks/use-sound-action';\n\nexport interface ActionButtonProps {\n label: string;\n onClick: () => void;\n loading: boolean;\n error: boolean;\n icon: LucideIcon;\n /** When true, omits label text — label is still used as aria-label. */\n iconOnly?: boolean;\n /** Button variant. @default 'outline' */\n variant?: 'outline' | 'ghost' | 'default' | 'destructive' | 'secondary' | 'link';\n /** Button size. @default 'sm' */\n size?: 'default' | 'xs' | 'sm' | 'lg' | 'icon' | 'icon-xs' | 'icon-sm' | 'icon-lg';\n}\n\nexport function ActionButton({\n label,\n onClick,\n loading,\n error,\n icon: Icon,\n iconOnly = false,\n variant = 'outline',\n size = 'sm',\n}: ActionButtonProps) {\n const clickSound = useSoundAction('click');\n\n const handleClick = () => {\n clickSound.play();\n onClick();\n };\n\n return (\n <Button\n variant={variant}\n size={size}\n aria-label={label}\n disabled={loading}\n onClick={handleClick}\n className={cn(\n 'gap-1.5',\n error && 'text-destructive hover:text-destructive',\n !error &&\n iconOnly &&\n variant === 'ghost' &&\n 'text-muted-foreground cursor-pointer rounded-full transition-colors hover:text-blue-500'\n )}\n >\n {loading ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : error ? (\n <CircleAlert className=\"size-4\" />\n ) : (\n <Icon className=\"size-4\" />\n )}\n {iconOnly ? null : label}\n </Button>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { Loader2, ExternalLink, Terminal } from 'lucide-react';\nimport { DeploymentState } from '@shepai/core/domain/generated/output';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { ServerLogViewer } from '@/components/common/server-log-viewer';\n\nexport interface DeploymentStatusBadgeProps {\n status: DeploymentState | null;\n url?: string | null;\n targetId?: string;\n}\n\nconst tbBtn =\n 'text-muted-foreground hover:bg-foreground/8 hover:text-foreground inline-flex size-7 items-center justify-center rounded-[3px]';\n\nexport function DeploymentStatusBadge({ status, url, targetId }: DeploymentStatusBadgeProps) {\n const [logViewerOpen, setLogViewerOpen] = useState(false);\n const showLogButton =\n targetId && (status === DeploymentState.Booting || status === DeploymentState.Ready);\n\n switch (status) {\n case DeploymentState.Booting:\n return (\n <>\n <div className=\"flex items-center gap-1 pl-1\">\n <Loader2 className=\"size-3 animate-spin text-blue-500\" />\n <span className=\"text-muted-foreground text-[11px]\">Starting...</span>\n {showLogButton ? (\n <TooltipProvider delayDuration={300}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n aria-label=\"View server logs\"\n className={tbBtn}\n onClick={(e) => {\n e.stopPropagation();\n setLogViewerOpen(true);\n }}\n >\n <Terminal className=\"size-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\" className=\"text-xs\">\n Server logs\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : null}\n </div>\n {showLogButton ? (\n <ServerLogViewer\n open={logViewerOpen}\n onOpenChange={setLogViewerOpen}\n targetId={targetId}\n />\n ) : null}\n </>\n );\n case DeploymentState.Ready:\n return (\n <>\n <div className=\"flex translate-y-px items-center gap-1 pl-1\">\n <span className=\"inline-block size-1.5 rounded-full bg-green-500\" />\n {url ? (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-0.5 text-[11px] text-green-600 hover:text-green-500 dark:text-green-400 dark:hover:text-green-300\"\n onClick={(e) => e.stopPropagation()}\n >\n {url}\n <ExternalLink className=\"size-2.5 shrink-0\" />\n </a>\n ) : (\n <span className=\"text-[11px] text-green-600 dark:text-green-400\">Ready</span>\n )}\n {showLogButton ? (\n <TooltipProvider delayDuration={300}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n aria-label=\"View server logs\"\n className={tbBtn}\n onClick={(e) => {\n e.stopPropagation();\n setLogViewerOpen(true);\n }}\n >\n <Terminal className=\"size-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\" className=\"text-xs\">\n Server logs\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : null}\n </div>\n {showLogButton ? (\n <ServerLogViewer\n open={logViewerOpen}\n onOpenChange={setLogViewerOpen}\n targetId={targetId}\n />\n ) : null}\n </>\n );\n default:\n return null;\n }\n}\n","'use client';\n\nimport { useRef, useEffect, useCallback } from 'react';\nimport { Terminal } from 'lucide-react';\nimport type { LogEntry } from '@shepai/core/application/ports/output/services/deployment-service.interface';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog';\nimport { useDeploymentLogs } from '@/hooks/use-deployment-logs';\n\nexport interface ServerLogViewerProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n targetId: string;\n}\n\nexport interface ServerLogViewerContentProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n logs: LogEntry[];\n isConnected: boolean;\n}\n\nconst AUTO_SCROLL_THRESHOLD = 50;\n\nexport function ServerLogViewer({ open, onOpenChange, targetId }: ServerLogViewerProps) {\n const { logs, isConnected } = useDeploymentLogs(open ? targetId : null);\n\n return (\n <ServerLogViewerContent\n open={open}\n onOpenChange={onOpenChange}\n logs={logs}\n isConnected={isConnected}\n />\n );\n}\n\nexport function ServerLogViewerContent({\n open,\n onOpenChange,\n logs,\n isConnected,\n}: ServerLogViewerContentProps) {\n const scrollRef = useRef<HTMLDivElement>(null);\n const isAtBottomRef = useRef(true);\n\n const handleScroll = useCallback(() => {\n const el = scrollRef.current;\n if (!el) return;\n isAtBottomRef.current =\n el.scrollTop + el.clientHeight >= el.scrollHeight - AUTO_SCROLL_THRESHOLD;\n }, []);\n\n useEffect(() => {\n if (isAtBottomRef.current && scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [logs]);\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n className=\"flex h-[calc(100vh-48px)] max-h-[calc(100vh-48px)] w-full max-w-[calc(100vw-48px)] flex-col gap-0 bg-zinc-950 p-0 text-zinc-100 sm:rounded-lg\"\n aria-describedby={undefined}\n >\n <DialogHeader className=\"flex flex-row items-center justify-between border-b border-zinc-800 px-4 py-3\">\n <div className=\"flex items-center gap-2\">\n <Terminal className=\"h-4 w-4 text-zinc-400\" />\n <DialogTitle className=\"text-sm font-medium text-zinc-100\">Server Logs</DialogTitle>\n </div>\n <div className=\"flex items-center gap-2 pe-8\">\n <span\n className={`inline-block h-2 w-2 rounded-full ${isConnected ? 'bg-green-500' : 'bg-zinc-500'}`}\n />\n <span className=\"text-xs text-zinc-400\">\n {isConnected ? 'Connected' : 'Disconnected'}\n </span>\n </div>\n </DialogHeader>\n\n <div\n ref={scrollRef}\n onScroll={handleScroll}\n className=\"flex-1 overflow-auto p-4 font-mono text-sm leading-relaxed\"\n >\n {logs.length === 0 ? (\n <p className=\"text-zinc-500\">Waiting for log output...</p>\n ) : (\n logs.map((entry) => (\n <LogLine key={`${entry.timestamp}-${entry.stream}-${entry.line}`} entry={entry} />\n ))\n )}\n {!isConnected && logs.length > 0 && (\n <div className=\"mt-2 border-t border-zinc-800 pt-2 text-zinc-500\">[Server stopped]</div>\n )}\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction LogLine({ entry }: { entry: LogEntry }) {\n return (\n <div\n data-stream={entry.stream}\n className={entry.stream === 'stderr' ? 'text-red-400' : 'text-zinc-200'}\n >\n <span className=\"break-all whitespace-pre-wrap\">{entry.line}</span>\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40e827f64795e580b75e126ddfefa3a9a722da877c\":\"getDeploymentLogs\"},\"src/presentation/web/app/actions/get-deployment-logs.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40e827f64795e580b75e126ddfefa3a9a722da877c\",callServer,void 0,findSourceMapURL,\"getDeploymentLogs\");export{$$RSC_SERVER_ACTION_0 as getDeploymentLogs};","'use client';\n\nimport { useState, useEffect, useRef, useCallback } from 'react';\nimport type { LogEntry } from '@shepai/core/application/ports/output/services/deployment-service.interface';\nimport { getDeploymentLogs } from '@/app/actions/get-deployment-logs';\n\nexport interface UseDeploymentLogsResult {\n logs: LogEntry[];\n isConnected: boolean;\n}\n\nexport function useDeploymentLogs(targetId: string | null | undefined): UseDeploymentLogsResult {\n const [logs, setLogs] = useState<LogEntry[]>([]);\n const [isConnected, setIsConnected] = useState(false);\n const eventSourceRef = useRef<EventSource | null>(null);\n\n const cleanup = useCallback(() => {\n if (eventSourceRef.current) {\n eventSourceRef.current.close();\n eventSourceRef.current = null;\n }\n setIsConnected(false);\n }, []);\n\n useEffect(() => {\n if (!targetId) {\n setLogs([]);\n setIsConnected(false);\n return;\n }\n\n // Fetch initial logs\n getDeploymentLogs(targetId)\n .then((initialLogs) => {\n if (initialLogs) {\n setLogs(initialLogs);\n }\n })\n .catch(() => {\n // Initial fetch failed — logs stay empty, SSE will still connect\n });\n\n // Connect EventSource for live updates\n const es = new EventSource(`/api/deployment-logs?targetId=${targetId}`);\n eventSourceRef.current = es;\n\n es.onopen = () => {\n setIsConnected(true);\n };\n\n es.addEventListener('log', (event: MessageEvent) => {\n const entry: LogEntry = JSON.parse(event.data);\n setLogs((prev) => [...prev, entry]);\n });\n\n es.onerror = () => {\n setIsConnected(false);\n };\n\n return () => {\n es.close();\n eventSourceRef.current = null;\n };\n }, [targetId, cleanup]);\n\n return { logs, isConnected };\n}\n"],"names":[],"mappings":"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","ignoreList":[0,1,3]}
@@ -1,3 +1,3 @@
1
- module.exports=[110606,a=>{"use strict";var b=a.i(151969);a.s(["CheckIcon",()=>b.default])},925603,a=>{"use strict";let b=(0,a.i(225700).default)("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]]);a.s(["Sparkles",()=>b],925603)},69428,a=>{"use strict";let b=(0,a.i(225700).default)("clipboard-list",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]]);a.s(["ClipboardList",()=>b],69428)},483886,a=>{"use strict";let b=(0,a.i(225700).default)("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);a.s(["Eye",()=>b],483886)},218615,a=>{"use strict";let b=(0,a.i(225700).default)("rotate-ccw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);a.s(["RotateCcw",()=>b],218615)},301585,744239,865310,a=>{"use strict";let b=(0,a.i(225700).default)("archive-restore",[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h2",key:"tvwodi"}],["path",{d:"M20 8v11a2 2 0 0 1-2 2h-2",key:"1gkqxj"}],["path",{d:"m9 15 3-3 3 3",key:"1pd0qc"}],["path",{d:"M12 12v9",key:"192myk"}]]);a.s(["ArchiveRestore",()=>b],301585);var c=a.i(556365),d=a.i(944592),e=a.i(488064);a.i(490370);var f=a.i(697708),g=a.i(224640),h=a.i(603703),i=a.i(110606),j=a.i(696853),j=j,k=a.i(406175),l=a.i(307420),m=a.i(559653),n=a.i(417329),o=a.i(264005),p=a.i(474432),q=a.i(914272),r=a.i(666873),s="Checkbox",[t,u]=(0,l.createContextScope)(s),[v,w]=t(s);function x(a){let{__scopeCheckbox:b,checked:e,children:f,defaultChecked:g,disabled:h,form:i,name:j,onCheckedChange:k,required:l,value:m="on",internal_do_not_use_render:o}=a,[p,q]=(0,n.useControllableState)({prop:e,defaultProp:g??!1,onChange:k,caller:s}),[r,t]=d.useState(null),[u,w]=d.useState(null),x=d.useRef(!1),y=!r||!!i||!!r.closest("form"),z={checked:p,disabled:h,setChecked:q,control:r,setControl:t,name:j,form:i,value:m,hasConsumerStoppedPropagationRef:x,required:l,defaultChecked:!F(g)&&g,isFormControl:y,bubbleInput:u,setBubbleInput:w};return(0,c.jsx)(v,{scope:b,...z,children:"function"==typeof o?o(z):f})}var y="CheckboxTrigger",z=d.forwardRef(({__scopeCheckbox:a,onKeyDown:b,onClick:e,...f},g)=>{let{control:h,value:i,disabled:j,checked:l,required:n,setControl:o,setChecked:p,hasConsumerStoppedPropagationRef:q,isFormControl:s,bubbleInput:t}=w(y,a),u=(0,k.useComposedRefs)(g,o),v=d.useRef(l);return d.useEffect(()=>{let a=h?.form;if(a){let b=()=>p(v.current);return a.addEventListener("reset",b),()=>a.removeEventListener("reset",b)}},[h,p]),(0,c.jsx)(r.Primitive.button,{type:"button",role:"checkbox","aria-checked":F(l)?"mixed":l,"aria-required":n,"data-state":G(l),"data-disabled":j?"":void 0,disabled:j,value:i,...f,ref:u,onKeyDown:(0,m.composeEventHandlers)(b,a=>{"Enter"===a.key&&a.preventDefault()}),onClick:(0,m.composeEventHandlers)(e,a=>{p(a=>!!F(a)||!a),t&&s&&(q.current=a.isPropagationStopped(),q.current||a.stopPropagation())})})});z.displayName=y;var A=d.forwardRef((a,b)=>{let{__scopeCheckbox:d,name:e,checked:f,defaultChecked:g,required:h,disabled:i,value:j,onCheckedChange:k,form:l,...m}=a;return(0,c.jsx)(x,{__scopeCheckbox:d,checked:f,defaultChecked:g,disabled:i,required:h,onCheckedChange:k,name:e,form:l,value:j,internal_do_not_use_render:({isFormControl:a})=>(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(z,{...m,ref:b,__scopeCheckbox:d}),a&&(0,c.jsx)(E,{__scopeCheckbox:d})]})})});A.displayName=s;var B="CheckboxIndicator",C=d.forwardRef((a,b)=>{let{__scopeCheckbox:d,forceMount:e,...f}=a,g=w(B,d);return(0,c.jsx)(q.Presence,{present:e||F(g.checked)||!0===g.checked,children:(0,c.jsx)(r.Primitive.span,{"data-state":G(g.checked),"data-disabled":g.disabled?"":void 0,...f,ref:b,style:{pointerEvents:"none",...a.style}})})});C.displayName=B;var D="CheckboxBubbleInput",E=d.forwardRef(({__scopeCheckbox:a,...b},e)=>{let{control:f,hasConsumerStoppedPropagationRef:g,checked:h,defaultChecked:i,required:j,disabled:l,name:m,value:n,form:q,bubbleInput:s,setBubbleInput:t}=w(D,a),u=(0,k.useComposedRefs)(e,t),v=(0,o.usePrevious)(h),x=(0,p.useSize)(f);d.useEffect(()=>{if(!s)return;let a=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"checked").set,b=!g.current;if(v!==h&&a){let c=new Event("click",{bubbles:b});s.indeterminate=F(h),a.call(s,!F(h)&&h),s.dispatchEvent(c)}},[s,v,h,g]);let y=d.useRef(!F(h)&&h);return(0,c.jsx)(r.Primitive.input,{type:"checkbox","aria-hidden":!0,defaultChecked:i??y.current,required:j,disabled:l,name:m,value:n,form:q,...b,tabIndex:-1,ref:u,style:{...b.style,...x,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});function F(a){return"indeterminate"===a}function G(a){return F(a)?"indeterminate":a?"checked":"unchecked"}E.displayName=D,a.s(["Checkbox",()=>A,"CheckboxIndicator",()=>C,"Indicator",()=>C,"Root",()=>A,"createCheckboxScope",()=>u,"unstable_BubbleInput",()=>E,"unstable_CheckboxBubbleInput",()=>E,"unstable_CheckboxProvider",()=>x,"unstable_CheckboxTrigger",()=>z,"unstable_Provider",()=>x,"unstable_Trigger",()=>z],827835);var H=a.i(827835),H=H,I=a.i(385536);function J({className:a,...b}){return(0,c.jsx)(H.Root,{"data-slot":"checkbox",className:(0,I.cn)("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground data-[state=indeterminate]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 cursor-pointer rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",a),...b,children:(0,c.jsx)(H.Indicator,{"data-slot":"checkbox-indicator",className:"grid place-content-center text-current transition-none",children:"indeterminate"===b.checked?(0,c.jsx)(j.default,{className:"size-3.5"}):(0,c.jsx)(i.CheckIcon,{className:"size-3.5"})})})}a.s(["Checkbox",()=>J],744239);var K=a.i(758860);function L({open:a,onOpenChange:b,onConfirm:i,isDeleting:j,featureName:k,featureId:l,hasChildren:m,hasOpenPr:n}){let{t:o}=(0,g.useTranslation)("web"),[p,q]=(0,d.useState)(!0),[r,s]=(0,d.useState)(!1),[t,u]=(0,d.useState)(!0);return(0,d.useEffect)(()=>{a&&(q(!0),s(!1),u(!0))},[a]),(0,d.useEffect)(()=>{p?u(!0):u(!1)},[p]),(0,c.jsx)(h.AlertDialog,{open:a,onOpenChange:b,children:(0,c.jsxs)(h.AlertDialogContent,{onCloseAutoFocus:a=>a.preventDefault(),children:[(0,c.jsxs)(h.AlertDialogHeader,{children:[(0,c.jsx)(h.AlertDialogTitle,{children:o("deleteFeature.title")}),(0,c.jsx)(h.AlertDialogDescription,{children:(0,c.jsx)(f.Trans,{t:o,i18nKey:"deleteFeature.description",values:{featureName:k,featureId:l},components:{strong:(0,c.jsx)("strong",{})}})})]}),(0,c.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,c.jsxs)("div",{className:"flex items-center gap-2",children:[(0,c.jsx)(J,{id:"cleanup-checkbox",checked:p,onCheckedChange:a=>q(!0===a),disabled:j,"aria-label":o("deleteFeature.cleanupLabel")}),(0,c.jsx)(K.Label,{htmlFor:"cleanup-checkbox",className:"cursor-pointer text-sm",children:o("deleteFeature.cleanupLabel")})]}),m?(0,c.jsxs)("div",{className:"flex items-center gap-2",children:[(0,c.jsx)(J,{id:"cascade-delete-checkbox",checked:r,onCheckedChange:a=>s(!0===a),disabled:j,"aria-label":o("deleteFeature.deleteSubFeatures")}),(0,c.jsx)(K.Label,{htmlFor:"cascade-delete-checkbox",className:"cursor-pointer text-sm",children:o("deleteFeature.deleteSubFeatures")})]}):null,n?(0,c.jsxs)("div",{className:"flex items-center gap-2",children:[(0,c.jsx)(J,{id:"close-pr-checkbox",checked:t,onCheckedChange:a=>u(!0===a),disabled:j||!p,"aria-label":o("deleteFeature.closePullRequest")}),(0,c.jsx)(K.Label,{htmlFor:"close-pr-checkbox",className:"cursor-pointer text-sm",children:o("deleteFeature.closePullRequest")})]}):null]}),(0,c.jsxs)(h.AlertDialogFooter,{children:[(0,c.jsx)(h.AlertDialogCancel,{disabled:j,onClick:()=>b(!1),children:o("deleteFeature.cancel")}),(0,c.jsx)(h.AlertDialogAction,{variant:"destructive",disabled:j,onClick:()=>i(p,r,!!n&&t),children:j?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(e.Loader2,{className:"me-2 h-4 w-4 animate-spin"}),o("deleteFeature.deleting")]}):o("deleteFeature.delete")})]})]})})}a.s(["DeleteFeatureDialog",()=>L],865310)},942369,307730,a=>{"use strict";var b=a.i(289111);let c=(0,b.createServerReference)("4047fcf9280c5bc168edadf9f0c951bc2514b41fe0",b.callServer,void 0,b.findSourceMapURL,"startFeature");a.s(["startFeature",()=>c],942369);let d=(0,b.createServerReference)("404b80493cf36c04e22e68ebf8f56c46bf55d904c0",b.callServer,void 0,b.findSourceMapURL,"stopFeature");a.s(["stopFeature",()=>d],307730)},855271,a=>{"use strict";var b=a.i(289111);let c=(0,b.createServerReference)("4070f2c934a9ed351d223ad18ae9602cff12614292",b.callServer,void 0,b.findSourceMapURL,"resumeFeature");a.s(["resumeFeature",()=>c])}];
1
+ module.exports=[110606,a=>{"use strict";var b=a.i(151969);a.s(["CheckIcon",()=>b.default])},925603,a=>{"use strict";let b=(0,a.i(225700).default)("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]]);a.s(["Sparkles",()=>b],925603)},69428,a=>{"use strict";let b=(0,a.i(225700).default)("clipboard-list",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]]);a.s(["ClipboardList",()=>b],69428)},483886,a=>{"use strict";let b=(0,a.i(225700).default)("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);a.s(["Eye",()=>b],483886)},218615,a=>{"use strict";let b=(0,a.i(225700).default)("rotate-ccw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);a.s(["RotateCcw",()=>b],218615)},301585,744239,865310,a=>{"use strict";let b=(0,a.i(225700).default)("archive-restore",[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h2",key:"tvwodi"}],["path",{d:"M20 8v11a2 2 0 0 1-2 2h-2",key:"1gkqxj"}],["path",{d:"m9 15 3-3 3 3",key:"1pd0qc"}],["path",{d:"M12 12v9",key:"192myk"}]]);a.s(["ArchiveRestore",()=>b],301585);var c=a.i(556365),d=a.i(944592),e=a.i(488064);a.i(490370);var f=a.i(697708),g=a.i(224640),h=a.i(603703),i=a.i(110606),j=a.i(696853),j=j,k=a.i(406175),l=a.i(307420),m=a.i(559653),n=a.i(417329),o=a.i(264005),p=a.i(474432),q=a.i(914272),r=a.i(666873),s="Checkbox",[t,u]=(0,l.createContextScope)(s),[v,w]=t(s);function x(a){let{__scopeCheckbox:b,checked:e,children:f,defaultChecked:g,disabled:h,form:i,name:j,onCheckedChange:k,required:l,value:m="on",internal_do_not_use_render:o}=a,[p,q]=(0,n.useControllableState)({prop:e,defaultProp:g??!1,onChange:k,caller:s}),[r,t]=d.useState(null),[u,w]=d.useState(null),x=d.useRef(!1),y=!r||!!i||!!r.closest("form"),z={checked:p,disabled:h,setChecked:q,control:r,setControl:t,name:j,form:i,value:m,hasConsumerStoppedPropagationRef:x,required:l,defaultChecked:!F(g)&&g,isFormControl:y,bubbleInput:u,setBubbleInput:w};return(0,c.jsx)(v,{scope:b,...z,children:"function"==typeof o?o(z):f})}var y="CheckboxTrigger",z=d.forwardRef(({__scopeCheckbox:a,onKeyDown:b,onClick:e,...f},g)=>{let{control:h,value:i,disabled:j,checked:l,required:n,setControl:o,setChecked:p,hasConsumerStoppedPropagationRef:q,isFormControl:s,bubbleInput:t}=w(y,a),u=(0,k.useComposedRefs)(g,o),v=d.useRef(l);return d.useEffect(()=>{let a=h?.form;if(a){let b=()=>p(v.current);return a.addEventListener("reset",b),()=>a.removeEventListener("reset",b)}},[h,p]),(0,c.jsx)(r.Primitive.button,{type:"button",role:"checkbox","aria-checked":F(l)?"mixed":l,"aria-required":n,"data-state":G(l),"data-disabled":j?"":void 0,disabled:j,value:i,...f,ref:u,onKeyDown:(0,m.composeEventHandlers)(b,a=>{"Enter"===a.key&&a.preventDefault()}),onClick:(0,m.composeEventHandlers)(e,a=>{p(a=>!!F(a)||!a),t&&s&&(q.current=a.isPropagationStopped(),q.current||a.stopPropagation())})})});z.displayName=y;var A=d.forwardRef((a,b)=>{let{__scopeCheckbox:d,name:e,checked:f,defaultChecked:g,required:h,disabled:i,value:j,onCheckedChange:k,form:l,...m}=a;return(0,c.jsx)(x,{__scopeCheckbox:d,checked:f,defaultChecked:g,disabled:i,required:h,onCheckedChange:k,name:e,form:l,value:j,internal_do_not_use_render:({isFormControl:a})=>(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(z,{...m,ref:b,__scopeCheckbox:d}),a&&(0,c.jsx)(E,{__scopeCheckbox:d})]})})});A.displayName=s;var B="CheckboxIndicator",C=d.forwardRef((a,b)=>{let{__scopeCheckbox:d,forceMount:e,...f}=a,g=w(B,d);return(0,c.jsx)(q.Presence,{present:e||F(g.checked)||!0===g.checked,children:(0,c.jsx)(r.Primitive.span,{"data-state":G(g.checked),"data-disabled":g.disabled?"":void 0,...f,ref:b,style:{pointerEvents:"none",...a.style}})})});C.displayName=B;var D="CheckboxBubbleInput",E=d.forwardRef(({__scopeCheckbox:a,...b},e)=>{let{control:f,hasConsumerStoppedPropagationRef:g,checked:h,defaultChecked:i,required:j,disabled:l,name:m,value:n,form:q,bubbleInput:s,setBubbleInput:t}=w(D,a),u=(0,k.useComposedRefs)(e,t),v=(0,o.usePrevious)(h),x=(0,p.useSize)(f);d.useEffect(()=>{if(!s)return;let a=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"checked").set,b=!g.current;if(v!==h&&a){let c=new Event("click",{bubbles:b});s.indeterminate=F(h),a.call(s,!F(h)&&h),s.dispatchEvent(c)}},[s,v,h,g]);let y=d.useRef(!F(h)&&h);return(0,c.jsx)(r.Primitive.input,{type:"checkbox","aria-hidden":!0,defaultChecked:i??y.current,required:j,disabled:l,name:m,value:n,form:q,...b,tabIndex:-1,ref:u,style:{...b.style,...x,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});function F(a){return"indeterminate"===a}function G(a){return F(a)?"indeterminate":a?"checked":"unchecked"}E.displayName=D,a.s(["Checkbox",()=>A,"CheckboxIndicator",()=>C,"Indicator",()=>C,"Root",()=>A,"createCheckboxScope",()=>u,"unstable_BubbleInput",()=>E,"unstable_CheckboxBubbleInput",()=>E,"unstable_CheckboxProvider",()=>x,"unstable_CheckboxTrigger",()=>z,"unstable_Provider",()=>x,"unstable_Trigger",()=>z],827835);var H=a.i(827835),H=H,I=a.i(385536);function J({className:a,...b}){return(0,c.jsx)(H.Root,{"data-slot":"checkbox",className:(0,I.cn)("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground data-[state=indeterminate]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 cursor-pointer rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",a),...b,children:(0,c.jsx)(H.Indicator,{"data-slot":"checkbox-indicator",className:"grid place-content-center text-current transition-none",children:"indeterminate"===b.checked?(0,c.jsx)(j.default,{className:"size-3.5"}):(0,c.jsx)(i.CheckIcon,{className:"size-3.5"})})})}a.s(["Checkbox",()=>J],744239);var K=a.i(758860);function L({open:a,onOpenChange:b,onConfirm:i,isDeleting:j,featureName:k,featureId:l,hasChildren:m,hasOpenPr:n}){let{t:o}=(0,g.useTranslation)("web"),[p,q]=(0,d.useState)(!0),[r,s]=(0,d.useState)(!1),[t,u]=(0,d.useState)(!0);return(0,d.useEffect)(()=>{a&&(q(!0),s(!1),u(!0))},[a]),(0,d.useEffect)(()=>{p?u(!0):u(!1)},[p]),(0,c.jsx)(h.AlertDialog,{open:a,onOpenChange:b,children:(0,c.jsxs)(h.AlertDialogContent,{onCloseAutoFocus:a=>a.preventDefault(),children:[(0,c.jsxs)(h.AlertDialogHeader,{children:[(0,c.jsx)(h.AlertDialogTitle,{children:o("deleteFeature.title")}),(0,c.jsx)(h.AlertDialogDescription,{children:(0,c.jsx)(f.Trans,{t:o,i18nKey:"deleteFeature.description",values:{featureName:k,featureId:l},components:{strong:(0,c.jsx)("strong",{})}})})]}),(0,c.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,c.jsxs)("div",{className:"flex items-center gap-2",children:[(0,c.jsx)(J,{id:"cleanup-checkbox",checked:p,onCheckedChange:a=>q(!0===a),disabled:j,"aria-label":o("deleteFeature.cleanupLabel")}),(0,c.jsx)(K.Label,{htmlFor:"cleanup-checkbox",className:"cursor-pointer text-sm",children:o("deleteFeature.cleanupLabel")})]}),m?(0,c.jsxs)("div",{className:"flex items-center gap-2",children:[(0,c.jsx)(J,{id:"cascade-delete-checkbox",checked:r,onCheckedChange:a=>s(!0===a),disabled:j,"aria-label":o("deleteFeature.deleteSubFeatures")}),(0,c.jsx)(K.Label,{htmlFor:"cascade-delete-checkbox",className:"cursor-pointer text-sm",children:o("deleteFeature.deleteSubFeatures")})]}):null,n?(0,c.jsxs)("div",{className:"flex items-center gap-2",children:[(0,c.jsx)(J,{id:"close-pr-checkbox",checked:t,onCheckedChange:a=>u(!0===a),disabled:j||!p,"aria-label":o("deleteFeature.closePullRequest")}),(0,c.jsx)(K.Label,{htmlFor:"close-pr-checkbox",className:"cursor-pointer text-sm",children:o("deleteFeature.closePullRequest")})]}):null]}),(0,c.jsxs)(h.AlertDialogFooter,{children:[(0,c.jsx)(h.AlertDialogCancel,{disabled:j,onClick:()=>b(!1),children:o("deleteFeature.cancel")}),(0,c.jsx)(h.AlertDialogAction,{variant:"destructive",disabled:j,onClick:()=>i(p,r,!!n&&t),children:j?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(e.Loader2,{className:"me-2 h-4 w-4 animate-spin"}),o("deleteFeature.deleting")]}):o("deleteFeature.delete")})]})]})})}a.s(["DeleteFeatureDialog",()=>L],865310)},725297,234656,a=>{"use strict";var b=a.i(289111);let c=(0,b.createServerReference)("40b195fc3bd3d0b6f99d9ba0ce3b624b5201e8e478",b.callServer,void 0,b.findSourceMapURL,"startFeature");a.s(["startFeature",()=>c],725297);let d=(0,b.createServerReference)("4093cfae5c300fc17a16104784825641972f80a2c2",b.callServer,void 0,b.findSourceMapURL,"stopFeature");a.s(["stopFeature",()=>d],234656)},574214,a=>{"use strict";var b=a.i(289111);let c=(0,b.createServerReference)("40ef132579c95dc894986b34b75cb89dd65b39da86",b.callServer,void 0,b.findSourceMapURL,"resumeFeature");a.s(["resumeFeature",()=>c])}];
2
2
 
3
- //# sourceMappingURL=_f0d45e47._.js.map
3
+ //# sourceMappingURL=_f46d2018._.js.map