@shepai/cli 1.183.0-pr527.80e6e27 → 1.183.0-pr553.cd3d150

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 (465) hide show
  1. package/README.md +1 -0
  2. package/apis/json-schema/FeatureFlags.yaml +0 -5
  3. package/apis/json-schema/Settings.yaml +0 -3
  4. package/dist/packages/core/src/application/ports/output/agents/agent-executor.interface.d.ts +1 -15
  5. package/dist/packages/core/src/application/ports/output/agents/agent-executor.interface.d.ts.map +1 -1
  6. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts +1 -3
  7. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
  8. package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.d.ts +0 -38
  9. package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.d.ts.map +1 -1
  10. package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.js +0 -9
  11. package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts +0 -11
  12. package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts.map +1 -1
  13. package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.d.ts.map +1 -1
  14. package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.js +0 -2
  15. package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.d.ts.map +1 -1
  16. package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.js +0 -2
  17. package/dist/packages/core/src/application/use-cases/features/check-and-unblock-features.use-case.d.ts.map +1 -1
  18. package/dist/packages/core/src/application/use-cases/features/check-and-unblock-features.use-case.js +0 -2
  19. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  20. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +0 -1
  21. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.d.ts.map +1 -1
  22. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +0 -2
  23. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.d.ts.map +1 -1
  24. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.js +0 -2
  25. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  26. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +1 -6
  27. package/dist/packages/core/src/domain/generated/output.d.ts +0 -263
  28. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  29. package/dist/packages/core/src/domain/generated/output.js +0 -43
  30. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  31. package/dist/packages/core/src/infrastructure/di/container.js +0 -57
  32. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +0 -4
  33. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  34. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +0 -17
  35. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
  36. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +3 -15
  37. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts +0 -2
  38. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts.map +1 -1
  39. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.js +0 -12
  40. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts +0 -10
  41. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts.map +1 -1
  42. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +0 -34
  43. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
  44. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +1 -3
  45. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
  46. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +1 -7
  47. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +1 -3
  48. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
  49. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +1 -32
  50. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  51. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +0 -25
  52. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts +1 -4
  53. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts.map +1 -1
  54. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.js +0 -10
  55. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts +1 -10
  56. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts.map +1 -1
  57. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.js +1 -101
  58. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts +0 -1
  59. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts.map +1 -1
  60. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.js +0 -61
  61. package/dist/src/presentation/cli/index.js +0 -2
  62. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.d.ts.map +1 -1
  63. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.js +1 -5
  64. package/dist/src/presentation/web/app/build-graph-nodes.d.ts +1 -3
  65. package/dist/src/presentation/web/app/build-graph-nodes.d.ts.map +1 -1
  66. package/dist/src/presentation/web/app/build-graph-nodes.js +0 -2
  67. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +1 -3
  68. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  69. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  70. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +1 -2
  71. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.d.ts +1 -3
  72. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.d.ts.map +1 -1
  73. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.js +2 -3
  74. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.js +3 -3
  75. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts.map +1 -1
  76. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js +0 -3
  77. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +1 -1
  78. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.js +0 -3
  79. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  80. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +7 -26
  81. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
  82. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +0 -1
  83. package/dist/translations/ar/cli.json +0 -21
  84. package/dist/translations/ar/web.json +1 -43
  85. package/dist/translations/de/cli.json +0 -21
  86. package/dist/translations/de/web.json +1 -43
  87. package/dist/translations/en/cli.json +0 -21
  88. package/dist/translations/en/web.json +1 -43
  89. package/dist/translations/es/cli.json +0 -21
  90. package/dist/translations/es/web.json +1 -43
  91. package/dist/translations/fr/cli.json +0 -21
  92. package/dist/translations/fr/web.json +1 -43
  93. package/dist/translations/he/cli.json +0 -21
  94. package/dist/translations/he/web.json +1 -43
  95. package/dist/translations/pt/cli.json +1 -22
  96. package/dist/translations/pt/web.json +1 -43
  97. package/dist/translations/ru/cli.json +0 -21
  98. package/dist/translations/ru/web.json +1 -43
  99. package/dist/translations/uk/cli.json +0 -21
  100. package/dist/translations/uk/web.json +1 -43
  101. package/dist/tsconfig.build.tsbuildinfo +1 -1
  102. package/package.json +1 -1
  103. package/web/.next/BUILD_ID +1 -1
  104. package/web/.next/build-manifest.json +2 -2
  105. package/web/.next/fallback-build-manifest.json +2 -2
  106. package/web/.next/prerender-manifest.json +3 -3
  107. package/web/.next/required-server-files.js +1 -1
  108. package/web/.next/required-server-files.json +1 -1
  109. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +32 -32
  110. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  111. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  112. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +30 -30
  113. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  114. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  115. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +33 -33
  116. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  117. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  118. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +41 -41
  119. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  120. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  121. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +41 -41
  122. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  123. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  124. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +31 -31
  125. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  126. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  127. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +31 -31
  128. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  129. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  130. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +30 -30
  131. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  132. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  133. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +33 -33
  134. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  135. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  136. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +41 -41
  137. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  138. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  139. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +41 -41
  140. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  141. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  142. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +30 -30
  143. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  144. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  145. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +31 -31
  146. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  147. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  148. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +31 -31
  149. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  150. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  151. package/web/.next/server/app/_global-error.html +2 -2
  152. package/web/.next/server/app/_global-error.rsc +1 -1
  153. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  154. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  155. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  156. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  157. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  158. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +7 -7
  159. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  160. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  161. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  162. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  163. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  164. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  165. package/web/.next/server/app/api/sessions/route.js.nft.json +1 -1
  166. package/web/.next/server/app/api/sessions-batch/route.js.nft.json +1 -1
  167. package/web/.next/server/app/application/[id]/page/server-reference-manifest.json +16 -16
  168. package/web/.next/server/app/application/[id]/page.js.nft.json +1 -1
  169. package/web/.next/server/app/application/[id]/page_client-reference-manifest.js +1 -1
  170. package/web/.next/server/app/applications/page/server-reference-manifest.json +15 -15
  171. package/web/.next/server/app/applications/page.js.nft.json +1 -1
  172. package/web/.next/server/app/applications/page_client-reference-manifest.js +1 -1
  173. package/web/.next/server/app/features/page/server-reference-manifest.json +7 -7
  174. package/web/.next/server/app/features/page.js.nft.json +1 -1
  175. package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
  176. package/web/.next/server/app/settings/page/server-reference-manifest.json +20 -35
  177. package/web/.next/server/app/settings/page.js +1 -1
  178. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  179. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  180. package/web/.next/server/app/skills/page/server-reference-manifest.json +15 -15
  181. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  182. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  183. package/web/.next/server/app/tools/page/server-reference-manifest.json +13 -13
  184. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  185. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  186. package/web/.next/server/app/version/page/server-reference-manifest.json +7 -7
  187. package/web/.next/server/app/version/page.js.nft.json +1 -1
  188. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  189. package/web/.next/server/chunks/[root-of-the-server]__10e976f3._.js +1 -1
  190. package/web/.next/server/chunks/[root-of-the-server]__84fede21._.js +1 -1
  191. package/web/.next/server/chunks/[root-of-the-server]__84fede21._.js.map +1 -1
  192. package/web/.next/server/chunks/[root-of-the-server]__aabea727._.js +1 -1
  193. package/web/.next/server/chunks/[root-of-the-server]__aabea727._.js.map +1 -1
  194. package/web/.next/server/chunks/d9f3b_next_dist_esm_build_templates_app-route_fc401c5d.js +1 -1
  195. package/web/.next/server/chunks/d9f3b_next_dist_esm_build_templates_app-route_fc401c5d.js.map +1 -1
  196. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4f9eef62.js +1 -1
  197. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4f9eef62.js.map +1 -1
  198. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_ffa16a22.js +1 -1
  199. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_ffa16a22.js.map +1 -1
  200. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_a1a998f9.js +1 -1
  201. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_a1a998f9.js.map +1 -1
  202. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  203. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  204. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
  205. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  206. package/web/.next/server/chunks/ssr/744ca_web_components_features_applications_applications-page-client_tsx_d0db9938._.js +1 -1
  207. package/web/.next/server/chunks/ssr/[root-of-the-server]__288ffaa6._.js +1 -1
  208. package/web/.next/server/chunks/ssr/[root-of-the-server]__288ffaa6._.js.map +1 -1
  209. package/web/.next/server/chunks/ssr/[root-of-the-server]__4101a4a8._.js +1 -1
  210. package/web/.next/server/chunks/ssr/[root-of-the-server]__4101a4a8._.js.map +1 -1
  211. package/web/.next/server/chunks/ssr/[root-of-the-server]__538580df._.js +1 -1
  212. package/web/.next/server/chunks/ssr/[root-of-the-server]__538580df._.js.map +1 -1
  213. package/web/.next/server/chunks/ssr/[root-of-the-server]__5c5de261._.js +1 -1
  214. package/web/.next/server/chunks/ssr/[root-of-the-server]__5c5de261._.js.map +1 -1
  215. package/web/.next/server/chunks/ssr/[root-of-the-server]__638955bc._.js +1 -1
  216. package/web/.next/server/chunks/ssr/[root-of-the-server]__a9255c9a._.js +3 -0
  217. package/web/.next/server/chunks/ssr/[root-of-the-server]__a9255c9a._.js.map +1 -0
  218. package/web/.next/server/chunks/ssr/[root-of-the-server]__ac9ab3c5._.js +4 -0
  219. package/web/.next/server/chunks/ssr/[root-of-the-server]__ac9ab3c5._.js.map +1 -0
  220. package/web/.next/server/chunks/ssr/[root-of-the-server]__b88acc3c._.js +1 -1
  221. package/web/.next/server/chunks/ssr/[root-of-the-server]__b88acc3c._.js.map +1 -1
  222. package/web/.next/server/chunks/ssr/[root-of-the-server]__c3d233f3._.js +1 -1
  223. package/web/.next/server/chunks/ssr/[root-of-the-server]__c3d233f3._.js.map +1 -1
  224. package/web/.next/server/chunks/ssr/[root-of-the-server]__c6dba2b8._.js +1 -1
  225. package/web/.next/server/chunks/ssr/[root-of-the-server]__c6dba2b8._.js.map +1 -1
  226. package/web/.next/server/chunks/ssr/[root-of-the-server]__eacd32e9._.js +1 -1
  227. package/web/.next/server/chunks/ssr/[root-of-the-server]__eacd32e9._.js.map +1 -1
  228. package/web/.next/server/chunks/ssr/[root-of-the-server]__ef0b8905._.js +2 -2
  229. package/web/.next/server/chunks/ssr/[root-of-the-server]__ef0b8905._.js.map +1 -1
  230. package/web/.next/server/chunks/ssr/[root-of-the-server]__f94e4165._.js +1 -1
  231. package/web/.next/server/chunks/ssr/[root-of-the-server]__f94e4165._.js.map +1 -1
  232. package/web/.next/server/chunks/ssr/[root-of-the-server]__ff5a5243._.js +1 -1
  233. package/web/.next/server/chunks/ssr/[root-of-the-server]__ff5a5243._.js.map +1 -1
  234. package/web/.next/server/chunks/ssr/{_bb029ee1._.js → _06fde7cf._.js} +2 -2
  235. package/web/.next/server/chunks/ssr/{_bb029ee1._.js.map → _06fde7cf._.js.map} +1 -1
  236. package/web/.next/server/chunks/ssr/_22d60ea8._.js +3 -0
  237. package/web/.next/server/chunks/ssr/_22d60ea8._.js.map +1 -0
  238. package/web/.next/server/chunks/ssr/_33a243dd._.js +1 -1
  239. package/web/.next/server/chunks/ssr/_33a243dd._.js.map +1 -1
  240. package/web/.next/server/chunks/ssr/{_88a1b163._.js → _4b57bcc3._.js} +2 -2
  241. package/web/.next/server/chunks/ssr/_4b57bcc3._.js.map +1 -0
  242. package/web/.next/server/chunks/ssr/_519d77a9._.js +1 -1
  243. package/web/.next/server/chunks/ssr/_519d77a9._.js.map +1 -1
  244. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  245. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  246. package/web/.next/server/chunks/ssr/_5b868d9b._.js +1 -1
  247. package/web/.next/server/chunks/ssr/_5b868d9b._.js.map +1 -1
  248. package/web/.next/server/chunks/ssr/_615e07af._.js +3 -0
  249. package/web/.next/server/chunks/ssr/_615e07af._.js.map +1 -0
  250. package/web/.next/server/chunks/ssr/{_700b8ec9._.js → _64d1b6ab._.js} +2 -2
  251. package/web/.next/server/chunks/ssr/{_700b8ec9._.js.map → _64d1b6ab._.js.map} +1 -1
  252. package/web/.next/server/chunks/ssr/_6b254164._.js +1 -1
  253. package/web/.next/server/chunks/ssr/_6b254164._.js.map +1 -1
  254. package/web/.next/server/chunks/ssr/_72cc0c05._.js +1 -1
  255. package/web/.next/server/chunks/ssr/_72cc0c05._.js.map +1 -1
  256. package/web/.next/server/chunks/ssr/{_ac5961de._.js → _87fc28df._.js} +2 -2
  257. package/web/.next/server/chunks/ssr/_87fc28df._.js.map +1 -0
  258. package/web/.next/server/chunks/ssr/{_59563ac1._.js → _8b845c2a._.js} +2 -2
  259. package/web/.next/server/chunks/ssr/{_59563ac1._.js.map → _8b845c2a._.js.map} +1 -1
  260. package/web/.next/server/chunks/ssr/_8e101e0b._.js +2 -2
  261. package/web/.next/server/chunks/ssr/_8e101e0b._.js.map +1 -1
  262. package/web/.next/server/chunks/ssr/_dfbeab70._.js +3 -0
  263. package/web/.next/server/chunks/ssr/_dfbeab70._.js.map +1 -0
  264. package/web/.next/server/chunks/ssr/_e65abbd1._.js +1 -1
  265. package/web/.next/server/chunks/ssr/_e65abbd1._.js.map +1 -1
  266. package/web/.next/server/chunks/ssr/_f86fc1bf._.js +1 -1
  267. package/web/.next/server/chunks/ssr/_f86fc1bf._.js.map +1 -1
  268. package/web/.next/server/chunks/ssr/_fc778d22._.js +3 -0
  269. package/web/.next/server/chunks/ssr/_fc778d22._.js.map +1 -0
  270. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  271. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  272. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  273. package/web/.next/server/chunks/ssr/{node_modules__pnpm_9ac649c1._.js → node_modules__pnpm_28a53b5d._.js} +2 -2
  274. package/web/.next/server/chunks/ssr/{node_modules__pnpm_9ac649c1._.js.map → node_modules__pnpm_28a53b5d._.js.map} +1 -1
  275. package/web/.next/server/chunks/ssr/src_presentation_web_47181610._.js +1 -1
  276. package/web/.next/server/chunks/ssr/src_presentation_web_47181610._.js.map +1 -1
  277. package/web/.next/server/chunks/ssr/src_presentation_web_5d3f4199._.js +1 -1
  278. package/web/.next/server/chunks/ssr/src_presentation_web_5d3f4199._.js.map +1 -1
  279. package/web/.next/server/chunks/ssr/src_presentation_web_6159fef8._.js +1 -1
  280. package/web/.next/server/chunks/ssr/src_presentation_web_6159fef8._.js.map +1 -1
  281. package/web/.next/server/chunks/ssr/src_presentation_web_61d96ba8._.js +1 -1
  282. package/web/.next/server/chunks/ssr/src_presentation_web_61d96ba8._.js.map +1 -1
  283. package/web/.next/server/chunks/ssr/src_presentation_web_6994959a._.js +1 -1
  284. package/web/.next/server/chunks/ssr/src_presentation_web_6994959a._.js.map +1 -1
  285. package/web/.next/server/chunks/ssr/src_presentation_web_77dadf68._.js +3 -3
  286. package/web/.next/server/chunks/ssr/src_presentation_web_77dadf68._.js.map +1 -1
  287. package/web/.next/server/chunks/ssr/src_presentation_web_9a543843._.js +1 -1
  288. package/web/.next/server/chunks/ssr/src_presentation_web_9a543843._.js.map +1 -1
  289. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_c3f6f57e.js +1 -1
  290. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_c3f6f57e.js.map +1 -1
  291. package/web/.next/server/chunks/ssr/src_presentation_web_ad42cc73._.js +1 -1
  292. package/web/.next/server/chunks/ssr/src_presentation_web_ad42cc73._.js.map +1 -1
  293. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_8514dfcd._.js +3 -3
  294. package/web/.next/server/chunks/ssr/src_presentation_web_b95ed206._.js +1 -1
  295. package/web/.next/server/chunks/ssr/src_presentation_web_b95ed206._.js.map +1 -1
  296. package/web/.next/server/chunks/ssr/src_presentation_web_bade80bd._.js +1 -1
  297. package/web/.next/server/chunks/ssr/src_presentation_web_bade80bd._.js.map +1 -1
  298. package/web/.next/server/chunks/ssr/src_presentation_web_c543cf3e._.js +1 -1
  299. package/web/.next/server/chunks/ssr/src_presentation_web_c543cf3e._.js.map +1 -1
  300. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
  301. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
  302. package/web/.next/server/chunks/ssr/src_presentation_web_components_common_base-drawer_base-drawer_tsx_97dfbbc8._.js +1 -1
  303. package/web/.next/server/chunks/ssr/src_presentation_web_components_common_base-drawer_base-drawer_tsx_97dfbbc8._.js.map +1 -1
  304. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
  305. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
  306. package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js +1 -1
  307. package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js.map +1 -1
  308. package/web/.next/server/chunks/ssr/translations_1562ae1a._.js +1 -1
  309. package/web/.next/server/chunks/ssr/translations_1562ae1a._.js.map +1 -1
  310. package/web/.next/server/pages/500.html +2 -2
  311. package/web/.next/server/server-reference-manifest.js +1 -1
  312. package/web/.next/server/server-reference-manifest.json +64 -79
  313. package/web/.next/static/chunks/{61201f0a38dc6784.js → 04c38e109dd4d082.js} +2 -2
  314. package/web/.next/static/chunks/{ded36f5739e4a4e1.js → 0658b69414ca5ecc.js} +1 -1
  315. package/web/.next/static/chunks/{03f93b2842ca688b.js → 1a0d47b7acf662f8.js} +2 -2
  316. package/web/.next/static/chunks/2cbe80f8e84d59a8.js +1 -0
  317. package/web/.next/static/chunks/{fcf7327eb2731905.js → 302c86aa96dcbacc.js} +1 -1
  318. package/web/.next/static/chunks/31f0d4fdd800c3ec.js +1 -0
  319. package/web/.next/static/chunks/36d968c44c52dccd.js +1 -0
  320. package/web/.next/static/chunks/3a6eedce30387a65.js +1 -0
  321. package/web/.next/static/chunks/{69bb98258075326f.js → 4ac64eaceef16292.js} +1 -1
  322. package/web/.next/static/chunks/{6be5713bee484a88.js → 4d7751c92a531b4c.js} +1 -1
  323. package/web/.next/static/chunks/{776acfd9be35f7b8.js → 4f4945ed1c4b793f.js} +3 -3
  324. package/web/.next/static/chunks/{c31dd6ed2546ed02.js → 7aaf68f557255f3d.js} +1 -1
  325. package/web/.next/static/chunks/81345b1f79dad8ea.js +1 -0
  326. package/web/.next/static/chunks/81b02c44e71de1ec.css +1 -0
  327. package/web/.next/static/chunks/91548fae41232f24.js +1 -0
  328. package/web/.next/static/chunks/930ceb2e741b0343.js +1 -0
  329. package/web/.next/static/chunks/9619faa56afb8dee.js +1 -0
  330. package/web/.next/static/chunks/{c47be6406b8c0053.js → 966f57938829b729.js} +1 -1
  331. package/web/.next/static/chunks/{dd5877dbb207f4ba.js → 97a6e70bf3c1e782.js} +1 -1
  332. package/web/.next/static/chunks/{5cb969096639b8db.js → 9a6c59ac77000a57.js} +1 -1
  333. package/web/.next/static/chunks/9aea22f126886a4a.js +7 -0
  334. package/web/.next/static/chunks/{aa792ef5139df0ab.js → a19c77561ecb59d0.js} +1 -1
  335. package/web/.next/static/chunks/c0a3918240432e6f.js +1 -0
  336. package/web/.next/static/chunks/{14ccadfe528de126.js → c9dde6d26ec1357f.js} +1 -1
  337. package/web/.next/static/chunks/e9e5cb9172ef1908.js +5 -0
  338. package/web/.next/static/chunks/f89f13e73f1306e0.js +1 -0
  339. package/apis/json-schema/ActionDispositionEntry.yaml +0 -14
  340. package/apis/json-schema/DependencyFinding.yaml +0 -28
  341. package/apis/json-schema/DependencyRiskType.yaml +0 -11
  342. package/apis/json-schema/DependencyRules.yaml +0 -38
  343. package/apis/json-schema/EffectivePolicySnapshot.yaml +0 -24
  344. package/apis/json-schema/ReleaseIntegrityCheck.yaml +0 -22
  345. package/apis/json-schema/ReleaseIntegrityCheckType.yaml +0 -9
  346. package/apis/json-schema/ReleaseIntegrityResult.yaml +0 -16
  347. package/apis/json-schema/ReleaseRules.yaml +0 -21
  348. package/apis/json-schema/SecurityActionCategory.yaml +0 -10
  349. package/apis/json-schema/SecurityActionDisposition.yaml +0 -8
  350. package/apis/json-schema/SecurityConfig.yaml +0 -17
  351. package/apis/json-schema/SecurityEvent.yaml +0 -36
  352. package/apis/json-schema/SecurityMode.yaml +0 -8
  353. package/apis/json-schema/SecurityPolicy.yaml +0 -24
  354. package/apis/json-schema/SecuritySeverity.yaml +0 -9
  355. package/dist/packages/core/src/application/ports/output/repositories/security-event.repository.interface.d.ts +0 -76
  356. package/dist/packages/core/src/application/ports/output/repositories/security-event.repository.interface.d.ts.map +0 -1
  357. package/dist/packages/core/src/application/ports/output/repositories/security-event.repository.interface.js +0 -11
  358. package/dist/packages/core/src/application/ports/output/services/security-policy-service.interface.d.ts +0 -77
  359. package/dist/packages/core/src/application/ports/output/services/security-policy-service.interface.d.ts.map +0 -1
  360. package/dist/packages/core/src/application/ports/output/services/security-policy-service.interface.js +0 -13
  361. package/dist/packages/core/src/application/use-cases/security/enforce-security.use-case.d.ts +0 -71
  362. package/dist/packages/core/src/application/use-cases/security/enforce-security.use-case.d.ts.map +0 -1
  363. package/dist/packages/core/src/application/use-cases/security/enforce-security.use-case.js +0 -215
  364. package/dist/packages/core/src/application/use-cases/security/evaluate-security-policy.use-case.d.ts +0 -24
  365. package/dist/packages/core/src/application/use-cases/security/evaluate-security-policy.use-case.d.ts.map +0 -1
  366. package/dist/packages/core/src/application/use-cases/security/evaluate-security-policy.use-case.js +0 -56
  367. package/dist/packages/core/src/application/use-cases/security/get-security-state.use-case.d.ts +0 -36
  368. package/dist/packages/core/src/application/use-cases/security/get-security-state.use-case.d.ts.map +0 -1
  369. package/dist/packages/core/src/application/use-cases/security/get-security-state.use-case.js +0 -76
  370. package/dist/packages/core/src/application/use-cases/security/record-security-event.use-case.d.ts +0 -14
  371. package/dist/packages/core/src/application/use-cases/security/record-security-event.use-case.d.ts.map +0 -1
  372. package/dist/packages/core/src/application/use-cases/security/record-security-event.use-case.js +0 -46
  373. package/dist/packages/core/src/domain/errors/security-violation.error.d.ts +0 -15
  374. package/dist/packages/core/src/domain/errors/security-violation.error.d.ts.map +0 -1
  375. package/dist/packages/core/src/domain/errors/security-violation.error.js +0 -20
  376. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/security-event.mapper.d.ts +0 -44
  377. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/security-event.mapper.d.ts.map +0 -1
  378. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/security-event.mapper.js +0 -55
  379. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-security-settings-columns.d.ts +0 -18
  380. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-security-settings-columns.d.ts.map +0 -1
  381. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-security-settings-columns.js +0 -31
  382. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-create-security-events-table.d.ts +0 -29
  383. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-create-security-events-table.d.ts.map +0 -1
  384. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-create-security-events-table.js +0 -53
  385. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-feature-flag-supply-chain-security.d.ts +0 -16
  386. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-feature-flag-supply-chain-security.d.ts.map +0 -1
  387. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-feature-flag-supply-chain-security.js +0 -22
  388. package/dist/packages/core/src/infrastructure/repositories/sqlite-security-event.repository.d.ts +0 -24
  389. package/dist/packages/core/src/infrastructure/repositories/sqlite-security-event.repository.d.ts.map +0 -1
  390. package/dist/packages/core/src/infrastructure/repositories/sqlite-security-event.repository.js +0 -96
  391. package/dist/packages/core/src/infrastructure/services/agents/common/executors/security-constraint-validator.d.ts +0 -22
  392. package/dist/packages/core/src/infrastructure/services/agents/common/executors/security-constraint-validator.d.ts.map +0 -1
  393. package/dist/packages/core/src/infrastructure/services/agents/common/executors/security-constraint-validator.js +0 -30
  394. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/security-pre-check.d.ts +0 -59
  395. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/security-pre-check.d.ts.map +0 -1
  396. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/security-pre-check.js +0 -89
  397. package/dist/packages/core/src/infrastructure/services/security/dependency-risk-evaluator.d.ts +0 -53
  398. package/dist/packages/core/src/infrastructure/services/security/dependency-risk-evaluator.d.ts.map +0 -1
  399. package/dist/packages/core/src/infrastructure/services/security/dependency-risk-evaluator.js +0 -241
  400. package/dist/packages/core/src/infrastructure/services/security/release-integrity-evaluator.d.ts +0 -44
  401. package/dist/packages/core/src/infrastructure/services/security/release-integrity-evaluator.d.ts.map +0 -1
  402. package/dist/packages/core/src/infrastructure/services/security/release-integrity-evaluator.js +0 -194
  403. package/dist/packages/core/src/infrastructure/services/security/security-policy-file-reader.d.ts +0 -28
  404. package/dist/packages/core/src/infrastructure/services/security/security-policy-file-reader.d.ts.map +0 -1
  405. package/dist/packages/core/src/infrastructure/services/security/security-policy-file-reader.js +0 -50
  406. package/dist/packages/core/src/infrastructure/services/security/security-policy-validator.d.ts +0 -26
  407. package/dist/packages/core/src/infrastructure/services/security/security-policy-validator.d.ts.map +0 -1
  408. package/dist/packages/core/src/infrastructure/services/security/security-policy-validator.js +0 -147
  409. package/dist/packages/core/src/infrastructure/services/security/security-policy.service.d.ts +0 -44
  410. package/dist/packages/core/src/infrastructure/services/security/security-policy.service.d.ts.map +0 -1
  411. package/dist/packages/core/src/infrastructure/services/security/security-policy.service.js +0 -174
  412. package/dist/src/presentation/cli/commands/security.command.d.ts +0 -16
  413. package/dist/src/presentation/cli/commands/security.command.d.ts.map +0 -1
  414. package/dist/src/presentation/cli/commands/security.command.js +0 -133
  415. package/dist/src/presentation/web/app/actions/security.d.ts +0 -28
  416. package/dist/src/presentation/web/app/actions/security.d.ts.map +0 -1
  417. package/dist/src/presentation/web/app/actions/security.js +0 -59
  418. package/dist/src/presentation/web/components/common/repository-node/security-panel.d.ts +0 -6
  419. package/dist/src/presentation/web/components/common/repository-node/security-panel.d.ts.map +0 -1
  420. package/dist/src/presentation/web/components/common/repository-node/security-panel.js +0 -29
  421. package/dist/src/presentation/web/components/common/repository-node/security-panel.stories.d.ts +0 -10
  422. package/dist/src/presentation/web/components/common/repository-node/security-panel.stories.d.ts.map +0 -1
  423. package/dist/src/presentation/web/components/common/repository-node/security-panel.stories.js +0 -53
  424. package/dist/src/presentation/web/components/common/security-badge.d.ts +0 -7
  425. package/dist/src/presentation/web/components/common/security-badge.d.ts.map +0 -1
  426. package/dist/src/presentation/web/components/common/security-badge.js +0 -30
  427. package/dist/src/presentation/web/components/common/security-badge.stories.d.ts +0 -12
  428. package/dist/src/presentation/web/components/common/security-badge.stories.d.ts.map +0 -1
  429. package/dist/src/presentation/web/components/common/security-badge.stories.js +0 -20
  430. package/dist/src/presentation/web/components/features/settings/supply-chain-security-settings-section.d.ts +0 -6
  431. package/dist/src/presentation/web/components/features/settings/supply-chain-security-settings-section.d.ts.map +0 -1
  432. package/dist/src/presentation/web/components/features/settings/supply-chain-security-settings-section.js +0 -60
  433. package/dist/src/presentation/web/components/features/settings/supply-chain-security-settings-section.stories.d.ts +0 -14
  434. package/dist/src/presentation/web/components/features/settings/supply-chain-security-settings-section.stories.d.ts.map +0 -1
  435. package/dist/src/presentation/web/components/features/settings/supply-chain-security-settings-section.stories.js +0 -116
  436. package/web/.next/server/chunks/ssr/[root-of-the-server]__81a09b67._.js +0 -4
  437. package/web/.next/server/chunks/ssr/[root-of-the-server]__81a09b67._.js.map +0 -1
  438. package/web/.next/server/chunks/ssr/[root-of-the-server]__c21d1dbd._.js +0 -3
  439. package/web/.next/server/chunks/ssr/[root-of-the-server]__c21d1dbd._.js.map +0 -1
  440. package/web/.next/server/chunks/ssr/_4fe617d4._.js +0 -3
  441. package/web/.next/server/chunks/ssr/_4fe617d4._.js.map +0 -1
  442. package/web/.next/server/chunks/ssr/_6bb86205._.js +0 -3
  443. package/web/.next/server/chunks/ssr/_6bb86205._.js.map +0 -1
  444. package/web/.next/server/chunks/ssr/_88a1b163._.js.map +0 -1
  445. package/web/.next/server/chunks/ssr/_a54e0548._.js +0 -3
  446. package/web/.next/server/chunks/ssr/_a54e0548._.js.map +0 -1
  447. package/web/.next/server/chunks/ssr/_ac5961de._.js.map +0 -1
  448. package/web/.next/server/chunks/ssr/_f8c78107._.js +0 -3
  449. package/web/.next/server/chunks/ssr/_f8c78107._.js.map +0 -1
  450. package/web/.next/static/chunks/04dacffc25b1aeca.js +0 -1
  451. package/web/.next/static/chunks/12d22b6a19665808.js +0 -1
  452. package/web/.next/static/chunks/1d538b66f81665fc.js +0 -1
  453. package/web/.next/static/chunks/23fab49df408d779.js +0 -1
  454. package/web/.next/static/chunks/6264451e0550022f.js +0 -7
  455. package/web/.next/static/chunks/7260582ee8e58549.js +0 -1
  456. package/web/.next/static/chunks/769f6939e7a4698a.js +0 -1
  457. package/web/.next/static/chunks/7851e1a90ca04c06.js +0 -1
  458. package/web/.next/static/chunks/84c1ad7ae5fc042d.js +0 -1
  459. package/web/.next/static/chunks/8d1446e71ffa2ed7.js +0 -5
  460. package/web/.next/static/chunks/cd8143002baa074e.js +0 -1
  461. package/web/.next/static/chunks/f0c985090f51835b.css +0 -1
  462. package/web/.next/static/chunks/f4ff691fdf16fb25.js +0 -1
  463. /package/web/.next/static/{Ed9rVk6pcfyq98DN_pOrK → s9Tl6ka-fGtxB11GslSv7}/_buildManifest.js +0 -0
  464. /package/web/.next/static/{Ed9rVk6pcfyq98DN_pOrK → s9Tl6ka-fGtxB11GslSv7}/_clientMiddlewareManifest.json +0 -0
  465. /package/web/.next/static/{Ed9rVk6pcfyq98DN_pOrK → s9Tl6ka-fGtxB11GslSv7}/_ssgManifest.js +0 -0
@@ -0,0 +1,3 @@
1
+ module.exports=[10606,a=>{"use strict";var b=a.i(51969);a.s(["CheckIcon",()=>b.default])},18615,a=>{"use strict";let b=(0,a.i(25700).default)("rotate-ccw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);a.s(["RotateCcw",()=>b],18615)},69428,a=>{"use strict";let b=(0,a.i(25700).default)("clipboard-list",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]]);a.s(["ClipboardList",()=>b],69428)},83886,a=>{"use strict";let b=(0,a.i(25700).default)("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);a.s(["Eye",()=>b],83886)},96853,a=>{"use strict";let b=(0,a.i(25700).default)("minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);a.s(["default",()=>b])},41274,a=>{"use strict";let b=(0,a.i(25700).default)("eye-off",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);a.s(["EyeOff",()=>b],41274)},42527,a=>{"use strict";let b=(0,a.i(25700).default)("folder-plus",[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);a.s(["FolderPlus",()=>b],42527)},72358,a=>{"use strict";var b=a.i(89111);let c=(0,b.createServerReference)("402c21b8b8b3488320789af44e231a3b03336742fb",b.callServer,void 0,b.findSourceMapURL,"addRepository");a.s(["addRepository",()=>c])},38702,16223,a=>{"use strict";var b=a.i(41176),c=a.i(85536);function d({icon:a,title:d,description:e,action:f,className:g,...h}){return(0,b.jsxs)("div",{className:(0,c.cn)("flex flex-col items-center gap-4 px-4 py-12 text-center",g),...h,children:[a?(0,b.jsx)("div",{className:"text-muted-foreground",children:a}):null,(0,b.jsx)("h3",{className:"text-lg font-semibold",children:d}),e?(0,b.jsx)("p",{className:"text-muted-foreground max-w-md text-sm",children:e}):null,f?(0,b.jsx)("div",{className:"mt-2",children:f}):null]})}a.s(["EmptyState",()=>d],16223),a.s([],38702)},79794,a=>{"use strict";let b=(0,a.i(25700).default)("sliders-horizontal",[["path",{d:"M10 5H3",key:"1qgfaw"}],["path",{d:"M12 19H3",key:"yhmn1j"}],["path",{d:"M14 3v4",key:"1sua03"}],["path",{d:"M16 17v4",key:"1q0r14"}],["path",{d:"M21 12h-9",key:"1o4lsq"}],["path",{d:"M21 19h-5",key:"1rlt1p"}],["path",{d:"M21 5h-7",key:"1oszz2"}],["path",{d:"M8 10v4",key:"tgpxqk"}],["path",{d:"M8 12H3",key:"a7s4jb"}]]);a.s(["SlidersHorizontal",()=>b],79794)},93193,61189,a=>{"use strict";var b=a.i(91857);function c(a,b,c,d){return"processing"===b?{label:"In Progress",dotClass:"bg-violet-500",borderClass:"",pulse:!0,previewDisabled:!0}:"awaiting_input"===b?{label:"Action Required",dotClass:"bg-amber-500",borderClass:"border-amber-500/60",pulse:!0,previewDisabled:!0}:"interrupted"===d?{label:"Interrupted",dotClass:"bg-amber-500",borderClass:"border-amber-500/60",pulse:!1,previewDisabled:!0}:"failed"===d?{label:"Failed",dotClass:"bg-red-500",borderClass:"border-red-500/60",pulse:!1,previewDisabled:!0}:"building"===d?{label:"In Progress",dotClass:"bg-violet-500",borderClass:"",pulse:!0,previewDisabled:!0}:c?{label:"Live",dotClass:"bg-emerald-500",borderClass:"",pulse:!0,previewDisabled:!1}:"Error"===a?{label:"Error",dotClass:"bg-red-500",borderClass:"border-red-500/60",pulse:!1,previewDisabled:!0}:{label:"Ready",dotClass:"bg-sky-500",borderClass:"",pulse:!1,previewDisabled:!1}}a.s(["TriangleAlert",()=>b.default],93193),a.s(["deriveAppLiveStatus",()=>c],61189)},33185,a=>{"use strict";var b=a.i(89111);let c=(0,b.createServerReference)("40b8ce83c1d49acef485ad48493fec9a73813972ee",b.callServer,void 0,b.findSourceMapURL,"deleteApplication");a.s(["deleteApplication",()=>c])},57411,a=>{"use strict";var b=a.i(41176),c=a.i(44592),d=a.i(93967),e=a.i(32791),f=a.i(88064),g=a.i(82014),h=a.i(3942),i=a.i(69428),j=a.i(71716),k=a.i(72016),l=a.i(2807);a.i(90370);var m=a.i(24640),n=a.i(85536),o=a.i(89111);let p=(0,o.createServerReference)("401fd96509b2150c7fc78d04070496418625ad3bb8",o.callServer,void 0,o.findSourceMapURL,"createProjectAndFeature"),q=(0,o.createServerReference)("40e2b1ed706b39956f9d1c0c7231efa9d7c4c0760a",o.callServer,void 0,o.findSourceMapURL,"createApplication");var r=a.i(61781);a.i(307);var s=a.i(30931);a.i(48822);var t=a.i(85655),u=a.i(82934),v=a.i(75192),w=a.i(9260);let x=["application","fast","spec"],y={application:{icon:g.LayoutGrid,label:"Application",placeholder:"Build a modern e-commerce storefront with product catalog...",suggestions:["A landing page with hero, features, and pricing sections","Full-stack SaaS app with auth, billing, and dashboard","Mobile-first social media app with real-time chat","Personal portfolio with blog and project showcase"]},fast:{icon:h.Zap,label:"Fast",placeholder:"Add a dark mode toggle to the settings page...",suggestions:["Add pagination to the users list endpoint","Fix the broken logout redirect","Add input validation to the signup form","Refactor the API error handling middleware"]},spec:{icon:i.ClipboardList,label:"Spec Driven",placeholder:"Implement a role-based access control system with audit logging...",suggestions:["OAuth2 authentication with SSO and MFA support","Event-driven notification system with email and push","REST API with versioning, rate limiting, and OpenAPI docs","Data pipeline with ETL, validation, and monitoring"]}};function z({onRepositorySelect:a,onApplicationCreated:g,onClose:h,className:i}){let{t:o}=(0,m.useTranslation)("web"),[z,A]=(0,c.useState)(""),[B,C]=(0,c.useState)(void 0),[D,E]=(0,c.useState)(void 0),[F,G]=(0,c.useState)("application"),[H,I]=(0,c.useState)(!1),[J,K]=(0,c.useState)(null),[L,M]=(0,c.useState)(!1),N=(0,c.useRef)(null),O=(0,w.useAttachments)(),P=(0,c.useCallback)(()=>{G(a=>{let b=x.indexOf(a);return x[(b+1)%x.length]})},[]);(0,c.useEffect)(()=>{let a=a=>{"Escape"===a.key&&h&&h(),"Tab"===a.key&&a.shiftKey&&(a.preventDefault(),P())};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[h,P]);let Q=(0,c.useCallback)(async()=>{if(z.trim()&&!H){I(!0),K(null);try{if("application"===F){let a=await q({description:z.trim(),agentType:B,modelOverride:D,initialPrompt:z.trim()});if(a.error){K(a.error),I(!1);return}a.application&&g?.(a.application.id)}else{let b=await p({description:z.trim(),attachments:O.completedAttachments.map(a=>({path:a.path,name:a.name,notes:a.notes})),agentType:B,model:D,fast:"fast"===F});if(b.error){K(b.error),I(!1);return}b.repositoryPath&&a?.(b.repositoryPath),b.feature&&b.repositoryPath&&window.dispatchEvent(new CustomEvent("shep:feature-created",{detail:{featureId:b.feature.id,name:b.feature.name,description:b.feature.description,repositoryPath:b.repositoryPath}}))}}catch{K("Something went wrong. Please try again."),I(!1)}}},[z,H,F,O.completedAttachments,B,D,a,g]),R=(0,c.useCallback)(a=>{"Enter"===a.key&&(a.ctrlKey||a.metaKey)&&(a.preventDefault(),Q())},[Q]),S=(0,c.useCallback)(async()=>{try{let a=await fetch("/api/dialog/pick-files");if(!a.ok)return;let b=await a.json();if(!b.paths?.length)return;for(let a of b.paths){let b=await fetch("/api/attachments/upload-from-path",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:a,sessionId:"onboarding"})});if(!b.ok)continue;let c=await b.json();O.addAttachment(c)}}catch{}},[O.addAttachment]),T=(0,c.useCallback)(a=>{A(a),N.current?.focus()},[]),U=y[F],V=U.icon;return(0,b.jsxs)("div",{"data-testid":"control-center-empty-state",className:(0,n.cn)("relative flex h-full w-full flex-col items-center justify-center overflow-hidden px-8",i),children:[(0,b.jsx)("div",{className:"onboard-bg pointer-events-none absolute inset-0 animate-[onboard-fade-in_1.2s_ease-out_both]"}),h?(0,b.jsx)("button",{type:"button",onClick:h,"aria-label":"Close",className:"text-muted-foreground hover:text-foreground hover:bg-accent/50 absolute top-4 right-4 z-10 cursor-pointer rounded p-1.5 transition-colors",children:(0,b.jsx)(l.X,{className:"h-5 w-5"})}):null,(0,b.jsxs)("div",{className:"relative flex w-full max-w-2xl flex-col items-center",children:[(0,b.jsx)("div",{className:"mb-6 animate-[onboard-logo_0.8s_cubic-bezier(0.16,1,0.3,1)_both]",style:{animationDelay:"0ms"},children:(0,b.jsx)(t.ShepLogo,{size:72,className:"text-foreground"})}),(0,b.jsx)("h1",{className:"text-foreground animate-[onboard-fade-up_0.7s_cubic-bezier(0.16,1,0.3,1)_both] text-center text-5xl font-extralight tracking-tight",style:{animationDelay:"120ms"},children:"What do you want to build?"}),(0,b.jsx)("p",{className:"text-muted-foreground mt-3 animate-[onboard-fade-up_0.7s_cubic-bezier(0.16,1,0.3,1)_both] text-center text-lg leading-relaxed font-light",style:{animationDelay:"220ms"},children:"Describe your idea and Shep creates the project for you."}),(0,b.jsxs)("div",{className:"mt-10 w-full animate-[onboard-fade-up_0.7s_cubic-bezier(0.16,1,0.3,1)_both]",style:{animationDelay:"350ms"},children:[(0,b.jsxs)("div",{onFocus:()=>M(!0),onBlur:()=>M(!1),onDragEnter:O.handleDragEnter,onDragLeave:O.handleDragLeave,onDragOver:O.handleDragOver,onDrop:O.handleDrop,className:(0,n.cn)("flex flex-col rounded-xl border transition-all duration-200","border-border/60 bg-background shadow-sm dark:border-white/10 dark:bg-white/[0.04]",L&&"ring-ring/50 border-ring shadow-md ring-[3px] dark:border-orange-500/40 dark:ring-orange-500/25",O.isDragOver&&"border-primary/50 bg-primary/5",H&&"opacity-70"),children:[(0,b.jsx)("textarea",{ref:N,rows:2,autoFocus:!0,value:z,onChange:a=>A(a.target.value),onKeyDown:R,onPaste:O.handlePaste,placeholder:U.placeholder,disabled:H,className:"text-foreground placeholder:text-muted-foreground/60 max-h-[10rem] min-h-[4.5rem] w-full resize-none border-0 bg-transparent px-4 py-3.5 text-sm leading-relaxed focus:outline-none disabled:cursor-not-allowed"}),O.attachments.length>0?(0,b.jsx)("div",{className:"flex shrink-0 items-center gap-2.5 overflow-x-auto overflow-y-visible px-5 pt-2 pb-2",children:O.attachments.map(a=>(0,b.jsx)(s.AttachmentChip,{name:a.name,size:a.size,mimeType:a.mimeType,path:a.path,onRemove:()=>O.removeAttachment(a.id),loading:a.loading,notes:a.notes,onNotesChange:b=>O.updateNotes(a.id,b)},a.id))}):null,O.uploadError?(0,b.jsx)("p",{className:"text-destructive px-4 pb-2 text-xs",children:O.uploadError}):null,(0,b.jsxs)("div",{className:"border-border/60 flex shrink-0 items-center gap-3 border-t px-3 py-2 dark:border-white/10",children:[(0,b.jsx)(r.AgentModelPicker,{initialAgentType:B??"claude-code",initialModel:D??"claude-sonnet-4-6",mode:"override",showInstallStatus:!0,onAgentModelChange:(a,b)=>{C(a),E(b)},className:"w-55"}),(0,b.jsx)("div",{className:"flex-1"}),(0,b.jsxs)(v.DropdownMenu,{children:[(0,b.jsx)(v.DropdownMenuTrigger,{asChild:!0,children:(0,b.jsxs)("button",{type:"button","data-testid":"build-mode-selector",className:"text-muted-foreground hover:text-foreground hover:bg-accent/50 flex cursor-pointer items-center gap-1.5 rounded-md px-2 py-1 text-xs transition-colors",children:[(0,b.jsxs)("span",{className:"flex animate-[onboard-fade-up_0.25s_ease-out_both] items-center gap-1.5",children:[(0,b.jsx)(V,{className:"h-3.5 w-3.5"}),U.label]},F),(0,b.jsx)(j.ChevronDown,{className:"h-3 w-3 opacity-50"})]})}),(0,b.jsx)(v.DropdownMenuContent,{align:"end",className:"min-w-[160px]",children:x.map(a=>{let c=y[a],d=c.icon,e=F===a;return(0,b.jsxs)(v.DropdownMenuItem,{onClick:()=>G(a),"data-testid":`build-mode-${a}`,className:"flex items-center gap-2",children:[(0,b.jsx)(d,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{className:"flex-1",children:c.label}),e?(0,b.jsx)(k.Check,{className:"text-foreground h-3.5 w-3.5"}):null]},a)})})]}),(0,b.jsxs)(u.Tooltip,{children:[(0,b.jsx)(u.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button",onClick:S,disabled:H,"aria-label":o("chat.attachFiles"),className:"text-muted-foreground hover:text-foreground cursor-pointer rounded p-1 transition-colors disabled:opacity-50",children:(0,b.jsx)(e.Paperclip,{className:"h-4 w-4"})})}),(0,b.jsx)(u.TooltipContent,{side:"top",children:o("chat.attachFiles")})]}),(0,b.jsx)("button",{type:"button",onClick:Q,disabled:!z.trim()||H,className:(0,n.cn)("bg-foreground text-background inline-flex h-8 w-8 shrink-0 cursor-pointer items-center justify-center rounded-lg","hover:bg-foreground/90 disabled:pointer-events-none disabled:opacity-30","transition-all duration-150"),children:H?(0,b.jsx)(f.Loader2,{className:"h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(d.SendHorizontal,{className:"h-3.5 w-3.5"})})]})]}),J?(0,b.jsx)("p",{className:"text-destructive mt-2 text-center text-sm",children:J}):null]}),(0,b.jsx)("div",{className:"mt-6 flex animate-[onboard-fade-up_0.4s_ease-out_both] flex-wrap justify-center gap-2",children:U.suggestions.map(a=>(0,b.jsx)("button",{type:"button",onClick:()=>T(a),disabled:H,className:"text-muted-foreground hover:text-foreground border-border/60 hover:border-border hover:bg-accent/50 cursor-pointer rounded-full border px-3.5 py-1.5 text-xs transition-all duration-150 disabled:opacity-50 dark:border-white/10 dark:hover:border-white/20 dark:hover:bg-white/[0.06]",children:a},a))},F)]})]})}a.s(["ControlCenterEmptyState",()=>z],57411)}];
2
+
3
+ //# sourceMappingURL=_dfbeab70._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/rotate-ccw.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/clipboard-list.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/eye.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/minus.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/eye-off.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/folder-plus.ts","../../../../../../../src/presentation/web/app/actions/data%3A4d8e31%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/common/empty-state/empty-state.tsx","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/sliders-horizontal.ts","../../../../../../../src/presentation/web/lib/derive-app-status.ts","../../../../../../../src/presentation/web/app/actions/data%3Ab9cc75%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/features/control-center/control-center-empty-state.tsx","../../../../../../../src/presentation/web/app/actions/data%3A80068e%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A2e402c%20%3Ctext/javascript%3E"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8', key: '1357e3' }],\n ['path', { d: 'M3 3v5h5', key: '1xhq8a' }],\n];\n\n/**\n * @component @name RotateCcw\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMyAxMmE5IDkgMCAxIDAgOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4IiAvPgogIDxwYXRoIGQ9Ik0zIDN2NWg1IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/rotate-ccw\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst RotateCcw = createLucideIcon('rotate-ccw', __iconNode);\n\nexport default RotateCcw;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '8', height: '4', x: '8', y: '2', rx: '1', ry: '1', key: 'tgr4d6' }],\n [\n 'path',\n {\n d: 'M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2',\n key: '116196',\n },\n ],\n ['path', { d: 'M12 11h4', key: '1jrz19' }],\n ['path', { d: 'M12 16h4', key: 'n85exb' }],\n ['path', { d: 'M8 11h.01', key: '1dfujw' }],\n ['path', { d: 'M8 16h.01', key: '18s6g9' }],\n];\n\n/**\n * @component @name ClipboardList\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iOCIgaGVpZ2h0PSI0IiB4PSI4IiB5PSIyIiByeD0iMSIgcnk9IjEiIC8+CiAgPHBhdGggZD0iTTE2IDRoMmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmgyIiAvPgogIDxwYXRoIGQ9Ik0xMiAxMWg0IiAvPgogIDxwYXRoIGQ9Ik0xMiAxNmg0IiAvPgogIDxwYXRoIGQ9Ik04IDExaC4wMSIgLz4KICA8cGF0aCBkPSJNOCAxNmguMDEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/clipboard-list\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ClipboardList = createLucideIcon('clipboard-list', __iconNode);\n\nexport default ClipboardList;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0',\n key: '1nclc0',\n },\n ],\n ['circle', { cx: '12', cy: '12', r: '3', key: '1v7zrd' }],\n];\n\n/**\n * @component @name Eye\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMi4wNjIgMTIuMzQ4YTEgMSAwIDAgMSAwLS42OTYgMTAuNzUgMTAuNzUgMCAwIDEgMTkuODc2IDAgMSAxIDAgMCAxIDAgLjY5NiAxMC43NSAxMC43NSAwIDAgMS0xOS44NzYgMCIgLz4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIzIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/eye\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Eye = createLucideIcon('eye', __iconNode);\n\nexport default Eye;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M5 12h14', key: '1ays0h' }]];\n\n/**\n * @component @name Minus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSAxMmgxNCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/minus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Minus = createLucideIcon('minus', __iconNode);\n\nexport default Minus;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49',\n key: 'ct8e1f',\n },\n ],\n ['path', { d: 'M14.084 14.158a3 3 0 0 1-4.242-4.242', key: '151rxh' }],\n [\n 'path',\n {\n d: 'M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143',\n key: '13bj9a',\n },\n ],\n ['path', { d: 'm2 2 20 20', key: '1ooewy' }],\n];\n\n/**\n * @component @name EyeOff\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAuNzMzIDUuMDc2YTEwLjc0NCAxMC43NDQgMCAwIDEgMTEuMjA1IDYuNTc1IDEgMSAwIDAgMSAwIC42OTYgMTAuNzQ3IDEwLjc0NyAwIDAgMS0xLjQ0NCAyLjQ5IiAvPgogIDxwYXRoIGQ9Ik0xNC4wODQgMTQuMTU4YTMgMyAwIDAgMS00LjI0Mi00LjI0MiIgLz4KICA8cGF0aCBkPSJNMTcuNDc5IDE3LjQ5OWExMC43NSAxMC43NSAwIDAgMS0xNS40MTctNS4xNTEgMSAxIDAgMCAxIDAtLjY5NiAxMC43NSAxMC43NSAwIDAgMSA0LjQ0Ni01LjE0MyIgLz4KICA8cGF0aCBkPSJtMiAyIDIwIDIwIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/eye-off\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst EyeOff = createLucideIcon('eye-off', __iconNode);\n\nexport default EyeOff;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 10v6', key: '1bos4e' }],\n ['path', { d: 'M9 13h6', key: '1uhe8q' }],\n [\n 'path',\n {\n d: 'M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z',\n key: '1kt360',\n },\n ],\n];\n\n/**\n * @component @name FolderPlus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTB2NiIgLz4KICA8cGF0aCBkPSJNOSAxM2g2IiAvPgogIDxwYXRoIGQ9Ik0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/folder-plus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FolderPlus = createLucideIcon('folder-plus', __iconNode);\n\nexport default FolderPlus;\n","/* __next_internal_action_entry_do_not_use__ [{\"402c21b8b8b3488320789af44e231a3b03336742fb\":\"addRepository\"},\"src/presentation/web/app/actions/add-repository.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"402c21b8b8b3488320789af44e231a3b03336742fb\",callServer,void 0,findSourceMapURL,\"addRepository\");export{$$RSC_SERVER_ACTION_0 as addRepository};","import type { ReactNode, HTMLAttributes } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface EmptyStateProps extends HTMLAttributes<HTMLDivElement> {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n}\n\nexport function EmptyState({\n icon,\n title,\n description,\n action,\n className,\n ...props\n}: EmptyStateProps) {\n return (\n <div\n className={cn('flex flex-col items-center gap-4 px-4 py-12 text-center', className)}\n {...props}\n >\n {icon ? <div className=\"text-muted-foreground\">{icon}</div> : null}\n <h3 className=\"text-lg font-semibold\">{title}</h3>\n {description ? <p className=\"text-muted-foreground max-w-md text-sm\">{description}</p> : null}\n {action ? <div className=\"mt-2\">{action}</div> : null}\n </div>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M10 5H3', key: '1qgfaw' }],\n ['path', { d: 'M12 19H3', key: 'yhmn1j' }],\n ['path', { d: 'M14 3v4', key: '1sua03' }],\n ['path', { d: 'M16 17v4', key: '1q0r14' }],\n ['path', { d: 'M21 12h-9', key: '1o4lsq' }],\n ['path', { d: 'M21 19h-5', key: '1rlt1p' }],\n ['path', { d: 'M21 5h-7', key: '1oszz2' }],\n ['path', { d: 'M8 10v4', key: 'tgpxqk' }],\n ['path', { d: 'M8 12H3', key: 'a7s4jb' }],\n];\n\n/**\n * @component @name SlidersHorizontal\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAgNUgzIiAvPgogIDxwYXRoIGQ9Ik0xMiAxOUgzIiAvPgogIDxwYXRoIGQ9Ik0xNCAzdjQiIC8+CiAgPHBhdGggZD0iTTE2IDE3djQiIC8+CiAgPHBhdGggZD0iTTIxIDEyaC05IiAvPgogIDxwYXRoIGQ9Ik0yMSAxOWgtNSIgLz4KICA8cGF0aCBkPSJNMjEgNWgtNyIgLz4KICA8cGF0aCBkPSJNOCAxMHY0IiAvPgogIDxwYXRoIGQ9Ik04IDEySDMiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/sliders-horizontal\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst SlidersHorizontal = createLucideIcon('sliders-horizontal', __iconNode);\n\nexport default SlidersHorizontal;\n","/**\n * Shared status derivation for application cards, canvas nodes, and\n * the application page status pill.\n *\n * Priority (highest wins):\n *\n * - `processing` → \"In Progress\" (agent actively running a turn)\n * - `awaiting_input` → \"Action Required\" (agent blocked on user input)\n * - effectiveStatus → from use case (interrupted/failed/running)\n * - deployment live → \"Live\" (dev server running)\n * - persisted Error → \"Error\"\n * - otherwise → \"Ready\" (idle, no issues)\n */\n\nexport interface AppLiveStatus {\n label: string;\n dotClass: string;\n borderClass: string;\n pulse: boolean;\n /** Whether the preview/deploy action should be disabled in this state. */\n previewDisabled: boolean;\n}\n\nexport function deriveAppLiveStatus(\n persistedStatus: string,\n turnStatus: string,\n hasDeployment: boolean,\n effectiveStatus?: string\n): AppLiveStatus {\n // Live turn status takes highest priority (real-time SSE)\n if (turnStatus === 'processing') {\n return {\n label: 'In Progress',\n dotClass: 'bg-violet-500',\n borderClass: '',\n pulse: true,\n previewDisabled: true,\n };\n }\n if (turnStatus === 'awaiting_input') {\n return {\n label: 'Action Required',\n dotClass: 'bg-amber-500',\n borderClass: 'border-amber-500/60',\n pulse: true,\n previewDisabled: true,\n };\n }\n\n // Use case-computed effective status (from workflow steps)\n if (effectiveStatus === 'interrupted') {\n return {\n label: 'Interrupted',\n dotClass: 'bg-amber-500',\n borderClass: 'border-amber-500/60',\n pulse: false,\n previewDisabled: true,\n };\n }\n if (effectiveStatus === 'failed') {\n return {\n label: 'Failed',\n dotClass: 'bg-red-500',\n borderClass: 'border-red-500/60',\n pulse: false,\n previewDisabled: true,\n };\n }\n if (effectiveStatus === 'building') {\n return {\n label: 'In Progress',\n dotClass: 'bg-violet-500',\n borderClass: '',\n pulse: true,\n previewDisabled: true,\n };\n }\n\n // Deployment state\n if (hasDeployment) {\n return {\n label: 'Live',\n dotClass: 'bg-emerald-500',\n borderClass: '',\n pulse: true,\n previewDisabled: false,\n };\n }\n\n // Persisted entity status\n if (persistedStatus === 'Error') {\n return {\n label: 'Error',\n dotClass: 'bg-red-500',\n borderClass: 'border-red-500/60',\n pulse: false,\n previewDisabled: true,\n };\n }\n\n return {\n label: 'Ready',\n dotClass: 'bg-sky-500',\n borderClass: '',\n pulse: false,\n previewDisabled: false,\n };\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40b8ce83c1d49acef485ad48493fec9a73813972ee\":\"deleteApplication\"},\"src/presentation/web/app/actions/delete-application.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40b8ce83c1d49acef485ad48493fec9a73813972ee\",callServer,void 0,findSourceMapURL,\"deleteApplication\");export{$$RSC_SERVER_ACTION_0 as deleteApplication};","'use client';\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\nimport {\n SendHorizontal,\n Paperclip,\n Loader2,\n LayoutGrid,\n Zap,\n ClipboardList,\n ChevronDown,\n Check,\n X,\n} from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { cn } from '@/lib/utils';\nimport { createProjectAndFeature } from '@/app/actions/create-project-and-feature';\nimport { createApplication } from '@/app/actions/create-application';\nimport { AgentModelPicker } from '@/components/features/settings/AgentModelPicker';\nimport { AttachmentChip } from '@/components/common/attachment-chip';\nimport { ShepLogo } from '@/components/common/shep-logo';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { useAttachments } from '@/hooks/use-attachments';\n\ntype BuildMode = 'application' | 'fast' | 'spec';\n\nconst BUILD_MODES: BuildMode[] = ['application', 'fast', 'spec'];\n\nconst BUILD_MODE_CONFIG: Record<\n BuildMode,\n {\n icon: React.ElementType;\n label: string;\n placeholder: string;\n suggestions: string[];\n }\n> = {\n application: {\n icon: LayoutGrid,\n label: 'Application',\n placeholder: 'Build a modern e-commerce storefront with product catalog...',\n suggestions: [\n 'A landing page with hero, features, and pricing sections',\n 'Full-stack SaaS app with auth, billing, and dashboard',\n 'Mobile-first social media app with real-time chat',\n 'Personal portfolio with blog and project showcase',\n ],\n },\n fast: {\n icon: Zap,\n label: 'Fast',\n placeholder: 'Add a dark mode toggle to the settings page...',\n suggestions: [\n 'Add pagination to the users list endpoint',\n 'Fix the broken logout redirect',\n 'Add input validation to the signup form',\n 'Refactor the API error handling middleware',\n ],\n },\n spec: {\n icon: ClipboardList,\n label: 'Spec Driven',\n placeholder: 'Implement a role-based access control system with audit logging...',\n suggestions: [\n 'OAuth2 authentication with SSO and MFA support',\n 'Event-driven notification system with email and push',\n 'REST API with versioning, rate limiting, and OpenAPI docs',\n 'Data pipeline with ETL, validation, and monitoring',\n ],\n },\n};\n\nexport interface ControlCenterEmptyStateProps {\n onRepositorySelect?: (path: string) => void;\n onApplicationCreated?: (applicationId: string) => void;\n onClose?: () => void;\n className?: string;\n}\n\nexport function ControlCenterEmptyState({\n onRepositorySelect,\n onApplicationCreated,\n onClose,\n className,\n}: ControlCenterEmptyStateProps) {\n const { t } = useTranslation('web');\n const [description, setDescription] = useState('');\n const [overrideAgent, setOverrideAgent] = useState<string | undefined>(undefined);\n const [overrideModel, setOverrideModel] = useState<string | undefined>(undefined);\n const [buildMode, setBuildMode] = useState<BuildMode>('application');\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [isFocused, setIsFocused] = useState(false);\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const att = useAttachments();\n\n // Circular mode switching with Shift+Tab, close overlay with Escape\n const cycleBuildMode = useCallback(() => {\n setBuildMode((prev) => {\n const idx = BUILD_MODES.indexOf(prev);\n return BUILD_MODES[(idx + 1) % BUILD_MODES.length];\n });\n }, []);\n\n useEffect(() => {\n const handleGlobalKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && onClose) onClose();\n if (e.key === 'Tab' && e.shiftKey) {\n e.preventDefault();\n cycleBuildMode();\n }\n };\n window.addEventListener('keydown', handleGlobalKeyDown);\n return () => window.removeEventListener('keydown', handleGlobalKeyDown);\n }, [onClose, cycleBuildMode]);\n\n const handleSubmit = useCallback(async () => {\n if (!description.trim() || submitting) return;\n\n setSubmitting(true);\n setError(null);\n\n try {\n if (buildMode === 'application') {\n // The server action creates the app AND synchronously posts the\n // user's prompt as the first interactive chat message, so when we\n // navigate, /application/[id] SSR-loads chat state and the message\n // is visible on first paint. No prompt in the URL, no extra\n // round trip on the client.\n const result = await createApplication({\n description: description.trim(),\n agentType: overrideAgent,\n modelOverride: overrideModel,\n initialPrompt: description.trim(),\n });\n\n if (result.error) {\n setError(result.error);\n setSubmitting(false);\n return;\n }\n\n if (result.application) {\n onApplicationCreated?.(result.application.id);\n }\n } else {\n const result = await createProjectAndFeature({\n description: description.trim(),\n attachments: att.completedAttachments.map((a) => ({\n path: a.path,\n name: a.name,\n notes: a.notes,\n })),\n agentType: overrideAgent,\n model: overrideModel,\n fast: buildMode === 'fast',\n });\n\n if (result.error) {\n setError(result.error);\n setSubmitting(false);\n return;\n }\n\n if (result.repositoryPath) {\n onRepositorySelect?.(result.repositoryPath);\n }\n\n if (result.feature && result.repositoryPath) {\n window.dispatchEvent(\n new CustomEvent('shep:feature-created', {\n detail: {\n featureId: result.feature.id,\n name: result.feature.name,\n description: result.feature.description,\n repositoryPath: result.repositoryPath,\n },\n })\n );\n }\n }\n } catch {\n setError('Something went wrong. Please try again.');\n setSubmitting(false);\n }\n }, [\n description,\n submitting,\n buildMode,\n att.completedAttachments,\n overrideAgent,\n overrideModel,\n onRepositorySelect,\n onApplicationCreated,\n ]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && (e.ctrlKey || e.metaKey)) {\n e.preventDefault();\n handleSubmit();\n }\n },\n [handleSubmit]\n );\n\n const handlePickFiles = useCallback(async () => {\n try {\n const res = await fetch('/api/dialog/pick-files');\n if (!res.ok) return;\n const data = (await res.json()) as { paths?: string[] };\n if (!data.paths?.length) return;\n for (const filePath of data.paths) {\n const uploadRes = await fetch('/api/attachments/upload-from-path', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path: filePath, sessionId: 'onboarding' }),\n });\n if (!uploadRes.ok) continue;\n const uploaded = (await uploadRes.json()) as {\n id: string;\n name: string;\n size: number;\n mimeType: string;\n path: string;\n };\n att.addAttachment(uploaded);\n }\n } catch {\n // Native picker not available — ignore\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- att.addAttachment is stable\n }, [att.addAttachment]);\n\n const handleSuggestionClick = useCallback((suggestion: string) => {\n setDescription(suggestion);\n textareaRef.current?.focus();\n }, []);\n\n const modeConfig = BUILD_MODE_CONFIG[buildMode];\n const ModeIcon = modeConfig.icon;\n\n return (\n <div\n data-testid=\"control-center-empty-state\"\n className={cn(\n 'relative flex h-full w-full flex-col items-center justify-center overflow-hidden px-8',\n className\n )}\n >\n {/* Gradient background — covers canvas dots */}\n <div className=\"onboard-bg pointer-events-none absolute inset-0 animate-[onboard-fade-in_1.2s_ease-out_both]\" />\n\n {/* Close button — only shown when used as overlay */}\n {onClose ? (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"text-muted-foreground hover:text-foreground hover:bg-accent/50 absolute top-4 right-4 z-10 cursor-pointer rounded p-1.5 transition-colors\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n ) : null}\n\n <div className=\"relative flex w-full max-w-2xl flex-col items-center\">\n {/* Shep Logo */}\n <div\n className=\"mb-6 animate-[onboard-logo_0.8s_cubic-bezier(0.16,1,0.3,1)_both]\"\n style={{ animationDelay: '0ms' }}\n >\n <ShepLogo size={72} className=\"text-foreground\" />\n </div>\n\n {/* Hero text */}\n <h1\n className=\"text-foreground animate-[onboard-fade-up_0.7s_cubic-bezier(0.16,1,0.3,1)_both] text-center text-5xl font-extralight tracking-tight\"\n style={{ animationDelay: '120ms' }}\n >\n What do you want to build?\n </h1>\n <p\n className=\"text-muted-foreground mt-3 animate-[onboard-fade-up_0.7s_cubic-bezier(0.16,1,0.3,1)_both] text-center text-lg leading-relaxed font-light\"\n style={{ animationDelay: '220ms' }}\n >\n Describe your idea and Shep creates the project for you.\n </p>\n\n {/* Prompt box */}\n <div\n className=\"mt-10 w-full animate-[onboard-fade-up_0.7s_cubic-bezier(0.16,1,0.3,1)_both]\"\n style={{ animationDelay: '350ms' }}\n >\n <div\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onDragEnter={att.handleDragEnter}\n onDragLeave={att.handleDragLeave}\n onDragOver={att.handleDragOver}\n onDrop={att.handleDrop}\n className={cn(\n 'flex flex-col rounded-xl border transition-all duration-200',\n 'border-border/60 bg-background shadow-sm dark:border-white/10 dark:bg-white/[0.04]',\n isFocused &&\n 'ring-ring/50 border-ring shadow-md ring-[3px] dark:border-orange-500/40 dark:ring-orange-500/25',\n att.isDragOver && 'border-primary/50 bg-primary/5',\n submitting && 'opacity-70'\n )}\n >\n {/* Textarea — supports paste for images */}\n <textarea\n ref={textareaRef}\n rows={2}\n autoFocus\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n onKeyDown={handleKeyDown}\n onPaste={att.handlePaste}\n placeholder={modeConfig.placeholder}\n disabled={submitting}\n className=\"text-foreground placeholder:text-muted-foreground/60 max-h-[10rem] min-h-[4.5rem] w-full resize-none border-0 bg-transparent px-4 py-3.5 text-sm leading-relaxed focus:outline-none disabled:cursor-not-allowed\"\n />\n\n {/* Attachment chips */}\n {att.attachments.length > 0 ? (\n <div className=\"flex shrink-0 items-center gap-2.5 overflow-x-auto overflow-y-visible px-5 pt-2 pb-2\">\n {att.attachments.map((file) => (\n <AttachmentChip\n key={file.id}\n name={file.name}\n size={file.size}\n mimeType={file.mimeType}\n path={file.path}\n onRemove={() => att.removeAttachment(file.id)}\n loading={file.loading}\n notes={file.notes}\n onNotesChange={(notes) => att.updateNotes(file.id, notes)}\n />\n ))}\n </div>\n ) : null}\n\n {/* Upload error */}\n {att.uploadError ? (\n <p className=\"text-destructive px-4 pb-2 text-xs\">{att.uploadError}</p>\n ) : null}\n\n {/* Controls bar */}\n <div className=\"border-border/60 flex shrink-0 items-center gap-3 border-t px-3 py-2 dark:border-white/10\">\n <AgentModelPicker\n initialAgentType={overrideAgent ?? 'claude-code'}\n initialModel={overrideModel ?? 'claude-sonnet-4-6'}\n mode=\"override\"\n showInstallStatus\n onAgentModelChange={(agent, model) => {\n setOverrideAgent(agent);\n setOverrideModel(model);\n }}\n className=\"w-55\"\n />\n <div className=\"flex-1\" />\n\n {/* Build mode dropdown — Shift+Tab to cycle */}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n data-testid=\"build-mode-selector\"\n className=\"text-muted-foreground hover:text-foreground hover:bg-accent/50 flex cursor-pointer items-center gap-1.5 rounded-md px-2 py-1 text-xs transition-colors\"\n >\n <span\n key={buildMode}\n className=\"flex animate-[onboard-fade-up_0.25s_ease-out_both] items-center gap-1.5\"\n >\n <ModeIcon className=\"h-3.5 w-3.5\" />\n {modeConfig.label}\n </span>\n <ChevronDown className=\"h-3 w-3 opacity-50\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"min-w-[160px]\">\n {BUILD_MODES.map((mode) => {\n const cfg = BUILD_MODE_CONFIG[mode];\n const Icon = cfg.icon;\n const isActive = buildMode === mode;\n return (\n <DropdownMenuItem\n key={mode}\n onClick={() => setBuildMode(mode)}\n data-testid={`build-mode-${mode}`}\n className=\"flex items-center gap-2\"\n >\n <Icon className=\"h-3.5 w-3.5\" />\n <span className=\"flex-1\">{cfg.label}</span>\n {isActive ? <Check className=\"text-foreground h-3.5 w-3.5\" /> : null}\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={handlePickFiles}\n disabled={submitting}\n aria-label={t('chat.attachFiles')}\n className=\"text-muted-foreground hover:text-foreground cursor-pointer rounded p-1 transition-colors disabled:opacity-50\"\n >\n <Paperclip className=\"h-4 w-4\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">{t('chat.attachFiles')}</TooltipContent>\n </Tooltip>\n\n <button\n type=\"button\"\n onClick={handleSubmit}\n disabled={!description.trim() || submitting}\n className={cn(\n 'bg-foreground text-background inline-flex h-8 w-8 shrink-0 cursor-pointer items-center justify-center rounded-lg',\n 'hover:bg-foreground/90 disabled:pointer-events-none disabled:opacity-30',\n 'transition-all duration-150'\n )}\n >\n {submitting ? (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <SendHorizontal className=\"h-3.5 w-3.5\" />\n )}\n </button>\n </div>\n </div>\n\n {error ? <p className=\"text-destructive mt-2 text-center text-sm\">{error}</p> : null}\n </div>\n\n {/* Suggestion chips — re-animate on mode change */}\n <div\n key={buildMode}\n className=\"mt-6 flex animate-[onboard-fade-up_0.4s_ease-out_both] flex-wrap justify-center gap-2\"\n >\n {modeConfig.suggestions.map((suggestion) => (\n <button\n key={suggestion}\n type=\"button\"\n onClick={() => handleSuggestionClick(suggestion)}\n disabled={submitting}\n className=\"text-muted-foreground hover:text-foreground border-border/60 hover:border-border hover:bg-accent/50 cursor-pointer rounded-full border px-3.5 py-1.5 text-xs transition-all duration-150 disabled:opacity-50 dark:border-white/10 dark:hover:border-white/20 dark:hover:bg-white/[0.06]\"\n >\n {suggestion}\n </button>\n ))}\n </div>\n </div>\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"401fd96509b2150c7fc78d04070496418625ad3bb8\":\"createProjectAndFeature\"},\"src/presentation/web/app/actions/create-project-and-feature.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"401fd96509b2150c7fc78d04070496418625ad3bb8\",callServer,void 0,findSourceMapURL,\"createProjectAndFeature\");export{$$RSC_SERVER_ACTION_0 as createProjectAndFeature};","/* __next_internal_action_entry_do_not_use__ [{\"40e2b1ed706b39956f9d1c0c7231efa9d7c4c0760a\":\"createApplication\"},\"src/presentation/web/app/actions/create-application.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40e2b1ed706b39956f9d1c0c7231efa9d7c4c0760a\",callServer,void 0,findSourceMapURL,\"createApplication\");export{$$RSC_SERVER_ACTION_0 as createApplication};"],"names":[],"mappings":"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","ignoreList":[0,1,2,4,5,8]}
@@ -1,3 +1,3 @@
1
- module.exports=[71238,a=>{"use strict";let b=(0,a.i(25700).default)("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);a.s(["ExternalLink",()=>b],71238)},50490,a=>{"use strict";let b=(0,a.i(25700).default)("play",[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]]);a.s(["Play",()=>b],50490)},5698,a=>{"use strict";let b=(0,a.i(25700).default)("square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);a.s(["Square",()=>b],5698)},66691,24434,a=>{"use strict";var b=a.i(41176),c=a.i(44592),d=a.i(89111);let e=(0,d.createServerReference)("40f5248cb2ab52f92e90950166adab8424e8aceeae",d.callServer,void 0,d.findSourceMapURL,"deployFeature"),f=(0,d.createServerReference)("405e941bd11cdaf10efa56eaa45557bbf7f5bc8405",d.callServer,void 0,d.findSourceMapURL,"deployRepository"),g=(0,d.createServerReference)("40ff297753e74d45aeecb03f3360e9138b9bf4a81a",d.callServer,void 0,d.findSourceMapURL,"deployApplication"),h=(0,d.createServerReference)("402e2cf49a7bac874cea92f3c2549e65b5b57a2f8b",d.callServer,void 0,d.findSourceMapURL,"stopDeployment"),i=(0,d.createServerReference)("404906a4301ca24858fb818b20ff67306a5dc37445",d.callServer,void 0,d.findSourceMapURL,"getDeploymentStatus");var j=a.i(87139);let k={status:null,url:null,targetType:null,hydrated:!1,deployLoading:!1,stopLoading:!1,deployError:null};class l{entries=new Map;listeners=new Map;globalListeners=new Set;hydrate(a){let b=new Set;for(let c of a)b.add(c.targetId),this.update(c.targetId,{status:c.state,url:c.url,targetType:c.targetType,hydrated:!0});for(let[a,c]of this.entries)!b.has(a)&&c.hydrated&&null!==c.status?this.update(a,{status:null,url:null}):b.has(a)||c.hydrated||this.update(a,{hydrated:!0})}getEntry(a){return this.entries.get(a)??k}update(a,b){let c={...this.entries.get(a)??k,...b};this.entries.set(a,c),this.notify(a)}setStatus(a,b){null===b?this.update(a,{status:null,url:null,hydrated:!0}):this.update(a,{status:b.state,url:b.url,hydrated:!0})}subscribe(a,b){let c=this.listeners.get(a);return c||(c=new Set,this.listeners.set(a,c)),c.add(b),()=>{c?.delete(b),c?.size===0&&this.listeners.delete(a)}}subscribeAll(a){return this.globalListeners.add(a),()=>{this.globalListeners.delete(a)}}notify(a){let b=this.listeners.get(a);if(b)for(let a of b)a();for(let a of this.globalListeners)a()}}a.s(["DeploymentStatusStore",()=>l,"EMPTY_ENTRY",0,k],24434);let m=(0,j.createLogger)("[DeploymentStatusProvider]"),n=new Set(["Booting","Ready"]),o=(0,c.createContext)(null);function p({initialDeployments:a,children:d}){let j=(0,c.useRef)(null);j.current||(j.current=new l,j.current.hydrate(a));let k=j.current;(0,c.useEffect)(()=>{k.hydrate(a)},[a,k]);let p=(0,c.useRef)(new Map),q=(0,c.useCallback)(a=>{let b=p.current.get(a);b&&(clearInterval(b),p.current.delete(a))},[]),r=(0,c.useCallback)(a=>{if(p.current.has(a))return;let b=setInterval(async()=>{let b;try{b=await i(a)}catch(b){m.warn(`poll failed for "${a}"`,b),k.setStatus(a,null),q(a);return}if(!b||"Stopped"===b.state){k.setStatus(a,null),q(a);return}k.setStatus(a,b)},3e3);p.current.set(a,b)},[k,q]);(0,c.useEffect)(()=>{let a=p.current,b=k.subscribeAll(()=>{for(let[b]of a){let a=k.getEntry(b);a.status&&n.has(a.status)||q(b)}});return()=>{for(let[,c]of(b(),a))clearInterval(c);a.clear()}},[k,q]);let s=(0,c.useCallback)(a=>{!a||k.getEntry(a).hydrated||(k.update(a,{hydrated:!0}),(async()=>{try{let b=await i(a);k.setStatus(a,b),b&&n.has(b.state)&&r(a)}catch(b){m.warn(`ensureHydrated failed for "${a}"`,b)}})())},[k,r]),t=(0,c.useCallback)(async a=>{k.update(a.targetId,{deployLoading:!0,deployError:null});try{let b="feature"===a.targetType?await e(a.targetId):"application"===a.targetType?await g(a.targetId):await f(a.repositoryPath);if(!b.success)return void k.update(a.targetId,{deployLoading:!1,deployError:b.error??"An unexpected error occurred"});k.update(a.targetId,{deployLoading:!1,status:b.state??null,url:null,hydrated:!0,targetType:a.targetType}),r(a.targetId)}catch(c){let b=c instanceof Error?c.message:"An unexpected error occurred";k.update(a.targetId,{deployLoading:!1,deployError:b})}},[k,r]),u=(0,c.useCallback)(async a=>{if(a){k.update(a,{stopLoading:!0});try{(await h(a)).success?(q(a),k.update(a,{stopLoading:!1,status:null,url:null})):k.update(a,{stopLoading:!1})}catch(b){m.warn("stop error (non-critical)",b),k.update(a,{stopLoading:!1})}}},[k,q]),v=(0,c.useMemo)(()=>({store:k,deploy:t,stop:u,ensureHydrated:s}),[k,t,u,s]);return(0,b.jsx)(o.Provider,{value:v,children:d})}function q(){let a=(0,c.useContext)(o);if(!a)throw Error("useDeploymentStatusContext must be used within a <DeploymentStatusProvider>");return a}function r(){let a=(0,c.useContext)(o);return a||s}let s={store:new l,deploy:async()=>{},stop:async()=>{},ensureHydrated:()=>{}};a.s(["DeploymentStatusProvider",()=>p,"useDeploymentStatusContext",()=>q,"useDeploymentStatusContextOptional",()=>r],66691)},18662,a=>{"use strict";var b=a.i(44592),c=a.i(66691);function d(){}function e(a){let{store:e,deploy:f,stop:g,ensureHydrated:h}=(0,c.useDeploymentStatusContextOptional)(),i=a?.targetId??"",j=(0,b.useCallback)(a=>i?e.subscribe(i,a):d,[e,i]),k=(0,b.useCallback)(()=>i?e.getEntry(i):e.getEntry(""),[e,i]),l=(0,b.useSyncExternalStore)(j,k,k);return(0,b.useEffect)(()=>{i&&h(i)},[i,h]),{deploy:(0,b.useCallback)(async()=>{a&&await f(a)},[f,a]),stop:(0,b.useCallback)(async()=>{i&&await g(i)},[g,i]),deployLoading:l.deployLoading,stopLoading:l.stopLoading,deployError:l.deployError,status:l.status,url:l.url}}a.s(["useDeployAction",()=>e])},63698,a=>{"use strict";let b=(0,a.i(25700).default)("terminal",[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]]);a.s(["Terminal",()=>b],63698)},78454,a=>{"use strict";a.i(24255),a.s([])},38702,16223,a=>{"use strict";var b=a.i(41176),c=a.i(85536);function d({icon:a,title:d,description:e,action:f,className:g,...h}){return(0,b.jsxs)("div",{className:(0,c.cn)("flex flex-col items-center gap-4 px-4 py-12 text-center",g),...h,children:[a?(0,b.jsx)("div",{className:"text-muted-foreground",children:a}):null,(0,b.jsx)("h3",{className:"text-lg font-semibold",children:d}),e?(0,b.jsx)("p",{className:"text-muted-foreground max-w-md text-sm",children:e}):null,f?(0,b.jsx)("div",{className:"mt-2",children:f}):null]})}a.s(["EmptyState",()=>d],16223),a.s([],38702)},55135,75550,a=>{"use strict";var b=a.i(41176),c=a.i(85536);function d({title:a,description:d,children:e,className:f}){return(0,b.jsxs)("header",{className:(0,c.cn)("flex items-center justify-between gap-4",f),children:[(0,b.jsxs)("div",{className:"space-y-1",children:[(0,b.jsx)("h1",{className:"text-2xl font-bold tracking-tight",children:a}),d?(0,b.jsx)("p",{className:"text-muted-foreground",children:d}):null]}),e?(0,b.jsx)("div",{"data-slot":"actions",children:e}):null]})}a.s(["PageHeader",()=>d],75550),a.s([],55135)},84117,a=>{"use strict";var b=a.i(41176),c=a.i(44592),d=a.i(85536);let e=c.forwardRef(({className:a,...c},e)=>(0,b.jsx)("div",{ref:e,className:(0,d.cn)("bg-card text-card-foreground rounded-xl border shadow",a),...c}));e.displayName="Card";let f=c.forwardRef(({className:a,...c},e)=>(0,b.jsx)("div",{ref:e,className:(0,d.cn)("flex flex-col space-y-1.5 p-6",a),...c}));f.displayName="CardHeader";let g=c.forwardRef(({className:a,...c},e)=>(0,b.jsx)("div",{ref:e,className:(0,d.cn)("leading-none font-semibold tracking-tight",a),...c}));g.displayName="CardTitle";let h=c.forwardRef(({className:a,...c},e)=>(0,b.jsx)("div",{ref:e,className:(0,d.cn)("text-muted-foreground text-sm",a),...c}));h.displayName="CardDescription";let i=c.forwardRef(({className:a,...c},e)=>(0,b.jsx)("div",{ref:e,className:(0,d.cn)("p-6 pt-0",a),...c}));i.displayName="CardContent",c.forwardRef(({className:a,...c},e)=>(0,b.jsx)("div",{ref:e,className:(0,d.cn)("flex items-center p-6 pt-0",a),...c})).displayName="CardFooter",a.s(["Card",()=>e,"CardContent",()=>i,"CardDescription",()=>h,"CardHeader",()=>f,"CardTitle",()=>g])}];
1
+ module.exports=[71238,a=>{"use strict";let b=(0,a.i(25700).default)("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);a.s(["ExternalLink",()=>b],71238)},50490,a=>{"use strict";let b=(0,a.i(25700).default)("play",[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]]);a.s(["Play",()=>b],50490)},5698,a=>{"use strict";let b=(0,a.i(25700).default)("square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);a.s(["Square",()=>b],5698)},66691,24434,a=>{"use strict";var b=a.i(41176),c=a.i(44592),d=a.i(89111);let e=(0,d.createServerReference)("40ef324b5c8df3d4d9f7a55860b3e1c565ff78158c",d.callServer,void 0,d.findSourceMapURL,"deployFeature"),f=(0,d.createServerReference)("40de173f92137f456a64448e1d39e9737079d5b8d9",d.callServer,void 0,d.findSourceMapURL,"deployRepository"),g=(0,d.createServerReference)("4007e6cf85c903d65686ff4b0e96b69bb3fb8b5dd6",d.callServer,void 0,d.findSourceMapURL,"deployApplication"),h=(0,d.createServerReference)("40d2b3d3f6017dff4d6be8016943a0bc41ef6d2119",d.callServer,void 0,d.findSourceMapURL,"stopDeployment"),i=(0,d.createServerReference)("40cda6828bcd7caf3c94b1d714873a18189513dfeb",d.callServer,void 0,d.findSourceMapURL,"getDeploymentStatus");var j=a.i(87139);let k={status:null,url:null,targetType:null,hydrated:!1,deployLoading:!1,stopLoading:!1,deployError:null};class l{entries=new Map;listeners=new Map;globalListeners=new Set;hydrate(a){let b=new Set;for(let c of a)b.add(c.targetId),this.update(c.targetId,{status:c.state,url:c.url,targetType:c.targetType,hydrated:!0});for(let[a,c]of this.entries)!b.has(a)&&c.hydrated&&null!==c.status?this.update(a,{status:null,url:null}):b.has(a)||c.hydrated||this.update(a,{hydrated:!0})}getEntry(a){return this.entries.get(a)??k}update(a,b){let c={...this.entries.get(a)??k,...b};this.entries.set(a,c),this.notify(a)}setStatus(a,b){null===b?this.update(a,{status:null,url:null,hydrated:!0}):this.update(a,{status:b.state,url:b.url,hydrated:!0})}subscribe(a,b){let c=this.listeners.get(a);return c||(c=new Set,this.listeners.set(a,c)),c.add(b),()=>{c?.delete(b),c?.size===0&&this.listeners.delete(a)}}subscribeAll(a){return this.globalListeners.add(a),()=>{this.globalListeners.delete(a)}}notify(a){let b=this.listeners.get(a);if(b)for(let a of b)a();for(let a of this.globalListeners)a()}}a.s(["DeploymentStatusStore",()=>l,"EMPTY_ENTRY",0,k],24434);let m=(0,j.createLogger)("[DeploymentStatusProvider]"),n=new Set(["Booting","Ready"]),o=(0,c.createContext)(null);function p({initialDeployments:a,children:d}){let j=(0,c.useRef)(null);j.current||(j.current=new l,j.current.hydrate(a));let k=j.current;(0,c.useEffect)(()=>{k.hydrate(a)},[a,k]);let p=(0,c.useRef)(new Map),q=(0,c.useCallback)(a=>{let b=p.current.get(a);b&&(clearInterval(b),p.current.delete(a))},[]),r=(0,c.useCallback)(a=>{if(p.current.has(a))return;let b=setInterval(async()=>{let b;try{b=await i(a)}catch(b){m.warn(`poll failed for "${a}"`,b),k.setStatus(a,null),q(a);return}if(!b||"Stopped"===b.state){k.setStatus(a,null),q(a);return}k.setStatus(a,b)},3e3);p.current.set(a,b)},[k,q]);(0,c.useEffect)(()=>{let a=p.current,b=k.subscribeAll(()=>{for(let[b]of a){let a=k.getEntry(b);a.status&&n.has(a.status)||q(b)}});return()=>{for(let[,c]of(b(),a))clearInterval(c);a.clear()}},[k,q]);let s=(0,c.useCallback)(a=>{!a||k.getEntry(a).hydrated||(k.update(a,{hydrated:!0}),(async()=>{try{let b=await i(a);k.setStatus(a,b),b&&n.has(b.state)&&r(a)}catch(b){m.warn(`ensureHydrated failed for "${a}"`,b)}})())},[k,r]),t=(0,c.useCallback)(async a=>{k.update(a.targetId,{deployLoading:!0,deployError:null});try{let b="feature"===a.targetType?await e(a.targetId):"application"===a.targetType?await g(a.targetId):await f(a.repositoryPath);if(!b.success)return void k.update(a.targetId,{deployLoading:!1,deployError:b.error??"An unexpected error occurred"});k.update(a.targetId,{deployLoading:!1,status:b.state??null,url:null,hydrated:!0,targetType:a.targetType}),r(a.targetId)}catch(c){let b=c instanceof Error?c.message:"An unexpected error occurred";k.update(a.targetId,{deployLoading:!1,deployError:b})}},[k,r]),u=(0,c.useCallback)(async a=>{if(a){k.update(a,{stopLoading:!0});try{(await h(a)).success?(q(a),k.update(a,{stopLoading:!1,status:null,url:null})):k.update(a,{stopLoading:!1})}catch(b){m.warn("stop error (non-critical)",b),k.update(a,{stopLoading:!1})}}},[k,q]),v=(0,c.useMemo)(()=>({store:k,deploy:t,stop:u,ensureHydrated:s}),[k,t,u,s]);return(0,b.jsx)(o.Provider,{value:v,children:d})}function q(){let a=(0,c.useContext)(o);if(!a)throw Error("useDeploymentStatusContext must be used within a <DeploymentStatusProvider>");return a}function r(){let a=(0,c.useContext)(o);return a||s}let s={store:new l,deploy:async()=>{},stop:async()=>{},ensureHydrated:()=>{}};a.s(["DeploymentStatusProvider",()=>p,"useDeploymentStatusContext",()=>q,"useDeploymentStatusContextOptional",()=>r],66691)},18662,a=>{"use strict";var b=a.i(44592),c=a.i(66691);function d(){}function e(a){let{store:e,deploy:f,stop:g,ensureHydrated:h}=(0,c.useDeploymentStatusContextOptional)(),i=a?.targetId??"",j=(0,b.useCallback)(a=>i?e.subscribe(i,a):d,[e,i]),k=(0,b.useCallback)(()=>i?e.getEntry(i):e.getEntry(""),[e,i]),l=(0,b.useSyncExternalStore)(j,k,k);return(0,b.useEffect)(()=>{i&&h(i)},[i,h]),{deploy:(0,b.useCallback)(async()=>{a&&await f(a)},[f,a]),stop:(0,b.useCallback)(async()=>{i&&await g(i)},[g,i]),deployLoading:l.deployLoading,stopLoading:l.stopLoading,deployError:l.deployError,status:l.status,url:l.url}}a.s(["useDeployAction",()=>e])},63698,a=>{"use strict";let b=(0,a.i(25700).default)("terminal",[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]]);a.s(["Terminal",()=>b],63698)},78454,a=>{"use strict";a.i(24255),a.s([])},38702,16223,a=>{"use strict";var b=a.i(41176),c=a.i(85536);function d({icon:a,title:d,description:e,action:f,className:g,...h}){return(0,b.jsxs)("div",{className:(0,c.cn)("flex flex-col items-center gap-4 px-4 py-12 text-center",g),...h,children:[a?(0,b.jsx)("div",{className:"text-muted-foreground",children:a}):null,(0,b.jsx)("h3",{className:"text-lg font-semibold",children:d}),e?(0,b.jsx)("p",{className:"text-muted-foreground max-w-md text-sm",children:e}):null,f?(0,b.jsx)("div",{className:"mt-2",children:f}):null]})}a.s(["EmptyState",()=>d],16223),a.s([],38702)},55135,75550,a=>{"use strict";var b=a.i(41176),c=a.i(85536);function d({title:a,description:d,children:e,className:f}){return(0,b.jsxs)("header",{className:(0,c.cn)("flex items-center justify-between gap-4",f),children:[(0,b.jsxs)("div",{className:"space-y-1",children:[(0,b.jsx)("h1",{className:"text-2xl font-bold tracking-tight",children:a}),d?(0,b.jsx)("p",{className:"text-muted-foreground",children:d}):null]}),e?(0,b.jsx)("div",{"data-slot":"actions",children:e}):null]})}a.s(["PageHeader",()=>d],75550),a.s([],55135)},84117,a=>{"use strict";var b=a.i(41176),c=a.i(44592),d=a.i(85536);let e=c.forwardRef(({className:a,...c},e)=>(0,b.jsx)("div",{ref:e,className:(0,d.cn)("bg-card text-card-foreground rounded-xl border shadow",a),...c}));e.displayName="Card";let f=c.forwardRef(({className:a,...c},e)=>(0,b.jsx)("div",{ref:e,className:(0,d.cn)("flex flex-col space-y-1.5 p-6",a),...c}));f.displayName="CardHeader";let g=c.forwardRef(({className:a,...c},e)=>(0,b.jsx)("div",{ref:e,className:(0,d.cn)("leading-none font-semibold tracking-tight",a),...c}));g.displayName="CardTitle";let h=c.forwardRef(({className:a,...c},e)=>(0,b.jsx)("div",{ref:e,className:(0,d.cn)("text-muted-foreground text-sm",a),...c}));h.displayName="CardDescription";let i=c.forwardRef(({className:a,...c},e)=>(0,b.jsx)("div",{ref:e,className:(0,d.cn)("p-6 pt-0",a),...c}));i.displayName="CardContent",c.forwardRef(({className:a,...c},e)=>(0,b.jsx)("div",{ref:e,className:(0,d.cn)("flex items-center p-6 pt-0",a),...c})).displayName="CardFooter",a.s(["Card",()=>e,"CardContent",()=>i,"CardDescription",()=>h,"CardHeader",()=>f,"CardTitle",()=>g])}];
2
2
 
3
3
  //# sourceMappingURL=_e65abbd1._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/external-link.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/play.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/square.ts","../../../../../../../src/presentation/web/hooks/deployment-status-provider.tsx","../../../../../../../src/presentation/web/app/actions/data%3A1276b6%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A55eaaf%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A0cd3e5%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A398acd%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A992734%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/hooks/deployment-status-store.ts","../../../../../../../src/presentation/web/hooks/use-deploy-action.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/terminal.ts","../../../../../../../src/presentation/web/components/common/base-drawer/index.ts","../../../../../../../src/presentation/web/components/common/empty-state/empty-state.tsx","../../../../../../../src/presentation/web/components/common/page-header/page-header.tsx","../../../../../../../src/presentation/web/components/ui/card.tsx"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M15 3h6v6', key: '1q9fwt' }],\n ['path', { d: 'M10 14 21 3', key: 'gplh6r' }],\n ['path', { d: 'M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6', key: 'a6xqqp' }],\n];\n\n/**\n * @component @name ExternalLink\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgM2g2djYiIC8+CiAgPHBhdGggZD0iTTEwIDE0IDIxIDMiIC8+CiAgPHBhdGggZD0iTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/external-link\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ExternalLink = createLucideIcon('external-link', __iconNode);\n\nexport default ExternalLink;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z',\n key: '10ikf1',\n },\n ],\n];\n\n/**\n * @component @name Play\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSA1YTIgMiAwIDAgMSAzLjAwOC0xLjcyOGwxMS45OTcgNi45OThhMiAyIDAgMCAxIC4wMDMgMy40NThsLTEyIDdBMiAyIDAgMCAxIDUgMTl6IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/play\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Play = createLucideIcon('play', __iconNode);\n\nexport default Play;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', key: 'afitv7' }],\n];\n\n/**\n * @component @name Square\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjMiIHJ4PSIyIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/square\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Square = createLucideIcon('square', __iconNode);\n\nexport default Square;\n","'use client';\n\n/**\n * DeploymentStatusProvider\n *\n * Wraps the dashboard with a shared deployment-status store seeded from\n * SSR data (ListDeploymentsUseCase via get-graph-data). All components\n * that call `useDeployAction(targetId)` subscribe to the same store, so\n * the \"click Run on node → tab shows URL instantly\" bug and the\n * \"URL lost after refresh\" bug are both resolved by construction.\n *\n * All business logic lives in use cases on the backend. This provider\n * owns only UI state transitions: which entries are hydrated, which are\n * loading, which have errors, and which need polling.\n */\n\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n type ReactNode,\n} from 'react';\nimport type { DeploymentStatusEntry } from '@shepai/core/application/ports/output/services/deployment-service.interface';\nimport type { DeploymentState } from '@shepai/core/domain/generated/output';\nimport { deployFeature } from '@/app/actions/deploy-feature';\nimport { deployRepository } from '@/app/actions/deploy-repository';\nimport { deployApplication } from '@/app/actions/deploy-application';\nimport { stopDeployment } from '@/app/actions/stop-deployment';\nimport { getDeploymentStatus } from '@/app/actions/get-deployment-status';\nimport { createLogger } from '@/lib/logger';\nimport {\n DeploymentStatusStore,\n type DeploymentEntryState,\n EMPTY_ENTRY,\n} from './deployment-status-store';\n\nconst log = createLogger('[DeploymentStatusProvider]');\n\nconst POLL_INTERVAL_MS = 3000;\nconst ACTIVE_STATES: ReadonlySet<DeploymentState> = new Set([\n 'Booting',\n 'Ready',\n] as DeploymentState[]);\n\nexport interface DeployActionInput {\n targetId: string;\n targetType: 'feature' | 'repository' | 'application';\n repositoryPath: string;\n branch?: string;\n}\n\ninterface DeploymentContextValue {\n store: DeploymentStatusStore;\n deploy: (input: DeployActionInput) => Promise<void>;\n stop: (targetId: string) => Promise<void>;\n ensureHydrated: (targetId: string) => void;\n}\n\nconst DeploymentStatusContext = createContext<DeploymentContextValue | null>(null);\n\nexport function DeploymentStatusProvider({\n initialDeployments,\n children,\n}: {\n initialDeployments: DeploymentStatusEntry[];\n children: ReactNode;\n}) {\n // One store per provider instance. Stable across renders.\n const storeRef = useRef<DeploymentStatusStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = new DeploymentStatusStore();\n storeRef.current.hydrate(initialDeployments);\n }\n const store = storeRef.current;\n\n // Re-hydrate when SSR data changes (e.g. after graph-data poll).\n useEffect(() => {\n store.hydrate(initialDeployments);\n }, [initialDeployments, store]);\n\n // ── Polling ──────────────────────────────────────────────────────────\n // One interval per targetId. Started when an entry becomes active\n // (Booting/Ready) and stopped when it is no longer active.\n const pollIntervalsRef = useRef<Map<string, ReturnType<typeof setInterval>>>(new Map());\n\n const stopPolling = useCallback((targetId: string) => {\n const existing = pollIntervalsRef.current.get(targetId);\n if (existing) {\n clearInterval(existing);\n pollIntervalsRef.current.delete(targetId);\n }\n }, []);\n\n const startPolling = useCallback(\n (targetId: string) => {\n if (pollIntervalsRef.current.has(targetId)) return;\n const interval = setInterval(async () => {\n let result;\n try {\n result = await getDeploymentStatus(targetId);\n } catch (err) {\n log.warn(`poll failed for \"${targetId}\"`, err);\n store.setStatus(targetId, null);\n stopPolling(targetId);\n return;\n }\n if (!result || result.state === 'Stopped') {\n store.setStatus(targetId, null);\n stopPolling(targetId);\n return;\n }\n store.setStatus(targetId, result);\n }, POLL_INTERVAL_MS);\n pollIntervalsRef.current.set(targetId, interval);\n },\n [store, stopPolling]\n );\n\n // Reconcile polling with store state on every change.\n useEffect(() => {\n const intervals = pollIntervalsRef.current;\n const reconcile = () => {\n // Stop polls for entries that are no longer active.\n for (const [targetId] of intervals) {\n const entry = store.getEntry(targetId);\n if (!entry.status || !ACTIVE_STATES.has(entry.status)) {\n stopPolling(targetId);\n }\n }\n };\n const unsubscribe = store.subscribeAll(reconcile);\n return () => {\n unsubscribe();\n for (const [, interval] of intervals) clearInterval(interval);\n intervals.clear();\n };\n }, [store, stopPolling]);\n\n // ── Mount hydration per targetId ─────────────────────────────────────\n // When a hook subscribes to a targetId that was not in the SSR hydration\n // (e.g. a stale page with deployments started in another tab), fetch its\n // status once from the backend via getDeploymentStatus → use case.\n const ensureHydrated = useCallback(\n (targetId: string) => {\n if (!targetId) return;\n const entry = store.getEntry(targetId);\n if (entry.hydrated) return;\n // Mark hydrated immediately to dedupe concurrent callers.\n store.update(targetId, { hydrated: true });\n void (async () => {\n try {\n const result = await getDeploymentStatus(targetId);\n store.setStatus(targetId, result);\n if (result && ACTIVE_STATES.has(result.state)) startPolling(targetId);\n } catch (err) {\n log.warn(`ensureHydrated failed for \"${targetId}\"`, err);\n }\n })();\n },\n [store, startPolling]\n );\n\n // ── Actions ──────────────────────────────────────────────────────────\n const deploy = useCallback(\n async (input: DeployActionInput) => {\n store.update(input.targetId, { deployLoading: true, deployError: null });\n try {\n const result =\n input.targetType === 'feature'\n ? await deployFeature(input.targetId)\n : input.targetType === 'application'\n ? await deployApplication(input.targetId)\n : await deployRepository(input.repositoryPath);\n if (!result.success) {\n store.update(input.targetId, {\n deployLoading: false,\n deployError: result.error ?? 'An unexpected error occurred',\n });\n return;\n }\n store.update(input.targetId, {\n deployLoading: false,\n status: result.state ?? null,\n url: null,\n hydrated: true,\n targetType: input.targetType,\n });\n startPolling(input.targetId);\n } catch (err) {\n const message = err instanceof Error ? err.message : 'An unexpected error occurred';\n store.update(input.targetId, { deployLoading: false, deployError: message });\n }\n },\n [store, startPolling]\n );\n\n const stop = useCallback(\n async (targetId: string) => {\n if (!targetId) return;\n store.update(targetId, { stopLoading: true });\n try {\n const result = await stopDeployment(targetId);\n if (result.success) {\n stopPolling(targetId);\n store.update(targetId, {\n stopLoading: false,\n status: null,\n url: null,\n });\n } else {\n store.update(targetId, { stopLoading: false });\n }\n } catch (err) {\n log.warn('stop error (non-critical)', err);\n store.update(targetId, { stopLoading: false });\n }\n },\n [store, stopPolling]\n );\n\n const value = useMemo<DeploymentContextValue>(\n () => ({ store, deploy, stop, ensureHydrated }),\n [store, deploy, stop, ensureHydrated]\n );\n\n return (\n <DeploymentStatusContext.Provider value={value}>{children}</DeploymentStatusContext.Provider>\n );\n}\n\nexport function useDeploymentStatusContext(): DeploymentContextValue {\n const ctx = useContext(DeploymentStatusContext);\n if (!ctx) {\n throw new Error('useDeploymentStatusContext must be used within a <DeploymentStatusProvider>');\n }\n return ctx;\n}\n\n/**\n * Non-throwing variant used by presentational hooks (e.g. useDeployAction)\n * that may render inside Storybook or other isolated contexts without\n * a provider. Returns a stub store/actions that do nothing.\n */\nexport function useDeploymentStatusContextOptional(): DeploymentContextValue {\n const ctx = useContext(DeploymentStatusContext);\n if (ctx) return ctx;\n return FALLBACK_CONTEXT;\n}\n\nconst FALLBACK_STORE = new DeploymentStatusStore();\nconst FALLBACK_CONTEXT: DeploymentContextValue = {\n store: FALLBACK_STORE,\n deploy: async () => {\n /* no-op */\n },\n stop: async () => {\n /* no-op */\n },\n ensureHydrated: () => {\n /* no-op */\n },\n};\n\nexport { EMPTY_ENTRY, type DeploymentEntryState };\n","/* __next_internal_action_entry_do_not_use__ [{\"40f5248cb2ab52f92e90950166adab8424e8aceeae\":\"deployFeature\"},\"src/presentation/web/app/actions/deploy-feature.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40f5248cb2ab52f92e90950166adab8424e8aceeae\",callServer,void 0,findSourceMapURL,\"deployFeature\");export{$$RSC_SERVER_ACTION_0 as deployFeature};","/* __next_internal_action_entry_do_not_use__ [{\"405e941bd11cdaf10efa56eaa45557bbf7f5bc8405\":\"deployRepository\"},\"src/presentation/web/app/actions/deploy-repository.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"405e941bd11cdaf10efa56eaa45557bbf7f5bc8405\",callServer,void 0,findSourceMapURL,\"deployRepository\");export{$$RSC_SERVER_ACTION_0 as deployRepository};","/* __next_internal_action_entry_do_not_use__ [{\"40ff297753e74d45aeecb03f3360e9138b9bf4a81a\":\"deployApplication\"},\"src/presentation/web/app/actions/deploy-application.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40ff297753e74d45aeecb03f3360e9138b9bf4a81a\",callServer,void 0,findSourceMapURL,\"deployApplication\");export{$$RSC_SERVER_ACTION_0 as deployApplication};","/* __next_internal_action_entry_do_not_use__ [{\"402e2cf49a7bac874cea92f3c2549e65b5b57a2f8b\":\"stopDeployment\"},\"src/presentation/web/app/actions/stop-deployment.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"402e2cf49a7bac874cea92f3c2549e65b5b57a2f8b\",callServer,void 0,findSourceMapURL,\"stopDeployment\");export{$$RSC_SERVER_ACTION_0 as stopDeployment};","/* __next_internal_action_entry_do_not_use__ [{\"404906a4301ca24858fb818b20ff67306a5dc37445\":\"getDeploymentStatus\"},\"src/presentation/web/app/actions/get-deployment-status.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"404906a4301ca24858fb818b20ff67306a5dc37445\",callServer,void 0,findSourceMapURL,\"getDeploymentStatus\");export{$$RSC_SERVER_ACTION_0 as getDeploymentStatus};","/**\n * Deployment Status Store\n *\n * External store (useSyncExternalStore-compatible) that holds the shared\n * deployment state keyed by targetId. Multiple components subscribed to\n * the same targetId see the same state — fixes the node/drawer-out-of-sync\n * bug and makes page-refresh hydration trivial.\n *\n * Mutation paths (deploy/stop/poll) go through server actions that wrap\n * use cases — this module stores state only and never contains business\n * logic.\n */\n\nimport type { DeploymentState } from '@shepai/core/domain/generated/output';\nimport type {\n DeploymentStatus,\n DeploymentStatusEntry,\n} from '@shepai/core/application/ports/output/services/deployment-service.interface';\n\nexport interface DeploymentEntryState {\n status: DeploymentState | null;\n url: string | null;\n targetType: string | null;\n /** Whether mount-hydration (listDeployments / getDeploymentStatus) has completed for this targetId. */\n hydrated: boolean;\n deployLoading: boolean;\n stopLoading: boolean;\n deployError: string | null;\n}\n\nexport const EMPTY_ENTRY: DeploymentEntryState = {\n status: null,\n url: null,\n targetType: null,\n hydrated: false,\n deployLoading: false,\n stopLoading: false,\n deployError: null,\n};\n\ntype Listener = () => void;\n\nexport class DeploymentStatusStore {\n private entries = new Map<string, DeploymentEntryState>();\n private listeners = new Map<string, Set<Listener>>();\n private globalListeners = new Set<Listener>();\n\n /** Seed the store from SSR data (ListDeploymentsUseCase output). */\n hydrate(entries: DeploymentStatusEntry[]): void {\n // Mark every SSR entry as hydrated and merge into the map.\n const seen = new Set<string>();\n for (const entry of entries) {\n seen.add(entry.targetId);\n this.update(entry.targetId, {\n status: entry.state,\n url: entry.url,\n targetType: entry.targetType,\n hydrated: true,\n });\n }\n // Any previously tracked entries missing from the SSR list are stale —\n // mark them hydrated with null state so subscribers learn their\n // deployment is gone.\n for (const [targetId, existing] of this.entries) {\n if (!seen.has(targetId) && existing.hydrated && existing.status !== null) {\n this.update(targetId, { status: null, url: null });\n } else if (!seen.has(targetId) && !existing.hydrated) {\n this.update(targetId, { hydrated: true });\n }\n }\n }\n\n getEntry(targetId: string): DeploymentEntryState {\n return this.entries.get(targetId) ?? EMPTY_ENTRY;\n }\n\n update(targetId: string, patch: Partial<DeploymentEntryState>): void {\n const current = this.entries.get(targetId) ?? EMPTY_ENTRY;\n const next: DeploymentEntryState = { ...current, ...patch };\n this.entries.set(targetId, next);\n this.notify(targetId);\n }\n\n /** Apply a status snapshot (from a server action result) to a targetId. */\n setStatus(targetId: string, status: DeploymentStatus | null): void {\n if (status === null) {\n this.update(targetId, { status: null, url: null, hydrated: true });\n return;\n }\n this.update(targetId, {\n status: status.state,\n url: status.url,\n hydrated: true,\n });\n }\n\n subscribe(targetId: string, listener: Listener): () => void {\n let set = this.listeners.get(targetId);\n if (!set) {\n set = new Set();\n this.listeners.set(targetId, set);\n }\n set.add(listener);\n return () => {\n set?.delete(listener);\n if (set?.size === 0) this.listeners.delete(targetId);\n };\n }\n\n subscribeAll(listener: Listener): () => void {\n this.globalListeners.add(listener);\n return () => {\n this.globalListeners.delete(listener);\n };\n }\n\n private notify(targetId: string): void {\n const set = this.listeners.get(targetId);\n if (set) for (const l of set) l();\n for (const l of this.globalListeners) l();\n }\n}\n","'use client';\n\n/**\n * useDeployAction\n *\n * Thin subscriber to the shared DeploymentStatusProvider, scoped to one\n * targetId. All components that call this hook with the same targetId\n * see the same state — a click on a node updates the drawer instantly,\n * and state survives page refresh via SSR hydration.\n *\n * Business logic (start/stop/status) lives in backend use cases — this\n * hook contains zero decision-making code.\n */\n\nimport { useEffect, useSyncExternalStore, useCallback } from 'react';\nimport type { DeploymentState } from '@shepai/core/domain/generated/output';\nimport {\n useDeploymentStatusContextOptional,\n type DeployActionInput,\n} from './deployment-status-provider';\n\nexport type { DeployActionInput };\n\n/** Stable no-op unsubscribe for hooks called with a null input. */\nfunction noop(): void {\n /* no-op */\n}\n\nexport interface DeployActionState {\n deploy: () => Promise<void>;\n stop: () => Promise<void>;\n deployLoading: boolean;\n stopLoading: boolean;\n deployError: string | null;\n status: DeploymentState | null;\n url: string | null;\n}\n\nexport function useDeployAction(input: DeployActionInput | null): DeployActionState {\n const { store, deploy, stop, ensureHydrated } = useDeploymentStatusContextOptional();\n const targetId = input?.targetId ?? '';\n\n // Subscribe to the store entry for this targetId.\n const subscribe = useCallback(\n (listener: () => void) => {\n if (!targetId) return noop;\n return store.subscribe(targetId, listener);\n },\n [store, targetId]\n );\n const getSnapshot = useCallback(\n () => (targetId ? store.getEntry(targetId) : store.getEntry('')),\n [store, targetId]\n );\n const entry = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n // On mount (or when targetId changes), ensure the entry is hydrated.\n useEffect(() => {\n if (targetId) ensureHydrated(targetId);\n }, [targetId, ensureHydrated]);\n\n const handleDeploy = useCallback(async () => {\n if (!input) return;\n await deploy(input);\n }, [deploy, input]);\n\n const handleStop = useCallback(async () => {\n if (!targetId) return;\n await stop(targetId);\n }, [stop, targetId]);\n\n return {\n deploy: handleDeploy,\n stop: handleStop,\n deployLoading: entry.deployLoading,\n stopLoading: entry.stopLoading,\n deployError: entry.deployError,\n status: entry.status,\n url: entry.url,\n };\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 19h8', key: 'baeox8' }],\n ['path', { d: 'm4 17 6-6-6-6', key: '1yngyt' }],\n];\n\n/**\n * @component @name Terminal\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTloOCIgLz4KICA8cGF0aCBkPSJtNCAxNyA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/terminal\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Terminal = createLucideIcon('terminal', __iconNode);\n\nexport default Terminal;\n","export { BaseDrawer, type BaseDrawerProps } from './base-drawer';\n","import type { ReactNode, HTMLAttributes } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface EmptyStateProps extends HTMLAttributes<HTMLDivElement> {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n}\n\nexport function EmptyState({\n icon,\n title,\n description,\n action,\n className,\n ...props\n}: EmptyStateProps) {\n return (\n <div\n className={cn('flex flex-col items-center gap-4 px-4 py-12 text-center', className)}\n {...props}\n >\n {icon ? <div className=\"text-muted-foreground\">{icon}</div> : null}\n <h3 className=\"text-lg font-semibold\">{title}</h3>\n {description ? <p className=\"text-muted-foreground max-w-md text-sm\">{description}</p> : null}\n {action ? <div className=\"mt-2\">{action}</div> : null}\n </div>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport interface PageHeaderProps {\n title: string;\n description?: string;\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function PageHeader({ title, description, children, className }: PageHeaderProps) {\n return (\n <header className={cn('flex items-center justify-between gap-4', className)}>\n <div className=\"space-y-1\">\n <h1 className=\"text-2xl font-bold tracking-tight\">{title}</h1>\n {description ? <p className=\"text-muted-foreground\">{description}</p> : null}\n </div>\n {children ? <div data-slot=\"actions\">{children}</div> : null}\n </header>\n );\n}\n","import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('bg-card text-card-foreground rounded-xl border shadow', className)}\n {...props}\n />\n )\n);\nCard.displayName = 'Card';\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} />\n )\n);\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('leading-none font-semibold tracking-tight', className)}\n {...props}\n />\n )\n);\nCardTitle.displayName = 'CardTitle';\n\nconst CardDescription = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('text-muted-foreground text-sm', className)} {...props} />\n )\n);\nCardDescription.displayName = 'CardDescription';\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />\n )\n);\nCardContent.displayName = 'CardContent';\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center p-6 pt-0', className)} {...props} />\n )\n);\nCardFooter.displayName = 'CardFooter';\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n"],"names":[],"mappings":"uCAoBA,CAAA,CAAA,CAAA,CAAA,AAAM,CAAN,CAAM,CAAA,EAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAf,CAAA,AAAe,CAAf,AAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAjBF,CAiBmB,AAhBrD,CAgBqD,AAhBpD,CAgBoD,AAhBpD,CAAA,AAgBoD,CAhBpD,AAgBoD,CAhBpD,AAgBoD,CAAA,AAhBpD,CAAA,AAgBoD,CAhBpD,AAAQ,AAgB4C,CAhB5C,AAgB4C,AAhB1C,CAgBoD,CAAA,AAhBjD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAa,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAC1C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAe,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAC5C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,AAAR,CAAQ,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA4D,AAA5D,CAA4D,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAC3F,4DCiBA,CAAA,CAAA,CAAA,CAAA,AAAM,CAAN,CAAM,CAAA,CAAA,CAAA,AAAO,CAAP,AAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CArBM,CAClC,AAoBoC,CAnBlC,AAmBkC,CAnBlC,AAmBkC,CAnBlC,AAmBkC,CAnBlC,AAmBkC,CAnBlC,AAmBkC,CAnBlC,AAmBkC,CAnBlC,AAmBkC,CAAA,AAlBlC,CAkBkC,AAjBhC,CAAA,AAiB0C,CAjBvC,AAiBuC,CAjBvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACH,GAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EACP,CAEJ,mDCOA,CAAA,CAAA,CAAA,CAAA,AAAM,CAAN,CAAM,CAAA,EAAS,CAAT,AAAS,CAAT,AAAS,CAAT,AAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAfI,CAeM,AAdxC,CAAC,AAcuC,CAdvC,AAcuC,CAdvC,AAcuC,CAAA,AAdvC,CAAA,AAcuC,CAAA,AAdvC,CAcuC,AAdvC,CAAQ,AAAR,AAcuC,CAd7B,AAc6B,AAd/B,CAAE,AAcuC,CAdvC,AAcuC,CAdvC,CAAA,CAAA,CAAA,AAAO,CAAA,CAAA,CAAA,EAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,AAAM,CAAA,CAAA,AAAG,CAAA,CAAA,CAAA,CAAA,AAAK,EAAG,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,AAAI,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAK,AAAL,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAChF,4ECWA,EAAA,EAAA,CAAA,CAAA,OChBwM,EAAA,EAAA,CAAA,CAAA,OAAsG,IAAM,EAAmC,CAAA,EAAA,EAAA,iBAAb,IAAa,AAAqB,EAAC,KAAxB,wCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,iBCAnI,EAAmC,CAAA,EAAA,EAAA,kBAAb,GAAa,AAAqB,EAAC,MAAxB,uCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,oBCAvI,EAAmC,CAAA,EAAA,EAAA,kBAAb,GAAa,AAAqB,EAAC,MAAxB,uCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,qBCA/I,EAAmC,CAAA,EAAA,EAAA,kBAAb,GAAa,AAAqB,EAAC,MAAxB,uCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,kBCA9H,EAAmC,CAAA,EAAA,EAAA,kBAAb,GAAa,AAAqB,EAAC,MAAxB,uCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,uBLgC1c,IAAA,EAAA,EAAA,CAAA,CAAA,OMFO,IAAM,EAAoC,CAC/C,OAAQ,KACR,IAAK,KACL,WAAY,KACZ,UAAU,EACV,cAAe,GACf,aAAa,EACb,YAAa,IACf,CAIO,OAAM,EACH,QAAU,IAAI,GAAoC,CAClD,UAAY,IAAI,GAA6B,CAC7C,gBAAkB,IAAI,GAAgB,CAG9C,QAAQ,CAAgC,CAAQ,CAE9C,IAAM,EAAO,IAAI,IACjB,IAAK,IAAM,KAAS,EAClB,EAAK,GAAG,CADmB,AAClB,EAAM,QAAQ,EACvB,IAAI,CAAC,MAAM,CAAC,EAAM,QAAQ,CAAE,CAC1B,OAAQ,EAAM,KAAK,CACnB,IAAK,EAAM,GAAG,CACd,WAAY,EAAM,UAAU,CAC5B,UAAU,CACZ,GAKF,IAAK,GAAM,CAAC,EAAU,EAAS,GAAI,IAAI,CAAC,OAAO,CAAE,AAC3C,CAAC,EAAK,GAAG,CAAC,IAAa,EAAS,QAAQ,EAAI,AAAoB,MAAM,GAAjB,MAAM,CAC7D,IAAI,CAAC,MAAM,CAAC,EAAU,CAAE,OAAQ,KAAM,IAAK,IAAK,GACvC,AAAC,EAAK,GAAG,CAAC,IAAc,EAAS,OAAV,CAAkB,EAClD,AADoD,IAChD,CAAC,MAAM,CAAC,EAAU,CAAE,UAAU,CAAK,EAG7C,CAEA,SAAS,CAAgB,CAAwB,CAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAa,CACvC,CAEA,OAAO,CAAgB,CAAE,CAAoC,CAAQ,CAEnE,IAAM,EAA6B,CADW,GAA9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAa,CACT,CAAY,EAAT,CAAY,CAAK,AAAC,EAC1D,GAD+C,CAC3C,CAAC,OAAO,CAAC,GAAG,CAAC,EAAU,GAC3B,IAAI,CAAC,MAAM,CAAC,EACd,CAGA,UAAU,CAAgB,CAAE,CAA+B,CAAQ,CACjE,AAAe,MAAM,CAAjB,EACF,IAAI,CAAC,MAAM,CAAC,EAAU,CAAE,OAAQ,KAAM,IAAK,KAAM,SAAU,EAAK,GAGlE,IAAI,CAAC,MAAM,CAAC,EAAU,CACpB,OAAQ,EAAO,KAAK,CACpB,IAAK,EAAO,GAAG,CACf,UAAU,CACZ,EACF,CAEA,UAAU,CAAgB,CAAE,CAAkB,CAAc,CAC1D,IAAI,EAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAM7B,OALK,IACH,CADQ,CACF,IAAI,IACV,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAU,IAE/B,EAAI,GAAG,CAAC,GACD,KACL,GAAK,OAAO,GACR,GAAK,OAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAC7C,CACF,CAEA,aAAa,CAAkB,CAAc,CAE3C,OADA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAClB,KACL,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAC9B,CACF,CAEQ,OAAO,CAAgB,CAAQ,CACrC,IAAM,EAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAC/B,GAAI,EAAK,IAAK,IAAM,KAAK,EAAK,IAC9B,IAAK,IAAM,KAAK,IAAI,CAAC,eAAe,CAAE,GACxC,CACF,8DNlFA,IAAM,EAAM,CAAA,EAAA,EAAA,YAAA,AAAY,EAAC,8BAGnB,EAA8C,IAAI,IAAI,CAC1D,UACA,QACD,EAgBK,EAA0B,CAAA,EAAA,EAAA,aAAA,AAAa,EAAgC,MAEtE,SAAS,EAAyB,oBACvC,CAAkB,UAClB,CAAQ,CAIT,EAEC,IAAM,EAAW,CAAA,EAAA,EAAA,MAAA,AAAM,EAA+B,KACjD,GAAS,OAAO,EAAE,CACrB,EAAS,OAAO,CAAG,IAAI,EACvB,EAAS,OAAO,CAAC,OAAO,CAAC,IAE3B,IAAM,EAAQ,EAAS,OAAO,CAG9B,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACR,EAAM,OAAO,CAAC,EAChB,EAAG,CAAC,EAAoB,EAAM,EAK9B,IAAM,EAAmB,CAAA,EAAA,EAAA,MAAA,AAAM,EAA8C,IAAI,KAE3E,EAAc,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,AAAC,IAC/B,IAAM,EAAW,EAAiB,OAAO,CAAC,GAAG,CAAC,GAC1C,IACF,MADY,QACE,GACd,EAAiB,OAAO,CAAC,MAAM,CAAC,GAEpC,EAAG,EAAE,EAEC,EAAe,CAAA,EAAA,EAAA,WAAA,AAAW,EAC9B,AAAC,IACC,GAAI,EAAiB,OAAO,CAAC,GAAG,CAAC,GAAW,OAC5C,IAAM,EAAW,YAAY,UAC3B,IAAI,EACJ,GAAI,CACF,EAAS,MAAM,EAAoB,EACrC,CAAE,MAAO,EAAK,CACZ,EAAI,IAAI,CAAC,CAAC,iBAAiB,EAAE,EAAS,CAAC,CAAC,CAAE,GAC1C,EAAM,SAAS,CAAC,EAAU,MAC1B,EAAY,GACZ,MACF,CACA,GAAI,CAAC,GAA2B,YAAjB,EAAO,KAAK,CAAgB,CACzC,EAAM,SAAS,CAAC,EAAU,MAC1B,EAAY,GACZ,MACF,CACA,EAAM,SAAS,CAAC,EAAU,EAC5B,EA1EmB,CA0EhB,IACH,EAAiB,OAAO,CAAC,GAAG,CAAC,EAAU,EACzC,EACA,CAAC,EAAO,EAAY,EAItB,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACR,IAAM,EAAY,EAAiB,OAAO,CAUpC,EAAc,EAAM,YAAY,CATpB,AASqB,KAPrC,IAAK,GAAM,CAAC,EAAS,GAAI,EAAW,CAClC,IAAM,EAAQ,EAAM,QAAQ,CAAC,EACzB,CAAC,EAAM,MAAM,EAAK,EAAD,AAAe,GAAG,CAAC,EAAM,MAAM,GAAG,AACrD,EAAY,EAEhB,CACF,GAEA,MAAO,KAEL,IAAK,GAAM,EAAG,EAAS,GADvB,IAC2B,GAAW,cAAc,GACpD,EAAU,KAAK,EACjB,CACF,EAAG,CAAC,EAAO,EAAY,EAMvB,IAAM,EAAiB,CAAA,EAAA,EAAA,WAAA,AAAW,EAChC,AAAC,IACC,AAAI,CAAC,GACS,AACV,EADgB,KADL,GACa,CAAC,GACnB,QAAQ,EAAE,CAEpB,EAAM,MAAM,CAAC,EAAU,CAAE,UAAU,CAAK,GACnC,CAAC,UACJ,GAAI,CACF,IAAM,EAAS,MAAM,EAAoB,GACzC,EAAM,SAAS,CAAC,EAAU,GACtB,GAAU,EAAc,GAAG,CAAC,EAAO,KAAK,GAAG,EAAa,EAC9D,CAAE,MAAO,EAAK,CACZ,EAAI,IAAI,CAAC,CAAC,2BAA2B,EAAE,EAAS,CAAC,CAAC,CAAE,EACtD,EACF,CAAC,GACH,EACA,CAAC,EAAO,EAAa,EAIjB,EAAS,CAAA,EAAA,EAAA,WAAA,AAAW,EACxB,MAAO,IACL,EAAM,MAAM,CAAC,EAAM,QAAQ,CAAE,CAAE,eAAe,EAAM,YAAa,IAAK,GACtE,GAAI,CACF,IAAM,EACiB,YAArB,EAAM,UAAU,CACZ,MAAM,EAAc,EAAM,QAAQ,EACb,gBAArB,EAAM,UAAU,CACd,MAAM,EAAkB,EAAM,QAAQ,EACtC,MAAM,EAAiB,EAAM,cAAc,EACnD,GAAI,CAAC,EAAO,OAAO,CAAE,YACnB,EAAM,MAAM,CAAC,EAAM,QAAQ,CAAE,CAC3B,eAAe,EACf,YAAa,EAAO,KAAK,EAAI,8BAC/B,GAGF,EAAM,MAAM,CAAC,EAAM,QAAQ,CAAE,CAC3B,eAAe,EACf,OAAQ,EAAO,KAAK,EAAI,KACxB,IAAK,KACL,UAAU,EACV,WAAY,EAAM,UACpB,AAD8B,GAE9B,EAAa,EAAM,QAAQ,CAC7B,CAAE,MAAO,EAAK,CACZ,IAAM,EAAU,aAAe,MAAQ,EAAI,OAAO,CAAG,+BACrD,EAAM,MAAM,CAAC,EAAM,QAAQ,CAAE,CAAE,eAAe,EAAO,YAAa,CAAQ,EAC5E,CACF,EACA,CAAC,EAAO,EAAa,EAGjB,EAAO,CAAA,EAAA,EAAA,WAAW,AAAX,EACX,MAAO,IACL,GAAK,CAAD,EACJ,EAAM,KADS,CACH,CAAC,EAAU,CAAE,aAAa,CAAK,GAC3C,GAAI,CAEE,CADW,MAAM,EAAe,EAAA,EACzB,OAAO,EAAE,AAClB,EAAY,GACZ,EAAM,MAAM,CAAC,EAAU,CACrB,aAAa,EACb,OAAQ,KACR,IAAK,IACP,IAEA,EAAM,MAAM,CAAC,EAAU,CAAE,aAAa,CAAM,EAEhD,CAAE,MAAO,EAAK,CACZ,EAAI,IAAI,CAAC,4BAA6B,GACtC,EAAM,MAAM,CAAC,EAAU,CAAE,aAAa,CAAM,EAC9C,EACF,EACA,CAAC,EAAO,EAAY,EAGhB,EAAQ,CAAA,EAAA,EAAA,OAAA,AAAO,EACnB,IAAM,CAAC,OAAE,SAAO,OAAQ,iBAAM,EAAe,CAAC,CAC9C,CAAC,EAAO,EAAQ,EAAM,EAAe,EAGvC,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAwB,QAAQ,CAAA,CAAC,MAAO,WAAQ,GAErD,CAEO,SAAS,IACd,IAAM,EAAM,CAAA,EAAA,EAAA,UAAA,AAAU,EAAC,GACvB,GAAI,CAAC,EACH,GADQ,GACE,AAAJ,MAAU,+EAElB,OAAO,CACT,CAOO,SAAS,IACd,IAAM,EAAM,CAAA,EAAA,EAAA,UAAA,AAAU,EAAC,UACvB,AAAI,GACG,CACT,CAGA,AALW,IAKL,EAA2C,CAL/B,AAMhB,MAFqB,CAEd,GAFkB,EAGzB,OAAQ,UAER,EACA,KAAM,UAEN,EACA,eAAgB,KAEhB,CACF,sJO1PA,IAAA,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,OAQA,SAAS,IAET,CAYO,SAAS,EAAgB,CAA+B,EAC7D,GAAM,OAAE,CAAK,QAAE,CAAM,MAAE,CAAI,gBAAE,CAAc,CAAE,CAAG,CAAA,EAAA,EAAA,kCAAA,AAAkC,IAC5E,EAAW,GAAO,UAAY,GAG9B,EAAY,CAAA,EAAA,EAAA,WAAA,AAAW,EAC3B,AAAC,GACC,AAAK,EACE,EADH,AACS,MADE,GACO,CAAC,EAAU,GADX,EAGxB,CAAC,EAAO,EAAS,EAEb,EAAc,CAAA,EAAA,EAAA,WAAA,AAAW,EAC7B,IAAO,EAAW,EAAM,QAAQ,CAAC,GAAY,EAAM,QAAQ,CAAC,IAC5D,CAAC,EAAO,EAAS,EAEb,EAAQ,CAAA,EAAA,EAAA,oBAAA,AAAoB,EAAC,EAAW,EAAa,GAiB3D,MAdA,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACJ,GAAU,EAAe,EAC/B,EAAG,CAAC,EAAU,EAAe,EAYtB,CACL,OAXmB,CAAA,AAWX,EAXW,EAAA,WAAA,AAAW,EAAC,UAC1B,GACL,IADY,EACN,EAAO,EACf,EAAG,CAAC,EAAQ,EAAM,EAShB,KAPiB,CAAA,AAOX,EAPW,EAAA,WAAA,AAAW,EAAC,UACxB,GACL,MAAM,CADS,CACJ,EACb,EAAG,CAAC,EAAM,EAAS,EAKjB,cAAe,EAAM,aAAa,CAClC,YAAa,EAAM,WAAW,CAC9B,YAAa,EAAM,WAAW,CAC9B,OAAQ,EAAM,MAAM,CACpB,IAAK,EAAM,GAAG,AAChB,CACF,wDC7DA,CAAA,CAAA,CAAA,CAAA,AAAM,CAAN,CAAM,CAAA,EAAW,CAAA,CAAA,CAAX,AAAW,CAAX,AAAW,CAAX,AAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAhBE,CAClC,AAe4C,CAf3C,AAe2C,CAf3C,AAe2C,CAAA,AAf3C,CAAA,AAe2C,CAf3C,AAe2C,CAf3C,AAe2C,CAf3C,AAe2C,CAf3C,AAAQ,AAemC,CAfnC,AAAE,AAeiC,CAAU,CAfxC,AAewC,CAfxC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,AAAZ,CAAY,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAiB,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAChD,wDCNA,EAAA,CAAA,CAAA,8DCCA,EAAA,EAAA,CAAA,CAAA,OASO,SAAS,EAAW,MACzB,CAAI,OACJ,CAAK,aACL,CAAW,QACX,CAAM,WACN,CAAS,CACT,GAAG,EACa,EAChB,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CACC,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,0DAA2D,GACxE,GAAG,CAAK,WAER,EAAO,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,iCAAyB,IAAc,KAC9D,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,iCAAyB,IACtC,EAAc,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,kDAA0C,IAAmB,KACxF,EAAS,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,gBAAQ,IAAgB,OAGvD,8FC7BA,EAAA,EAAA,CAAA,CAAA,OASO,SAAS,EAAW,OAAE,CAAK,aAAE,CAAW,UAAE,CAAQ,WAAE,CAAS,CAAmB,EACrF,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CAAO,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,0CAA2C,aAC/D,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sBACb,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,6CAAqC,IAClD,EAAc,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,iCAAyB,IAAmB,QAEzE,EAAW,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,YAAU,mBAAW,IAAkB,OAG9D,wFCnBA,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,OAEA,IAAM,EAAO,EAAA,UAAgB,CAC3B,CAAC,CAAE,WAAS,CAAE,GAAG,EAAO,CAAE,IACxB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,IAAK,EACL,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,wDAAyD,GACtE,GAAG,CAAK,IAIf,EAAK,WAAW,CAAG,OAEnB,IAAM,EAAa,EAAA,UAAgB,CACjC,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IACxB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,IAAK,EAAK,UAAW,CAAA,EAAA,EAAA,EAAE,AAAF,EAAG,gCAAiC,GAAa,GAAG,CAAK,IAGvF,EAAW,WAAW,CAAG,aAEzB,IAAM,EAAY,EAAA,UAAgB,CAChC,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IACxB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,IAAK,EACL,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,4CAA6C,GAC1D,GAAG,CAAK,IAIf,EAAU,WAAW,CAAG,YAExB,IAAM,EAAkB,EAAA,UAAgB,CACtC,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IACxB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,IAAK,EAAK,UAAW,CAAA,EAAA,EAAA,EAAE,AAAF,EAAG,gCAAiC,GAAa,GAAG,CAAK,IAGvF,EAAgB,WAAW,CAAG,kBAE9B,IAAM,EAAc,EAAA,UAAgB,CAClC,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IACxB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,IAAK,EAAK,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,WAAY,GAAa,GAAG,CAAK,IAGlE,EAAY,WAAW,CAAG,cAEP,AAKnB,EALmB,UAAgB,CACjC,CAAC,CAAE,WAAS,CAAE,GAAG,EAAO,CAAE,IACxB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,IAAK,EAAK,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,6BAA8B,GAAa,GAAG,CAAK,IAGzE,WAAW,CAAG","ignoreList":[0,1,2,11]}
1
+ {"version":3,"sources":["../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/external-link.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/play.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/square.ts","../../../../../../../src/presentation/web/hooks/deployment-status-provider.tsx","../../../../../../../src/presentation/web/app/actions/data%3A0a5818%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A8ed208%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A030c37%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3Aee2f70%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A7fbb91%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/hooks/deployment-status-store.ts","../../../../../../../src/presentation/web/hooks/use-deploy-action.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/terminal.ts","../../../../../../../src/presentation/web/components/common/base-drawer/index.ts","../../../../../../../src/presentation/web/components/common/empty-state/empty-state.tsx","../../../../../../../src/presentation/web/components/common/page-header/page-header.tsx","../../../../../../../src/presentation/web/components/ui/card.tsx"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M15 3h6v6', key: '1q9fwt' }],\n ['path', { d: 'M10 14 21 3', key: 'gplh6r' }],\n ['path', { d: 'M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6', key: 'a6xqqp' }],\n];\n\n/**\n * @component @name ExternalLink\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgM2g2djYiIC8+CiAgPHBhdGggZD0iTTEwIDE0IDIxIDMiIC8+CiAgPHBhdGggZD0iTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/external-link\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ExternalLink = createLucideIcon('external-link', __iconNode);\n\nexport default ExternalLink;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z',\n key: '10ikf1',\n },\n ],\n];\n\n/**\n * @component @name Play\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSA1YTIgMiAwIDAgMSAzLjAwOC0xLjcyOGwxMS45OTcgNi45OThhMiAyIDAgMCAxIC4wMDMgMy40NThsLTEyIDdBMiAyIDAgMCAxIDUgMTl6IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/play\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Play = createLucideIcon('play', __iconNode);\n\nexport default Play;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', key: 'afitv7' }],\n];\n\n/**\n * @component @name Square\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjMiIHJ4PSIyIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/square\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Square = createLucideIcon('square', __iconNode);\n\nexport default Square;\n","'use client';\n\n/**\n * DeploymentStatusProvider\n *\n * Wraps the dashboard with a shared deployment-status store seeded from\n * SSR data (ListDeploymentsUseCase via get-graph-data). All components\n * that call `useDeployAction(targetId)` subscribe to the same store, so\n * the \"click Run on node → tab shows URL instantly\" bug and the\n * \"URL lost after refresh\" bug are both resolved by construction.\n *\n * All business logic lives in use cases on the backend. This provider\n * owns only UI state transitions: which entries are hydrated, which are\n * loading, which have errors, and which need polling.\n */\n\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n type ReactNode,\n} from 'react';\nimport type { DeploymentStatusEntry } from '@shepai/core/application/ports/output/services/deployment-service.interface';\nimport type { DeploymentState } from '@shepai/core/domain/generated/output';\nimport { deployFeature } from '@/app/actions/deploy-feature';\nimport { deployRepository } from '@/app/actions/deploy-repository';\nimport { deployApplication } from '@/app/actions/deploy-application';\nimport { stopDeployment } from '@/app/actions/stop-deployment';\nimport { getDeploymentStatus } from '@/app/actions/get-deployment-status';\nimport { createLogger } from '@/lib/logger';\nimport {\n DeploymentStatusStore,\n type DeploymentEntryState,\n EMPTY_ENTRY,\n} from './deployment-status-store';\n\nconst log = createLogger('[DeploymentStatusProvider]');\n\nconst POLL_INTERVAL_MS = 3000;\nconst ACTIVE_STATES: ReadonlySet<DeploymentState> = new Set([\n 'Booting',\n 'Ready',\n] as DeploymentState[]);\n\nexport interface DeployActionInput {\n targetId: string;\n targetType: 'feature' | 'repository' | 'application';\n repositoryPath: string;\n branch?: string;\n}\n\ninterface DeploymentContextValue {\n store: DeploymentStatusStore;\n deploy: (input: DeployActionInput) => Promise<void>;\n stop: (targetId: string) => Promise<void>;\n ensureHydrated: (targetId: string) => void;\n}\n\nconst DeploymentStatusContext = createContext<DeploymentContextValue | null>(null);\n\nexport function DeploymentStatusProvider({\n initialDeployments,\n children,\n}: {\n initialDeployments: DeploymentStatusEntry[];\n children: ReactNode;\n}) {\n // One store per provider instance. Stable across renders.\n const storeRef = useRef<DeploymentStatusStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = new DeploymentStatusStore();\n storeRef.current.hydrate(initialDeployments);\n }\n const store = storeRef.current;\n\n // Re-hydrate when SSR data changes (e.g. after graph-data poll).\n useEffect(() => {\n store.hydrate(initialDeployments);\n }, [initialDeployments, store]);\n\n // ── Polling ──────────────────────────────────────────────────────────\n // One interval per targetId. Started when an entry becomes active\n // (Booting/Ready) and stopped when it is no longer active.\n const pollIntervalsRef = useRef<Map<string, ReturnType<typeof setInterval>>>(new Map());\n\n const stopPolling = useCallback((targetId: string) => {\n const existing = pollIntervalsRef.current.get(targetId);\n if (existing) {\n clearInterval(existing);\n pollIntervalsRef.current.delete(targetId);\n }\n }, []);\n\n const startPolling = useCallback(\n (targetId: string) => {\n if (pollIntervalsRef.current.has(targetId)) return;\n const interval = setInterval(async () => {\n let result;\n try {\n result = await getDeploymentStatus(targetId);\n } catch (err) {\n log.warn(`poll failed for \"${targetId}\"`, err);\n store.setStatus(targetId, null);\n stopPolling(targetId);\n return;\n }\n if (!result || result.state === 'Stopped') {\n store.setStatus(targetId, null);\n stopPolling(targetId);\n return;\n }\n store.setStatus(targetId, result);\n }, POLL_INTERVAL_MS);\n pollIntervalsRef.current.set(targetId, interval);\n },\n [store, stopPolling]\n );\n\n // Reconcile polling with store state on every change.\n useEffect(() => {\n const intervals = pollIntervalsRef.current;\n const reconcile = () => {\n // Stop polls for entries that are no longer active.\n for (const [targetId] of intervals) {\n const entry = store.getEntry(targetId);\n if (!entry.status || !ACTIVE_STATES.has(entry.status)) {\n stopPolling(targetId);\n }\n }\n };\n const unsubscribe = store.subscribeAll(reconcile);\n return () => {\n unsubscribe();\n for (const [, interval] of intervals) clearInterval(interval);\n intervals.clear();\n };\n }, [store, stopPolling]);\n\n // ── Mount hydration per targetId ─────────────────────────────────────\n // When a hook subscribes to a targetId that was not in the SSR hydration\n // (e.g. a stale page with deployments started in another tab), fetch its\n // status once from the backend via getDeploymentStatus → use case.\n const ensureHydrated = useCallback(\n (targetId: string) => {\n if (!targetId) return;\n const entry = store.getEntry(targetId);\n if (entry.hydrated) return;\n // Mark hydrated immediately to dedupe concurrent callers.\n store.update(targetId, { hydrated: true });\n void (async () => {\n try {\n const result = await getDeploymentStatus(targetId);\n store.setStatus(targetId, result);\n if (result && ACTIVE_STATES.has(result.state)) startPolling(targetId);\n } catch (err) {\n log.warn(`ensureHydrated failed for \"${targetId}\"`, err);\n }\n })();\n },\n [store, startPolling]\n );\n\n // ── Actions ──────────────────────────────────────────────────────────\n const deploy = useCallback(\n async (input: DeployActionInput) => {\n store.update(input.targetId, { deployLoading: true, deployError: null });\n try {\n const result =\n input.targetType === 'feature'\n ? await deployFeature(input.targetId)\n : input.targetType === 'application'\n ? await deployApplication(input.targetId)\n : await deployRepository(input.repositoryPath);\n if (!result.success) {\n store.update(input.targetId, {\n deployLoading: false,\n deployError: result.error ?? 'An unexpected error occurred',\n });\n return;\n }\n store.update(input.targetId, {\n deployLoading: false,\n status: result.state ?? null,\n url: null,\n hydrated: true,\n targetType: input.targetType,\n });\n startPolling(input.targetId);\n } catch (err) {\n const message = err instanceof Error ? err.message : 'An unexpected error occurred';\n store.update(input.targetId, { deployLoading: false, deployError: message });\n }\n },\n [store, startPolling]\n );\n\n const stop = useCallback(\n async (targetId: string) => {\n if (!targetId) return;\n store.update(targetId, { stopLoading: true });\n try {\n const result = await stopDeployment(targetId);\n if (result.success) {\n stopPolling(targetId);\n store.update(targetId, {\n stopLoading: false,\n status: null,\n url: null,\n });\n } else {\n store.update(targetId, { stopLoading: false });\n }\n } catch (err) {\n log.warn('stop error (non-critical)', err);\n store.update(targetId, { stopLoading: false });\n }\n },\n [store, stopPolling]\n );\n\n const value = useMemo<DeploymentContextValue>(\n () => ({ store, deploy, stop, ensureHydrated }),\n [store, deploy, stop, ensureHydrated]\n );\n\n return (\n <DeploymentStatusContext.Provider value={value}>{children}</DeploymentStatusContext.Provider>\n );\n}\n\nexport function useDeploymentStatusContext(): DeploymentContextValue {\n const ctx = useContext(DeploymentStatusContext);\n if (!ctx) {\n throw new Error('useDeploymentStatusContext must be used within a <DeploymentStatusProvider>');\n }\n return ctx;\n}\n\n/**\n * Non-throwing variant used by presentational hooks (e.g. useDeployAction)\n * that may render inside Storybook or other isolated contexts without\n * a provider. Returns a stub store/actions that do nothing.\n */\nexport function useDeploymentStatusContextOptional(): DeploymentContextValue {\n const ctx = useContext(DeploymentStatusContext);\n if (ctx) return ctx;\n return FALLBACK_CONTEXT;\n}\n\nconst FALLBACK_STORE = new DeploymentStatusStore();\nconst FALLBACK_CONTEXT: DeploymentContextValue = {\n store: FALLBACK_STORE,\n deploy: async () => {\n /* no-op */\n },\n stop: async () => {\n /* no-op */\n },\n ensureHydrated: () => {\n /* no-op */\n },\n};\n\nexport { EMPTY_ENTRY, type DeploymentEntryState };\n","/* __next_internal_action_entry_do_not_use__ [{\"40ef324b5c8df3d4d9f7a55860b3e1c565ff78158c\":\"deployFeature\"},\"src/presentation/web/app/actions/deploy-feature.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40ef324b5c8df3d4d9f7a55860b3e1c565ff78158c\",callServer,void 0,findSourceMapURL,\"deployFeature\");export{$$RSC_SERVER_ACTION_0 as deployFeature};","/* __next_internal_action_entry_do_not_use__ [{\"40de173f92137f456a64448e1d39e9737079d5b8d9\":\"deployRepository\"},\"src/presentation/web/app/actions/deploy-repository.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40de173f92137f456a64448e1d39e9737079d5b8d9\",callServer,void 0,findSourceMapURL,\"deployRepository\");export{$$RSC_SERVER_ACTION_0 as deployRepository};","/* __next_internal_action_entry_do_not_use__ [{\"4007e6cf85c903d65686ff4b0e96b69bb3fb8b5dd6\":\"deployApplication\"},\"src/presentation/web/app/actions/deploy-application.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"4007e6cf85c903d65686ff4b0e96b69bb3fb8b5dd6\",callServer,void 0,findSourceMapURL,\"deployApplication\");export{$$RSC_SERVER_ACTION_0 as deployApplication};","/* __next_internal_action_entry_do_not_use__ [{\"40d2b3d3f6017dff4d6be8016943a0bc41ef6d2119\":\"stopDeployment\"},\"src/presentation/web/app/actions/stop-deployment.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40d2b3d3f6017dff4d6be8016943a0bc41ef6d2119\",callServer,void 0,findSourceMapURL,\"stopDeployment\");export{$$RSC_SERVER_ACTION_0 as stopDeployment};","/* __next_internal_action_entry_do_not_use__ [{\"40cda6828bcd7caf3c94b1d714873a18189513dfeb\":\"getDeploymentStatus\"},\"src/presentation/web/app/actions/get-deployment-status.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40cda6828bcd7caf3c94b1d714873a18189513dfeb\",callServer,void 0,findSourceMapURL,\"getDeploymentStatus\");export{$$RSC_SERVER_ACTION_0 as getDeploymentStatus};","/**\n * Deployment Status Store\n *\n * External store (useSyncExternalStore-compatible) that holds the shared\n * deployment state keyed by targetId. Multiple components subscribed to\n * the same targetId see the same state — fixes the node/drawer-out-of-sync\n * bug and makes page-refresh hydration trivial.\n *\n * Mutation paths (deploy/stop/poll) go through server actions that wrap\n * use cases — this module stores state only and never contains business\n * logic.\n */\n\nimport type { DeploymentState } from '@shepai/core/domain/generated/output';\nimport type {\n DeploymentStatus,\n DeploymentStatusEntry,\n} from '@shepai/core/application/ports/output/services/deployment-service.interface';\n\nexport interface DeploymentEntryState {\n status: DeploymentState | null;\n url: string | null;\n targetType: string | null;\n /** Whether mount-hydration (listDeployments / getDeploymentStatus) has completed for this targetId. */\n hydrated: boolean;\n deployLoading: boolean;\n stopLoading: boolean;\n deployError: string | null;\n}\n\nexport const EMPTY_ENTRY: DeploymentEntryState = {\n status: null,\n url: null,\n targetType: null,\n hydrated: false,\n deployLoading: false,\n stopLoading: false,\n deployError: null,\n};\n\ntype Listener = () => void;\n\nexport class DeploymentStatusStore {\n private entries = new Map<string, DeploymentEntryState>();\n private listeners = new Map<string, Set<Listener>>();\n private globalListeners = new Set<Listener>();\n\n /** Seed the store from SSR data (ListDeploymentsUseCase output). */\n hydrate(entries: DeploymentStatusEntry[]): void {\n // Mark every SSR entry as hydrated and merge into the map.\n const seen = new Set<string>();\n for (const entry of entries) {\n seen.add(entry.targetId);\n this.update(entry.targetId, {\n status: entry.state,\n url: entry.url,\n targetType: entry.targetType,\n hydrated: true,\n });\n }\n // Any previously tracked entries missing from the SSR list are stale —\n // mark them hydrated with null state so subscribers learn their\n // deployment is gone.\n for (const [targetId, existing] of this.entries) {\n if (!seen.has(targetId) && existing.hydrated && existing.status !== null) {\n this.update(targetId, { status: null, url: null });\n } else if (!seen.has(targetId) && !existing.hydrated) {\n this.update(targetId, { hydrated: true });\n }\n }\n }\n\n getEntry(targetId: string): DeploymentEntryState {\n return this.entries.get(targetId) ?? EMPTY_ENTRY;\n }\n\n update(targetId: string, patch: Partial<DeploymentEntryState>): void {\n const current = this.entries.get(targetId) ?? EMPTY_ENTRY;\n const next: DeploymentEntryState = { ...current, ...patch };\n this.entries.set(targetId, next);\n this.notify(targetId);\n }\n\n /** Apply a status snapshot (from a server action result) to a targetId. */\n setStatus(targetId: string, status: DeploymentStatus | null): void {\n if (status === null) {\n this.update(targetId, { status: null, url: null, hydrated: true });\n return;\n }\n this.update(targetId, {\n status: status.state,\n url: status.url,\n hydrated: true,\n });\n }\n\n subscribe(targetId: string, listener: Listener): () => void {\n let set = this.listeners.get(targetId);\n if (!set) {\n set = new Set();\n this.listeners.set(targetId, set);\n }\n set.add(listener);\n return () => {\n set?.delete(listener);\n if (set?.size === 0) this.listeners.delete(targetId);\n };\n }\n\n subscribeAll(listener: Listener): () => void {\n this.globalListeners.add(listener);\n return () => {\n this.globalListeners.delete(listener);\n };\n }\n\n private notify(targetId: string): void {\n const set = this.listeners.get(targetId);\n if (set) for (const l of set) l();\n for (const l of this.globalListeners) l();\n }\n}\n","'use client';\n\n/**\n * useDeployAction\n *\n * Thin subscriber to the shared DeploymentStatusProvider, scoped to one\n * targetId. All components that call this hook with the same targetId\n * see the same state — a click on a node updates the drawer instantly,\n * and state survives page refresh via SSR hydration.\n *\n * Business logic (start/stop/status) lives in backend use cases — this\n * hook contains zero decision-making code.\n */\n\nimport { useEffect, useSyncExternalStore, useCallback } from 'react';\nimport type { DeploymentState } from '@shepai/core/domain/generated/output';\nimport {\n useDeploymentStatusContextOptional,\n type DeployActionInput,\n} from './deployment-status-provider';\n\nexport type { DeployActionInput };\n\n/** Stable no-op unsubscribe for hooks called with a null input. */\nfunction noop(): void {\n /* no-op */\n}\n\nexport interface DeployActionState {\n deploy: () => Promise<void>;\n stop: () => Promise<void>;\n deployLoading: boolean;\n stopLoading: boolean;\n deployError: string | null;\n status: DeploymentState | null;\n url: string | null;\n}\n\nexport function useDeployAction(input: DeployActionInput | null): DeployActionState {\n const { store, deploy, stop, ensureHydrated } = useDeploymentStatusContextOptional();\n const targetId = input?.targetId ?? '';\n\n // Subscribe to the store entry for this targetId.\n const subscribe = useCallback(\n (listener: () => void) => {\n if (!targetId) return noop;\n return store.subscribe(targetId, listener);\n },\n [store, targetId]\n );\n const getSnapshot = useCallback(\n () => (targetId ? store.getEntry(targetId) : store.getEntry('')),\n [store, targetId]\n );\n const entry = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n // On mount (or when targetId changes), ensure the entry is hydrated.\n useEffect(() => {\n if (targetId) ensureHydrated(targetId);\n }, [targetId, ensureHydrated]);\n\n const handleDeploy = useCallback(async () => {\n if (!input) return;\n await deploy(input);\n }, [deploy, input]);\n\n const handleStop = useCallback(async () => {\n if (!targetId) return;\n await stop(targetId);\n }, [stop, targetId]);\n\n return {\n deploy: handleDeploy,\n stop: handleStop,\n deployLoading: entry.deployLoading,\n stopLoading: entry.stopLoading,\n deployError: entry.deployError,\n status: entry.status,\n url: entry.url,\n };\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 19h8', key: 'baeox8' }],\n ['path', { d: 'm4 17 6-6-6-6', key: '1yngyt' }],\n];\n\n/**\n * @component @name Terminal\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTloOCIgLz4KICA8cGF0aCBkPSJtNCAxNyA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/terminal\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Terminal = createLucideIcon('terminal', __iconNode);\n\nexport default Terminal;\n","export { BaseDrawer, type BaseDrawerProps } from './base-drawer';\n","import type { ReactNode, HTMLAttributes } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface EmptyStateProps extends HTMLAttributes<HTMLDivElement> {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n}\n\nexport function EmptyState({\n icon,\n title,\n description,\n action,\n className,\n ...props\n}: EmptyStateProps) {\n return (\n <div\n className={cn('flex flex-col items-center gap-4 px-4 py-12 text-center', className)}\n {...props}\n >\n {icon ? <div className=\"text-muted-foreground\">{icon}</div> : null}\n <h3 className=\"text-lg font-semibold\">{title}</h3>\n {description ? <p className=\"text-muted-foreground max-w-md text-sm\">{description}</p> : null}\n {action ? <div className=\"mt-2\">{action}</div> : null}\n </div>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport interface PageHeaderProps {\n title: string;\n description?: string;\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function PageHeader({ title, description, children, className }: PageHeaderProps) {\n return (\n <header className={cn('flex items-center justify-between gap-4', className)}>\n <div className=\"space-y-1\">\n <h1 className=\"text-2xl font-bold tracking-tight\">{title}</h1>\n {description ? <p className=\"text-muted-foreground\">{description}</p> : null}\n </div>\n {children ? <div data-slot=\"actions\">{children}</div> : null}\n </header>\n );\n}\n","import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('bg-card text-card-foreground rounded-xl border shadow', className)}\n {...props}\n />\n )\n);\nCard.displayName = 'Card';\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} />\n )\n);\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('leading-none font-semibold tracking-tight', className)}\n {...props}\n />\n )\n);\nCardTitle.displayName = 'CardTitle';\n\nconst CardDescription = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('text-muted-foreground text-sm', className)} {...props} />\n )\n);\nCardDescription.displayName = 'CardDescription';\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />\n )\n);\nCardContent.displayName = 'CardContent';\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center p-6 pt-0', className)} {...props} />\n )\n);\nCardFooter.displayName = 'CardFooter';\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n"],"names":[],"mappings":"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","ignoreList":[0,1,2,11]}
@@ -1,3 +1,3 @@
1
- module.exports=[98963,a=>{"use strict";var b=a.i(41176),c=a.i(44592),d=a.i(66873),e=a.i(14272),f=a.i(7420),g=a.i(6175),h=a.i(79406),i=a.i(48939),j=a.i(61476),k=a.i(48972),l=a.i(59653),m="ScrollArea",[n,o]=(0,f.createContextScope)(m),[p,q]=n(m),r=c.forwardRef((a,e)=>{let{__scopeScrollArea:f,type:h="hover",dir:j,scrollHideDelay:k=600,...l}=a,[m,n]=c.useState(null),[o,q]=c.useState(null),[r,s]=c.useState(null),[t,u]=c.useState(null),[v,w]=c.useState(null),[x,y]=c.useState(0),[z,A]=c.useState(0),[B,C]=c.useState(!1),[D,E]=c.useState(!1),F=(0,g.useComposedRefs)(e,a=>n(a)),G=(0,i.useDirection)(j);return(0,b.jsx)(p,{scope:f,type:h,dir:G,scrollHideDelay:k,scrollArea:m,viewport:o,onViewportChange:q,content:r,onContentChange:s,scrollbarX:t,onScrollbarXChange:u,scrollbarXEnabled:B,onScrollbarXEnabledChange:C,scrollbarY:v,onScrollbarYChange:w,scrollbarYEnabled:D,onScrollbarYEnabledChange:E,onCornerWidthChange:y,onCornerHeightChange:A,children:(0,b.jsx)(d.Primitive.div,{dir:G,...l,ref:F,style:{position:"relative","--radix-scroll-area-corner-width":x+"px","--radix-scroll-area-corner-height":z+"px",...a.style}})})});r.displayName=m;var s="ScrollAreaViewport",t=c.forwardRef((a,e)=>{let{__scopeScrollArea:f,children:h,nonce:i,...j}=a,k=q(s,f),l=c.useRef(null),m=(0,g.useComposedRefs)(e,l,k.onViewportChange);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"},nonce:i}),(0,b.jsx)(d.Primitive.div,{"data-radix-scroll-area-viewport":"",...j,ref:m,style:{overflowX:k.scrollbarXEnabled?"scroll":"hidden",overflowY:k.scrollbarYEnabled?"scroll":"hidden",...a.style},children:(0,b.jsx)("div",{ref:k.onContentChange,style:{minWidth:"100%",display:"table"},children:h})})]})});t.displayName=s;var u="ScrollAreaScrollbar",v=c.forwardRef((a,d)=>{let{forceMount:e,...f}=a,g=q(u,a.__scopeScrollArea),{onScrollbarXEnabledChange:h,onScrollbarYEnabledChange:i}=g,j="horizontal"===a.orientation;return c.useEffect(()=>(j?h(!0):i(!0),()=>{j?h(!1):i(!1)}),[j,h,i]),"hover"===g.type?(0,b.jsx)(w,{...f,ref:d,forceMount:e}):"scroll"===g.type?(0,b.jsx)(x,{...f,ref:d,forceMount:e}):"auto"===g.type?(0,b.jsx)(y,{...f,ref:d,forceMount:e}):"always"===g.type?(0,b.jsx)(z,{...f,ref:d}):null});v.displayName=u;var w=c.forwardRef((a,d)=>{let{forceMount:f,...g}=a,h=q(u,a.__scopeScrollArea),[i,j]=c.useState(!1);return c.useEffect(()=>{let a=h.scrollArea,b=0;if(a){let c=()=>{window.clearTimeout(b),j(!0)},d=()=>{b=window.setTimeout(()=>j(!1),h.scrollHideDelay)};return a.addEventListener("pointerenter",c),a.addEventListener("pointerleave",d),()=>{window.clearTimeout(b),a.removeEventListener("pointerenter",c),a.removeEventListener("pointerleave",d)}}},[h.scrollArea,h.scrollHideDelay]),(0,b.jsx)(e.Presence,{present:f||i,children:(0,b.jsx)(y,{"data-state":i?"visible":"hidden",...g,ref:d})})}),x=c.forwardRef((a,d)=>{var f;let{forceMount:g,...h}=a,i=q(u,a.__scopeScrollArea),j="horizontal"===a.orientation,k=R(()=>n("SCROLL_END"),100),[m,n]=(f={hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}},c.useReducer((a,b)=>f[a][b]??a,"hidden"));return c.useEffect(()=>{if("idle"===m){let a=window.setTimeout(()=>n("HIDE"),i.scrollHideDelay);return()=>window.clearTimeout(a)}},[m,i.scrollHideDelay,n]),c.useEffect(()=>{let a=i.viewport,b=j?"scrollLeft":"scrollTop";if(a){let c=a[b],d=()=>{let d=a[b];c!==d&&(n("SCROLL"),k()),c=d};return a.addEventListener("scroll",d),()=>a.removeEventListener("scroll",d)}},[i.viewport,j,n,k]),(0,b.jsx)(e.Presence,{present:g||"hidden"!==m,children:(0,b.jsx)(z,{"data-state":"hidden"===m?"hidden":"visible",...h,ref:d,onPointerEnter:(0,l.composeEventHandlers)(a.onPointerEnter,()=>n("POINTER_ENTER")),onPointerLeave:(0,l.composeEventHandlers)(a.onPointerLeave,()=>n("POINTER_LEAVE"))})})}),y=c.forwardRef((a,d)=>{let f=q(u,a.__scopeScrollArea),{forceMount:g,...h}=a,[i,j]=c.useState(!1),k="horizontal"===a.orientation,l=R(()=>{if(f.viewport){let a=f.viewport.offsetWidth<f.viewport.scrollWidth,b=f.viewport.offsetHeight<f.viewport.scrollHeight;j(k?a:b)}},10);return S(f.viewport,l),S(f.content,l),(0,b.jsx)(e.Presence,{present:g||i,children:(0,b.jsx)(z,{"data-state":i?"visible":"hidden",...h,ref:d})})}),z=c.forwardRef((a,d)=>{let{orientation:e="vertical",...f}=a,g=q(u,a.__scopeScrollArea),h=c.useRef(null),i=c.useRef(0),[j,k]=c.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),l=M(j.viewport,j.content),m={...f,sizes:j,onSizesChange:k,hasThumb:!!(l>0&&l<1),onThumbChange:a=>h.current=a,onThumbPointerUp:()=>i.current=0,onThumbPointerDown:a=>i.current=a};function n(a,b){return function(a,b,c,d="ltr"){let e=N(c),f=b||e/2,g=c.scrollbar.paddingStart+f,h=c.scrollbar.size-c.scrollbar.paddingEnd-(e-f),i=c.content-c.viewport;return P([g,h],"ltr"===d?[0,i]:[-1*i,0])(a)}(a,i.current,j,b)}return"horizontal"===e?(0,b.jsx)(A,{...m,ref:d,onThumbPositionChange:()=>{if(g.viewport&&h.current){let a=O(g.viewport.scrollLeft,j,g.dir);h.current.style.transform=`translate3d(${a}px, 0, 0)`}},onWheelScroll:a=>{g.viewport&&(g.viewport.scrollLeft=a)},onDragScroll:a=>{g.viewport&&(g.viewport.scrollLeft=n(a,g.dir))}}):"vertical"===e?(0,b.jsx)(B,{...m,ref:d,onThumbPositionChange:()=>{if(g.viewport&&h.current){let a=O(g.viewport.scrollTop,j);h.current.style.transform=`translate3d(0, ${a}px, 0)`}},onWheelScroll:a=>{g.viewport&&(g.viewport.scrollTop=a)},onDragScroll:a=>{g.viewport&&(g.viewport.scrollTop=n(a))}}):null}),A=c.forwardRef((a,d)=>{let{sizes:e,onSizesChange:f,...h}=a,i=q(u,a.__scopeScrollArea),[j,k]=c.useState(),l=c.useRef(null),m=(0,g.useComposedRefs)(d,l,i.onScrollbarXChange);return c.useEffect(()=>{l.current&&k(getComputedStyle(l.current))},[l]),(0,b.jsx)(E,{"data-orientation":"horizontal",...h,ref:m,sizes:e,style:{bottom:0,left:"rtl"===i.dir?"var(--radix-scroll-area-corner-width)":0,right:"ltr"===i.dir?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":N(e)+"px",...a.style},onThumbPointerDown:b=>a.onThumbPointerDown(b.x),onDragScroll:b=>a.onDragScroll(b.x),onWheelScroll:(b,c)=>{if(i.viewport){var d,e;let f=i.viewport.scrollLeft+b.deltaX;a.onWheelScroll(f),d=f,e=c,d>0&&d<e&&b.preventDefault()}},onResize:()=>{l.current&&i.viewport&&j&&f({content:i.viewport.scrollWidth,viewport:i.viewport.offsetWidth,scrollbar:{size:l.current.clientWidth,paddingStart:L(j.paddingLeft),paddingEnd:L(j.paddingRight)}})}})}),B=c.forwardRef((a,d)=>{let{sizes:e,onSizesChange:f,...h}=a,i=q(u,a.__scopeScrollArea),[j,k]=c.useState(),l=c.useRef(null),m=(0,g.useComposedRefs)(d,l,i.onScrollbarYChange);return c.useEffect(()=>{l.current&&k(getComputedStyle(l.current))},[l]),(0,b.jsx)(E,{"data-orientation":"vertical",...h,ref:m,sizes:e,style:{top:0,right:"ltr"===i.dir?0:void 0,left:"rtl"===i.dir?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":N(e)+"px",...a.style},onThumbPointerDown:b=>a.onThumbPointerDown(b.y),onDragScroll:b=>a.onDragScroll(b.y),onWheelScroll:(b,c)=>{if(i.viewport){var d,e;let f=i.viewport.scrollTop+b.deltaY;a.onWheelScroll(f),d=f,e=c,d>0&&d<e&&b.preventDefault()}},onResize:()=>{l.current&&i.viewport&&j&&f({content:i.viewport.scrollHeight,viewport:i.viewport.offsetHeight,scrollbar:{size:l.current.clientHeight,paddingStart:L(j.paddingTop),paddingEnd:L(j.paddingBottom)}})}})}),[C,D]=n(u),E=c.forwardRef((a,e)=>{let{__scopeScrollArea:f,sizes:i,hasThumb:j,onThumbChange:k,onThumbPointerUp:m,onThumbPointerDown:n,onThumbPositionChange:o,onDragScroll:p,onWheelScroll:r,onResize:s,...t}=a,v=q(u,f),[w,x]=c.useState(null),y=(0,g.useComposedRefs)(e,a=>x(a)),z=c.useRef(null),A=c.useRef(""),B=v.viewport,D=i.content-i.viewport,E=(0,h.useCallbackRef)(r),F=(0,h.useCallbackRef)(o),G=R(s,10);function H(a){z.current&&p({x:a.clientX-z.current.left,y:a.clientY-z.current.top})}return c.useEffect(()=>{let a=a=>{let b=a.target;w?.contains(b)&&E(a,D)};return document.addEventListener("wheel",a,{passive:!1}),()=>document.removeEventListener("wheel",a,{passive:!1})},[B,w,D,E]),c.useEffect(F,[i,F]),S(w,G),S(v.content,G),(0,b.jsx)(C,{scope:f,scrollbar:w,hasThumb:j,onThumbChange:(0,h.useCallbackRef)(k),onThumbPointerUp:(0,h.useCallbackRef)(m),onThumbPositionChange:F,onThumbPointerDown:(0,h.useCallbackRef)(n),children:(0,b.jsx)(d.Primitive.div,{...t,ref:y,style:{position:"absolute",...t.style},onPointerDown:(0,l.composeEventHandlers)(a.onPointerDown,a=>{0===a.button&&(a.target.setPointerCapture(a.pointerId),z.current=w.getBoundingClientRect(),A.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",v.viewport&&(v.viewport.style.scrollBehavior="auto"),H(a))}),onPointerMove:(0,l.composeEventHandlers)(a.onPointerMove,H),onPointerUp:(0,l.composeEventHandlers)(a.onPointerUp,a=>{let b=a.target;b.hasPointerCapture(a.pointerId)&&b.releasePointerCapture(a.pointerId),document.body.style.webkitUserSelect=A.current,v.viewport&&(v.viewport.style.scrollBehavior=""),z.current=null})})})}),F="ScrollAreaThumb",G=c.forwardRef((a,c)=>{let{forceMount:d,...f}=a,g=D(F,a.__scopeScrollArea);return(0,b.jsx)(e.Presence,{present:d||g.hasThumb,children:(0,b.jsx)(H,{ref:c,...f})})}),H=c.forwardRef((a,e)=>{let{__scopeScrollArea:f,style:h,...i}=a,j=q(F,f),k=D(F,f),{onThumbPositionChange:m}=k,n=(0,g.useComposedRefs)(e,a=>k.onThumbChange(a)),o=c.useRef(void 0),p=R(()=>{o.current&&(o.current(),o.current=void 0)},100);return c.useEffect(()=>{let a=j.viewport;if(a){let b=()=>{p(),o.current||(o.current=Q(a,m),m())};return m(),a.addEventListener("scroll",b),()=>a.removeEventListener("scroll",b)}},[j.viewport,p,m]),(0,b.jsx)(d.Primitive.div,{"data-state":k.hasThumb?"visible":"hidden",...i,ref:n,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...h},onPointerDownCapture:(0,l.composeEventHandlers)(a.onPointerDownCapture,a=>{let b=a.target.getBoundingClientRect(),c=a.clientX-b.left,d=a.clientY-b.top;k.onThumbPointerDown({x:c,y:d})}),onPointerUp:(0,l.composeEventHandlers)(a.onPointerUp,k.onThumbPointerUp)})});G.displayName=F;var I="ScrollAreaCorner",J=c.forwardRef((a,c)=>{let d=q(I,a.__scopeScrollArea),e=!!(d.scrollbarX&&d.scrollbarY);return"scroll"!==d.type&&e?(0,b.jsx)(K,{...a,ref:c}):null});J.displayName=I;var K=c.forwardRef((a,e)=>{let{__scopeScrollArea:f,...g}=a,h=q(I,f),[i,j]=c.useState(0),[k,l]=c.useState(0),m=!!(i&&k);return S(h.scrollbarX,()=>{let a=h.scrollbarX?.offsetHeight||0;h.onCornerHeightChange(a),l(a)}),S(h.scrollbarY,()=>{let a=h.scrollbarY?.offsetWidth||0;h.onCornerWidthChange(a),j(a)}),m?(0,b.jsx)(d.Primitive.div,{...g,ref:e,style:{width:i,height:k,position:"absolute",right:"ltr"===h.dir?0:void 0,left:"rtl"===h.dir?0:void 0,bottom:0,...a.style}}):null});function L(a){return a?parseInt(a,10):0}function M(a,b){let c=a/b;return isNaN(c)?0:c}function N(a){let b=M(a.viewport,a.content),c=a.scrollbar.paddingStart+a.scrollbar.paddingEnd;return Math.max((a.scrollbar.size-c)*b,18)}function O(a,b,c="ltr"){let d=N(b),e=b.scrollbar.paddingStart+b.scrollbar.paddingEnd,f=b.scrollbar.size-e,g=b.content-b.viewport,h=(0,k.clamp)(a,"ltr"===c?[0,g]:[-1*g,0]);return P([0,g],[0,f-d])(h)}function P(a,b){return c=>{if(a[0]===a[1]||b[0]===b[1])return b[0];let d=(b[1]-b[0])/(a[1]-a[0]);return b[0]+d*(c-a[0])}}var Q=(a,b=()=>{})=>{let c={left:a.scrollLeft,top:a.scrollTop},d=0;return!function e(){let f={left:a.scrollLeft,top:a.scrollTop},g=c.left!==f.left,h=c.top!==f.top;(g||h)&&b(),c=f,d=window.requestAnimationFrame(e)}(),()=>window.cancelAnimationFrame(d)};function R(a,b){let d=(0,h.useCallbackRef)(a),e=c.useRef(0);return c.useEffect(()=>()=>window.clearTimeout(e.current),[]),c.useCallback(()=>{window.clearTimeout(e.current),e.current=window.setTimeout(d,b)},[d,b])}function S(a,b){let c=(0,h.useCallbackRef)(b);(0,j.useLayoutEffect)(()=>{let b=0;if(a){let d=new ResizeObserver(()=>{cancelAnimationFrame(b),b=window.requestAnimationFrame(c)});return d.observe(a),()=>{window.cancelAnimationFrame(b),d.unobserve(a)}}},[a,c])}a.s(["Corner",()=>J,"Root",()=>r,"ScrollArea",()=>r,"ScrollAreaCorner",()=>J,"ScrollAreaScrollbar",()=>v,"ScrollAreaThumb",()=>G,"ScrollAreaViewport",()=>t,"Scrollbar",()=>v,"Thumb",()=>G,"Viewport",()=>t,"createScrollAreaScope",()=>o],73942);var T=a.i(73942),T=T,U=a.i(85536);function V({className:a,children:c,...d}){return(0,b.jsxs)(T.Root,{"data-slot":"scroll-area",className:(0,U.cn)("relative",a),...d,children:[(0,b.jsx)(T.Viewport,{"data-slot":"scroll-area-viewport",className:"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&>div]:block!",children:c}),(0,b.jsx)(W,{}),(0,b.jsx)(T.Corner,{})]})}function W({className:a,orientation:c="vertical",...d}){return(0,b.jsx)(T.ScrollAreaScrollbar,{"data-slot":"scroll-area-scrollbar",orientation:c,className:(0,U.cn)("flex touch-none p-px transition-colors select-none","vertical"===c&&"h-full w-2.5 border-s border-s-transparent","horizontal"===c&&"h-2.5 flex-col border-t border-t-transparent",a),...d,children:(0,b.jsx)(T.ScrollAreaThumb,{"data-slot":"scroll-area-thumb",className:"bg-border relative flex-1 rounded-full"})})}a.s(["ScrollArea",()=>V],98963)},73708,a=>{"use strict";let b=(0,a.i(25700).default)("git-fork",[["circle",{cx:"12",cy:"18",r:"3",key:"1mpf1b"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["path",{d:"M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9",key:"1uq4wg"}],["path",{d:"M12 12v3",key:"158kv8"}]]);a.s(["GitFork",()=>b],73708)},4085,a=>{"use strict";let b=(0,a.i(25700).default)("folder",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);a.s(["Folder",()=>b],4085)},21434,34379,a=>{"use strict";var b=a.i(41176),c=a.i(44592),d=a.i(3410),e=a.i(4085),f=a.i(3195),g=a.i(88064),h=a.i(93741),i=a.i(52313),j=a.i(45670),k=a.i(18948),l=a.i(98963);async function m(a){let b=new URLSearchParams;a&&b.set("path",a);let c=await fetch(`/api/directory/list?${b.toString()}`);if(!c.ok)throw Error((await c.json().catch(()=>({error:"Failed to load directory"}))).error??"Failed to load directory");return c.json()}function n({currentPath:a,isEditing:e,onToggleEdit:f,onNavigate:g}){let i=(0,c.useRef)(null),[j,k]=(0,c.useState)(a);function l(){k(a),f()}(0,c.useEffect)(()=>{k(a)},[a]),(0,c.useEffect)(()=>{e&&i.current&&(i.current.focus(),i.current.select())},[e]);let m=function(a){if(!a)return[];let b=/^[a-zA-Z]:/.test(a),c=b?"\\":"/",d=a.split(/[\\/]/).filter(Boolean),e=[];for(let a=0;a<d.length;a++){let f=b?d.slice(0,a+1).join(c):c+d.slice(0,a+1).join(c);e.push({label:d[a],path:f})}return e}(a),n=m.length>3,o=n?m.slice(-3):m;return(0,b.jsxs)("div",{className:"border-b px-4 py-3",children:[(0,b.jsx)("h2",{className:"text-foreground mb-2.5 text-sm font-semibold tracking-[-0.01em]",children:"Select Folder"}),e?(0,b.jsx)("input",{ref:i,type:"text",value:j,onChange:a=>k(a.target.value),onKeyDown:a=>{if("Enter"===a.key){let b;a.preventDefault(),(b=j.trim())&&g(b)}"Escape"===a.key&&(a.preventDefault(),l())},onBlur:l,className:"bg-muted/60 border-border focus:ring-ring/20 focus:border-ring w-full rounded-lg border px-3 py-2 font-mono text-xs transition-all outline-none focus:ring-2",placeholder:"Type a path and press Enter...",spellCheck:!1,autoComplete:"off"}):(0,b.jsxs)("div",{className:"bg-muted/40 flex items-center gap-1 rounded-lg px-2.5 py-2",children:[(0,b.jsx)("button",{type:"button",onClick:()=>g("/"),className:"text-muted-foreground hover:text-foreground hover:bg-background shrink-0 rounded px-1.5 py-0.5 font-mono text-xs transition-colors",children:"/"}),n?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(d.ChevronRight,{className:"text-muted-foreground/30 h-3 w-3 shrink-0"}),(0,b.jsx)("span",{className:"text-muted-foreground/40 font-mono text-xs",children:"..."})]}):null,o.map((a,c)=>{let e=c===o.length-1;return(0,b.jsxs)("span",{className:"flex shrink-0 items-center gap-1",children:[(0,b.jsx)(d.ChevronRight,{className:"text-muted-foreground/30 h-3 w-3"}),e?(0,b.jsx)("span",{className:"bg-primary/10 text-primary rounded px-2 py-0.5 font-mono text-xs font-medium",children:a.label}):(0,b.jsx)("button",{type:"button",onClick:()=>g(a.path),className:"text-muted-foreground hover:text-foreground hover:bg-background rounded px-1.5 py-0.5 font-mono text-xs transition-colors",children:a.label})]},a.path)}),(0,b.jsx)("div",{className:"flex-1"}),(0,b.jsx)("button",{type:"button",onClick:f,className:"text-muted-foreground/40 hover:text-foreground hover:bg-background shrink-0 rounded p-1 transition-colors","aria-label":"Edit path",children:(0,b.jsx)(h.Pencil,{className:"h-3 w-3"})})]})]})}function o({open:a,onOpenChange:h,onSelect:o,initialPath:p}){let[q,r]=(0,c.useState)([]),[s,t]=(0,c.useState)(""),[u,v]=(0,c.useState)(!1),[w,x]=(0,c.useState)(!1),y=(0,c.useRef)(!1),[z,A]=(0,c.useState)(0),B=(0,c.useCallback)(async a=>{v(!0),x(!1);try{let b=await m(a);r(b.entries),t(b.currentPath),A(a=>a+1)}catch(b){let a=b instanceof Error?b.message:"Failed to load directory";i.toast.error(a)}finally{v(!1)}},[]);function C(a){B(a)}function D(){o(null),h(!1)}return(0,c.useEffect)(()=>{a&&!y.current&&(y.current=!0,B(p)),a||(y.current=!1,x(!1))},[a,p,B]),(0,b.jsx)(j.Dialog,{open:a,onOpenChange:a=>{a||D()},children:(0,b.jsxs)(j.DialogContent,{className:"flex h-[min(520px,85dvh)] w-full max-w-[460px] flex-col gap-0 overflow-hidden p-0",onCloseAutoFocus:a=>a.preventDefault(),children:[(0,b.jsx)(j.DialogTitle,{className:"sr-only",children:"Select Folder"}),(0,b.jsx)(j.DialogDescription,{className:"sr-only",children:"Navigate to a folder and select it"}),(0,b.jsx)(n,{currentPath:s,isEditing:w,onToggleEdit:()=>x(a=>!a),onNavigate:C}),(0,b.jsx)(l.ScrollArea,{className:"min-h-0 flex-1",children:u&&0===q.length?(0,b.jsx)("div",{className:"space-y-0.5 p-2",children:Array.from({length:8}).map((a,c)=>(0,b.jsxs)("div",{className:"flex items-center gap-3 rounded-lg px-3 py-2.5",style:{opacity:1-.1*c},children:[(0,b.jsx)("div",{className:"bg-muted h-4 w-4 animate-pulse rounded"}),(0,b.jsx)("div",{className:"bg-muted h-3.5 animate-pulse rounded",style:{width:`${40+35*Math.random()}%`}})]},`skeleton-${c}`))}):0===q.length?(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center py-20",children:[(0,b.jsx)(f.FolderOpen,{className:"text-muted-foreground/25 mb-3 h-10 w-10"}),(0,b.jsx)("p",{className:"text-muted-foreground/60 text-sm",children:"Empty folder"})]}):(0,b.jsx)("div",{className:"p-2",children:q.map((a,c)=>(0,b.jsxs)("button",{type:"button",onClick:()=>C(a.path),className:"folder-row group flex w-full items-center gap-3 rounded-lg px-3 py-2.5 text-left transition-all hover:bg-[var(--color-primary)]/[0.06] active:scale-[0.997]",style:{animationDelay:`${20*c}ms`},children:[(0,b.jsx)(e.Folder,{className:"text-muted-foreground/50 group-hover:text-primary h-[18px] w-[18px] shrink-0 transition-colors"}),(0,b.jsx)("span",{className:"text-foreground min-w-0 flex-1 truncate text-[13px] font-medium",children:a.name}),(0,b.jsx)(d.ChevronRight,{className:"text-muted-foreground/0 group-hover:text-muted-foreground/40 h-3.5 w-3.5 shrink-0 transition-all"})]},a.path))},z)}),(0,b.jsxs)("div",{className:"flex items-center gap-2 border-t px-4 py-3",children:[(0,b.jsx)("p",{className:"text-muted-foreground min-w-0 flex-1 truncate font-mono text-[11px] leading-none",children:s||" "}),(0,b.jsx)(k.Button,{variant:"ghost",size:"sm",onClick:D,className:"text-muted-foreground h-8 shrink-0 px-3 text-xs",children:"Cancel"}),(0,b.jsxs)(k.Button,{size:"sm",onClick:function(){s&&(o(s),h(!1))},disabled:!s||u,className:"h-8 shrink-0 px-5 text-xs font-medium",children:[u?(0,b.jsx)(g.Loader2,{className:"mr-1.5 h-3 w-3 animate-spin"}):null,"Select"]})]})]})})}a.s(["ReactFileManagerDialog",()=>o],34379),a.s([],21434)},1377,a=>{"use strict";var b=a.i(89111);let c=(0,b.createServerReference)("004db1988c534ce1b59d5cf3ab2e2cdeb8d81a76f6",b.callServer,void 0,b.findSourceMapURL,"pickFolder");async function d(){let a=await c();if(a.error)throw Error(a.error);return a.path}a.s(["pickFolder",()=>d],1377)}];
1
+ module.exports=[98963,a=>{"use strict";var b=a.i(41176),c=a.i(44592),d=a.i(66873),e=a.i(14272),f=a.i(7420),g=a.i(6175),h=a.i(79406),i=a.i(48939),j=a.i(61476),k=a.i(48972),l=a.i(59653),m="ScrollArea",[n,o]=(0,f.createContextScope)(m),[p,q]=n(m),r=c.forwardRef((a,e)=>{let{__scopeScrollArea:f,type:h="hover",dir:j,scrollHideDelay:k=600,...l}=a,[m,n]=c.useState(null),[o,q]=c.useState(null),[r,s]=c.useState(null),[t,u]=c.useState(null),[v,w]=c.useState(null),[x,y]=c.useState(0),[z,A]=c.useState(0),[B,C]=c.useState(!1),[D,E]=c.useState(!1),F=(0,g.useComposedRefs)(e,a=>n(a)),G=(0,i.useDirection)(j);return(0,b.jsx)(p,{scope:f,type:h,dir:G,scrollHideDelay:k,scrollArea:m,viewport:o,onViewportChange:q,content:r,onContentChange:s,scrollbarX:t,onScrollbarXChange:u,scrollbarXEnabled:B,onScrollbarXEnabledChange:C,scrollbarY:v,onScrollbarYChange:w,scrollbarYEnabled:D,onScrollbarYEnabledChange:E,onCornerWidthChange:y,onCornerHeightChange:A,children:(0,b.jsx)(d.Primitive.div,{dir:G,...l,ref:F,style:{position:"relative","--radix-scroll-area-corner-width":x+"px","--radix-scroll-area-corner-height":z+"px",...a.style}})})});r.displayName=m;var s="ScrollAreaViewport",t=c.forwardRef((a,e)=>{let{__scopeScrollArea:f,children:h,nonce:i,...j}=a,k=q(s,f),l=c.useRef(null),m=(0,g.useComposedRefs)(e,l,k.onViewportChange);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"},nonce:i}),(0,b.jsx)(d.Primitive.div,{"data-radix-scroll-area-viewport":"",...j,ref:m,style:{overflowX:k.scrollbarXEnabled?"scroll":"hidden",overflowY:k.scrollbarYEnabled?"scroll":"hidden",...a.style},children:(0,b.jsx)("div",{ref:k.onContentChange,style:{minWidth:"100%",display:"table"},children:h})})]})});t.displayName=s;var u="ScrollAreaScrollbar",v=c.forwardRef((a,d)=>{let{forceMount:e,...f}=a,g=q(u,a.__scopeScrollArea),{onScrollbarXEnabledChange:h,onScrollbarYEnabledChange:i}=g,j="horizontal"===a.orientation;return c.useEffect(()=>(j?h(!0):i(!0),()=>{j?h(!1):i(!1)}),[j,h,i]),"hover"===g.type?(0,b.jsx)(w,{...f,ref:d,forceMount:e}):"scroll"===g.type?(0,b.jsx)(x,{...f,ref:d,forceMount:e}):"auto"===g.type?(0,b.jsx)(y,{...f,ref:d,forceMount:e}):"always"===g.type?(0,b.jsx)(z,{...f,ref:d}):null});v.displayName=u;var w=c.forwardRef((a,d)=>{let{forceMount:f,...g}=a,h=q(u,a.__scopeScrollArea),[i,j]=c.useState(!1);return c.useEffect(()=>{let a=h.scrollArea,b=0;if(a){let c=()=>{window.clearTimeout(b),j(!0)},d=()=>{b=window.setTimeout(()=>j(!1),h.scrollHideDelay)};return a.addEventListener("pointerenter",c),a.addEventListener("pointerleave",d),()=>{window.clearTimeout(b),a.removeEventListener("pointerenter",c),a.removeEventListener("pointerleave",d)}}},[h.scrollArea,h.scrollHideDelay]),(0,b.jsx)(e.Presence,{present:f||i,children:(0,b.jsx)(y,{"data-state":i?"visible":"hidden",...g,ref:d})})}),x=c.forwardRef((a,d)=>{var f;let{forceMount:g,...h}=a,i=q(u,a.__scopeScrollArea),j="horizontal"===a.orientation,k=R(()=>n("SCROLL_END"),100),[m,n]=(f={hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}},c.useReducer((a,b)=>f[a][b]??a,"hidden"));return c.useEffect(()=>{if("idle"===m){let a=window.setTimeout(()=>n("HIDE"),i.scrollHideDelay);return()=>window.clearTimeout(a)}},[m,i.scrollHideDelay,n]),c.useEffect(()=>{let a=i.viewport,b=j?"scrollLeft":"scrollTop";if(a){let c=a[b],d=()=>{let d=a[b];c!==d&&(n("SCROLL"),k()),c=d};return a.addEventListener("scroll",d),()=>a.removeEventListener("scroll",d)}},[i.viewport,j,n,k]),(0,b.jsx)(e.Presence,{present:g||"hidden"!==m,children:(0,b.jsx)(z,{"data-state":"hidden"===m?"hidden":"visible",...h,ref:d,onPointerEnter:(0,l.composeEventHandlers)(a.onPointerEnter,()=>n("POINTER_ENTER")),onPointerLeave:(0,l.composeEventHandlers)(a.onPointerLeave,()=>n("POINTER_LEAVE"))})})}),y=c.forwardRef((a,d)=>{let f=q(u,a.__scopeScrollArea),{forceMount:g,...h}=a,[i,j]=c.useState(!1),k="horizontal"===a.orientation,l=R(()=>{if(f.viewport){let a=f.viewport.offsetWidth<f.viewport.scrollWidth,b=f.viewport.offsetHeight<f.viewport.scrollHeight;j(k?a:b)}},10);return S(f.viewport,l),S(f.content,l),(0,b.jsx)(e.Presence,{present:g||i,children:(0,b.jsx)(z,{"data-state":i?"visible":"hidden",...h,ref:d})})}),z=c.forwardRef((a,d)=>{let{orientation:e="vertical",...f}=a,g=q(u,a.__scopeScrollArea),h=c.useRef(null),i=c.useRef(0),[j,k]=c.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),l=M(j.viewport,j.content),m={...f,sizes:j,onSizesChange:k,hasThumb:!!(l>0&&l<1),onThumbChange:a=>h.current=a,onThumbPointerUp:()=>i.current=0,onThumbPointerDown:a=>i.current=a};function n(a,b){return function(a,b,c,d="ltr"){let e=N(c),f=b||e/2,g=c.scrollbar.paddingStart+f,h=c.scrollbar.size-c.scrollbar.paddingEnd-(e-f),i=c.content-c.viewport;return P([g,h],"ltr"===d?[0,i]:[-1*i,0])(a)}(a,i.current,j,b)}return"horizontal"===e?(0,b.jsx)(A,{...m,ref:d,onThumbPositionChange:()=>{if(g.viewport&&h.current){let a=O(g.viewport.scrollLeft,j,g.dir);h.current.style.transform=`translate3d(${a}px, 0, 0)`}},onWheelScroll:a=>{g.viewport&&(g.viewport.scrollLeft=a)},onDragScroll:a=>{g.viewport&&(g.viewport.scrollLeft=n(a,g.dir))}}):"vertical"===e?(0,b.jsx)(B,{...m,ref:d,onThumbPositionChange:()=>{if(g.viewport&&h.current){let a=O(g.viewport.scrollTop,j);h.current.style.transform=`translate3d(0, ${a}px, 0)`}},onWheelScroll:a=>{g.viewport&&(g.viewport.scrollTop=a)},onDragScroll:a=>{g.viewport&&(g.viewport.scrollTop=n(a))}}):null}),A=c.forwardRef((a,d)=>{let{sizes:e,onSizesChange:f,...h}=a,i=q(u,a.__scopeScrollArea),[j,k]=c.useState(),l=c.useRef(null),m=(0,g.useComposedRefs)(d,l,i.onScrollbarXChange);return c.useEffect(()=>{l.current&&k(getComputedStyle(l.current))},[l]),(0,b.jsx)(E,{"data-orientation":"horizontal",...h,ref:m,sizes:e,style:{bottom:0,left:"rtl"===i.dir?"var(--radix-scroll-area-corner-width)":0,right:"ltr"===i.dir?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":N(e)+"px",...a.style},onThumbPointerDown:b=>a.onThumbPointerDown(b.x),onDragScroll:b=>a.onDragScroll(b.x),onWheelScroll:(b,c)=>{if(i.viewport){var d,e;let f=i.viewport.scrollLeft+b.deltaX;a.onWheelScroll(f),d=f,e=c,d>0&&d<e&&b.preventDefault()}},onResize:()=>{l.current&&i.viewport&&j&&f({content:i.viewport.scrollWidth,viewport:i.viewport.offsetWidth,scrollbar:{size:l.current.clientWidth,paddingStart:L(j.paddingLeft),paddingEnd:L(j.paddingRight)}})}})}),B=c.forwardRef((a,d)=>{let{sizes:e,onSizesChange:f,...h}=a,i=q(u,a.__scopeScrollArea),[j,k]=c.useState(),l=c.useRef(null),m=(0,g.useComposedRefs)(d,l,i.onScrollbarYChange);return c.useEffect(()=>{l.current&&k(getComputedStyle(l.current))},[l]),(0,b.jsx)(E,{"data-orientation":"vertical",...h,ref:m,sizes:e,style:{top:0,right:"ltr"===i.dir?0:void 0,left:"rtl"===i.dir?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":N(e)+"px",...a.style},onThumbPointerDown:b=>a.onThumbPointerDown(b.y),onDragScroll:b=>a.onDragScroll(b.y),onWheelScroll:(b,c)=>{if(i.viewport){var d,e;let f=i.viewport.scrollTop+b.deltaY;a.onWheelScroll(f),d=f,e=c,d>0&&d<e&&b.preventDefault()}},onResize:()=>{l.current&&i.viewport&&j&&f({content:i.viewport.scrollHeight,viewport:i.viewport.offsetHeight,scrollbar:{size:l.current.clientHeight,paddingStart:L(j.paddingTop),paddingEnd:L(j.paddingBottom)}})}})}),[C,D]=n(u),E=c.forwardRef((a,e)=>{let{__scopeScrollArea:f,sizes:i,hasThumb:j,onThumbChange:k,onThumbPointerUp:m,onThumbPointerDown:n,onThumbPositionChange:o,onDragScroll:p,onWheelScroll:r,onResize:s,...t}=a,v=q(u,f),[w,x]=c.useState(null),y=(0,g.useComposedRefs)(e,a=>x(a)),z=c.useRef(null),A=c.useRef(""),B=v.viewport,D=i.content-i.viewport,E=(0,h.useCallbackRef)(r),F=(0,h.useCallbackRef)(o),G=R(s,10);function H(a){z.current&&p({x:a.clientX-z.current.left,y:a.clientY-z.current.top})}return c.useEffect(()=>{let a=a=>{let b=a.target;w?.contains(b)&&E(a,D)};return document.addEventListener("wheel",a,{passive:!1}),()=>document.removeEventListener("wheel",a,{passive:!1})},[B,w,D,E]),c.useEffect(F,[i,F]),S(w,G),S(v.content,G),(0,b.jsx)(C,{scope:f,scrollbar:w,hasThumb:j,onThumbChange:(0,h.useCallbackRef)(k),onThumbPointerUp:(0,h.useCallbackRef)(m),onThumbPositionChange:F,onThumbPointerDown:(0,h.useCallbackRef)(n),children:(0,b.jsx)(d.Primitive.div,{...t,ref:y,style:{position:"absolute",...t.style},onPointerDown:(0,l.composeEventHandlers)(a.onPointerDown,a=>{0===a.button&&(a.target.setPointerCapture(a.pointerId),z.current=w.getBoundingClientRect(),A.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",v.viewport&&(v.viewport.style.scrollBehavior="auto"),H(a))}),onPointerMove:(0,l.composeEventHandlers)(a.onPointerMove,H),onPointerUp:(0,l.composeEventHandlers)(a.onPointerUp,a=>{let b=a.target;b.hasPointerCapture(a.pointerId)&&b.releasePointerCapture(a.pointerId),document.body.style.webkitUserSelect=A.current,v.viewport&&(v.viewport.style.scrollBehavior=""),z.current=null})})})}),F="ScrollAreaThumb",G=c.forwardRef((a,c)=>{let{forceMount:d,...f}=a,g=D(F,a.__scopeScrollArea);return(0,b.jsx)(e.Presence,{present:d||g.hasThumb,children:(0,b.jsx)(H,{ref:c,...f})})}),H=c.forwardRef((a,e)=>{let{__scopeScrollArea:f,style:h,...i}=a,j=q(F,f),k=D(F,f),{onThumbPositionChange:m}=k,n=(0,g.useComposedRefs)(e,a=>k.onThumbChange(a)),o=c.useRef(void 0),p=R(()=>{o.current&&(o.current(),o.current=void 0)},100);return c.useEffect(()=>{let a=j.viewport;if(a){let b=()=>{p(),o.current||(o.current=Q(a,m),m())};return m(),a.addEventListener("scroll",b),()=>a.removeEventListener("scroll",b)}},[j.viewport,p,m]),(0,b.jsx)(d.Primitive.div,{"data-state":k.hasThumb?"visible":"hidden",...i,ref:n,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...h},onPointerDownCapture:(0,l.composeEventHandlers)(a.onPointerDownCapture,a=>{let b=a.target.getBoundingClientRect(),c=a.clientX-b.left,d=a.clientY-b.top;k.onThumbPointerDown({x:c,y:d})}),onPointerUp:(0,l.composeEventHandlers)(a.onPointerUp,k.onThumbPointerUp)})});G.displayName=F;var I="ScrollAreaCorner",J=c.forwardRef((a,c)=>{let d=q(I,a.__scopeScrollArea),e=!!(d.scrollbarX&&d.scrollbarY);return"scroll"!==d.type&&e?(0,b.jsx)(K,{...a,ref:c}):null});J.displayName=I;var K=c.forwardRef((a,e)=>{let{__scopeScrollArea:f,...g}=a,h=q(I,f),[i,j]=c.useState(0),[k,l]=c.useState(0),m=!!(i&&k);return S(h.scrollbarX,()=>{let a=h.scrollbarX?.offsetHeight||0;h.onCornerHeightChange(a),l(a)}),S(h.scrollbarY,()=>{let a=h.scrollbarY?.offsetWidth||0;h.onCornerWidthChange(a),j(a)}),m?(0,b.jsx)(d.Primitive.div,{...g,ref:e,style:{width:i,height:k,position:"absolute",right:"ltr"===h.dir?0:void 0,left:"rtl"===h.dir?0:void 0,bottom:0,...a.style}}):null});function L(a){return a?parseInt(a,10):0}function M(a,b){let c=a/b;return isNaN(c)?0:c}function N(a){let b=M(a.viewport,a.content),c=a.scrollbar.paddingStart+a.scrollbar.paddingEnd;return Math.max((a.scrollbar.size-c)*b,18)}function O(a,b,c="ltr"){let d=N(b),e=b.scrollbar.paddingStart+b.scrollbar.paddingEnd,f=b.scrollbar.size-e,g=b.content-b.viewport,h=(0,k.clamp)(a,"ltr"===c?[0,g]:[-1*g,0]);return P([0,g],[0,f-d])(h)}function P(a,b){return c=>{if(a[0]===a[1]||b[0]===b[1])return b[0];let d=(b[1]-b[0])/(a[1]-a[0]);return b[0]+d*(c-a[0])}}var Q=(a,b=()=>{})=>{let c={left:a.scrollLeft,top:a.scrollTop},d=0;return!function e(){let f={left:a.scrollLeft,top:a.scrollTop},g=c.left!==f.left,h=c.top!==f.top;(g||h)&&b(),c=f,d=window.requestAnimationFrame(e)}(),()=>window.cancelAnimationFrame(d)};function R(a,b){let d=(0,h.useCallbackRef)(a),e=c.useRef(0);return c.useEffect(()=>()=>window.clearTimeout(e.current),[]),c.useCallback(()=>{window.clearTimeout(e.current),e.current=window.setTimeout(d,b)},[d,b])}function S(a,b){let c=(0,h.useCallbackRef)(b);(0,j.useLayoutEffect)(()=>{let b=0;if(a){let d=new ResizeObserver(()=>{cancelAnimationFrame(b),b=window.requestAnimationFrame(c)});return d.observe(a),()=>{window.cancelAnimationFrame(b),d.unobserve(a)}}},[a,c])}a.s(["Corner",()=>J,"Root",()=>r,"ScrollArea",()=>r,"ScrollAreaCorner",()=>J,"ScrollAreaScrollbar",()=>v,"ScrollAreaThumb",()=>G,"ScrollAreaViewport",()=>t,"Scrollbar",()=>v,"Thumb",()=>G,"Viewport",()=>t,"createScrollAreaScope",()=>o],73942);var T=a.i(73942),T=T,U=a.i(85536);function V({className:a,children:c,...d}){return(0,b.jsxs)(T.Root,{"data-slot":"scroll-area",className:(0,U.cn)("relative",a),...d,children:[(0,b.jsx)(T.Viewport,{"data-slot":"scroll-area-viewport",className:"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&>div]:block!",children:c}),(0,b.jsx)(W,{}),(0,b.jsx)(T.Corner,{})]})}function W({className:a,orientation:c="vertical",...d}){return(0,b.jsx)(T.ScrollAreaScrollbar,{"data-slot":"scroll-area-scrollbar",orientation:c,className:(0,U.cn)("flex touch-none p-px transition-colors select-none","vertical"===c&&"h-full w-2.5 border-s border-s-transparent","horizontal"===c&&"h-2.5 flex-col border-t border-t-transparent",a),...d,children:(0,b.jsx)(T.ScrollAreaThumb,{"data-slot":"scroll-area-thumb",className:"bg-border relative flex-1 rounded-full"})})}a.s(["ScrollArea",()=>V],98963)},73708,a=>{"use strict";let b=(0,a.i(25700).default)("git-fork",[["circle",{cx:"12",cy:"18",r:"3",key:"1mpf1b"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["path",{d:"M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9",key:"1uq4wg"}],["path",{d:"M12 12v3",key:"158kv8"}]]);a.s(["GitFork",()=>b],73708)},4085,a=>{"use strict";let b=(0,a.i(25700).default)("folder",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);a.s(["Folder",()=>b],4085)},21434,34379,a=>{"use strict";var b=a.i(41176),c=a.i(44592),d=a.i(3410),e=a.i(4085),f=a.i(3195),g=a.i(88064),h=a.i(93741),i=a.i(52313),j=a.i(45670),k=a.i(18948),l=a.i(98963);async function m(a){let b=new URLSearchParams;a&&b.set("path",a);let c=await fetch(`/api/directory/list?${b.toString()}`);if(!c.ok)throw Error((await c.json().catch(()=>({error:"Failed to load directory"}))).error??"Failed to load directory");return c.json()}function n({currentPath:a,isEditing:e,onToggleEdit:f,onNavigate:g}){let i=(0,c.useRef)(null),[j,k]=(0,c.useState)(a);function l(){k(a),f()}(0,c.useEffect)(()=>{k(a)},[a]),(0,c.useEffect)(()=>{e&&i.current&&(i.current.focus(),i.current.select())},[e]);let m=function(a){if(!a)return[];let b=/^[a-zA-Z]:/.test(a),c=b?"\\":"/",d=a.split(/[\\/]/).filter(Boolean),e=[];for(let a=0;a<d.length;a++){let f=b?d.slice(0,a+1).join(c):c+d.slice(0,a+1).join(c);e.push({label:d[a],path:f})}return e}(a),n=m.length>3,o=n?m.slice(-3):m;return(0,b.jsxs)("div",{className:"border-b px-4 py-3",children:[(0,b.jsx)("h2",{className:"text-foreground mb-2.5 text-sm font-semibold tracking-[-0.01em]",children:"Select Folder"}),e?(0,b.jsx)("input",{ref:i,type:"text",value:j,onChange:a=>k(a.target.value),onKeyDown:a=>{if("Enter"===a.key){let b;a.preventDefault(),(b=j.trim())&&g(b)}"Escape"===a.key&&(a.preventDefault(),l())},onBlur:l,className:"bg-muted/60 border-border focus:ring-ring/20 focus:border-ring w-full rounded-lg border px-3 py-2 font-mono text-xs transition-all outline-none focus:ring-2",placeholder:"Type a path and press Enter...",spellCheck:!1,autoComplete:"off"}):(0,b.jsxs)("div",{className:"bg-muted/40 flex items-center gap-1 rounded-lg px-2.5 py-2",children:[(0,b.jsx)("button",{type:"button",onClick:()=>g("/"),className:"text-muted-foreground hover:text-foreground hover:bg-background shrink-0 rounded px-1.5 py-0.5 font-mono text-xs transition-colors",children:"/"}),n?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(d.ChevronRight,{className:"text-muted-foreground/30 h-3 w-3 shrink-0"}),(0,b.jsx)("span",{className:"text-muted-foreground/40 font-mono text-xs",children:"..."})]}):null,o.map((a,c)=>{let e=c===o.length-1;return(0,b.jsxs)("span",{className:"flex shrink-0 items-center gap-1",children:[(0,b.jsx)(d.ChevronRight,{className:"text-muted-foreground/30 h-3 w-3"}),e?(0,b.jsx)("span",{className:"bg-primary/10 text-primary rounded px-2 py-0.5 font-mono text-xs font-medium",children:a.label}):(0,b.jsx)("button",{type:"button",onClick:()=>g(a.path),className:"text-muted-foreground hover:text-foreground hover:bg-background rounded px-1.5 py-0.5 font-mono text-xs transition-colors",children:a.label})]},a.path)}),(0,b.jsx)("div",{className:"flex-1"}),(0,b.jsx)("button",{type:"button",onClick:f,className:"text-muted-foreground/40 hover:text-foreground hover:bg-background shrink-0 rounded p-1 transition-colors","aria-label":"Edit path",children:(0,b.jsx)(h.Pencil,{className:"h-3 w-3"})})]})]})}function o({open:a,onOpenChange:h,onSelect:o,initialPath:p}){let[q,r]=(0,c.useState)([]),[s,t]=(0,c.useState)(""),[u,v]=(0,c.useState)(!1),[w,x]=(0,c.useState)(!1),y=(0,c.useRef)(!1),[z,A]=(0,c.useState)(0),B=(0,c.useCallback)(async a=>{v(!0),x(!1);try{let b=await m(a);r(b.entries),t(b.currentPath),A(a=>a+1)}catch(b){let a=b instanceof Error?b.message:"Failed to load directory";i.toast.error(a)}finally{v(!1)}},[]);function C(a){B(a)}function D(){o(null),h(!1)}return(0,c.useEffect)(()=>{a&&!y.current&&(y.current=!0,B(p)),a||(y.current=!1,x(!1))},[a,p,B]),(0,b.jsx)(j.Dialog,{open:a,onOpenChange:a=>{a||D()},children:(0,b.jsxs)(j.DialogContent,{className:"flex h-[min(520px,85dvh)] w-full max-w-[460px] flex-col gap-0 overflow-hidden p-0",onCloseAutoFocus:a=>a.preventDefault(),children:[(0,b.jsx)(j.DialogTitle,{className:"sr-only",children:"Select Folder"}),(0,b.jsx)(j.DialogDescription,{className:"sr-only",children:"Navigate to a folder and select it"}),(0,b.jsx)(n,{currentPath:s,isEditing:w,onToggleEdit:()=>x(a=>!a),onNavigate:C}),(0,b.jsx)(l.ScrollArea,{className:"min-h-0 flex-1",children:u&&0===q.length?(0,b.jsx)("div",{className:"space-y-0.5 p-2",children:Array.from({length:8}).map((a,c)=>(0,b.jsxs)("div",{className:"flex items-center gap-3 rounded-lg px-3 py-2.5",style:{opacity:1-.1*c},children:[(0,b.jsx)("div",{className:"bg-muted h-4 w-4 animate-pulse rounded"}),(0,b.jsx)("div",{className:"bg-muted h-3.5 animate-pulse rounded",style:{width:`${40+35*Math.random()}%`}})]},`skeleton-${c}`))}):0===q.length?(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center py-20",children:[(0,b.jsx)(f.FolderOpen,{className:"text-muted-foreground/25 mb-3 h-10 w-10"}),(0,b.jsx)("p",{className:"text-muted-foreground/60 text-sm",children:"Empty folder"})]}):(0,b.jsx)("div",{className:"p-2",children:q.map((a,c)=>(0,b.jsxs)("button",{type:"button",onClick:()=>C(a.path),className:"folder-row group flex w-full items-center gap-3 rounded-lg px-3 py-2.5 text-left transition-all hover:bg-[var(--color-primary)]/[0.06] active:scale-[0.997]",style:{animationDelay:`${20*c}ms`},children:[(0,b.jsx)(e.Folder,{className:"text-muted-foreground/50 group-hover:text-primary h-[18px] w-[18px] shrink-0 transition-colors"}),(0,b.jsx)("span",{className:"text-foreground min-w-0 flex-1 truncate text-[13px] font-medium",children:a.name}),(0,b.jsx)(d.ChevronRight,{className:"text-muted-foreground/0 group-hover:text-muted-foreground/40 h-3.5 w-3.5 shrink-0 transition-all"})]},a.path))},z)}),(0,b.jsxs)("div",{className:"flex items-center gap-2 border-t px-4 py-3",children:[(0,b.jsx)("p",{className:"text-muted-foreground min-w-0 flex-1 truncate font-mono text-[11px] leading-none",children:s||" "}),(0,b.jsx)(k.Button,{variant:"ghost",size:"sm",onClick:D,className:"text-muted-foreground h-8 shrink-0 px-3 text-xs",children:"Cancel"}),(0,b.jsxs)(k.Button,{size:"sm",onClick:function(){s&&(o(s),h(!1))},disabled:!s||u,className:"h-8 shrink-0 px-5 text-xs font-medium",children:[u?(0,b.jsx)(g.Loader2,{className:"mr-1.5 h-3 w-3 animate-spin"}):null,"Select"]})]})]})})}a.s(["ReactFileManagerDialog",()=>o],34379),a.s([],21434)},1377,a=>{"use strict";var b=a.i(89111);let c=(0,b.createServerReference)("00ebfc5b8f236df56743159162d19f9853e21daf71",b.callServer,void 0,b.findSourceMapURL,"pickFolder");async function d(){let a=await c();if(a.error)throw Error(a.error);return a.path}a.s(["pickFolder",()=>d],1377)}];
2
2
 
3
3
  //# sourceMappingURL=_f86fc1bf._.js.map