@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,19 @@
1
+ /**
2
+ * Complete Web Onboarding Use Case
3
+ *
4
+ * Lighter variant of CompleteOnboardingUseCase for the web UI wizard.
5
+ * Only updates agent type, model, and sets onboardingComplete=true.
6
+ * Other settings (IDE, workflow defaults) keep their current values.
7
+ */
8
+ import type { Settings, AgentType } from '../../../domain/generated/output.js';
9
+ import type { ISettingsRepository } from '../../ports/output/repositories/settings.repository.interface.js';
10
+ export interface CompleteWebOnboardingInput {
11
+ agentType: AgentType;
12
+ model: string | null;
13
+ }
14
+ export declare class CompleteWebOnboardingUseCase {
15
+ private readonly settingsRepository;
16
+ constructor(settingsRepository: ISettingsRepository);
17
+ execute(input: CompleteWebOnboardingInput): Promise<Settings>;
18
+ }
19
+ //# sourceMappingURL=complete-web-onboarding.use-case.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complete-web-onboarding.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/settings/complete-web-onboarding.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kEAAkE,CAAC;AAE5G,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,qBACa,4BAA4B;IAGrC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAAlB,kBAAkB,EAAE,mBAAmB;IAGpD,OAAO,CAAC,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,QAAQ,CAAC;CAsBpE"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Complete Web Onboarding Use Case
3
+ *
4
+ * Lighter variant of CompleteOnboardingUseCase for the web UI wizard.
5
+ * Only updates agent type, model, and sets onboardingComplete=true.
6
+ * Other settings (IDE, workflow defaults) keep their current values.
7
+ */
8
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
9
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
10
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
11
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
12
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
13
+ };
14
+ var __metadata = (this && this.__metadata) || function (k, v) {
15
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
16
+ };
17
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
18
+ return function (target, key) { decorator(target, key, paramIndex); }
19
+ };
20
+ import { injectable, inject } from 'tsyringe';
21
+ let CompleteWebOnboardingUseCase = class CompleteWebOnboardingUseCase {
22
+ settingsRepository;
23
+ constructor(settingsRepository) {
24
+ this.settingsRepository = settingsRepository;
25
+ }
26
+ async execute(input) {
27
+ const settings = await this.settingsRepository.load();
28
+ if (!settings) {
29
+ throw new Error('Settings not found. Please run initialization first.');
30
+ }
31
+ const updatedSettings = {
32
+ ...settings,
33
+ agent: {
34
+ ...settings.agent,
35
+ type: input.agentType,
36
+ },
37
+ models: {
38
+ default: input.model?.trim() ?? settings.models.default,
39
+ },
40
+ onboardingComplete: true,
41
+ updatedAt: new Date(),
42
+ };
43
+ await this.settingsRepository.update(updatedSettings);
44
+ return updatedSettings;
45
+ }
46
+ };
47
+ CompleteWebOnboardingUseCase = __decorate([
48
+ injectable(),
49
+ __param(0, inject('ISettingsRepository')),
50
+ __metadata("design:paramtypes", [Object])
51
+ ], CompleteWebOnboardingUseCase);
52
+ export { CompleteWebOnboardingUseCase };
@@ -9,4 +9,6 @@ export { UpdateSettingsUseCase } from './update-settings.use-case.js';
9
9
  export { CheckOnboardingStatusUseCase } from './check-onboarding-status.use-case.js';
10
10
  export { CompleteOnboardingUseCase } from './complete-onboarding.use-case.js';
11
11
  export type { CompleteOnboardingInput } from './complete-onboarding.use-case.js';
12
+ export { CompleteWebOnboardingUseCase } from './complete-web-onboarding.use-case.js';
13
+ export type { CompleteWebOnboardingInput } from './complete-web-onboarding.use-case.js';
12
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/settings/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,YAAY,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/settings/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,YAAY,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,YAAY,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC"}
@@ -8,3 +8,4 @@ export { LoadSettingsUseCase } from './load-settings.use-case.js';
8
8
  export { UpdateSettingsUseCase } from './update-settings.use-case.js';
9
9
  export { CheckOnboardingStatusUseCase } from './check-onboarding-status.use-case.js';
10
10
  export { CompleteOnboardingUseCase } from './complete-onboarding.use-case.js';
11
+ export { CompleteWebOnboardingUseCase } from './complete-web-onboarding.use-case.js';
@@ -1 +1 @@
1
- {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/di/container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAgHrC;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,SAAS,CAAC,CAsSrE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/di/container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAiHrC;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,SAAS,CAAC,CA0SrE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -45,6 +45,7 @@ import { InitializeSettingsUseCase } from '../../application/use-cases/settings/
45
45
  import { LoadSettingsUseCase } from '../../application/use-cases/settings/load-settings.use-case.js';
46
46
  import { UpdateSettingsUseCase } from '../../application/use-cases/settings/update-settings.use-case.js';
47
47
  import { CompleteOnboardingUseCase } from '../../application/use-cases/settings/complete-onboarding.use-case.js';
48
+ import { CompleteWebOnboardingUseCase } from '../../application/use-cases/settings/complete-web-onboarding.use-case.js';
48
49
  import { ConfigureAgentUseCase } from '../../application/use-cases/agents/configure-agent.use-case.js';
49
50
  import { ValidateAgentAuthUseCase } from '../../application/use-cases/agents/validate-agent-auth.use-case.js';
50
51
  import { RunAgentUseCase } from '../../application/use-cases/agents/run-agent.use-case.js';
@@ -244,6 +245,7 @@ export async function initializeContainer() {
244
245
  container.registerSingleton(LoadSettingsUseCase);
245
246
  container.registerSingleton(UpdateSettingsUseCase);
246
247
  container.registerSingleton(CompleteOnboardingUseCase);
248
+ container.registerSingleton(CompleteWebOnboardingUseCase);
247
249
  container.registerSingleton(ConfigureAgentUseCase);
248
250
  container.registerSingleton(ValidateAgentAuthUseCase);
249
251
  container.registerSingleton(RunAgentUseCase);
@@ -352,6 +354,9 @@ export async function initializeContainer() {
352
354
  container.register('UpdateSettingsUseCase', {
353
355
  useFactory: (c) => c.resolve(UpdateSettingsUseCase),
354
356
  });
357
+ container.register('CompleteWebOnboardingUseCase', {
358
+ useFactory: (c) => c.resolve(CompleteWebOnboardingUseCase),
359
+ });
355
360
  container.register('CleanupFeatureWorktreeUseCase', {
356
361
  useFactory: (c) => c.resolve(CleanupFeatureWorktreeUseCase),
357
362
  });
@@ -1 +1 @@
1
- {"version":3,"file":"new.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/new.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0DpC;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAgI1C"}
1
+ {"version":3,"file":"new.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/new.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4DpC;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAwI1C"}
@@ -19,6 +19,8 @@ import { SdlcLifecycle } from '../../../../../packages/core/src/domain/generated
19
19
  import { colors, messages, spinner } from '../../ui/index.js';
20
20
  import { getShepHomeDir } from '../../../../../packages/core/src/infrastructure/services/filesystem/shep-directory.service.js';
21
21
  import { getSettings, hasSettings } from '../../../../../packages/core/src/infrastructure/services/settings.service.js';
22
+ import { CheckOnboardingStatusUseCase } from '../../../../../packages/core/src/application/use-cases/settings/check-onboarding-status.use-case.js';
23
+ import { onboardingWizard } from '../../../tui/wizards/onboarding/onboarding.wizard.js';
22
24
  /** Commander collect pattern for repeatable options. */
23
25
  function collect(value, previous) {
24
26
  return [...previous, value];
@@ -58,6 +60,13 @@ export function createNewCommand() {
58
60
  .option('--attach <path>', 'Attach a file (repeatable)', collect, [])
59
61
  .action(async (description, options) => {
60
62
  try {
63
+ // First-run onboarding gate — only for interactive terminals
64
+ if (process.stdin.isTTY) {
65
+ const { isComplete } = await new CheckOnboardingStatusUseCase().execute();
66
+ if (!isComplete) {
67
+ await onboardingWizard();
68
+ }
69
+ }
61
70
  const useCase = container.resolve(CreateFeatureUseCase);
62
71
  const repoPath = options.repo ?? process.cwd();
63
72
  // Resolve openPr from CLI flags or settings defaults
@@ -54,7 +54,6 @@ import { startDaemon } from './commands/daemon/start-daemon.js';
54
54
  import { initializeContainer, container } from '../../../packages/core/src/infrastructure/di/container.js';
55
55
  import { InitializeSettingsUseCase } from '../../../packages/core/src/application/use-cases/settings/initialize-settings.use-case.js';
56
56
  import { initializeSettings } from '../../../packages/core/src/infrastructure/services/settings.service.js';
57
- import { CheckOnboardingStatusUseCase } from '../../../packages/core/src/application/use-cases/settings/check-onboarding-status.use-case.js';
58
57
  /**
59
58
  * Bootstrap function - initializes all dependencies before CLI starts.
60
59
  * Performs async initialization (database, settings) before parsing commands.
@@ -83,17 +82,6 @@ async function bootstrap() {
83
82
  messages.error('Failed to initialize settings', err);
84
83
  throw error;
85
84
  }
86
- // Step 2.5: First-run onboarding gate
87
- // Only run in interactive terminals (the wizard needs TTY for prompts)
88
- if (process.stdin.isTTY) {
89
- const onboardingCheck = new CheckOnboardingStatusUseCase();
90
- const { isComplete } = await onboardingCheck.execute();
91
- if (!isComplete) {
92
- // Lazy-import to avoid ~460ms startup cost when onboarding is already complete
93
- const { onboardingWizard } = await import('../tui/wizards/onboarding/onboarding.wizard.js');
94
- await onboardingWizard();
95
- }
96
- }
97
85
  // Step 3: Set up Commander CLI
98
86
  const versionService = container.resolve('IVersionService');
99
87
  const { version, description } = versionService.getVersion();
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Check whether onboarding has been completed.
3
+ * Delegates to the in-memory settings singleton (zero DB overhead).
4
+ */
5
+ export declare function isAgentSetupComplete(): Promise<boolean>;
6
+ //# sourceMappingURL=agent-setup-flag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-setup-flag.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/agent-setup-flag.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAM7D"}
@@ -0,0 +1,14 @@
1
+ 'use server';
2
+ import { getSettings } from '../../../../../packages/core/src/infrastructure/services/settings.service.js';
3
+ /**
4
+ * Check whether onboarding has been completed.
5
+ * Delegates to the in-memory settings singleton (zero DB overhead).
6
+ */
7
+ export async function isAgentSetupComplete() {
8
+ try {
9
+ return getSettings().onboardingComplete;
10
+ }
11
+ catch {
12
+ return false;
13
+ }
14
+ }
@@ -0,0 +1,11 @@
1
+ import type { ToolItem } from '../../../../../packages/core/src/application/use-cases/tools/list-tools.use-case.js';
2
+ export interface AgentToolStatus {
3
+ agentType: string;
4
+ toolId: string | null;
5
+ tool: ToolItem | null;
6
+ installed: boolean;
7
+ /** CLI binary name for manual run instructions (e.g. "claude", "gemini") */
8
+ binaryName: string | null;
9
+ }
10
+ export declare function checkAgentTool(agentType: string): Promise<AgentToolStatus>;
11
+ //# sourceMappingURL=check-agent-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-agent-tool.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/check-agent-tool.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8DAA8D,CAAC;AAmB7F,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,4EAA4E;IAC5E,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAmBhF"}
@@ -0,0 +1,35 @@
1
+ 'use server';
2
+ import { resolve } from '../../lib/server-container.js';
3
+ /**
4
+ * Maps agent types to their corresponding tool IDs in the tool registry.
5
+ * These IDs match the JSON file names in tool-installer/tools/.
6
+ */
7
+ const AGENT_TOOL_MAP = {
8
+ 'claude-code': 'claude-code',
9
+ cursor: 'cursor-cli',
10
+ 'gemini-cli': 'gemini-cli',
11
+ };
12
+ /** CLI binary names matching the `binary` field in each tool JSON */
13
+ const AGENT_BINARY_MAP = {
14
+ 'claude-code': 'claude',
15
+ cursor: 'cursor',
16
+ 'gemini-cli': 'gemini',
17
+ };
18
+ export async function checkAgentTool(agentType) {
19
+ const toolId = AGENT_TOOL_MAP[agentType] ?? null;
20
+ const binaryName = AGENT_BINARY_MAP[agentType] ?? null;
21
+ // Dev agent and unknown agents don't need a tool
22
+ if (!toolId) {
23
+ return { agentType, toolId: null, tool: null, installed: true, binaryName: null };
24
+ }
25
+ try {
26
+ const useCase = resolve('ListToolsUseCase');
27
+ const tools = await useCase.execute();
28
+ const tool = tools.find((t) => t.id === toolId) ?? null;
29
+ const installed = tool?.status.status === 'available';
30
+ return { agentType, toolId, tool, installed, binaryName };
31
+ }
32
+ catch {
33
+ return { agentType, toolId, tool: null, installed: false, binaryName };
34
+ }
35
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"update-agent-and-model.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/update-agent-and-model.ts"],"names":[],"mappings":"AAUA,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA2B1C"}
1
+ {"version":3,"file":"update-agent-and-model.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/update-agent-and-model.ts"],"names":[],"mappings":"AAUA,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAoB1C"}
@@ -1,22 +1,16 @@
1
1
  'use server';
2
2
  import { resolve } from '../../lib/server-container.js';
3
- import { getSettings, resetSettings, initializeSettings, } from '../../../../../packages/core/src/infrastructure/services/settings.service.js';
3
+ import { resetSettings, initializeSettings, } from '../../../../../packages/core/src/infrastructure/services/settings.service.js';
4
4
  export async function updateAgentAndModel(agentType, model) {
5
5
  if (!agentType.trim()) {
6
6
  return { ok: false, error: 'agent type is required' };
7
7
  }
8
8
  try {
9
- const currentSettings = getSettings();
10
- const updatedSettings = {
11
- ...currentSettings,
12
- agent: {
13
- ...currentSettings.agent,
14
- type: agentType.trim(),
15
- },
16
- models: { default: model?.trim() ?? currentSettings.models.default },
17
- };
18
- const updateUseCase = resolve('UpdateSettingsUseCase');
19
- await updateUseCase.execute(updatedSettings);
9
+ const useCase = resolve('CompleteWebOnboardingUseCase');
10
+ const updatedSettings = await useCase.execute({
11
+ agentType: agentType.trim(),
12
+ model,
13
+ });
20
14
  resetSettings();
21
15
  initializeSettings(updatedSettings);
22
16
  return { ok: true };
@@ -11,6 +11,8 @@ export interface RepositoryNodeData {
11
11
  onAdd?: () => void;
12
12
  onDelete?: (repositoryId: string) => void;
13
13
  showHandles?: boolean;
14
+ /** When true, the "+" add-feature button shows a pulse attention animation. */
15
+ pulseAdd?: boolean;
14
16
  }
15
17
  export type RepositoryNodeType = Node<RepositoryNodeData, 'repositoryNode'>;
16
18
  //# sourceMappingURL=repository-node-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"repository-node-config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,qEAAqE;IACrE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"repository-node-config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,qEAAqE;IACrE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAGnE,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,2CA8O5F"}
1
+ {"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAGnE,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,2CAkP5F"}
@@ -42,5 +42,6 @@ export function RepositoryNode({ data }) {
42
42
  }, className: "nodrag bg-card flex min-w-[18rem] cursor-pointer items-center gap-3 rounded-full border px-4 py-3 shadow-sm", 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" })] }) }), featureFlags.envDeploy ? (_jsxs(_Fragment, { children: [_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "flex items-center", children: _jsx(ActionButton, { label: isDeploymentActive ? 'Stop Dev Server' : 'Start Dev Server', onClick: isDeploymentActive ? deployAction.stop : deployAction.deploy, loading: deployAction.deployLoading || deployAction.stopLoading, error: !!deployAction.deployError, icon: isDeploymentActive ? Square : Play, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: isDeploymentActive ? 'Stop Dev Server' : 'Start Dev Server' })] }) }), isDeploymentActive ? (_jsx(DeploymentStatusBadge, { status: deployAction.status, url: deployAction.url, targetId: data.repositoryPath })) : null] })) : null] })) : 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) => {
43
43
  e.stopPropagation();
44
44
  data.onAdd?.();
45
- }, className: "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", children: _jsx(Plus, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Add feature" })] }) })) : null] })] }), data.onAdd || data.showHandles ? (_jsx(Handle, { type: "source", position: Position.Right, isConnectable: !data.showHandles, className: "opacity-0!" })) : null] }));
45
+ }, 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 &&
46
+ '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.onAdd || data.showHandles ? (_jsx(Handle, { type: "source", position: Position.Right, isConnectable: !data.showHandles, className: "opacity-0!" })) : null] }));
46
47
  }
@@ -9,6 +9,7 @@ export declare const WithHandles: Story;
9
9
  export declare const LongName: Story;
10
10
  export declare const Multiple: Story;
11
11
  export declare const MultipleWithButton: Story;
12
+ export declare const WithPulseAdd: Story;
12
13
  export declare const WithActions: Story;
13
14
  export declare const WithActionsAndAddButton: Story;
14
15
  export declare const WithDeleteButton: Story;
@@ -1 +1 @@
1
- {"version":3,"file":"repository-node.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,KAAK,EAAE,kBAAkB,EAAsB,MAAM,0BAA0B,CAAC;AAgCvF,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,kBAAkB,CASlC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAE1C,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAK3B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAKzB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAWF,eAAO,MAAM,QAAQ,EAAE,KAwBtB,CAAC;AASF,eAAO,MAAM,kBAAkB,EAAE,KAwBhC,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAKzB,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,KAQrC,CAAC;AAIF,eAAO,MAAM,gBAAgB,EAAE,KAS9B,CAAC;AA2BF,eAAO,MAAM,mBAAmB,EAAE,KAwBjC,CAAC"}
1
+ {"version":3,"file":"repository-node.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,KAAK,EAAE,kBAAkB,EAAsB,MAAM,0BAA0B,CAAC;AAgCvF,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,kBAAkB,CASlC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAE1C,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAK3B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAKzB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAWF,eAAO,MAAM,QAAQ,EAAE,KAwBtB,CAAC;AASF,eAAO,MAAM,kBAAkB,EAAE,KAwBhC,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAS1B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAKzB,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,KAQrC,CAAC;AAIF,eAAO,MAAM,gBAAgB,EAAE,KAS9B,CAAC;AA2BF,eAAO,MAAM,mBAAmB,EAAE,KAwBjC,CAAC"}
@@ -74,6 +74,16 @@ export const MultipleWithButton = {
74
74
  return (_jsx("div", { style: { width: 500, height: 500 }, children: _jsx(ReactFlowProvider, { children: _jsx(ReactFlow, { nodes: nodes, nodeTypes: nodeTypes, nodesDraggable: false, nodesConnectable: false, proOptions: { hideAttribution: true }, fitView: true }) }) }));
75
75
  },
76
76
  };
77
+ export const WithPulseAdd = {
78
+ args: {
79
+ repositoryPath: '/home/user/shep-ai/cli',
80
+ pulseAdd: true,
81
+ },
82
+ argTypes: {
83
+ onAdd: { action: 'onAdd' },
84
+ },
85
+ render: (args) => _jsx(RepositoryNodeCanvas, { data: args }),
86
+ };
77
87
  export const WithActions = {
78
88
  args: {
79
89
  repositoryPath: '/home/user/shep-ai/cli',
@@ -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":"AAOA,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,2CAsG9B"}
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":"AASA,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,2CAiI9B"}
@@ -1,13 +1,22 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useState, useCallback } from 'react';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useState, useCallback, useEffect } from 'react';
4
4
  import { Github, Plus, TerminalSquare, Copy, Check, Loader2 } from 'lucide-react';
5
5
  import { cn } from '../../../lib/utils.js';
6
6
  import { pickFolder } from '../../common/add-repository-button/pick-folder.js';
7
- const commands = ['cd ~/my-repo', 'shep feat new "create modern, sleek dashboards"'];
7
+ import { isAgentSetupComplete } from '../../../app/actions/agent-setup-flag.js';
8
+ import { WelcomeAgentSetup } from './welcome-agent-setup.js';
9
+ const commands = ['cd ~/my-repo', 'shep feat new "sleek dashboard"'];
8
10
  export function ControlCenterEmptyState({ onRepositorySelect, className, }) {
9
11
  const [copied, setCopied] = useState(false);
10
12
  const [loading, setLoading] = useState(false);
13
+ const [agentReady, setAgentReady] = useState(false);
14
+ useEffect(() => {
15
+ isAgentSetupComplete().then((done) => {
16
+ if (done)
17
+ setAgentReady(true);
18
+ });
19
+ }, []);
11
20
  async function handlePickerClick() {
12
21
  if (loading)
13
22
  return;
@@ -27,5 +36,12 @@ export function ControlCenterEmptyState({ onRepositorySelect, className, }) {
27
36
  setCopied(true);
28
37
  setTimeout(() => setCopied(false), 2000);
29
38
  }, []);
30
- return (_jsxs("div", { "data-testid": "control-center-empty-state", className: cn('relative h-full w-full', className), children: [_jsx("div", { className: "absolute inset-0 [background-image:radial-gradient(circle,_var(--color-border)_1px,_transparent_1px)] [background-size:24px_24px]" }), _jsxs("div", { className: "absolute top-8 left-8 z-10", children: [_jsx("h1", { className: "text-4xl font-bold tracking-tight", children: "Features" }), _jsx("p", { className: "text-muted-foreground text-3xl font-light", children: "Control Center" })] }), _jsx("div", { className: "relative z-10 flex h-full items-center justify-center", children: _jsxs("div", { className: "flex max-w-lg flex-col items-center gap-6", children: [_jsxs("div", { className: "text-muted-foreground flex items-center gap-2", children: [_jsx(Github, { className: "h-4 w-4" }), _jsx("span", { className: "text-xs font-semibold tracking-widest uppercase", children: "Repositories" })] }), _jsxs("button", { type: "button", "data-testid": "empty-state-add-repository", onClick: handlePickerClick, disabled: loading, className: "border-muted-foreground/30 hover:border-primary hover:text-primary flex cursor-pointer items-center gap-3 rounded-lg border-2 border-dashed px-8 py-4 transition-colors disabled:cursor-wait disabled:opacity-60", children: [loading ? _jsx(Loader2, { className: "h-5 w-5 animate-spin" }) : _jsx(Plus, { className: "h-5 w-5" }), _jsx("span", { className: "text-sm font-medium", children: loading ? 'Opening...' : 'Add Repository' })] }), _jsxs("div", { className: "text-muted-foreground flex items-center gap-3", children: [_jsx("div", { className: "bg-border h-px w-16" }), _jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(TerminalSquare, { className: "h-3.5 w-3.5" }), _jsx("span", { className: "text-xs font-semibold tracking-widest uppercase", children: "Or start from the command line" })] }), _jsx("div", { className: "bg-border h-px w-16" })] }), _jsxs("div", { "data-testid": "cli-code-block", className: "relative w-full rounded-lg bg-zinc-900 px-5 py-4 font-mono text-sm text-zinc-100", children: [_jsx("button", { type: "button", "data-testid": "cli-code-block-copy", onClick: handleCopy, className: "absolute top-3 right-3 cursor-pointer rounded p-1.5 text-zinc-400 transition-colors hover:bg-zinc-800 hover:text-zinc-200", "aria-label": "Copy commands", children: copied ? _jsx(Check, { className: "h-4 w-4" }) : _jsx(Copy, { className: "h-4 w-4" }) }), _jsx("div", { className: "space-y-1", children: commands.map((cmd) => (_jsxs("div", { children: [_jsx("span", { className: "text-zinc-500 select-none", children: "$ " }), _jsx("span", { children: cmd })] }, cmd))) })] }), _jsx("p", { className: "text-muted-foreground text-sm", children: "Feature will appear on canvas once created" })] }) })] }));
39
+ const handleAgentSetupComplete = useCallback(() => {
40
+ setAgentReady(true);
41
+ }, []);
42
+ return (_jsxs("div", { "data-testid": "control-center-empty-state", className: cn('relative h-full w-full', className), children: [_jsx("div", { className: "absolute inset-0 [background-image:radial-gradient(circle,_var(--color-border)_1px,_transparent_1px)] [background-size:24px_24px]" }), _jsxs("div", { className: "absolute top-8 left-8 z-10", children: [_jsx("h1", { className: "text-4xl font-bold tracking-tight", children: "Features" }), _jsx("p", { className: "text-muted-foreground text-3xl font-light", children: "Control Center" })] }), _jsx("div", { className: "relative z-10 flex h-full items-center justify-center", children: _jsx("div", { className: "flex w-72 flex-col items-center gap-4", children: !agentReady ? (
43
+ /* Step 1: Agent setup */
44
+ _jsx(WelcomeAgentSetup, { onComplete: handleAgentSetupComplete })) : (
45
+ /* Step 2: Add repository (shown after agent is configured) */
46
+ _jsxs(_Fragment, { children: [_jsxs("div", { className: "text-muted-foreground flex items-center gap-2", children: [_jsx(Github, { className: "h-3.5 w-3.5" }), _jsx("span", { className: "text-[10px] font-semibold tracking-widest uppercase", children: "Repositories" })] }), _jsxs("button", { type: "button", "data-testid": "empty-state-add-repository", onClick: handlePickerClick, disabled: loading, 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:cursor-wait disabled:opacity-50", children: [loading ? (_jsx(Loader2, { className: "text-muted-foreground h-4 w-4 animate-spin" })) : (_jsx(Plus, { className: "text-muted-foreground h-4 w-4" })), _jsx("span", { className: "text-xs font-medium", children: loading ? 'Opening…' : 'Add Repository' })] }), _jsxs("div", { className: "text-muted-foreground flex items-center gap-2", children: [_jsx("div", { className: "bg-border h-px w-10" }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx(TerminalSquare, { className: "h-3 w-3" }), _jsx("span", { className: "text-[10px] font-semibold tracking-widest uppercase", children: "Or via CLI" })] }), _jsx("div", { className: "bg-border h-px w-10" })] }), _jsxs("div", { "data-testid": "cli-code-block", className: "relative w-full rounded-md bg-zinc-900 px-3 py-2 font-mono text-[11px] text-zinc-300", children: [_jsx("button", { type: "button", "data-testid": "cli-code-block-copy", onClick: handleCopy, className: "absolute top-2 right-2 cursor-pointer rounded p-1 text-zinc-500 transition-colors hover:bg-zinc-800 hover:text-zinc-300", "aria-label": "Copy commands", children: copied ? _jsx(Check, { className: "h-3 w-3" }) : _jsx(Copy, { className: "h-3 w-3" }) }), _jsx("div", { className: "space-y-0.5", children: commands.map((cmd) => (_jsxs("div", { className: "whitespace-nowrap", children: [_jsx("span", { className: "text-zinc-500 select-none", children: "$ " }), _jsx("span", { children: cmd })] }, cmd))) })] }), _jsx("p", { className: "text-muted-foreground text-[10px]", children: "Feature will appear on canvas once created" })] })) }) })] }));
31
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"control-center-inner.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-inner.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,eAAe,CAAC;AAGpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAsB5E,UAAU,uBAAuB;IAC/B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,YAAY,EAAE,IAAI,EAAE,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,uBAAuB,2CA2QzF"}
1
+ {"version":3,"file":"control-center-inner.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-inner.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,eAAe,CAAC;AAGpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAsB5E,UAAU,uBAAuB;IAC/B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,YAAY,EAAE,IAAI,EAAE,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,uBAAuB,2CA0RzF"}
@@ -190,8 +190,19 @@ export function ControlCenterInner({ initialNodes, initialEdges }) {
190
190
  handleViewportChange(viewport);
191
191
  }, [handleViewportChange]);
192
192
  const hasRepositories = nodes.some((n) => n.type === 'repositoryNode');
193
+ // Pulse the "+" button when there's a single repo with no features and the
194
+ // create-feature drawer is not open — draws attention to the next action.
195
+ const isCreateDrawerOpen = pathname.startsWith('/create');
196
+ const displayNodes = useMemo(() => {
197
+ const repoNodes = nodes.filter((n) => n.type === 'repositoryNode');
198
+ const hasFeatures = nodes.some((n) => n.type === 'featureNode');
199
+ const shouldPulse = repoNodes.length === 1 && !hasFeatures && !isCreateDrawerOpen;
200
+ if (!shouldPulse)
201
+ return nodes;
202
+ return nodes.map((n) => n.type === 'repositoryNode' ? { ...n, data: { ...n.data, pulseAdd: true } } : n);
203
+ }, [nodes, isCreateDrawerOpen]);
193
204
  if (!hasRepositories) {
194
205
  return _jsx(ControlCenterEmptyState, { onRepositorySelect: handleAddRepository });
195
206
  }
196
- return (_jsx(FeaturesCanvas, { nodes: nodes, edges: edges, selectedFeatureId: selectedFeatureId, defaultViewport: defaultViewport, onNodesChange: onNodesChange, onConnect: handleConnect, onAddFeature: handleAddFeature, onNodeClick: handleNodeClick, onPaneClick: handleClearDrawers, onMoveEnd: handleMoveEnd, onResetViewport: resetViewport, emptyState: _jsx(ControlCenterEmptyState, { onRepositorySelect: handleAddRepository }) }));
207
+ return (_jsx(FeaturesCanvas, { nodes: displayNodes, edges: edges, selectedFeatureId: selectedFeatureId, defaultViewport: defaultViewport, onNodesChange: onNodesChange, onConnect: handleConnect, onAddFeature: handleAddFeature, onNodeClick: handleNodeClick, onPaneClick: handleClearDrawers, onMoveEnd: handleMoveEnd, onResetViewport: resetViewport, emptyState: _jsx(ControlCenterEmptyState, { onRepositorySelect: handleAddRepository }) }));
197
208
  }
@@ -0,0 +1,6 @@
1
+ export interface WelcomeAgentSetupProps {
2
+ onComplete: () => void;
3
+ className?: string;
4
+ }
5
+ export declare function WelcomeAgentSetup({ onComplete, className }: WelcomeAgentSetupProps): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=welcome-agent-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"welcome-agent-setup.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/welcome-agent-setup.tsx"],"names":[],"mappings":"AA0BA,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,wBAAgB,iBAAiB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,sBAAsB,2CAoTlF"}