@shepai/cli 1.122.2 → 1.123.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 (227) hide show
  1. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.d.ts +6 -0
  2. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.d.ts.map +1 -1
  3. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.js +60 -0
  4. package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts +2 -0
  5. package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts.map +1 -1
  6. package/dist/src/presentation/web/app/actions/get-feature-phase-timings.js +2 -0
  7. package/dist/src/presentation/web/app/build-graph-nodes.d.ts +7 -0
  8. package/dist/src/presentation/web/app/build-graph-nodes.d.ts.map +1 -1
  9. package/dist/src/presentation/web/app/build-graph-nodes.js +7 -0
  10. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  11. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +20 -9
  12. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map +1 -1
  13. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +130 -31
  14. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -1
  15. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +13 -0
  16. package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.d.ts.map +1 -1
  17. package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.js +18 -9
  18. package/dist/src/presentation/web/components/common/repository-node/repository-node-config.d.ts +8 -0
  19. package/dist/src/presentation/web/components/common/repository-node/repository-node-config.d.ts.map +1 -1
  20. package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
  21. package/dist/src/presentation/web/components/common/repository-node/repository-node.js +6 -6
  22. package/dist/src/presentation/web/components/common/repository-node/repository-node.stories.d.ts +2 -0
  23. package/dist/src/presentation/web/components/common/repository-node/repository-node.stories.d.ts.map +1 -1
  24. package/dist/src/presentation/web/components/common/repository-node/repository-node.stories.js +107 -17
  25. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts.map +1 -1
  26. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +18 -18
  27. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  28. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +31 -17
  29. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.d.ts.map +1 -1
  30. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.js +29 -22
  31. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +1 -1
  32. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
  33. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +2 -2
  34. package/dist/src/presentation/web/hooks/sidebar-features-context.d.ts +2 -0
  35. package/dist/src/presentation/web/hooks/sidebar-features-context.d.ts.map +1 -1
  36. package/dist/src/presentation/web/hooks/sidebar-features-context.js +2 -1
  37. package/dist/src/presentation/web/lib/layout-with-dagre.js +1 -1
  38. package/dist/tsconfig.build.tsbuildinfo +1 -1
  39. package/package.json +1 -1
  40. package/web/.next/BUILD_ID +1 -1
  41. package/web/.next/build-manifest.json +2 -2
  42. package/web/.next/fallback-build-manifest.json +2 -2
  43. package/web/.next/prerender-manifest.json +3 -3
  44. package/web/.next/required-server-files.js +2 -2
  45. package/web/.next/required-server-files.json +2 -2
  46. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +22 -22
  47. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +2 -2
  48. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  49. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  50. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +28 -28
  51. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +3 -3
  52. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  53. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  54. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +28 -28
  55. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +3 -3
  56. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  57. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  58. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +20 -20
  59. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +2 -2
  60. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  61. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  62. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +22 -22
  63. package/web/.next/server/app/(dashboard)/create/page.js +2 -2
  64. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  65. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  66. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +28 -28
  67. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +3 -3
  68. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  69. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  70. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +28 -28
  71. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +3 -3
  72. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  73. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  74. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +20 -20
  75. package/web/.next/server/app/(dashboard)/page.js +2 -2
  76. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  77. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  78. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +20 -20
  79. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +2 -2
  80. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  81. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  82. package/web/.next/server/app/_global-error.html +2 -2
  83. package/web/.next/server/app/_global-error.rsc +1 -1
  84. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  85. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  86. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  87. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  88. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  89. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  90. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  91. package/web/.next/server/app/api/graph-data/route.js +1 -1
  92. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  93. package/web/.next/server/app/settings/page/server-reference-manifest.json +6 -6
  94. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  95. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  96. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  97. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  98. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  99. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  100. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  101. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  102. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  103. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  104. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  105. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  106. package/web/.next/server/chunks/[root-of-the-server]__dcd4f847._.js +3 -0
  107. package/web/.next/server/chunks/{[root-of-the-server]__42b7ab55._.js.map → [root-of-the-server]__dcd4f847._.js.map} +1 -1
  108. package/web/.next/server/chunks/ssr/403f9_next_dist_31ea46d3._.js +1 -1
  109. package/web/.next/server/chunks/ssr/403f9_next_dist_c9d9b4d7._.js +1 -1
  110. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  111. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  112. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_f30d0343.js +1 -1
  113. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_f30d0343.js.map +1 -1
  114. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_9f1775bb.js +1 -1
  115. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_9f1775bb.js.map +1 -1
  116. package/web/.next/server/chunks/ssr/[root-of-the-server]__06fef644._.js +1 -1
  117. package/web/.next/server/chunks/ssr/{[root-of-the-server]__a022445f._.js → [root-of-the-server]__14664e9b._.js} +3 -3
  118. package/web/.next/server/chunks/ssr/{[root-of-the-server]__a022445f._.js.map → [root-of-the-server]__14664e9b._.js.map} +1 -1
  119. package/web/.next/server/chunks/ssr/[root-of-the-server]__4993a47c._.js +3 -0
  120. package/web/.next/server/chunks/ssr/[root-of-the-server]__4993a47c._.js.map +1 -0
  121. package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js +1 -1
  122. package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js.map +1 -1
  123. package/web/.next/server/chunks/ssr/[root-of-the-server]__6677a82c._.js +3 -0
  124. package/web/.next/server/chunks/ssr/{[root-of-the-server]__b724df9e._.js.map → [root-of-the-server]__6677a82c._.js.map} +1 -1
  125. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  126. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
  127. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +2 -2
  128. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -1
  129. package/web/.next/server/chunks/ssr/{[root-of-the-server]__8e3bf5d7._.js → [root-of-the-server]__7cbda1ea._.js} +2 -2
  130. package/web/.next/server/chunks/ssr/[root-of-the-server]__7cbda1ea._.js.map +1 -0
  131. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  132. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
  133. package/web/.next/server/chunks/ssr/[root-of-the-server]__8c553503._.js +2 -2
  134. package/web/.next/server/chunks/ssr/{[root-of-the-server]__2698e9f4._.js → [root-of-the-server]__9e8b25ad._.js} +2 -2
  135. package/web/.next/server/chunks/ssr/[root-of-the-server]__9e8b25ad._.js.map +1 -0
  136. package/web/.next/server/chunks/ssr/[root-of-the-server]__a7de2711._.js +2 -2
  137. package/web/.next/server/chunks/ssr/{[root-of-the-server]__c07f9f79._.js → [root-of-the-server]__aed1d6f8._.js} +2 -2
  138. package/web/.next/server/chunks/ssr/[root-of-the-server]__aed1d6f8._.js.map +1 -0
  139. package/web/.next/server/chunks/ssr/{[root-of-the-server]__c605a375._.js → [root-of-the-server]__ce6057f6._.js} +2 -2
  140. package/web/.next/server/chunks/ssr/[root-of-the-server]__ce6057f6._.js.map +1 -0
  141. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  142. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  143. package/web/.next/server/chunks/ssr/_2f6f48b8._.js +1 -1
  144. package/web/.next/server/chunks/ssr/_2f6f48b8._.js.map +1 -1
  145. package/web/.next/server/chunks/ssr/_3a4c94e3._.js +1 -1
  146. package/web/.next/server/chunks/ssr/{_42caff2c._.js → _960ceb5d._.js} +2 -2
  147. package/web/.next/server/chunks/ssr/_960ceb5d._.js.map +1 -0
  148. package/web/.next/server/chunks/ssr/_b56e7571._.js +3 -0
  149. package/web/.next/server/chunks/ssr/_b56e7571._.js.map +1 -0
  150. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  151. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  152. package/web/.next/server/chunks/ssr/{_0dc2cfd3._.js → _e9703421._.js} +2 -2
  153. package/web/.next/server/chunks/ssr/_e9703421._.js.map +1 -0
  154. package/web/.next/server/chunks/ssr/_fd4c574b._.js +3 -0
  155. package/web/.next/server/chunks/ssr/_fd4c574b._.js.map +1 -0
  156. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  157. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  158. package/web/.next/server/chunks/ssr/node_modules__pnpm_bc66dcc6._.js +3 -0
  159. package/web/.next/server/chunks/ssr/node_modules__pnpm_bc66dcc6._.js.map +1 -0
  160. package/web/.next/server/chunks/ssr/src_presentation_web_5f039db1._.js +2 -2
  161. package/web/.next/server/chunks/ssr/src_presentation_web_5f039db1._.js.map +1 -1
  162. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_2a52b697.js +1 -1
  163. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_2a52b697.js.map +1 -1
  164. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  165. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  166. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  167. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  168. package/web/.next/server/chunks/ssr/src_presentation_web_c4337169._.js +2 -2
  169. package/web/.next/server/chunks/ssr/src_presentation_web_c4337169._.js.map +1 -1
  170. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  171. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  172. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  173. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +1 -1
  174. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  175. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.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_db779ef4._.js +3 -0
  181. package/web/.next/server/chunks/ssr/src_presentation_web_db779ef4._.js.map +1 -0
  182. package/web/.next/server/pages/500.html +2 -2
  183. package/web/.next/server/server-reference-manifest.js +1 -1
  184. package/web/.next/server/server-reference-manifest.json +34 -34
  185. package/web/.next/static/chunks/{0110425f3a60fc18.js → 310be54600c8ce20.js} +2 -2
  186. package/web/.next/static/chunks/{ff81a9dd7b7bc56f.js → 373e10090c6410c4.js} +1 -1
  187. package/web/.next/static/chunks/3925626b99dcd57a.css +1 -0
  188. package/web/.next/static/chunks/3f6c44cbad751310.js +1 -0
  189. package/web/.next/static/chunks/4443ee9c7733399b.js +1 -0
  190. package/web/.next/static/chunks/{f464a486bd88502d.js → 64d063449c3be0ec.js} +1 -1
  191. package/web/.next/static/chunks/694718e5449b3150.js +1 -0
  192. package/web/.next/static/chunks/{6339d1c357e7fea3.js → 878643f90bc6360f.js} +2 -2
  193. package/web/.next/static/chunks/94af5be1ccf8842e.js +1 -0
  194. package/web/.next/static/chunks/9821072252ddb89a.js +1 -0
  195. package/web/.next/static/chunks/ac7251026c1e2cdf.js +1 -0
  196. package/web/.next/static/chunks/{96eeeb28e06de78c.js → dbbb446493f21874.js} +1 -1
  197. package/web/.next/static/chunks/e418898e8e02f50a.js +1 -0
  198. package/web/.next/static/chunks/{17d618a2fb4e9a11.js → f0dfeedb263eb906.js} +1 -1
  199. package/web/.next/server/chunks/[root-of-the-server]__42b7ab55._.js +0 -3
  200. package/web/.next/server/chunks/ssr/[root-of-the-server]__2698e9f4._.js.map +0 -1
  201. package/web/.next/server/chunks/ssr/[root-of-the-server]__8e3bf5d7._.js.map +0 -1
  202. package/web/.next/server/chunks/ssr/[root-of-the-server]__9f155c0e._.js +0 -3
  203. package/web/.next/server/chunks/ssr/[root-of-the-server]__9f155c0e._.js.map +0 -1
  204. package/web/.next/server/chunks/ssr/[root-of-the-server]__b724df9e._.js +0 -3
  205. package/web/.next/server/chunks/ssr/[root-of-the-server]__c07f9f79._.js.map +0 -1
  206. package/web/.next/server/chunks/ssr/[root-of-the-server]__c605a375._.js.map +0 -1
  207. package/web/.next/server/chunks/ssr/_0dc2cfd3._.js.map +0 -1
  208. package/web/.next/server/chunks/ssr/_42caff2c._.js.map +0 -1
  209. package/web/.next/server/chunks/ssr/_75f4ccb3._.js +0 -3
  210. package/web/.next/server/chunks/ssr/_75f4ccb3._.js.map +0 -1
  211. package/web/.next/server/chunks/ssr/_9b7b1c2b._.js +0 -3
  212. package/web/.next/server/chunks/ssr/_9b7b1c2b._.js.map +0 -1
  213. package/web/.next/server/chunks/ssr/_ecfef26e._.js +0 -3
  214. package/web/.next/server/chunks/ssr/_ecfef26e._.js.map +0 -1
  215. package/web/.next/server/chunks/ssr/node_modules__pnpm_b59e4b16._.js +0 -3
  216. package/web/.next/server/chunks/ssr/node_modules__pnpm_b59e4b16._.js.map +0 -1
  217. package/web/.next/static/chunks/0d2af96e64960ef5.css +0 -1
  218. package/web/.next/static/chunks/12f3ae6b693c8baf.js +0 -1
  219. package/web/.next/static/chunks/4562ee849ea13c3a.js +0 -1
  220. package/web/.next/static/chunks/83fed73369b40eaf.js +0 -1
  221. package/web/.next/static/chunks/845d8e58a91014e6.js +0 -1
  222. package/web/.next/static/chunks/8e5bdf9fb945ae6a.js +0 -1
  223. package/web/.next/static/chunks/be0d245d0e672d44.js +0 -1
  224. package/web/.next/static/chunks/e6c0bf49bcd5d0fb.js +0 -1
  225. /package/web/.next/static/{DIjy_LTLHBNoz5RRTRhBy → gBTe97SiNDA2hbG9dbfpb}/_buildManifest.js +0 -0
  226. /package/web/.next/static/{DIjy_LTLHBNoz5RRTRhBy → gBTe97SiNDA2hbG9dbfpb}/_clientMiddlewareManifest.json +0 -0
  227. /package/web/.next/static/{DIjy_LTLHBNoz5RRTRhBy → gBTe97SiNDA2hbG9dbfpb}/_ssgManifest.js +0 -0
@@ -1,15 +1,13 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useState, useEffect, useCallback, useRef } from 'react';
4
- import { ChevronRight, ChevronLeft, Loader2, Bot } from 'lucide-react';
4
+ import { ChevronLeft, Loader2 } from 'lucide-react';
5
5
  import { getAllAgentModels } from '../../../app/actions/get-all-agent-models.js';
6
6
  import { updateAgentAndModel } from '../../../app/actions/update-agent-and-model.js';
7
7
  import { getAgentTypeIcon } from '../../common/feature-node/agent-type-icons.js';
8
8
  import { getModelMeta } from '../../../lib/model-metadata.js';
9
9
  import { cn } from '../../../lib/utils.js';
10
10
  const STEPS = ['select-agent', 'select-model'];
11
- /** Fixed width for the wizard content area to prevent layout jumps */
12
- const WIZARD_WIDTH = 'w-72';
13
11
  export function WelcomeAgentSetup({ onComplete, className }) {
14
12
  const [groups, setGroups] = useState([]);
15
13
  const [loading, setLoading] = useState(true);
@@ -25,7 +23,6 @@ export function WelcomeAgentSetup({ onComplete, className }) {
25
23
  .finally(() => setLoading(false));
26
24
  }, []);
27
25
  const activeGroup = selectedAgent ? groups.find((g) => g.agentType === selectedAgent) : null;
28
- /** Animate step transition: fade out → change step → fade in */
29
26
  const transitionTo = useCallback((nextStep, setup) => {
30
27
  setTransitioning(true);
31
28
  setVisible(false);
@@ -46,14 +43,19 @@ export function WelcomeAgentSetup({ onComplete, className }) {
46
43
  clearTimeout(timeoutRef.current);
47
44
  };
48
45
  }, []);
49
- /** Save agent+model selection and complete the wizard */
50
46
  const saveAndComplete = useCallback(async (agentType, model) => {
51
47
  setSaving(true);
52
48
  try {
53
49
  await updateAgentAndModel(agentType, model);
54
- onComplete();
50
+ // Fade out the entire wizard before handing off to the next view
51
+ setVisible(false);
52
+ if (timeoutRef.current)
53
+ clearTimeout(timeoutRef.current);
54
+ timeoutRef.current = setTimeout(() => {
55
+ onComplete();
56
+ }, 200);
55
57
  }
56
- finally {
58
+ catch {
57
59
  setSaving(false);
58
60
  }
59
61
  }, [onComplete]);
@@ -65,7 +67,6 @@ export function WelcomeAgentSetup({ onComplete, className }) {
65
67
  });
66
68
  }
67
69
  else {
68
- // No models — save immediately
69
70
  saveAndComplete(agentType, null);
70
71
  }
71
72
  }, [groups, transitionTo, saveAndComplete]);
@@ -82,19 +83,25 @@ export function WelcomeAgentSetup({ onComplete, className }) {
82
83
  }
83
84
  }, [step, transitionTo]);
84
85
  if (loading) {
85
- return (_jsxs("div", { "data-testid": "welcome-agent-setup", className: cn('flex flex-col items-center justify-center gap-3', className), children: [_jsx(Loader2, { className: "text-muted-foreground h-4 w-4 animate-spin" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Loading agents\u2026" })] }));
86
+ return (_jsxs("div", { "data-testid": "welcome-agent-setup", className: cn('flex flex-col items-center justify-center gap-4', className), children: [_jsx(Loader2, { className: "text-muted-foreground h-5 w-5 animate-spin" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "Loading agents\u2026" })] }));
86
87
  }
87
88
  const stepIndex = STEPS.indexOf(step);
88
- return (_jsxs("div", { "data-testid": "welcome-agent-setup", className: cn('flex flex-col items-center gap-4', WIZARD_WIDTH, className), children: [_jsx("div", { className: "flex flex-col items-center gap-1", children: _jsxs("div", { className: "text-muted-foreground flex items-center gap-2", children: [step === 'select-agent' && (_jsxs(_Fragment, { children: [_jsx(Bot, { className: "h-3.5 w-3.5" }), _jsx("span", { className: "text-[10px] font-semibold tracking-widest uppercase", children: "Choose your agent" })] })), step === 'select-model' && activeGroup
89
- ? (() => {
90
- const AgentIcon = getAgentTypeIcon(activeGroup.agentType);
91
- return (_jsxs(_Fragment, { children: [_jsx(AgentIcon, { className: "h-3.5 w-3.5" }), _jsxs("span", { className: "text-[10px] font-semibold tracking-widest uppercase", children: [activeGroup.label, " \u2014 Pick a model"] })] }));
92
- })()
93
- : null] }) }), _jsx("div", { className: "flex w-full items-center gap-1", children: STEPS.map((s, i) => (_jsx("div", { className: cn('h-0.5 flex-1 rounded-full transition-colors duration-300', i <= stepIndex ? 'bg-foreground/60' : 'bg-muted') }, s))) }), _jsxs("div", { className: cn('flex w-full flex-col items-center transition-opacity duration-150', visible && !transitioning ? 'opacity-100' : 'opacity-0'), children: [step === 'select-agent' && (_jsx("div", { "data-testid": "agent-list", className: "flex w-full flex-col gap-1.5", children: groups.map((group) => {
94
- const GroupIcon = getAgentTypeIcon(group.agentType);
95
- return (_jsxs("button", { type: "button", disabled: saving, "data-testid": `agent-option-${group.agentType}`, className: "border-border hover:border-foreground/40 flex w-full cursor-pointer items-center gap-2.5 rounded-md border border-dashed px-4 py-2.5 transition-colors disabled:opacity-50", onClick: () => handleAgentSelect(group.agentType), children: [_jsx(GroupIcon, { className: "text-muted-foreground h-4 w-4 shrink-0" }), _jsx("span", { className: "flex-1 text-left text-xs font-medium", children: group.label }), _jsx(ChevronRight, { className: "text-muted-foreground h-3 w-3" })] }, group.agentType));
96
- }) })), step === 'select-model' && activeGroup ? (_jsxs("div", { "data-testid": "model-list", className: "flex w-full flex-col gap-1.5", children: [_jsxs("button", { type: "button", disabled: saving, className: "text-muted-foreground hover:text-foreground mb-0.5 flex cursor-pointer items-center gap-1 self-start text-[10px] font-medium transition-colors", onClick: handleBack, children: [_jsx(ChevronLeft, { className: "h-3 w-3" }), "Back"] }), _jsx("div", { className: "flex max-h-48 w-full flex-col gap-1.5 overflow-y-auto", children: activeGroup.models.map((m) => {
97
- const meta = getModelMeta(m.id);
98
- return (_jsxs("button", { type: "button", disabled: saving, "data-testid": `model-option-${m.id}`, className: "border-border hover:border-foreground/40 flex w-full cursor-pointer items-center gap-2.5 rounded-md border border-dashed px-4 py-2.5 text-left transition-colors disabled:opacity-50", onClick: () => handleModelSelect(m.id), children: [_jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [_jsx("span", { className: "text-xs font-medium", children: meta.displayName || m.displayName }), _jsx("span", { className: "text-muted-foreground text-[10px] leading-tight", children: meta.description || m.description })] }), _jsx(ChevronRight, { className: "text-muted-foreground h-3 w-3 shrink-0" })] }, m.id));
99
- }) })] })) : null] })] }));
89
+ // Dynamic hero text per step
90
+ const heroTitle = step === 'select-agent' ? 'Choose your agent' : activeGroup ? `Pick a model` : 'Pick a model';
91
+ const heroSubtitle = step === 'select-agent'
92
+ ? 'Select the AI coding agent you want Shep to use.'
93
+ : activeGroup
94
+ ? `Choose which ${activeGroup.label} model to run.`
95
+ : '';
96
+ return (_jsxs("div", { "data-testid": "welcome-agent-setup", className: cn('flex w-full flex-col items-center', className), children: [_jsx("div", { className: "mb-8 flex w-full max-w-xs items-center gap-1.5", children: STEPS.map((s, i) => (_jsx("div", { className: cn('h-[3px] flex-1 rounded-full transition-colors duration-300', i <= stepIndex ? 'bg-foreground/60' : 'bg-muted') }, s))) }), _jsxs("div", { className: cn('flex w-full flex-col items-center transition-opacity duration-200', visible && !transitioning ? 'opacity-100' : 'opacity-0'), children: [_jsx("h1", { className: "text-foreground/90 text-center text-5xl font-extralight tracking-tight", children: heroTitle }), _jsx("p", { className: "text-muted-foreground mt-3 text-center text-lg leading-relaxed font-light", children: heroSubtitle }), _jsxs("div", { className: "mt-8 flex w-full flex-col items-center", children: [step === 'select-agent' && (_jsx("div", { "data-testid": "agent-list", className: "grid w-full max-w-lg gap-3", style: {
97
+ gridTemplateColumns: `repeat(${Math.min(groups.length, 4)}, minmax(0, 1fr))`,
98
+ }, children: groups.map((group) => {
99
+ const GroupIcon = getAgentTypeIcon(group.agentType);
100
+ return (_jsxs("button", { type: "button", disabled: saving, "data-testid": `agent-option-${group.agentType}`, className: "border-border hover:bg-accent hover:border-foreground/20 flex cursor-pointer flex-col items-center gap-3 rounded-2xl border px-4 py-5 transition-all duration-150 active:scale-[0.97] disabled:opacity-50", onClick: () => handleAgentSelect(group.agentType), children: [_jsx(GroupIcon, { className: "text-foreground/70 h-7 w-7" }), _jsx("span", { className: "text-sm font-medium", children: group.label })] }, group.agentType));
101
+ }) })), step === 'select-model' && activeGroup ? (_jsxs("div", { "data-testid": "model-list", className: "flex w-full max-w-lg flex-col items-center gap-4", children: [_jsxs("button", { type: "button", disabled: saving, className: "text-muted-foreground hover:text-foreground flex cursor-pointer items-center gap-1.5 self-start text-sm transition-colors", onClick: handleBack, children: [_jsx(ChevronLeft, { className: "h-4 w-4" }), "Back"] }), _jsx("div", { className: "grid w-full gap-3", style: {
102
+ gridTemplateColumns: `repeat(${Math.min(activeGroup.models.length, 3)}, minmax(0, 1fr))`,
103
+ }, children: activeGroup.models.map((m) => {
104
+ const meta = getModelMeta(m.id);
105
+ return (_jsxs("button", { type: "button", disabled: saving, "data-testid": `model-option-${m.id}`, className: "border-border hover:bg-accent hover:border-foreground/20 flex cursor-pointer flex-col items-center gap-2 rounded-2xl border px-4 py-5 text-center transition-all duration-150 active:scale-[0.97] disabled:opacity-50", onClick: () => handleModelSelect(m.id), children: [_jsx("span", { className: "text-sm font-medium", children: meta.displayName || m.displayName }), _jsx("span", { className: "text-muted-foreground text-xs leading-tight", children: meta.description || m.description })] }, m.id));
106
+ }) })] })) : null] })] })] }));
100
107
  }
@@ -60,5 +60,5 @@ export function FeaturesCanvas({ nodes, edges, selectedFeatureId, defaultViewpor
60
60
  }, [isEmpty]);
61
61
  const fallbackEmptyState = isEmpty && !emptyState ? (_jsx(EmptyState, { title: "No features yet", description: "Get started by creating your first feature.", action: _jsxs(Button, { onClick: onAddFeature, children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), "New Feature"] }) })) : null;
62
62
  const overlayContent = emptyState ?? fallbackEmptyState;
63
- return (_jsxs("div", { "data-testid": isEmpty ? 'features-canvas-empty' : 'features-canvas', "data-no-drawer-close": true, className: "dark:bg-background pointer-events-auto relative h-full w-full bg-[#f6f7f8]", children: [_jsxs(ReactFlow, { nodes: enrichedNodes, edges: edges, nodeTypes: nodeTypes, edgeTypes: edgeTypes, onConnect: onConnect, onNodesChange: onNodesChange, onNodeClick: onNodeClick, onPaneClick: onPaneClick, onMoveStart: onCanvasDrag, onMoveEnd: onMoveEnd, defaultViewport: defaultViewport ?? FALLBACK_VIEWPORT, nodesDraggable: false, nodesConnectable: false, elementsSelectable: false, proOptions: { hideAttribution: true }, children: [_jsx(Background, { variant: BackgroundVariant.Dots, gap: 24, size: 1, color: "#b8bcc4", className: "dark:[&_circle]:!fill-white/[0.1]" }), !isEmpty && (_jsx(Controls, { showInteractive: false, children: onResetViewport ? _jsx(ResetButton, { onResetViewport: onResetViewport }) : null })), toolbar] }), showOverlay && overlayContent ? (_jsx("div", { className: cn('pointer-events-none absolute inset-0 z-10 flex items-center justify-center transition-opacity duration-300', overlayExiting ? 'opacity-0' : 'animate-in fade-in opacity-100 duration-200'), children: _jsx("div", { className: "pointer-events-auto", children: overlayContent }) })) : null] }));
63
+ return (_jsxs("div", { "data-testid": isEmpty ? 'features-canvas-empty' : 'features-canvas', "data-no-drawer-close": true, className: "dark:bg-background pointer-events-auto relative h-full w-full bg-[#f6f7f8]", children: [_jsxs(ReactFlow, { nodes: enrichedNodes, edges: edges, nodeTypes: nodeTypes, edgeTypes: edgeTypes, onConnect: onConnect, onNodesChange: onNodesChange, onNodeClick: onNodeClick, onPaneClick: onPaneClick, onMoveStart: onCanvasDrag, onMoveEnd: onMoveEnd, defaultViewport: defaultViewport ?? FALLBACK_VIEWPORT, nodesDraggable: false, nodesConnectable: false, elementsSelectable: false, proOptions: { hideAttribution: true }, children: [_jsx(Background, { variant: BackgroundVariant.Dots, gap: 24, size: 1, color: "#b8bcc4", className: "dark:[&_circle]:!fill-white/[0.1]" }), !isEmpty && (_jsx(Controls, { showInteractive: false, children: onResetViewport ? _jsx(ResetButton, { onResetViewport: onResetViewport }) : null })), toolbar] }), showOverlay && overlayContent ? (_jsx("div", { className: cn('pointer-events-none absolute inset-0 z-10 flex items-center justify-center transition-opacity duration-300', overlayExiting ? 'opacity-0' : 'animate-in fade-in opacity-100 duration-200'), children: _jsx("div", { className: "pointer-events-auto h-full w-full", children: overlayContent }) })) : null] }));
64
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-shell/app-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAkC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAsBvE,UAAU,aAAa;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB;AA0FD,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,aAAa,2CAUnD"}
1
+ {"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-shell/app-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAkC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAsBvE,UAAU,aAAa;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB;AA4FD,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,aAAa,2CAUnD"}
@@ -26,7 +26,7 @@ function AppShellInner({ children }) {
26
26
  const featureFlags = useFeatureFlags();
27
27
  // Subscribe to agent lifecycle events and dispatch toast/browser notifications
28
28
  useNotifications();
29
- const { features } = useSidebarFeaturesContext();
29
+ const { features, hasRepositories } = useSidebarFeaturesContext();
30
30
  const handleNewFeature = useCallback(() => {
31
31
  guardedNavigate(() => router.push('/create'));
32
32
  }, [router, guardedNavigate]);
@@ -63,7 +63,7 @@ function AppShellInner({ children }) {
63
63
  loading: addingRepo,
64
64
  },
65
65
  ], [handleNewFeature, handleAddRepository, addingRepo]);
66
- return (_jsxs(SidebarProvider, { defaultOpen: false, children: [_jsx(AppSidebar, { features: features, featureFlags: featureFlags, onFeatureClick: handleFeatureClick }), _jsx(SidebarInset, { children: _jsxs("div", { className: "relative h-full", children: [_jsxs("div", { className: "absolute top-3 right-3 z-50 flex gap-1", "data-test-id": "canvas-actions-toolbar", children: [_jsx(SoundToggle, {}), _jsx(ThemeToggle, {})] }), _jsx("main", { className: "h-full", children: children }), isControlCenterRoute(pathname) && _jsx(FloatingActionButton, { actions: fabActions })] }) })] }));
66
+ return (_jsxs(SidebarProvider, { defaultOpen: false, children: [_jsx(AppSidebar, { features: features, featureFlags: featureFlags, onFeatureClick: handleFeatureClick }), _jsx(SidebarInset, { children: _jsxs("div", { className: "relative h-full", children: [_jsxs("div", { className: "absolute top-3 right-3 z-50 flex gap-1", "data-test-id": "canvas-actions-toolbar", children: [_jsx(SoundToggle, {}), _jsx(ThemeToggle, {})] }), _jsx("main", { className: "h-full", children: children }), isControlCenterRoute(pathname) && hasRepositories ? (_jsx(FloatingActionButton, { actions: fabActions })) : null] }) })] }));
67
67
  }
68
68
  export function AppShell({ children }) {
69
69
  return (_jsx(AgentEventsProvider, { children: _jsx(DrawerCloseGuardProvider, { children: _jsx(SidebarFeaturesProvider, { children: _jsx(AppShellInner, { children: children }) }) }) }));
@@ -18,6 +18,8 @@ export declare function mapNodeStateToSidebarStatus(state: FeatureNodeState): Fe
18
18
  interface SidebarFeaturesContextValue {
19
19
  features: SidebarFeatureItem[];
20
20
  setFeatures: (features: SidebarFeatureItem[]) => void;
21
+ hasRepositories: boolean;
22
+ setHasRepositories: (value: boolean) => void;
21
23
  }
22
24
  interface SidebarFeaturesProviderProps {
23
25
  children: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-features-context.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/sidebar-features-context.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAgD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACrF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4DAA4D,CAAC;AACnG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAI/E,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAiBD;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,gBAAgB,GAAG,aAAa,GAAG,IAAI,CAEzF;AAMD,UAAU,2BAA2B;IACnC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,WAAW,EAAE,CAAC,QAAQ,EAAE,kBAAkB,EAAE,KAAK,IAAI,CAAC;CACvD;AAID,UAAU,4BAA4B;IACpC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,uBAAuB,CAAC,EAAE,QAAQ,EAAE,EAAE,4BAA4B,2CAQjF;AAED,wBAAgB,yBAAyB,IAAI,2BAA2B,CAMvE"}
1
+ {"version":3,"file":"sidebar-features-context.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/sidebar-features-context.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAgD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACrF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4DAA4D,CAAC;AACnG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAI/E,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAiBD;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,gBAAgB,GAAG,aAAa,GAAG,IAAI,CAEzF;AAMD,UAAU,2BAA2B;IACnC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,WAAW,EAAE,CAAC,QAAQ,EAAE,kBAAkB,EAAE,KAAK,IAAI,CAAC;IACtD,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC9C;AAID,UAAU,4BAA4B;IACpC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,uBAAuB,CAAC,EAAE,QAAQ,EAAE,EAAE,4BAA4B,2CAYjF;AAED,wBAAgB,yBAAyB,IAAI,2BAA2B,CAMvE"}
@@ -24,7 +24,8 @@ export function mapNodeStateToSidebarStatus(state) {
24
24
  const SidebarFeaturesContext = createContext(null);
25
25
  export function SidebarFeaturesProvider({ children }) {
26
26
  const [features, setFeatures] = useState([]);
27
- const value = useMemo(() => ({ features, setFeatures }), [features]);
27
+ const [hasRepositories, setHasRepositories] = useState(false);
28
+ const value = useMemo(() => ({ features, setFeatures, hasRepositories, setHasRepositories }), [features, hasRepositories]);
28
29
  return (_jsx(SidebarFeaturesContext.Provider, { value: value, children: children }));
29
30
  }
30
31
  export function useSidebarFeaturesContext() {
@@ -8,7 +8,7 @@ export const CANVAS_LAYOUT_DEFAULTS = {
8
8
  /** Known node-type dimensions for the canvas node types */
9
9
  const NODE_DIMENSIONS = {
10
10
  featureNode: { width: 288, height: 140 },
11
- repositoryNode: { width: 328, height: 50 },
11
+ repositoryNode: { width: 400, height: 110 },
12
12
  };
13
13
  function getNodeSize(node, defaultSize) {
14
14
  // Prefer per-node size from data, then type-based lookup, then default