@shepai/cli 1.135.3 → 1.136.0-pr396.e077930

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 (341) hide show
  1. package/apis/json-schema/FeatureFlags.yaml +5 -0
  2. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +91 -5
  3. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
  4. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.js +6 -4
  5. package/dist/packages/core/src/application/use-cases/features/get-branch-sync-status.use-case.d.ts +25 -0
  6. package/dist/packages/core/src/application/use-cases/features/get-branch-sync-status.use-case.d.ts.map +1 -0
  7. package/dist/packages/core/src/application/use-cases/features/get-branch-sync-status.use-case.js +62 -0
  8. package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.d.ts +34 -0
  9. package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.d.ts.map +1 -0
  10. package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.js +139 -0
  11. package/dist/packages/core/src/application/use-cases/repositories/sync-repository-main.use-case.d.ts +16 -0
  12. package/dist/packages/core/src/application/use-cases/repositories/sync-repository-main.use-case.d.ts.map +1 -0
  13. package/dist/packages/core/src/application/use-cases/repositories/sync-repository-main.use-case.js +43 -0
  14. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  15. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +1 -0
  16. package/dist/packages/core/src/domain/generated/output.d.ts +4 -0
  17. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  18. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  19. package/dist/packages/core/src/infrastructure/di/container.js +20 -0
  20. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +1 -0
  21. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  22. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +2 -0
  23. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/042-add-feature-flag-git-rebase-sync.d.ts +11 -0
  24. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/042-add-feature-flag-git-rebase-sync.d.ts.map +1 -0
  25. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/042-add-feature-flag-git-rebase-sync.js +17 -0
  26. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
  27. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +3 -2
  28. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.d.ts +35 -0
  29. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.d.ts.map +1 -0
  30. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.js +66 -0
  31. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.d.ts +42 -0
  32. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.d.ts.map +1 -0
  33. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.js +169 -0
  34. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +10 -0
  35. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
  36. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +150 -0
  37. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.d.ts.map +1 -1
  38. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.js +5 -12
  39. package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts +2 -0
  40. package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts.map +1 -1
  41. package/dist/src/presentation/web/app/actions/check-agent-auth.js +8 -1
  42. package/dist/src/presentation/web/app/actions/check-tool-status.d.ts +14 -0
  43. package/dist/src/presentation/web/app/actions/check-tool-status.d.ts.map +1 -0
  44. package/dist/src/presentation/web/app/actions/check-tool-status.js +53 -0
  45. package/dist/src/presentation/web/app/actions/get-branch-sync-status.d.ts +11 -0
  46. package/dist/src/presentation/web/app/actions/get-branch-sync-status.d.ts.map +1 -0
  47. package/dist/src/presentation/web/app/actions/get-branch-sync-status.js +22 -0
  48. package/dist/src/presentation/web/app/actions/rebase-feature.d.ts +5 -0
  49. package/dist/src/presentation/web/app/actions/rebase-feature.d.ts.map +1 -0
  50. package/dist/src/presentation/web/app/actions/rebase-feature.js +16 -0
  51. package/dist/src/presentation/web/app/actions/sync-repository.d.ts +5 -0
  52. package/dist/src/presentation/web/app/actions/sync-repository.d.ts.map +1 -0
  53. package/dist/src/presentation/web/app/actions/sync-repository.js +16 -0
  54. package/dist/src/presentation/web/app/build-graph-nodes.d.ts.map +1 -1
  55. package/dist/src/presentation/web/app/build-graph-nodes.js +1 -9
  56. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  57. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +16 -1
  58. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.d.ts.map +1 -1
  59. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.js +4 -4
  60. package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.d.ts +4 -0
  61. package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.d.ts.map +1 -1
  62. package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.js +32 -1
  63. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map +1 -1
  64. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +1 -0
  65. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.d.ts +12 -0
  66. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.d.ts.map +1 -0
  67. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.js +13 -0
  68. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.stories.d.ts +15 -0
  69. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.stories.d.ts.map +1 -0
  70. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.stories.js +86 -0
  71. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +9 -1
  72. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -1
  73. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +2 -2
  74. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts +9 -1
  75. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts.map +1 -1
  76. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +3 -2
  77. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts +6 -0
  78. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts.map +1 -1
  79. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.js +30 -0
  80. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +17 -0
  81. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  82. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +91 -0
  83. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  84. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +54 -64
  85. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
  86. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +85 -19
  87. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.d.ts.map +1 -1
  88. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.js +3 -0
  89. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.d.ts.map +1 -1
  90. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.js +5 -3
  91. package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
  92. package/dist/src/presentation/web/components/common/repository-node/repository-node.js +7 -5
  93. package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.d.ts +4 -0
  94. package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.d.ts.map +1 -1
  95. package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.js +11 -0
  96. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts.map +1 -1
  97. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +35 -9
  98. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts +17 -1
  99. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts.map +1 -1
  100. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.js +110 -1
  101. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  102. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +1 -1
  103. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts +1 -0
  104. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts.map +1 -1
  105. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.js +443 -10
  106. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts.map +1 -1
  107. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js +3 -0
  108. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +1 -1
  109. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.js +3 -0
  110. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  111. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +5 -0
  112. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
  113. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +1 -0
  114. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
  115. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +1 -0
  116. package/dist/src/presentation/web/hooks/feature-flags-context.d.ts.map +1 -1
  117. package/dist/src/presentation/web/hooks/feature-flags-context.js +1 -0
  118. package/dist/src/presentation/web/hooks/use-branch-sync-status.d.ts +14 -0
  119. package/dist/src/presentation/web/hooks/use-branch-sync-status.d.ts.map +1 -0
  120. package/dist/src/presentation/web/hooks/use-branch-sync-status.js +67 -0
  121. package/dist/src/presentation/web/lib/feature-flags.d.ts +2 -0
  122. package/dist/src/presentation/web/lib/feature-flags.d.ts.map +1 -1
  123. package/dist/src/presentation/web/lib/feature-flags.js +5 -0
  124. package/dist/src/presentation/web/lib/layout-with-dagre.js +1 -1
  125. package/dist/tsconfig.build.tsbuildinfo +1 -1
  126. package/package.json +1 -1
  127. package/web/.next/BUILD_ID +1 -1
  128. package/web/.next/build-manifest.json +2 -2
  129. package/web/.next/fallback-build-manifest.json +2 -2
  130. package/web/.next/prerender-manifest.json +3 -3
  131. package/web/.next/required-server-files.js +3 -3
  132. package/web/.next/required-server-files.json +3 -3
  133. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +78 -48
  134. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +3 -3
  135. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  136. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  137. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +78 -48
  138. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +3 -3
  139. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  140. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  141. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +120 -60
  142. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +3 -3
  143. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  144. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  145. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +120 -60
  146. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +3 -3
  147. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  148. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  149. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +74 -44
  150. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +3 -3
  151. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  152. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  153. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +78 -48
  154. package/web/.next/server/app/(dashboard)/create/page.js +3 -3
  155. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  156. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  157. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +120 -60
  158. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +3 -3
  159. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  160. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  161. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +120 -60
  162. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +3 -3
  163. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  164. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  165. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +74 -44
  166. package/web/.next/server/app/(dashboard)/page.js +3 -3
  167. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  168. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  169. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +74 -44
  170. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +3 -3
  171. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  172. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  173. package/web/.next/server/app/_global-error.html +2 -2
  174. package/web/.next/server/app/_global-error.rsc +1 -1
  175. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  176. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  177. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  178. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  179. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  180. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +3 -3
  181. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  182. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  183. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  184. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  185. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  186. package/web/.next/server/app/settings/page/server-reference-manifest.json +8 -8
  187. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  188. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  189. package/web/.next/server/app/skills/page/server-reference-manifest.json +8 -8
  190. package/web/.next/server/app/skills/page.js +1 -1
  191. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  192. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  193. package/web/.next/server/app/tools/page/server-reference-manifest.json +8 -8
  194. package/web/.next/server/app/tools/page.js +1 -1
  195. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  196. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  197. package/web/.next/server/app/version/page/server-reference-manifest.json +3 -3
  198. package/web/.next/server/app/version/page.js.nft.json +1 -1
  199. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  200. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  201. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  202. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  203. package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js.map +1 -1
  204. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  205. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  206. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  207. package/web/.next/server/chunks/ssr/[root-of-the-server]__1626f5d7._.js +4 -0
  208. package/web/.next/server/chunks/ssr/[root-of-the-server]__1626f5d7._.js.map +1 -0
  209. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  210. package/web/.next/server/chunks/ssr/[root-of-the-server]__3ef34e4c._.js +1 -1
  211. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js +1 -1
  212. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js.map +1 -1
  213. package/web/.next/server/chunks/ssr/[root-of-the-server]__49557873._.js +4 -0
  214. package/web/.next/server/chunks/ssr/[root-of-the-server]__49557873._.js.map +1 -0
  215. package/web/.next/server/chunks/ssr/[root-of-the-server]__6ec59045._.js +3 -0
  216. package/web/.next/server/chunks/ssr/[root-of-the-server]__6ec59045._.js.map +1 -0
  217. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js +1 -1
  218. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js.map +1 -1
  219. package/web/.next/server/chunks/ssr/[root-of-the-server]__90fdc0ee._.js +4 -0
  220. package/web/.next/server/chunks/ssr/[root-of-the-server]__90fdc0ee._.js.map +1 -0
  221. package/web/.next/server/chunks/ssr/{[root-of-the-server]__96670392._.js → [root-of-the-server]__a5f9c6e5._.js} +3 -3
  222. package/web/.next/server/chunks/ssr/[root-of-the-server]__a5f9c6e5._.js.map +1 -0
  223. package/web/.next/server/chunks/ssr/[root-of-the-server]__a7259d16._.js +4 -0
  224. package/web/.next/server/chunks/ssr/[root-of-the-server]__a7259d16._.js.map +1 -0
  225. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
  226. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  227. package/web/.next/server/chunks/ssr/[root-of-the-server]__cb850066._.js +3 -0
  228. package/web/.next/server/chunks/ssr/[root-of-the-server]__cb850066._.js.map +1 -0
  229. package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js +3 -0
  230. package/web/.next/server/chunks/ssr/{[root-of-the-server]__7894f27f._.js.map → [root-of-the-server]__d48c5b11._.js.map} +1 -1
  231. package/web/.next/server/chunks/ssr/_0020fddd._.js +1 -1
  232. package/web/.next/server/chunks/ssr/_0020fddd._.js.map +1 -1
  233. package/web/.next/server/chunks/ssr/_02ec1aea._.js +1 -1
  234. package/web/.next/server/chunks/ssr/_02ec1aea._.js.map +1 -1
  235. package/web/.next/server/chunks/ssr/{_d17bc20a._.js → _13f3c0ec._.js} +2 -2
  236. package/web/.next/server/chunks/ssr/_13f3c0ec._.js.map +1 -0
  237. package/web/.next/server/chunks/ssr/_149f6559._.js +4 -0
  238. package/web/.next/server/chunks/ssr/_149f6559._.js.map +1 -0
  239. package/web/.next/server/chunks/ssr/_1a09002f._.js +4 -0
  240. package/web/.next/server/chunks/ssr/_1a09002f._.js.map +1 -0
  241. package/web/.next/server/chunks/ssr/_48a8ee28._.js +6 -0
  242. package/web/.next/server/chunks/ssr/_48a8ee28._.js.map +1 -0
  243. package/web/.next/server/chunks/ssr/_51ed80a4._.js +3 -0
  244. package/web/.next/server/chunks/ssr/_51ed80a4._.js.map +1 -0
  245. package/web/.next/server/chunks/ssr/_6e8c85b1._.js +6 -0
  246. package/web/.next/server/chunks/ssr/_6e8c85b1._.js.map +1 -0
  247. package/web/.next/server/chunks/ssr/_7dca1882._.js +1 -1
  248. package/web/.next/server/chunks/ssr/_7dca1882._.js.map +1 -1
  249. package/web/.next/server/chunks/ssr/_83220ba0._.js +4 -0
  250. package/web/.next/server/chunks/ssr/_83220ba0._.js.map +1 -0
  251. package/web/.next/server/chunks/ssr/_939287c5._.js +4 -0
  252. package/web/.next/server/chunks/ssr/_939287c5._.js.map +1 -0
  253. package/web/.next/server/chunks/ssr/_a37f5f18._.js +1 -1
  254. package/web/.next/server/chunks/ssr/_a37f5f18._.js.map +1 -1
  255. package/web/.next/server/chunks/ssr/_a9f57758._.js +1 -1
  256. package/web/.next/server/chunks/ssr/_a9f57758._.js.map +1 -1
  257. package/web/.next/server/chunks/ssr/_cfbd1d7e._.js +3 -0
  258. package/web/.next/server/chunks/ssr/_cfbd1d7e._.js.map +1 -0
  259. package/web/.next/server/chunks/ssr/_d4b20e29._.js.map +1 -1
  260. package/web/.next/server/chunks/ssr/_d8575088._.js +1 -1
  261. package/web/.next/server/chunks/ssr/_d8575088._.js.map +1 -1
  262. package/web/.next/server/chunks/ssr/_f39a1adb._.js +1 -1
  263. package/web/.next/server/chunks/ssr/_f39a1adb._.js.map +1 -1
  264. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  265. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  266. package/web/.next/server/chunks/ssr/{src_presentation_web_127fb482._.js → src_presentation_web_28f803bd._.js} +2 -2
  267. package/web/.next/server/chunks/ssr/{src_presentation_web_127fb482._.js.map → src_presentation_web_28f803bd._.js.map} +1 -1
  268. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js +1 -1
  269. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js.map +1 -1
  270. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js +1 -1
  271. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js.map +1 -1
  272. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +3 -0
  273. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +1 -0
  274. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  275. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  276. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  277. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  278. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  279. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  280. package/web/.next/server/pages/500.html +2 -2
  281. package/web/.next/server/server-reference-manifest.js +1 -1
  282. package/web/.next/server/server-reference-manifest.json +524 -296
  283. package/web/.next/static/chunks/031e65a4305571f7.js +1 -0
  284. package/web/.next/static/chunks/{fdc719494dcd9c92.js → 132d824e337f12fe.js} +2 -2
  285. package/web/.next/static/chunks/{8c42b7752187f48c.js → 20a66a7159b97299.js} +2 -2
  286. package/web/.next/static/chunks/{d8a0dd9bfd0f22fa.js → 4148e7a319ea7ec4.js} +1 -1
  287. package/web/.next/static/chunks/{9154973d61eae190.js → 5f67ffe1879b8536.js} +1 -1
  288. package/web/.next/static/chunks/6a370f2709c81d83.js +1 -0
  289. package/web/.next/static/chunks/6bfc9e17e141ac36.js +1 -0
  290. package/web/.next/static/chunks/9db1dd8ad063626c.js +1 -0
  291. package/web/.next/static/chunks/{61f7d4f0f0f770a4.js → aa2236a4b7c3bd45.js} +1 -1
  292. package/web/.next/static/chunks/ab3afb0b942c1eb2.css +1 -0
  293. package/web/.next/static/chunks/b3cc94a1e319bee8.js +1 -0
  294. package/web/.next/static/chunks/{d5342f9be437afd9.js → ed248df9e975fd1f.js} +1 -1
  295. package/web/.next/static/chunks/{1a9dfc34432387f5.js → eeec829933170d8a.js} +1 -1
  296. package/web/.next/static/chunks/{7875a9370622a064.js → f010c3293515ab73.js} +1 -1
  297. package/web/.next/static/chunks/{0b7fe2ac4f078f54.js → f070c67389a686ff.js} +1 -1
  298. package/web/.next/static/chunks/f66c996402a430f5.js +1 -0
  299. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4e741df2.js +0 -3
  300. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4e741df2.js.map +0 -1
  301. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_026fdffa.js +0 -3
  302. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_026fdffa.js.map +0 -1
  303. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_8b91e197.js +0 -3
  304. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_8b91e197.js.map +0 -1
  305. package/web/.next/server/chunks/ssr/[root-of-the-server]__31bc28da._.js +0 -3
  306. package/web/.next/server/chunks/ssr/[root-of-the-server]__31bc28da._.js.map +0 -1
  307. package/web/.next/server/chunks/ssr/[root-of-the-server]__32ecbed9._.js +0 -3
  308. package/web/.next/server/chunks/ssr/[root-of-the-server]__32ecbed9._.js.map +0 -1
  309. package/web/.next/server/chunks/ssr/[root-of-the-server]__7894f27f._.js +0 -3
  310. package/web/.next/server/chunks/ssr/[root-of-the-server]__90ce4b6d._.js +0 -3
  311. package/web/.next/server/chunks/ssr/[root-of-the-server]__90ce4b6d._.js.map +0 -1
  312. package/web/.next/server/chunks/ssr/[root-of-the-server]__90f9ae71._.js +0 -3
  313. package/web/.next/server/chunks/ssr/[root-of-the-server]__90f9ae71._.js.map +0 -1
  314. package/web/.next/server/chunks/ssr/[root-of-the-server]__96670392._.js.map +0 -1
  315. package/web/.next/server/chunks/ssr/[root-of-the-server]__9c45d070._.js +0 -3
  316. package/web/.next/server/chunks/ssr/[root-of-the-server]__9c45d070._.js.map +0 -1
  317. package/web/.next/server/chunks/ssr/[root-of-the-server]__b3dbadca._.js +0 -3
  318. package/web/.next/server/chunks/ssr/[root-of-the-server]__b3dbadca._.js.map +0 -1
  319. package/web/.next/server/chunks/ssr/_313c9690._.js +0 -3
  320. package/web/.next/server/chunks/ssr/_313c9690._.js.map +0 -1
  321. package/web/.next/server/chunks/ssr/_b6960ca0._.js +0 -4
  322. package/web/.next/server/chunks/ssr/_b6960ca0._.js.map +0 -1
  323. package/web/.next/server/chunks/ssr/_d17bc20a._.js.map +0 -1
  324. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +0 -3
  325. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +0 -1
  326. package/web/.next/server/chunks/ssr/src_presentation_web_8e7fe0d1._.js +0 -5
  327. package/web/.next/server/chunks/ssr/src_presentation_web_8e7fe0d1._.js.map +0 -1
  328. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_ca051134.js +0 -3
  329. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_ca051134.js.map +0 -1
  330. package/web/.next/server/chunks/ssr/src_presentation_web_b9023017._.js +0 -5
  331. package/web/.next/server/chunks/ssr/src_presentation_web_b9023017._.js.map +0 -1
  332. package/web/.next/static/chunks/15e6a74ef39fda73.js +0 -1
  333. package/web/.next/static/chunks/314b8314f77d6921.js +0 -1
  334. package/web/.next/static/chunks/3e2d7d07926b05bf.css +0 -1
  335. package/web/.next/static/chunks/55a1c86671bb1a5b.js +0 -1
  336. package/web/.next/static/chunks/c0c287da1631752f.js +0 -1
  337. package/web/.next/static/chunks/e6b87832e1382949.js +0 -1
  338. package/web/.next/static/chunks/eb9841ec4d80af01.js +0 -1
  339. /package/web/.next/static/{p0KCxpQ0DqKcttVypdnix → 8o0yazCw1kyy56LNhgtTp}/_buildManifest.js +0 -0
  340. /package/web/.next/static/{p0KCxpQ0DqKcttVypdnix → 8o0yazCw1kyy56LNhgtTp}/_clientMiddlewareManifest.json +0 -0
  341. /package/web/.next/static/{p0KCxpQ0DqKcttVypdnix → 8o0yazCw1kyy56LNhgtTp}/_ssgManifest.js +0 -0
@@ -3,22 +3,27 @@ import { useState, useCallback, useRef, useEffect } from 'react';
3
3
  import { openIde } from '../../../app/actions/open-ide.js';
4
4
  import { openShell } from '../../../app/actions/open-shell.js';
5
5
  import { openFolder } from '../../../app/actions/open-folder.js';
6
+ import { syncRepository } from '../../../app/actions/sync-repository.js';
6
7
  const ERROR_CLEAR_DELAY = 5000;
7
8
  export function useRepositoryActions(input) {
8
9
  const [ideLoading, setIdeLoading] = useState(false);
9
10
  const [shellLoading, setShellLoading] = useState(false);
10
11
  const [folderLoading, setFolderLoading] = useState(false);
12
+ const [syncLoading, setSyncLoading] = useState(false);
11
13
  const [ideError, setIdeError] = useState(null);
12
14
  const [shellError, setShellError] = useState(null);
13
15
  const [folderError, setFolderError] = useState(null);
16
+ const [syncError, setSyncError] = useState(null);
14
17
  const ideTimerRef = useRef(null);
15
18
  const shellTimerRef = useRef(null);
16
19
  const folderTimerRef = useRef(null);
20
+ const syncTimerRef = useRef(null);
17
21
  // Clear timers on unmount
18
22
  useEffect(() => {
19
23
  const ideRef = ideTimerRef;
20
24
  const shellRef = shellTimerRef;
21
25
  const folderRef = folderTimerRef;
26
+ const syncRef = syncTimerRef;
22
27
  return () => {
23
28
  if (ideRef.current)
24
29
  clearTimeout(ideRef.current);
@@ -26,6 +31,8 @@ export function useRepositoryActions(input) {
26
31
  clearTimeout(shellRef.current);
27
32
  if (folderRef.current)
28
33
  clearTimeout(folderRef.current);
34
+ if (syncRef.current)
35
+ clearTimeout(syncRef.current);
29
36
  };
30
37
  }, []);
31
38
  const performAction = useCallback(async (action, setLoading, setError, timerRef, isLoading) => {
@@ -55,15 +62,19 @@ export function useRepositoryActions(input) {
55
62
  const handleOpenIde = useCallback(() => performAction(() => openIde({ repositoryPath: input.repositoryPath }), setIdeLoading, setIdeError, ideTimerRef, ideLoading), [performAction, ideLoading, input]);
56
63
  const handleOpenShell = useCallback(() => performAction(() => openShell({ repositoryPath: input.repositoryPath }), setShellLoading, setShellError, shellTimerRef, shellLoading), [performAction, shellLoading, input]);
57
64
  const handleOpenFolder = useCallback(() => performAction(() => openFolder(input.repositoryPath), setFolderLoading, setFolderError, folderTimerRef, folderLoading), [performAction, folderLoading, input]);
65
+ const handleSyncMain = useCallback(() => performAction(() => syncRepository(input.repositoryId ?? ''), setSyncLoading, setSyncError, syncTimerRef, syncLoading), [performAction, syncLoading, input]);
58
66
  return {
59
67
  openInIde: handleOpenIde,
60
68
  openInShell: handleOpenShell,
61
69
  openFolder: handleOpenFolder,
70
+ syncMain: handleSyncMain,
62
71
  ideLoading,
63
72
  shellLoading,
64
73
  folderLoading,
74
+ syncLoading,
65
75
  ideError,
66
76
  shellError,
67
77
  folderError,
78
+ syncError,
68
79
  };
69
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"control-center-empty-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-empty-state.tsx"],"names":[],"mappings":"AAsBA,MAAM,WAAW,4BAA4B;IAC3C,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,uBAAuB,CAAC,EACtC,kBAAkB,EAClB,SAAS,GACV,EAAE,4BAA4B,kDAuL9B"}
1
+ {"version":3,"file":"control-center-empty-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-empty-state.tsx"],"names":[],"mappings":"AAyBA,MAAM,WAAW,4BAA4B;IAC3C,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,uBAAuB,CAAC,EACtC,kBAAkB,EAClB,SAAS,GACV,EAAE,4BAA4B,kDAmM9B"}
@@ -1,13 +1,14 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useState, useCallback, useEffect } from 'react';
4
- import { FolderOpen, Copy, Check, Loader2, CheckCircle2, AlertCircle, Terminal, ChevronDown, } from 'lucide-react';
4
+ import { FolderOpen, Copy, Check, Loader2, CheckCircle2, AlertCircle, Terminal, ChevronDown, ExternalLink, } from 'lucide-react';
5
5
  import { cn } from '../../../lib/utils.js';
6
6
  import { pickFolder } from '../../common/add-repository-button/pick-folder.js';
7
7
  import { ReactFileManagerDialog } from '../../common/react-file-manager-dialog/index.js';
8
8
  import { useFeatureFlags } from '../../../hooks/feature-flags-context.js';
9
9
  import { isAgentSetupComplete } from '../../../app/actions/agent-setup-flag.js';
10
10
  import { checkAgentAuth } from '../../../app/actions/check-agent-auth.js';
11
+ import { checkToolStatus } from '../../../app/actions/check-tool-status.js';
11
12
  import { WelcomeAgentSetup } from './welcome-agent-setup.js';
12
13
  const commands = ['cd ~/my-repo', 'shep feat new "sleek dashboard"'];
13
14
  export function ControlCenterEmptyState({ onRepositorySelect, className, }) {
@@ -17,6 +18,7 @@ export function ControlCenterEmptyState({ onRepositorySelect, className, }) {
17
18
  const [agentReady, setAgentReady] = useState(null);
18
19
  const [authStatus, setAuthStatus] = useState(null);
19
20
  const [cliExpanded, setCliExpanded] = useState(false);
21
+ const [toolStatus, setToolStatus] = useState(null);
20
22
  const { reactFileManager: useReactFileManager } = useFeatureFlags();
21
23
  useEffect(() => {
22
24
  isAgentSetupComplete().then((done) => {
@@ -27,6 +29,7 @@ export function ControlCenterEmptyState({ onRepositorySelect, className, }) {
27
29
  if (!agentReady)
28
30
  return;
29
31
  checkAgentAuth().then(setAuthStatus);
32
+ checkToolStatus().then(setToolStatus);
30
33
  }, [agentReady]);
31
34
  async function handlePickerClick() {
32
35
  if (loading)
@@ -74,7 +77,7 @@ export function ControlCenterEmptyState({ onRepositorySelect, className, }) {
74
77
  /* Agent setup wizard — owns its own hero */
75
78
  _jsx(WelcomeAgentSetup, { onComplete: handleAgentSetupComplete })) : (
76
79
  /* Repository step — fade in to match wizard transitions */
77
- _jsxs("div", { className: "animate-in fade-in flex w-full max-w-md flex-col items-center duration-300", children: [_jsx("h1", { className: "text-foreground/90 text-center text-5xl font-extralight tracking-tight", children: "Add a project" }), _jsxs("p", { className: "text-muted-foreground mt-3 text-center text-lg leading-relaxed font-light", children: ["Add your project folder to unlock feature creation.", _jsx("br", {}), "Describe what you need \u2014 Shep handles the rest."] }), _jsx("div", { className: "mt-8", children: _jsx(AgentAuthBanner, { status: authStatus, onRetry: handleRetryAuth }) }), _jsxs("button", { type: "button", "data-testid": "empty-state-add-repository", onClick: handlePickerClick, disabled: loading, className: "bg-foreground text-background hover:bg-foreground/90 mt-10 flex w-full cursor-pointer items-center justify-center gap-2.5 rounded-xl px-6 py-4 text-base font-medium shadow-lg transition-all duration-200 hover:shadow-xl active:scale-[0.98] disabled:cursor-wait disabled:opacity-50", children: [loading ? (_jsx(Loader2, { className: "h-5 w-5 animate-spin" })) : (_jsx(FolderOpen, { className: "h-5 w-5" })), loading ? 'Opening…' : 'Choose a Folder'] }), _jsx("p", { className: "text-muted-foreground/60 mt-3 text-center text-sm", children: "Any folder works \u2014 git will be initialized automatically if needed." })] })), agentReady ? (_jsxs("div", { className: "absolute bottom-8 flex flex-col items-center", style: {
80
+ _jsxs("div", { className: "animate-in fade-in flex w-full max-w-md flex-col items-center duration-300", children: [_jsx("h1", { className: "text-foreground/90 text-center text-5xl font-extralight tracking-tight", children: "Add a project" }), _jsxs("p", { className: "text-muted-foreground mt-3 text-center text-lg leading-relaxed font-light", children: ["Add your project folder to unlock feature creation.", _jsx("br", {}), "Describe what you need \u2014 Shep handles the rest."] }), _jsxs("div", { className: "mt-8 flex w-full flex-col gap-3", children: [_jsx(AgentAuthBanner, { status: authStatus, onRetry: handleRetryAuth }), _jsx(ToolStatusRow, { label: "Git", status: toolStatus?.git ?? null, missingHint: "Required for all phases" }), _jsx(ToolStatusRow, { label: "GitHub CLI", status: toolStatus?.gh ?? null, missingHint: "Required for pull requests" })] }), _jsxs("button", { type: "button", "data-testid": "empty-state-add-repository", onClick: handlePickerClick, disabled: loading, className: "bg-foreground text-background hover:bg-foreground/90 mt-10 flex w-full cursor-pointer items-center justify-center gap-2.5 rounded-xl px-6 py-4 text-base font-medium shadow-lg transition-all duration-200 hover:shadow-xl active:scale-[0.98] disabled:cursor-wait disabled:opacity-50", children: [loading ? (_jsx(Loader2, { className: "h-5 w-5 animate-spin" })) : (_jsx(FolderOpen, { className: "h-5 w-5" })), loading ? 'Opening…' : 'Choose a Folder'] }), _jsx("p", { className: "text-muted-foreground/60 mt-3 text-center text-sm", children: "Any folder works \u2014 git will be initialized automatically if needed." })] })), agentReady ? (_jsxs("div", { className: "absolute bottom-8 flex flex-col items-center", style: {
78
81
  animationDelay: '400ms',
79
82
  animationDuration: '600ms',
80
83
  animationFillMode: 'both',
@@ -83,24 +86,47 @@ export function ControlCenterEmptyState({ onRepositorySelect, className, }) {
83
86
  setShowReactPicker(false);
84
87
  }, onSelect: handleReactPickerSelect })] }));
85
88
  }
86
- /** Inline status pill minimal, no background box */
89
+ /** Status row for the AI agent (Claude Code, etc.) */
87
90
  function AgentAuthBanner({ status, onRetry, }) {
88
91
  if (!status) {
89
- return (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Loader2, { className: "text-muted-foreground/50 h-3.5 w-3.5 animate-spin" }), _jsx("span", { className: "text-muted-foreground/50 text-sm", children: "Checking setup\u2026" })] }));
92
+ return (_jsx(ChecklistRow, { icon: _jsx(Loader2, { className: "text-muted-foreground/50 h-4 w-4 animate-spin" }), children: _jsx("span", { className: "text-muted-foreground/50 text-sm", children: "Checking setup\u2026" }) }));
90
93
  }
91
94
  if (status.installed && status.authenticated) {
92
- return (_jsxs("div", { className: "animate-in fade-in flex items-center gap-2", children: [_jsx(CheckCircle2, { className: "h-4 w-4 text-emerald-500" }), _jsxs("span", { className: "text-sm text-emerald-600 dark:text-emerald-400", children: [status.label, " ready"] })] }));
95
+ return (_jsx(ChecklistRow, { icon: _jsx(CheckCircle2, { className: "h-4 w-4 text-emerald-500" }), children: _jsxs("span", { className: "text-sm text-emerald-600 dark:text-emerald-400", children: [status.label, " ready"] }) }));
93
96
  }
94
97
  if (!status.installed) {
95
- return (_jsxs("div", { className: "flex flex-col items-center gap-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(AlertCircle, { className: "h-4 w-4 text-amber-500" }), _jsxs("span", { className: "text-sm font-medium text-amber-600 dark:text-amber-400", children: [status.label, " not installed"] })] }), status.binaryName ? (_jsxs("code", { className: "rounded-lg bg-zinc-100 px-3 py-1.5 text-xs text-zinc-600 dark:bg-zinc-800 dark:text-zinc-400", children: ["npm install -g ", status.binaryName] })) : null, _jsx("button", { type: "button", onClick: onRetry, className: "text-xs text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400", children: "Re-check" })] }));
98
+ return (_jsxs(ChecklistRow, { icon: _jsx(AlertCircle, { className: "h-4 w-4 text-amber-500" }), children: [_jsxs("span", { className: "text-sm font-medium text-amber-600 dark:text-amber-400", children: [status.label, " not installed"] }), status.installCommand ? _jsx(CopyableCommand, { command: status.installCommand }) : null, _jsx("button", { type: "button", onClick: onRetry, className: "text-xs text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400", children: "Re-check" })] }));
96
99
  }
97
- return (_jsxs("div", { className: "flex flex-col items-center gap-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(AlertCircle, { className: "h-4 w-4 text-amber-500" }), _jsxs("span", { className: "text-sm font-medium text-amber-600 dark:text-amber-400", children: [status.label, " needs authentication"] })] }), status.authCommand ? (_jsx("code", { className: "rounded-lg bg-zinc-100 px-3 py-1.5 text-xs text-zinc-600 dark:bg-zinc-800 dark:text-zinc-400", children: status.authCommand })) : null, _jsxs("div", { className: "flex items-center gap-3", children: [status.binaryName ? (_jsxs("button", { type: "button", "data-testid": "auth-banner-open-terminal", onClick: async () => {
100
+ return (_jsxs(ChecklistRow, { icon: _jsx(AlertCircle, { className: "h-4 w-4 text-amber-500" }), children: [_jsxs("span", { className: "text-sm font-medium text-amber-600 dark:text-amber-400", children: [status.label, " needs authentication"] }), status.authCommand ? _jsx(CopyableCommand, { command: status.authCommand }) : null, _jsxs("div", { className: "flex items-center gap-3", children: [status.binaryName ? (_jsxs("button", { type: "button", "data-testid": "auth-banner-open-terminal", onClick: async () => {
98
101
  try {
99
102
  const toolId = status.agentType === 'claude-code' ? 'claude-code' : status.agentType;
100
103
  await fetch(`/api/tools/${toolId}/launch`, { method: 'POST' });
101
104
  }
102
105
  catch {
103
- // best effort
106
+ /* best effort */
104
107
  }
105
- }, className: "flex items-center gap-1.5 text-xs font-medium text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400", children: [_jsx(Terminal, { className: "h-3 w-3" }), "Open ", status.label] })) : null, _jsx("button", { type: "button", onClick: onRetry, className: "text-xs text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400", children: "Re-check" })] })] }));
108
+ }, className: "flex items-center gap-1 text-xs font-medium text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400", children: [_jsx(Terminal, { className: "h-3 w-3" }), "Open ", status.label] })) : null, _jsx("button", { type: "button", onClick: onRetry, className: "text-xs text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400", children: "Re-check" })] })] }));
109
+ }
110
+ /** Status row for system tools (git, gh) */
111
+ function ToolStatusRow({ label, status, missingHint, }) {
112
+ if (!status) {
113
+ return (_jsx(ChecklistRow, { icon: _jsx(Loader2, { className: "text-muted-foreground/50 h-4 w-4 animate-spin" }), children: _jsxs("span", { className: "text-muted-foreground/50 text-sm", children: ["Checking ", label, "\u2026"] }) }));
114
+ }
115
+ if (status.installed) {
116
+ return (_jsx(ChecklistRow, { icon: _jsx(CheckCircle2, { className: "h-4 w-4 text-emerald-500" }), children: _jsxs("span", { className: "flex items-baseline gap-2", children: [_jsxs("span", { className: "text-sm text-emerald-600 dark:text-emerald-400", children: [label, " ready"] }), status.version ? (_jsxs("span", { className: "text-muted-foreground/40 text-xs", children: ["v", status.version] })) : null] }) }));
117
+ }
118
+ return (_jsxs(ChecklistRow, { icon: _jsx(AlertCircle, { className: "h-4 w-4 text-amber-500" }), children: [_jsxs("span", { className: "text-sm font-medium text-amber-600 dark:text-amber-400", children: [label, " not found"] }), _jsx("span", { className: "text-muted-foreground/50 text-xs", children: missingHint }), status.installCommand ? _jsx(CopyableCommand, { command: status.installCommand }) : null, status.installUrl ? (_jsxs("a", { href: status.installUrl, target: "_blank", rel: "noopener noreferrer", className: "inline-flex items-center gap-1 text-xs text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400", children: ["Docs ", _jsx(ExternalLink, { className: "h-3 w-3" })] })) : null] }));
119
+ }
120
+ /** Checklist row: icon pinned left, children stacked vertically and fill width */
121
+ function ChecklistRow({ icon, children }) {
122
+ return (_jsxs("div", { className: "animate-in fade-in flex items-start gap-2.5", children: [_jsx("div", { className: "mt-0.5 shrink-0", children: icon }), _jsx("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: children })] }));
123
+ }
124
+ /** Compact copyable command block — fills available row width */
125
+ function CopyableCommand({ command }) {
126
+ const [copied, setCopied] = useState(false);
127
+ return (_jsxs("button", { type: "button", onClick: async () => {
128
+ await navigator.clipboard.writeText(command);
129
+ setCopied(true);
130
+ setTimeout(() => setCopied(false), 2000);
131
+ }, className: "group/cmd flex cursor-pointer items-center justify-between gap-2 rounded-md bg-zinc-100 py-1 pr-2 pl-2.5 text-left transition-colors hover:bg-zinc-200 dark:bg-zinc-800 dark:hover:bg-zinc-700", children: [_jsx("code", { className: "min-w-0 truncate text-[11px] leading-relaxed text-zinc-600 dark:text-zinc-300", children: command }), copied ? (_jsx(Check, { className: "h-3 w-3 shrink-0 text-emerald-500" })) : (_jsx(Copy, { className: "h-3 w-3 shrink-0 text-zinc-400 opacity-0 transition-opacity group-hover/cmd:opacity-100" }))] }));
106
132
  }
@@ -3,6 +3,22 @@ import { ControlCenterEmptyState } from './control-center-empty-state.js';
3
3
  declare const meta: Meta<typeof ControlCenterEmptyState>;
4
4
  export default meta;
5
5
  type Story = StoryObj<typeof meta>;
6
- export declare const Default: Story;
6
+ /** All tools installed — the happy path */
7
+ export declare const AllToolsReady: Story;
8
+ /** Git is missing — blocks all workflow phases */
9
+ export declare const GitMissing: Story;
10
+ /** GitHub CLI is missing — PR features unavailable */
11
+ export declare const GhCliMissing: Story;
12
+ /** Both git and gh are missing */
13
+ export declare const BothToolsMissing: Story;
14
+ /** Claude Code not installed */
15
+ export declare const ClaudeCodeNotInstalled: Story;
16
+ /** Cursor CLI not installed */
17
+ export declare const CursorCliNotInstalled: Story;
18
+ /** Gemini CLI not installed */
19
+ export declare const GeminiCliNotInstalled: Story;
20
+ /** Agent not installed + tools missing — worst case */
21
+ export declare const EverythingMissing: Story;
22
+ /** With callback — for interaction testing */
7
23
  export declare const WithCallback: Story;
8
24
  //# sourceMappingURL=control-center-empty-state.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"control-center-empty-state.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-empty-state.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,uBAAuB,CAc9C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAO1B,CAAC"}
1
+ {"version":3,"file":"control-center-empty-state.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-empty-state.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,uBAAuB,CAc9C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AA+FnC,2CAA2C;AAC3C,eAAO,MAAM,aAAa,EAAE,KAG3B,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,UAAU,EAAE,KAGxB,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,YAAY,EAAE,KAG1B,CAAC;AAEF,kCAAkC;AAClC,eAAO,MAAM,gBAAgB,EAAE,KAG9B,CAAC;AAEF,gCAAgC;AAChC,eAAO,MAAM,sBAAsB,EAAE,KAGpC,CAAC;AAEF,+BAA+B;AAC/B,eAAO,MAAM,qBAAqB,EAAE,KAGnC,CAAC;AAEF,+BAA+B;AAC/B,eAAO,MAAM,qBAAqB,EAAE,KAGnC,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,iBAAiB,EAAE,KAG/B,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,YAAY,EAAE,KAO1B,CAAC"}
@@ -12,9 +12,118 @@ const meta = {
12
12
  ],
13
13
  };
14
14
  export default meta;
15
- export const Default = {
15
+ const agentReady = {
16
+ agentType: 'claude-code',
17
+ installed: true,
18
+ authenticated: true,
19
+ label: 'Claude Code',
20
+ binaryName: 'claude',
21
+ installCommand: 'curl -fsSL https://claude.ai/install.sh | bash',
22
+ authCommand: null,
23
+ };
24
+ const claudeNotInstalled = {
25
+ agentType: 'claude-code',
26
+ installed: false,
27
+ authenticated: false,
28
+ label: 'Claude Code',
29
+ binaryName: 'claude',
30
+ installCommand: 'curl -fsSL https://claude.ai/install.sh | bash',
31
+ authCommand: 'Install Claude Code first',
32
+ };
33
+ const cursorNotInstalled = {
34
+ agentType: 'cursor',
35
+ installed: false,
36
+ authenticated: false,
37
+ label: 'Cursor CLI',
38
+ binaryName: 'cursor-agent',
39
+ installCommand: 'curl https://cursor.com/install -fsS | bash',
40
+ authCommand: 'Install Cursor CLI first',
41
+ };
42
+ const geminiNotInstalled = {
43
+ agentType: 'gemini-cli',
44
+ installed: false,
45
+ authenticated: false,
46
+ label: 'Gemini CLI',
47
+ binaryName: 'gemini',
48
+ installCommand: 'npm install -g @google/gemini-cli',
49
+ authCommand: 'Install Gemini CLI first',
50
+ };
51
+ const gitReady = {
52
+ installed: true,
53
+ version: '2.43.0',
54
+ installCommand: 'sudo apt-get install -y git',
55
+ installUrl: 'https://git-scm.com',
56
+ };
57
+ const gitMissing = {
58
+ installed: false,
59
+ version: null,
60
+ installCommand: 'sudo apt-get install -y git',
61
+ installUrl: 'https://git-scm.com',
62
+ };
63
+ const ghReady = {
64
+ installed: true,
65
+ version: '2.40.1',
66
+ installCommand: 'sudo apt install gh -y',
67
+ installUrl: 'https://cli.github.com',
68
+ };
69
+ const ghMissing = {
70
+ installed: false,
71
+ version: null,
72
+ installCommand: 'sudo apt install gh -y',
73
+ installUrl: 'https://cli.github.com',
74
+ };
75
+ function setMocks(agent, git, gh) {
76
+ return () => {
77
+ const win = globalThis;
78
+ win.__mockAgentAuth = agent;
79
+ win.__mockToolStatus = { git, gh };
80
+ return () => {
81
+ delete win.__mockAgentAuth;
82
+ delete win.__mockToolStatus;
83
+ };
84
+ };
85
+ }
86
+ /** All tools installed — the happy path */
87
+ export const AllToolsReady = {
88
+ args: {},
89
+ beforeEach: setMocks(agentReady, gitReady, ghReady),
90
+ };
91
+ /** Git is missing — blocks all workflow phases */
92
+ export const GitMissing = {
93
+ args: {},
94
+ beforeEach: setMocks(agentReady, gitMissing, ghReady),
95
+ };
96
+ /** GitHub CLI is missing — PR features unavailable */
97
+ export const GhCliMissing = {
98
+ args: {},
99
+ beforeEach: setMocks(agentReady, gitReady, ghMissing),
100
+ };
101
+ /** Both git and gh are missing */
102
+ export const BothToolsMissing = {
103
+ args: {},
104
+ beforeEach: setMocks(agentReady, gitMissing, ghMissing),
105
+ };
106
+ /** Claude Code not installed */
107
+ export const ClaudeCodeNotInstalled = {
108
+ args: {},
109
+ beforeEach: setMocks(claudeNotInstalled, gitReady, ghReady),
110
+ };
111
+ /** Cursor CLI not installed */
112
+ export const CursorCliNotInstalled = {
113
+ args: {},
114
+ beforeEach: setMocks(cursorNotInstalled, gitReady, ghReady),
115
+ };
116
+ /** Gemini CLI not installed */
117
+ export const GeminiCliNotInstalled = {
118
+ args: {},
119
+ beforeEach: setMocks(geminiNotInstalled, gitReady, ghReady),
120
+ };
121
+ /** Agent not installed + tools missing — worst case */
122
+ export const EverythingMissing = {
16
123
  args: {},
124
+ beforeEach: setMocks(claudeNotInstalled, gitMissing, ghMissing),
17
125
  };
126
+ /** With callback — for interaction testing */
18
127
  export const WithCallback = {
19
128
  args: {
20
129
  onRepositorySelect: (path) => {
@@ -1 +1 @@
1
- {"version":3,"file":"features-canvas.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/features-canvas/features-canvas.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMvF,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,kCAAkC,CAAC;AAEzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAG9E,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAElE,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,eAAe,CAAC,EAAE,QAAQ,CAAC;IAC3B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,KAAK,IAAI,CAAC;IAChE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACtE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAChD,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAC7C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,QAAQ,CAAC;IACjC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAmBD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,KAAK,EACL,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,YAAY,EACZ,SAAS,EACT,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,eAAe,EACf,OAAO,EACP,UAAU,GACX,EAAE,mBAAmB,2CA2HrB"}
1
+ {"version":3,"file":"features-canvas.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/features-canvas/features-canvas.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMvF,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,kCAAkC,CAAC;AAEzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAG9E,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAElE,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,eAAe,CAAC,EAAE,QAAQ,CAAC;IAC3B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,KAAK,IAAI,CAAC;IAChE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACtE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAChD,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAC7C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,QAAQ,CAAC;IACjC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAmBD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,KAAK,EACL,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,YAAY,EACZ,SAAS,EACT,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,eAAe,EACf,OAAO,EACP,UAAU,GACX,EAAE,mBAAmB,2CA4HrB"}
@@ -60,5 +60,5 @@ export function FeaturesCanvas({ nodes, edges, selectedFeatureId, defaultViewpor
60
60
  }, [isEmpty]);
61
61
  const fallbackEmptyState = isEmpty && !emptyState ? (_jsx(EmptyState, { title: "No features yet", description: "Get started by creating your first feature.", action: _jsxs(Button, { onClick: onAddFeature, children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), "New Feature"] }) })) : null;
62
62
  const overlayContent = emptyState ?? fallbackEmptyState;
63
- return (_jsxs("div", { "data-testid": isEmpty ? 'features-canvas-empty' : 'features-canvas', "data-no-drawer-close": true, className: "dark:bg-background pointer-events-auto relative h-full w-full bg-[#f6f7f8]", children: [_jsxs(ReactFlow, { nodes: enrichedNodes, edges: edges, nodeTypes: nodeTypes, edgeTypes: edgeTypes, onConnect: onConnect, onNodesChange: onNodesChange, onNodeClick: onNodeClick, onPaneClick: onPaneClick, onMoveStart: onCanvasDrag, onMoveEnd: onMoveEnd, defaultViewport: defaultViewport ?? FALLBACK_VIEWPORT, nodesDraggable: false, nodesConnectable: false, elementsSelectable: false, proOptions: { hideAttribution: true }, children: [_jsx(Background, { variant: BackgroundVariant.Dots, gap: 24, size: 1, color: "#b8bcc4", className: "dark:[&_circle]:!fill-white/[0.1]" }), !isEmpty && (_jsx(Controls, { showInteractive: false, children: onResetViewport ? _jsx(ResetButton, { onResetViewport: onResetViewport }) : null })), toolbar] }), showOverlay && overlayContent ? (_jsx("div", { className: cn('pointer-events-none absolute inset-0 z-10 flex items-center justify-center transition-opacity duration-300', overlayExiting ? 'opacity-0' : 'animate-in fade-in opacity-100 duration-200'), children: _jsx("div", { className: "pointer-events-auto h-full w-full", children: overlayContent }) })) : null] }));
63
+ return (_jsxs("div", { "data-testid": isEmpty ? 'features-canvas-empty' : 'features-canvas', "data-no-drawer-close": true, className: "dark:bg-background pointer-events-auto relative h-full w-full bg-[#f6f7f8]", children: [_jsxs(ReactFlow, { nodes: enrichedNodes, edges: edges, nodeTypes: nodeTypes, edgeTypes: edgeTypes, onConnect: onConnect, onNodesChange: onNodesChange, onNodeClick: onNodeClick, onPaneClick: onPaneClick, onMoveStart: onCanvasDrag, onMoveEnd: onMoveEnd, defaultViewport: defaultViewport ?? FALLBACK_VIEWPORT, nodesDraggable: false, nodesConnectable: false, elementsSelectable: false, proOptions: { hideAttribution: true }, className: "[&_.react-flow__pane]:!cursor-default", children: [_jsx(Background, { variant: BackgroundVariant.Dots, gap: 24, size: 1, color: "#b8bcc4", className: "dark:[&_circle]:!fill-white/[0.1]" }), !isEmpty && (_jsx(Controls, { showInteractive: false, children: onResetViewport ? _jsx(ResetButton, { onResetViewport: onResetViewport }) : null })), toolbar] }), showOverlay && overlayContent ? (_jsx("div", { className: cn('pointer-events-none absolute inset-0 z-10 flex items-center justify-center transition-opacity duration-300', overlayExiting ? 'opacity-0' : 'animate-in fade-in opacity-100 duration-200'), children: _jsx("div", { className: "pointer-events-auto h-full w-full", children: overlayContent }) })) : null] }));
64
64
  }
@@ -17,4 +17,5 @@ export declare const InteractiveWithRepository: Story;
17
17
  export declare const WithSavedViewport: Story;
18
18
  export declare const ZoomedOutViewport: Story;
19
19
  export declare const FastModeFeatures: Story;
20
+ export declare const FullSpectrum: Story;
20
21
  //# sourceMappingURL=features-canvas.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"features-canvas.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/features-canvas/features-canvas.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOnD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,cAAc,CAcrC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAwKnC,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAKxB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAK3B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAK5B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KASzB,CAAC;AAoDF,eAAO,MAAM,mCAAmC,EAAE,KAKjD,CAAC;AA4BF,eAAO,MAAM,gCAAgC,EAAE,KAO9C,CAAC;AA0DF,eAAO,MAAM,gCAAgC,EAAE,KAS9C,CAAC;AAiDF,eAAO,MAAM,oBAAoB,EAAE,KAQlC,CAAC;AAqGF,eAAO,MAAM,oCAAoC,EAAE,KAKlD,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,KAMvC,CAAC;AAIF,eAAO,MAAM,iBAAiB,EAAE,KAO/B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAO/B,CAAC;AAsEF,eAAO,MAAM,gBAAgB,EAAE,KAM9B,CAAC"}
1
+ {"version":3,"file":"features-canvas.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/features-canvas/features-canvas.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAIvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOnD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,cAAc,CAcrC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAyNnC,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAKxB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAK3B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAK5B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KASzB,CAAC;AAoDF,eAAO,MAAM,mCAAmC,EAAE,KAKjD,CAAC;AA4BF,eAAO,MAAM,gCAAgC,EAAE,KAO9C,CAAC;AA0DF,eAAO,MAAM,gCAAgC,EAAE,KAS9C,CAAC;AAiDF,eAAO,MAAM,oBAAoB,EAAE,KAQlC,CAAC;AAqGF,eAAO,MAAM,oCAAoC,EAAE,KAKlD,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,KAMvC,CAAC;AAIF,eAAO,MAAM,iBAAiB,EAAE,KAO/B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAO/B,CAAC;AAsEF,eAAO,MAAM,gBAAgB,EAAE,KAM9B,CAAC;AAoYF,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC"}