@shepai/cli 1.94.0 → 1.95.0-pr278.e1c3dfb

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 (226) hide show
  1. package/dist/packages/core/src/application/use-cases/settings/complete-web-onboarding.use-case.d.ts +19 -0
  2. package/dist/packages/core/src/application/use-cases/settings/complete-web-onboarding.use-case.d.ts.map +1 -0
  3. package/dist/packages/core/src/application/use-cases/settings/complete-web-onboarding.use-case.js +52 -0
  4. package/dist/packages/core/src/application/use-cases/settings/index.d.ts +2 -0
  5. package/dist/packages/core/src/application/use-cases/settings/index.d.ts.map +1 -1
  6. package/dist/packages/core/src/application/use-cases/settings/index.js +1 -0
  7. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  8. package/dist/packages/core/src/infrastructure/di/container.js +5 -0
  9. package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
  10. package/dist/src/presentation/cli/commands/feat/new.command.js +9 -0
  11. package/dist/src/presentation/cli/index.js +0 -12
  12. package/dist/src/presentation/web/app/actions/agent-setup-flag.d.ts +6 -0
  13. package/dist/src/presentation/web/app/actions/agent-setup-flag.d.ts.map +1 -0
  14. package/dist/src/presentation/web/app/actions/agent-setup-flag.js +14 -0
  15. package/dist/src/presentation/web/app/actions/check-agent-tool.d.ts +11 -0
  16. package/dist/src/presentation/web/app/actions/check-agent-tool.d.ts.map +1 -0
  17. package/dist/src/presentation/web/app/actions/check-agent-tool.js +35 -0
  18. package/dist/src/presentation/web/app/actions/update-agent-and-model.d.ts.map +1 -1
  19. package/dist/src/presentation/web/app/actions/update-agent-and-model.js +6 -12
  20. package/dist/src/presentation/web/components/common/repository-node/repository-node-config.d.ts +2 -0
  21. package/dist/src/presentation/web/components/common/repository-node/repository-node-config.d.ts.map +1 -1
  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 +2 -1
  24. package/dist/src/presentation/web/components/common/repository-node/repository-node.stories.d.ts +1 -0
  25. package/dist/src/presentation/web/components/common/repository-node/repository-node.stories.d.ts.map +1 -1
  26. package/dist/src/presentation/web/components/common/repository-node/repository-node.stories.js +10 -0
  27. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts.map +1 -1
  28. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +20 -4
  29. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  30. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +12 -1
  31. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.d.ts +6 -0
  32. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.d.ts.map +1 -0
  33. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.js +222 -0
  34. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.stories.d.ts +7 -0
  35. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.stories.d.ts.map +1 -0
  36. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.stories.js +20 -0
  37. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.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 +3 -3
  45. package/web/.next/required-server-files.json +3 -3
  46. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +92 -62
  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 +102 -42
  51. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -2
  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 +102 -42
  55. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -2
  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 +88 -28
  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 +92 -62
  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 +102 -42
  67. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +2 -2
  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 +102 -42
  71. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -2
  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 +88 -28
  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 +88 -28
  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/attachments/preview/route.js.nft.json +1 -1
  92. package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
  93. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  94. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  95. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  96. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  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/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  104. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  105. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_2b65878f._.js +3 -0
  106. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_2b65878f._.js.map +1 -0
  107. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_6ba7eb21._.js +3 -0
  108. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_6ba7eb21._.js.map +1 -0
  109. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_c757eb00.js +3 -0
  110. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_c757eb00.js.map +1 -0
  111. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_7eb49631.js +3 -0
  112. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_7eb49631.js.map +1 -0
  113. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
  114. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
  115. package/web/.next/server/chunks/ssr/{[root-of-the-server]__17143953._.js → [root-of-the-server]__19fb0bfe._.js} +2 -2
  116. package/web/.next/server/chunks/ssr/{[root-of-the-server]__5cc4752a._.js.map → [root-of-the-server]__19fb0bfe._.js.map} +1 -1
  117. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +4 -0
  118. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js.map +1 -0
  119. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  120. package/web/.next/server/chunks/ssr/{[root-of-the-server]__45aad79d._.js → [root-of-the-server]__3d6f6b0e._.js} +2 -2
  121. package/web/.next/server/chunks/ssr/{[root-of-the-server]__17143953._.js.map → [root-of-the-server]__3d6f6b0e._.js.map} +1 -1
  122. package/web/.next/server/chunks/ssr/{[root-of-the-server]__5cc4752a._.js → [root-of-the-server]__42020c54._.js} +2 -2
  123. package/web/.next/server/chunks/ssr/{[root-of-the-server]__9de266fa._.js.map → [root-of-the-server]__42020c54._.js.map} +1 -1
  124. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
  125. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js.map +1 -1
  126. package/web/.next/server/chunks/ssr/[root-of-the-server]__7b49fcb3._.js +3 -0
  127. package/web/.next/server/chunks/ssr/[root-of-the-server]__7b49fcb3._.js.map +1 -0
  128. package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js +1 -1
  129. package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js.map +1 -1
  130. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
  131. package/web/.next/server/chunks/ssr/{[root-of-the-server]__9de266fa._.js → [root-of-the-server]__9cb60e1e._.js} +2 -2
  132. package/web/.next/server/chunks/ssr/{[root-of-the-server]__45aad79d._.js.map → [root-of-the-server]__9cb60e1e._.js.map} +1 -1
  133. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
  134. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  135. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
  136. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
  137. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  138. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  139. package/web/.next/server/chunks/ssr/{_3533fed7._.js → _28974cda._.js} +2 -2
  140. package/web/.next/server/chunks/ssr/_28974cda._.js.map +1 -0
  141. package/web/.next/server/chunks/ssr/{_9f6b01ba._.js → _2ae2fc54._.js} +2 -2
  142. package/web/.next/server/chunks/ssr/{_9f6b01ba._.js.map → _2ae2fc54._.js.map} +1 -1
  143. package/web/.next/server/chunks/ssr/_5e112f82._.js +3 -0
  144. package/web/.next/server/chunks/ssr/_5e112f82._.js.map +1 -0
  145. package/web/.next/server/chunks/ssr/_86f903cc._.js +3 -0
  146. package/web/.next/server/chunks/ssr/_86f903cc._.js.map +1 -0
  147. package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
  148. package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
  149. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  150. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  151. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  152. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  153. package/web/.next/server/chunks/ssr/src_presentation_web_3c53a23d._.js +5 -0
  154. package/web/.next/server/chunks/ssr/src_presentation_web_3c53a23d._.js.map +1 -0
  155. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_befd865a.js +3 -0
  156. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_befd865a.js.map +1 -0
  157. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  158. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  159. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  160. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  161. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  162. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +1 -1
  163. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  164. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js.map +1 -1
  165. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  166. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  167. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  168. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  169. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js +1 -1
  170. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js.map +1 -1
  171. package/web/.next/server/chunks/ssr/src_presentation_web_ec8c7a4f._.js +5 -0
  172. package/web/.next/server/chunks/ssr/src_presentation_web_ec8c7a4f._.js.map +1 -0
  173. package/web/.next/server/pages/500.html +2 -2
  174. package/web/.next/server/server-reference-manifest.js +1 -1
  175. package/web/.next/server/server-reference-manifest.json +482 -242
  176. package/web/.next/static/chunks/{aef300837193b9fe.js → 322cca976db5f21a.js} +1 -1
  177. package/web/.next/static/chunks/{34a9700c5d94478b.js → 3cf19715cd895d4c.js} +1 -1
  178. package/web/.next/static/chunks/{0e4078228269008c.js → 57acf7effef05456.js} +1 -1
  179. package/web/.next/static/chunks/{8656ca74dcb26191.js → 5cef790aaa0acae7.js} +1 -1
  180. package/web/.next/static/chunks/61c4d617e4b83d4b.css +1 -0
  181. package/web/.next/static/chunks/71d785d1de4b86f6.css +1 -0
  182. package/web/.next/static/chunks/{47d6a912ef998ba6.js → 859bf33130ddd91b.js} +1 -1
  183. package/web/.next/static/chunks/8bd300e88a189928.js +1 -0
  184. package/web/.next/static/chunks/93ea28b37c891e1e.js +1 -0
  185. package/web/.next/static/chunks/9c91e0d922b4de9f.js +1 -0
  186. package/web/.next/static/chunks/{b2c294b25be01866.js → a99f303cfcc11d78.js} +1 -1
  187. package/web/.next/static/chunks/b272ac93b52dceeb.js +1 -0
  188. package/web/.next/static/chunks/c139976db8b6cbc3.js +1 -0
  189. package/web/.next/static/chunks/c37e5aa0ca5fcab6.js +1 -0
  190. package/web/.next/static/chunks/ca2b69da4c8bbade.js +1 -0
  191. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_81a06555._.js +0 -3
  192. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_81a06555._.js.map +0 -1
  193. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_rocket_1575cd4d.js +0 -3
  194. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_rocket_1575cd4d.js.map +0 -1
  195. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +0 -3
  196. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js.map +0 -1
  197. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +0 -3
  198. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js.map +0 -1
  199. package/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js +0 -4
  200. package/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js.map +0 -1
  201. package/web/.next/server/chunks/ssr/[root-of-the-server]__9dc40036._.js +0 -3
  202. package/web/.next/server/chunks/ssr/[root-of-the-server]__9dc40036._.js.map +0 -1
  203. package/web/.next/server/chunks/ssr/_3533fed7._.js.map +0 -1
  204. package/web/.next/server/chunks/ssr/_364346ad._.js +0 -3
  205. package/web/.next/server/chunks/ssr/_364346ad._.js.map +0 -1
  206. package/web/.next/server/chunks/ssr/_df15bd24._.js +0 -3
  207. package/web/.next/server/chunks/ssr/_df15bd24._.js.map +0 -1
  208. package/web/.next/server/chunks/ssr/_f50485a5._.js +0 -3
  209. package/web/.next/server/chunks/ssr/_f50485a5._.js.map +0 -1
  210. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +0 -3
  211. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js.map +0 -1
  212. package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js +0 -5
  213. package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js.map +0 -1
  214. package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js +0 -5
  215. package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js.map +0 -1
  216. package/web/.next/static/chunks/2536dce61f55daad.js +0 -1
  217. package/web/.next/static/chunks/2f0da3c393fc4f04.js +0 -1
  218. package/web/.next/static/chunks/39560c01879ac76a.css +0 -2
  219. package/web/.next/static/chunks/5014c892e1ecc7d6.js +0 -1
  220. package/web/.next/static/chunks/949f140ebb0ba001.js +0 -1
  221. package/web/.next/static/chunks/a2d089b6a5c4fe0b.js +0 -1
  222. package/web/.next/static/chunks/d9247a52ae260218.js +0 -1
  223. package/web/.next/static/chunks/fca533d905e50d78.js +0 -1
  224. /package/web/.next/static/{FBd4oUGtZ_PQpjMeHHiks → N9o2d43fiKOMySC4Kc36z}/_buildManifest.js +0 -0
  225. /package/web/.next/static/{FBd4oUGtZ_PQpjMeHHiks → N9o2d43fiKOMySC4Kc36z}/_clientMiddlewareManifest.json +0 -0
  226. /package/web/.next/static/{FBd4oUGtZ_PQpjMeHHiks → N9o2d43fiKOMySC4Kc36z}/_ssgManifest.js +0 -0
@@ -0,0 +1,222 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useState, useEffect, useCallback, useRef } from 'react';
4
+ import { Check, ChevronRight, ChevronLeft, Download, Loader2, CheckCircle2, Circle, AlertCircle, Bot, Terminal, ExternalLink, } from 'lucide-react';
5
+ import { getAllAgentModels } from '../../../app/actions/get-all-agent-models.js';
6
+ import { checkAgentTool } from '../../../app/actions/check-agent-tool.js';
7
+ import { updateAgentAndModel } from '../../../app/actions/update-agent-and-model.js';
8
+ import { getAgentTypeIcon } from '../../common/feature-node/agent-type-icons.js';
9
+ import { getModelMeta } from '../../../lib/model-metadata.js';
10
+ import { useToolInstallStream } from '../../../hooks/use-tool-install-stream.js';
11
+ import { cn } from '../../../lib/utils.js';
12
+ const STEPS = ['select-agent', 'select-model', 'check-tool', 'authenticate'];
13
+ /** Fixed width for the wizard content area to prevent layout jumps */
14
+ const WIZARD_WIDTH = 'w-72';
15
+ export function WelcomeAgentSetup({ onComplete, className }) {
16
+ const [groups, setGroups] = useState([]);
17
+ const [loading, setLoading] = useState(true);
18
+ const [step, setStep] = useState('select-agent');
19
+ const [selectedAgent, setSelectedAgent] = useState(null);
20
+ const [selectedModel, setSelectedModel] = useState(null);
21
+ const [toolStatus, setToolStatus] = useState(null);
22
+ const [checkingTool, setCheckingTool] = useState(false);
23
+ const [saving, setSaving] = useState(false);
24
+ const [transitioning, setTransitioning] = useState(false);
25
+ const [visible, setVisible] = useState(true);
26
+ const timeoutRef = useRef(undefined);
27
+ useEffect(() => {
28
+ getAllAgentModels()
29
+ .then(setGroups)
30
+ .finally(() => setLoading(false));
31
+ }, []);
32
+ const activeGroup = selectedAgent ? groups.find((g) => g.agentType === selectedAgent) : null;
33
+ /** Animate step transition: fade out → change step → fade in */
34
+ const transitionTo = useCallback((nextStep, setup) => {
35
+ setTransitioning(true);
36
+ setVisible(false);
37
+ if (timeoutRef.current)
38
+ clearTimeout(timeoutRef.current);
39
+ timeoutRef.current = setTimeout(() => {
40
+ setup?.();
41
+ setStep(nextStep);
42
+ // Small delay to let React render the new content before fading in
43
+ requestAnimationFrame(() => {
44
+ setVisible(true);
45
+ setTransitioning(false);
46
+ });
47
+ }, 150);
48
+ }, []);
49
+ useEffect(() => {
50
+ return () => {
51
+ if (timeoutRef.current)
52
+ clearTimeout(timeoutRef.current);
53
+ };
54
+ }, []);
55
+ const handleAgentSelect = useCallback((agentType) => {
56
+ const group = groups.find((g) => g.agentType === agentType);
57
+ if (group && group.models.length > 0) {
58
+ transitionTo('select-model', () => {
59
+ setSelectedAgent(agentType);
60
+ });
61
+ }
62
+ else {
63
+ transitionTo('check-tool', () => {
64
+ setSelectedAgent(agentType);
65
+ setSelectedModel('');
66
+ });
67
+ }
68
+ }, [groups, transitionTo]);
69
+ const handleModelSelect = useCallback((model) => {
70
+ transitionTo('check-tool', () => {
71
+ setSelectedModel(model);
72
+ });
73
+ }, [transitionTo]);
74
+ const handleProceedToAuth = useCallback(() => {
75
+ transitionTo('authenticate');
76
+ }, [transitionTo]);
77
+ const handleBack = useCallback(() => {
78
+ if (step === 'select-model') {
79
+ transitionTo('select-agent', () => {
80
+ setSelectedAgent(null);
81
+ });
82
+ }
83
+ else if (step === 'check-tool') {
84
+ if (activeGroup && activeGroup.models.length > 0) {
85
+ transitionTo('select-model', () => {
86
+ setSelectedModel(null);
87
+ });
88
+ }
89
+ else {
90
+ transitionTo('select-agent', () => {
91
+ setSelectedAgent(null);
92
+ });
93
+ }
94
+ }
95
+ else if (step === 'authenticate') {
96
+ // If tool needed install, go back to check-tool; otherwise skip to model/agent
97
+ if (toolStatus && !toolStatus.installed && toolStatus.toolId) {
98
+ transitionTo('check-tool');
99
+ }
100
+ else if (activeGroup && activeGroup.models.length > 0) {
101
+ transitionTo('select-model', () => {
102
+ setSelectedModel(null);
103
+ });
104
+ }
105
+ else {
106
+ transitionTo('select-agent', () => {
107
+ setSelectedAgent(null);
108
+ });
109
+ }
110
+ }
111
+ }, [step, activeGroup, toolStatus, transitionTo]);
112
+ useEffect(() => {
113
+ if (step !== 'check-tool' || !selectedAgent)
114
+ return;
115
+ setCheckingTool(true);
116
+ checkAgentTool(selectedAgent)
117
+ .then((status) => {
118
+ setToolStatus(status);
119
+ // Auto-skip to authenticate when tool is already available or not required
120
+ if (status.installed || !status.toolId) {
121
+ transitionTo('authenticate');
122
+ }
123
+ })
124
+ .finally(() => setCheckingTool(false));
125
+ }, [step, selectedAgent, transitionTo]);
126
+ const handleConfirm = useCallback(async () => {
127
+ if (!selectedAgent)
128
+ return;
129
+ setSaving(true);
130
+ try {
131
+ await updateAgentAndModel(selectedAgent, selectedModel ?? null);
132
+ onComplete();
133
+ }
134
+ finally {
135
+ setSaving(false);
136
+ }
137
+ }, [selectedAgent, selectedModel, onComplete]);
138
+ if (loading) {
139
+ 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" })] }));
140
+ }
141
+ const stepIndex = STEPS.indexOf(step);
142
+ 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
143
+ ? (() => {
144
+ const AgentIcon = getAgentTypeIcon(activeGroup.agentType);
145
+ 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"] })] }));
146
+ })()
147
+ : null, step === 'check-tool' && (_jsxs(_Fragment, { children: [_jsx(Bot, { className: "h-3.5 w-3.5" }), _jsx("span", { className: "text-[10px] font-semibold tracking-widest uppercase", children: "Verifying setup" })] })), step === 'authenticate' && activeGroup
148
+ ? (() => {
149
+ const AgentIcon = getAgentTypeIcon(activeGroup.agentType);
150
+ return (_jsxs(_Fragment, { children: [_jsx(AgentIcon, { className: "h-3.5 w-3.5" }), _jsx("span", { className: "text-[10px] font-semibold tracking-widest uppercase", children: "Authenticate" })] }));
151
+ })()
152
+ : null] }) }), _jsx("div", { className: "flex w-32 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) => {
153
+ const GroupIcon = getAgentTypeIcon(group.agentType);
154
+ return (_jsxs("button", { type: "button", "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", 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));
155
+ }) })), step === 'select-model' && activeGroup ? (_jsxs("div", { "data-testid": "model-list", className: "flex w-full flex-col gap-1.5", children: [_jsxs("button", { type: "button", 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) => {
156
+ const meta = getModelMeta(m.id);
157
+ return (_jsxs("button", { type: "button", "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", 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));
158
+ }) })] })) : null, step === 'check-tool' && (_jsx(ToolCheckStep, { toolStatus: toolStatus, checking: checkingTool, saving: false, onConfirm: handleProceedToAuth, onBack: handleBack, onToolInstalled: () => {
159
+ if (selectedAgent) {
160
+ setCheckingTool(true);
161
+ checkAgentTool(selectedAgent)
162
+ .then(setToolStatus)
163
+ .finally(() => setCheckingTool(false));
164
+ }
165
+ } })), step === 'authenticate' && toolStatus ? (_jsx(AuthenticateStep, { toolStatus: toolStatus, agentLabel: activeGroup?.label ?? selectedAgent ?? 'Agent', saving: saving, onConfirm: handleConfirm, onBack: handleBack })) : null] })] }));
166
+ }
167
+ /** Sub-component for the tool verification step */
168
+ function ToolCheckStep({ toolStatus, checking, saving, onConfirm, onBack, onToolInstalled, }) {
169
+ if (checking || !toolStatus) {
170
+ return (_jsxs("div", { className: "flex flex-col items-center gap-2 py-4", children: [_jsx(Loader2, { className: "text-muted-foreground h-4 w-4 animate-spin" }), _jsx("p", { className: "text-muted-foreground text-[10px]", children: "Checking tool availability\u2026" })] }));
171
+ }
172
+ // Agent doesn't require a tool (e.g., dev/demo)
173
+ if (!toolStatus.toolId) {
174
+ return (_jsxs("div", { className: "flex w-full flex-col items-center gap-3", children: [_jsxs("div", { className: "text-muted-foreground flex items-center gap-1.5", children: [_jsx(CheckCircle2, { className: "h-3.5 w-3.5" }), _jsx("span", { className: "text-xs", children: "No additional tools required" })] }), _jsx(ConfirmRow, { saving: saving, onConfirm: onConfirm, onBack: onBack })] }));
175
+ }
176
+ if (toolStatus.installed) {
177
+ return (_jsxs("div", { className: "flex w-full flex-col items-center gap-3", children: [_jsxs("div", { className: "text-muted-foreground flex items-center gap-1.5", children: [_jsx(CheckCircle2, { className: "h-3.5 w-3.5" }), _jsxs("span", { className: "text-xs", children: [toolStatus.tool?.name ?? toolStatus.toolId, " is installed"] })] }), _jsx(ConfirmRow, { saving: saving, onConfirm: onConfirm, onBack: onBack })] }));
178
+ }
179
+ return (_jsx(ToolInstallInline, { toolStatus: toolStatus, saving: saving, onConfirm: onConfirm, onBack: onBack, onInstalled: onToolInstalled }));
180
+ }
181
+ /** Shared back + continue row */
182
+ function ConfirmRow({ saving, onConfirm, onBack, label = 'Continue', }) {
183
+ return (_jsxs("div", { className: "flex items-center gap-3", children: [_jsxs("button", { type: "button", className: "text-muted-foreground hover:text-foreground cursor-pointer text-[10px] transition-colors", onClick: onBack, children: [_jsx(ChevronLeft, { className: "mr-0.5 inline h-3 w-3" }), "Back"] }), _jsxs("button", { type: "button", "data-testid": "agent-setup-confirm", disabled: saving, className: "border-border hover:border-foreground/40 flex cursor-pointer items-center gap-1.5 rounded-md border border-dashed px-4 py-2 text-xs font-medium transition-colors disabled:opacity-50", onClick: onConfirm, children: [saving ? _jsx(Loader2, { className: "h-3 w-3 animate-spin" }) : _jsx(Check, { className: "h-3 w-3" }), label] })] }));
184
+ }
185
+ /** Authenticate step — optional agent launch for auth */
186
+ function AuthenticateStep({ toolStatus, agentLabel, saving, onConfirm, onBack, }) {
187
+ const [launching, setLaunching] = useState(false);
188
+ const [launched, setLaunched] = useState(false);
189
+ const handleLaunch = useCallback(async () => {
190
+ if (!toolStatus.toolId)
191
+ return;
192
+ setLaunching(true);
193
+ try {
194
+ const res = await fetch(`/api/tools/${toolStatus.toolId}/launch`, { method: 'POST' });
195
+ if (res.ok)
196
+ setLaunched(true);
197
+ }
198
+ finally {
199
+ setLaunching(false);
200
+ }
201
+ }, [toolStatus.toolId]);
202
+ // No tool = no auth needed, skip straight to confirm
203
+ if (!toolStatus.toolId) {
204
+ return (_jsxs("div", { className: "flex w-full flex-col items-center gap-3", children: [_jsx("p", { className: "text-muted-foreground text-[10px]", children: "No authentication required" }), _jsx(ConfirmRow, { saving: saving, onConfirm: onConfirm, onBack: onBack, label: "Done" })] }));
205
+ }
206
+ return (_jsxs("div", { className: "flex w-full flex-col items-center gap-3", children: [_jsxs("p", { className: "text-muted-foreground text-center text-[10px] leading-relaxed", children: ["Open ", agentLabel, " in a terminal to sign in.", _jsx("br", {}), "Follow the prompts, then come back here."] }), _jsxs("button", { type: "button", "data-testid": "agent-setup-launch", disabled: launching, onClick: handleLaunch, 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", children: [launching ? (_jsx(Loader2, { className: "text-muted-foreground h-4 w-4 animate-spin" })) : (_jsx(Terminal, { className: "text-muted-foreground h-4 w-4" })), _jsx("span", { className: "flex-1 text-left text-xs font-medium", children: launched ? 'Open again' : `Open ${agentLabel}` }), _jsx(ExternalLink, { className: "text-muted-foreground h-3 w-3" })] }), launched ? (_jsx("p", { className: "text-muted-foreground text-[10px]", children: "Terminal opened \u2014 complete sign-in there" })) : null, toolStatus.binaryName ? (_jsxs("div", { className: "flex w-full flex-col gap-1", children: [_jsx("p", { className: "text-muted-foreground text-[10px]", children: "Or run manually in any terminal:" }), _jsxs("div", { className: "w-full rounded-md bg-zinc-900 px-3 py-1.5 font-mono text-[11px] text-zinc-300", children: [_jsx("span", { className: "text-zinc-500 select-none", children: "$ " }), toolStatus.binaryName] })] })) : null, _jsxs("div", { className: "flex items-center gap-3", children: [_jsxs("button", { type: "button", className: "text-muted-foreground hover:text-foreground cursor-pointer text-[10px] transition-colors", onClick: onBack, children: [_jsx(ChevronLeft, { className: "mr-0.5 inline h-3 w-3" }), "Back"] }), _jsxs("button", { type: "button", "data-testid": "agent-setup-confirm", disabled: saving, className: "border-border hover:border-foreground/40 flex cursor-pointer items-center gap-1.5 rounded-md border border-dashed px-4 py-2 text-xs font-medium transition-colors disabled:opacity-50", onClick: onConfirm, children: [saving ? _jsx(Loader2, { className: "h-3 w-3 animate-spin" }) : _jsx(Check, { className: "h-3 w-3" }), launched ? 'Done' : 'Skip'] })] })] }));
207
+ }
208
+ /** Inline tool installer for the welcome wizard */
209
+ function ToolInstallInline({ toolStatus, saving, onConfirm, onBack, onInstalled, }) {
210
+ const toolId = toolStatus.toolId ?? '';
211
+ const { logs, status, startInstall } = useToolInstallStream(toolId);
212
+ const isInstallDone = status === 'done';
213
+ const isInstallError = status === 'error';
214
+ useEffect(() => {
215
+ if (isInstallDone) {
216
+ onInstalled();
217
+ }
218
+ }, [isInstallDone, onInstalled]);
219
+ return (_jsxs("div", { className: "flex w-full flex-col items-center gap-3", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [isInstallDone ? (_jsx(CheckCircle2, { className: "text-muted-foreground h-3.5 w-3.5" })) : isInstallError ? (_jsx(AlertCircle, { className: "text-destructive h-3.5 w-3.5" })) : (_jsx(Circle, { className: "text-muted-foreground h-3.5 w-3.5" })), _jsxs("span", { className: "text-xs", children: [toolStatus.tool?.name ?? toolId, ' ', isInstallDone ? 'installed' : isInstallError ? 'install failed' : 'is not installed'] })] }), toolStatus.tool?.installCommand && status === 'idle' ? (_jsxs("div", { className: "w-full rounded-md bg-zinc-900 px-3 py-2 font-mono text-[11px] text-zinc-300", children: [_jsx("span", { className: "text-zinc-500 select-none", children: "$ " }), toolStatus.tool.installCommand] })) : null, (status === 'streaming' || isInstallDone || isInstallError) && logs.length > 0 ? (_jsxs("div", { className: "max-h-28 w-full overflow-auto rounded-md bg-zinc-900 px-3 py-2 font-mono text-[10px] leading-relaxed text-zinc-400", children: [logs.map((line, idx) => (
220
+ // eslint-disable-next-line react/no-array-index-key -- logs are append-only, never reorder
221
+ _jsx("div", { className: "break-all whitespace-pre-wrap", children: line }, idx))), isInstallDone ? (_jsx("div", { className: "text-muted-foreground mt-1", children: "Installation complete" })) : null, isInstallError ? (_jsx("div", { className: "text-destructive mt-1", children: "Installation failed \u2014 try manually" })) : null] })) : null, _jsxs("div", { className: "flex items-center gap-3", children: [_jsxs("button", { type: "button", className: "text-muted-foreground hover:text-foreground cursor-pointer text-[10px] transition-colors", onClick: onBack, children: [_jsx(ChevronLeft, { className: "mr-0.5 inline h-3 w-3" }), "Back"] }), !isInstallDone && toolStatus.tool?.autoInstall ? (_jsxs("button", { type: "button", "data-testid": "agent-setup-install", disabled: status === 'streaming', className: "border-border hover:border-foreground/40 flex cursor-pointer items-center gap-1.5 rounded-md border border-dashed px-4 py-2 text-xs font-medium transition-colors disabled:opacity-50", onClick: startInstall, children: [status === 'streaming' ? (_jsx(Loader2, { className: "h-3 w-3 animate-spin" })) : (_jsx(Download, { className: "h-3 w-3" })), status === 'streaming' ? 'Installing…' : 'Install'] })) : null, isInstallDone ? (_jsxs("button", { type: "button", "data-testid": "agent-setup-confirm", disabled: saving, className: "border-border hover:border-foreground/40 flex cursor-pointer items-center gap-1.5 rounded-md border border-dashed px-4 py-2 text-xs font-medium transition-colors disabled:opacity-50", onClick: onConfirm, children: [saving ? _jsx(Loader2, { className: "h-3 w-3 animate-spin" }) : _jsx(Check, { className: "h-3 w-3" }), "Continue"] })) : null] })] }));
222
+ }
@@ -0,0 +1,7 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { WelcomeAgentSetup } from './welcome-agent-setup.js';
3
+ declare const meta: Meta<typeof WelcomeAgentSetup>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
7
+ //# sourceMappingURL=welcome-agent-setup.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"welcome-agent-setup.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/welcome-agent-setup.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,iBAAiB,CAcxC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { fn } from '@storybook/test';
3
+ import { WelcomeAgentSetup } from './welcome-agent-setup.js';
4
+ const meta = {
5
+ title: 'Features/WelcomeAgentSetup',
6
+ component: WelcomeAgentSetup,
7
+ tags: ['autodocs'],
8
+ parameters: {
9
+ layout: 'centered',
10
+ },
11
+ decorators: [
12
+ (Story) => (_jsx("div", { style: { width: 480, padding: 48, display: 'flex', justifyContent: 'center' }, children: _jsx(Story, {}) })),
13
+ ],
14
+ };
15
+ export default meta;
16
+ export const Default = {
17
+ args: {
18
+ onComplete: fn(),
19
+ },
20
+ };
@@ -29,7 +29,7 @@ function AppShellInner({ children }) {
29
29
  const handleRepositorySelect = useCallback((path) => {
30
30
  window.dispatchEvent(new CustomEvent('shep:add-repository', { detail: { path } }));
31
31
  }, []);
32
- return (_jsxs(SidebarProvider, { children: [_jsx(AppSidebar, { features: features, featureFlags: featureFlags, onNewFeature: handleNewFeature, 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", children: [_jsx(AddRepositoryButton, { onSelect: handleRepositorySelect }), _jsx(SoundToggle, {}), _jsx(ThemeToggle, {})] }), _jsx("main", { className: "h-full", children: children })] }) })] }));
32
+ return (_jsxs(SidebarProvider, { defaultOpen: false, children: [_jsx(AppSidebar, { features: features, featureFlags: featureFlags, onNewFeature: handleNewFeature, 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", children: [_jsx(AddRepositoryButton, { onSelect: handleRepositorySelect }), _jsx(SoundToggle, {}), _jsx(ThemeToggle, {})] }), _jsx("main", { className: "h-full", children: children })] }) })] }));
33
33
  }
34
34
  export function AppShell({ children }) {
35
35
  return (_jsx(AgentEventsProvider, { children: _jsx(DrawerCloseGuardProvider, { children: _jsx(SidebarFeaturesProvider, { children: _jsx(AppShellInner, { children: children }) }) }) }));