@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,3 +1,3 @@
1
- module.exports=[716533,a=>{"use strict";var b=a.i(944592),c=a.i(91109),d=a.i(952313),e=a.i(216839),f=a.i(609615),g=a.i(969887),h=a.i(855271),i=a.i(942369),j=a.i(307730),k=a.i(464577),l=a.i(446784),m=a.i(289111);let n=(0,m.createServerReference)("60495f1a3ee94d5d2693e35665a5b94c6c425339ab",m.callServer,void 0,m.findSourceMapURL,"deleteRepository");var o=a.i(670268);let p=(0,m.createServerReference)("4094d93eeeace2053edf550148c9336dfa0384d465",m.callServer,void 0,m.findSourceMapURL,"getFeatureMetadata");var q=a.i(484871),r=a.i(966691),s=a.i(219884),t=a.i(987139),u=a.i(887973),v=a.i(574146);a.i(490370);var w=a.i(224640);function x(a,b){let c=new Map;for(let a of b)"dependencyEdge"===a.type&&c.set(a.target,a.source);let d=new Map,e=new Map,f=new Map;for(let b of a)if("featureNode"===b.type){let a=b.data;d.set(b.id,{nodeId:b.id,data:a,parentNodeId:c.get(b.id),...a.applicationId&&{applicationId:a.applicationId}})}else"repositoryNode"===b.type?e.set(b.id,{nodeId:b.id,data:b.data}):"applicationNode"===b.type&&f.set(b.id,{nodeId:b.id,data:b.data});return{featureMap:d,repoMap:e,applicationMap:f}}function y(a,b){return(void 0===b.state||b.state===a.state)&&(void 0===b.lifecycle||b.lifecycle===a.lifecycle)&&(void 0===b.name||b.name===a.name)&&(void 0===b.description||b.description===a.description)}function z(a,b){if(a.size!==b.size)return!1;for(let[c,d]of a){let a=b.get(c);if(!a||d.parentNodeId!==a.parentNodeId||d.data!==a.data&&JSON.stringify(d.data)!==JSON.stringify(a.data))return!1}return!0}let A=(0,t.createLogger)("[Polling]"),B=0,C=0;function D(a,m){let t=(0,c.useRouter)(),D=(0,s.useSoundAction)("delete"),E=(0,s.useSoundAction)("create"),[F,G]=(0,b.useState)(!1),{nodes:H,edges:I,reconcile:J,updateFeature:K,addPendingFeature:L,removeFeature:M,restoreFeature:N,addRepository:O,removeRepository:P,replaceRepository:Q,getFeatureRepositoryPath:R,getRepositoryData:S,getRepoMapSize:T,addApplication:U,removeApplication:V,setCallbacks:W,beginMutation:X,endMutation:Y,isMutating:Z}=function(a,c,d=!1){let{i18n:f}=(0,w.useTranslation)(),g=(0,b.useMemo)(()=>(0,e.getCanvasLayoutDefaults)(f.dir()),[f]),h=(0,b.useMemo)(()=>x(a,c),[]),[i,j]=(0,b.useState)(h.featureMap),[k,l]=(0,b.useState)(h.repoMap),[m,n]=(0,b.useState)(h.applicationMap),[o,p]=(0,b.useState)(new Map),q=(0,b.useRef)(new Map),r=(0,b.useRef)(new Set),s=(0,b.useRef)(0),t=(0,b.useRef)(new Set),u=(0,b.useRef)(new Set),v=(0,b.useRef)(new Set),A=(0,b.useRef)({}),B=(0,b.useMemo)(()=>({onNodeAction:a=>A.current.onNodeAction?.(a),onNodeSettings:a=>A.current.onNodeSettings?.(a),onFeatureDelete:(a,b,c,d)=>A.current.onFeatureDelete?.(a,b,c,d),onRepositoryAdd:a=>A.current.onRepositoryAdd?.(a),onRepositoryClick:a=>A.current.onRepositoryClick?.(a),onRepositoryDelete:a=>A.current.onRepositoryDelete?.(a),onRetryFeature:a=>A.current.onRetryFeature?.(a),onStartFeature:a=>A.current.onStartFeature?.(a),onArchiveFeature:a=>A.current.onArchiveFeature?.(a),onUnarchiveFeature:a=>A.current.onUnarchiveFeature?.(a),onApplicationClick:a=>A.current.onApplicationClick?.(a),onApplicationDelete:a=>A.current.onApplicationDelete?.(a),onApplicationCreateSddFeature:a=>A.current.onApplicationCreateSddFeature?.(a)}),[]),C=(0,b.useRef)(i);C.current=i;let D=(0,b.useRef)(k);D.current=k;let E=(0,b.useMemo)(()=>{if(d)return i;let a=new Map;for(let[b,c]of i)"archived"!==c.data.state&&a.set(b,c);return a.size===i.size?i:a},[i,d]),F=(0,b.useMemo)(()=>(function(a,b,c,d,e){let f=[],g=[],h=a=>a.replace(/\\/g,"/"),i=new Map;for(let[a,c]of b)c.data.repositoryPath&&i.set(h(c.data.repositoryPath),a);let j=new Map;if(e)for(let[a,b]of e)b.data.id&&j.set(b.data.id,a);let k=new Map;for(let[a,c]of[...b.entries()].sort((a,b)=>{let c=a[1].data.createdAt,d=b[1].data.createdAt;return("number"!=typeof c||Number.isNaN(c)?1/0:c)-("number"!=typeof d||Number.isNaN(d)?1/0:d)})){let b={...c.data,...d?.onRepositoryAdd&&{onAdd:()=>d.onRepositoryAdd(a)},...d?.onRepositoryClick&&{onClick:()=>d.onRepositoryClick(a)},...d?.onRepositoryDelete&&{onDelete:d.onRepositoryDelete}};f.push({id:a,type:"repositoryNode",position:{x:0,y:0},data:b})}for(let[b,e,l]of[...[...a.entries()].map(([a,b])=>[a,b,!1]),...[...c.entries()].filter(([b])=>!a.has(b)).map(([a,b])=>[a,b,!0])]){let m="creating"===e.data.state||l,n={...e.data,...!m&&d?.onNodeAction&&{onAction:()=>d.onNodeAction(b)},...!m&&d?.onNodeSettings&&{onSettings:()=>d.onNodeSettings(b)},...!m&&d?.onFeatureDelete&&{onDelete:d.onFeatureDelete},...!m&&"error"===e.data.state&&d?.onRetryFeature&&{onRetry:d.onRetryFeature},...!m&&"pending"===e.data.state&&d?.onStartFeature&&{onStart:d.onStartFeature},...!m&&("running"===e.data.state||"action-required"===e.data.state)&&d?.onStopFeature&&{onStop:d.onStopFeature},...!m&&"archived"!==e.data.state&&"deleting"!==e.data.state&&d?.onArchiveFeature&&{onArchive:d.onArchiveFeature},...!m&&"archived"===e.data.state&&d?.onUnarchiveFeature&&{onUnarchive:d.onUnarchiveFeature}};f.push({id:b,type:"featureNode",position:{x:0,y:0},data:n});let o=e.applicationId?j.get(e.applicationId):void 0;if(e.parentNodeId&&(a.has(e.parentNodeId)||c.has(e.parentNodeId)))g.push({id:`dep-${e.parentNodeId}-${b}`,source:e.parentNodeId,target:b,type:"dependencyEdge"});else if(o)g.push({id:`dep-${o}-${b}`,source:o,target:b,type:"dependencyEdge"});else{let a=h(e.data.repositoryPath),c=i.get(a)??function(a){if(k.has(a))return k.get(a);let b=`virtual-repo-${a}`,c=a.split("/").filter(Boolean).at(-1)??a;return f.push({id:b,type:"repositoryNode",position:{x:0,y:0},data:{name:c,repositoryPath:a}}),k.set(a,b),b}(a);g.push({id:`edge-${c}-${b}`,source:c,target:b,style:{strokeDasharray:"5 5"}})}}if(e)for(let[a,b]of e){let c={...b.data,...d?.onApplicationClick&&{onClick:()=>d.onApplicationClick(b.data.id)},...d?.onApplicationDelete&&{onDelete:d.onApplicationDelete},...d?.onApplicationCreateSddFeature&&{onCreateSddFeature:d.onApplicationCreateSddFeature}};f.push({id:a,type:"applicationNode",position:{x:0,y:0},data:c})}let l=new Set;for(let a of g)"dependencyEdge"===a.type&&l.add(a.source);let m=g.length>0;for(let a of f){let b=a.data;b.showHandles=m,"featureNode"===a.type&&(b.hasChildren=l.has(a.id))}return{nodes:f,edges:g}})(E,k,o,B,m),[E,k,o,B,m]),G=(0,b.useRef)({key:"",positions:new Map}),{nodes:H,edges:I}=(0,b.useMemo)(()=>{let a=F.nodes.map(a=>a.id).sort().join(","),b=F.edges.map(a=>`${a.source}-${a.target}`).sort().join(","),c=`${a}|${b}|${g.direction}`;if(c!==G.current.key){let a=(0,e.layoutWithDagre)(F.nodes,F.edges,g),b=new Map;for(let c of a.nodes)b.set(c.id,{position:c.position,targetPosition:c.targetPosition,sourcePosition:c.sourcePosition});let d=G.current.positions;if(d.size>0){let c=0,e=0;for(let[a,f]of b){let b=d.get(a);if(b){c=b.position.x-f.position.x,e=b.position.y-f.position.y;break}}if(0!==c||0!==e){for(let a of b.values())a.position={x:a.position.x+c,y:a.position.y+e};for(let b of a.nodes)b.position={x:b.position.x+c,y:b.position.y+e}}}return G.current={key:c,positions:b},a}let{positions:d}=G.current;return{nodes:F.nodes.map(a=>{let b=d.get(a.id);return b?{...a,...b}:a}),edges:F.edges}},[F,g]),J=(0,b.useCallback)((a,b)=>{if(s.current>0)return;let{featureMap:c,repoMap:d}=x(a,b),e=new Set([...c.values()].map(a=>`${a.data.name}\0${a.data.repositoryPath}`));j(a=>{let b=[...a.entries()].filter(([,a])=>"creating"===a.data.state),d=new Map(c);for(let[a,c]of b){let b=`${c.data.name}\0${c.data.repositoryPath}`;e.has(b)||d.set(a,c)}let f=new Set;for(let[b,c]of a)"deleting"===c.data.state&&(d.has(b)?d.set(b,{...d.get(b),data:{...d.get(b).data,state:"deleting"}}):u.current.has(b)||(d.set(b,c),f.add(b)));for(let[a,b]of(u.current=f,q.current)){let c=d.get(a);c&&(d.set(a,{...c,data:{...c.data,...b}}),q.current.delete(a))}return z(a,d)?a:d}),p(a=>{if(0===a.size)return a;let b=!1,c=new Map(a);for(let[d,f]of a){let a=`${f.data.name}\0${f.data.repositoryPath}`;e.has(a)&&(c.delete(d),b=!0)}return b?c:a}),l(a=>{let b=new Map(d);for(let a of v.current)b.has(a)?b.delete(a):v.current.delete(a);let c=new Set([...d.values()].map(a=>a.data.repositoryPath));for(let[d,e]of a){if(b.has(d)||c.has(e.data.repositoryPath)){r.current.delete(d);continue}(d.startsWith("repo-temp-")||r.current.has(d))&&b.set(d,e)}return z(a,b)?a:b});let{applicationMap:f}=x(a,b);n(a=>z(a,f)?a:f)},[]),K=(0,b.useCallback)((a,b)=>{j(c=>{let d=c.get(a);if(!d)return q.current.set(a,{...q.current.get(a),...b}),c;if(q.current.delete(a),y(d.data,b))return c;let e=new Map(c);return e.set(a,{...d,data:{...d.data,...b}}),e}),p(c=>{let d=c.get(a);if(!d||y(d.data,b))return c;let e=new Map(c);return e.set(a,{...d,data:{...d.data,...b}}),e})},[]),L=(0,b.useCallback)((a,b,c)=>{p(d=>{let e=new Map(d);return e.set(a,{nodeId:a,data:b,parentNodeId:c,...b.applicationId&&{applicationId:b.applicationId}}),e})},[]),M=(0,b.useCallback)(a=>{p(b=>{if(!b.has(a))return b;let c=new Map(b);return c.delete(a),c})},[]),N=(0,b.useCallback)(a=>{j(b=>{if(!b.has(a))return b;let c=new Map(b);return c.delete(a),c})},[]),O=(0,b.useCallback)((a,b)=>{j(c=>{let d=new Map(c);return d.set(a,b),d})},[]),P=(0,b.useCallback)((a,b)=>{r.current.add(a),v.current.delete(a),l(c=>{let d=new Map(c);return d.set(a,{nodeId:a,data:b}),d})},[]),Q=(0,b.useCallback)(a=>{r.current.delete(a),v.current.add(a),l(b=>{if(!b.has(a))return b;let c=new Map(b);return c.delete(a),c})},[]),R=(0,b.useCallback)((a,b,c)=>{r.current.delete(a),r.current.add(b),l(d=>{if(!d.has(a))return d;let e=new Map(d);return e.delete(a),e.set(b,{nodeId:b,data:c}),e})},[]),S=(0,b.useCallback)((a,b)=>{n(c=>{let d=new Map(c);return d.set(a,{nodeId:a,data:b}),d})},[]),T=(0,b.useCallback)(a=>{n(b=>{if(!b.has(a))return b;let c=new Map(b);return c.delete(a),c})},[]),U=(0,b.useCallback)(a=>C.current.get(a)?.data.repositoryPath,[]),V=(0,b.useCallback)(a=>D.current.get(a)?.data,[]),W=(0,b.useCallback)(()=>D.current.size,[]),X=(0,b.useCallback)(a=>{A.current=a},[]),Y=(0,b.useCallback)(()=>{s.current++},[]),Z=(0,b.useCallback)((a=3e3)=>{let b=setTimeout(()=>{s.current=Math.max(0,s.current-1),t.current.delete(b)},a);t.current.add(b)},[]),$=(0,b.useCallback)(()=>s.current>0,[]);return(0,b.useEffect)(()=>{let a=t.current;return()=>{for(let b of a)clearTimeout(b);a.clear()}},[]),{nodes:H,edges:I,reconcile:J,updateFeature:K,addPendingFeature:L,removePendingFeature:M,removeFeature:N,restoreFeature:O,addRepository:P,removeRepository:Q,replaceRepository:R,getFeatureRepositoryPath:U,getRepositoryData:V,getRepoMapSize:W,addApplication:S,removeApplication:T,setCallbacks:X,beginMutation:Y,endMutation:Z,isMutating:$}}(a,m,F),$=(0,b.useRef)(H),_=(0,b.useRef)(I);(0,b.useEffect)(()=>{$.current=H,_.current=I},[H,I]);let aa=(0,b.useMemo)(()=>a.map(a=>a.id).sort().join(","),[a]),ab=(0,b.useMemo)(()=>a.filter(a=>"featureNode"===a.type).map(a=>{let b=a.data;return`${a.id}:${b.state}:${b.lifecycle}`}).sort().join(","),[a]),ac=(0,b.useRef)("");(0,b.useEffect)(()=>{let b=`${aa}|${ab}`;b!==ac.current&&(ac.current=b,J(a,m))},[aa,ab,a,m,J]);let ad=(0,b.useRef)(new Map),{events:ae,connectionStatus:af}=(0,q.useAgentEventsContext)(),{store:ag}=(0,r.useDeploymentStatusContext)();(0,b.useEffect)(()=>{let b=ad.current;for(let c of a){if("featureNode"!==c.type)continue;let a=c.data,e=b.get(c.id);void 0!==e&&e!==a.state&&(ae.some(b=>b.featureId===a.featureId&&(0,v.mapEventTypeToState)(b.eventType)===a.state)||("done"===a.state?d.toast.success(a.name,{description:"Feature completed!"}):"action-required"===a.state?d.toast.warning(a.name,{description:"Waiting for your approval",action:{label:"Review",onClick:()=>t.push(`/feature/${a.featureId}`)}}):"error"===a.state&&d.toast.error(a.name,{description:a.errorMessage??"Agent failed"}))),b.set(c.id,a.state)}},[ab,a,ae,t]);let ah=(0,b.useRef)(0);(0,b.useEffect)(()=>{if(ah.current>ae.length&&(ah.current=0),ae.length<=ah.current)return;let a=ae.slice(ah.current);for(let{featureId:b,state:c,lifecycle:d}of(ah.current=ae.length,(0,v.resolveSseEventUpdates)(a)))if(void 0!==c||void 0!==d){let a=`feat-${b}`,e=$.current.find(b=>b.id===a),f=e?e.data.state:void 0;if("deleting"===f||"error"===c&&Z()&&"running"===f)continue;K(a,{...void 0!==c&&{state:c},...void 0!==d&&{lifecycle:d}})}},[ae,K,Z]),(0,b.useEffect)(()=>{let a=a=>{let{featureId:b}=a.detail;X(),K(`feat-${b}`,{state:"running"}),Y()};return window.addEventListener("shep:feature-approved",a),()=>window.removeEventListener("shep:feature-approved",a)},[K,X,Y]);let ai=(0,b.useRef)(new Set),aj=(0,b.useRef)(0);(0,b.useEffect)(()=>{if(aj.current>ae.length&&(aj.current=0),ae.length<=aj.current)return;let a=ae.slice(aj.current);for(let b of(aj.current=ae.length,a)){if("Feature metadata updated"!==b.message||ai.current.has(b.featureId))continue;ai.current.add(b.featureId);let a=`feat-${b.featureId}`;p(b.featureId).then(b=>{b&&K(a,{name:b.name,description:b.description})}).catch(()=>{})}},[ae,K]);let ak=(0,b.useRef)("connected"===af);ak.current="connected"===af,(0,b.useEffect)(()=>{A.debug("polling enabled (15000ms recovery interval)");let a=setInterval(async()=>{if(!document.hidden&&!ak.current&&!Z())try{let a=await fetch("/api/graph-data");if(!a.ok)throw Error(`status ${a.status}`);let{nodes:b,edges:c,deployments:d}=await a.json();J(b,c),Array.isArray(d)&&ag.hydrate(d)}catch{A.warn("recovery poll failed — will retry next interval")}},15e3);return()=>{A.debug("polling disabled"),clearInterval(a)}},[J,Z,ag]);let al=(0,b.useCallback)(a=>{},[]),am=(0,b.useCallback)(a=>{},[]),an=(0,b.useCallback)((a,b,c)=>{let d=b?.featureId?`feat-${b.featureId}`:`feature-${Date.now()}-${B++}`,e={name:b?.name??"New Feature",description:b?.description??"Describe what this feature does",featureId:b?.featureId??`#${d.slice(-4)}`,lifecycle:"requirements",state:b?.state??"running",progress:0,repositoryPath:b?.repositoryPath??"",branch:b?.branch??"",...b?.applicationId&&{applicationId:b.applicationId}};return L(d,e,"dependencyEdge"===c&&a?a:void 0),d},[L]),ao=(0,b.useCallback)(a=>{let b=`feat-${a}`;X(),K(b,{state:"running"}),(0,h.resumeFeature)(a).then(a=>{a.error?(K(b,{state:"error"}),d.toast.error(a.error)):d.toast.success("Feature resumed")}).catch(()=>{K(b,{state:"error"}),d.toast.error("Failed to resume feature")}).finally(()=>Y())},[K,X,Y]),ap=(0,b.useCallback)(a=>{let b=`feat-${a}`;X(),K(b,{state:"running"}),(0,i.startFeature)(a).then(a=>{a.error?(K(b,{state:"pending"}),d.toast.error(a.error)):d.toast.success("Feature started")}).catch(()=>{K(b,{state:"pending"}),d.toast.error("Failed to start feature")}).finally(()=>Y())},[K,X,Y]),aq=(0,b.useCallback)(a=>{X(),(0,j.stopFeature)(a).then(a=>{a.error?d.toast.error(a.error):d.toast.success("Agent stopped")}).catch(()=>{d.toast.error("Failed to stop agent")}).finally(()=>Y())},[X,Y]),ar=(0,b.useCallback)(a=>{let b=`feat-${a}`;X(),K(b,{state:"archived"}),(0,f.archiveFeature)(a).then(a=>{a.error?(K(b,{state:"done"}),d.toast.error(a.error)):d.toast.success("Feature archived")}).catch(()=>{K(b,{state:"done"}),d.toast.error("Failed to archive feature")}).finally(()=>Y())},[K,X,Y]),as=(0,b.useCallback)(a=>{let b=`feat-${a}`;X(),K(b,{state:"done"}),(0,k.unarchiveFeature)(a).then(a=>{a.error?(K(b,{state:"archived"}),d.toast.error(a.error)):d.toast.success("Feature unarchived")}).catch(()=>{K(b,{state:"archived"}),d.toast.error("Failed to unarchive feature")}).finally(()=>Y())},[K,X,Y]),at=(0,b.useCallback)((a,b,c,e)=>{let f=`feat-${a}`,h=[];if(!0===c){let a=[f];for(;a.length>0;){let b=a.shift();for(let c of _.current)"dependencyEdge"===c.type&&c.source===b&&(h.push(c.target),a.push(c.target))}}let i=new Map;for(let a of[f,...h]){let b=$.current.find(b=>b.id===a);b&&i.set(a,b.data.state)}for(let a of(X(),K(f,{state:"deleting"}),h))K(a,{state:"deleting"});D.play(),t.push("/control-center"),(0,g.deleteFeature)(a,b,c,e).then(a=>{if(a.error){for(let[a,b]of i)b&&K(a,{state:b});d.toast.error(a.error)}else for(let a of(M(f),h))M(a)}).catch(()=>{for(let[a,b]of i)b&&K(a,{state:b});d.toast.error("Failed to delete feature")}).finally(()=>Y())},[t,D,K,M,X,Y]),au=(0,b.useCallback)(async(a,b)=>{let c=`repo-${a}`,e=new Set(_.current.filter(a=>a.source===c).map(a=>a.target)),f=S(c),g=new Map;for(let a of e){let b=$.current.find(b=>b.id===a);b&&g.set(a,{nodeId:a,data:b.data})}let h=()=>{for(let[a,b]of(f&&O(c,f),g))N(a,b)};for(let a of(X(),P(c),e))M(a);try{let c=await n(a,{deleteFromDisk:b?.deleteFromDisk===!0});if(!c.success){d.toast.error(c.error??"Failed to remove repository"),h();return}D.play()}catch{d.toast.error("Failed to remove repository"),h()}finally{Y()}},[D,P,M,O,N,S,X,Y]),av=(0,b.useCallback)(async a=>{let b=(0,u.featureIdForApplication)(a);X(),V(b),D.play();try{let b=await (0,o.deleteApplication)(a);b.error&&d.toast.error(b.error)}catch{d.toast.error("Failed to delete application")}finally{Y()}},[D,V,X,Y]),aw=(0,b.useCallback)(a=>{let b=(0,e.layoutWithDagre)($.current,_.current,{...(0,e.getCanvasLayoutDefaults)(),direction:a});J(b.nodes,b.edges)},[J]);return{nodes:H,edges:I,onNodesChange:al,handleConnect:am,handleAddRepository:(0,b.useCallback)(a=>{let b=0===T(),c=`repo-temp-${++C}`,e=a.replace(/[\\/]+$/,"").split(/[\\/]/).pop()??a;return X(),O(c,{name:e,repositoryPath:a,id:c,createdAt:Date.now(),gitInfoStatus:"loading"}),(0,l.addRepository)({path:a,name:e}).then(a=>{if(a.error){P(c),d.toast.error(a.error);return}let b=a.repository;Q(c,`repo-${b.id}`,{name:b.name,repositoryPath:b.path,id:b.id,createdAt:b.createdAt instanceof Date?b.createdAt.getTime():Number(b.createdAt)}),E.play()}).catch(()=>{P(c),d.toast.error("Failed to add repository")}).finally(()=>Y()),{wasEmpty:b,repoPath:a,tempNodeId:c}},[O,P,Q,E,T,X,Y]),handleArchiveFeature:ar,handleLayout:aw,handleDeleteFeature:at,handleRetryFeature:ao,handleStartFeature:ap,handleStopFeature:aq,handleUnarchiveFeature:as,handleDeleteRepository:au,handleDeleteApplication:av,createFeatureNode:an,addApplication:U,showArchived:F,setShowArchived:G,getFeatureRepositoryPath:R,getRepositoryData:S,setCallbacks:W}}a.s(["useControlCenterState",()=>D],716533)},259949,a=>{"use strict";var b=a.i(556365),c=a.i(442030),d=a.i(143707),e=a.i(944592),f=a.i(91109),g=a.i(142527),h=a.i(867837);a.i(490370);var i=a.i(224640),j=a.i(385536),k=a.i(118948);a.i(738702);var l=a.i(516223);a.i(54250);var m=a.i(901330),n=a.i(660047),o=a.i(323784),p=a.i(450488),q=a.i(863698),r=a.i(403195),s=a.i(216605),t=a.i(450490),u=a.i(5698),v=a.i(953170),w=a.i(492548),x=a.i(745449),y=a.i(781781),z=a.i(218615),A=a.i(612882),B=a.i(697708),C=a.i(974304);a.i(569029);var D=a.i(705623),E=a.i(645670),F=a.i(744239),G=a.i(758860),H=a.i(182934),I=a.i(118662),J=a.i(821333),K=a.i(755628),L=a.i(405555),M=a.i(533419),N=a.i(661583);function O({data:a,selected:d}){let{t:g,i18n:l}=(0,i.useTranslation)("web"),m=(0,f.useRouter)(),O="rtl"===l.dir(),P=O?n.Position.Right:n.Position.Left,Q=O?n.Position.Left:n.Position.Right,R=(0,J.useFeatureFlags)(),[S,T]=(0,e.useState)(!1),[U,V]=(0,e.useState)(!1);(0,e.useEffect)(()=>{S&&V(!1)},[S]);let W=a.id?`repo-${a.id}`:`repo-${a.name}`,X=(0,M.useTurnStatus)(W),Y=(0,K.useRepositoryActions)(a.repositoryPath?{repositoryId:a.id,repositoryPath:a.repositoryPath}:null),Z=(0,I.useDeployAction)(a.repositoryPath?{targetId:a.repositoryPath,targetType:"repository",repositoryPath:a.repositoryPath}:null),$="Booting"===Z.status||"Ready"===Z.status,_=(0,e.useCallback)((b,c)=>{if(!a.repositoryPath)return;let d=b.preview?b.preview.slice(0,200):"Unknown conversation",e=["Continue work from a previous agent session.","","## Session Context",`- Session ID: ${b.id}`,`- Messages: ${b.messageCount}`,b.lastMessageAt?`- Last active: ${b.lastMessageAt}`:"",`- Conversation file: ${c}`,"","## Session Preview",`> ${d}`,"","## Instructions","1. Read the full conversation history from the file above",`2. Analyze the current state of the repository — what was done, what remains`,"3. Create or update spec files to accurately reflect the current state and remaining work","4. Continue implementing any unfinished work from the conversation"].filter(Boolean).join("\n");m.push((0,C.buildCreateUrl)({repo:a.repositoryPath,prompt:e}))},[a.repositoryPath,m]);return(0,b.jsxs)("div",{className:(0,j.cn)("group relative",a.onDelete&&a.id&&"ps-10"),style:{direction:O?"rtl":"ltr"},children:[a.showHandles?(0,b.jsx)(c.Handle,{type:"target",position:P,isConnectable:!1,className:"opacity-0!",style:{top:70}}):null,a.onDelete&&a.id?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"absolute -start-3 top-1/2 -translate-y-1/2 opacity-0 transition-opacity group-hover:opacity-100",children:(0,b.jsx)(H.TooltipProvider,{children:(0,b.jsxs)(H.Tooltip,{children:[(0,b.jsx)(H.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{"aria-label":g("repositoryNode.removeRepository"),"data-testid":"repository-node-delete-button",onClick:a=>{a.stopPropagation(),T(!0)},className:"bg-card text-muted-foreground hover:border-destructive hover:text-destructive flex h-7 w-7 cursor-pointer items-center justify-center rounded-full border shadow-sm transition-colors",children:(0,b.jsx)(s.Trash2,{className:"h-3.5 w-3.5"})})}),(0,b.jsx)(H.TooltipContent,{children:g("repositoryNode.removeRepository")})]})})}),(0,b.jsx)(E.Dialog,{open:S,onOpenChange:T,children:(0,b.jsxs)(E.DialogContent,{className:"max-w-sm",children:[(0,b.jsxs)(E.DialogHeader,{children:[(0,b.jsx)(E.DialogTitle,{children:g("repositoryNode.removeConfirmTitle")}),(0,b.jsxs)(E.DialogDescription,{children:[(0,b.jsx)(B.Trans,{t:g,i18nKey:"repositoryNode.removeConfirmDescription",values:{name:a.name},components:{strong:(0,b.jsx)("strong",{})}})," ",g(U?"repositoryNode.removeConfirmDescriptionDeleteFiles":"repositoryNode.removeConfirmDescriptionKeepFiles")]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(F.Checkbox,{id:"repository-delete-from-disk",checked:U,onCheckedChange:a=>V(!0===a),"data-testid":"repository-node-delete-from-disk-checkbox","aria-label":g("repositoryNode.deleteFromDiskLabel")}),(0,b.jsx)(G.Label,{htmlFor:"repository-delete-from-disk",className:"cursor-pointer text-sm font-normal",children:g("repositoryNode.deleteFromDiskLabel")})]}),(0,b.jsxs)(E.DialogFooter,{className:"grid grid-cols-2 gap-2 sm:flex-none",children:[(0,b.jsx)(E.DialogClose,{asChild:!0,children:(0,b.jsx)(k.Button,{variant:"outline",children:g("repositoryNode.cancel")})}),(0,b.jsx)(k.Button,{variant:"destructive","data-testid":"repository-node-delete-confirm-button",onClick:()=>{T(!1),a.onDelete?.(a.id,{deleteFromDisk:U})},children:g("repositoryNode.remove")})]})]})})]}):null,(0,b.jsxs)("div",{role:"button",tabIndex:0,"data-testid":"repository-node-card","data-repo-name":a.name,onClick:b=>{b.stopPropagation(),a.onClick?.()},onKeyDown:b=>{("Enter"===b.key||" "===b.key)&&(b.preventDefault(),b.stopPropagation(),a.onClick?.())},className:(0,j.cn)("nodrag bg-card flex w-[26rem] cursor-pointer flex-col overflow-hidden rounded-xl border shadow-sm transition-[border-color,box-shadow] duration-200 dark:bg-neutral-800/80",d&&"border-blue-400 dark:border-amber-500/60"),children:[(0,b.jsxs)("div",{className:"flex items-center gap-3 px-4 py-3",children:[(0,b.jsx)(o.Github,{className:"text-muted-foreground h-5 w-5 shrink-0"}),(0,b.jsx)("span",{"data-testid":"repository-node-name",className:"min-w-0 truncate text-sm font-medium",children:a.name}),(0,b.jsxs)("div",{className:(0,j.cn)("flex shrink-0 items-center gap-2",(a.repositoryPath??a.onAdd)&&"ms-auto"),onClick:a=>a.stopPropagation(),children:[a.repositoryPath?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(H.TooltipProvider,{children:(0,b.jsxs)(H.Tooltip,{children:[(0,b.jsx)(H.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("span",{className:"flex items-center",children:(0,b.jsx)(D.ActionButton,{label:g("repositoryNode.openInIde"),onClick:Y.openInIde,loading:Y.ideLoading,error:!!Y.ideError,icon:p.Code2,iconOnly:!0,variant:"ghost",size:"icon-xs"})})}),(0,b.jsx)(H.TooltipContent,{children:g("repositoryNode.openInIde")})]})}),(0,b.jsx)(H.TooltipProvider,{children:(0,b.jsxs)(H.Tooltip,{children:[(0,b.jsx)(H.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("span",{className:"flex items-center",children:(0,b.jsx)(D.ActionButton,{label:g("repositoryNode.openInShell"),onClick:Y.openInShell,loading:Y.shellLoading,error:!!Y.shellError,icon:q.Terminal,iconOnly:!0,variant:"ghost",size:"icon-xs"})})}),(0,b.jsx)(H.TooltipContent,{children:g("repositoryNode.openInShell")})]})}),(0,b.jsx)(H.TooltipProvider,{children:(0,b.jsxs)(H.Tooltip,{children:[(0,b.jsx)(H.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("span",{className:"flex items-center",children:(0,b.jsx)(D.ActionButton,{label:g("repositoryNode.openFolder"),onClick:Y.openFolder,loading:Y.folderLoading,error:!!Y.folderError,icon:r.FolderOpen,iconOnly:!0,variant:"ghost",size:"icon-xs"})})}),(0,b.jsx)(H.TooltipContent,{children:g("repositoryNode.openFolder")})]})}),(0,b.jsx)(H.TooltipProvider,{children:(0,b.jsxs)(H.Tooltip,{children:[(0,b.jsx)(H.TooltipTrigger,{asChild:!0,children:(0,b.jsxs)(k.Button,{variant:"ghost",size:"icon-xs","aria-label":g("repositoryNode.chatWithAgent"),onClick:b=>{b.stopPropagation(),a.id&&m.push(`/repository/${a.id}/chat`)},className:"nodrag relative cursor-pointer text-violet-500 hover:text-violet-600 dark:text-violet-400 dark:hover:text-violet-300",children:[(0,b.jsx)(A.MessageSquare,{className:"h-3 w-3"}),(0,b.jsx)(L.ChatDotIndicator,{status:X})]})}),(0,b.jsx)(H.TooltipContent,{children:g("repositoryNode.chatWithAgent")})]})}),(0,b.jsx)(N.FeatureSessionsDropdown,{repositoryPath:a.repositoryPath,includeWorktrees:!0,onCreateFromSession:_})]}):null,a.onAdd?(0,b.jsx)("div",{className:"ms-1.5"}):null,a.onAdd?(0,b.jsx)(H.TooltipProvider,{children:(0,b.jsxs)(H.Tooltip,{children:[(0,b.jsx)(H.TooltipTrigger,{asChild:!0,children:(0,b.jsxs)("button",{"aria-label":g("repositoryNode.newFeature"),"data-testid":"repository-node-add-button",onClick:b=>{b.stopPropagation(),a.onAdd?.()},className:(0,j.cn)("flex h-6 shrink-0 cursor-pointer items-center gap-0.5 rounded bg-blue-500 px-1.5 text-[11px] font-bold text-white transition-colors hover:bg-blue-600 dark:bg-amber-500 dark:hover:bg-amber-400",a.pulseAdd&&"animate-pulse-cta"),children:[(0,b.jsx)(h.Plus,{className:"h-3 w-3"}),(0,b.jsx)("span",{className:"translate-y-px",children:g("repositoryNode.new")})]})}),(0,b.jsx)(H.TooltipContent,{side:"top",children:g("repositoryNode.newFeature")})]})}):null]})]}),a.branch?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{"data-testid":"repository-node-git-info",className:"text-muted-foreground border-border/50 border-t px-4 py-2",children:(0,b.jsxs)("div",{className:"flex items-center gap-3 text-xs",children:[(0,b.jsxs)("span",{className:"flex items-center gap-1 truncate","data-testid":"repository-node-branch",children:[(0,b.jsx)(v.GitBranch,{className:"h-3 w-3 shrink-0"}),(0,b.jsx)("span",{className:"truncate",children:a.branch})]}),null!=a.behindCount&&a.behindCount>0?(0,b.jsxs)("span",{className:"flex shrink-0 items-center gap-1 whitespace-nowrap text-amber-500","data-testid":"repository-node-behind",children:[(0,b.jsx)(x.ArrowDown,{className:"h-3 w-3 shrink-0"}),g("repositoryNode.behind",{count:a.behindCount})]}):null]})}),a.commitMessage?(0,b.jsx)("div",{"data-testid":"repository-node-commit-info",className:"text-muted-foreground border-border/50 border-t px-4 py-2",children:(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[(0,b.jsx)(w.GitCommitHorizontal,{className:"h-3 w-3 shrink-0"}),(0,b.jsx)("span",{className:"min-w-0 truncate","data-testid":"repository-node-commit-message",children:a.commitMessage}),a.committer?(0,b.jsxs)("span",{className:"text-muted-foreground/70 ms-auto flex shrink-0 items-center gap-1","data-testid":"repository-node-committer",children:[(0,b.jsx)(y.User,{className:"h-3 w-3 shrink-0"}),(0,b.jsx)("span",{children:a.committer})]}):null]})}):null]}):"not-a-repo"===a.gitInfoStatus?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{"data-testid":"repository-node-not-repo",className:"text-muted-foreground border-border/50 border-t px-4 py-2",children:(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[(0,b.jsx)(r.FolderOpen,{className:"h-3 w-3 shrink-0"}),(0,b.jsx)("span",{className:"min-w-0 truncate opacity-60",children:a.repositoryPath??"Unknown path"})]})}),(0,b.jsx)("div",{className:"text-muted-foreground border-border/50 border-t px-4 py-2",children:(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs opacity-40",children:[(0,b.jsx)(v.GitBranch,{className:"h-3 w-3 shrink-0"}),(0,b.jsx)("span",{children:g("repositoryNode.notAGitRepository")})]})})]}):"ready"!==a.gitInfoStatus?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{"data-testid":"repository-node-git-loading",className:"border-border/50 border-t px-4 py-2",children:(0,b.jsxs)("div",{className:"flex h-4 items-center gap-2 text-xs",children:[(0,b.jsx)(v.GitBranch,{className:"text-muted-foreground h-3 w-3 shrink-0"}),(0,b.jsx)("span",{className:"bg-muted h-3 w-20 animate-pulse rounded"})]})}),(0,b.jsx)("div",{className:"border-border/50 border-t px-4 py-2",children:(0,b.jsxs)("div",{className:"flex h-4 items-center gap-2 text-xs",children:[(0,b.jsx)(w.GitCommitHorizontal,{className:"text-muted-foreground h-3 w-3 shrink-0"}),(0,b.jsx)("span",{className:"bg-muted h-3 w-36 animate-pulse rounded"})]})})]}):null,R.envDeploy&&a.repositoryPath?(0,b.jsx)("div",{"data-testid":"repository-node-dev-preview",className:"border-border/50 border-t px-4 py-2",onClick:a=>a.stopPropagation(),children:(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[Z.deployError?(0,b.jsx)("span",{className:"truncate text-xs text-red-500",children:Z.deployError}):$?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"me-0.5 inline-block h-2 w-2 shrink-0 rounded-full bg-green-500"}),Z.url?(0,b.jsx)("a",{href:Z.url,target:"_blank",rel:"noopener noreferrer",className:"truncate text-green-700 hover:underline dark:text-green-400",children:Z.url}):(0,b.jsx)("span",{className:"text-muted-foreground",children:g("repositoryNode.starting")})]}):(0,b.jsxs)("span",{className:"text-muted-foreground inline-flex items-baseline gap-2",children:[(0,b.jsx)("span",{children:g("repositoryNode.run")}),(0,b.jsx)("span",{className:"text-muted-foreground/50 text-[10px]",children:g("repositoryNode.startLocalEnvironment")})]}),(0,b.jsx)(H.TooltipProvider,{children:(0,b.jsxs)(H.Tooltip,{children:[(0,b.jsx)(H.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("span",{className:(0,j.cn)("ms-auto flex items-center",!$&&!Z.deployError&&"[&_button]:text-green-600 [&_button]:hover:text-green-700 dark:[&_button]:text-green-400 dark:[&_button]:hover:text-green-300"),children:(0,b.jsx)(D.ActionButton,{label:g(Z.deployError?"repositoryNode.retry":$?"repositoryNode.stopDevServer":"repositoryNode.startDevServer"),onClick:$?Z.stop:Z.deploy,loading:Z.deployLoading||Z.stopLoading,error:!1,icon:Z.deployError?z.RotateCcw:$?u.Square:t.Play,iconOnly:!0,variant:"ghost",size:"icon-xs"})})}),(0,b.jsx)(H.TooltipContent,{children:g($?"repositoryNode.stopDevServer":"repositoryNode.startDevServer")})]})})]})}):null]}),a.onAdd||a.showHandles?(0,b.jsx)(c.Handle,{type:"source",position:Q,isConnectable:!a.showHandles,className:"opacity-0!",style:{top:70}}):null]})}a.i(478454),a.i(302824),a.i(513126);var P=a.i(771238),Q=a.i(882014),R=a.i(488064),S=a.i(746847),T=a.i(887973),U=a.i(261189);function V({data:a,selected:d}){let{i18n:f,t:g}=(0,i.useTranslation)("web"),l="rtl"===f.dir(),m=l?n.Position.Right:n.Position.Left,o=l?n.Position.Left:n.Position.Right,[p,q]=(0,e.useState)(!1),r=1+a.additionalPathCount,v=1===r?"1 repository":`${r} repositories`,w=(0,M.useTurnStatus)((0,T.featureIdForApplication)(a.id)),x=(0,I.useDeployAction)({targetId:a.id,targetType:"application",repositoryPath:a.repositoryPath}),y=x.url,A=(0,U.deriveAppLiveStatus)(a.status,w,!!y),B=(0,e.useCallback)(a=>{a.stopPropagation()},[]),C=(0,e.useCallback)(a=>{a.stopPropagation(),y&&window.open(y,"_blank","noopener,noreferrer")},[y]);return(0,b.jsxs)("div",{className:(0,j.cn)("group relative",a.onDelete&&a.id&&"ps-10"),style:{direction:l?"rtl":"ltr"},children:[(0,b.jsx)(c.Handle,{type:"target",position:m,isConnectable:!1,className:"opacity-0!",style:{top:70}}),a.onDelete&&a.id?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"absolute -start-3 top-1/2 -translate-y-1/2 opacity-0 transition-opacity group-hover:opacity-100",onPointerDown:a=>a.stopPropagation(),children:(0,b.jsx)(H.TooltipProvider,{children:(0,b.jsxs)(H.Tooltip,{children:[(0,b.jsx)(H.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{"aria-label":"Remove application","data-testid":"application-node-delete-button",onClick:a=>{a.stopPropagation(),q(!0)},className:"bg-card text-muted-foreground hover:border-destructive hover:text-destructive flex h-7 w-7 cursor-pointer items-center justify-center rounded-full border shadow-sm transition-colors",children:(0,b.jsx)(s.Trash2,{className:"h-3.5 w-3.5"})})}),(0,b.jsx)(H.TooltipContent,{children:"Remove application"})]})})}),(0,b.jsx)(E.Dialog,{open:p,onOpenChange:q,children:(0,b.jsxs)(E.DialogContent,{className:"max-w-xs",children:[(0,b.jsxs)(E.DialogHeader,{children:[(0,b.jsx)(E.DialogTitle,{children:"Remove application?"}),(0,b.jsxs)(E.DialogDescription,{children:["This will remove ",(0,b.jsx)("strong",{children:a.name})," from your workspace."]})]}),(0,b.jsxs)(E.DialogFooter,{className:"grid grid-cols-2 gap-2 sm:flex-none",children:[(0,b.jsx)(E.DialogClose,{asChild:!0,children:(0,b.jsx)(k.Button,{variant:"outline",children:"Cancel"})}),(0,b.jsx)(k.Button,{variant:"destructive",onClick:()=>{q(!1),a.onDelete?.(a.id)},children:"Remove"})]})]})})]}):null,(0,b.jsxs)("div",{role:"button",tabIndex:0,"data-testid":"application-node-card","data-app-name":a.name,onClick:b=>{b.stopPropagation(),a.onClick?.()},onKeyDown:b=>{("Enter"===b.key||" "===b.key)&&(b.preventDefault(),b.stopPropagation(),a.onClick?.())},className:(0,j.cn)("nodrag bg-card flex w-[26rem] cursor-pointer flex-col overflow-hidden rounded-xl border shadow-sm transition-[border-color,box-shadow] duration-200 dark:bg-neutral-800/80",d&&"border-blue-400 dark:border-amber-500/60",!d&&A.borderClass),children:[(0,b.jsxs)("div",{className:"flex items-center gap-3 px-4 py-3",children:[(0,b.jsx)("div",{className:"flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-indigo-500 to-violet-500",children:(0,b.jsx)(Q.LayoutGrid,{className:"h-4 w-4 text-white"})}),(0,b.jsx)("span",{"data-testid":"application-node-name",className:"min-w-0 truncate text-sm font-medium",children:a.name}),(0,b.jsxs)("span",{className:"ms-auto flex shrink-0 items-center gap-2",children:[(0,b.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,b.jsx)("span",{"data-testid":"application-node-status-dot",className:(0,j.cn)("relative flex h-2 w-2 items-center justify-center rounded-full",A.dotClass),children:A.pulse?(0,b.jsx)("span",{className:(0,j.cn)("absolute inline-flex h-full w-full animate-ping rounded-full opacity-60",A.dotClass)}):null}),(0,b.jsx)("span",{"data-testid":"application-node-status-text",className:"text-muted-foreground text-xs",children:A.label})]}),a.onCreateSddFeature&&a.id?(0,b.jsx)("span",{onClick:a=>a.stopPropagation(),children:(0,b.jsx)(H.TooltipProvider,{children:(0,b.jsxs)(H.Tooltip,{children:[(0,b.jsx)(H.TooltipTrigger,{asChild:!0,children:(0,b.jsxs)("button",{type:"button","aria-label":g("applicationNode.newFeature"),"data-testid":"application-node-new-sdd-feature-button",onClick:b=>{b.stopPropagation(),a.onCreateSddFeature?.(a.id)},onPointerDown:a=>a.stopPropagation(),className:"nodrag flex h-6 shrink-0 cursor-pointer items-center gap-0.5 rounded bg-blue-500 px-1.5 text-[11px] font-bold text-white transition-colors hover:bg-blue-600 dark:bg-amber-500 dark:hover:bg-amber-400",children:[(0,b.jsx)(h.Plus,{className:"h-3 w-3"}),(0,b.jsx)("span",{className:"translate-y-px",children:g("repositoryNode.new")})]})}),(0,b.jsx)(H.TooltipContent,{side:"top",children:g("applicationNode.newFeature")})]})})}):null]})]}),y&&x.status===S.DeploymentState.Ready?(0,b.jsx)("div",{className:"px-4 pb-2",onClick:B,children:(0,b.jsxs)("div",{className:"bg-muted group/preview relative overflow-hidden rounded-lg",style:{height:180},children:[(0,b.jsx)("iframe",{src:y,title:`${a.name} live preview`,className:"pointer-events-none absolute top-0 left-0 origin-top-left border-0 bg-white",style:{width:"250%",height:"250%",transform:"scale(0.4)"},sandbox:"allow-same-origin allow-scripts",loading:"lazy"}),(0,b.jsxs)("div",{className:"pointer-events-none absolute inset-0 flex items-center justify-center gap-2 bg-neutral-900/75 opacity-0 transition-opacity duration-150 group-hover/preview:pointer-events-auto group-hover/preview:opacity-100 dark:bg-neutral-950/80",onPointerDown:B,onClick:B,children:[(0,b.jsxs)("button",{type:"button",onClick:a=>{a.stopPropagation(),x.stop()},disabled:x.stopLoading,"aria-label":"Stop dev server",title:"Stop dev server",className:"inline-flex h-9 cursor-pointer items-center gap-1.5 rounded-md border border-neutral-300 bg-white px-3 text-xs font-semibold text-neutral-900 shadow-md transition-colors hover:border-red-500 hover:bg-red-50 hover:text-red-600 dark:border-neutral-700 dark:bg-neutral-900 dark:text-neutral-100 dark:hover:border-red-500 dark:hover:bg-red-950 dark:hover:text-red-400",children:[x.stopLoading?(0,b.jsx)(R.Loader2,{className:"h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(u.Square,{className:"h-3.5 w-3.5 fill-current"}),(0,b.jsx)("span",{children:"Stop"})]}),(0,b.jsxs)("button",{type:"button",onClick:C,"aria-label":`Open ${a.name} in a new tab`,title:y,className:"inline-flex h-9 cursor-pointer items-center gap-1.5 rounded-md border border-neutral-300 bg-white px-3 text-xs font-semibold text-neutral-900 shadow-md transition-colors hover:bg-neutral-50 dark:border-neutral-700 dark:bg-neutral-900 dark:text-neutral-100 dark:hover:bg-neutral-800",children:[(0,b.jsx)(P.ExternalLink,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{children:"Open"})]})]})]})}):null,(0,b.jsxs)("div",{"data-testid":"application-node-dev-preview",className:"border-border/50 flex items-center gap-2 border-t px-4 py-2 text-xs",onClick:B,children:[x.deployError?(0,b.jsx)("span",{className:"truncate text-xs text-red-500",children:x.deployError}):x.status===S.DeploymentState.Booting||x.deployLoading?(0,b.jsxs)("span",{className:"text-muted-foreground inline-flex items-center gap-1.5",children:[(0,b.jsx)(R.Loader2,{className:"h-3 w-3 shrink-0 animate-spin text-amber-500"}),(0,b.jsx)("span",{children:"Starting…"})]}):x.stopLoading?(0,b.jsxs)("span",{className:"text-muted-foreground inline-flex items-center gap-1.5",children:[(0,b.jsx)(R.Loader2,{className:"h-3 w-3 shrink-0 animate-spin"}),(0,b.jsx)("span",{children:"Stopping…"})]}):y?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"me-0.5 inline-block h-2 w-2 shrink-0 rounded-full bg-green-500"}),(0,b.jsx)("a",{href:y,target:"_blank",rel:"noopener noreferrer",className:"truncate text-green-700 hover:underline dark:text-green-400",onClick:C,children:y})]}):(0,b.jsxs)("span",{className:"text-muted-foreground inline-flex items-baseline gap-2",children:[(0,b.jsx)("span",{children:"Run"}),(0,b.jsx)("span",{className:"text-muted-foreground/50 text-[10px]",children:"start local environment"})]}),(0,b.jsxs)("span",{className:"ms-auto flex items-center gap-1",children:[(0,b.jsx)("span",{"data-testid":"application-node-repo-count",className:"text-muted-foreground/70",children:v}),(0,b.jsx)(H.TooltipProvider,{children:(0,b.jsxs)(H.Tooltip,{children:[(0,b.jsx)(H.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button",onClick:a=>{(a.stopPropagation(),x.deployError)?x.deploy():y?x.stop():x.deploy()},onPointerDown:B,disabled:x.deployLoading||x.stopLoading,"aria-label":x.deployError?"Retry":y?"Stop dev server":"Start dev server",className:(0,j.cn)("text-muted-foreground hover:bg-muted flex h-6 w-6 items-center justify-center rounded transition-colors disabled:cursor-not-allowed disabled:opacity-50",!y&&!x.deployError&&"text-green-600 hover:text-green-700 dark:text-green-400 dark:hover:text-green-300"),children:x.deployLoading||x.stopLoading?(0,b.jsx)(R.Loader2,{className:"h-3 w-3 animate-spin"}):x.deployError?(0,b.jsx)(z.RotateCcw,{className:"h-3 w-3"}):y?(0,b.jsx)(u.Square,{className:"h-3 w-3 fill-current"}):(0,b.jsx)(t.Play,{className:"h-3 w-3 fill-current"})})}),(0,b.jsx)(H.TooltipContent,{children:x.deployError?"Failed — click to retry":y?"Stop dev server":"Start dev server"})]})})]})]})]}),(0,b.jsx)(c.Handle,{type:"source",position:o,isConnectable:!1,className:"opacity-0!",style:{top:70}})]})}function W(a){let[d]=(0,n.getBezierPath)({sourceX:a.sourceX,sourceY:a.sourceY,targetX:a.targetX,targetY:a.targetY,sourcePosition:a.sourcePosition,targetPosition:a.targetPosition});return(0,b.jsx)(c.BaseEdge,{id:a.id,path:d,style:{strokeDasharray:"5 5"}})}let X={x:30,y:30,zoom:.85};function Y({nodes:a,edges:d,selectedFeatureId:f,selectedRepository:g,defaultViewport:n,onNodesChange:o,onAddFeature:p,onConnect:q,onNodeClick:r,onPaneClick:s,onCanvasDrag:t,onMoveEnd:u,toolbar:v,showToolbarOnEmpty:w=!0,emptyState:x}){let{t:y}=(0,i.useTranslation)("web"),z=(0,e.useMemo)(()=>({featureNode:m.FeatureNode,repositoryNode:O,applicationNode:V}),[]),A=(0,e.useMemo)(()=>({dependencyEdge:W}),[]),B=(0,e.useMemo)(()=>{let b=null!=f,c=null!=g&&(null!=g.id||null!=g.path);return b||c?a.map(a=>{if(b&&"featureNode"===a.type&&a.data.featureId===f)return{...a,selected:!0};if(c&&"repositoryNode"===a.type){let b=a.data,c=null!=g.id&&(a.id===g.id||b.id===g.id),d=null!=g.path&&b.repositoryPath===g.path;if(c||d)return{...a,selected:!0}}return a}):a},[a,f,g]),C=0===a.length,[D,E]=(0,e.useState)(C),[F,G]=(0,e.useState)(!1),H=(0,e.useRef)(C);(0,e.useEffect)(()=>{if(H.current&&!C){G(!0);let a=setTimeout(()=>{E(!1),G(!1)},300);return H.current=C,()=>clearTimeout(a)}!H.current&&C&&E(!0),H.current=C},[C]);let I=C&&!x?(0,b.jsx)(l.EmptyState,{title:y("canvas.noFeatures"),description:y("canvas.noFeaturesDescription"),action:(0,b.jsxs)(k.Button,{onClick:p,children:[(0,b.jsx)(h.Plus,{className:"me-2 h-4 w-4"}),y("canvas.newFeature")]})}):null,J=x??I;return(0,b.jsxs)("div",{"data-testid":C?"features-canvas-empty":"features-canvas","data-no-drawer-close":!0,className:"dark:bg-background pointer-events-auto relative h-full w-full bg-[#f6f7f8]",children:[(0,b.jsxs)(c.ReactFlow,{nodes:B,edges:d,nodeTypes:z,edgeTypes:A,onConnect:q,onNodesChange:o,onNodeClick:r,onPaneClick:s,onMoveStart:t,onMoveEnd:u,defaultViewport:n??X,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1,proOptions:{hideAttribution:!0},className:"[&_.react-flow__pane]:!cursor-default",children:[(0,b.jsx)(c.Background,{variant:c.BackgroundVariant.Dots,gap:24,size:1,color:"#b8bcc4",className:"dark:[&_circle]:!fill-white/[0.1]"}),v&&!C?(0,b.jsx)(c.Panel,{position:"top-right",className:"!me-3 !mt-3",children:v}):null]}),D&&J?(0,b.jsx)("div",{className:(0,j.cn)("pointer-events-none absolute inset-0 z-10 flex items-center justify-center transition-opacity duration-300",F?"opacity-0":"animate-in fade-in opacity-100 duration-200"),children:(0,b.jsx)("div",{className:"pointer-events-auto h-full w-full",children:J})}):null,v&&C&&w?(0,b.jsx)("div",{className:"pointer-events-auto absolute end-3 top-3 z-20",children:v}):null]})}var Z=a.i(483886),$=a.i(341274),_=a.i(225700);let aa=(0,_.default)("zoom-in",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"11",x2:"11",y1:"8",y2:"14",key:"1vmskp"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]]),ab=(0,_.default)("zoom-out",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]]),ac=(0,_.default)("maximize",[["path",{d:"M8 3H5a2 2 0 0 0-2 2v3",key:"1dcmit"}],["path",{d:"M21 8V5a2 2 0 0 0-2-2h-3",key:"1e4gt3"}],["path",{d:"M3 16v3a2 2 0 0 0 2 2h3",key:"wsl5sc"}],["path",{d:"M16 21h3a2 2 0 0 0 2-2v-3",key:"18trek"}]]);function ad({showArchived:a,onToggleArchived:d,onResetViewport:f,startSlot:g}){let{t:h}=(0,i.useTranslation)("web"),{zoomIn:j,zoomOut:k,fitView:l,setViewport:m}=(0,c.useReactFlow)(),n=(0,e.useCallback)(()=>{j({duration:200})},[j]),o=(0,e.useCallback)(()=>{k({duration:200})},[k]),p=(0,e.useCallback)(()=>{l({duration:400,padding:.3})},[l]),q=(0,e.useCallback)(()=>{f&&m(f(),{duration:400})},[f,m]);return(0,b.jsxs)("div",{className:"bg-background flex items-center gap-1 rounded-xl border px-2 py-1.5 shadow-md dark:bg-neutral-900",children:[g?(0,b.jsxs)(b.Fragment,{children:[g,(0,b.jsx)("div",{className:"bg-border mx-1 h-5 w-px"})]}):null,(0,b.jsx)(ae,{onClick:d,title:h(a?"canvas.hideArchived":"canvas.showArchived"),active:a,label:h(a?"canvas.hideArchivedLabel":"canvas.showArchivedLabel"),children:a?(0,b.jsx)(Z.Eye,{className:"h-4 w-4"}):(0,b.jsx)($.EyeOff,{className:"h-4 w-4"})}),(0,b.jsx)("div",{className:"bg-border mx-1 h-5 w-px"}),(0,b.jsx)(ae,{onClick:o,title:h("canvas.zoomOut"),children:(0,b.jsx)(ab,{className:"h-4 w-4"})}),(0,b.jsx)(ae,{onClick:n,title:h("canvas.zoomIn"),children:(0,b.jsx)(aa,{className:"h-4 w-4"})}),(0,b.jsx)(ae,{onClick:p,title:h("canvas.fitView"),children:(0,b.jsx)(ac,{className:"h-4 w-4"})}),f?(0,b.jsx)(ae,{onClick:q,title:h("canvas.resetView"),children:(0,b.jsx)(z.RotateCcw,{className:"h-4 w-4"})}):null]})}function ae({children:a,onClick:c,title:d,label:e,active:f}){return(0,b.jsxs)("button",{type:"button",onClick:c,title:d,className:(0,j.cn)("inline-flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-xs font-medium transition-colors","hover:bg-accent hover:text-accent-foreground",f?"text-primary bg-primary/10":"text-muted-foreground"),children:[a,e?(0,b.jsx)("span",{children:e}):null]})}var af=a.i(865758),ag=a.i(872016),ah=a.i(893741),ai=a.i(479794),aj=a.i(675192);let ak="default",al={workspaces:[{id:ak,name:"Default",repoIds:[],featureIds:[]}],activeWorkspaceId:ak};function am({workspaces:a,activeWorkspace:c,onSelect:d,onRequestCreate:f,onRequestRename:g,onRequestDelete:i,onManage:k}){let[l,m]=(0,e.useState)(!1),n=c.id===ak;return(0,b.jsxs)(aj.DropdownMenu,{open:l,onOpenChange:m,children:[(0,b.jsx)(aj.DropdownMenuTrigger,{asChild:!0,children:(0,b.jsxs)("button",{type:"button","data-testid":"workspace-selector-trigger",className:(0,j.cn)("inline-flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-xs font-medium transition-colors","hover:bg-accent hover:text-accent-foreground",n?"text-muted-foreground":"text-primary bg-primary/10"),title:"Workspace",children:[(0,b.jsx)(af.Layers,{className:"h-4 w-4"}),(0,b.jsx)("span",{className:"max-w-[120px] truncate",children:c.name})]})}),(0,b.jsxs)(aj.DropdownMenuContent,{align:"start",className:"min-w-[220px]",children:[(0,b.jsx)(aj.DropdownMenuLabel,{children:"Workspaces"}),(0,b.jsx)(aj.DropdownMenuSeparator,{}),a.map(a=>{let e=a.id===c.id,f=a.id!==ak;return(0,b.jsxs)(aj.DropdownMenuItem,{onSelect:()=>d(a.id),className:"group/ws-row flex items-center justify-between gap-2",children:[(0,b.jsx)("span",{className:"truncate",children:a.name}),(0,b.jsxs)("span",{className:"flex shrink-0 items-center gap-1",children:[e?(0,b.jsx)(ag.Check,{className:"h-3.5 w-3.5"}):null,f?(0,b.jsx)("button",{type:"button","aria-label":`Delete workspace ${a.name}`,title:`Delete workspace ${a.name}`,onClick:b=>{b.preventDefault(),b.stopPropagation(),m(!1),i(a.id)},className:"text-muted-foreground hover:bg-destructive/10 hover:text-destructive rounded p-0.5 opacity-0 transition-opacity group-hover/ws-row:opacity-100 focus-visible:opacity-100",children:(0,b.jsx)(s.Trash2,{className:"h-3.5 w-3.5"})}):null]})]},a.id)}),(0,b.jsx)(aj.DropdownMenuSeparator,{}),(0,b.jsxs)(aj.DropdownMenuItem,{onSelect:f,children:[(0,b.jsx)(h.Plus,{className:"mr-2 h-3.5 w-3.5"}),"New workspace…"]}),(0,b.jsxs)(aj.DropdownMenuItem,{onSelect:k,disabled:n,children:[(0,b.jsx)(ai.SlidersHorizontal,{className:"mr-2 h-3.5 w-3.5"}),"Manage items…"]}),(0,b.jsxs)(aj.DropdownMenuItem,{onSelect:g,disabled:n,children:[(0,b.jsx)(ah.Pencil,{className:"mr-2 h-3.5 w-3.5"}),"Rename"]})]})]})}var an=a.i(925603);function ao({open:a,onOpenChange:c,workspace:d,allNodes:f,onSave:g}){let[h,i]=(0,e.useState)(new Set),[j,l]=(0,e.useState)(new Set);(0,e.useEffect)(()=>{a&&(i(new Set(d.repoIds)),l(new Set(d.featureIds)))},[a,d]);let m=(0,e.useMemo)(()=>{let a=[],b=new Map;for(let c of f){if("repositoryNode"!==c.type)continue;let d=c.data,e=d.repositoryPath??"",f={nodeId:c.id,name:d.name??e.split("/").filter(Boolean).pop()??e,features:[]};a.push(f),b.set(e,f)}for(let a of f){if("featureNode"!==a.type)continue;let c=a.data,d=b.get(c.repositoryPath??"");d&&d.features.push({nodeId:a.id,name:c.name})}return a},[f]);return(0,b.jsx)(E.Dialog,{open:a,onOpenChange:c,children:(0,b.jsxs)(E.DialogContent,{className:"max-h-[80vh] max-w-lg overflow-hidden",children:[(0,b.jsxs)(E.DialogHeader,{children:[(0,b.jsxs)(E.DialogTitle,{children:["Manage workspace: ",d.name]}),(0,b.jsx)(E.DialogDescription,{children:"Select the repositories and features that should appear on this workspace's canvas."})]}),(0,b.jsx)("div",{className:"-mx-6 max-h-[50vh] overflow-y-auto px-6",children:0===m.length?(0,b.jsx)("p",{className:"text-muted-foreground py-8 text-center text-sm",children:"No repositories on the canvas yet."}):(0,b.jsx)("ul",{className:"space-y-3 py-2",children:m.map(a=>(0,b.jsxs)("li",{children:[(0,b.jsxs)("label",{className:"hover:bg-accent/30 flex cursor-pointer items-center gap-2 rounded-md px-2 py-1.5",children:[(0,b.jsx)(F.Checkbox,{checked:h.has(a.nodeId),onCheckedChange:()=>{var b;return b=a.nodeId,void i(a=>{let c=new Set(a);return c.has(b)?c.delete(b):c.add(b),c})}}),(0,b.jsx)(v.GitBranch,{className:"text-muted-foreground h-4 w-4"}),(0,b.jsx)("span",{className:"text-sm font-medium",children:a.name})]}),a.features.length>0?(0,b.jsx)("ul",{className:"mt-1 ml-7 space-y-0.5",children:a.features.map(a=>(0,b.jsx)("li",{children:(0,b.jsxs)("label",{className:"hover:bg-accent/30 flex cursor-pointer items-center gap-2 rounded-md px-2 py-1",children:[(0,b.jsx)(F.Checkbox,{checked:j.has(a.nodeId),onCheckedChange:()=>{var b;return b=a.nodeId,void l(a=>{let c=new Set(a);return c.has(b)?c.delete(b):c.add(b),c})}}),(0,b.jsx)(an.Sparkles,{className:"text-muted-foreground h-3.5 w-3.5"}),(0,b.jsx)("span",{className:"text-muted-foreground text-xs",children:a.name})]})},a.nodeId))}):null]},a.nodeId))})}),(0,b.jsxs)(E.DialogFooter,{children:[(0,b.jsx)(k.Button,{variant:"ghost",onClick:()=>c(!1),children:"Cancel"}),(0,b.jsx)(k.Button,{onClick:()=>{g({repoIds:Array.from(h),featureIds:Array.from(j)}),c(!1)},children:"Save"})]})]})})}var ap=a.i(390920);function aq({open:a,onOpenChange:c,title:d,description:f,initialValue:g="",confirmLabel:h,onConfirm:i}){let[j,l]=(0,e.useState)(g);return(0,e.useEffect)(()=>{a&&l(g)},[a,g]),(0,b.jsx)(E.Dialog,{open:a,onOpenChange:c,children:(0,b.jsx)(E.DialogContent,{className:"max-w-sm",children:(0,b.jsxs)("form",{onSubmit:a=>{a.preventDefault();let b=j.trim();b&&(i(b),c(!1))},children:[(0,b.jsxs)(E.DialogHeader,{children:[(0,b.jsx)(E.DialogTitle,{children:d}),f?(0,b.jsx)(E.DialogDescription,{children:f}):null]}),(0,b.jsx)("div",{className:"py-4",children:(0,b.jsx)(ap.Input,{autoFocus:!0,value:j,onChange:a=>l(a.target.value),placeholder:"Workspace name","data-testid":"workspace-name-input"})}),(0,b.jsxs)(E.DialogFooter,{children:[(0,b.jsx)(k.Button,{type:"button",variant:"ghost",onClick:()=>c(!1),children:"Cancel"}),(0,b.jsx)(k.Button,{type:"submit",disabled:!j.trim(),children:h})]})]})})})}var ar=a.i(603703);a.i(281834);var as=a.i(233981),at=a.i(101356),au=a.i(219884),av=a.i(196213);let aw="shep-canvas-viewport",ax={x:30,y:30,zoom:.85};var ay=a.i(555003),az=a.i(648265),aA=a.i(857411),aB=a.i(598410),aC=a.i(867075),aD=a.i(272980),aE=a.i(771716),aF=a.i(701377);a.i(421434);var aG=a.i(234379),aH=a.i(289111);let aI=(0,aH.createServerReference)("002230a65a9a52766f2fac7b9bafe2f0a0ab4ff5f5",aH.callServer,void 0,aH.findSourceMapURL,"isAgentSetupComplete"),aJ=(0,aH.createServerReference)("003eb1909cd10ed1e04526145e4a21282e819a745e",aH.callServer,void 0,aH.findSourceMapURL,"checkAgentAuth"),aK=(0,aH.createServerReference)("00f312436a846d36665ad6519b2a873685e7baa13f",aH.callServer,void 0,aH.findSourceMapURL,"checkToolStatus");var aL=a.i(394132),aM=a.i(975054),aN=a.i(876993),aO=a.i(817606),aP=a.i(783852);let aQ=["select-agent","select-model"];function aR({onComplete:a,className:c}){let{t:d}=(0,i.useTranslation)("web"),[f,g]=(0,e.useState)([]),[h,k]=(0,e.useState)(!0),[l,m]=(0,e.useState)("select-agent"),[n,o]=(0,e.useState)(null),[p,q]=(0,e.useState)(!1),[r,s]=(0,e.useState)(!1),[t,u]=(0,e.useState)(!0),v=(0,e.useRef)(void 0);(0,e.useEffect)(()=>{(0,aM.getAllAgentModels)().then(g).finally(()=>k(!1))},[]);let w=n?f.find(a=>a.agentType===n):null,x=(0,e.useCallback)((a,b)=>{s(!0),u(!1),v.current&&clearTimeout(v.current),v.current=setTimeout(()=>{b?.(),m(a),requestAnimationFrame(()=>{u(!0),s(!1)})},150)},[]);(0,e.useEffect)(()=>()=>{v.current&&clearTimeout(v.current)},[]);let y=(0,e.useCallback)(async(b,c)=>{q(!0);try{await (0,aN.updateAgentAndModel)(b,c),u(!1),v.current&&clearTimeout(v.current),v.current=setTimeout(()=>{a()},200)}catch{q(!1)}},[a]),z=(0,e.useCallback)(a=>{let b=f.find(b=>b.agentType===a);b&&b.models.length>0?x("select-model",()=>{o(a)}):y(a,null)},[f,x,y]),A=(0,e.useCallback)(a=>{n&&y(n,a)},[n,y]),B=(0,e.useCallback)(()=>{"select-model"===l&&x("select-agent",()=>{o(null)})},[l,x]);if(h)return(0,b.jsxs)("div",{"data-testid":"welcome-agent-setup",className:(0,j.cn)("flex flex-col items-center justify-center gap-4",c),children:[(0,b.jsx)(R.Loader2,{className:"text-muted-foreground h-5 w-5 animate-spin"}),(0,b.jsx)("p",{className:"text-muted-foreground text-sm",children:d("welcome.loadingAgents")})]});let C=aQ.indexOf(l),D=d("select-agent"===l?"welcome.chooseAgent":"welcome.pickModel"),E="select-agent"===l?d("welcome.selectAgentSubtitle"):w?d("welcome.chooseModelSubtitle",{label:w.label}):"";return(0,b.jsxs)("div",{"data-testid":"welcome-agent-setup",className:(0,j.cn)("flex w-full flex-col items-center",c),children:[(0,b.jsx)("div",{className:"mb-8 flex w-full max-w-xs items-center gap-1.5",children:aQ.map((a,c)=>(0,b.jsx)("div",{className:(0,j.cn)("h-[3px] flex-1 rounded-full transition-colors duration-300",c<=C?"bg-foreground/60":"bg-muted")},a))}),(0,b.jsxs)("div",{className:(0,j.cn)("flex w-full flex-col items-center transition-opacity duration-200",t&&!r?"opacity-100":"opacity-0"),children:[(0,b.jsx)("h1",{className:"text-foreground/90 text-center text-5xl font-extralight tracking-tight",children:D}),(0,b.jsx)("p",{className:"text-muted-foreground mt-3 text-center text-lg leading-relaxed font-light",children:E}),(0,b.jsxs)("div",{className:"mt-8 flex w-full flex-col items-center",children:["select-agent"===l&&(0,b.jsx)("div",{"data-testid":"agent-list",className:"grid w-full max-w-lg gap-3",style:{gridTemplateColumns:`repeat(${Math.min(f.length,4)}, minmax(0, 1fr))`},children:f.map(a=>{let c=(0,aO.getAgentTypeIcon)(a.agentType);return(0,b.jsxs)("button",{type:"button",disabled:p,"data-testid":`agent-option-${a.agentType}`,className:"border-border hover:bg-accent hover:border-foreground/20 flex cursor-pointer flex-col items-center gap-3 rounded-2xl border px-4 py-5 transition-all duration-150 active:scale-[0.97] disabled:opacity-50",onClick:()=>z(a.agentType),children:[(0,b.jsx)(c,{className:"text-foreground/70 h-7 w-7"}),(0,b.jsx)("span",{className:"text-sm font-medium",children:a.label})]},a.agentType)})}),"select-model"===l&&w?(0,b.jsxs)("div",{"data-testid":"model-list",className:"flex w-full max-w-lg flex-col items-center gap-4",children:[(0,b.jsxs)("button",{type:"button",disabled:p,className:"text-muted-foreground hover:text-foreground flex cursor-pointer items-center gap-1.5 self-start text-sm transition-colors",onClick:B,children:[(0,b.jsx)(aL.ChevronLeft,{className:"h-4 w-4"}),d("welcome.back")]}),(0,b.jsx)("div",{className:"grid w-full gap-3",style:{gridTemplateColumns:`repeat(${Math.min(w.models.length,3)}, minmax(0, 1fr))`},children:w.models.map(a=>{let c=(0,aP.getModelMeta)(a.id);return(0,b.jsxs)("button",{type:"button",disabled:p,"data-testid":`model-option-${a.id}`,className:"border-border hover:bg-accent hover:border-foreground/20 flex cursor-pointer flex-col items-center gap-2 rounded-2xl border px-4 py-5 text-center transition-all duration-150 active:scale-[0.97] disabled:opacity-50",onClick:()=>A(a.id),children:[(0,b.jsx)("span",{className:"text-sm font-medium",children:c.displayName||a.displayName}),(0,b.jsx)("span",{className:"text-muted-foreground text-xs leading-tight",children:c.description||a.description})]},a.id)})})]}):null]})]})]})}var aS=a.i(316676);let aT=["cd ~/my-repo",'shep feat new "sleek dashboard"'];function aU({onRepositorySelect:a,className:c}){let{t:d}=(0,i.useTranslation)("web"),[f,h]=(0,e.useState)(!1),[k,l]=(0,e.useState)(!1),[m,n]=(0,e.useState)(!1),[p,s]=(0,e.useState)(null),[t,u]=(0,e.useState)(null),[v,w]=(0,e.useState)(!1),[x,y]=(0,e.useState)(null),[z,A]=(0,e.useState)(!1),{reactFileManager:B}=(0,J.useFeatureFlags)();async function C(){if(!k){if(B)return void n(!0);l(!0);try{let b=await (0,aF.pickFolder)();b&&a?.(b)}catch{n(!0)}finally{l(!1)}}}(0,e.useEffect)(()=>{aI().then(a=>s(a)).catch(()=>s(!1))},[]),(0,e.useEffect)(()=>{p&&(aJ().then(u).catch(()=>u({agentType:"unknown",installed:!1,authenticated:!1,label:"Agent",binaryName:null,installCommand:null,authCommand:null})),aK().then(y).catch(()=>y({git:{installed:!1,version:null,installCommand:null,installUrl:null},gh:{installed:!1,version:null,installCommand:null,installUrl:null}})))},[p]);let D=(0,e.useCallback)(async()=>{await navigator.clipboard.writeText(aT.join("\n")),h(!0),setTimeout(()=>h(!1),2e3)},[]),E=(0,e.useCallback)(()=>{s(!0)},[]),F=(0,e.useCallback)(()=>{u(null),aJ().then(u)},[]);return null===p?null:(0,b.jsxs)("div",{"data-testid":"control-center-onboarding",className:(0,j.cn)("relative flex h-full w-full flex-col items-center justify-center px-8",c),children:[p?(0,b.jsxs)("div",{className:"animate-in fade-in flex w-full max-w-md flex-col items-center duration-300",children:[(0,b.jsx)("h1",{className:"text-foreground/90 text-center text-5xl font-extralight tracking-tight",children:d("emptyState.addProject")}),(0,b.jsxs)("p",{className:"text-muted-foreground mt-3 text-center text-lg leading-relaxed font-light",children:[d("emptyState.addProjectDescription"),(0,b.jsx)("br",{}),d("emptyState.addProjectDescriptionLine2")]}),(0,b.jsxs)("div",{className:"mt-8 flex w-full flex-col gap-3",children:[(0,b.jsx)(aV,{status:t,onRetry:F}),(0,b.jsx)(aW,{label:d("emptyState.git"),status:x?.git??null,missingHint:d("emptyState.gitRequired")}),(0,b.jsx)(aW,{label:d("emptyState.githubCli"),status:x?.gh??null,missingHint:d("emptyState.githubCliRequired")})]}),(0,b.jsxs)("button",{type:"button","data-testid":"empty-state-add-repository",onClick:C,disabled:k,className:"bg-foreground text-background hover:bg-foreground/90 mt-10 flex w-full cursor-pointer items-center justify-center gap-2.5 rounded-xl px-6 py-4 text-base font-medium shadow-lg transition-all duration-200 hover:shadow-xl active:scale-[0.98] disabled:cursor-wait disabled:opacity-50",children:[k?(0,b.jsx)(R.Loader2,{className:"h-5 w-5 animate-spin"}):(0,b.jsx)(r.FolderOpen,{className:"h-5 w-5"}),d(k?"emptyState.opening":"emptyState.chooseFolder")]}),(0,b.jsxs)("button",{type:"button","data-testid":"empty-state-new-project",onClick:()=>A(!0),disabled:k,className:"border-foreground/15 text-foreground/80 hover:bg-foreground/5 hover:border-foreground/25 mt-3 flex w-full cursor-pointer items-center justify-center gap-2.5 rounded-xl border px-6 py-3.5 text-sm font-medium transition-all duration-200 active:scale-[0.98] disabled:cursor-not-allowed disabled:opacity-50",children:[(0,b.jsx)(g.FolderPlus,{className:"h-4 w-4"}),"New Project"]}),(0,b.jsxs)("button",{type:"button","data-testid":"empty-state-import-github",onClick:()=>window.dispatchEvent(new CustomEvent("shep:open-github-import")),disabled:k,className:"border-foreground/15 text-foreground/80 hover:bg-foreground/5 hover:border-foreground/25 mt-3 flex w-full cursor-pointer items-center justify-center gap-2.5 rounded-xl border px-6 py-3.5 text-sm font-medium transition-all duration-200 active:scale-[0.98] disabled:cursor-not-allowed disabled:opacity-50",children:[(0,b.jsx)(o.Github,{className:"h-4 w-4"}),"Import from GitHub"]}),(0,b.jsx)("p",{className:"text-muted-foreground/60 mt-3 text-center text-sm",children:d("emptyState.folderHint")})]}):(0,b.jsx)(aR,{onComplete:E}),p?(0,b.jsxs)("div",{className:"absolute bottom-8 flex flex-col items-center",style:{animationDelay:"400ms",animationDuration:"600ms",animationFillMode:"both"},children:[(0,b.jsxs)("button",{type:"button",onClick:()=>w(!v),className:"text-muted-foreground hover:text-foreground flex cursor-pointer items-center gap-1.5 transition-colors duration-200",children:[(0,b.jsx)(q.Terminal,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{className:"text-sm",children:d("emptyState.orUseCli")}),(0,b.jsx)(aE.ChevronDown,{className:(0,j.cn)("h-3.5 w-3.5 transition-transform duration-200",v?"":"rotate-180")})]}),v?(0,b.jsx)("div",{className:"animate-in fade-in slide-in-from-top-1 mt-3 w-80 duration-200",children:(0,b.jsxs)("div",{"data-testid":"cli-code-block",className:"relative rounded-xl bg-zinc-900 px-5 py-4 font-mono text-[13px] leading-relaxed text-zinc-400",children:[(0,b.jsx)("button",{type:"button","data-testid":"cli-code-block-copy",onClick:D,className:"absolute top-3 right-3 cursor-pointer rounded-md p-1.5 text-zinc-600 transition-colors hover:bg-zinc-800 hover:text-zinc-300","aria-label":d("emptyState.copyCommands"),children:f?(0,b.jsx)(ag.Check,{className:"h-3.5 w-3.5 text-emerald-400"}):(0,b.jsx)(aB.Copy,{className:"h-3.5 w-3.5"})}),(0,b.jsx)("div",{className:"space-y-1",children:aT.map(a=>(0,b.jsxs)("div",{className:"whitespace-nowrap",children:[(0,b.jsx)("span",{className:"text-zinc-600 select-none",children:"$ "}),(0,b.jsx)("span",{className:"text-zinc-300",children:a})]},a))})]})}):null]}):null,(0,b.jsx)(aG.ReactFileManagerDialog,{open:m,onOpenChange:a=>{a||n(!1)},onSelect:function(b){b&&a?.(b),n(!1)}}),(0,b.jsx)(aS.NewProjectDialog,{open:z,onOpenChange:A,onCreated:b=>a?.(b)})]})}function aV({status:a,onRetry:c}){let{t:d}=(0,i.useTranslation)("web");return a?a.installed&&a.authenticated?(0,b.jsx)(aX,{icon:(0,b.jsx)(aC.CheckCircle2,{className:"h-4 w-4 text-emerald-500"}),children:(0,b.jsx)("span",{className:"text-sm text-emerald-600 dark:text-emerald-400",children:d("emptyState.ready",{label:a.label})})}):a.installed?(0,b.jsxs)(aX,{icon:(0,b.jsx)(aD.AlertCircle,{className:"h-4 w-4 text-amber-500"}),children:[(0,b.jsx)("span",{className:"text-sm font-medium text-amber-600 dark:text-amber-400",children:d("emptyState.needsAuth",{label:a.label})}),a.authCommand?(0,b.jsx)(aY,{command:a.authCommand}):null,(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[a.binaryName?(0,b.jsxs)("button",{type:"button","data-testid":"auth-banner-open-terminal",onClick:async()=>{try{let b="claude-code"===a.agentType?"claude-code":a.agentType;await fetch(`/api/tools/${b}/launch`,{method:"POST"})}catch{}},className:"flex items-center gap-1 text-xs font-medium text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400",children:[(0,b.jsx)(q.Terminal,{className:"h-3 w-3"}),d("emptyState.open",{label:a.label})]}):null,(0,b.jsx)("button",{type:"button",onClick:c,className:"text-xs text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400",children:d("emptyState.reCheck")})]})]}):(0,b.jsxs)(aX,{icon:(0,b.jsx)(aD.AlertCircle,{className:"h-4 w-4 text-amber-500"}),children:[(0,b.jsx)("span",{className:"text-sm font-medium text-amber-600 dark:text-amber-400",children:d("emptyState.notInstalled",{label:a.label})}),a.installCommand?(0,b.jsx)(aY,{command:a.installCommand}):null,(0,b.jsx)("button",{type:"button",onClick:c,className:"text-xs text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400",children:d("emptyState.reCheck")})]}):(0,b.jsx)(aX,{icon:(0,b.jsx)(R.Loader2,{className:"text-muted-foreground/50 h-4 w-4 animate-spin"}),children:(0,b.jsx)("span",{className:"text-muted-foreground/50 text-sm",children:d("emptyState.checkingSetup")})})}function aW({label:a,status:c,missingHint:d}){let{t:e}=(0,i.useTranslation)("web");return c?c.installed?(0,b.jsx)(aX,{icon:(0,b.jsx)(aC.CheckCircle2,{className:"h-4 w-4 text-emerald-500"}),children:(0,b.jsxs)("span",{className:"flex items-baseline gap-2",children:[(0,b.jsx)("span",{className:"text-sm text-emerald-600 dark:text-emerald-400",children:e("emptyState.ready",{label:a})}),c.version?(0,b.jsxs)("span",{className:"text-muted-foreground/40 text-xs",children:["v",c.version]}):null]})}):(0,b.jsxs)(aX,{icon:(0,b.jsx)(aD.AlertCircle,{className:"h-4 w-4 text-amber-500"}),children:[(0,b.jsx)("span",{className:"text-sm font-medium text-amber-600 dark:text-amber-400",children:e("emptyState.notFound",{label:a})}),(0,b.jsx)("span",{className:"text-muted-foreground/50 text-xs",children:d}),c.installCommand?(0,b.jsx)(aY,{command:c.installCommand}):null,c.installUrl?(0,b.jsxs)("a",{href:c.installUrl,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-xs text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400",children:[e("emptyState.docs")," ",(0,b.jsx)(P.ExternalLink,{className:"h-3 w-3"})]}):null]}):(0,b.jsx)(aX,{icon:(0,b.jsx)(R.Loader2,{className:"text-muted-foreground/50 h-4 w-4 animate-spin"}),children:(0,b.jsx)("span",{className:"text-muted-foreground/50 text-sm",children:e("emptyState.checking",{label:a})})})}function aX({icon:a,children:c}){return(0,b.jsxs)("div",{className:"animate-in fade-in flex items-start gap-2.5",children:[(0,b.jsx)("div",{className:"mt-0.5 shrink-0",children:a}),(0,b.jsx)("div",{className:"flex min-w-0 flex-1 flex-col gap-1",children:c})]})}function aY({command:a}){let[c,d]=(0,e.useState)(!1);return(0,b.jsxs)("button",{type:"button",onClick:async()=>{await navigator.clipboard.writeText(a),d(!0),setTimeout(()=>d(!1),2e3)},className:"group/cmd flex cursor-pointer items-center justify-between gap-2 rounded-md bg-zinc-100 py-1 ps-2.5 pe-2 text-start transition-colors hover:bg-zinc-200 dark:bg-zinc-800 dark:hover:bg-zinc-700",children:[(0,b.jsx)("code",{className:"min-w-0 truncate text-[11px] leading-relaxed text-zinc-600 dark:text-zinc-300",children:a}),c?(0,b.jsx)(ag.Check,{className:"h-3 w-3 shrink-0 text-emerald-500"}):(0,b.jsx)(aB.Copy,{className:"h-3 w-3 shrink-0 text-zinc-400 opacity-0 transition-opacity group-hover/cmd:opacity-100"})]})}var aZ=a.i(302807),a$=a.i(587055),a_=a.i(575635),a0=a.i(241994),a1=a.i(645348);let a2="shep:collaboration-onboarding-dismissed";function a3({apps:a=[],repos:c=[],features:d=[],className:f}){let[g,h]=(0,e.useState)(!1);return((0,e.useEffect)(()=>{try{localStorage.getItem(a2)||h(!0)}catch{}},[]),g)?(0,b.jsxs)("div",{className:(0,j.cn)("border-border/60 bg-card relative flex flex-col gap-4 rounded-xl border p-5 shadow-sm",f),role:"region","aria-label":"Agent collaboration onboarding","data-testid":"collaboration-onboarding",children:[(0,b.jsx)("button",{type:"button","aria-label":"Dismiss",onClick:function(){try{localStorage.setItem(a2,"1")}catch{}h(!1)},className:"text-muted-foreground hover:text-foreground absolute top-3 right-3 rounded-md p-1 transition-colors",children:(0,b.jsx)(aZ.X,{className:"size-4"})}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"text-[10px] font-semibold tracking-widest text-indigo-500 uppercase",children:"New"}),(0,b.jsx)("h2",{className:"mt-0.5 text-base font-semibold",children:"Agent Collaboration & Supervision"}),(0,b.jsx)("p",{className:"text-muted-foreground mt-1 text-sm",children:"Your agents can now ask questions, talk to each other, and be guided by a supervisor you configure."})]}),(0,b.jsxs)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",children:[(0,b.jsx)(a4,{apps:a,repos:c,features:d}),(0,b.jsx)(a8,{icon:a$.MessageCircleQuestion,title:"Agent questions inbox",description:"A single place for all questions raised by agents during interactive and background runs.",href:"/agent-questions",cta:"View inbox"})]})]}):null}function a4({apps:a,repos:c,features:d}){let[f,g]=(0,e.useState)(!1),i=(0,e.useMemo)(()=>[...a.map(a=>({...a,kind:"app"})),...c.map(a=>({...a,kind:"repo"})),...d.map(a=>({...a,kind:"feature"}))],[a,c,d]);if(0===i.length)return(0,b.jsxs)("div",{className:"bg-muted/40 border-border/40 flex flex-col gap-2 rounded-lg border p-4",children:[(0,b.jsx)(a5,{}),(0,b.jsx)("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Supervisors attach to an application, repository, or feature. Add a repository or create an application to configure your first one."}),(0,b.jsxs)("button",{type:"button",onClick:()=>window.dispatchEvent(new CustomEvent("shep:open-create-application")),className:"text-primary mt-auto inline-flex cursor-pointer items-center gap-1 text-xs font-medium hover:underline",children:[(0,b.jsx)(h.Plus,{className:"size-3"}),"Create an application"]})]});if(1===i.length){var j;let a=i[0];return(0,b.jsx)(a8,{icon:a_.ShieldCheck,title:"Supervisor agent",description:`Delegate approvals and policy decisions for ${"app"===(j=a.kind)?"application":"repo"===j?"repository":"feature"} "${a.name}".`,href:a7(a),cta:"Configure supervisor"})}let k=i.slice(0,3),l=i.length-k.length;return(0,b.jsxs)("div",{className:"bg-muted/40 border-border/40 flex flex-col gap-2 rounded-lg border p-4",children:[(0,b.jsx)(a5,{}),(0,b.jsx)("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Pick an application, repository, or feature to configure its supervisor."}),f?(0,b.jsx)("div",{className:"mt-1 flex max-h-72 flex-col gap-1 overflow-y-auto",children:i.map(a=>(0,b.jsxs)(a1.default,{href:a7(a),className:"border-border/50 hover:bg-background flex items-center justify-between rounded-md border px-3 py-2 text-xs transition-colors",children:[(0,b.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[(0,b.jsx)(a6,{kind:a.kind,className:"text-muted-foreground size-3 shrink-0"}),(0,b.jsx)("span",{className:"truncate font-medium",children:a.name})]}),(0,b.jsx)(a0.ArrowRight,{className:"text-muted-foreground ml-2 size-3 shrink-0"})]},`${a.kind}-${a.id}`))}):(0,b.jsxs)("div",{className:"mt-1 flex flex-wrap gap-1.5",children:[k.map(a=>(0,b.jsxs)(a1.default,{href:a7(a),className:"border-border/50 bg-background hover:border-primary/40 hover:text-primary flex items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs transition-colors",children:[(0,b.jsx)(a6,{kind:a.kind,className:"size-3 shrink-0"}),(0,b.jsx)("span",{className:"max-w-[10rem] truncate",children:a.name}),(0,b.jsx)(a0.ArrowRight,{className:"size-2.5"})]},`${a.kind}-${a.id}`)),l>0?(0,b.jsxs)("button",{type:"button",onClick:()=>g(!0),className:"text-muted-foreground hover:text-foreground border-border/50 rounded-md border px-2.5 py-1 text-xs transition-colors",children:["+",l," more"]}):null]})]})}function a5(){return(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("div",{className:"bg-primary/10 text-primary flex h-7 w-7 shrink-0 items-center justify-center rounded-md",children:(0,b.jsx)(a_.ShieldCheck,{className:"size-3.5"})}),(0,b.jsx)("span",{className:"text-sm font-medium",children:"Supervisor agent"})]})}function a6({kind:a,className:c}){let d="app"===a?af.Layers:"repo"===a?v.GitBranch:an.Sparkles;return(0,b.jsx)(d,{className:c,"aria-hidden":!0})}function a7(a){switch(a.kind){case"app":return`/application/${a.id}/supervisor`;case"repo":return`/supervisor/repo/${a.id}`;case"feature":return`/supervisor/feature/${a.id}`}}function a8({icon:a,title:c,description:d,href:e,cta:f}){return(0,b.jsxs)("div",{className:"bg-muted/40 border-border/40 flex flex-col gap-2 rounded-lg border p-4",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("div",{className:"bg-primary/10 text-primary flex h-7 w-7 shrink-0 items-center justify-center rounded-md",children:(0,b.jsx)(a,{className:"size-3.5"})}),(0,b.jsx)("span",{className:"text-sm font-medium",children:c})]}),(0,b.jsx)("p",{className:"text-muted-foreground text-xs leading-relaxed",children:d}),(0,b.jsxs)(a1.default,{href:e,className:"text-primary mt-auto inline-flex items-center gap-1 text-xs font-medium hover:underline",children:[f,(0,b.jsx)(a0.ArrowRight,{className:"size-3"})]})]})}var a9=a.i(716533);let ba={maxZoom:1,padding:.5,duration:500};var bb=a.i(69428);let bc={maxZoom:1,padding:.5,duration:500};function bd({initialNodes:a,initialEdges:d}){let j,l,m,n,p,q,s=(0,f.useRouter)(),t=(0,f.usePathname)(),u=(j=(0,f.usePathname)().match(/^\/feature\/([^/]+)/),j?.[1]??null),w=(l=(0,f.usePathname)(),m=(0,f.useSearchParams)(),n=l.match(/^\/repository\/([^/]+)/),{id:n?.[1]??null,path:l.startsWith("/create")?m.get(C.URL_PARAMS.repo):null}),x=(0,au.useSoundAction)("click"),{guardedNavigate:y}=(0,av.useDrawerCloseGuard)(),{fitView:z}=(0,c.useReactFlow)(),A=(0,e.useRef)(null),{defaultViewport:B,onMoveEnd:D,resetViewport:E}=(p=(0,e.useRef)(function(){try{let a=localStorage.getItem(aw);if(null==a)return ax;let b=JSON.parse(a);return!(null==b||"object"!=typeof b||Array.isArray(b))&&"number"==typeof b.x&&"number"==typeof b.y&&"number"==typeof b.zoom&&Number.isFinite(b.x)&&Number.isFinite(b.y)&&Number.isFinite(b.zoom)&&b.zoom>0?b:ax}catch{return ax}}()).current,q=(0,e.useRef)(null),(0,e.useEffect)(()=>()=>{null!=q.current&&clearTimeout(q.current)},[]),{defaultViewport:p,onMoveEnd:(0,e.useCallback)(a=>{null!=q.current&&clearTimeout(q.current),q.current=setTimeout(()=>{try{localStorage.setItem(aw,JSON.stringify(a))}catch{}},500)},[]),resetViewport:(0,e.useCallback)(()=>{try{localStorage.removeItem(aw)}catch{}return ax},[])}),{nodes:F,edges:G,onNodesChange:H,handleConnect:I,handleAddRepository:K,handleArchiveFeature:L,handleDeleteFeature:M,handleRetryFeature:N,handleStartFeature:O,handleStopFeature:P,handleUnarchiveFeature:R,handleDeleteRepository:T,handleDeleteApplication:U,createFeatureNode:V,showArchived:W,setShowArchived:X,setCallbacks:Z}=(0,a9.useControlCenterState)(a,d),{workspaces:$,activeWorkspace:_,isDefaultActive:aa,setActiveWorkspace:ab,createWorkspace:ac,renameWorkspace:ae,deleteWorkspace:ag,setWorkspaceMembers:ah,addToActiveWorkspace:ai}=function(){let[a,b]=(0,e.useState)(al);(0,e.useEffect)(()=>{b(al)},[]),(0,e.useEffect)(()=>{},[a]);let c=(0,e.useCallback)(a=>{b(b=>b.workspaces.some(b=>b.id===a)?{...b,activeWorkspaceId:a}:b)},[]),d=(0,e.useCallback)(a=>{let c=a.trim()||"Untitled workspace",d={id:`ws-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,name:c,repoIds:[],featureIds:[]};return b(a=>({workspaces:[...a.workspaces,d],activeWorkspaceId:d.id})),d},[]),f=(0,e.useCallback)((a,c)=>{if(a===ak)return;let d=c.trim();d&&b(b=>({...b,workspaces:b.workspaces.map(b=>b.id===a?{...b,name:d}:b)}))},[]),g=(0,e.useCallback)(a=>{a!==ak&&b(b=>({workspaces:b.workspaces.filter(b=>b.id!==a),activeWorkspaceId:b.activeWorkspaceId===a?ak:b.activeWorkspaceId}))},[]),h=(0,e.useCallback)((a,c)=>{a!==ak&&b(b=>({...b,workspaces:b.workspaces.map(b=>b.id===a?{...b,repoIds:[...c.repoIds],featureIds:[...c.featureIds]}:b)}))},[]),i=(0,e.useCallback)((a,c)=>{b(b=>b.activeWorkspaceId===ak?b:{...b,workspaces:b.workspaces.map(d=>{if(d.id!==b.activeWorkspaceId)return d;let e="repo"===a?d.repoIds:d.featureIds,f=e.includes(c)?e.filter(a=>a!==c):[...e,c];return"repo"===a?{...d,repoIds:f}:{...d,featureIds:f}})})},[]),j=(0,e.useCallback)(a=>i("repo",a),[i]),k=(0,e.useCallback)(a=>i("feature",a),[i]),l=(0,e.useCallback)(a=>{let c=a.repoIds??[],d=a.featureIds??[];(0!==c.length||0!==d.length)&&b(a=>a.activeWorkspaceId===ak?a:{...a,workspaces:a.workspaces.map(b=>{if(b.id!==a.activeWorkspaceId)return b;let e=new Set(b.repoIds);for(let a of c)e.add(a);let f=new Set(b.featureIds);for(let a of d)f.add(a);return e.size===b.repoIds.length&&f.size===b.featureIds.length?b:{...b,repoIds:Array.from(e),featureIds:Array.from(f)}})})},[]),m=a.workspaces.find(b=>b.id===a.activeWorkspaceId)??a.workspaces[0];return{workspaces:a.workspaces,activeWorkspace:m,activeWorkspaceId:a.activeWorkspaceId,isDefaultActive:a.activeWorkspaceId===ak,setActiveWorkspace:c,createWorkspace:d,renameWorkspace:f,deleteWorkspace:g,setWorkspaceMembers:h,toggleRepoInActive:j,toggleFeatureInActive:k,addToActiveWorkspace:l}}(),aj=(0,e.useRef)(new Set),[ap,as]=(0,e.useState)(!1),[ay,az]=(0,e.useState)(!1),[aB,aC]=(0,e.useState)(!1),[aD,aE]=(0,e.useState)(!1),[aF,aG]=(0,e.useState)(null),[aH,aI]=(0,e.useState)(!1),{setFeatures:aJ,setHasRepositories:aK}=(0,at.useSidebarFeaturesContext)(),aL=(0,e.useMemo)(()=>F.filter(a=>"featureNode"===a.type),[F]),aM=(0,e.useMemo)(()=>aL.map(a=>{let b=a.data;return`${b.featureId}:${b.state}:${b.name}:${b.repositoryPath}`}).sort().join(","),[aL]);(0,e.useEffect)(()=>{aJ(aL.map(a=>{let b=a.data,c=(0,at.mapNodeStateToSidebarStatus)(b.state);if(!c)return null;let d=b.repositoryPath??"";return{featureId:b.featureId,name:b.name,status:c,repositoryPath:d,repositoryName:b.repositoryName??d.split("/").filter(Boolean).pop()??d,...null!=b.startedAt&&{startedAt:b.startedAt},...null!=b.runtime&&{duration:b.runtime},...b.agentType&&{agentType:b.agentType},...b.modelId&&{modelId:b.modelId}}}).filter(Boolean))},[aM,aL,aJ]);let aN=(0,e.useCallback)(a=>{y(()=>s.push(`/application/${a}`))},[s,y]),aO=(0,e.useCallback)(a=>{x.play(),y(()=>s.push((0,C.buildCreateUrl)({applicationId:a,mode:S.BuildMode.Spec})))},[s,x,y]),aP=(0,e.useCallback)((a,b)=>{if("featureNode"===b.type){let c=b.data;"creating"!==c.state&&"deleting"!==c.state&&a.target.closest('[data-testid="feature-node-card"]')&&y(()=>{x.play(),s.push(`/feature/${c.featureId}`)})}},[s,x,y]),aQ=(0,e.useCallback)(()=>{x.play(),s.push("/create")},[s,x]),aR=(0,e.useCallback)(a=>{x.play();let b=F.find(b=>b.id===a),c=b?.data?.repositoryPath;s.push((0,C.buildCreateUrl)(c?{repo:c}:{}))},[F,s,x]),aT=(0,e.useCallback)(a=>{let b=a.startsWith("feat-")?a.slice(5):a,c=G.find(b=>b.target===a),d=c?F.find(a=>a.id===c.source):null,e=d?.data?.repositoryPath;x.play(),s.push((0,C.buildCreateUrl)({repo:e,parent:b}))},[F,G,s,x]),aV=(0,e.useCallback)(a=>{let b=F.find(b=>b.id===a);if(b?.type==="repositoryNode"){let a=b.data;a.id&&y(()=>s.push(`/repository/${a.id}`))}},[F,s,y]),aW=(0,e.useCallback)(()=>{"/control-center"!==t&&y(()=>s.push("/control-center"))},[s,t,y]),aX=(0,e.useCallback)(a=>{setTimeout(()=>{z(bc),A.current=setTimeout(()=>{y(()=>s.push((0,C.buildCreateUrl)({repo:a})))},600)},0)},[z,y,s]),aY=(0,e.useCallback)(a=>{setTimeout(()=>{z({nodes:[{id:a}],maxZoom:1,padding:.4,duration:600})},0)},[z]),aZ=(0,e.useCallback)(a=>{let{wasEmpty:b,repoPath:c,tempNodeId:d}=K(a);b?aX(c):aY(d)},[K,aX,aY]);!function(a){let{addRepoAndFocus:b,createFeatureNode:c,nodes:d,handleDeleteFeature:f,handleArchiveFeature:g,handleUnarchiveFeature:h}=a;(0,e.useEffect)(()=>{let a=a=>{b(a.detail.path)};return window.addEventListener("shep:add-repository",a),()=>window.removeEventListener("shep:add-repository",a)},[b]),(0,e.useEffect)(()=>{let a=a=>{let b=a.detail;if(b.parentId)return void c(`feat-${b.parentId}`,{state:"creating",featureId:b.featureId,name:b.name,description:b.description,repositoryPath:b.repositoryPath},"dependencyEdge");if(b.applicationId){let a=`app-${b.applicationId}`;if(d.find(b=>b.id===a&&"applicationNode"===b.type))return void c(a,{state:"running",featureId:b.featureId,name:b.name,description:b.description,repositoryPath:b.repositoryPath,applicationId:b.applicationId},"dependencyEdge")}let e=d.find(a=>"repositoryNode"===a.type&&a.data.repositoryPath===b.repositoryPath);c(e?.id??null,{state:"running",featureId:b.featureId,name:b.name,description:b.description,repositoryPath:b.repositoryPath})};return window.addEventListener("shep:feature-created",a),()=>window.removeEventListener("shep:feature-created",a)},[d,c]),(0,e.useEffect)(()=>{let a=a=>{let{featureId:b,cleanup:c,cascadeDelete:d,closePr:e}=a.detail;f(b,c,d,e)};return window.addEventListener("shep:feature-delete-requested",a),()=>window.removeEventListener("shep:feature-delete-requested",a)},[f]),(0,e.useEffect)(()=>{let a=a=>{let{featureId:b}=a.detail;g(b)};return window.addEventListener("shep:feature-archive-requested",a),()=>window.removeEventListener("shep:feature-archive-requested",a)},[g]),(0,e.useEffect)(()=>{let a=a=>{let{featureId:b}=a.detail;h(b)};return window.addEventListener("shep:feature-unarchive-requested",a),()=>window.removeEventListener("shep:feature-unarchive-requested",a)},[h])}({addRepoAndFocus:aZ,createFeatureNode:V,nodes:F,handleDeleteFeature:M,handleArchiveFeature:L,handleUnarchiveFeature:R}),(0,e.useEffect)(()=>()=>{null!=A.current&&clearTimeout(A.current)},[]),(0,e.useEffect)(()=>{Z({onNodeAction:aT,onFeatureDelete:M,onRetryFeature:N,onStartFeature:O,onStopFeature:P,onArchiveFeature:L,onUnarchiveFeature:R,onRepositoryAdd:aR,onRepositoryClick:aV,onRepositoryDelete:T,onApplicationClick:aN,onApplicationDelete:U,onApplicationCreateSddFeature:aO})},[Z,aT,L,M,N,O,P,R,aR,aV,T,aN,U,aO]);let a$=(0,e.useCallback)((a,b)=>{D(b)},[D]),a_=F.some(a=>"repositoryNode"===a.type),a0=a_||F.some(a=>"applicationNode"===a.type);(0,e.useEffect)(()=>{aK(a_)},[a_,aK]);let[a1,a2]=(0,e.useState)(a0),a4=(0,e.useRef)(null);(0,e.useEffect)(()=>(a0?(a4.current&&(clearTimeout(a4.current),a4.current=null),a2(!0)):a1&&(E(),a4.current=setTimeout(()=>{a2(!1),a4.current=null},500)),()=>{a4.current&&clearTimeout(a4.current)}),[a0,a1,E]),(0,e.useEffect)(()=>{let a=aj.current,b=[],c=[];for(let d of F)a.has(d.id)||(a.add(d.id),"repositoryNode"===d.type?b.push(d.id):"featureNode"===d.type&&c.push(d.id));aa||(0!==b.length||0!==c.length)&&ai({repoIds:b,featureIds:c})},[F,aa,ai]);let a5=(0,e.useMemo)(()=>{if(aa)return F;let a=new Set(_.repoIds),b=new Set(_.featureIds);return F.filter(c=>"repositoryNode"===c.type?a.has(c.id):"featureNode"!==c.type||b.has(c.id))},[F,aa,_]),a6=(0,e.useMemo)(()=>{if(aa)return G;let a=new Set(a5.map(a=>a.id));return G.filter(b=>a.has(b.source)&&a.has(b.target))},[G,aa,a5]),a7=t.startsWith("/create"),a8=(0,e.useMemo)(()=>{let a=a5.filter(a=>"repositoryNode"===a.type),b=a5.some(a=>"featureNode"===a.type);return 1!==a.length||b||a7?a5:a5.map(a=>"repositoryNode"===a.type?{...a,data:{...a.data,pulseAdd:!0}}:a)},[a5,a7]),bd=(0,e.useCallback)(()=>{window.dispatchEvent(new CustomEvent("shep:pick-folder"))},[]);!function(a){let{activeWorkspace:b,isDefaultActive:c,workspaceFilteredNodes:d,fitView:f}=a,g=(0,e.useMemo)(()=>{if(c)return"default";let a=d.map(a=>a.id).sort().join(",");return`${b.id}:${a}`},[c,b.id,d]),h=(0,e.useRef)(null);(0,e.useEffect)(()=>{let a=h.current;if(h.current=g,null===a||a===g||c||0===d.length)return;let b=setTimeout(()=>{f(ba)},0);return()=>clearTimeout(b)},[g,c,d.length,f])}({activeWorkspace:_,isDefaultActive:aa,workspaceFilteredNodes:a5,fitView:z});let bf=a0&&!aa&&0===a5.length,bg=bf?(0,b.jsxs)("div",{className:"pointer-events-auto flex h-full w-full flex-col items-center justify-center px-8",children:[(0,b.jsx)("div",{className:"bg-primary/10 text-primary mb-5 flex h-12 w-12 items-center justify-center rounded-2xl",children:(0,b.jsx)(af.Layers,{className:"h-6 w-6"})}),(0,b.jsx)("h2",{className:"text-foreground/90 text-center text-2xl font-light tracking-tight",children:"This workspace is empty"}),(0,b.jsx)("p",{className:"text-muted-foreground mt-2 max-w-sm text-center text-sm leading-relaxed",children:"Add repositories or features from the canvas, or switch back to the default workspace to see everything."}),(0,b.jsxs)("div",{className:"mt-6 flex items-center gap-2",children:[(0,b.jsxs)(k.Button,{size:"sm",onClick:()=>aI(!0),className:"bg-blue-500 text-white hover:bg-blue-600",children:[(0,b.jsx)(g.FolderPlus,{className:"me-1.5 h-3.5 w-3.5"}),"New project"]}),(0,b.jsxs)(k.Button,{variant:"outline",size:"sm",onClick:()=>as(!0),children:[(0,b.jsx)(h.Plus,{className:"me-1.5 h-3.5 w-3.5"}),"Manage items"]}),(0,b.jsx)(k.Button,{variant:"ghost",size:"sm",onClick:()=>ab(ak),children:"Switch to Default"})]})]}):(0,b.jsx)(aU,{onRepositorySelect:aZ}),[bh,bi]=(0,e.useState)(!1),bj=(0,J.useFeatureFlags)(),bk=(0,e.useMemo)(()=>a.filter(a=>"applicationNode"===a.type).map(a=>({id:a.data.id,name:a.data.name,kind:"app"})),[a]),bl=(0,e.useMemo)(()=>a.filter(a=>"repositoryNode"===a.type).map(a=>({id:a.data.id??a.id,name:a.data.name,kind:"repo"})),[a]),bm=(0,e.useMemo)(()=>a.filter(a=>"featureNode"===a.type).map(a=>({id:a.data.featureId??a.id,name:a.data.name,kind:"feature"})),[a]),bn=(0,e.useMemo)(()=>a8.filter(a=>"applicationNode"===a.type),[a8]),bo=1===bn.length?bn[0].data.id:void 0,bp=1===bn.length?bn[0].data.name:void 0,bq=function({router:a,clickSound:c,guardedNavigate:d,handlePickFolder:f,onNewProject:h,onNewApplication:j,selectedApplicationId:k,selectedApplicationName:l}){let{t:m}=(0,i.useTranslation)("web");return(0,e.useMemo)(()=>{let e=[{id:"new-project",label:"New project",icon:(0,b.jsx)(g.FolderPlus,{className:"h-4 w-4"}),onClick:()=>{c.play(),h()}},{id:"new-feature",label:m("fab.newFeature"),icon:(0,b.jsx)(an.Sparkles,{className:"h-4 w-4"}),onClick:()=>{c.play(),d(()=>a.push("/create"))}},{id:"add-local-repo",label:m("fab.localFolder"),icon:(0,b.jsx)(r.FolderOpen,{className:"h-4 w-4"}),onClick:f},{id:"new-application",label:m("fab.newApplication"),icon:(0,b.jsx)(Q.LayoutGrid,{className:"h-4 w-4"}),onClick:j}];return k&&e.push({id:"new-sdd-feature-for-app",label:m("fab.newSddForApp",{appName:l??""}),icon:(0,b.jsx)(bb.ClipboardList,{className:"h-4 w-4"}),onClick:()=>{c.play(),d(()=>a.push((0,C.buildCreateUrl)({applicationId:k,mode:S.BuildMode.Spec})))}}),e.push({id:"adopt-branch",label:m("fab.adoptBranch"),icon:(0,b.jsx)(v.GitBranch,{className:"h-4 w-4"}),onClick:()=>{d(()=>a.push("/adopt"))}}),e.push({id:"add-github-repo",label:m("fab.fromGithub"),icon:(0,b.jsx)(o.Github,{className:"h-4 w-4"}),onClick:()=>{window.dispatchEvent(new CustomEvent("shep:open-github-import"))}}),e},[m,c,d,a,f,h,j,k,l])}({router:s,clickSound:x,guardedNavigate:y,handlePickFolder:bd,onNewProject:()=>aI(!0),onNewApplication:()=>bi(!0),...void 0!==bo&&{selectedApplicationId:bo},...void 0!==bp&&{selectedApplicationName:bp}}),br=(0,b.jsx)(ad,{showArchived:W,onToggleArchived:()=>X(!W),onResetViewport:E,startSlot:(0,b.jsx)(am,{workspaces:$,activeWorkspace:_,onSelect:ab,onRequestCreate:()=>az(!0),onRequestRename:()=>aC(!0),onRequestDelete:a=>{aG(a),aE(!0)},onManage:()=>as(!0)})});return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(Y,{nodes:a1?a8:[],edges:a1?a6:[],selectedFeatureId:u,selectedRepository:w,defaultViewport:B,onNodesChange:H,onConnect:I,onAddFeature:aQ,onNodeClick:aP,onPaneClick:aW,onMoveEnd:a$,toolbar:br,showToolbarOnEmpty:bf,emptyState:bg}),bj.collaboration?(0,b.jsx)("div",{className:"pointer-events-none absolute inset-x-0 top-14 z-10 flex justify-end px-4",children:(0,b.jsx)(a3,{apps:bk,repos:bl,features:bm,className:"pointer-events-auto w-full max-w-md"})}):null,a1?(0,b.jsx)(be,{actions:bq}):null,(0,b.jsx)(aS.NewProjectDialog,{open:aH,onOpenChange:aI,onCreated:a=>aZ(a)}),(0,b.jsx)(ao,{open:ap,onOpenChange:as,workspace:_,allNodes:F,onSave:a=>ah(_.id,a)}),(0,b.jsx)(aq,{open:ay,onOpenChange:az,title:"New workspace",description:"Create a workspace to filter the canvas to a specific set of repositories and features.",confirmLabel:"Create",onConfirm:a=>{ac(a),as(!0)}}),(0,b.jsx)(aq,{open:aB,onOpenChange:aC,title:"Rename workspace",initialValue:_.name,confirmLabel:"Rename",onConfirm:a=>ae(_.id,a)}),(0,b.jsx)(ar.AlertDialog,{open:aD,onOpenChange:a=>{aE(a),a||aG(null)},children:(0,b.jsxs)(ar.AlertDialogContent,{children:[(0,b.jsxs)(ar.AlertDialogHeader,{children:[(0,b.jsx)(ar.AlertDialogTitle,{children:"Delete workspace?"}),(0,b.jsxs)(ar.AlertDialogDescription,{children:["This will permanently remove the workspace “",$.find(a=>a.id===aF)?.name??_.name,"”. The repositories and features themselves are not affected."]})]}),(0,b.jsxs)(ar.AlertDialogFooter,{children:[(0,b.jsx)(ar.AlertDialogCancel,{children:"Cancel"}),(0,b.jsx)(ar.AlertDialogAction,{variant:"destructive",onClick:()=>{aF&&(ag(aF),aG(null))},children:"Delete"})]})]})}),bh?(0,b.jsx)("div",{className:"absolute inset-0 z-50",children:(0,b.jsx)(aA.ControlCenterEmptyState,{onRepositorySelect:a=>{bi(!1),aZ(a)},onApplicationCreated:a=>{s.push(`/application/${a}`)},onClose:()=>bi(!1),className:"bg-background"})}):null]})}function be({actions:a}){let{state:c}=(0,ay.useSidebar)(),{i18n:d}=(0,i.useTranslation)("web"),{swapPosition:e}=(0,az.useFabLayout)(),f="rtl"===d.dir();if(e)return(0,b.jsx)(as.FloatingActionButton,{actions:a,className:"!fixed bottom-6",style:f?{left:"calc(var(--sidebar-width-icon) + 32px)",transition:"left 200ms ease-in-out"}:{right:"32px",transition:"right 200ms ease-in-out"}});let g="expanded"===c?"calc(var(--sidebar-width) + 32px)":"calc(var(--sidebar-width-icon) + 32px)";return(0,b.jsx)(as.FloatingActionButton,{actions:a,className:"!fixed bottom-6",style:f?{right:g,transition:"right 200ms ease-in-out"}:{left:g,transition:"left 200ms ease-in-out"}})}function bf({initialNodes:a,initialEdges:e,drawer:f}){return(0,b.jsxs)("div",{"data-testid":"control-center",className:"h-full w-full",children:[(0,b.jsx)(d.SessionsProvider,{children:(0,b.jsx)(c.ReactFlowProvider,{children:(0,b.jsx)(bd,{initialNodes:a,initialEdges:e})})}),(0,b.jsx)("div",{children:f},"drawer")]})}a.s(["ControlCenter",()=>bf],259949)},160172,a=>{"use strict";var b=a.i(966691),c=a.i(624434);a.s(["DeploymentStatusProvider",()=>b.DeploymentStatusProvider,"EMPTY_ENTRY",()=>c.EMPTY_ENTRY,"useDeploymentStatusContext",()=>b.useDeploymentStatusContext,"useDeploymentStatusContextOptional",()=>b.useDeploymentStatusContextOptional])}];
1
+ module.exports=[716533,a=>{"use strict";var b=a.i(944592),c=a.i(91109),d=a.i(952313),e=a.i(216839),f=a.i(278135),g=a.i(424530),h=a.i(574214),i=a.i(725297),j=a.i(234656),k=a.i(220574),l=a.i(628740),m=a.i(289111);let n=(0,m.createServerReference)("608cb7bed4e740de6ec1034873b198d85e0771cdfb",m.callServer,void 0,m.findSourceMapURL,"deleteRepository");var o=a.i(36709);let p=(0,m.createServerReference)("40127b07baac3bb5494e3d8ad7b721b35a467f4a93",m.callServer,void 0,m.findSourceMapURL,"getFeatureMetadata");var q=a.i(484871),r=a.i(966691),s=a.i(219884),t=a.i(987139),u=a.i(887973),v=a.i(574146);a.i(490370);var w=a.i(224640);function x(a,b){let c=new Map;for(let a of b)"dependencyEdge"===a.type&&c.set(a.target,a.source);let d=new Map,e=new Map,f=new Map;for(let b of a)if("featureNode"===b.type){let a=b.data;d.set(b.id,{nodeId:b.id,data:a,parentNodeId:c.get(b.id),...a.applicationId&&{applicationId:a.applicationId}})}else"repositoryNode"===b.type?e.set(b.id,{nodeId:b.id,data:b.data}):"applicationNode"===b.type&&f.set(b.id,{nodeId:b.id,data:b.data});return{featureMap:d,repoMap:e,applicationMap:f}}function y(a,b){return(void 0===b.state||b.state===a.state)&&(void 0===b.lifecycle||b.lifecycle===a.lifecycle)&&(void 0===b.name||b.name===a.name)&&(void 0===b.description||b.description===a.description)}function z(a,b){if(a.size!==b.size)return!1;for(let[c,d]of a){let a=b.get(c);if(!a||d.parentNodeId!==a.parentNodeId||d.data!==a.data&&JSON.stringify(d.data)!==JSON.stringify(a.data))return!1}return!0}let A=(0,t.createLogger)("[Polling]"),B=0,C=0;function D(a,m){let t=(0,c.useRouter)(),D=(0,s.useSoundAction)("delete"),E=(0,s.useSoundAction)("create"),[F,G]=(0,b.useState)(!1),{nodes:H,edges:I,reconcile:J,updateFeature:K,addPendingFeature:L,removeFeature:M,restoreFeature:N,addRepository:O,removeRepository:P,replaceRepository:Q,getFeatureRepositoryPath:R,getRepositoryData:S,getRepoMapSize:T,addApplication:U,removeApplication:V,setCallbacks:W,beginMutation:X,endMutation:Y,isMutating:Z}=function(a,c,d=!1){let{i18n:f}=(0,w.useTranslation)(),g=(0,b.useMemo)(()=>(0,e.getCanvasLayoutDefaults)(f.dir()),[f]),h=(0,b.useMemo)(()=>x(a,c),[]),[i,j]=(0,b.useState)(h.featureMap),[k,l]=(0,b.useState)(h.repoMap),[m,n]=(0,b.useState)(h.applicationMap),[o,p]=(0,b.useState)(new Map),q=(0,b.useRef)(new Map),r=(0,b.useRef)(new Set),s=(0,b.useRef)(0),t=(0,b.useRef)(new Set),u=(0,b.useRef)(new Set),v=(0,b.useRef)(new Set),A=(0,b.useRef)({}),B=(0,b.useMemo)(()=>({onNodeAction:a=>A.current.onNodeAction?.(a),onNodeSettings:a=>A.current.onNodeSettings?.(a),onFeatureDelete:(a,b,c,d)=>A.current.onFeatureDelete?.(a,b,c,d),onRepositoryAdd:a=>A.current.onRepositoryAdd?.(a),onRepositoryClick:a=>A.current.onRepositoryClick?.(a),onRepositoryDelete:a=>A.current.onRepositoryDelete?.(a),onRetryFeature:a=>A.current.onRetryFeature?.(a),onStartFeature:a=>A.current.onStartFeature?.(a),onArchiveFeature:a=>A.current.onArchiveFeature?.(a),onUnarchiveFeature:a=>A.current.onUnarchiveFeature?.(a),onApplicationClick:a=>A.current.onApplicationClick?.(a),onApplicationDelete:a=>A.current.onApplicationDelete?.(a),onApplicationCreateSddFeature:a=>A.current.onApplicationCreateSddFeature?.(a)}),[]),C=(0,b.useRef)(i);C.current=i;let D=(0,b.useRef)(k);D.current=k;let E=(0,b.useMemo)(()=>{if(d)return i;let a=new Map;for(let[b,c]of i)"archived"!==c.data.state&&a.set(b,c);return a.size===i.size?i:a},[i,d]),F=(0,b.useMemo)(()=>(function(a,b,c,d,e){let f=[],g=[],h=a=>a.replace(/\\/g,"/"),i=new Map;for(let[a,c]of b)c.data.repositoryPath&&i.set(h(c.data.repositoryPath),a);let j=new Map;if(e)for(let[a,b]of e)b.data.id&&j.set(b.data.id,a);let k=new Map;for(let[a,c]of[...b.entries()].sort((a,b)=>{let c=a[1].data.createdAt,d=b[1].data.createdAt;return("number"!=typeof c||Number.isNaN(c)?1/0:c)-("number"!=typeof d||Number.isNaN(d)?1/0:d)})){let b={...c.data,...d?.onRepositoryAdd&&{onAdd:()=>d.onRepositoryAdd(a)},...d?.onRepositoryClick&&{onClick:()=>d.onRepositoryClick(a)},...d?.onRepositoryDelete&&{onDelete:d.onRepositoryDelete}};f.push({id:a,type:"repositoryNode",position:{x:0,y:0},data:b})}for(let[b,e,l]of[...[...a.entries()].map(([a,b])=>[a,b,!1]),...[...c.entries()].filter(([b])=>!a.has(b)).map(([a,b])=>[a,b,!0])]){let m="creating"===e.data.state||l,n={...e.data,...!m&&d?.onNodeAction&&{onAction:()=>d.onNodeAction(b)},...!m&&d?.onNodeSettings&&{onSettings:()=>d.onNodeSettings(b)},...!m&&d?.onFeatureDelete&&{onDelete:d.onFeatureDelete},...!m&&"error"===e.data.state&&d?.onRetryFeature&&{onRetry:d.onRetryFeature},...!m&&"pending"===e.data.state&&d?.onStartFeature&&{onStart:d.onStartFeature},...!m&&("running"===e.data.state||"action-required"===e.data.state)&&d?.onStopFeature&&{onStop:d.onStopFeature},...!m&&"archived"!==e.data.state&&"deleting"!==e.data.state&&d?.onArchiveFeature&&{onArchive:d.onArchiveFeature},...!m&&"archived"===e.data.state&&d?.onUnarchiveFeature&&{onUnarchive:d.onUnarchiveFeature}};f.push({id:b,type:"featureNode",position:{x:0,y:0},data:n});let o=e.applicationId?j.get(e.applicationId):void 0;if(e.parentNodeId&&(a.has(e.parentNodeId)||c.has(e.parentNodeId)))g.push({id:`dep-${e.parentNodeId}-${b}`,source:e.parentNodeId,target:b,type:"dependencyEdge"});else if(o)g.push({id:`dep-${o}-${b}`,source:o,target:b,type:"dependencyEdge"});else{let a=h(e.data.repositoryPath),c=i.get(a)??function(a){if(k.has(a))return k.get(a);let b=`virtual-repo-${a}`,c=a.split("/").filter(Boolean).at(-1)??a;return f.push({id:b,type:"repositoryNode",position:{x:0,y:0},data:{name:c,repositoryPath:a}}),k.set(a,b),b}(a);g.push({id:`edge-${c}-${b}`,source:c,target:b,style:{strokeDasharray:"5 5"}})}}if(e)for(let[a,b]of e){let c={...b.data,...d?.onApplicationClick&&{onClick:()=>d.onApplicationClick(b.data.id)},...d?.onApplicationDelete&&{onDelete:d.onApplicationDelete},...d?.onApplicationCreateSddFeature&&{onCreateSddFeature:d.onApplicationCreateSddFeature}};f.push({id:a,type:"applicationNode",position:{x:0,y:0},data:c})}let l=new Set;for(let a of g)"dependencyEdge"===a.type&&l.add(a.source);let m=g.length>0;for(let a of f){let b=a.data;b.showHandles=m,"featureNode"===a.type&&(b.hasChildren=l.has(a.id))}return{nodes:f,edges:g}})(E,k,o,B,m),[E,k,o,B,m]),G=(0,b.useRef)({key:"",positions:new Map}),{nodes:H,edges:I}=(0,b.useMemo)(()=>{let a=F.nodes.map(a=>a.id).sort().join(","),b=F.edges.map(a=>`${a.source}-${a.target}`).sort().join(","),c=`${a}|${b}|${g.direction}`;if(c!==G.current.key){let a=(0,e.layoutWithDagre)(F.nodes,F.edges,g),b=new Map;for(let c of a.nodes)b.set(c.id,{position:c.position,targetPosition:c.targetPosition,sourcePosition:c.sourcePosition});let d=G.current.positions;if(d.size>0){let c=0,e=0;for(let[a,f]of b){let b=d.get(a);if(b){c=b.position.x-f.position.x,e=b.position.y-f.position.y;break}}if(0!==c||0!==e){for(let a of b.values())a.position={x:a.position.x+c,y:a.position.y+e};for(let b of a.nodes)b.position={x:b.position.x+c,y:b.position.y+e}}}return G.current={key:c,positions:b},a}let{positions:d}=G.current;return{nodes:F.nodes.map(a=>{let b=d.get(a.id);return b?{...a,...b}:a}),edges:F.edges}},[F,g]),J=(0,b.useCallback)((a,b)=>{if(s.current>0)return;let{featureMap:c,repoMap:d}=x(a,b),e=new Set([...c.values()].map(a=>`${a.data.name}\0${a.data.repositoryPath}`));j(a=>{let b=[...a.entries()].filter(([,a])=>"creating"===a.data.state),d=new Map(c);for(let[a,c]of b){let b=`${c.data.name}\0${c.data.repositoryPath}`;e.has(b)||d.set(a,c)}let f=new Set;for(let[b,c]of a)"deleting"===c.data.state&&(d.has(b)?d.set(b,{...d.get(b),data:{...d.get(b).data,state:"deleting"}}):u.current.has(b)||(d.set(b,c),f.add(b)));for(let[a,b]of(u.current=f,q.current)){let c=d.get(a);c&&(d.set(a,{...c,data:{...c.data,...b}}),q.current.delete(a))}return z(a,d)?a:d}),p(a=>{if(0===a.size)return a;let b=!1,c=new Map(a);for(let[d,f]of a){let a=`${f.data.name}\0${f.data.repositoryPath}`;e.has(a)&&(c.delete(d),b=!0)}return b?c:a}),l(a=>{let b=new Map(d);for(let a of v.current)b.has(a)?b.delete(a):v.current.delete(a);let c=new Set([...d.values()].map(a=>a.data.repositoryPath));for(let[d,e]of a){if(b.has(d)||c.has(e.data.repositoryPath)){r.current.delete(d);continue}(d.startsWith("repo-temp-")||r.current.has(d))&&b.set(d,e)}return z(a,b)?a:b});let{applicationMap:f}=x(a,b);n(a=>z(a,f)?a:f)},[]),K=(0,b.useCallback)((a,b)=>{j(c=>{let d=c.get(a);if(!d)return q.current.set(a,{...q.current.get(a),...b}),c;if(q.current.delete(a),y(d.data,b))return c;let e=new Map(c);return e.set(a,{...d,data:{...d.data,...b}}),e}),p(c=>{let d=c.get(a);if(!d||y(d.data,b))return c;let e=new Map(c);return e.set(a,{...d,data:{...d.data,...b}}),e})},[]),L=(0,b.useCallback)((a,b,c)=>{p(d=>{let e=new Map(d);return e.set(a,{nodeId:a,data:b,parentNodeId:c,...b.applicationId&&{applicationId:b.applicationId}}),e})},[]),M=(0,b.useCallback)(a=>{p(b=>{if(!b.has(a))return b;let c=new Map(b);return c.delete(a),c})},[]),N=(0,b.useCallback)(a=>{j(b=>{if(!b.has(a))return b;let c=new Map(b);return c.delete(a),c})},[]),O=(0,b.useCallback)((a,b)=>{j(c=>{let d=new Map(c);return d.set(a,b),d})},[]),P=(0,b.useCallback)((a,b)=>{r.current.add(a),v.current.delete(a),l(c=>{let d=new Map(c);return d.set(a,{nodeId:a,data:b}),d})},[]),Q=(0,b.useCallback)(a=>{r.current.delete(a),v.current.add(a),l(b=>{if(!b.has(a))return b;let c=new Map(b);return c.delete(a),c})},[]),R=(0,b.useCallback)((a,b,c)=>{r.current.delete(a),r.current.add(b),l(d=>{if(!d.has(a))return d;let e=new Map(d);return e.delete(a),e.set(b,{nodeId:b,data:c}),e})},[]),S=(0,b.useCallback)((a,b)=>{n(c=>{let d=new Map(c);return d.set(a,{nodeId:a,data:b}),d})},[]),T=(0,b.useCallback)(a=>{n(b=>{if(!b.has(a))return b;let c=new Map(b);return c.delete(a),c})},[]),U=(0,b.useCallback)(a=>C.current.get(a)?.data.repositoryPath,[]),V=(0,b.useCallback)(a=>D.current.get(a)?.data,[]),W=(0,b.useCallback)(()=>D.current.size,[]),X=(0,b.useCallback)(a=>{A.current=a},[]),Y=(0,b.useCallback)(()=>{s.current++},[]),Z=(0,b.useCallback)((a=3e3)=>{let b=setTimeout(()=>{s.current=Math.max(0,s.current-1),t.current.delete(b)},a);t.current.add(b)},[]),$=(0,b.useCallback)(()=>s.current>0,[]);return(0,b.useEffect)(()=>{let a=t.current;return()=>{for(let b of a)clearTimeout(b);a.clear()}},[]),{nodes:H,edges:I,reconcile:J,updateFeature:K,addPendingFeature:L,removePendingFeature:M,removeFeature:N,restoreFeature:O,addRepository:P,removeRepository:Q,replaceRepository:R,getFeatureRepositoryPath:U,getRepositoryData:V,getRepoMapSize:W,addApplication:S,removeApplication:T,setCallbacks:X,beginMutation:Y,endMutation:Z,isMutating:$}}(a,m,F),$=(0,b.useRef)(H),_=(0,b.useRef)(I);(0,b.useEffect)(()=>{$.current=H,_.current=I},[H,I]);let aa=(0,b.useMemo)(()=>a.map(a=>a.id).sort().join(","),[a]),ab=(0,b.useMemo)(()=>a.filter(a=>"featureNode"===a.type).map(a=>{let b=a.data;return`${a.id}:${b.state}:${b.lifecycle}`}).sort().join(","),[a]),ac=(0,b.useRef)("");(0,b.useEffect)(()=>{let b=`${aa}|${ab}`;b!==ac.current&&(ac.current=b,J(a,m))},[aa,ab,a,m,J]);let ad=(0,b.useRef)(new Map),{events:ae,connectionStatus:af}=(0,q.useAgentEventsContext)(),{store:ag}=(0,r.useDeploymentStatusContext)();(0,b.useEffect)(()=>{let b=ad.current;for(let c of a){if("featureNode"!==c.type)continue;let a=c.data,e=b.get(c.id);void 0!==e&&e!==a.state&&(ae.some(b=>b.featureId===a.featureId&&(0,v.mapEventTypeToState)(b.eventType)===a.state)||("done"===a.state?d.toast.success(a.name,{description:"Feature completed!"}):"action-required"===a.state?d.toast.warning(a.name,{description:"Waiting for your approval",action:{label:"Review",onClick:()=>t.push(`/feature/${a.featureId}`)}}):"error"===a.state&&d.toast.error(a.name,{description:a.errorMessage??"Agent failed"}))),b.set(c.id,a.state)}},[ab,a,ae,t]);let ah=(0,b.useRef)(0);(0,b.useEffect)(()=>{if(ah.current>ae.length&&(ah.current=0),ae.length<=ah.current)return;let a=ae.slice(ah.current);for(let{featureId:b,state:c,lifecycle:d}of(ah.current=ae.length,(0,v.resolveSseEventUpdates)(a)))if(void 0!==c||void 0!==d){let a=`feat-${b}`,e=$.current.find(b=>b.id===a),f=e?e.data.state:void 0;if("deleting"===f||"error"===c&&Z()&&"running"===f)continue;K(a,{...void 0!==c&&{state:c},...void 0!==d&&{lifecycle:d}})}},[ae,K,Z]),(0,b.useEffect)(()=>{let a=a=>{let{featureId:b}=a.detail;X(),K(`feat-${b}`,{state:"running"}),Y()};return window.addEventListener("shep:feature-approved",a),()=>window.removeEventListener("shep:feature-approved",a)},[K,X,Y]);let ai=(0,b.useRef)(new Set),aj=(0,b.useRef)(0);(0,b.useEffect)(()=>{if(aj.current>ae.length&&(aj.current=0),ae.length<=aj.current)return;let a=ae.slice(aj.current);for(let b of(aj.current=ae.length,a)){if("Feature metadata updated"!==b.message||ai.current.has(b.featureId))continue;ai.current.add(b.featureId);let a=`feat-${b.featureId}`;p(b.featureId).then(b=>{b&&K(a,{name:b.name,description:b.description})}).catch(()=>{})}},[ae,K]);let ak=(0,b.useRef)("connected"===af);ak.current="connected"===af,(0,b.useEffect)(()=>{A.debug("polling enabled (15000ms recovery interval)");let a=setInterval(async()=>{if(!document.hidden&&!ak.current&&!Z())try{let a=await fetch("/api/graph-data");if(!a.ok)throw Error(`status ${a.status}`);let{nodes:b,edges:c,deployments:d}=await a.json();J(b,c),Array.isArray(d)&&ag.hydrate(d)}catch{A.warn("recovery poll failed — will retry next interval")}},15e3);return()=>{A.debug("polling disabled"),clearInterval(a)}},[J,Z,ag]);let al=(0,b.useCallback)(a=>{},[]),am=(0,b.useCallback)(a=>{},[]),an=(0,b.useCallback)((a,b,c)=>{let d=b?.featureId?`feat-${b.featureId}`:`feature-${Date.now()}-${B++}`,e={name:b?.name??"New Feature",description:b?.description??"Describe what this feature does",featureId:b?.featureId??`#${d.slice(-4)}`,lifecycle:"requirements",state:b?.state??"running",progress:0,repositoryPath:b?.repositoryPath??"",branch:b?.branch??"",...b?.applicationId&&{applicationId:b.applicationId}};return L(d,e,"dependencyEdge"===c&&a?a:void 0),d},[L]),ao=(0,b.useCallback)(a=>{let b=`feat-${a}`;X(),K(b,{state:"running"}),(0,h.resumeFeature)(a).then(a=>{a.error?(K(b,{state:"error"}),d.toast.error(a.error)):d.toast.success("Feature resumed")}).catch(()=>{K(b,{state:"error"}),d.toast.error("Failed to resume feature")}).finally(()=>Y())},[K,X,Y]),ap=(0,b.useCallback)(a=>{let b=`feat-${a}`;X(),K(b,{state:"running"}),(0,i.startFeature)(a).then(a=>{a.error?(K(b,{state:"pending"}),d.toast.error(a.error)):d.toast.success("Feature started")}).catch(()=>{K(b,{state:"pending"}),d.toast.error("Failed to start feature")}).finally(()=>Y())},[K,X,Y]),aq=(0,b.useCallback)(a=>{X(),(0,j.stopFeature)(a).then(a=>{a.error?d.toast.error(a.error):d.toast.success("Agent stopped")}).catch(()=>{d.toast.error("Failed to stop agent")}).finally(()=>Y())},[X,Y]),ar=(0,b.useCallback)(a=>{let b=`feat-${a}`;X(),K(b,{state:"archived"}),(0,f.archiveFeature)(a).then(a=>{a.error?(K(b,{state:"done"}),d.toast.error(a.error)):d.toast.success("Feature archived")}).catch(()=>{K(b,{state:"done"}),d.toast.error("Failed to archive feature")}).finally(()=>Y())},[K,X,Y]),as=(0,b.useCallback)(a=>{let b=`feat-${a}`;X(),K(b,{state:"done"}),(0,k.unarchiveFeature)(a).then(a=>{a.error?(K(b,{state:"archived"}),d.toast.error(a.error)):d.toast.success("Feature unarchived")}).catch(()=>{K(b,{state:"archived"}),d.toast.error("Failed to unarchive feature")}).finally(()=>Y())},[K,X,Y]),at=(0,b.useCallback)((a,b,c,e)=>{let f=`feat-${a}`,h=[];if(!0===c){let a=[f];for(;a.length>0;){let b=a.shift();for(let c of _.current)"dependencyEdge"===c.type&&c.source===b&&(h.push(c.target),a.push(c.target))}}let i=new Map;for(let a of[f,...h]){let b=$.current.find(b=>b.id===a);b&&i.set(a,b.data.state)}for(let a of(X(),K(f,{state:"deleting"}),h))K(a,{state:"deleting"});D.play(),t.push("/control-center"),(0,g.deleteFeature)(a,b,c,e).then(a=>{if(a.error){for(let[a,b]of i)b&&K(a,{state:b});d.toast.error(a.error)}else for(let a of(M(f),h))M(a)}).catch(()=>{for(let[a,b]of i)b&&K(a,{state:b});d.toast.error("Failed to delete feature")}).finally(()=>Y())},[t,D,K,M,X,Y]),au=(0,b.useCallback)(async(a,b)=>{let c=`repo-${a}`,e=new Set(_.current.filter(a=>a.source===c).map(a=>a.target)),f=S(c),g=new Map;for(let a of e){let b=$.current.find(b=>b.id===a);b&&g.set(a,{nodeId:a,data:b.data})}let h=()=>{for(let[a,b]of(f&&O(c,f),g))N(a,b)};for(let a of(X(),P(c),e))M(a);try{let c=await n(a,{deleteFromDisk:b?.deleteFromDisk===!0});if(!c.success){d.toast.error(c.error??"Failed to remove repository"),h();return}D.play()}catch{d.toast.error("Failed to remove repository"),h()}finally{Y()}},[D,P,M,O,N,S,X,Y]),av=(0,b.useCallback)(async a=>{let b=(0,u.featureIdForApplication)(a);X(),V(b),D.play();try{let b=await (0,o.deleteApplication)(a);b.error&&d.toast.error(b.error)}catch{d.toast.error("Failed to delete application")}finally{Y()}},[D,V,X,Y]),aw=(0,b.useCallback)(a=>{let b=(0,e.layoutWithDagre)($.current,_.current,{...(0,e.getCanvasLayoutDefaults)(),direction:a});J(b.nodes,b.edges)},[J]);return{nodes:H,edges:I,onNodesChange:al,handleConnect:am,handleAddRepository:(0,b.useCallback)(a=>{let b=0===T(),c=`repo-temp-${++C}`,e=a.replace(/[\\/]+$/,"").split(/[\\/]/).pop()??a;return X(),O(c,{name:e,repositoryPath:a,id:c,createdAt:Date.now(),gitInfoStatus:"loading"}),(0,l.addRepository)({path:a,name:e}).then(a=>{if(a.error){P(c),d.toast.error(a.error);return}let b=a.repository;Q(c,`repo-${b.id}`,{name:b.name,repositoryPath:b.path,id:b.id,createdAt:b.createdAt instanceof Date?b.createdAt.getTime():Number(b.createdAt)}),E.play()}).catch(()=>{P(c),d.toast.error("Failed to add repository")}).finally(()=>Y()),{wasEmpty:b,repoPath:a,tempNodeId:c}},[O,P,Q,E,T,X,Y]),handleArchiveFeature:ar,handleLayout:aw,handleDeleteFeature:at,handleRetryFeature:ao,handleStartFeature:ap,handleStopFeature:aq,handleUnarchiveFeature:as,handleDeleteRepository:au,handleDeleteApplication:av,createFeatureNode:an,addApplication:U,showArchived:F,setShowArchived:G,getFeatureRepositoryPath:R,getRepositoryData:S,setCallbacks:W}}a.s(["useControlCenterState",()=>D],716533)},259949,a=>{"use strict";var b=a.i(556365),c=a.i(442030),d=a.i(143707),e=a.i(944592),f=a.i(91109),g=a.i(142527),h=a.i(867837);a.i(490370);var i=a.i(224640),j=a.i(385536),k=a.i(118948);a.i(738702);var l=a.i(516223);a.i(54250);var m=a.i(901330),n=a.i(660047),o=a.i(323784),p=a.i(450488),q=a.i(863698),r=a.i(403195),s=a.i(216605),t=a.i(450490),u=a.i(5698),v=a.i(953170),w=a.i(492548),x=a.i(745449),y=a.i(781781),z=a.i(218615),A=a.i(612882),B=a.i(697708),C=a.i(974304);a.i(569029);var D=a.i(705623),E=a.i(645670),F=a.i(744239),G=a.i(758860),H=a.i(182934),I=a.i(118662),J=a.i(821333),K=a.i(755628),L=a.i(405555),M=a.i(533419),N=a.i(661583);function O({data:a,selected:d}){let{t:g,i18n:l}=(0,i.useTranslation)("web"),m=(0,f.useRouter)(),O="rtl"===l.dir(),P=O?n.Position.Right:n.Position.Left,Q=O?n.Position.Left:n.Position.Right,R=(0,J.useFeatureFlags)(),[S,T]=(0,e.useState)(!1),[U,V]=(0,e.useState)(!1);(0,e.useEffect)(()=>{S&&V(!1)},[S]);let W=a.id?`repo-${a.id}`:`repo-${a.name}`,X=(0,M.useTurnStatus)(W),Y=(0,K.useRepositoryActions)(a.repositoryPath?{repositoryId:a.id,repositoryPath:a.repositoryPath}:null),Z=(0,I.useDeployAction)(a.repositoryPath?{targetId:a.repositoryPath,targetType:"repository",repositoryPath:a.repositoryPath}:null),$="Booting"===Z.status||"Ready"===Z.status,_=(0,e.useCallback)((b,c)=>{if(!a.repositoryPath)return;let d=b.preview?b.preview.slice(0,200):"Unknown conversation",e=["Continue work from a previous agent session.","","## Session Context",`- Session ID: ${b.id}`,`- Messages: ${b.messageCount}`,b.lastMessageAt?`- Last active: ${b.lastMessageAt}`:"",`- Conversation file: ${c}`,"","## Session Preview",`> ${d}`,"","## Instructions","1. Read the full conversation history from the file above",`2. Analyze the current state of the repository — what was done, what remains`,"3. Create or update spec files to accurately reflect the current state and remaining work","4. Continue implementing any unfinished work from the conversation"].filter(Boolean).join("\n");m.push((0,C.buildCreateUrl)({repo:a.repositoryPath,prompt:e}))},[a.repositoryPath,m]);return(0,b.jsxs)("div",{className:(0,j.cn)("group relative",a.onDelete&&a.id&&"ps-10"),style:{direction:O?"rtl":"ltr"},children:[a.showHandles?(0,b.jsx)(c.Handle,{type:"target",position:P,isConnectable:!1,className:"opacity-0!",style:{top:70}}):null,a.onDelete&&a.id?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"absolute -start-3 top-1/2 -translate-y-1/2 opacity-0 transition-opacity group-hover:opacity-100",children:(0,b.jsx)(H.TooltipProvider,{children:(0,b.jsxs)(H.Tooltip,{children:[(0,b.jsx)(H.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{"aria-label":g("repositoryNode.removeRepository"),"data-testid":"repository-node-delete-button",onClick:a=>{a.stopPropagation(),T(!0)},className:"bg-card text-muted-foreground hover:border-destructive hover:text-destructive flex h-7 w-7 cursor-pointer items-center justify-center rounded-full border shadow-sm transition-colors",children:(0,b.jsx)(s.Trash2,{className:"h-3.5 w-3.5"})})}),(0,b.jsx)(H.TooltipContent,{children:g("repositoryNode.removeRepository")})]})})}),(0,b.jsx)(E.Dialog,{open:S,onOpenChange:T,children:(0,b.jsxs)(E.DialogContent,{className:"max-w-sm",children:[(0,b.jsxs)(E.DialogHeader,{children:[(0,b.jsx)(E.DialogTitle,{children:g("repositoryNode.removeConfirmTitle")}),(0,b.jsxs)(E.DialogDescription,{children:[(0,b.jsx)(B.Trans,{t:g,i18nKey:"repositoryNode.removeConfirmDescription",values:{name:a.name},components:{strong:(0,b.jsx)("strong",{})}})," ",g(U?"repositoryNode.removeConfirmDescriptionDeleteFiles":"repositoryNode.removeConfirmDescriptionKeepFiles")]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(F.Checkbox,{id:"repository-delete-from-disk",checked:U,onCheckedChange:a=>V(!0===a),"data-testid":"repository-node-delete-from-disk-checkbox","aria-label":g("repositoryNode.deleteFromDiskLabel")}),(0,b.jsx)(G.Label,{htmlFor:"repository-delete-from-disk",className:"cursor-pointer text-sm font-normal",children:g("repositoryNode.deleteFromDiskLabel")})]}),(0,b.jsxs)(E.DialogFooter,{className:"grid grid-cols-2 gap-2 sm:flex-none",children:[(0,b.jsx)(E.DialogClose,{asChild:!0,children:(0,b.jsx)(k.Button,{variant:"outline",children:g("repositoryNode.cancel")})}),(0,b.jsx)(k.Button,{variant:"destructive","data-testid":"repository-node-delete-confirm-button",onClick:()=>{T(!1),a.onDelete?.(a.id,{deleteFromDisk:U})},children:g("repositoryNode.remove")})]})]})})]}):null,(0,b.jsxs)("div",{role:"button",tabIndex:0,"data-testid":"repository-node-card","data-repo-name":a.name,onClick:b=>{b.stopPropagation(),a.onClick?.()},onKeyDown:b=>{("Enter"===b.key||" "===b.key)&&(b.preventDefault(),b.stopPropagation(),a.onClick?.())},className:(0,j.cn)("nodrag bg-card flex w-[26rem] cursor-pointer flex-col overflow-hidden rounded-xl border shadow-sm transition-[border-color,box-shadow] duration-200 dark:bg-neutral-800/80",d&&"border-blue-400 dark:border-amber-500/60"),children:[(0,b.jsxs)("div",{className:"flex items-center gap-3 px-4 py-3",children:[(0,b.jsx)(o.Github,{className:"text-muted-foreground h-5 w-5 shrink-0"}),(0,b.jsx)("span",{"data-testid":"repository-node-name",className:"min-w-0 truncate text-sm font-medium",children:a.name}),(0,b.jsxs)("div",{className:(0,j.cn)("flex shrink-0 items-center gap-2",(a.repositoryPath??a.onAdd)&&"ms-auto"),onClick:a=>a.stopPropagation(),children:[a.repositoryPath?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(H.TooltipProvider,{children:(0,b.jsxs)(H.Tooltip,{children:[(0,b.jsx)(H.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("span",{className:"flex items-center",children:(0,b.jsx)(D.ActionButton,{label:g("repositoryNode.openInIde"),onClick:Y.openInIde,loading:Y.ideLoading,error:!!Y.ideError,icon:p.Code2,iconOnly:!0,variant:"ghost",size:"icon-xs"})})}),(0,b.jsx)(H.TooltipContent,{children:g("repositoryNode.openInIde")})]})}),(0,b.jsx)(H.TooltipProvider,{children:(0,b.jsxs)(H.Tooltip,{children:[(0,b.jsx)(H.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("span",{className:"flex items-center",children:(0,b.jsx)(D.ActionButton,{label:g("repositoryNode.openInShell"),onClick:Y.openInShell,loading:Y.shellLoading,error:!!Y.shellError,icon:q.Terminal,iconOnly:!0,variant:"ghost",size:"icon-xs"})})}),(0,b.jsx)(H.TooltipContent,{children:g("repositoryNode.openInShell")})]})}),(0,b.jsx)(H.TooltipProvider,{children:(0,b.jsxs)(H.Tooltip,{children:[(0,b.jsx)(H.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("span",{className:"flex items-center",children:(0,b.jsx)(D.ActionButton,{label:g("repositoryNode.openFolder"),onClick:Y.openFolder,loading:Y.folderLoading,error:!!Y.folderError,icon:r.FolderOpen,iconOnly:!0,variant:"ghost",size:"icon-xs"})})}),(0,b.jsx)(H.TooltipContent,{children:g("repositoryNode.openFolder")})]})}),(0,b.jsx)(H.TooltipProvider,{children:(0,b.jsxs)(H.Tooltip,{children:[(0,b.jsx)(H.TooltipTrigger,{asChild:!0,children:(0,b.jsxs)(k.Button,{variant:"ghost",size:"icon-xs","aria-label":g("repositoryNode.chatWithAgent"),onClick:b=>{b.stopPropagation(),a.id&&m.push(`/repository/${a.id}/chat`)},className:"nodrag relative cursor-pointer text-violet-500 hover:text-violet-600 dark:text-violet-400 dark:hover:text-violet-300",children:[(0,b.jsx)(A.MessageSquare,{className:"h-3 w-3"}),(0,b.jsx)(L.ChatDotIndicator,{status:X})]})}),(0,b.jsx)(H.TooltipContent,{children:g("repositoryNode.chatWithAgent")})]})}),(0,b.jsx)(N.FeatureSessionsDropdown,{repositoryPath:a.repositoryPath,includeWorktrees:!0,onCreateFromSession:_})]}):null,a.onAdd?(0,b.jsx)("div",{className:"ms-1.5"}):null,a.onAdd?(0,b.jsx)(H.TooltipProvider,{children:(0,b.jsxs)(H.Tooltip,{children:[(0,b.jsx)(H.TooltipTrigger,{asChild:!0,children:(0,b.jsxs)("button",{"aria-label":g("repositoryNode.newFeature"),"data-testid":"repository-node-add-button",onClick:b=>{b.stopPropagation(),a.onAdd?.()},className:(0,j.cn)("flex h-6 shrink-0 cursor-pointer items-center gap-0.5 rounded bg-blue-500 px-1.5 text-[11px] font-bold text-white transition-colors hover:bg-blue-600 dark:bg-amber-500 dark:hover:bg-amber-400",a.pulseAdd&&"animate-pulse-cta"),children:[(0,b.jsx)(h.Plus,{className:"h-3 w-3"}),(0,b.jsx)("span",{className:"translate-y-px",children:g("repositoryNode.new")})]})}),(0,b.jsx)(H.TooltipContent,{side:"top",children:g("repositoryNode.newFeature")})]})}):null]})]}),a.branch?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{"data-testid":"repository-node-git-info",className:"text-muted-foreground border-border/50 border-t px-4 py-2",children:(0,b.jsxs)("div",{className:"flex items-center gap-3 text-xs",children:[(0,b.jsxs)("span",{className:"flex items-center gap-1 truncate","data-testid":"repository-node-branch",children:[(0,b.jsx)(v.GitBranch,{className:"h-3 w-3 shrink-0"}),(0,b.jsx)("span",{className:"truncate",children:a.branch})]}),null!=a.behindCount&&a.behindCount>0?(0,b.jsxs)("span",{className:"flex shrink-0 items-center gap-1 whitespace-nowrap text-amber-500","data-testid":"repository-node-behind",children:[(0,b.jsx)(x.ArrowDown,{className:"h-3 w-3 shrink-0"}),g("repositoryNode.behind",{count:a.behindCount})]}):null]})}),a.commitMessage?(0,b.jsx)("div",{"data-testid":"repository-node-commit-info",className:"text-muted-foreground border-border/50 border-t px-4 py-2",children:(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[(0,b.jsx)(w.GitCommitHorizontal,{className:"h-3 w-3 shrink-0"}),(0,b.jsx)("span",{className:"min-w-0 truncate","data-testid":"repository-node-commit-message",children:a.commitMessage}),a.committer?(0,b.jsxs)("span",{className:"text-muted-foreground/70 ms-auto flex shrink-0 items-center gap-1","data-testid":"repository-node-committer",children:[(0,b.jsx)(y.User,{className:"h-3 w-3 shrink-0"}),(0,b.jsx)("span",{children:a.committer})]}):null]})}):null]}):"not-a-repo"===a.gitInfoStatus?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{"data-testid":"repository-node-not-repo",className:"text-muted-foreground border-border/50 border-t px-4 py-2",children:(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[(0,b.jsx)(r.FolderOpen,{className:"h-3 w-3 shrink-0"}),(0,b.jsx)("span",{className:"min-w-0 truncate opacity-60",children:a.repositoryPath??"Unknown path"})]})}),(0,b.jsx)("div",{className:"text-muted-foreground border-border/50 border-t px-4 py-2",children:(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs opacity-40",children:[(0,b.jsx)(v.GitBranch,{className:"h-3 w-3 shrink-0"}),(0,b.jsx)("span",{children:g("repositoryNode.notAGitRepository")})]})})]}):"ready"!==a.gitInfoStatus?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{"data-testid":"repository-node-git-loading",className:"border-border/50 border-t px-4 py-2",children:(0,b.jsxs)("div",{className:"flex h-4 items-center gap-2 text-xs",children:[(0,b.jsx)(v.GitBranch,{className:"text-muted-foreground h-3 w-3 shrink-0"}),(0,b.jsx)("span",{className:"bg-muted h-3 w-20 animate-pulse rounded"})]})}),(0,b.jsx)("div",{className:"border-border/50 border-t px-4 py-2",children:(0,b.jsxs)("div",{className:"flex h-4 items-center gap-2 text-xs",children:[(0,b.jsx)(w.GitCommitHorizontal,{className:"text-muted-foreground h-3 w-3 shrink-0"}),(0,b.jsx)("span",{className:"bg-muted h-3 w-36 animate-pulse rounded"})]})})]}):null,R.envDeploy&&a.repositoryPath?(0,b.jsx)("div",{"data-testid":"repository-node-dev-preview",className:"border-border/50 border-t px-4 py-2",onClick:a=>a.stopPropagation(),children:(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[Z.deployError?(0,b.jsx)("span",{className:"truncate text-xs text-red-500",children:Z.deployError}):$?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"me-0.5 inline-block h-2 w-2 shrink-0 rounded-full bg-green-500"}),Z.url?(0,b.jsx)("a",{href:Z.url,target:"_blank",rel:"noopener noreferrer",className:"truncate text-green-700 hover:underline dark:text-green-400",children:Z.url}):(0,b.jsx)("span",{className:"text-muted-foreground",children:g("repositoryNode.starting")})]}):(0,b.jsxs)("span",{className:"text-muted-foreground inline-flex items-baseline gap-2",children:[(0,b.jsx)("span",{children:g("repositoryNode.run")}),(0,b.jsx)("span",{className:"text-muted-foreground/50 text-[10px]",children:g("repositoryNode.startLocalEnvironment")})]}),(0,b.jsx)(H.TooltipProvider,{children:(0,b.jsxs)(H.Tooltip,{children:[(0,b.jsx)(H.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("span",{className:(0,j.cn)("ms-auto flex items-center",!$&&!Z.deployError&&"[&_button]:text-green-600 [&_button]:hover:text-green-700 dark:[&_button]:text-green-400 dark:[&_button]:hover:text-green-300"),children:(0,b.jsx)(D.ActionButton,{label:g(Z.deployError?"repositoryNode.retry":$?"repositoryNode.stopDevServer":"repositoryNode.startDevServer"),onClick:$?Z.stop:Z.deploy,loading:Z.deployLoading||Z.stopLoading,error:!1,icon:Z.deployError?z.RotateCcw:$?u.Square:t.Play,iconOnly:!0,variant:"ghost",size:"icon-xs"})})}),(0,b.jsx)(H.TooltipContent,{children:g($?"repositoryNode.stopDevServer":"repositoryNode.startDevServer")})]})})]})}):null]}),a.onAdd||a.showHandles?(0,b.jsx)(c.Handle,{type:"source",position:Q,isConnectable:!a.showHandles,className:"opacity-0!",style:{top:70}}):null]})}a.i(478454),a.i(302824),a.i(513126);var P=a.i(771238),Q=a.i(882014),R=a.i(488064),S=a.i(746847),T=a.i(887973),U=a.i(261189);function V({data:a,selected:d}){let{i18n:f,t:g}=(0,i.useTranslation)("web"),l="rtl"===f.dir(),m=l?n.Position.Right:n.Position.Left,o=l?n.Position.Left:n.Position.Right,[p,q]=(0,e.useState)(!1),r=1+a.additionalPathCount,v=1===r?"1 repository":`${r} repositories`,w=(0,M.useTurnStatus)((0,T.featureIdForApplication)(a.id)),x=(0,I.useDeployAction)({targetId:a.id,targetType:"application",repositoryPath:a.repositoryPath}),y=x.url,A=(0,U.deriveAppLiveStatus)(a.status,w,!!y),B=(0,e.useCallback)(a=>{a.stopPropagation()},[]),C=(0,e.useCallback)(a=>{a.stopPropagation(),y&&window.open(y,"_blank","noopener,noreferrer")},[y]);return(0,b.jsxs)("div",{className:(0,j.cn)("group relative",a.onDelete&&a.id&&"ps-10"),style:{direction:l?"rtl":"ltr"},children:[(0,b.jsx)(c.Handle,{type:"target",position:m,isConnectable:!1,className:"opacity-0!",style:{top:70}}),a.onDelete&&a.id?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"absolute -start-3 top-1/2 -translate-y-1/2 opacity-0 transition-opacity group-hover:opacity-100",onPointerDown:a=>a.stopPropagation(),children:(0,b.jsx)(H.TooltipProvider,{children:(0,b.jsxs)(H.Tooltip,{children:[(0,b.jsx)(H.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{"aria-label":"Remove application","data-testid":"application-node-delete-button",onClick:a=>{a.stopPropagation(),q(!0)},className:"bg-card text-muted-foreground hover:border-destructive hover:text-destructive flex h-7 w-7 cursor-pointer items-center justify-center rounded-full border shadow-sm transition-colors",children:(0,b.jsx)(s.Trash2,{className:"h-3.5 w-3.5"})})}),(0,b.jsx)(H.TooltipContent,{children:"Remove application"})]})})}),(0,b.jsx)(E.Dialog,{open:p,onOpenChange:q,children:(0,b.jsxs)(E.DialogContent,{className:"max-w-xs",children:[(0,b.jsxs)(E.DialogHeader,{children:[(0,b.jsx)(E.DialogTitle,{children:"Remove application?"}),(0,b.jsxs)(E.DialogDescription,{children:["This will remove ",(0,b.jsx)("strong",{children:a.name})," from your workspace."]})]}),(0,b.jsxs)(E.DialogFooter,{className:"grid grid-cols-2 gap-2 sm:flex-none",children:[(0,b.jsx)(E.DialogClose,{asChild:!0,children:(0,b.jsx)(k.Button,{variant:"outline",children:"Cancel"})}),(0,b.jsx)(k.Button,{variant:"destructive",onClick:()=>{q(!1),a.onDelete?.(a.id)},children:"Remove"})]})]})})]}):null,(0,b.jsxs)("div",{role:"button",tabIndex:0,"data-testid":"application-node-card","data-app-name":a.name,onClick:b=>{b.stopPropagation(),a.onClick?.()},onKeyDown:b=>{("Enter"===b.key||" "===b.key)&&(b.preventDefault(),b.stopPropagation(),a.onClick?.())},className:(0,j.cn)("nodrag bg-card flex w-[26rem] cursor-pointer flex-col overflow-hidden rounded-xl border shadow-sm transition-[border-color,box-shadow] duration-200 dark:bg-neutral-800/80",d&&"border-blue-400 dark:border-amber-500/60",!d&&A.borderClass),children:[(0,b.jsxs)("div",{className:"flex items-center gap-3 px-4 py-3",children:[(0,b.jsx)("div",{className:"flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-indigo-500 to-violet-500",children:(0,b.jsx)(Q.LayoutGrid,{className:"h-4 w-4 text-white"})}),(0,b.jsx)("span",{"data-testid":"application-node-name",className:"min-w-0 truncate text-sm font-medium",children:a.name}),(0,b.jsxs)("span",{className:"ms-auto flex shrink-0 items-center gap-2",children:[(0,b.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,b.jsx)("span",{"data-testid":"application-node-status-dot",className:(0,j.cn)("relative flex h-2 w-2 items-center justify-center rounded-full",A.dotClass),children:A.pulse?(0,b.jsx)("span",{className:(0,j.cn)("absolute inline-flex h-full w-full animate-ping rounded-full opacity-60",A.dotClass)}):null}),(0,b.jsx)("span",{"data-testid":"application-node-status-text",className:"text-muted-foreground text-xs",children:A.label})]}),a.onCreateSddFeature&&a.id?(0,b.jsx)("span",{onClick:a=>a.stopPropagation(),children:(0,b.jsx)(H.TooltipProvider,{children:(0,b.jsxs)(H.Tooltip,{children:[(0,b.jsx)(H.TooltipTrigger,{asChild:!0,children:(0,b.jsxs)("button",{type:"button","aria-label":g("applicationNode.newFeature"),"data-testid":"application-node-new-sdd-feature-button",onClick:b=>{b.stopPropagation(),a.onCreateSddFeature?.(a.id)},onPointerDown:a=>a.stopPropagation(),className:"nodrag flex h-6 shrink-0 cursor-pointer items-center gap-0.5 rounded bg-blue-500 px-1.5 text-[11px] font-bold text-white transition-colors hover:bg-blue-600 dark:bg-amber-500 dark:hover:bg-amber-400",children:[(0,b.jsx)(h.Plus,{className:"h-3 w-3"}),(0,b.jsx)("span",{className:"translate-y-px",children:g("repositoryNode.new")})]})}),(0,b.jsx)(H.TooltipContent,{side:"top",children:g("applicationNode.newFeature")})]})})}):null]})]}),y&&x.status===S.DeploymentState.Ready?(0,b.jsx)("div",{className:"px-4 pb-2",onClick:B,children:(0,b.jsxs)("div",{className:"bg-muted group/preview relative overflow-hidden rounded-lg",style:{height:180},children:[(0,b.jsx)("iframe",{src:y,title:`${a.name} live preview`,className:"pointer-events-none absolute top-0 left-0 origin-top-left border-0 bg-white",style:{width:"250%",height:"250%",transform:"scale(0.4)"},sandbox:"allow-same-origin allow-scripts",loading:"lazy"}),(0,b.jsxs)("div",{className:"pointer-events-none absolute inset-0 flex items-center justify-center gap-2 bg-neutral-900/75 opacity-0 transition-opacity duration-150 group-hover/preview:pointer-events-auto group-hover/preview:opacity-100 dark:bg-neutral-950/80",onPointerDown:B,onClick:B,children:[(0,b.jsxs)("button",{type:"button",onClick:a=>{a.stopPropagation(),x.stop()},disabled:x.stopLoading,"aria-label":"Stop dev server",title:"Stop dev server",className:"inline-flex h-9 cursor-pointer items-center gap-1.5 rounded-md border border-neutral-300 bg-white px-3 text-xs font-semibold text-neutral-900 shadow-md transition-colors hover:border-red-500 hover:bg-red-50 hover:text-red-600 dark:border-neutral-700 dark:bg-neutral-900 dark:text-neutral-100 dark:hover:border-red-500 dark:hover:bg-red-950 dark:hover:text-red-400",children:[x.stopLoading?(0,b.jsx)(R.Loader2,{className:"h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(u.Square,{className:"h-3.5 w-3.5 fill-current"}),(0,b.jsx)("span",{children:"Stop"})]}),(0,b.jsxs)("button",{type:"button",onClick:C,"aria-label":`Open ${a.name} in a new tab`,title:y,className:"inline-flex h-9 cursor-pointer items-center gap-1.5 rounded-md border border-neutral-300 bg-white px-3 text-xs font-semibold text-neutral-900 shadow-md transition-colors hover:bg-neutral-50 dark:border-neutral-700 dark:bg-neutral-900 dark:text-neutral-100 dark:hover:bg-neutral-800",children:[(0,b.jsx)(P.ExternalLink,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{children:"Open"})]})]})]})}):null,(0,b.jsxs)("div",{"data-testid":"application-node-dev-preview",className:"border-border/50 flex items-center gap-2 border-t px-4 py-2 text-xs",onClick:B,children:[x.deployError?(0,b.jsx)("span",{className:"truncate text-xs text-red-500",children:x.deployError}):x.status===S.DeploymentState.Booting||x.deployLoading?(0,b.jsxs)("span",{className:"text-muted-foreground inline-flex items-center gap-1.5",children:[(0,b.jsx)(R.Loader2,{className:"h-3 w-3 shrink-0 animate-spin text-amber-500"}),(0,b.jsx)("span",{children:"Starting…"})]}):x.stopLoading?(0,b.jsxs)("span",{className:"text-muted-foreground inline-flex items-center gap-1.5",children:[(0,b.jsx)(R.Loader2,{className:"h-3 w-3 shrink-0 animate-spin"}),(0,b.jsx)("span",{children:"Stopping…"})]}):y?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"me-0.5 inline-block h-2 w-2 shrink-0 rounded-full bg-green-500"}),(0,b.jsx)("a",{href:y,target:"_blank",rel:"noopener noreferrer",className:"truncate text-green-700 hover:underline dark:text-green-400",onClick:C,children:y})]}):(0,b.jsxs)("span",{className:"text-muted-foreground inline-flex items-baseline gap-2",children:[(0,b.jsx)("span",{children:"Run"}),(0,b.jsx)("span",{className:"text-muted-foreground/50 text-[10px]",children:"start local environment"})]}),(0,b.jsxs)("span",{className:"ms-auto flex items-center gap-1",children:[(0,b.jsx)("span",{"data-testid":"application-node-repo-count",className:"text-muted-foreground/70",children:v}),(0,b.jsx)(H.TooltipProvider,{children:(0,b.jsxs)(H.Tooltip,{children:[(0,b.jsx)(H.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button",onClick:a=>{(a.stopPropagation(),x.deployError)?x.deploy():y?x.stop():x.deploy()},onPointerDown:B,disabled:x.deployLoading||x.stopLoading,"aria-label":x.deployError?"Retry":y?"Stop dev server":"Start dev server",className:(0,j.cn)("text-muted-foreground hover:bg-muted flex h-6 w-6 items-center justify-center rounded transition-colors disabled:cursor-not-allowed disabled:opacity-50",!y&&!x.deployError&&"text-green-600 hover:text-green-700 dark:text-green-400 dark:hover:text-green-300"),children:x.deployLoading||x.stopLoading?(0,b.jsx)(R.Loader2,{className:"h-3 w-3 animate-spin"}):x.deployError?(0,b.jsx)(z.RotateCcw,{className:"h-3 w-3"}):y?(0,b.jsx)(u.Square,{className:"h-3 w-3 fill-current"}):(0,b.jsx)(t.Play,{className:"h-3 w-3 fill-current"})})}),(0,b.jsx)(H.TooltipContent,{children:x.deployError?"Failed — click to retry":y?"Stop dev server":"Start dev server"})]})})]})]})]}),(0,b.jsx)(c.Handle,{type:"source",position:o,isConnectable:!1,className:"opacity-0!",style:{top:70}})]})}function W(a){let[d]=(0,n.getBezierPath)({sourceX:a.sourceX,sourceY:a.sourceY,targetX:a.targetX,targetY:a.targetY,sourcePosition:a.sourcePosition,targetPosition:a.targetPosition});return(0,b.jsx)(c.BaseEdge,{id:a.id,path:d,style:{strokeDasharray:"5 5"}})}let X={x:30,y:30,zoom:.85};function Y({nodes:a,edges:d,selectedFeatureId:f,selectedRepository:g,defaultViewport:n,onNodesChange:o,onAddFeature:p,onConnect:q,onNodeClick:r,onPaneClick:s,onCanvasDrag:t,onMoveEnd:u,toolbar:v,showToolbarOnEmpty:w=!0,emptyState:x}){let{t:y}=(0,i.useTranslation)("web"),z=(0,e.useMemo)(()=>({featureNode:m.FeatureNode,repositoryNode:O,applicationNode:V}),[]),A=(0,e.useMemo)(()=>({dependencyEdge:W}),[]),B=(0,e.useMemo)(()=>{let b=null!=f,c=null!=g&&(null!=g.id||null!=g.path);return b||c?a.map(a=>{if(b&&"featureNode"===a.type&&a.data.featureId===f)return{...a,selected:!0};if(c&&"repositoryNode"===a.type){let b=a.data,c=null!=g.id&&(a.id===g.id||b.id===g.id),d=null!=g.path&&b.repositoryPath===g.path;if(c||d)return{...a,selected:!0}}return a}):a},[a,f,g]),C=0===a.length,[D,E]=(0,e.useState)(C),[F,G]=(0,e.useState)(!1),H=(0,e.useRef)(C);(0,e.useEffect)(()=>{if(H.current&&!C){G(!0);let a=setTimeout(()=>{E(!1),G(!1)},300);return H.current=C,()=>clearTimeout(a)}!H.current&&C&&E(!0),H.current=C},[C]);let I=C&&!x?(0,b.jsx)(l.EmptyState,{title:y("canvas.noFeatures"),description:y("canvas.noFeaturesDescription"),action:(0,b.jsxs)(k.Button,{onClick:p,children:[(0,b.jsx)(h.Plus,{className:"me-2 h-4 w-4"}),y("canvas.newFeature")]})}):null,J=x??I;return(0,b.jsxs)("div",{"data-testid":C?"features-canvas-empty":"features-canvas","data-no-drawer-close":!0,className:"dark:bg-background pointer-events-auto relative h-full w-full bg-[#f6f7f8]",children:[(0,b.jsxs)(c.ReactFlow,{nodes:B,edges:d,nodeTypes:z,edgeTypes:A,onConnect:q,onNodesChange:o,onNodeClick:r,onPaneClick:s,onMoveStart:t,onMoveEnd:u,defaultViewport:n??X,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1,proOptions:{hideAttribution:!0},className:"[&_.react-flow__pane]:!cursor-default",children:[(0,b.jsx)(c.Background,{variant:c.BackgroundVariant.Dots,gap:24,size:1,color:"#b8bcc4",className:"dark:[&_circle]:!fill-white/[0.1]"}),v&&!C?(0,b.jsx)(c.Panel,{position:"top-right",className:"!me-3 !mt-3",children:v}):null]}),D&&J?(0,b.jsx)("div",{className:(0,j.cn)("pointer-events-none absolute inset-0 z-10 flex items-center justify-center transition-opacity duration-300",F?"opacity-0":"animate-in fade-in opacity-100 duration-200"),children:(0,b.jsx)("div",{className:"pointer-events-auto h-full w-full",children:J})}):null,v&&C&&w?(0,b.jsx)("div",{className:"pointer-events-auto absolute end-3 top-3 z-20",children:v}):null]})}var Z=a.i(483886),$=a.i(341274),_=a.i(225700);let aa=(0,_.default)("zoom-in",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"11",x2:"11",y1:"8",y2:"14",key:"1vmskp"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]]),ab=(0,_.default)("zoom-out",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]]),ac=(0,_.default)("maximize",[["path",{d:"M8 3H5a2 2 0 0 0-2 2v3",key:"1dcmit"}],["path",{d:"M21 8V5a2 2 0 0 0-2-2h-3",key:"1e4gt3"}],["path",{d:"M3 16v3a2 2 0 0 0 2 2h3",key:"wsl5sc"}],["path",{d:"M16 21h3a2 2 0 0 0 2-2v-3",key:"18trek"}]]);function ad({showArchived:a,onToggleArchived:d,onResetViewport:f,startSlot:g}){let{t:h}=(0,i.useTranslation)("web"),{zoomIn:j,zoomOut:k,fitView:l,setViewport:m}=(0,c.useReactFlow)(),n=(0,e.useCallback)(()=>{j({duration:200})},[j]),o=(0,e.useCallback)(()=>{k({duration:200})},[k]),p=(0,e.useCallback)(()=>{l({duration:400,padding:.3})},[l]),q=(0,e.useCallback)(()=>{f&&m(f(),{duration:400})},[f,m]);return(0,b.jsxs)("div",{className:"bg-background flex items-center gap-1 rounded-xl border px-2 py-1.5 shadow-md dark:bg-neutral-900",children:[g?(0,b.jsxs)(b.Fragment,{children:[g,(0,b.jsx)("div",{className:"bg-border mx-1 h-5 w-px"})]}):null,(0,b.jsx)(ae,{onClick:d,title:h(a?"canvas.hideArchived":"canvas.showArchived"),active:a,label:h(a?"canvas.hideArchivedLabel":"canvas.showArchivedLabel"),children:a?(0,b.jsx)(Z.Eye,{className:"h-4 w-4"}):(0,b.jsx)($.EyeOff,{className:"h-4 w-4"})}),(0,b.jsx)("div",{className:"bg-border mx-1 h-5 w-px"}),(0,b.jsx)(ae,{onClick:o,title:h("canvas.zoomOut"),children:(0,b.jsx)(ab,{className:"h-4 w-4"})}),(0,b.jsx)(ae,{onClick:n,title:h("canvas.zoomIn"),children:(0,b.jsx)(aa,{className:"h-4 w-4"})}),(0,b.jsx)(ae,{onClick:p,title:h("canvas.fitView"),children:(0,b.jsx)(ac,{className:"h-4 w-4"})}),f?(0,b.jsx)(ae,{onClick:q,title:h("canvas.resetView"),children:(0,b.jsx)(z.RotateCcw,{className:"h-4 w-4"})}):null]})}function ae({children:a,onClick:c,title:d,label:e,active:f}){return(0,b.jsxs)("button",{type:"button",onClick:c,title:d,className:(0,j.cn)("inline-flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-xs font-medium transition-colors","hover:bg-accent hover:text-accent-foreground",f?"text-primary bg-primary/10":"text-muted-foreground"),children:[a,e?(0,b.jsx)("span",{children:e}):null]})}var af=a.i(865758),ag=a.i(872016),ah=a.i(893741),ai=a.i(479794),aj=a.i(675192);let ak="default",al={workspaces:[{id:ak,name:"Default",repoIds:[],featureIds:[]}],activeWorkspaceId:ak};function am({workspaces:a,activeWorkspace:c,onSelect:d,onRequestCreate:f,onRequestRename:g,onRequestDelete:i,onManage:k}){let[l,m]=(0,e.useState)(!1),n=c.id===ak;return(0,b.jsxs)(aj.DropdownMenu,{open:l,onOpenChange:m,children:[(0,b.jsx)(aj.DropdownMenuTrigger,{asChild:!0,children:(0,b.jsxs)("button",{type:"button","data-testid":"workspace-selector-trigger",className:(0,j.cn)("inline-flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-xs font-medium transition-colors","hover:bg-accent hover:text-accent-foreground",n?"text-muted-foreground":"text-primary bg-primary/10"),title:"Workspace",children:[(0,b.jsx)(af.Layers,{className:"h-4 w-4"}),(0,b.jsx)("span",{className:"max-w-[120px] truncate",children:c.name})]})}),(0,b.jsxs)(aj.DropdownMenuContent,{align:"start",className:"min-w-[220px]",children:[(0,b.jsx)(aj.DropdownMenuLabel,{children:"Workspaces"}),(0,b.jsx)(aj.DropdownMenuSeparator,{}),a.map(a=>{let e=a.id===c.id,f=a.id!==ak;return(0,b.jsxs)(aj.DropdownMenuItem,{onSelect:()=>d(a.id),className:"group/ws-row flex items-center justify-between gap-2",children:[(0,b.jsx)("span",{className:"truncate",children:a.name}),(0,b.jsxs)("span",{className:"flex shrink-0 items-center gap-1",children:[e?(0,b.jsx)(ag.Check,{className:"h-3.5 w-3.5"}):null,f?(0,b.jsx)("button",{type:"button","aria-label":`Delete workspace ${a.name}`,title:`Delete workspace ${a.name}`,onClick:b=>{b.preventDefault(),b.stopPropagation(),m(!1),i(a.id)},className:"text-muted-foreground hover:bg-destructive/10 hover:text-destructive rounded p-0.5 opacity-0 transition-opacity group-hover/ws-row:opacity-100 focus-visible:opacity-100",children:(0,b.jsx)(s.Trash2,{className:"h-3.5 w-3.5"})}):null]})]},a.id)}),(0,b.jsx)(aj.DropdownMenuSeparator,{}),(0,b.jsxs)(aj.DropdownMenuItem,{onSelect:f,children:[(0,b.jsx)(h.Plus,{className:"mr-2 h-3.5 w-3.5"}),"New workspace…"]}),(0,b.jsxs)(aj.DropdownMenuItem,{onSelect:k,disabled:n,children:[(0,b.jsx)(ai.SlidersHorizontal,{className:"mr-2 h-3.5 w-3.5"}),"Manage items…"]}),(0,b.jsxs)(aj.DropdownMenuItem,{onSelect:g,disabled:n,children:[(0,b.jsx)(ah.Pencil,{className:"mr-2 h-3.5 w-3.5"}),"Rename"]})]})]})}var an=a.i(925603);function ao({open:a,onOpenChange:c,workspace:d,allNodes:f,onSave:g}){let[h,i]=(0,e.useState)(new Set),[j,l]=(0,e.useState)(new Set);(0,e.useEffect)(()=>{a&&(i(new Set(d.repoIds)),l(new Set(d.featureIds)))},[a,d]);let m=(0,e.useMemo)(()=>{let a=[],b=new Map;for(let c of f){if("repositoryNode"!==c.type)continue;let d=c.data,e=d.repositoryPath??"",f={nodeId:c.id,name:d.name??e.split("/").filter(Boolean).pop()??e,features:[]};a.push(f),b.set(e,f)}for(let a of f){if("featureNode"!==a.type)continue;let c=a.data,d=b.get(c.repositoryPath??"");d&&d.features.push({nodeId:a.id,name:c.name})}return a},[f]);return(0,b.jsx)(E.Dialog,{open:a,onOpenChange:c,children:(0,b.jsxs)(E.DialogContent,{className:"max-h-[80vh] max-w-lg overflow-hidden",children:[(0,b.jsxs)(E.DialogHeader,{children:[(0,b.jsxs)(E.DialogTitle,{children:["Manage workspace: ",d.name]}),(0,b.jsx)(E.DialogDescription,{children:"Select the repositories and features that should appear on this workspace's canvas."})]}),(0,b.jsx)("div",{className:"-mx-6 max-h-[50vh] overflow-y-auto px-6",children:0===m.length?(0,b.jsx)("p",{className:"text-muted-foreground py-8 text-center text-sm",children:"No repositories on the canvas yet."}):(0,b.jsx)("ul",{className:"space-y-3 py-2",children:m.map(a=>(0,b.jsxs)("li",{children:[(0,b.jsxs)("label",{className:"hover:bg-accent/30 flex cursor-pointer items-center gap-2 rounded-md px-2 py-1.5",children:[(0,b.jsx)(F.Checkbox,{checked:h.has(a.nodeId),onCheckedChange:()=>{var b;return b=a.nodeId,void i(a=>{let c=new Set(a);return c.has(b)?c.delete(b):c.add(b),c})}}),(0,b.jsx)(v.GitBranch,{className:"text-muted-foreground h-4 w-4"}),(0,b.jsx)("span",{className:"text-sm font-medium",children:a.name})]}),a.features.length>0?(0,b.jsx)("ul",{className:"mt-1 ml-7 space-y-0.5",children:a.features.map(a=>(0,b.jsx)("li",{children:(0,b.jsxs)("label",{className:"hover:bg-accent/30 flex cursor-pointer items-center gap-2 rounded-md px-2 py-1",children:[(0,b.jsx)(F.Checkbox,{checked:j.has(a.nodeId),onCheckedChange:()=>{var b;return b=a.nodeId,void l(a=>{let c=new Set(a);return c.has(b)?c.delete(b):c.add(b),c})}}),(0,b.jsx)(an.Sparkles,{className:"text-muted-foreground h-3.5 w-3.5"}),(0,b.jsx)("span",{className:"text-muted-foreground text-xs",children:a.name})]})},a.nodeId))}):null]},a.nodeId))})}),(0,b.jsxs)(E.DialogFooter,{children:[(0,b.jsx)(k.Button,{variant:"ghost",onClick:()=>c(!1),children:"Cancel"}),(0,b.jsx)(k.Button,{onClick:()=>{g({repoIds:Array.from(h),featureIds:Array.from(j)}),c(!1)},children:"Save"})]})]})})}var ap=a.i(390920);function aq({open:a,onOpenChange:c,title:d,description:f,initialValue:g="",confirmLabel:h,onConfirm:i}){let[j,l]=(0,e.useState)(g);return(0,e.useEffect)(()=>{a&&l(g)},[a,g]),(0,b.jsx)(E.Dialog,{open:a,onOpenChange:c,children:(0,b.jsx)(E.DialogContent,{className:"max-w-sm",children:(0,b.jsxs)("form",{onSubmit:a=>{a.preventDefault();let b=j.trim();b&&(i(b),c(!1))},children:[(0,b.jsxs)(E.DialogHeader,{children:[(0,b.jsx)(E.DialogTitle,{children:d}),f?(0,b.jsx)(E.DialogDescription,{children:f}):null]}),(0,b.jsx)("div",{className:"py-4",children:(0,b.jsx)(ap.Input,{autoFocus:!0,value:j,onChange:a=>l(a.target.value),placeholder:"Workspace name","data-testid":"workspace-name-input"})}),(0,b.jsxs)(E.DialogFooter,{children:[(0,b.jsx)(k.Button,{type:"button",variant:"ghost",onClick:()=>c(!1),children:"Cancel"}),(0,b.jsx)(k.Button,{type:"submit",disabled:!j.trim(),children:h})]})]})})})}var ar=a.i(603703);a.i(281834);var as=a.i(233981),at=a.i(101356),au=a.i(219884),av=a.i(196213);let aw="shep-canvas-viewport",ax={x:30,y:30,zoom:.85};var ay=a.i(555003),az=a.i(648265),aA=a.i(857411),aB=a.i(598410),aC=a.i(867075),aD=a.i(272980),aE=a.i(771716),aF=a.i(701377);a.i(421434);var aG=a.i(234379),aH=a.i(289111);let aI=(0,aH.createServerReference)("000dc696afafd019691d30ebc74c3bb2bf6be80fc9",aH.callServer,void 0,aH.findSourceMapURL,"isAgentSetupComplete"),aJ=(0,aH.createServerReference)("00043b20dfa79e7ce6d504a372669a2b7396e4f421",aH.callServer,void 0,aH.findSourceMapURL,"checkAgentAuth"),aK=(0,aH.createServerReference)("00fd3bb249b5c2f4771f7eac594bf5656eaf959cdb",aH.callServer,void 0,aH.findSourceMapURL,"checkToolStatus");var aL=a.i(394132),aM=a.i(366517),aN=a.i(998386),aO=a.i(817606),aP=a.i(783852);let aQ=["select-agent","select-model"];function aR({onComplete:a,className:c}){let{t:d}=(0,i.useTranslation)("web"),[f,g]=(0,e.useState)([]),[h,k]=(0,e.useState)(!0),[l,m]=(0,e.useState)("select-agent"),[n,o]=(0,e.useState)(null),[p,q]=(0,e.useState)(!1),[r,s]=(0,e.useState)(!1),[t,u]=(0,e.useState)(!0),v=(0,e.useRef)(void 0);(0,e.useEffect)(()=>{(0,aM.getAllAgentModels)().then(g).finally(()=>k(!1))},[]);let w=n?f.find(a=>a.agentType===n):null,x=(0,e.useCallback)((a,b)=>{s(!0),u(!1),v.current&&clearTimeout(v.current),v.current=setTimeout(()=>{b?.(),m(a),requestAnimationFrame(()=>{u(!0),s(!1)})},150)},[]);(0,e.useEffect)(()=>()=>{v.current&&clearTimeout(v.current)},[]);let y=(0,e.useCallback)(async(b,c)=>{q(!0);try{await (0,aN.updateAgentAndModel)(b,c),u(!1),v.current&&clearTimeout(v.current),v.current=setTimeout(()=>{a()},200)}catch{q(!1)}},[a]),z=(0,e.useCallback)(a=>{let b=f.find(b=>b.agentType===a);b&&b.models.length>0?x("select-model",()=>{o(a)}):y(a,null)},[f,x,y]),A=(0,e.useCallback)(a=>{n&&y(n,a)},[n,y]),B=(0,e.useCallback)(()=>{"select-model"===l&&x("select-agent",()=>{o(null)})},[l,x]);if(h)return(0,b.jsxs)("div",{"data-testid":"welcome-agent-setup",className:(0,j.cn)("flex flex-col items-center justify-center gap-4",c),children:[(0,b.jsx)(R.Loader2,{className:"text-muted-foreground h-5 w-5 animate-spin"}),(0,b.jsx)("p",{className:"text-muted-foreground text-sm",children:d("welcome.loadingAgents")})]});let C=aQ.indexOf(l),D=d("select-agent"===l?"welcome.chooseAgent":"welcome.pickModel"),E="select-agent"===l?d("welcome.selectAgentSubtitle"):w?d("welcome.chooseModelSubtitle",{label:w.label}):"";return(0,b.jsxs)("div",{"data-testid":"welcome-agent-setup",className:(0,j.cn)("flex w-full flex-col items-center",c),children:[(0,b.jsx)("div",{className:"mb-8 flex w-full max-w-xs items-center gap-1.5",children:aQ.map((a,c)=>(0,b.jsx)("div",{className:(0,j.cn)("h-[3px] flex-1 rounded-full transition-colors duration-300",c<=C?"bg-foreground/60":"bg-muted")},a))}),(0,b.jsxs)("div",{className:(0,j.cn)("flex w-full flex-col items-center transition-opacity duration-200",t&&!r?"opacity-100":"opacity-0"),children:[(0,b.jsx)("h1",{className:"text-foreground/90 text-center text-5xl font-extralight tracking-tight",children:D}),(0,b.jsx)("p",{className:"text-muted-foreground mt-3 text-center text-lg leading-relaxed font-light",children:E}),(0,b.jsxs)("div",{className:"mt-8 flex w-full flex-col items-center",children:["select-agent"===l&&(0,b.jsx)("div",{"data-testid":"agent-list",className:"grid w-full max-w-lg gap-3",style:{gridTemplateColumns:`repeat(${Math.min(f.length,4)}, minmax(0, 1fr))`},children:f.map(a=>{let c=(0,aO.getAgentTypeIcon)(a.agentType);return(0,b.jsxs)("button",{type:"button",disabled:p,"data-testid":`agent-option-${a.agentType}`,className:"border-border hover:bg-accent hover:border-foreground/20 flex cursor-pointer flex-col items-center gap-3 rounded-2xl border px-4 py-5 transition-all duration-150 active:scale-[0.97] disabled:opacity-50",onClick:()=>z(a.agentType),children:[(0,b.jsx)(c,{className:"text-foreground/70 h-7 w-7"}),(0,b.jsx)("span",{className:"text-sm font-medium",children:a.label})]},a.agentType)})}),"select-model"===l&&w?(0,b.jsxs)("div",{"data-testid":"model-list",className:"flex w-full max-w-lg flex-col items-center gap-4",children:[(0,b.jsxs)("button",{type:"button",disabled:p,className:"text-muted-foreground hover:text-foreground flex cursor-pointer items-center gap-1.5 self-start text-sm transition-colors",onClick:B,children:[(0,b.jsx)(aL.ChevronLeft,{className:"h-4 w-4"}),d("welcome.back")]}),(0,b.jsx)("div",{className:"grid w-full gap-3",style:{gridTemplateColumns:`repeat(${Math.min(w.models.length,3)}, minmax(0, 1fr))`},children:w.models.map(a=>{let c=(0,aP.getModelMeta)(a.id);return(0,b.jsxs)("button",{type:"button",disabled:p,"data-testid":`model-option-${a.id}`,className:"border-border hover:bg-accent hover:border-foreground/20 flex cursor-pointer flex-col items-center gap-2 rounded-2xl border px-4 py-5 text-center transition-all duration-150 active:scale-[0.97] disabled:opacity-50",onClick:()=>A(a.id),children:[(0,b.jsx)("span",{className:"text-sm font-medium",children:c.displayName||a.displayName}),(0,b.jsx)("span",{className:"text-muted-foreground text-xs leading-tight",children:c.description||a.description})]},a.id)})})]}):null]})]})]})}var aS=a.i(316676);let aT=["cd ~/my-repo",'shep feat new "sleek dashboard"'];function aU({onRepositorySelect:a,className:c}){let{t:d}=(0,i.useTranslation)("web"),[f,h]=(0,e.useState)(!1),[k,l]=(0,e.useState)(!1),[m,n]=(0,e.useState)(!1),[p,s]=(0,e.useState)(null),[t,u]=(0,e.useState)(null),[v,w]=(0,e.useState)(!1),[x,y]=(0,e.useState)(null),[z,A]=(0,e.useState)(!1),{reactFileManager:B}=(0,J.useFeatureFlags)();async function C(){if(!k){if(B)return void n(!0);l(!0);try{let b=await (0,aF.pickFolder)();b&&a?.(b)}catch{n(!0)}finally{l(!1)}}}(0,e.useEffect)(()=>{aI().then(a=>s(a)).catch(()=>s(!1))},[]),(0,e.useEffect)(()=>{p&&(aJ().then(u).catch(()=>u({agentType:"unknown",installed:!1,authenticated:!1,label:"Agent",binaryName:null,installCommand:null,authCommand:null})),aK().then(y).catch(()=>y({git:{installed:!1,version:null,installCommand:null,installUrl:null},gh:{installed:!1,version:null,installCommand:null,installUrl:null}})))},[p]);let D=(0,e.useCallback)(async()=>{await navigator.clipboard.writeText(aT.join("\n")),h(!0),setTimeout(()=>h(!1),2e3)},[]),E=(0,e.useCallback)(()=>{s(!0)},[]),F=(0,e.useCallback)(()=>{u(null),aJ().then(u)},[]);return null===p?null:(0,b.jsxs)("div",{"data-testid":"control-center-onboarding",className:(0,j.cn)("relative flex h-full w-full flex-col items-center justify-center px-8",c),children:[p?(0,b.jsxs)("div",{className:"animate-in fade-in flex w-full max-w-md flex-col items-center duration-300",children:[(0,b.jsx)("h1",{className:"text-foreground/90 text-center text-5xl font-extralight tracking-tight",children:d("emptyState.addProject")}),(0,b.jsxs)("p",{className:"text-muted-foreground mt-3 text-center text-lg leading-relaxed font-light",children:[d("emptyState.addProjectDescription"),(0,b.jsx)("br",{}),d("emptyState.addProjectDescriptionLine2")]}),(0,b.jsxs)("div",{className:"mt-8 flex w-full flex-col gap-3",children:[(0,b.jsx)(aV,{status:t,onRetry:F}),(0,b.jsx)(aW,{label:d("emptyState.git"),status:x?.git??null,missingHint:d("emptyState.gitRequired")}),(0,b.jsx)(aW,{label:d("emptyState.githubCli"),status:x?.gh??null,missingHint:d("emptyState.githubCliRequired")})]}),(0,b.jsxs)("button",{type:"button","data-testid":"empty-state-add-repository",onClick:C,disabled:k,className:"bg-foreground text-background hover:bg-foreground/90 mt-10 flex w-full cursor-pointer items-center justify-center gap-2.5 rounded-xl px-6 py-4 text-base font-medium shadow-lg transition-all duration-200 hover:shadow-xl active:scale-[0.98] disabled:cursor-wait disabled:opacity-50",children:[k?(0,b.jsx)(R.Loader2,{className:"h-5 w-5 animate-spin"}):(0,b.jsx)(r.FolderOpen,{className:"h-5 w-5"}),d(k?"emptyState.opening":"emptyState.chooseFolder")]}),(0,b.jsxs)("button",{type:"button","data-testid":"empty-state-new-project",onClick:()=>A(!0),disabled:k,className:"border-foreground/15 text-foreground/80 hover:bg-foreground/5 hover:border-foreground/25 mt-3 flex w-full cursor-pointer items-center justify-center gap-2.5 rounded-xl border px-6 py-3.5 text-sm font-medium transition-all duration-200 active:scale-[0.98] disabled:cursor-not-allowed disabled:opacity-50",children:[(0,b.jsx)(g.FolderPlus,{className:"h-4 w-4"}),"New Project"]}),(0,b.jsxs)("button",{type:"button","data-testid":"empty-state-import-github",onClick:()=>window.dispatchEvent(new CustomEvent("shep:open-github-import")),disabled:k,className:"border-foreground/15 text-foreground/80 hover:bg-foreground/5 hover:border-foreground/25 mt-3 flex w-full cursor-pointer items-center justify-center gap-2.5 rounded-xl border px-6 py-3.5 text-sm font-medium transition-all duration-200 active:scale-[0.98] disabled:cursor-not-allowed disabled:opacity-50",children:[(0,b.jsx)(o.Github,{className:"h-4 w-4"}),"Import from GitHub"]}),(0,b.jsx)("p",{className:"text-muted-foreground/60 mt-3 text-center text-sm",children:d("emptyState.folderHint")})]}):(0,b.jsx)(aR,{onComplete:E}),p?(0,b.jsxs)("div",{className:"absolute bottom-8 flex flex-col items-center",style:{animationDelay:"400ms",animationDuration:"600ms",animationFillMode:"both"},children:[(0,b.jsxs)("button",{type:"button",onClick:()=>w(!v),className:"text-muted-foreground hover:text-foreground flex cursor-pointer items-center gap-1.5 transition-colors duration-200",children:[(0,b.jsx)(q.Terminal,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{className:"text-sm",children:d("emptyState.orUseCli")}),(0,b.jsx)(aE.ChevronDown,{className:(0,j.cn)("h-3.5 w-3.5 transition-transform duration-200",v?"":"rotate-180")})]}),v?(0,b.jsx)("div",{className:"animate-in fade-in slide-in-from-top-1 mt-3 w-80 duration-200",children:(0,b.jsxs)("div",{"data-testid":"cli-code-block",className:"relative rounded-xl bg-zinc-900 px-5 py-4 font-mono text-[13px] leading-relaxed text-zinc-400",children:[(0,b.jsx)("button",{type:"button","data-testid":"cli-code-block-copy",onClick:D,className:"absolute top-3 right-3 cursor-pointer rounded-md p-1.5 text-zinc-600 transition-colors hover:bg-zinc-800 hover:text-zinc-300","aria-label":d("emptyState.copyCommands"),children:f?(0,b.jsx)(ag.Check,{className:"h-3.5 w-3.5 text-emerald-400"}):(0,b.jsx)(aB.Copy,{className:"h-3.5 w-3.5"})}),(0,b.jsx)("div",{className:"space-y-1",children:aT.map(a=>(0,b.jsxs)("div",{className:"whitespace-nowrap",children:[(0,b.jsx)("span",{className:"text-zinc-600 select-none",children:"$ "}),(0,b.jsx)("span",{className:"text-zinc-300",children:a})]},a))})]})}):null]}):null,(0,b.jsx)(aG.ReactFileManagerDialog,{open:m,onOpenChange:a=>{a||n(!1)},onSelect:function(b){b&&a?.(b),n(!1)}}),(0,b.jsx)(aS.NewProjectDialog,{open:z,onOpenChange:A,onCreated:b=>a?.(b)})]})}function aV({status:a,onRetry:c}){let{t:d}=(0,i.useTranslation)("web");return a?a.installed&&a.authenticated?(0,b.jsx)(aX,{icon:(0,b.jsx)(aC.CheckCircle2,{className:"h-4 w-4 text-emerald-500"}),children:(0,b.jsx)("span",{className:"text-sm text-emerald-600 dark:text-emerald-400",children:d("emptyState.ready",{label:a.label})})}):a.installed?(0,b.jsxs)(aX,{icon:(0,b.jsx)(aD.AlertCircle,{className:"h-4 w-4 text-amber-500"}),children:[(0,b.jsx)("span",{className:"text-sm font-medium text-amber-600 dark:text-amber-400",children:d("emptyState.needsAuth",{label:a.label})}),a.authCommand?(0,b.jsx)(aY,{command:a.authCommand}):null,(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[a.binaryName?(0,b.jsxs)("button",{type:"button","data-testid":"auth-banner-open-terminal",onClick:async()=>{try{let b="claude-code"===a.agentType?"claude-code":a.agentType;await fetch(`/api/tools/${b}/launch`,{method:"POST"})}catch{}},className:"flex items-center gap-1 text-xs font-medium text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400",children:[(0,b.jsx)(q.Terminal,{className:"h-3 w-3"}),d("emptyState.open",{label:a.label})]}):null,(0,b.jsx)("button",{type:"button",onClick:c,className:"text-xs text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400",children:d("emptyState.reCheck")})]})]}):(0,b.jsxs)(aX,{icon:(0,b.jsx)(aD.AlertCircle,{className:"h-4 w-4 text-amber-500"}),children:[(0,b.jsx)("span",{className:"text-sm font-medium text-amber-600 dark:text-amber-400",children:d("emptyState.notInstalled",{label:a.label})}),a.installCommand?(0,b.jsx)(aY,{command:a.installCommand}):null,(0,b.jsx)("button",{type:"button",onClick:c,className:"text-xs text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400",children:d("emptyState.reCheck")})]}):(0,b.jsx)(aX,{icon:(0,b.jsx)(R.Loader2,{className:"text-muted-foreground/50 h-4 w-4 animate-spin"}),children:(0,b.jsx)("span",{className:"text-muted-foreground/50 text-sm",children:d("emptyState.checkingSetup")})})}function aW({label:a,status:c,missingHint:d}){let{t:e}=(0,i.useTranslation)("web");return c?c.installed?(0,b.jsx)(aX,{icon:(0,b.jsx)(aC.CheckCircle2,{className:"h-4 w-4 text-emerald-500"}),children:(0,b.jsxs)("span",{className:"flex items-baseline gap-2",children:[(0,b.jsx)("span",{className:"text-sm text-emerald-600 dark:text-emerald-400",children:e("emptyState.ready",{label:a})}),c.version?(0,b.jsxs)("span",{className:"text-muted-foreground/40 text-xs",children:["v",c.version]}):null]})}):(0,b.jsxs)(aX,{icon:(0,b.jsx)(aD.AlertCircle,{className:"h-4 w-4 text-amber-500"}),children:[(0,b.jsx)("span",{className:"text-sm font-medium text-amber-600 dark:text-amber-400",children:e("emptyState.notFound",{label:a})}),(0,b.jsx)("span",{className:"text-muted-foreground/50 text-xs",children:d}),c.installCommand?(0,b.jsx)(aY,{command:c.installCommand}):null,c.installUrl?(0,b.jsxs)("a",{href:c.installUrl,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-xs text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400",children:[e("emptyState.docs")," ",(0,b.jsx)(P.ExternalLink,{className:"h-3 w-3"})]}):null]}):(0,b.jsx)(aX,{icon:(0,b.jsx)(R.Loader2,{className:"text-muted-foreground/50 h-4 w-4 animate-spin"}),children:(0,b.jsx)("span",{className:"text-muted-foreground/50 text-sm",children:e("emptyState.checking",{label:a})})})}function aX({icon:a,children:c}){return(0,b.jsxs)("div",{className:"animate-in fade-in flex items-start gap-2.5",children:[(0,b.jsx)("div",{className:"mt-0.5 shrink-0",children:a}),(0,b.jsx)("div",{className:"flex min-w-0 flex-1 flex-col gap-1",children:c})]})}function aY({command:a}){let[c,d]=(0,e.useState)(!1);return(0,b.jsxs)("button",{type:"button",onClick:async()=>{await navigator.clipboard.writeText(a),d(!0),setTimeout(()=>d(!1),2e3)},className:"group/cmd flex cursor-pointer items-center justify-between gap-2 rounded-md bg-zinc-100 py-1 ps-2.5 pe-2 text-start transition-colors hover:bg-zinc-200 dark:bg-zinc-800 dark:hover:bg-zinc-700",children:[(0,b.jsx)("code",{className:"min-w-0 truncate text-[11px] leading-relaxed text-zinc-600 dark:text-zinc-300",children:a}),c?(0,b.jsx)(ag.Check,{className:"h-3 w-3 shrink-0 text-emerald-500"}):(0,b.jsx)(aB.Copy,{className:"h-3 w-3 shrink-0 text-zinc-400 opacity-0 transition-opacity group-hover/cmd:opacity-100"})]})}var aZ=a.i(302807),a$=a.i(587055),a_=a.i(575635),a0=a.i(241994),a1=a.i(645348);let a2="shep:collaboration-onboarding-dismissed";function a3({apps:a=[],repos:c=[],features:d=[],className:f}){let[g,h]=(0,e.useState)(!1);return((0,e.useEffect)(()=>{try{localStorage.getItem(a2)||h(!0)}catch{}},[]),g)?(0,b.jsxs)("div",{className:(0,j.cn)("border-border/60 bg-card relative flex flex-col gap-4 rounded-xl border p-5 shadow-sm",f),role:"region","aria-label":"Agent collaboration onboarding","data-testid":"collaboration-onboarding",children:[(0,b.jsx)("button",{type:"button","aria-label":"Dismiss",onClick:function(){try{localStorage.setItem(a2,"1")}catch{}h(!1)},className:"text-muted-foreground hover:text-foreground absolute top-3 right-3 rounded-md p-1 transition-colors",children:(0,b.jsx)(aZ.X,{className:"size-4"})}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"text-[10px] font-semibold tracking-widest text-indigo-500 uppercase",children:"New"}),(0,b.jsx)("h2",{className:"mt-0.5 text-base font-semibold",children:"Agent Collaboration & Supervision"}),(0,b.jsx)("p",{className:"text-muted-foreground mt-1 text-sm",children:"Your agents can now ask questions, talk to each other, and be guided by a supervisor you configure."})]}),(0,b.jsxs)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",children:[(0,b.jsx)(a4,{apps:a,repos:c,features:d}),(0,b.jsx)(a8,{icon:a$.MessageCircleQuestion,title:"Agent questions inbox",description:"A single place for all questions raised by agents during interactive and background runs.",href:"/agent-questions",cta:"View inbox"})]})]}):null}function a4({apps:a,repos:c,features:d}){let[f,g]=(0,e.useState)(!1),i=(0,e.useMemo)(()=>[...a.map(a=>({...a,kind:"app"})),...c.map(a=>({...a,kind:"repo"})),...d.map(a=>({...a,kind:"feature"}))],[a,c,d]);if(0===i.length)return(0,b.jsxs)("div",{className:"bg-muted/40 border-border/40 flex flex-col gap-2 rounded-lg border p-4",children:[(0,b.jsx)(a5,{}),(0,b.jsx)("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Supervisors attach to an application, repository, or feature. Add a repository or create an application to configure your first one."}),(0,b.jsxs)("button",{type:"button",onClick:()=>window.dispatchEvent(new CustomEvent("shep:open-create-application")),className:"text-primary mt-auto inline-flex cursor-pointer items-center gap-1 text-xs font-medium hover:underline",children:[(0,b.jsx)(h.Plus,{className:"size-3"}),"Create an application"]})]});if(1===i.length){var j;let a=i[0];return(0,b.jsx)(a8,{icon:a_.ShieldCheck,title:"Supervisor agent",description:`Delegate approvals and policy decisions for ${"app"===(j=a.kind)?"application":"repo"===j?"repository":"feature"} "${a.name}".`,href:a7(a),cta:"Configure supervisor"})}let k=i.slice(0,3),l=i.length-k.length;return(0,b.jsxs)("div",{className:"bg-muted/40 border-border/40 flex flex-col gap-2 rounded-lg border p-4",children:[(0,b.jsx)(a5,{}),(0,b.jsx)("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Pick an application, repository, or feature to configure its supervisor."}),f?(0,b.jsx)("div",{className:"mt-1 flex max-h-72 flex-col gap-1 overflow-y-auto",children:i.map(a=>(0,b.jsxs)(a1.default,{href:a7(a),className:"border-border/50 hover:bg-background flex items-center justify-between rounded-md border px-3 py-2 text-xs transition-colors",children:[(0,b.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[(0,b.jsx)(a6,{kind:a.kind,className:"text-muted-foreground size-3 shrink-0"}),(0,b.jsx)("span",{className:"truncate font-medium",children:a.name})]}),(0,b.jsx)(a0.ArrowRight,{className:"text-muted-foreground ml-2 size-3 shrink-0"})]},`${a.kind}-${a.id}`))}):(0,b.jsxs)("div",{className:"mt-1 flex flex-wrap gap-1.5",children:[k.map(a=>(0,b.jsxs)(a1.default,{href:a7(a),className:"border-border/50 bg-background hover:border-primary/40 hover:text-primary flex items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs transition-colors",children:[(0,b.jsx)(a6,{kind:a.kind,className:"size-3 shrink-0"}),(0,b.jsx)("span",{className:"max-w-[10rem] truncate",children:a.name}),(0,b.jsx)(a0.ArrowRight,{className:"size-2.5"})]},`${a.kind}-${a.id}`)),l>0?(0,b.jsxs)("button",{type:"button",onClick:()=>g(!0),className:"text-muted-foreground hover:text-foreground border-border/50 rounded-md border px-2.5 py-1 text-xs transition-colors",children:["+",l," more"]}):null]})]})}function a5(){return(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("div",{className:"bg-primary/10 text-primary flex h-7 w-7 shrink-0 items-center justify-center rounded-md",children:(0,b.jsx)(a_.ShieldCheck,{className:"size-3.5"})}),(0,b.jsx)("span",{className:"text-sm font-medium",children:"Supervisor agent"})]})}function a6({kind:a,className:c}){let d="app"===a?af.Layers:"repo"===a?v.GitBranch:an.Sparkles;return(0,b.jsx)(d,{className:c,"aria-hidden":!0})}function a7(a){switch(a.kind){case"app":return`/application/${a.id}/supervisor`;case"repo":return`/supervisor/repo/${a.id}`;case"feature":return`/supervisor/feature/${a.id}`}}function a8({icon:a,title:c,description:d,href:e,cta:f}){return(0,b.jsxs)("div",{className:"bg-muted/40 border-border/40 flex flex-col gap-2 rounded-lg border p-4",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("div",{className:"bg-primary/10 text-primary flex h-7 w-7 shrink-0 items-center justify-center rounded-md",children:(0,b.jsx)(a,{className:"size-3.5"})}),(0,b.jsx)("span",{className:"text-sm font-medium",children:c})]}),(0,b.jsx)("p",{className:"text-muted-foreground text-xs leading-relaxed",children:d}),(0,b.jsxs)(a1.default,{href:e,className:"text-primary mt-auto inline-flex items-center gap-1 text-xs font-medium hover:underline",children:[f,(0,b.jsx)(a0.ArrowRight,{className:"size-3"})]})]})}var a9=a.i(716533);let ba={maxZoom:1,padding:.5,duration:500};var bb=a.i(69428);let bc={maxZoom:1,padding:.5,duration:500};function bd({initialNodes:a,initialEdges:d}){let j,l,m,n,p,q,s=(0,f.useRouter)(),t=(0,f.usePathname)(),u=(j=(0,f.usePathname)().match(/^\/feature\/([^/]+)/),j?.[1]??null),w=(l=(0,f.usePathname)(),m=(0,f.useSearchParams)(),n=l.match(/^\/repository\/([^/]+)/),{id:n?.[1]??null,path:l.startsWith("/create")?m.get(C.URL_PARAMS.repo):null}),x=(0,au.useSoundAction)("click"),{guardedNavigate:y}=(0,av.useDrawerCloseGuard)(),{fitView:z}=(0,c.useReactFlow)(),A=(0,e.useRef)(null),{defaultViewport:B,onMoveEnd:D,resetViewport:E}=(p=(0,e.useRef)(function(){try{let a=localStorage.getItem(aw);if(null==a)return ax;let b=JSON.parse(a);return!(null==b||"object"!=typeof b||Array.isArray(b))&&"number"==typeof b.x&&"number"==typeof b.y&&"number"==typeof b.zoom&&Number.isFinite(b.x)&&Number.isFinite(b.y)&&Number.isFinite(b.zoom)&&b.zoom>0?b:ax}catch{return ax}}()).current,q=(0,e.useRef)(null),(0,e.useEffect)(()=>()=>{null!=q.current&&clearTimeout(q.current)},[]),{defaultViewport:p,onMoveEnd:(0,e.useCallback)(a=>{null!=q.current&&clearTimeout(q.current),q.current=setTimeout(()=>{try{localStorage.setItem(aw,JSON.stringify(a))}catch{}},500)},[]),resetViewport:(0,e.useCallback)(()=>{try{localStorage.removeItem(aw)}catch{}return ax},[])}),{nodes:F,edges:G,onNodesChange:H,handleConnect:I,handleAddRepository:K,handleArchiveFeature:L,handleDeleteFeature:M,handleRetryFeature:N,handleStartFeature:O,handleStopFeature:P,handleUnarchiveFeature:R,handleDeleteRepository:T,handleDeleteApplication:U,createFeatureNode:V,showArchived:W,setShowArchived:X,setCallbacks:Z}=(0,a9.useControlCenterState)(a,d),{workspaces:$,activeWorkspace:_,isDefaultActive:aa,setActiveWorkspace:ab,createWorkspace:ac,renameWorkspace:ae,deleteWorkspace:ag,setWorkspaceMembers:ah,addToActiveWorkspace:ai}=function(){let[a,b]=(0,e.useState)(al);(0,e.useEffect)(()=>{b(al)},[]),(0,e.useEffect)(()=>{},[a]);let c=(0,e.useCallback)(a=>{b(b=>b.workspaces.some(b=>b.id===a)?{...b,activeWorkspaceId:a}:b)},[]),d=(0,e.useCallback)(a=>{let c=a.trim()||"Untitled workspace",d={id:`ws-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,name:c,repoIds:[],featureIds:[]};return b(a=>({workspaces:[...a.workspaces,d],activeWorkspaceId:d.id})),d},[]),f=(0,e.useCallback)((a,c)=>{if(a===ak)return;let d=c.trim();d&&b(b=>({...b,workspaces:b.workspaces.map(b=>b.id===a?{...b,name:d}:b)}))},[]),g=(0,e.useCallback)(a=>{a!==ak&&b(b=>({workspaces:b.workspaces.filter(b=>b.id!==a),activeWorkspaceId:b.activeWorkspaceId===a?ak:b.activeWorkspaceId}))},[]),h=(0,e.useCallback)((a,c)=>{a!==ak&&b(b=>({...b,workspaces:b.workspaces.map(b=>b.id===a?{...b,repoIds:[...c.repoIds],featureIds:[...c.featureIds]}:b)}))},[]),i=(0,e.useCallback)((a,c)=>{b(b=>b.activeWorkspaceId===ak?b:{...b,workspaces:b.workspaces.map(d=>{if(d.id!==b.activeWorkspaceId)return d;let e="repo"===a?d.repoIds:d.featureIds,f=e.includes(c)?e.filter(a=>a!==c):[...e,c];return"repo"===a?{...d,repoIds:f}:{...d,featureIds:f}})})},[]),j=(0,e.useCallback)(a=>i("repo",a),[i]),k=(0,e.useCallback)(a=>i("feature",a),[i]),l=(0,e.useCallback)(a=>{let c=a.repoIds??[],d=a.featureIds??[];(0!==c.length||0!==d.length)&&b(a=>a.activeWorkspaceId===ak?a:{...a,workspaces:a.workspaces.map(b=>{if(b.id!==a.activeWorkspaceId)return b;let e=new Set(b.repoIds);for(let a of c)e.add(a);let f=new Set(b.featureIds);for(let a of d)f.add(a);return e.size===b.repoIds.length&&f.size===b.featureIds.length?b:{...b,repoIds:Array.from(e),featureIds:Array.from(f)}})})},[]),m=a.workspaces.find(b=>b.id===a.activeWorkspaceId)??a.workspaces[0];return{workspaces:a.workspaces,activeWorkspace:m,activeWorkspaceId:a.activeWorkspaceId,isDefaultActive:a.activeWorkspaceId===ak,setActiveWorkspace:c,createWorkspace:d,renameWorkspace:f,deleteWorkspace:g,setWorkspaceMembers:h,toggleRepoInActive:j,toggleFeatureInActive:k,addToActiveWorkspace:l}}(),aj=(0,e.useRef)(new Set),[ap,as]=(0,e.useState)(!1),[ay,az]=(0,e.useState)(!1),[aB,aC]=(0,e.useState)(!1),[aD,aE]=(0,e.useState)(!1),[aF,aG]=(0,e.useState)(null),[aH,aI]=(0,e.useState)(!1),{setFeatures:aJ,setHasRepositories:aK}=(0,at.useSidebarFeaturesContext)(),aL=(0,e.useMemo)(()=>F.filter(a=>"featureNode"===a.type),[F]),aM=(0,e.useMemo)(()=>aL.map(a=>{let b=a.data;return`${b.featureId}:${b.state}:${b.name}:${b.repositoryPath}`}).sort().join(","),[aL]);(0,e.useEffect)(()=>{aJ(aL.map(a=>{let b=a.data,c=(0,at.mapNodeStateToSidebarStatus)(b.state);if(!c)return null;let d=b.repositoryPath??"";return{featureId:b.featureId,name:b.name,status:c,repositoryPath:d,repositoryName:b.repositoryName??d.split("/").filter(Boolean).pop()??d,...null!=b.startedAt&&{startedAt:b.startedAt},...null!=b.runtime&&{duration:b.runtime},...b.agentType&&{agentType:b.agentType},...b.modelId&&{modelId:b.modelId}}}).filter(Boolean))},[aM,aL,aJ]);let aN=(0,e.useCallback)(a=>{y(()=>s.push(`/application/${a}`))},[s,y]),aO=(0,e.useCallback)(a=>{x.play(),y(()=>s.push((0,C.buildCreateUrl)({applicationId:a,mode:S.BuildMode.Spec})))},[s,x,y]),aP=(0,e.useCallback)((a,b)=>{if("featureNode"===b.type){let c=b.data;"creating"!==c.state&&"deleting"!==c.state&&a.target.closest('[data-testid="feature-node-card"]')&&y(()=>{x.play(),s.push(`/feature/${c.featureId}`)})}},[s,x,y]),aQ=(0,e.useCallback)(()=>{x.play(),s.push("/create")},[s,x]),aR=(0,e.useCallback)(a=>{x.play();let b=F.find(b=>b.id===a),c=b?.data?.repositoryPath;s.push((0,C.buildCreateUrl)(c?{repo:c}:{}))},[F,s,x]),aT=(0,e.useCallback)(a=>{let b=a.startsWith("feat-")?a.slice(5):a,c=G.find(b=>b.target===a),d=c?F.find(a=>a.id===c.source):null,e=d?.data?.repositoryPath;x.play(),s.push((0,C.buildCreateUrl)({repo:e,parent:b}))},[F,G,s,x]),aV=(0,e.useCallback)(a=>{let b=F.find(b=>b.id===a);if(b?.type==="repositoryNode"){let a=b.data;a.id&&y(()=>s.push(`/repository/${a.id}`))}},[F,s,y]),aW=(0,e.useCallback)(()=>{"/control-center"!==t&&y(()=>s.push("/control-center"))},[s,t,y]),aX=(0,e.useCallback)(a=>{setTimeout(()=>{z(bc),A.current=setTimeout(()=>{y(()=>s.push((0,C.buildCreateUrl)({repo:a})))},600)},0)},[z,y,s]),aY=(0,e.useCallback)(a=>{setTimeout(()=>{z({nodes:[{id:a}],maxZoom:1,padding:.4,duration:600})},0)},[z]),aZ=(0,e.useCallback)(a=>{let{wasEmpty:b,repoPath:c,tempNodeId:d}=K(a);b?aX(c):aY(d)},[K,aX,aY]);!function(a){let{addRepoAndFocus:b,createFeatureNode:c,nodes:d,handleDeleteFeature:f,handleArchiveFeature:g,handleUnarchiveFeature:h}=a;(0,e.useEffect)(()=>{let a=a=>{b(a.detail.path)};return window.addEventListener("shep:add-repository",a),()=>window.removeEventListener("shep:add-repository",a)},[b]),(0,e.useEffect)(()=>{let a=a=>{let b=a.detail;if(b.parentId)return void c(`feat-${b.parentId}`,{state:"creating",featureId:b.featureId,name:b.name,description:b.description,repositoryPath:b.repositoryPath},"dependencyEdge");if(b.applicationId){let a=`app-${b.applicationId}`;if(d.find(b=>b.id===a&&"applicationNode"===b.type))return void c(a,{state:"running",featureId:b.featureId,name:b.name,description:b.description,repositoryPath:b.repositoryPath,applicationId:b.applicationId},"dependencyEdge")}let e=d.find(a=>"repositoryNode"===a.type&&a.data.repositoryPath===b.repositoryPath);c(e?.id??null,{state:"running",featureId:b.featureId,name:b.name,description:b.description,repositoryPath:b.repositoryPath})};return window.addEventListener("shep:feature-created",a),()=>window.removeEventListener("shep:feature-created",a)},[d,c]),(0,e.useEffect)(()=>{let a=a=>{let{featureId:b,cleanup:c,cascadeDelete:d,closePr:e}=a.detail;f(b,c,d,e)};return window.addEventListener("shep:feature-delete-requested",a),()=>window.removeEventListener("shep:feature-delete-requested",a)},[f]),(0,e.useEffect)(()=>{let a=a=>{let{featureId:b}=a.detail;g(b)};return window.addEventListener("shep:feature-archive-requested",a),()=>window.removeEventListener("shep:feature-archive-requested",a)},[g]),(0,e.useEffect)(()=>{let a=a=>{let{featureId:b}=a.detail;h(b)};return window.addEventListener("shep:feature-unarchive-requested",a),()=>window.removeEventListener("shep:feature-unarchive-requested",a)},[h])}({addRepoAndFocus:aZ,createFeatureNode:V,nodes:F,handleDeleteFeature:M,handleArchiveFeature:L,handleUnarchiveFeature:R}),(0,e.useEffect)(()=>()=>{null!=A.current&&clearTimeout(A.current)},[]),(0,e.useEffect)(()=>{Z({onNodeAction:aT,onFeatureDelete:M,onRetryFeature:N,onStartFeature:O,onStopFeature:P,onArchiveFeature:L,onUnarchiveFeature:R,onRepositoryAdd:aR,onRepositoryClick:aV,onRepositoryDelete:T,onApplicationClick:aN,onApplicationDelete:U,onApplicationCreateSddFeature:aO})},[Z,aT,L,M,N,O,P,R,aR,aV,T,aN,U,aO]);let a$=(0,e.useCallback)((a,b)=>{D(b)},[D]),a_=F.some(a=>"repositoryNode"===a.type),a0=a_||F.some(a=>"applicationNode"===a.type);(0,e.useEffect)(()=>{aK(a_)},[a_,aK]);let[a1,a2]=(0,e.useState)(a0),a4=(0,e.useRef)(null);(0,e.useEffect)(()=>(a0?(a4.current&&(clearTimeout(a4.current),a4.current=null),a2(!0)):a1&&(E(),a4.current=setTimeout(()=>{a2(!1),a4.current=null},500)),()=>{a4.current&&clearTimeout(a4.current)}),[a0,a1,E]),(0,e.useEffect)(()=>{let a=aj.current,b=[],c=[];for(let d of F)a.has(d.id)||(a.add(d.id),"repositoryNode"===d.type?b.push(d.id):"featureNode"===d.type&&c.push(d.id));aa||(0!==b.length||0!==c.length)&&ai({repoIds:b,featureIds:c})},[F,aa,ai]);let a5=(0,e.useMemo)(()=>{if(aa)return F;let a=new Set(_.repoIds),b=new Set(_.featureIds);return F.filter(c=>"repositoryNode"===c.type?a.has(c.id):"featureNode"!==c.type||b.has(c.id))},[F,aa,_]),a6=(0,e.useMemo)(()=>{if(aa)return G;let a=new Set(a5.map(a=>a.id));return G.filter(b=>a.has(b.source)&&a.has(b.target))},[G,aa,a5]),a7=t.startsWith("/create"),a8=(0,e.useMemo)(()=>{let a=a5.filter(a=>"repositoryNode"===a.type),b=a5.some(a=>"featureNode"===a.type);return 1!==a.length||b||a7?a5:a5.map(a=>"repositoryNode"===a.type?{...a,data:{...a.data,pulseAdd:!0}}:a)},[a5,a7]),bd=(0,e.useCallback)(()=>{window.dispatchEvent(new CustomEvent("shep:pick-folder"))},[]);!function(a){let{activeWorkspace:b,isDefaultActive:c,workspaceFilteredNodes:d,fitView:f}=a,g=(0,e.useMemo)(()=>{if(c)return"default";let a=d.map(a=>a.id).sort().join(",");return`${b.id}:${a}`},[c,b.id,d]),h=(0,e.useRef)(null);(0,e.useEffect)(()=>{let a=h.current;if(h.current=g,null===a||a===g||c||0===d.length)return;let b=setTimeout(()=>{f(ba)},0);return()=>clearTimeout(b)},[g,c,d.length,f])}({activeWorkspace:_,isDefaultActive:aa,workspaceFilteredNodes:a5,fitView:z});let bf=a0&&!aa&&0===a5.length,bg=bf?(0,b.jsxs)("div",{className:"pointer-events-auto flex h-full w-full flex-col items-center justify-center px-8",children:[(0,b.jsx)("div",{className:"bg-primary/10 text-primary mb-5 flex h-12 w-12 items-center justify-center rounded-2xl",children:(0,b.jsx)(af.Layers,{className:"h-6 w-6"})}),(0,b.jsx)("h2",{className:"text-foreground/90 text-center text-2xl font-light tracking-tight",children:"This workspace is empty"}),(0,b.jsx)("p",{className:"text-muted-foreground mt-2 max-w-sm text-center text-sm leading-relaxed",children:"Add repositories or features from the canvas, or switch back to the default workspace to see everything."}),(0,b.jsxs)("div",{className:"mt-6 flex items-center gap-2",children:[(0,b.jsxs)(k.Button,{size:"sm",onClick:()=>aI(!0),className:"bg-blue-500 text-white hover:bg-blue-600",children:[(0,b.jsx)(g.FolderPlus,{className:"me-1.5 h-3.5 w-3.5"}),"New project"]}),(0,b.jsxs)(k.Button,{variant:"outline",size:"sm",onClick:()=>as(!0),children:[(0,b.jsx)(h.Plus,{className:"me-1.5 h-3.5 w-3.5"}),"Manage items"]}),(0,b.jsx)(k.Button,{variant:"ghost",size:"sm",onClick:()=>ab(ak),children:"Switch to Default"})]})]}):(0,b.jsx)(aU,{onRepositorySelect:aZ}),[bh,bi]=(0,e.useState)(!1),bj=(0,J.useFeatureFlags)(),bk=(0,e.useMemo)(()=>a.filter(a=>"applicationNode"===a.type).map(a=>({id:a.data.id,name:a.data.name,kind:"app"})),[a]),bl=(0,e.useMemo)(()=>a.filter(a=>"repositoryNode"===a.type).map(a=>({id:a.data.id??a.id,name:a.data.name,kind:"repo"})),[a]),bm=(0,e.useMemo)(()=>a.filter(a=>"featureNode"===a.type).map(a=>({id:a.data.featureId??a.id,name:a.data.name,kind:"feature"})),[a]),bn=(0,e.useMemo)(()=>a8.filter(a=>"applicationNode"===a.type),[a8]),bo=1===bn.length?bn[0].data.id:void 0,bp=1===bn.length?bn[0].data.name:void 0,bq=function({router:a,clickSound:c,guardedNavigate:d,handlePickFolder:f,onNewProject:h,onNewApplication:j,selectedApplicationId:k,selectedApplicationName:l}){let{t:m}=(0,i.useTranslation)("web");return(0,e.useMemo)(()=>{let e=[{id:"new-project",label:"New project",icon:(0,b.jsx)(g.FolderPlus,{className:"h-4 w-4"}),onClick:()=>{c.play(),h()}},{id:"new-feature",label:m("fab.newFeature"),icon:(0,b.jsx)(an.Sparkles,{className:"h-4 w-4"}),onClick:()=>{c.play(),d(()=>a.push("/create"))}},{id:"add-local-repo",label:m("fab.localFolder"),icon:(0,b.jsx)(r.FolderOpen,{className:"h-4 w-4"}),onClick:f},{id:"new-application",label:m("fab.newApplication"),icon:(0,b.jsx)(Q.LayoutGrid,{className:"h-4 w-4"}),onClick:j}];return k&&e.push({id:"new-sdd-feature-for-app",label:m("fab.newSddForApp",{appName:l??""}),icon:(0,b.jsx)(bb.ClipboardList,{className:"h-4 w-4"}),onClick:()=>{c.play(),d(()=>a.push((0,C.buildCreateUrl)({applicationId:k,mode:S.BuildMode.Spec})))}}),e.push({id:"adopt-branch",label:m("fab.adoptBranch"),icon:(0,b.jsx)(v.GitBranch,{className:"h-4 w-4"}),onClick:()=>{d(()=>a.push("/adopt"))}}),e.push({id:"add-github-repo",label:m("fab.fromGithub"),icon:(0,b.jsx)(o.Github,{className:"h-4 w-4"}),onClick:()=>{window.dispatchEvent(new CustomEvent("shep:open-github-import"))}}),e},[m,c,d,a,f,h,j,k,l])}({router:s,clickSound:x,guardedNavigate:y,handlePickFolder:bd,onNewProject:()=>aI(!0),onNewApplication:()=>bi(!0),...void 0!==bo&&{selectedApplicationId:bo},...void 0!==bp&&{selectedApplicationName:bp}}),br=(0,b.jsx)(ad,{showArchived:W,onToggleArchived:()=>X(!W),onResetViewport:E,startSlot:(0,b.jsx)(am,{workspaces:$,activeWorkspace:_,onSelect:ab,onRequestCreate:()=>az(!0),onRequestRename:()=>aC(!0),onRequestDelete:a=>{aG(a),aE(!0)},onManage:()=>as(!0)})});return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(Y,{nodes:a1?a8:[],edges:a1?a6:[],selectedFeatureId:u,selectedRepository:w,defaultViewport:B,onNodesChange:H,onConnect:I,onAddFeature:aQ,onNodeClick:aP,onPaneClick:aW,onMoveEnd:a$,toolbar:br,showToolbarOnEmpty:bf,emptyState:bg}),bj.collaboration?(0,b.jsx)("div",{className:"pointer-events-none absolute inset-x-0 top-14 z-10 flex justify-end px-4",children:(0,b.jsx)(a3,{apps:bk,repos:bl,features:bm,className:"pointer-events-auto w-full max-w-md"})}):null,a1?(0,b.jsx)(be,{actions:bq}):null,(0,b.jsx)(aS.NewProjectDialog,{open:aH,onOpenChange:aI,onCreated:a=>aZ(a)}),(0,b.jsx)(ao,{open:ap,onOpenChange:as,workspace:_,allNodes:F,onSave:a=>ah(_.id,a)}),(0,b.jsx)(aq,{open:ay,onOpenChange:az,title:"New workspace",description:"Create a workspace to filter the canvas to a specific set of repositories and features.",confirmLabel:"Create",onConfirm:a=>{ac(a),as(!0)}}),(0,b.jsx)(aq,{open:aB,onOpenChange:aC,title:"Rename workspace",initialValue:_.name,confirmLabel:"Rename",onConfirm:a=>ae(_.id,a)}),(0,b.jsx)(ar.AlertDialog,{open:aD,onOpenChange:a=>{aE(a),a||aG(null)},children:(0,b.jsxs)(ar.AlertDialogContent,{children:[(0,b.jsxs)(ar.AlertDialogHeader,{children:[(0,b.jsx)(ar.AlertDialogTitle,{children:"Delete workspace?"}),(0,b.jsxs)(ar.AlertDialogDescription,{children:["This will permanently remove the workspace “",$.find(a=>a.id===aF)?.name??_.name,"”. The repositories and features themselves are not affected."]})]}),(0,b.jsxs)(ar.AlertDialogFooter,{children:[(0,b.jsx)(ar.AlertDialogCancel,{children:"Cancel"}),(0,b.jsx)(ar.AlertDialogAction,{variant:"destructive",onClick:()=>{aF&&(ag(aF),aG(null))},children:"Delete"})]})]})}),bh?(0,b.jsx)("div",{className:"absolute inset-0 z-50",children:(0,b.jsx)(aA.ControlCenterEmptyState,{onRepositorySelect:a=>{bi(!1),aZ(a)},onApplicationCreated:a=>{s.push(`/application/${a}`)},onClose:()=>bi(!1),className:"bg-background"})}):null]})}function be({actions:a}){let{state:c}=(0,ay.useSidebar)(),{i18n:d}=(0,i.useTranslation)("web"),{swapPosition:e}=(0,az.useFabLayout)(),f="rtl"===d.dir();if(e)return(0,b.jsx)(as.FloatingActionButton,{actions:a,className:"!fixed bottom-6",style:f?{left:"calc(var(--sidebar-width-icon) + 32px)",transition:"left 200ms ease-in-out"}:{right:"32px",transition:"right 200ms ease-in-out"}});let g="expanded"===c?"calc(var(--sidebar-width) + 32px)":"calc(var(--sidebar-width-icon) + 32px)";return(0,b.jsx)(as.FloatingActionButton,{actions:a,className:"!fixed bottom-6",style:f?{right:g,transition:"right 200ms ease-in-out"}:{left:g,transition:"left 200ms ease-in-out"}})}function bf({initialNodes:a,initialEdges:e,drawer:f}){return(0,b.jsxs)("div",{"data-testid":"control-center",className:"h-full w-full",children:[(0,b.jsx)(d.SessionsProvider,{children:(0,b.jsx)(c.ReactFlowProvider,{children:(0,b.jsx)(bd,{initialNodes:a,initialEdges:e})})}),(0,b.jsx)("div",{children:f},"drawer")]})}a.s(["ControlCenter",()=>bf],259949)},160172,a=>{"use strict";var b=a.i(966691),c=a.i(624434);a.s(["DeploymentStatusProvider",()=>b.DeploymentStatusProvider,"EMPTY_ENTRY",()=>c.EMPTY_ENTRY,"useDeploymentStatusContext",()=>b.useDeploymentStatusContext,"useDeploymentStatusContextOptional",()=>b.useDeploymentStatusContextOptional])}];
2
2
 
3
3
  //# sourceMappingURL=src_presentation_web_9a543843._.js.map