@shepai/cli 1.135.3-pr443.1bf56b0 → 1.136.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts +2 -0
  2. package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts.map +1 -1
  3. package/dist/src/presentation/web/app/actions/check-agent-auth.js +8 -1
  4. package/dist/src/presentation/web/app/actions/check-tool-status.d.ts +14 -0
  5. package/dist/src/presentation/web/app/actions/check-tool-status.d.ts.map +1 -0
  6. package/dist/src/presentation/web/app/actions/check-tool-status.js +53 -0
  7. package/dist/src/presentation/web/app/build-graph-nodes.d.ts.map +1 -1
  8. package/dist/src/presentation/web/app/build-graph-nodes.js +1 -9
  9. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +17 -0
  10. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  11. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +91 -0
  12. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  13. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +54 -64
  14. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
  15. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +85 -19
  16. package/dist/src/presentation/web/components/common/merge-review/diff-view.d.ts +0 -3
  17. package/dist/src/presentation/web/components/common/merge-review/diff-view.d.ts.map +1 -1
  18. package/dist/src/presentation/web/components/common/merge-review/diff-view.js +17 -100
  19. package/dist/src/presentation/web/components/common/merge-review/diff-view.stories.d.ts +1 -3
  20. package/dist/src/presentation/web/components/common/merge-review/diff-view.stories.d.ts.map +1 -1
  21. package/dist/src/presentation/web/components/common/merge-review/diff-view.stories.js +1 -31
  22. package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
  23. package/dist/src/presentation/web/components/common/repository-node/repository-node.js +6 -4
  24. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts.map +1 -1
  25. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +35 -9
  26. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts +17 -1
  27. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts.map +1 -1
  28. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.js +110 -1
  29. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  30. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +1 -1
  31. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts +1 -0
  32. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts.map +1 -1
  33. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.js +443 -10
  34. package/dist/src/presentation/web/lib/layout-with-dagre.js +1 -1
  35. package/dist/tsconfig.build.tsbuildinfo +1 -1
  36. package/package.json +1 -1
  37. package/web/.next/BUILD_ID +1 -1
  38. package/web/.next/build-manifest.json +2 -2
  39. package/web/.next/fallback-build-manifest.json +2 -2
  40. package/web/.next/prerender-manifest.json +3 -3
  41. package/web/.next/required-server-files.js +2 -2
  42. package/web/.next/required-server-files.json +2 -2
  43. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +63 -48
  44. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +3 -3
  45. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  46. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  47. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +63 -48
  48. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +3 -3
  49. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  50. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  51. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +75 -60
  52. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +3 -3
  53. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  54. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  55. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +75 -60
  56. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +3 -3
  57. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  58. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  59. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +59 -44
  60. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +3 -3
  61. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  62. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  63. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +63 -48
  64. package/web/.next/server/app/(dashboard)/create/page.js +3 -3
  65. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  66. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  67. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +75 -60
  68. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +3 -3
  69. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  70. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  71. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +75 -60
  72. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +3 -3
  73. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  74. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  75. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +59 -44
  76. package/web/.next/server/app/(dashboard)/page.js +3 -3
  77. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  78. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  79. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +59 -44
  80. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +3 -3
  81. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  82. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  83. package/web/.next/server/app/_global-error.html +2 -2
  84. package/web/.next/server/app/_global-error.rsc +1 -1
  85. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  86. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  87. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  88. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  89. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  90. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +3 -3
  91. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  92. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  93. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  94. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  95. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  96. package/web/.next/server/app/settings/page/server-reference-manifest.json +8 -8
  97. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  98. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  99. package/web/.next/server/app/skills/page/server-reference-manifest.json +8 -8
  100. package/web/.next/server/app/skills/page.js +1 -1
  101. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  102. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  103. package/web/.next/server/app/tools/page/server-reference-manifest.json +8 -8
  104. package/web/.next/server/app/tools/page.js +1 -1
  105. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  106. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  107. package/web/.next/server/app/version/page/server-reference-manifest.json +3 -3
  108. package/web/.next/server/app/version/page.js.nft.json +1 -1
  109. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  110. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  111. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  112. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  113. package/web/.next/server/chunks/[root-of-the-server]__b4102cc7._.js +1 -1
  114. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_b49d9c97.js +3 -0
  115. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_b49d9c97.js.map +1 -0
  116. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  117. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  118. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_28632197.js +3 -0
  119. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_28632197.js.map +1 -0
  120. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_10695d37.js +3 -0
  121. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_10695d37.js.map +1 -0
  122. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  123. package/web/.next/server/chunks/ssr/[root-of-the-server]__3ef34e4c._.js +1 -1
  124. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js +1 -1
  125. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js.map +1 -1
  126. package/web/.next/server/chunks/ssr/{[root-of-the-server]__90f9ae71._.js → [root-of-the-server]__47ded061._.js} +2 -2
  127. package/web/.next/server/chunks/ssr/{[root-of-the-server]__31bc28da._.js.map → [root-of-the-server]__47ded061._.js.map} +1 -1
  128. package/web/.next/server/chunks/ssr/{[root-of-the-server]__31bc28da._.js → [root-of-the-server]__68ce373c._.js} +2 -2
  129. package/web/.next/server/chunks/ssr/{[root-of-the-server]__90f9ae71._.js.map → [root-of-the-server]__68ce373c._.js.map} +1 -1
  130. package/web/.next/server/chunks/ssr/[root-of-the-server]__6ec59045._.js +3 -0
  131. package/web/.next/server/chunks/ssr/[root-of-the-server]__6ec59045._.js.map +1 -0
  132. package/web/.next/server/chunks/ssr/{[root-of-the-server]__90ce4b6d._.js → [root-of-the-server]__718766da._.js} +2 -2
  133. package/web/.next/server/chunks/ssr/{[root-of-the-server]__90ce4b6d._.js.map → [root-of-the-server]__718766da._.js.map} +1 -1
  134. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js +1 -1
  135. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js.map +1 -1
  136. package/web/.next/server/chunks/ssr/{[root-of-the-server]__96670392._.js → [root-of-the-server]__a5f9c6e5._.js} +3 -3
  137. package/web/.next/server/chunks/ssr/[root-of-the-server]__a5f9c6e5._.js.map +1 -0
  138. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
  139. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  140. package/web/.next/server/chunks/ssr/[root-of-the-server]__b3dbadca._.js +1 -1
  141. package/web/.next/server/chunks/ssr/[root-of-the-server]__b3dbadca._.js.map +1 -1
  142. package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js +3 -0
  143. package/web/.next/server/chunks/ssr/{[root-of-the-server]__1a3121ff._.js.map → [root-of-the-server]__d48c5b11._.js.map} +1 -1
  144. package/web/.next/server/chunks/ssr/{[root-of-the-server]__32ecbed9._.js → [root-of-the-server]__fdd058b2._.js} +2 -2
  145. package/web/.next/server/chunks/ssr/{[root-of-the-server]__32ecbed9._.js.map → [root-of-the-server]__fdd058b2._.js.map} +1 -1
  146. package/web/.next/server/chunks/ssr/_02ec1aea._.js +1 -1
  147. package/web/.next/server/chunks/ssr/_02ec1aea._.js.map +1 -1
  148. package/web/.next/server/chunks/ssr/_67104d9e._.js +1 -1
  149. package/web/.next/server/chunks/ssr/_67104d9e._.js.map +1 -1
  150. package/web/.next/server/chunks/ssr/_7dca1882._.js +1 -1
  151. package/web/.next/server/chunks/ssr/_7dca1882._.js.map +1 -1
  152. package/web/.next/server/chunks/ssr/_a9f57758._.js +1 -1
  153. package/web/.next/server/chunks/ssr/_a9f57758._.js.map +1 -1
  154. package/web/.next/server/chunks/ssr/_aec44907._.js +3 -0
  155. package/web/.next/server/chunks/ssr/_aec44907._.js.map +1 -0
  156. package/web/.next/server/chunks/ssr/_d8575088._.js +1 -1
  157. package/web/.next/server/chunks/ssr/_d8575088._.js.map +1 -1
  158. package/web/.next/server/chunks/ssr/_e69a26ba._.js +4 -0
  159. package/web/.next/server/chunks/ssr/_e69a26ba._.js.map +1 -0
  160. package/web/.next/server/chunks/ssr/{_8c62a935._.js → _e700d6a8._.js} +2 -2
  161. package/web/.next/server/chunks/ssr/_e700d6a8._.js.map +1 -0
  162. package/web/.next/server/chunks/ssr/_f39a1adb._.js +1 -1
  163. package/web/.next/server/chunks/ssr/_f39a1adb._.js.map +1 -1
  164. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  165. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  166. package/web/.next/server/chunks/ssr/src_presentation_web_53666118._.js +5 -0
  167. package/web/.next/server/chunks/ssr/{src_presentation_web_b9023017._.js.map → src_presentation_web_53666118._.js.map} +1 -1
  168. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_d95e128d.js +3 -0
  169. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_d95e128d.js.map +1 -0
  170. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js +1 -1
  171. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js.map +1 -1
  172. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js +1 -1
  173. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js.map +1 -1
  174. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  175. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  176. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  177. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  178. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  179. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  180. package/web/.next/server/chunks/ssr/src_presentation_web_d8202508._.js +3 -0
  181. package/web/.next/server/chunks/ssr/{src_presentation_web_0111eafd._.js.map → src_presentation_web_d8202508._.js.map} +1 -1
  182. package/web/.next/server/chunks/ssr/src_presentation_web_e4df6dd7._.js +5 -0
  183. package/web/.next/server/chunks/ssr/{src_presentation_web_8e7fe0d1._.js.map → src_presentation_web_e4df6dd7._.js.map} +1 -1
  184. package/web/.next/server/pages/500.html +2 -2
  185. package/web/.next/server/server-reference-manifest.js +1 -1
  186. package/web/.next/server/server-reference-manifest.json +374 -296
  187. package/web/.next/static/chunks/{ccbca8058fb94fd9.js → 00754162862ab75f.js} +1 -1
  188. package/web/.next/static/chunks/{c733b438f9c3dca2.js → 07ea878c8d769b40.js} +1 -1
  189. package/web/.next/static/chunks/{5d8698f0d17c425f.js → 1693f840144b12bb.js} +2 -2
  190. package/web/.next/static/chunks/{8bfc9acd71f1884f.js → 3d6119fadfa8596f.js} +1 -1
  191. package/web/.next/static/chunks/3e571ee5f5afd401.js +1 -0
  192. package/web/.next/static/chunks/{970d4d88a2e46223.js → 4916dcd902d80072.js} +1 -1
  193. package/web/.next/static/chunks/688971d5bad5dc7c.js +1 -0
  194. package/web/.next/static/chunks/{60cfec53f7bd64a7.js → 75d552e0e611e3f4.js} +2 -2
  195. package/web/.next/static/chunks/90af5015ea1684d2.js +1 -0
  196. package/web/.next/static/chunks/92cd6f523639a6fa.css +1 -0
  197. package/web/.next/static/chunks/98888e44c7c02a19.js +1 -0
  198. package/web/.next/static/chunks/a17edbc379ad2f40.js +1 -0
  199. package/web/.next/static/chunks/{3cdbfd1816f1dae6.js → ae5bf7c402bb02ad.js} +1 -1
  200. package/web/.next/static/chunks/d0dff217a94d4ee1.js +1 -0
  201. package/web/.next/static/chunks/ff9b5942b2cae4f7.js +1 -0
  202. package/dist/src/presentation/web/components/ui/file-tree.d.ts +0 -39
  203. package/dist/src/presentation/web/components/ui/file-tree.d.ts.map +0 -1
  204. package/dist/src/presentation/web/components/ui/file-tree.js +0 -194
  205. package/dist/src/presentation/web/components/ui/file-tree.stories.d.ts +0 -14
  206. package/dist/src/presentation/web/components/ui/file-tree.stories.d.ts.map +0 -1
  207. package/dist/src/presentation/web/components/ui/file-tree.stories.js +0 -92
  208. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4e741df2.js +0 -3
  209. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4e741df2.js.map +0 -1
  210. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_026fdffa.js +0 -3
  211. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_026fdffa.js.map +0 -1
  212. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_8b91e197.js +0 -3
  213. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_8b91e197.js.map +0 -1
  214. package/web/.next/server/chunks/ssr/[root-of-the-server]__1a3121ff._.js +0 -3
  215. package/web/.next/server/chunks/ssr/[root-of-the-server]__96670392._.js.map +0 -1
  216. package/web/.next/server/chunks/ssr/[root-of-the-server]__9c45d070._.js +0 -3
  217. package/web/.next/server/chunks/ssr/[root-of-the-server]__9c45d070._.js.map +0 -1
  218. package/web/.next/server/chunks/ssr/_8c62a935._.js.map +0 -1
  219. package/web/.next/server/chunks/ssr/_b6960ca0._.js +0 -4
  220. package/web/.next/server/chunks/ssr/_b6960ca0._.js.map +0 -1
  221. package/web/.next/server/chunks/ssr/_d0a5c8be._.js +0 -3
  222. package/web/.next/server/chunks/ssr/_d0a5c8be._.js.map +0 -1
  223. package/web/.next/server/chunks/ssr/src_presentation_web_0111eafd._.js +0 -3
  224. package/web/.next/server/chunks/ssr/src_presentation_web_8e7fe0d1._.js +0 -5
  225. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_ca051134.js +0 -3
  226. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_ca051134.js.map +0 -1
  227. package/web/.next/server/chunks/ssr/src_presentation_web_b9023017._.js +0 -5
  228. package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_scroll-area_tsx_53ae5be7._.js +0 -3
  229. package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_scroll-area_tsx_53ae5be7._.js.map +0 -1
  230. package/web/.next/static/chunks/260c376293ef313f.js +0 -1
  231. package/web/.next/static/chunks/2f5948883382134c.js +0 -1
  232. package/web/.next/static/chunks/66e554b3fb85d07b.js +0 -1
  233. package/web/.next/static/chunks/72c889d2d1d2c950.js +0 -1
  234. package/web/.next/static/chunks/7486226f7ac8be26.js +0 -1
  235. package/web/.next/static/chunks/9063a0bcaedece23.js +0 -1
  236. package/web/.next/static/chunks/a6b8b76506ed0486.js +0 -1
  237. package/web/.next/static/chunks/afbe5f1ead5cd56b.js +0 -1
  238. package/web/.next/static/chunks/cea224868e7b317e.css +0 -1
  239. /package/web/.next/static/{dLwf5BeiVENzBHuUxtSGx → PlnxcoPHipclEMFHMWF11}/_buildManifest.js +0 -0
  240. /package/web/.next/static/{dLwf5BeiVENzBHuUxtSGx → PlnxcoPHipclEMFHMWF11}/_clientMiddlewareManifest.json +0 -0
  241. /package/web/.next/static/{dLwf5BeiVENzBHuUxtSGx → PlnxcoPHipclEMFHMWF11}/_ssgManifest.js +0 -0
@@ -2,13 +2,13 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useMemo } from 'react';
3
3
  import { expect, fn, waitFor } from '@storybook/test';
4
4
  import { ReactFlowProvider, ReactFlow, useNodesState } from '@xyflow/react';
5
- import { DeploymentState } from '../../../../../../packages/core/src/domain/generated/output.js';
5
+ import { DeploymentState, PrStatus, CiStatus } from '../../../../../../packages/core/src/domain/generated/output.js';
6
6
  import { FeatureNode } from './feature-node.js';
7
7
  const nodeTypes = { featureNode: FeatureNode };
8
8
  /** Renders a single FeatureNode as a proper React Flow node (with node wrapper + pointer events). */
9
9
  function FeatureNodeCanvas({ data, style = { width: 600, height: 400 }, }) {
10
10
  const nodes = useMemo(() => [{ id: 'node-1', type: 'featureNode', position: { x: 0, y: 0 }, data }], [data]);
11
- return (_jsx("div", { style: style, children: _jsx(ReactFlowProvider, { children: _jsx(ReactFlow, { nodes: nodes, nodeTypes: nodeTypes, nodesDraggable: false, nodesConnectable: false, proOptions: { hideAttribution: true }, fitView: true }) }) }));
11
+ return (_jsx("div", { style: style, children: _jsx(ReactFlowProvider, { children: _jsx(ReactFlow, { nodes: nodes, nodeTypes: nodeTypes, nodesDraggable: false, nodesConnectable: false, panOnDrag: false, zoomOnScroll: false, proOptions: { hideAttribution: true }, fitView: true, className: "[&_.react-flow__pane]:!cursor-default" }) }) }));
12
12
  }
13
13
  const meta = {
14
14
  title: 'Composed/FeatureNode',
@@ -19,10 +19,17 @@ const meta = {
19
19
  args: {
20
20
  name: 'Auth Module',
21
21
  description: 'Implement OAuth2 authentication flow',
22
- featureId: '#f1',
23
- lifecycle: 'requirements',
22
+ featureId: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
23
+ lifecycle: 'implementation',
24
24
  state: 'running',
25
25
  progress: 45,
26
+ agentType: 'claude-code',
27
+ modelId: 'claude-sonnet-4-6',
28
+ repositoryPath: '/home/user/my-repo',
29
+ repositoryName: 'my-repo',
30
+ branch: 'feat/auth-module',
31
+ hasAgentRun: true,
32
+ hasPlan: true,
26
33
  },
27
34
  };
28
35
  export default meta;
@@ -32,66 +39,92 @@ export const Default = {
32
39
  const allStatesData = [
33
40
  {
34
41
  name: 'User Onboarding',
35
- description: 'Implement guided onboarding wizard',
42
+ description: 'Implement guided onboarding wizard with step-by-step tutorial',
36
43
  featureId: '',
37
44
  lifecycle: 'requirements',
38
45
  state: 'creating',
39
46
  progress: 0,
40
47
  repositoryPath: '/home/user/my-repo',
48
+ repositoryName: 'my-repo',
41
49
  branch: '',
42
50
  },
43
51
  {
44
52
  name: 'Auth Module',
45
- description: 'Implement OAuth2 authentication flow',
46
- featureId: '#f1',
53
+ description: 'Implement OAuth2 authentication flow with SSO support',
54
+ featureId: '11111111-1111-1111-1111-111111111111',
47
55
  lifecycle: 'implementation',
48
56
  state: 'running',
49
57
  progress: 45,
50
58
  agentType: 'claude-code',
51
59
  modelId: 'claude-sonnet-4-6',
52
60
  repositoryPath: '/home/user/my-repo',
61
+ repositoryName: 'my-repo',
53
62
  branch: 'feat/auth-module',
63
+ worktreePath: '/home/user/.shep/repos/abc123/wt/feat-auth-module',
64
+ hasAgentRun: true,
65
+ hasPlan: true,
66
+ deployment: { status: DeploymentState.Ready, url: 'http://localhost:3001' },
54
67
  },
55
68
  {
56
69
  name: 'API Rate Limiting',
57
- description: 'Implement sliding window rate limiting for public...',
58
- featureId: '#bi1',
70
+ description: 'Implement sliding window rate limiting for public endpoints',
71
+ featureId: '22222222-2222-2222-2222-222222222222',
59
72
  lifecycle: 'requirements',
60
73
  state: 'action-required',
61
74
  progress: 22,
62
75
  agentType: 'claude-code',
63
76
  modelId: 'claude-sonnet-4-6',
64
77
  repositoryPath: '/home/user/my-repo',
78
+ repositoryName: 'my-repo',
65
79
  branch: 'feat/api-rate-limiting',
80
+ worktreePath: '/home/user/.shep/repos/abc123/wt/feat-api-rate-limiting',
81
+ hasAgentRun: true,
82
+ hasPlan: true,
66
83
  },
67
84
  {
68
85
  name: 'Data Pipeline',
69
86
  description: 'ETL pipeline for analytics dashboard',
70
- featureId: '#bi2',
87
+ featureId: '33333333-3333-3333-3333-333333333333',
71
88
  lifecycle: 'implementation',
72
89
  state: 'action-required',
73
90
  progress: 40,
74
91
  agentType: 'cursor',
75
92
  modelId: 'claude-opus-4-6',
76
93
  repositoryPath: '/home/user/my-repo',
94
+ repositoryName: 'my-repo',
77
95
  branch: 'feat/data-pipeline',
96
+ worktreePath: '/home/user/.shep/repos/abc123/wt/feat-data-pipeline',
97
+ hasAgentRun: true,
98
+ hasPlan: true,
99
+ deployment: { status: DeploymentState.Booting },
78
100
  },
79
101
  {
80
102
  name: 'Merge Review',
81
103
  description: 'PR ready for merge approval',
82
- featureId: '#bi3',
104
+ featureId: '44444444-4444-4444-4444-444444444444',
83
105
  lifecycle: 'review',
84
106
  state: 'action-required',
85
107
  progress: 90,
86
108
  agentType: 'gemini-cli',
87
109
  modelId: 'gemini-2.5-pro',
88
110
  repositoryPath: '/home/user/my-repo',
111
+ repositoryName: 'my-repo',
89
112
  branch: 'feat/merge-review',
113
+ worktreePath: '/home/user/.shep/repos/abc123/wt/feat-merge-review',
114
+ hasAgentRun: true,
115
+ hasPlan: true,
116
+ pr: {
117
+ url: 'https://github.com/user/my-repo/pull/87',
118
+ number: 87,
119
+ status: PrStatus.Open,
120
+ ciStatus: CiStatus.Success,
121
+ mergeable: true,
122
+ },
90
123
  },
91
124
  {
92
125
  name: 'Payment Gateway',
93
126
  description: 'Stripe integration for subscriptions',
94
- featureId: '#f3',
127
+ featureId: '55555555-5555-5555-5555-555555555555',
95
128
  lifecycle: 'deploy',
96
129
  state: 'done',
97
130
  progress: 100,
@@ -99,12 +132,24 @@ const allStatesData = [
99
132
  agentType: 'claude-code',
100
133
  modelId: 'claude-sonnet-4-6',
101
134
  repositoryPath: '/home/user/my-repo',
135
+ repositoryName: 'my-repo',
102
136
  branch: 'feat/payment-gateway',
137
+ worktreePath: '/home/user/.shep/repos/abc123/wt/feat-payment-gateway',
138
+ fastMode: true,
139
+ hasAgentRun: true,
140
+ hasPlan: true,
141
+ pr: {
142
+ url: 'https://github.com/user/my-repo/pull/85',
143
+ number: 85,
144
+ status: PrStatus.Merged,
145
+ ciStatus: CiStatus.Success,
146
+ },
147
+ deployment: { status: DeploymentState.Ready, url: 'http://localhost:3002' },
103
148
  },
104
149
  {
105
150
  name: 'Search Index',
106
151
  description: 'Elasticsearch full-text search setup',
107
- featureId: '#f4',
152
+ featureId: '66666666-6666-6666-6666-666666666666',
108
153
  lifecycle: 'implementation',
109
154
  state: 'blocked',
110
155
  progress: 20,
@@ -112,40 +157,61 @@ const allStatesData = [
112
157
  agentType: 'claude-code',
113
158
  modelId: 'claude-opus-4-6',
114
159
  repositoryPath: '/home/user/my-repo',
160
+ repositoryName: 'my-repo',
115
161
  branch: 'feat/search-index',
162
+ worktreePath: '/home/user/.shep/repos/abc123/wt/feat-search-index',
163
+ hasAgentRun: true,
164
+ hasPlan: true,
116
165
  },
117
166
  {
118
167
  name: 'Email Service',
119
168
  description: 'Transactional email with SendGrid',
120
- featureId: '#f5',
169
+ featureId: '77777777-7777-7777-7777-777777777777',
121
170
  lifecycle: 'review',
122
171
  state: 'error',
123
172
  progress: 30,
124
- errorMessage: 'Build failed: type mismatch',
125
- agentType: 'dev',
126
- modelId: 'gpt-8',
173
+ errorMessage: 'Build failed: Cannot find module @sendgrid/mail',
174
+ agentType: 'aider',
175
+ modelId: 'claude-sonnet-4-6',
127
176
  repositoryPath: '/home/user/my-repo',
177
+ repositoryName: 'my-repo',
128
178
  branch: 'feat/email-service',
179
+ worktreePath: '/home/user/.shep/repos/abc123/wt/feat-email-service',
180
+ hasAgentRun: true,
181
+ hasPlan: true,
182
+ pr: {
183
+ url: 'https://github.com/user/my-repo/pull/86',
184
+ number: 86,
185
+ status: PrStatus.Open,
186
+ ciStatus: CiStatus.Failure,
187
+ },
188
+ onRetry: fn(),
129
189
  },
130
190
  {
131
191
  name: 'Notification Service',
132
192
  description: 'Push notification integration',
133
- featureId: '#f7',
193
+ featureId: '88888888-8888-8888-8888-888888888888',
134
194
  lifecycle: 'pending',
135
195
  state: 'pending',
136
196
  progress: 0,
137
197
  repositoryPath: '/home/user/my-repo',
198
+ repositoryName: 'my-repo',
138
199
  branch: 'feat/notification-service',
200
+ onStart: fn(),
139
201
  },
140
202
  {
141
203
  name: 'Legacy API Cleanup',
142
204
  description: 'Remove deprecated REST endpoints',
143
- featureId: '#f6',
205
+ featureId: '99999999-9999-9999-9999-999999999999',
144
206
  lifecycle: 'implementation',
145
207
  state: 'deleting',
146
208
  progress: 0,
147
209
  repositoryPath: '/home/user/my-repo',
210
+ repositoryName: 'my-repo',
148
211
  branch: 'feat/legacy-api-cleanup',
212
+ worktreePath: '/home/user/.shep/repos/abc123/wt/feat-legacy-api-cleanup',
213
+ agentType: 'claude-code',
214
+ hasAgentRun: true,
149
215
  },
150
216
  ];
151
217
  export const AllStates = {
@@ -1,7 +1,4 @@
1
- import { type TreeViewElement } from '../../ui/file-tree.js';
2
1
  import type { MergeReviewFileDiff } from './merge-review-config.js';
3
- /** Build a tree structure from flat file paths. */
4
- export declare function buildFileTree(fileDiffs: MergeReviewFileDiff[]): TreeViewElement[];
5
2
  export interface DiffViewProps {
6
3
  fileDiffs: MergeReviewFileDiff[];
7
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"diff-view.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/merge-review/diff-view.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,KAAK,EAAE,mBAAmB,EAAuB,MAAM,uBAAuB,CAAC;AAStF,mDAAmD;AACnD,wBAAgB,aAAa,CAAC,SAAS,EAAE,mBAAmB,EAAE,GAAG,eAAe,EAAE,CAoCjF;AAgJD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,mBAAmB,EAAE,CAAC;CAClC;AAED,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,EAAE,aAAa,kDAkEpD"}
1
+ {"version":3,"file":"diff-view.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/merge-review/diff-view.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAuB,MAAM,uBAAuB,CAAC;AA4GtF,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,mBAAmB,EAAE,CAAC;CAClC;AAED,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,EAAE,aAAa,kDAmBpD"}
@@ -1,113 +1,30 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useState, useMemo, useCallback } from 'react';
4
- import { FileText, FilePlus, FileMinus, FileEdit } from 'lucide-react';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useState } from 'react';
4
+ import { ChevronRight, FileText, FilePlus, FileMinus, FileEdit } from 'lucide-react';
5
5
  import { cn } from '../../../lib/utils.js';
6
- import { Tree, Folder, File } from '../../ui/file-tree.js';
7
6
  const STATUS_CONFIG = {
8
- added: { icon: FilePlus, className: 'text-green-600' },
9
- modified: { icon: FileEdit, className: 'text-amber-600' },
10
- deleted: { icon: FileMinus, className: 'text-red-600' },
11
- renamed: { icon: FileEdit, className: 'text-blue-600' },
7
+ added: { icon: FilePlus, label: 'A', className: 'text-green-600' },
8
+ modified: { icon: FileEdit, label: 'M', className: 'text-amber-600' },
9
+ deleted: { icon: FileMinus, label: 'D', className: 'text-red-600' },
10
+ renamed: { icon: FileEdit, label: 'R', className: 'text-blue-600' },
12
11
  };
13
- /** Build a tree structure from flat file paths. */
14
- export function buildFileTree(fileDiffs) {
15
- const root = [];
16
- for (const diff of fileDiffs) {
17
- const parts = diff.path.split('/');
18
- let currentLevel = root;
19
- for (let i = 0; i < parts.length; i++) {
20
- const part = parts[i];
21
- const isFile = i === parts.length - 1;
22
- const pathSoFar = parts.slice(0, i + 1).join('/');
23
- const existing = currentLevel.find((el) => el.name === part && el.type === (isFile ? 'file' : 'folder'));
24
- if (existing) {
25
- if (!isFile && existing.children) {
26
- currentLevel = existing.children;
27
- }
28
- }
29
- else {
30
- const node = {
31
- id: pathSoFar,
32
- name: part,
33
- type: isFile ? 'file' : 'folder',
34
- ...(isFile ? {} : { children: [] }),
35
- };
36
- currentLevel.push(node);
37
- if (!isFile && node.children) {
38
- currentLevel = node.children;
39
- }
40
- }
41
- }
42
- }
43
- return collapseSingleChildFolders(root);
44
- }
45
- /** Collapse folders that contain only one child folder (e.g. src/components → src/components). */
46
- function collapseSingleChildFolders(elements) {
47
- return elements.map((el) => {
48
- if (el.type === 'folder' && el.children) {
49
- const collapsed = collapseSingleChildFolders(el.children);
50
- if (collapsed.length === 1 && collapsed[0].type === 'folder' && collapsed[0].children) {
51
- return {
52
- ...collapsed[0],
53
- id: `${el.id}/${collapsed[0].name}`,
54
- name: `${el.name}/${collapsed[0].name}`,
55
- children: collapsed[0].children,
56
- };
57
- }
58
- return { ...el, children: collapsed };
59
- }
60
- return el;
61
- });
62
- }
63
- /** Collect all folder IDs for expanding the tree by default. */
64
- function getAllFolderIds(elements) {
65
- const ids = [];
66
- for (const el of elements) {
67
- if (el.type === 'folder') {
68
- ids.push(el.id);
69
- if (el.children) {
70
- ids.push(...getAllFolderIds(el.children));
71
- }
72
- }
73
- }
74
- return ids;
75
- }
76
- function HunkView({ hunk }) {
77
- return (_jsxs("div", { className: "border-border border-t first:border-t-0", children: [_jsx("div", { className: "bg-muted/50 text-muted-foreground px-3 py-1 font-mono text-[10px]", children: hunk.header }), _jsx("div", { className: "font-mono text-[11px] leading-[18px]", children: hunk.lines.map((line) => (_jsxs("div", { className: cn('flex', line.type === 'added' && 'bg-green-50 dark:bg-green-950/30', line.type === 'removed' && 'bg-red-50 dark:bg-red-950/30'), children: [_jsx("span", { className: "text-muted-foreground w-10 shrink-0 px-1 text-right text-[10px] select-none", children: line.oldNumber ?? '' }), _jsx("span", { className: "text-muted-foreground w-10 shrink-0 px-1 text-right text-[10px] select-none", children: line.newNumber ?? '' }), _jsx("span", { className: cn('w-4 shrink-0 text-center select-none', line.type === 'added' && 'text-green-700 dark:text-green-400', line.type === 'removed' && 'text-red-700 dark:text-red-400'), children: line.type === 'added' ? '+' : line.type === 'removed' ? '-' : ' ' }), _jsx("span", { className: "min-w-0 flex-1 pr-2 break-all whitespace-pre-wrap", children: line.content })] }, `${line.type}-${line.oldNumber ?? ''}-${line.newNumber ?? ''}`))) })] }));
78
- }
79
- function DiffFileIcon({ status }) {
12
+ function FileStatusIcon({ status }) {
80
13
  const config = STATUS_CONFIG[status];
81
14
  const Icon = config.icon;
82
- return _jsx(Icon, { className: cn('size-4 shrink-0', config.className) });
15
+ return _jsx(Icon, { className: cn('h-3.5 w-3.5 shrink-0', config.className) });
83
16
  }
84
- function DiffStats({ additions, deletions }) {
85
- return (_jsxs("span", { className: "ml-auto shrink-0 text-[10px]", children: [additions > 0 ? _jsxs("span", { className: "text-green-600", children: ["+", additions] }) : null, additions > 0 && deletions > 0 ? ' ' : null, deletions > 0 ? _jsxs("span", { className: "text-red-600", children: ["-", deletions] }) : null] }));
17
+ function HunkView({ hunk }) {
18
+ return (_jsxs("div", { className: "border-border border-t first:border-t-0", children: [_jsx("div", { className: "bg-muted/50 text-muted-foreground px-3 py-1 font-mono text-[10px]", children: hunk.header }), _jsx("div", { className: "font-mono text-[11px] leading-[18px]", children: hunk.lines.map((line) => (_jsxs("div", { className: cn('flex', line.type === 'added' && 'bg-green-50 dark:bg-green-950/30', line.type === 'removed' && 'bg-red-50 dark:bg-red-950/30'), children: [_jsx("span", { className: "text-muted-foreground w-10 shrink-0 px-1 text-right text-[10px] select-none", children: line.oldNumber ?? '' }), _jsx("span", { className: "text-muted-foreground w-10 shrink-0 px-1 text-right text-[10px] select-none", children: line.newNumber ?? '' }), _jsx("span", { className: cn('w-4 shrink-0 text-center select-none', line.type === 'added' && 'text-green-700 dark:text-green-400', line.type === 'removed' && 'text-red-700 dark:text-red-400'), children: line.type === 'added' ? '+' : line.type === 'removed' ? '-' : ' ' }), _jsx("span", { className: "min-w-0 flex-1 pr-2 break-all whitespace-pre-wrap", children: line.content })] }, `${line.type}-${line.oldNumber ?? ''}-${line.newNumber ?? ''}`))) })] }));
86
19
  }
87
- function FileTreeNode({ element, diffMap, selectedFile, onSelectFile, }) {
88
- if (element.type === 'folder' && element.children) {
89
- return (_jsx(Folder, { value: element.id, element: element.name, isSelectable: false, children: element.children.map((child) => (_jsx(FileTreeNode, { element: child, diffMap: diffMap, selectedFile: selectedFile, onSelectFile: onSelectFile }, child.id))) }, element.id));
90
- }
91
- const diff = diffMap.get(element.id);
92
- const status = diff?.status ?? 'modified';
93
- return (_jsx(File, { value: element.id, fileIcon: _jsx(DiffFileIcon, { status: status }), isSelect: selectedFile === element.id, handleSelect: onSelectFile, className: "w-full", children: _jsxs("span", { className: "flex min-w-0 flex-1 items-center gap-1", children: [_jsx("span", { className: "truncate", children: element.name }), diff?.oldPath ? (_jsxs("span", { className: "text-muted-foreground truncate text-[10px]", children: ["\u2190 ", diff.oldPath.split('/').pop()] })) : null, diff ? _jsx(DiffStats, { additions: diff.additions, deletions: diff.deletions }) : null] }) }, element.id));
20
+ function FileDiffItem({ file }) {
21
+ const [isOpen, setIsOpen] = useState(false);
22
+ const fileName = file.path.split('/').pop() ?? file.path;
23
+ const dirPath = file.path.includes('/') ? file.path.slice(0, file.path.lastIndexOf('/')) : '';
24
+ return (_jsxs("div", { className: "border-border border-b last:border-b-0", children: [_jsxs("button", { type: "button", onClick: () => setIsOpen(!isOpen), className: "hover:bg-muted/50 flex w-full items-center gap-2 px-3 py-2 text-left", children: [_jsx(ChevronRight, { className: cn('text-muted-foreground h-3 w-3 shrink-0 transition-transform duration-150', isOpen && 'rotate-90') }), _jsx(FileStatusIcon, { status: file.status }), _jsx("span", { className: "text-foreground min-w-0 flex-1 truncate text-xs", children: dirPath ? (_jsxs(_Fragment, { children: [_jsxs("span", { className: "text-muted-foreground", children: [dirPath, "/"] }), fileName] })) : (fileName) }), file.oldPath ? (_jsxs("span", { className: "text-muted-foreground truncate text-[10px]", children: ["\u2190 ", file.oldPath.split('/').pop()] })) : null, _jsxs("span", { className: "shrink-0 text-[10px]", children: [file.additions > 0 ? _jsxs("span", { className: "text-green-600", children: ["+", file.additions] }) : null, file.additions > 0 && file.deletions > 0 ? ' ' : null, file.deletions > 0 ? _jsxs("span", { className: "text-red-600", children: ["-", file.deletions] }) : null] })] }), isOpen && file.hunks.length > 0 ? (_jsx("div", { className: "border-border overflow-x-auto border-t", children: file.hunks.map((hunk) => (_jsx(HunkView, { hunk: hunk }, hunk.header))) })) : null] }));
94
25
  }
95
26
  export function DiffView({ fileDiffs }) {
96
- const [selectedFile, setSelectedFile] = useState(null);
97
- const treeElements = useMemo(() => buildFileTree(fileDiffs), [fileDiffs]);
98
- const allFolderIds = useMemo(() => getAllFolderIds(treeElements), [treeElements]);
99
- const diffMap = useMemo(() => {
100
- const map = new Map();
101
- for (const diff of fileDiffs) {
102
- map.set(diff.path, diff);
103
- }
104
- return map;
105
- }, [fileDiffs]);
106
- const handleSelectFile = useCallback((path) => {
107
- setSelectedFile((prev) => (prev === path ? null : path));
108
- }, []);
109
- const selectedDiff = selectedFile ? diffMap.get(selectedFile) : null;
110
27
  if (fileDiffs.length === 0)
111
28
  return null;
112
- return (_jsxs("div", { className: "border-border rounded-lg border", children: [_jsx("div", { className: "px-4 py-3", children: _jsxs("div", { className: "mb-2 flex items-center gap-2", children: [_jsx(FileText, { className: "text-muted-foreground h-4 w-4" }), _jsx("span", { className: "text-foreground text-xs font-semibold", children: "Changed Files" }), _jsxs("span", { className: "text-muted-foreground text-[10px]", children: ["(", fileDiffs.length, ")"] })] }) }), _jsxs("div", { className: "border-border border-t", children: [_jsx("div", { className: "py-2", children: _jsx(Tree, { elements: treeElements, initialExpandedItems: allFolderIds, indicator: true, sort: "none", className: "text-xs", children: treeElements.map((element) => (_jsx(FileTreeNode, { element: element, diffMap: diffMap, selectedFile: selectedFile, onSelectFile: handleSelectFile }, element.id))) }) }), selectedDiff && selectedDiff.hunks.length > 0 ? (_jsxs("div", { className: "border-border overflow-x-auto border-t", children: [_jsxs("div", { className: "bg-muted/30 flex items-center gap-2 px-3 py-1.5", children: [_jsx(DiffFileIcon, { status: selectedDiff.status }), _jsx("span", { className: "text-foreground font-mono text-xs", children: selectedDiff.path }), _jsx(DiffStats, { additions: selectedDiff.additions, deletions: selectedDiff.deletions })] }), selectedDiff.hunks.map((hunk) => (_jsx(HunkView, { hunk: hunk }, hunk.header)))] })) : null] })] }));
29
+ return (_jsxs("div", { className: "border-border rounded-lg border", children: [_jsx("div", { className: "px-4 py-3", children: _jsxs("div", { className: "mb-2 flex items-center gap-2", children: [_jsx(FileText, { className: "text-muted-foreground h-4 w-4" }), _jsx("span", { className: "text-foreground text-xs font-semibold", children: "Changed Files" }), _jsxs("span", { className: "text-muted-foreground text-[10px]", children: ["(", fileDiffs.length, ")"] })] }) }), _jsx("div", { className: "border-border border-t", children: fileDiffs.map((file) => (_jsx(FileDiffItem, { file: file }, `${file.status}-${file.path}`))) })] }));
113
30
  }
@@ -3,7 +3,7 @@ import { DiffView } from './diff-view.js';
3
3
  declare const meta: Meta<typeof DiffView>;
4
4
  export default meta;
5
5
  type Story = StoryObj<typeof DiffView>;
6
- /** Default — multiple files with various change types shown in a file tree. */
6
+ /** Default — multiple files with various change types. */
7
7
  export declare const Default: Story;
8
8
  /** Single modified file. */
9
9
  export declare const SingleFile: Story;
@@ -15,6 +15,4 @@ export declare const OnlyDeletions: Story;
15
15
  export declare const RenamedFile: Story;
16
16
  /** Empty diff list — renders nothing. */
17
17
  export declare const EmptyDiffs: Story;
18
- /** Root-level files without directory nesting. */
19
- export declare const RootLevelFiles: Story;
20
18
  //# sourceMappingURL=diff-view.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"diff-view.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/merge-review/diff-view.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA2HvC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,QAAQ,CAuB/B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEvC,+EAA+E;AAC/E,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,4BAA4B;AAC5B,eAAO,MAAM,UAAU,EAAE,KAIxB,CAAC;AAEF,4BAA4B;AAC5B,eAAO,MAAM,aAAa,EAAE,KAI3B,CAAC;AAEF,0BAA0B;AAC1B,eAAO,MAAM,aAAa,EAAE,KAI3B,CAAC;AAEF,oBAAoB;AACpB,eAAO,MAAM,WAAW,EAAE,KAIzB,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,UAAU,EAAE,KAIxB,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,cAAc,EAAE,KA4B5B,CAAC"}
1
+ {"version":3,"file":"diff-view.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/merge-review/diff-view.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA2HvC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,QAAQ,CAuB/B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEvC,0DAA0D;AAC1D,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,4BAA4B;AAC5B,eAAO,MAAM,UAAU,EAAE,KAIxB,CAAC;AAEF,4BAA4B;AAC5B,eAAO,MAAM,aAAa,EAAE,KAI3B,CAAC;AAEF,0BAA0B;AAC1B,eAAO,MAAM,aAAa,EAAE,KAI3B,CAAC;AAEF,oBAAoB;AACpB,eAAO,MAAM,WAAW,EAAE,KAIzB,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,UAAU,EAAE,KAIxB,CAAC"}
@@ -136,7 +136,7 @@ const meta = {
136
136
  ],
137
137
  };
138
138
  export default meta;
139
- /** Default — multiple files with various change types shown in a file tree. */
139
+ /** Default — multiple files with various change types. */
140
140
  export const Default = {
141
141
  args: {
142
142
  fileDiffs: sampleFiles,
@@ -172,33 +172,3 @@ export const EmptyDiffs = {
172
172
  fileDiffs: [],
173
173
  },
174
174
  };
175
- /** Root-level files without directory nesting. */
176
- export const RootLevelFiles = {
177
- args: {
178
- fileDiffs: [
179
- {
180
- path: 'package.json',
181
- additions: 3,
182
- deletions: 1,
183
- status: 'modified',
184
- hunks: [
185
- {
186
- header: '@@ -10,3 +10,5 @@',
187
- lines: [
188
- { type: 'context', content: ' "dependencies": {', oldNumber: 10, newNumber: 10 },
189
- { type: 'added', content: ' "new-dep": "^1.0.0",', newNumber: 11 },
190
- { type: 'context', content: ' }', oldNumber: 11, newNumber: 12 },
191
- ],
192
- },
193
- ],
194
- },
195
- {
196
- path: 'README.md',
197
- additions: 10,
198
- deletions: 0,
199
- status: 'modified',
200
- hunks: [],
201
- },
202
- ],
203
- },
204
- };
@@ -1 +1 @@
1
- {"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAOnE,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,2CA2Z5F"}
1
+ {"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAOnE,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,2CAqa5F"}
@@ -71,15 +71,17 @@ export function RepositoryNode({ data }) {
71
71
  e.stopPropagation();
72
72
  data.onClick?.();
73
73
  }
74
- }, className: "nodrag bg-card flex w-[26rem] cursor-pointer flex-col overflow-hidden rounded-xl border shadow-sm", children: [_jsxs("div", { className: "flex items-center gap-3 px-4 py-3", children: [_jsx(Github, { className: "text-muted-foreground h-5 w-5 shrink-0" }), _jsx("span", { "data-testid": "repository-node-name", className: "min-w-0 truncate text-sm font-medium", children: data.name }), _jsxs("div", { className: cn('flex shrink-0 items-center gap-2', (data.repositoryPath ?? data.onAdd) && 'ml-auto'), onClick: (e) => e.stopPropagation(), children: [data.repositoryPath ? (_jsxs(_Fragment, { children: [_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "flex items-center", children: _jsx(ActionButton, { label: "Open in IDE", onClick: actions.openInIde, loading: actions.ideLoading, error: !!actions.ideError, icon: Code2, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: "Open in IDE" })] }) }), _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "flex items-center", children: _jsx(ActionButton, { label: "Open in Shell", onClick: actions.openInShell, loading: actions.shellLoading, error: !!actions.shellError, icon: Terminal, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: "Open in Shell" })] }) }), _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "flex items-center", children: _jsx(ActionButton, { label: "Open Folder", onClick: actions.openFolder, loading: actions.folderLoading, error: !!actions.folderError, icon: FolderOpen, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: "Open Folder" })] }) }), _jsx(FeatureSessionsDropdown, { repositoryPath: data.repositoryPath, onCreateFromSession: handleCreateFromSession })] })) : null, data.onAdd ? (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { "aria-label": "Add feature", "data-testid": "repository-node-add-button", onClick: (e) => {
74
+ }, className: "nodrag bg-card flex w-[26rem] cursor-pointer flex-col overflow-hidden rounded-xl border shadow-sm dark:bg-neutral-800/80", children: [_jsxs("div", { className: "flex items-center gap-3 px-4 py-3", children: [_jsx(Github, { className: "text-muted-foreground h-5 w-5 shrink-0" }), _jsx("span", { "data-testid": "repository-node-name", className: "min-w-0 truncate text-sm font-medium", children: data.name }), _jsxs("div", { className: cn('flex shrink-0 items-center gap-2', (data.repositoryPath ?? data.onAdd) && 'ml-auto'), onClick: (e) => e.stopPropagation(), children: [data.repositoryPath ? (_jsxs(_Fragment, { children: [_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "flex items-center", children: _jsx(ActionButton, { label: "Open in IDE", onClick: actions.openInIde, loading: actions.ideLoading, error: !!actions.ideError, icon: Code2, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: "Open in IDE" })] }) }), _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "flex items-center", children: _jsx(ActionButton, { label: "Open in Shell", onClick: actions.openInShell, loading: actions.shellLoading, error: !!actions.shellError, icon: Terminal, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: "Open in Shell" })] }) }), _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "flex items-center", children: _jsx(ActionButton, { label: "Open Folder", onClick: actions.openFolder, loading: actions.folderLoading, error: !!actions.folderError, icon: FolderOpen, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: "Open Folder" })] }) }), _jsx(FeatureSessionsDropdown, { repositoryPath: data.repositoryPath, onCreateFromSession: handleCreateFromSession })] })) : null, data.onAdd ? (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { "aria-label": "Add feature", "data-testid": "repository-node-add-button", onClick: (e) => {
75
75
  e.stopPropagation();
76
76
  data.onAdd?.();
77
77
  }, className: cn('text-muted-foreground hover:bg-accent dark:hover:bg-accent/50 flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded-full transition-colors hover:text-blue-500', data.pulseAdd &&
78
- 'animate-pulse-cta bg-blue-100 text-blue-500 dark:bg-blue-900/40'), children: _jsx(Plus, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Add feature" })] }) })) : null] })] }), data.branch ? (_jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-git-info", className: "text-muted-foreground border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-3 text-xs", children: [_jsxs("span", { className: "flex items-center gap-1 truncate", "data-testid": "repository-node-branch", children: [_jsx(GitBranch, { className: "h-3 w-3 shrink-0" }), _jsx("span", { className: "truncate", children: data.branch })] }), data.behindCount != null && data.behindCount > 0 ? (_jsxs("span", { className: "flex shrink-0 items-center gap-1 whitespace-nowrap text-amber-500", "data-testid": "repository-node-behind", children: [_jsx(ArrowDown, { className: "h-3 w-3 shrink-0" }), data.behindCount, " behind"] })) : null] }) }), data.commitMessage ? (_jsx("div", { "data-testid": "repository-node-commit-info", className: "text-muted-foreground border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-2 text-xs", children: [_jsx(GitCommitHorizontal, { className: "h-3 w-3 shrink-0" }), _jsx("span", { className: "min-w-0 truncate", "data-testid": "repository-node-commit-message", children: data.commitMessage }), data.committer ? (_jsxs("span", { className: "text-muted-foreground/70 ml-auto flex shrink-0 items-center gap-1", "data-testid": "repository-node-committer", children: [_jsx(User, { className: "h-3 w-3 shrink-0" }), _jsx("span", { children: data.committer })] })) : null] }) })) : null] })) : data.gitInfoStatus === 'not-a-repo' ? (
78
+ 'animate-pulse-cta bg-blue-100 text-blue-500 dark:bg-blue-900/40'), children: _jsx(Plus, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Add feature" })] }) })) : null] })] }), data.branch ? (_jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-git-info", className: "text-muted-foreground border-border/50 border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-3 text-xs", children: [_jsxs("span", { className: "flex items-center gap-1 truncate", "data-testid": "repository-node-branch", children: [_jsx(GitBranch, { className: "h-3 w-3 shrink-0" }), _jsx("span", { className: "truncate", children: data.branch })] }), data.behindCount != null && data.behindCount > 0 ? (_jsxs("span", { className: "flex shrink-0 items-center gap-1 whitespace-nowrap text-amber-500", "data-testid": "repository-node-behind", children: [_jsx(ArrowDown, { className: "h-3 w-3 shrink-0" }), data.behindCount, " behind"] })) : null] }) }), data.commitMessage ? (_jsx("div", { "data-testid": "repository-node-commit-info", className: "text-muted-foreground border-border/50 border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-2 text-xs", children: [_jsx(GitCommitHorizontal, { className: "h-3 w-3 shrink-0" }), _jsx("span", { className: "min-w-0 truncate", "data-testid": "repository-node-commit-message", children: data.commitMessage }), data.committer ? (_jsxs("span", { className: "text-muted-foreground/70 ml-auto flex shrink-0 items-center gap-1", "data-testid": "repository-node-committer", children: [_jsx(User, { className: "h-3 w-3 shrink-0" }), _jsx("span", { children: data.committer })] })) : null] }) })) : null] })) : data.gitInfoStatus === 'not-a-repo' ? (
79
79
  /* Not a git repo — two rows for consistency with loading/ready states */
80
- _jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-not-repo", className: "text-muted-foreground border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-2 text-xs", children: [_jsx(FolderOpen, { className: "h-3 w-3 shrink-0" }), _jsx("span", { className: "min-w-0 truncate opacity-60", children: data.repositoryPath ?? 'Unknown path' })] }) }), _jsx("div", { className: "text-muted-foreground border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-2 text-xs opacity-40", children: [_jsx(GitBranch, { className: "h-3 w-3 shrink-0" }), _jsx("span", { children: "Not a git repository" })] }) })] })) : data.gitInfoStatus !== 'ready' ? (
80
+ _jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-not-repo", className: "text-muted-foreground border-border/50 border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-2 text-xs", children: [_jsx(FolderOpen, { className: "h-3 w-3 shrink-0" }), _jsx("span", { className: "min-w-0 truncate opacity-60", children: data.repositoryPath ?? 'Unknown path' })] }) }), _jsx("div", { className: "text-muted-foreground border-border/50 border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-2 text-xs opacity-40", children: [_jsx(GitBranch, { className: "h-3 w-3 shrink-0" }), _jsx("span", { children: "Not a git repository" })] }) })] })) : data.gitInfoStatus !== 'ready' ? (
81
81
  /* Loading — show skeleton placeholders for both rows */
82
- _jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-git-loading", className: "border-t px-4 py-2", children: _jsxs("div", { className: "flex h-4 items-center gap-2 text-xs", children: [_jsx(GitBranch, { className: "text-muted-foreground h-3 w-3 shrink-0" }), _jsx("span", { className: "bg-muted h-3 w-20 animate-pulse rounded" })] }) }), _jsx("div", { className: "border-t px-4 py-2", children: _jsxs("div", { className: "flex h-4 items-center gap-2 text-xs", children: [_jsx(GitCommitHorizontal, { className: "text-muted-foreground h-3 w-3 shrink-0" }), _jsx("span", { className: "bg-muted h-3 w-36 animate-pulse rounded" })] }) })] })) : null, featureFlags.envDeploy && data.repositoryPath ? (_jsx("div", { "data-testid": "repository-node-dev-preview", className: "border-t px-4 py-2", onClick: (e) => e.stopPropagation(), children: _jsxs("div", { className: "flex items-center gap-2 text-xs", children: [deployAction.deployError ? (_jsx("span", { className: "truncate text-xs text-red-500", children: deployAction.deployError })) : isDeploymentActive ? (_jsxs(_Fragment, { children: [_jsx("span", { className: "mr-0.5 inline-block h-2 w-2 shrink-0 rounded-full bg-green-500" }), deployAction.url ? (_jsx("a", { href: deployAction.url, target: "_blank", rel: "noopener noreferrer", className: "truncate text-green-700 hover:underline dark:text-green-400", children: deployAction.url })) : (_jsx("span", { className: "text-muted-foreground", children: "Starting..." }))] })) : (_jsxs("span", { className: "text-muted-foreground", children: ["Run", _jsx("span", { className: "text-muted-foreground/50 ml-2 text-[10px]", children: "start local environment" })] })), _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "ml-auto flex items-center", children: _jsx(ActionButton, { label: deployAction.deployError
82
+ _jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-git-loading", className: "border-border/50 border-t px-4 py-2", children: _jsxs("div", { className: "flex h-4 items-center gap-2 text-xs", children: [_jsx(GitBranch, { className: "text-muted-foreground h-3 w-3 shrink-0" }), _jsx("span", { className: "bg-muted h-3 w-20 animate-pulse rounded" })] }) }), _jsx("div", { className: "border-border/50 border-t px-4 py-2", children: _jsxs("div", { className: "flex h-4 items-center gap-2 text-xs", children: [_jsx(GitCommitHorizontal, { className: "text-muted-foreground h-3 w-3 shrink-0" }), _jsx("span", { className: "bg-muted h-3 w-36 animate-pulse rounded" })] }) })] })) : null, featureFlags.envDeploy && data.repositoryPath ? (_jsx("div", { "data-testid": "repository-node-dev-preview", className: "border-border/50 border-t px-4 py-2", onClick: (e) => e.stopPropagation(), children: _jsxs("div", { className: "flex items-center gap-2 text-xs", children: [deployAction.deployError ? (_jsx("span", { className: "truncate text-xs text-red-500", children: deployAction.deployError })) : isDeploymentActive ? (_jsxs(_Fragment, { children: [_jsx("span", { className: "mr-0.5 inline-block h-2 w-2 shrink-0 rounded-full bg-green-500" }), deployAction.url ? (_jsx("a", { href: deployAction.url, target: "_blank", rel: "noopener noreferrer", className: "truncate text-green-700 hover:underline dark:text-green-400", children: deployAction.url })) : (_jsx("span", { className: "text-muted-foreground", children: "Starting..." }))] })) : (_jsxs("span", { className: "text-muted-foreground", children: ["Run", _jsx("span", { className: "text-muted-foreground/50 ml-2 text-[10px]", children: "start local environment" })] })), _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: cn('ml-auto flex items-center', !isDeploymentActive &&
83
+ !deployAction.deployError &&
84
+ '[&_button]:text-green-600 [&_button]:hover:text-green-700 dark:[&_button]:text-green-400 dark:[&_button]:hover:text-green-300'), children: _jsx(ActionButton, { label: deployAction.deployError
83
85
  ? 'Retry'
84
86
  : isDeploymentActive
85
87
  ? 'Stop Dev Server'
@@ -1 +1 @@
1
- {"version":3,"file":"control-center-empty-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-empty-state.tsx"],"names":[],"mappings":"AAsBA,MAAM,WAAW,4BAA4B;IAC3C,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,uBAAuB,CAAC,EACtC,kBAAkB,EAClB,SAAS,GACV,EAAE,4BAA4B,kDAuL9B"}
1
+ {"version":3,"file":"control-center-empty-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-empty-state.tsx"],"names":[],"mappings":"AAyBA,MAAM,WAAW,4BAA4B;IAC3C,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,uBAAuB,CAAC,EACtC,kBAAkB,EAClB,SAAS,GACV,EAAE,4BAA4B,kDAmM9B"}