@shepai/cli 1.177.0 → 1.178.1

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/Language.yaml +1 -0
  2. package/dist/packages/core/src/application/ports/output/services/agent-auth-detector.interface.d.ts +23 -0
  3. package/dist/packages/core/src/application/ports/output/services/agent-auth-detector.interface.d.ts.map +1 -0
  4. package/dist/packages/core/src/application/ports/output/services/agent-auth-detector.interface.js +13 -0
  5. package/dist/packages/core/src/application/ports/output/services/file-system-service.interface.d.ts +18 -0
  6. package/dist/packages/core/src/application/ports/output/services/file-system-service.interface.d.ts.map +1 -0
  7. package/dist/packages/core/src/application/ports/output/services/file-system-service.interface.js +7 -0
  8. package/dist/packages/core/src/application/ports/output/services/index.d.ts +3 -0
  9. package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
  10. package/dist/packages/core/src/application/ports/output/services/project-scaffold-service.interface.d.ts +33 -0
  11. package/dist/packages/core/src/application/ports/output/services/project-scaffold-service.interface.d.ts.map +1 -0
  12. package/dist/packages/core/src/application/ports/output/services/project-scaffold-service.interface.js +9 -0
  13. package/dist/packages/core/src/application/use-cases/agents/check-agent-auth.use-case.d.ts +42 -0
  14. package/dist/packages/core/src/application/use-cases/agents/check-agent-auth.use-case.d.ts.map +1 -0
  15. package/dist/packages/core/src/application/use-cases/agents/check-agent-auth.use-case.js +134 -0
  16. package/dist/packages/core/src/application/use-cases/projects/create-project.use-case.d.ts +43 -0
  17. package/dist/packages/core/src/application/use-cases/projects/create-project.use-case.d.ts.map +1 -0
  18. package/dist/packages/core/src/application/use-cases/projects/create-project.use-case.js +84 -0
  19. package/dist/packages/core/src/application/use-cases/repositories/delete-repository.use-case.d.ts +13 -2
  20. package/dist/packages/core/src/application/use-cases/repositories/delete-repository.use-case.d.ts.map +1 -1
  21. package/dist/packages/core/src/application/use-cases/repositories/delete-repository.use-case.js +14 -3
  22. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  23. package/dist/packages/core/src/infrastructure/di/container.js +16 -0
  24. package/dist/packages/core/src/infrastructure/services/agent-auth-detector/platform-agent-auth-detector.service.d.ts +35 -0
  25. package/dist/packages/core/src/infrastructure/services/agent-auth-detector/platform-agent-auth-detector.service.d.ts.map +1 -0
  26. package/dist/packages/core/src/infrastructure/services/agent-auth-detector/platform-agent-auth-detector.service.js +165 -0
  27. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
  28. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +31 -5
  29. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.d.ts +14 -0
  30. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.d.ts.map +1 -1
  31. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.js +63 -0
  32. package/dist/packages/core/src/infrastructure/services/file-system.service.d.ts +10 -0
  33. package/dist/packages/core/src/infrastructure/services/file-system.service.d.ts.map +1 -0
  34. package/dist/packages/core/src/infrastructure/services/file-system.service.js +22 -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 +57 -10
  37. package/dist/packages/core/src/infrastructure/services/project-scaffold/fs-project-scaffold.service.d.ts +22 -0
  38. package/dist/packages/core/src/infrastructure/services/project-scaffold/fs-project-scaffold.service.d.ts.map +1 -0
  39. package/dist/packages/core/src/infrastructure/services/project-scaffold/fs-project-scaffold.service.js +74 -0
  40. package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts +10 -2
  41. package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts.map +1 -1
  42. package/dist/src/presentation/web/app/actions/check-agent-auth.js +7 -199
  43. package/dist/src/presentation/web/app/actions/create-project-folder.d.ts +16 -0
  44. package/dist/src/presentation/web/app/actions/create-project-folder.d.ts.map +1 -0
  45. package/dist/src/presentation/web/app/actions/create-project-folder.js +18 -0
  46. package/dist/src/presentation/web/app/actions/delete-repository.d.ts +4 -1
  47. package/dist/src/presentation/web/app/actions/delete-repository.d.ts.map +1 -1
  48. package/dist/src/presentation/web/app/actions/delete-repository.js +2 -2
  49. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  50. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +2 -2
  51. package/dist/src/presentation/web/components/common/repository-node/repository-node-config.d.ts +3 -1
  52. package/dist/src/presentation/web/components/common/repository-node/repository-node-config.d.ts.map +1 -1
  53. package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
  54. package/dist/src/presentation/web/components/common/repository-node/repository-node.js +13 -4
  55. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts.map +1 -1
  56. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +5 -3
  57. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  58. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +134 -124
  59. package/dist/src/presentation/web/components/features/control-center/new-project-dialog.d.ts +8 -0
  60. package/dist/src/presentation/web/components/features/control-center/new-project-dialog.d.ts.map +1 -0
  61. package/dist/src/presentation/web/components/features/control-center/new-project-dialog.js +43 -0
  62. package/dist/src/presentation/web/components/features/control-center/use-canvas-event-listeners.d.ts +27 -0
  63. package/dist/src/presentation/web/components/features/control-center/use-canvas-event-listeners.d.ts.map +1 -0
  64. package/dist/src/presentation/web/components/features/control-center/use-canvas-event-listeners.js +84 -0
  65. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +3 -1
  66. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  67. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +4 -2
  68. package/dist/src/presentation/web/components/features/control-center/use-fab-actions.d.ts +21 -0
  69. package/dist/src/presentation/web/components/features/control-center/use-fab-actions.d.ts.map +1 -0
  70. package/dist/src/presentation/web/components/features/control-center/use-fab-actions.js +70 -0
  71. package/dist/src/presentation/web/components/features/control-center/use-workspace-fit-view.d.ts +27 -0
  72. package/dist/src/presentation/web/components/features/control-center/use-workspace-fit-view.d.ts.map +1 -0
  73. package/dist/src/presentation/web/components/features/control-center/use-workspace-fit-view.js +48 -0
  74. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.d.ts.map +1 -1
  75. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.js +8 -1
  76. package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.d.ts +3 -1
  77. package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.d.ts.map +1 -1
  78. package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.js +3 -3
  79. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  80. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +1 -1
  81. package/dist/src/presentation/web/components/features/features-canvas/manage-workspace-dialog.d.ts +15 -0
  82. package/dist/src/presentation/web/components/features/features-canvas/manage-workspace-dialog.d.ts.map +1 -0
  83. package/dist/src/presentation/web/components/features/features-canvas/manage-workspace-dialog.js +74 -0
  84. package/dist/src/presentation/web/components/features/features-canvas/workspace-name-dialog.d.ts +11 -0
  85. package/dist/src/presentation/web/components/features/features-canvas/workspace-name-dialog.d.ts.map +1 -0
  86. package/dist/src/presentation/web/components/features/features-canvas/workspace-name-dialog.js +22 -0
  87. package/dist/src/presentation/web/components/features/features-canvas/workspace-selector.d.ts +13 -0
  88. package/dist/src/presentation/web/components/features/features-canvas/workspace-selector.d.ts.map +1 -0
  89. package/dist/src/presentation/web/components/features/features-canvas/workspace-selector.js +21 -0
  90. package/dist/src/presentation/web/hooks/use-workspaces.d.ts +37 -0
  91. package/dist/src/presentation/web/hooks/use-workspaces.d.ts.map +1 -0
  92. package/dist/src/presentation/web/hooks/use-workspaces.js +219 -0
  93. package/dist/src/presentation/web/lib/derive-graph.d.ts +3 -1
  94. package/dist/src/presentation/web/lib/derive-graph.d.ts.map +1 -1
  95. package/dist/translations/ar/web.json +4 -1
  96. package/dist/translations/de/web.json +4 -1
  97. package/dist/translations/en/web.json +4 -1
  98. package/dist/translations/es/web.json +4 -1
  99. package/dist/translations/fr/web.json +4 -1
  100. package/dist/translations/he/web.json +4 -1
  101. package/dist/translations/pt/web.json +4 -1
  102. package/dist/translations/ru/web.json +4 -1
  103. package/dist/translations/uk/web.json +3 -0
  104. package/dist/tsconfig.build.tsbuildinfo +1 -1
  105. package/package.json +1 -1
  106. package/web/.next/BUILD_ID +1 -1
  107. package/web/.next/build-manifest.json +2 -2
  108. package/web/.next/fallback-build-manifest.json +2 -2
  109. package/web/.next/prerender-manifest.json +3 -3
  110. package/web/.next/required-server-files.js +2 -2
  111. package/web/.next/required-server-files.json +2 -2
  112. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +73 -58
  113. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +1 -2
  114. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  115. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  116. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +69 -54
  117. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +1 -2
  118. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  119. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  120. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +75 -60
  121. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -2
  122. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  123. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  124. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +91 -76
  125. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -2
  126. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  127. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  128. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +91 -76
  129. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -2
  130. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  131. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  132. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +71 -56
  133. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +1 -2
  134. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  135. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  136. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +71 -56
  137. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -2
  138. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  139. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  140. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +69 -54
  141. package/web/.next/server/app/(dashboard)/chat/page.js +1 -2
  142. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  143. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  144. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +75 -60
  145. package/web/.next/server/app/(dashboard)/create/page.js +1 -2
  146. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  147. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  148. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +91 -76
  149. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -2
  150. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  151. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  152. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +91 -76
  153. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -2
  154. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  155. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  156. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +69 -54
  157. package/web/.next/server/app/(dashboard)/page.js +1 -2
  158. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  159. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  160. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +71 -56
  161. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +1 -2
  162. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  163. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  164. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +71 -56
  165. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -2
  166. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  167. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  168. package/web/.next/server/app/_global-error.html +2 -2
  169. package/web/.next/server/app/_global-error.rsc +1 -1
  170. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  171. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  172. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  173. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  174. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  175. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  176. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  177. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  178. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  179. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  180. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  181. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  182. package/web/.next/server/app/features/page/server-reference-manifest.json +6 -6
  183. package/web/.next/server/app/features/page.js.nft.json +1 -1
  184. package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
  185. package/web/.next/server/app/settings/page/server-reference-manifest.json +9 -9
  186. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  187. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  188. package/web/.next/server/app/skills/page/server-reference-manifest.json +13 -13
  189. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  190. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  191. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  192. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  193. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  194. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  195. package/web/.next/server/app/version/page.js.nft.json +1 -1
  196. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  197. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  198. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  199. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  200. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
  201. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  202. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js +1 -1
  203. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js.map +1 -1
  204. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +1 -1
  205. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +1 -1
  206. package/web/.next/server/chunks/ssr/[root-of-the-server]__23b5ca2c._.js +1 -1
  207. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  208. package/web/.next/server/chunks/ssr/[root-of-the-server]__46b10380._.js +3 -0
  209. package/web/.next/server/chunks/ssr/[root-of-the-server]__46b10380._.js.map +1 -0
  210. package/web/.next/server/chunks/ssr/[root-of-the-server]__540c615f._.js +2 -2
  211. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js +1 -1
  212. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js.map +1 -1
  213. package/web/.next/server/chunks/ssr/[root-of-the-server]__7528eb6f._.js +1 -1
  214. package/web/.next/server/chunks/ssr/[root-of-the-server]__8b512877._.js +3 -0
  215. package/web/.next/server/chunks/ssr/[root-of-the-server]__8b512877._.js.map +1 -0
  216. package/web/.next/server/chunks/ssr/[root-of-the-server]__990dba2d._.js +3 -0
  217. package/web/.next/server/chunks/ssr/[root-of-the-server]__990dba2d._.js.map +1 -0
  218. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +1 -1
  219. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -1
  220. package/web/.next/server/chunks/ssr/[root-of-the-server]__cc9c7bbb._.js +3 -0
  221. package/web/.next/server/chunks/ssr/[root-of-the-server]__cc9c7bbb._.js.map +1 -0
  222. package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
  223. package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
  224. package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
  225. package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
  226. package/web/.next/server/chunks/ssr/_35b56ded._.js +3 -0
  227. package/web/.next/server/chunks/ssr/_35b56ded._.js.map +1 -0
  228. package/web/.next/server/chunks/ssr/{_4cbb7f95._.js → _496c9117._.js} +2 -2
  229. package/web/.next/server/chunks/ssr/{_4cbb7f95._.js.map → _496c9117._.js.map} +1 -1
  230. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  231. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  232. package/web/.next/server/chunks/ssr/_6abfa39e._.js +1 -1
  233. package/web/.next/server/chunks/ssr/_79a4a04a._.js +3 -0
  234. package/web/.next/server/chunks/ssr/_79a4a04a._.js.map +1 -0
  235. package/web/.next/server/chunks/ssr/{_3fc2374c._.js → _a1cc5e68._.js} +2 -2
  236. package/web/.next/server/chunks/ssr/_a1cc5e68._.js.map +1 -0
  237. package/web/.next/server/chunks/ssr/{_19a779c6._.js → _a2e317b3._.js} +2 -2
  238. package/web/.next/server/chunks/ssr/{_19a779c6._.js.map → _a2e317b3._.js.map} +1 -1
  239. package/web/.next/server/chunks/ssr/_f8c55130._.js +1 -1
  240. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  241. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  242. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  243. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
  244. package/web/.next/server/chunks/ssr/src_presentation_web_06109d28._.js +5 -0
  245. package/web/.next/server/chunks/ssr/src_presentation_web_06109d28._.js.map +1 -0
  246. package/web/.next/server/chunks/ssr/src_presentation_web_0bca70f8._.js +3 -0
  247. package/web/.next/server/chunks/ssr/src_presentation_web_0bca70f8._.js.map +1 -0
  248. package/web/.next/server/chunks/ssr/src_presentation_web_367cdbe0._.js +3 -0
  249. package/web/.next/server/chunks/ssr/src_presentation_web_367cdbe0._.js.map +1 -0
  250. package/web/.next/server/chunks/ssr/src_presentation_web_57fed7fd._.js +3 -0
  251. package/web/.next/server/chunks/ssr/src_presentation_web_57fed7fd._.js.map +1 -0
  252. package/web/.next/server/chunks/ssr/src_presentation_web_7f567f6d._.js +3 -0
  253. package/web/.next/server/chunks/ssr/src_presentation_web_7f567f6d._.js.map +1 -0
  254. package/web/.next/server/chunks/ssr/src_presentation_web_972f58d5._.js +3 -0
  255. package/web/.next/server/chunks/ssr/src_presentation_web_972f58d5._.js.map +1 -0
  256. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js +1 -1
  257. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js.map +1 -1
  258. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js +1 -1
  259. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js.map +1 -1
  260. package/web/.next/server/chunks/ssr/src_presentation_web_a71b18a2._.js +3 -0
  261. package/web/.next/server/chunks/ssr/src_presentation_web_a71b18a2._.js.map +1 -0
  262. package/web/.next/server/chunks/ssr/src_presentation_web_app_features_feature-tree-page-client_tsx_34c5cbbf._.js +2 -2
  263. package/web/.next/server/chunks/ssr/src_presentation_web_app_features_feature-tree-page-client_tsx_34c5cbbf._.js.map +1 -1
  264. package/web/.next/server/chunks/ssr/src_presentation_web_bebe675e._.js +3 -0
  265. package/web/.next/server/chunks/ssr/src_presentation_web_bebe675e._.js.map +1 -0
  266. package/web/.next/server/chunks/ssr/src_presentation_web_c93e8bc6._.js +3 -0
  267. package/web/.next/server/chunks/ssr/src_presentation_web_c93e8bc6._.js.map +1 -0
  268. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
  269. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
  270. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  271. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  272. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
  273. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
  274. package/web/.next/server/chunks/ssr/src_presentation_web_e729f44a._.js +5 -0
  275. package/web/.next/server/chunks/ssr/src_presentation_web_e729f44a._.js.map +1 -0
  276. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +1 -1
  277. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +1 -1
  278. package/web/.next/server/pages/500.html +2 -2
  279. package/web/.next/server/server-reference-manifest.js +1 -1
  280. package/web/.next/server/server-reference-manifest.json +590 -484
  281. package/web/.next/static/chunks/{b5d355eb59916926.js → 0b6c8ca8403db859.js} +2 -2
  282. package/web/.next/static/chunks/{eaa1b979d63d322b.js → 0ff97e3b2c05f514.js} +1 -1
  283. package/web/.next/static/chunks/124b79a5d2a760fb.css +1 -0
  284. package/web/.next/static/chunks/{829d2f8ef2715f2f.js → 27b1e99ab97bdf52.js} +3 -3
  285. package/web/.next/static/chunks/28ad440cbb92bebe.js +1 -0
  286. package/web/.next/static/chunks/{4c20d4cd4786a0c8.js → 2ce798babf8adbc5.js} +1 -1
  287. package/web/.next/static/chunks/{ef897f150084ef85.js → 374e00e5b4ab142e.js} +1 -1
  288. package/web/.next/static/chunks/4052a4971fbbac9c.js +1 -0
  289. package/web/.next/static/chunks/{0a706f8508eae0a8.js → 44dc686d971c7513.js} +3 -3
  290. package/web/.next/static/chunks/{0d0e2661bd167e0f.js → 64a765a6eec07603.js} +1 -1
  291. package/web/.next/static/chunks/{bb479c31b5b53bac.js → 74c37f189bc83156.js} +2 -2
  292. package/web/.next/static/chunks/8057357cf1f9b4ef.js +1 -0
  293. package/web/.next/static/chunks/{b5a916fec4cdc897.js → 8ecdaada8068211c.js} +1 -1
  294. package/web/.next/static/chunks/b2c52514837b4fc4.js +1 -0
  295. package/web/.next/static/chunks/{efd57b6ffc7cbd54.js → b567f6c06cc7013a.js} +1 -1
  296. package/web/.next/static/chunks/{c0e4cd44851a9293.js → bbc95353509ede89.js} +1 -1
  297. package/web/.next/static/chunks/{77d6506c7d1f711f.js → f2ec6318c5ff73b8.js} +1 -1
  298. package/web/.next/static/chunks/{18f429029d702545.js → f7741bf45b42ac62.js} +1 -1
  299. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js +0 -3
  300. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js.map +0 -1
  301. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js +0 -3
  302. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js.map +0 -1
  303. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js +0 -3
  304. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js.map +0 -1
  305. package/web/.next/server/chunks/ssr/[root-of-the-server]__51ec77a8._.js +0 -3
  306. package/web/.next/server/chunks/ssr/[root-of-the-server]__51ec77a8._.js.map +0 -1
  307. package/web/.next/server/chunks/ssr/[root-of-the-server]__66047a1b._.js +0 -3
  308. package/web/.next/server/chunks/ssr/[root-of-the-server]__66047a1b._.js.map +0 -1
  309. package/web/.next/server/chunks/ssr/[root-of-the-server]__a932cd3a._.js +0 -3
  310. package/web/.next/server/chunks/ssr/[root-of-the-server]__a932cd3a._.js.map +0 -1
  311. package/web/.next/server/chunks/ssr/[root-of-the-server]__aa72e794._.js +0 -3
  312. package/web/.next/server/chunks/ssr/[root-of-the-server]__aa72e794._.js.map +0 -1
  313. package/web/.next/server/chunks/ssr/_073183f4._.js +0 -3
  314. package/web/.next/server/chunks/ssr/_073183f4._.js.map +0 -1
  315. package/web/.next/server/chunks/ssr/_3fc2374c._.js.map +0 -1
  316. package/web/.next/server/chunks/ssr/_57b1af27._.js +0 -3
  317. package/web/.next/server/chunks/ssr/_57b1af27._.js.map +0 -1
  318. package/web/.next/server/chunks/ssr/src_presentation_web_17d39233._.js +0 -3
  319. package/web/.next/server/chunks/ssr/src_presentation_web_17d39233._.js.map +0 -1
  320. package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js +0 -5
  321. package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js.map +0 -1
  322. package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js +0 -5
  323. package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js.map +0 -1
  324. package/web/.next/server/chunks/ssr/src_presentation_web_807cba76._.js +0 -3
  325. package/web/.next/server/chunks/ssr/src_presentation_web_807cba76._.js.map +0 -1
  326. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js +0 -3
  327. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js.map +0 -1
  328. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +0 -3
  329. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +0 -1
  330. package/web/.next/server/chunks/ssr/src_presentation_web_e1cd1869._.js +0 -3
  331. package/web/.next/server/chunks/ssr/src_presentation_web_e1cd1869._.js.map +0 -1
  332. package/web/.next/server/chunks/ssr/src_presentation_web_e3a30e30._.js +0 -3
  333. package/web/.next/server/chunks/ssr/src_presentation_web_e3a30e30._.js.map +0 -1
  334. package/web/.next/static/chunks/3fc5b2287f192799.js +0 -1
  335. package/web/.next/static/chunks/a20f2d6f76f469b7.css +0 -1
  336. package/web/.next/static/chunks/ddd34e939acc204f.js +0 -1
  337. package/web/.next/static/chunks/f9d948464ed409cb.js +0 -1
  338. package/web/.next/static/chunks/fc0232384ec2b48d.js +0 -1
  339. /package/web/.next/static/{UZ2czjiAnEl1RF-HTzHyA → d9JsHxuahs7UrJKwH-FGH}/_buildManifest.js +0 -0
  340. /package/web/.next/static/{UZ2czjiAnEl1RF-HTzHyA → d9JsHxuahs7UrJKwH-FGH}/_clientMiddlewareManifest.json +0 -0
  341. /package/web/.next/static/{UZ2czjiAnEl1RF-HTzHyA → d9JsHxuahs7UrJKwH-FGH}/_ssgManifest.js +0 -0
@@ -1,205 +1,13 @@
1
1
  'use server';
2
- import { existsSync } from 'node:fs';
3
- import { join } from 'node:path';
4
- import { homedir } from 'node:os';
5
- import { execFile } from 'node:child_process';
6
- import { IS_WINDOWS } from '../../../../../packages/core/src/infrastructure/platform.js';
7
- import { getSettings } from '../../../../../packages/core/src/infrastructure/services/settings.service.js';
8
2
  import { resolve } from '../../lib/server-container.js';
9
- const AGENT_LABELS = {
10
- 'claude-code': 'Claude Code',
11
- cursor: 'Cursor Agent',
12
- 'gemini-cli': 'Gemini CLI',
13
- aider: 'Aider',
14
- copilot: 'Copilot CLI',
15
- continue: 'Continue',
16
- dev: 'Demo',
17
- };
18
- const AGENT_TOOL_MAP = {
19
- 'claude-code': 'claude-code',
20
- cursor: 'cursor-cli',
21
- 'gemini-cli': 'gemini-cli',
22
- copilot: 'copilot-cli',
23
- };
24
- const AGENT_BINARY_MAP = {
25
- 'claude-code': 'claude',
26
- cursor: 'cursor-agent',
27
- 'gemini-cli': 'gemini',
28
- copilot: 'copilot',
29
- };
30
3
  /**
31
- * Tier 1: Instant credential/env check (~5ms, no subprocess).
32
- * Returns true if credentials likely exist.
33
- */
34
- function tier1AuthCheck(agentType) {
35
- const home = homedir();
36
- switch (agentType) {
37
- case 'claude-code': {
38
- if (process.env['ANTHROPIC_API_KEY'])
39
- return true;
40
- if (process.env['CLAUDE_CODE_USE_BEDROCK'])
41
- return true;
42
- if (process.env['CLAUDE_CODE_USE_VERTEX'])
43
- return true;
44
- if (process.env['CLAUDE_CODE_OAUTH_TOKEN'])
45
- return true;
46
- const credPath = join(home, '.claude', '.credentials.json');
47
- return existsSync(credPath);
48
- }
49
- case 'cursor': {
50
- if (process.env['CURSOR_API_KEY'])
51
- return true;
52
- // Cursor Agent stores creds after `agent login` — check common locations
53
- const cursorDir = join(home, '.cursor');
54
- return existsSync(cursorDir);
55
- }
56
- case 'gemini-cli': {
57
- if (process.env['GEMINI_API_KEY'])
58
- return true;
59
- if (process.env['GOOGLE_API_KEY'])
60
- return true;
61
- if (process.env['GOOGLE_APPLICATION_CREDENTIALS'])
62
- return true;
63
- const accountsPath = join(home, '.gemini', 'google_accounts.json');
64
- return existsSync(accountsPath);
65
- }
66
- case 'copilot-cli': {
67
- if (process.env['GITHUB_TOKEN'])
68
- return true;
69
- if (process.env['GH_TOKEN'])
70
- return true;
71
- if (process.env['GITHUB_AUTH_TOKEN'])
72
- return true;
73
- // GitHub CLI stores creds after `gh auth login` — check common locations
74
- const ghDir = IS_WINDOWS ? join(home, '.copilot') : join(home, '.config', 'gh');
75
- return existsSync(ghDir);
76
- }
77
- default:
78
- // dev, aider, continue — assume no auth needed
79
- return true;
80
- }
81
- }
82
- /**
83
- * Tier 2: Subprocess verification (~200ms).
84
- * Only called if tier 1 passes, to confirm tokens aren't expired.
85
- */
86
- function tier2AuthVerify(agentType, binaryName) {
87
- return new Promise((resolve) => {
88
- let cmd;
89
- let args;
90
- switch (agentType) {
91
- case 'claude-code':
92
- cmd = binaryName;
93
- args = ['auth', 'status'];
94
- break;
95
- case 'cursor':
96
- cmd = binaryName;
97
- args = ['status'];
98
- break;
99
- case 'copilot-cli':
100
- cmd = 'gh';
101
- args = ['auth', 'status'];
102
- break;
103
- default:
104
- // No tier 2 command available — trust tier 1
105
- resolve(true);
106
- return;
107
- }
108
- try {
109
- const opts = IS_WINDOWS ? { timeout: 5000, windowsHide: true } : { timeout: 5000 };
110
- execFile(cmd, args, opts, (error) => {
111
- resolve(!error);
112
- });
113
- }
114
- catch {
115
- resolve(false);
116
- }
117
- });
118
- }
119
- /**
120
- * Check agent tool installation + auth status.
121
- * Uses two-tier detection: instant file/env check, then optional subprocess verify.
4
+ * Thin server-action wrapper around CheckAgentAuthUseCase. All agent-type
5
+ * mapping, tool lookup, and platform credential detection live in:
6
+ *
7
+ * packages/core/src/application/use-cases/agents/check-agent-auth.use-case.ts
8
+ * packages/core/src/infrastructure/services/agent-auth-detector/platform-agent-auth-detector.service.ts
122
9
  */
123
10
  export async function checkAgentAuth() {
124
- let agentType;
125
- try {
126
- agentType = getSettings().agent.type;
127
- }
128
- catch {
129
- return {
130
- agentType: 'unknown',
131
- installed: false,
132
- authenticated: false,
133
- label: 'Unknown',
134
- binaryName: null,
135
- installCommand: null,
136
- authCommand: null,
137
- };
138
- }
139
- const label = AGENT_LABELS[agentType] ?? agentType;
140
- const toolId = AGENT_TOOL_MAP[agentType] ?? null;
141
- const binaryName = AGENT_BINARY_MAP[agentType] ?? null;
142
- // Dev/demo agents — always good
143
- if (!toolId) {
144
- return {
145
- agentType,
146
- installed: true,
147
- authenticated: true,
148
- label,
149
- binaryName: null,
150
- installCommand: null,
151
- authCommand: null,
152
- };
153
- }
154
- // Check if tool is installed (also grab install command from metadata)
155
- let installed = false;
156
- let installCommand = null;
157
- try {
158
- const useCase = resolve('ListToolsUseCase');
159
- const tools = await useCase.execute();
160
- const tool = tools.find((t) => t.id === toolId);
161
- installed = tool?.status.status === 'available';
162
- installCommand = tool?.installCommand ?? null;
163
- }
164
- catch {
165
- installed = false;
166
- }
167
- if (!installed) {
168
- return {
169
- agentType,
170
- installed: false,
171
- authenticated: false,
172
- label,
173
- binaryName,
174
- installCommand,
175
- authCommand: binaryName ? `Install ${label} first` : null,
176
- };
177
- }
178
- // Tier 1: instant file/env check
179
- const tier1 = tier1AuthCheck(agentType);
180
- if (!tier1) {
181
- return {
182
- agentType,
183
- installed: true,
184
- authenticated: false,
185
- label,
186
- binaryName,
187
- installCommand,
188
- authCommand: binaryName,
189
- };
190
- }
191
- // Tier 2: subprocess verify (best effort, ~200ms)
192
- let authenticated = true;
193
- if (binaryName) {
194
- authenticated = await tier2AuthVerify(agentType, binaryName);
195
- }
196
- return {
197
- agentType,
198
- installed: true,
199
- authenticated,
200
- label,
201
- binaryName,
202
- installCommand,
203
- authCommand: authenticated ? null : binaryName,
204
- };
11
+ const useCase = resolve('CheckAgentAuthUseCase');
12
+ return useCase.execute();
205
13
  }
@@ -0,0 +1,16 @@
1
+ export interface CreateProjectFolderResult {
2
+ ok: boolean;
3
+ /** Absolute path to the created folder, normalized to forward slashes. */
4
+ path?: string;
5
+ error?: string;
6
+ }
7
+ /**
8
+ * Thin server-action wrapper around CreateProjectUseCase. All slug rules,
9
+ * existence checks, filesystem mutations, and git bootstrapping live in the
10
+ * use case + IProjectScaffoldService adapter — see:
11
+ *
12
+ * packages/core/src/application/use-cases/projects/create-project.use-case.ts
13
+ * packages/core/src/infrastructure/services/project-scaffold/fs-project-scaffold.service.ts
14
+ */
15
+ export declare function createProjectFolder(name: string): Promise<CreateProjectFolderResult>;
16
+ //# sourceMappingURL=create-project-folder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-project-folder.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/create-project-folder.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,OAAO,CAAC;IACZ,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAO1F"}
@@ -0,0 +1,18 @@
1
+ 'use server';
2
+ import { resolve } from '../../lib/server-container.js';
3
+ /**
4
+ * Thin server-action wrapper around CreateProjectUseCase. All slug rules,
5
+ * existence checks, filesystem mutations, and git bootstrapping live in the
6
+ * use case + IProjectScaffoldService adapter — see:
7
+ *
8
+ * packages/core/src/application/use-cases/projects/create-project.use-case.ts
9
+ * packages/core/src/infrastructure/services/project-scaffold/fs-project-scaffold.service.ts
10
+ */
11
+ export async function createProjectFolder(name) {
12
+ const useCase = resolve('CreateProjectUseCase');
13
+ const result = await useCase.execute({ name });
14
+ if (!result.ok) {
15
+ return { ok: false, error: result.error };
16
+ }
17
+ return { ok: true, path: result.path };
18
+ }
@@ -1,4 +1,7 @@
1
- export declare function deleteRepository(repositoryId: string): Promise<{
1
+ export interface DeleteRepositoryActionOptions {
2
+ deleteFromDisk?: boolean;
3
+ }
4
+ export declare function deleteRepository(repositoryId: string, options?: DeleteRepositoryActionOptions): Promise<{
2
5
  success: boolean;
3
6
  error?: string;
4
7
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"delete-repository.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/delete-repository.ts"],"names":[],"mappings":"AAKA,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAa/C"}
1
+ {"version":3,"file":"delete-repository.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/delete-repository.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,6BAA6B;IAC5C,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,6BAA6B,GACtC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAa/C"}
@@ -1,12 +1,12 @@
1
1
  'use server';
2
2
  import { resolve } from '../../lib/server-container.js';
3
- export async function deleteRepository(repositoryId) {
3
+ export async function deleteRepository(repositoryId, options) {
4
4
  if (!repositoryId?.trim()) {
5
5
  return { success: false, error: 'id is required' };
6
6
  }
7
7
  try {
8
8
  const useCase = resolve('DeleteRepositoryUseCase');
9
- await useCase.execute(repositoryId);
9
+ await useCase.execute(repositoryId, { deleteFromDisk: options?.deleteFromDisk === true });
10
10
  return { success: true };
11
11
  }
12
12
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"feature-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.tsx"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAmDnE,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CAwnBA"}
1
+ {"version":3,"file":"feature-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.tsx"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAmDnE,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CA6nBA"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useState } from 'react';
4
- import { useTranslation } from 'react-i18next';
4
+ import { Trans, useTranslation } from 'react-i18next';
5
5
  import { useRouter } from 'next/navigation';
6
6
  import { Handle, Position } from '@xyflow/react';
7
7
  import { Plus, Trash2, Zap, ClipboardList, Loader2, Globe, RotateCcw, Play, Square, Eye, Archive, ArchiveRestore, MessageSquare, } from 'lucide-react';
@@ -103,7 +103,7 @@ export function FeatureNode({ data, selected, }) {
103
103
  }, isDeleting: false, featureName: data.name ?? 'this feature', featureId: data.featureId, hasChildren: data.hasChildren, hasOpenPr: !!data.pr && data.pr.status === 'Open' })) : null, data.onArchive &&
104
104
  data.featureId &&
105
105
  data.state !== 'deleting' &&
106
- data.state !== 'archived' ? (_jsx(AlertDialog, { open: archiveConfirmOpen, onOpenChange: setArchiveConfirmOpen, children: _jsxs(AlertDialogContent, { onCloseAutoFocus: (e) => e.preventDefault(), children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: t('featureNode.archiveConfirmTitle') }), _jsx(AlertDialogDescription, { children: t('featureNode.archiveConfirmDescription', { name: data.name }) })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { onClick: () => setArchiveConfirmOpen(false), children: t('featureNode.cancel') }), _jsx(AlertDialogAction, { onClick: () => {
106
+ data.state !== 'archived' ? (_jsx(AlertDialog, { open: archiveConfirmOpen, onOpenChange: setArchiveConfirmOpen, children: _jsxs(AlertDialogContent, { onCloseAutoFocus: (e) => e.preventDefault(), children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: t('featureNode.archiveConfirmTitle') }), _jsx(AlertDialogDescription, { children: _jsx(Trans, { t: t, i18nKey: "featureNode.archiveConfirmDescription", values: { name: data.name }, components: { strong: _jsx("strong", {}) } }) })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { onClick: () => setArchiveConfirmOpen(false), children: t('featureNode.cancel') }), _jsx(AlertDialogAction, { onClick: () => {
107
107
  setArchiveConfirmOpen(false);
108
108
  data.onArchive?.(data.featureId);
109
109
  }, children: t('featureNode.archive') })] })] }) })) : null, _jsxs("div", { "data-testid": "feature-node-card", "aria-busy": data.state === 'creating' || data.state === 'deleting' ? 'true' : undefined, className: cn('bg-card flex min-h-35 w-97 cursor-pointer flex-col rounded-lg border p-3 shadow-sm transition-[border-color] duration-200 dark:bg-neutral-800/80', data.state === 'action-required' &&
@@ -21,7 +21,9 @@ export interface RepositoryNodeData {
21
21
  gitInfoStatus?: 'loading' | 'ready' | 'not-a-repo';
22
22
  onClick?: () => void;
23
23
  onAdd?: () => void;
24
- onDelete?: (repositoryId: string) => void;
24
+ onDelete?: (repositoryId: string, options?: {
25
+ deleteFromDisk?: boolean;
26
+ }) => void;
25
27
  showHandles?: boolean;
26
28
  /** When true, the "+" add-feature button shows a pulse attention animation. */
27
29
  pulseAdd?: boolean;
@@ -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,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+GAA+G;IAC/G,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oHAAoH;IACpH,aAAa,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC;IACnD,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
+ {"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,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+GAA+G;IAC/G,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oHAAoH;IACpH,aAAa,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC;IACnD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAClF,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":"AAqCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AASnE,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CA2cA"}
1
+ {"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AASnE,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CAueA"}
@@ -1,14 +1,16 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { useState, useCallback } from 'react';
3
+ import { useState, useCallback, useEffect } from 'react';
4
4
  import { Handle, Position } from '@xyflow/react';
5
5
  import { useRouter } from 'next/navigation';
6
6
  import { Github, Plus, Code2, Terminal, FolderOpen, Trash2, Play, Square, GitBranch, GitCommitHorizontal, ArrowDown, User, RotateCcw, MessageSquare, } from 'lucide-react';
7
- import { useTranslation } from 'react-i18next';
7
+ import { Trans, useTranslation } from 'react-i18next';
8
8
  import { cn } from '../../../lib/utils.js';
9
9
  import { ActionButton } from '../../common/action-button/index.js';
10
10
  import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../../ui/dialog.js';
11
11
  import { Button } from '../../ui/button.js';
12
+ import { Checkbox } from '../../ui/checkbox.js';
13
+ import { Label } from '../../ui/label.js';
12
14
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../ui/tooltip.js';
13
15
  import { useDeployAction } from '../../../hooks/use-deploy-action.js';
14
16
  import { useFeatureFlags } from '../../../hooks/feature-flags-context.js';
@@ -24,6 +26,11 @@ export function RepositoryNode({ data, selected, }) {
24
26
  const sourceHandlePos = isRtl ? Position.Left : Position.Right;
25
27
  const featureFlags = useFeatureFlags();
26
28
  const [confirmOpen, setConfirmOpen] = useState(false);
29
+ const [deleteFromDisk, setDeleteFromDisk] = useState(false);
30
+ useEffect(() => {
31
+ if (confirmOpen)
32
+ setDeleteFromDisk(false);
33
+ }, [confirmOpen]);
27
34
  const repoScopeId = data.id ? `repo-${data.id}` : `repo-${data.name}`;
28
35
  const chatTurnStatus = useTurnStatus(repoScopeId);
29
36
  const actions = useRepositoryActions(data.repositoryPath ? { repositoryId: data.id, repositoryPath: data.repositoryPath } : null);
@@ -68,9 +75,11 @@ export function RepositoryNode({ data, selected, }) {
68
75
  return (_jsxs("div", { className: cn('group relative', data.onDelete && data.id && 'ps-10'), style: { direction: isRtl ? 'rtl' : 'ltr' }, children: [data.showHandles ? (_jsx(Handle, { type: "target", position: targetHandlePos, isConnectable: false, className: "opacity-0!", style: { top: 70 } })) : null, data.onDelete && data.id ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "absolute -start-3 top-1/2 -translate-y-1/2 opacity-0 transition-opacity group-hover:opacity-100", children: _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { "aria-label": t('repositoryNode.removeRepository'), "data-testid": "repository-node-delete-button", onClick: (e) => {
69
76
  e.stopPropagation();
70
77
  setConfirmOpen(true);
71
- }, className: "bg-card text-muted-foreground hover:border-destructive hover:text-destructive flex h-7 w-7 cursor-pointer items-center justify-center rounded-full border shadow-sm transition-colors", children: _jsx(Trash2, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: t('repositoryNode.removeRepository') })] }) }) }), _jsx(Dialog, { open: confirmOpen, onOpenChange: setConfirmOpen, children: _jsxs(DialogContent, { className: "max-w-xs", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: t('repositoryNode.removeConfirmTitle') }), _jsx(DialogDescription, { children: t('repositoryNode.removeConfirmDescription', { name: data.name }) })] }), _jsxs(DialogFooter, { className: "grid grid-cols-2 gap-2 sm:flex-none", children: [_jsx(DialogClose, { asChild: true, children: _jsx(Button, { variant: "outline", children: t('repositoryNode.cancel') }) }), _jsx(Button, { variant: "destructive", onClick: () => {
78
+ }, className: "bg-card text-muted-foreground hover:border-destructive hover:text-destructive flex h-7 w-7 cursor-pointer items-center justify-center rounded-full border shadow-sm transition-colors", children: _jsx(Trash2, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: t('repositoryNode.removeRepository') })] }) }) }), _jsx(Dialog, { open: confirmOpen, onOpenChange: setConfirmOpen, children: _jsxs(DialogContent, { className: "max-w-sm", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: t('repositoryNode.removeConfirmTitle') }), _jsxs(DialogDescription, { children: [_jsx(Trans, { t: t, i18nKey: "repositoryNode.removeConfirmDescription", values: { name: data.name }, components: { strong: _jsx("strong", {}) } }), ' ', deleteFromDisk
79
+ ? t('repositoryNode.removeConfirmDescriptionDeleteFiles')
80
+ : t('repositoryNode.removeConfirmDescriptionKeepFiles')] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Checkbox, { id: "repository-delete-from-disk", checked: deleteFromDisk, onCheckedChange: (checked) => setDeleteFromDisk(checked === true), "data-testid": "repository-node-delete-from-disk-checkbox", "aria-label": t('repositoryNode.deleteFromDiskLabel') }), _jsx(Label, { htmlFor: "repository-delete-from-disk", className: "cursor-pointer text-sm font-normal", children: t('repositoryNode.deleteFromDiskLabel') })] }), _jsxs(DialogFooter, { className: "grid grid-cols-2 gap-2 sm:flex-none", children: [_jsx(DialogClose, { asChild: true, children: _jsx(Button, { variant: "outline", children: t('repositoryNode.cancel') }) }), _jsx(Button, { variant: "destructive", "data-testid": "repository-node-delete-confirm-button", onClick: () => {
72
81
  setConfirmOpen(false);
73
- data.onDelete?.(data.id);
82
+ data.onDelete?.(data.id, { deleteFromDisk });
74
83
  }, children: t('repositoryNode.remove') })] })] }) })] })) : null, _jsxs("div", { role: "button", tabIndex: 0, "data-testid": "repository-node-card", "data-repo-name": data.name, onClick: (e) => {
75
84
  e.stopPropagation();
76
85
  data.onClick?.();
@@ -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":"AA0BA,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,kDAoM9B"}
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":"AA4BA,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,kDAsN9B"}
@@ -1,7 +1,7 @@
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, ExternalLink, } from 'lucide-react';
4
+ import { FolderOpen, FolderPlus, Copy, Check, Loader2, CheckCircle2, AlertCircle, Terminal, ChevronDown, ExternalLink, } from 'lucide-react';
5
5
  import { useTranslation } from 'react-i18next';
6
6
  import { cn } from '../../../lib/utils.js';
7
7
  import { pickFolder } from '../../common/add-repository-button/pick-folder.js';
@@ -11,6 +11,7 @@ import { isAgentSetupComplete } from '../../../app/actions/agent-setup-flag.js';
11
11
  import { checkAgentAuth } from '../../../app/actions/check-agent-auth.js';
12
12
  import { checkToolStatus } from '../../../app/actions/check-tool-status.js';
13
13
  import { WelcomeAgentSetup } from './welcome-agent-setup.js';
14
+ import { NewProjectDialog } from './new-project-dialog.js';
14
15
  const commands = ['cd ~/my-repo', 'shep feat new "sleek dashboard"'];
15
16
  export function ControlCenterEmptyState({ onRepositorySelect, className, }) {
16
17
  const { t } = useTranslation('web');
@@ -21,6 +22,7 @@ export function ControlCenterEmptyState({ onRepositorySelect, className, }) {
21
22
  const [authStatus, setAuthStatus] = useState(null);
22
23
  const [cliExpanded, setCliExpanded] = useState(false);
23
24
  const [toolStatus, setToolStatus] = useState(null);
25
+ const [newProjectOpen, setNewProjectOpen] = useState(false);
24
26
  const { reactFileManager: useReactFileManager } = useFeatureFlags();
25
27
  useEffect(() => {
26
28
  isAgentSetupComplete().then((done) => {
@@ -79,14 +81,14 @@ export function ControlCenterEmptyState({ onRepositorySelect, className, }) {
79
81
  /* Agent setup wizard — owns its own hero */
80
82
  _jsx(WelcomeAgentSetup, { onComplete: handleAgentSetupComplete })) : (
81
83
  /* Repository step — fade in to match wizard transitions */
82
- _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: t('emptyState.addProject') }), _jsxs("p", { className: "text-muted-foreground mt-3 text-center text-lg leading-relaxed font-light", children: [t('emptyState.addProjectDescription'), _jsx("br", {}), t('emptyState.addProjectDescriptionLine2')] }), _jsxs("div", { className: "mt-8 flex w-full flex-col gap-3", children: [_jsx(AgentAuthBanner, { status: authStatus, onRetry: handleRetryAuth }), _jsx(ToolStatusRow, { label: t('emptyState.git'), status: toolStatus?.git ?? null, missingHint: t('emptyState.gitRequired') }), _jsx(ToolStatusRow, { label: t('emptyState.githubCli'), status: toolStatus?.gh ?? null, missingHint: t('emptyState.githubCliRequired') })] }), _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 ? t('emptyState.opening') : t('emptyState.chooseFolder')] }), _jsx("p", { className: "text-muted-foreground/60 mt-3 text-center text-sm", children: t('emptyState.folderHint') })] })), agentReady ? (_jsxs("div", { className: "absolute bottom-8 flex flex-col items-center", style: {
84
+ _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: t('emptyState.addProject') }), _jsxs("p", { className: "text-muted-foreground mt-3 text-center text-lg leading-relaxed font-light", children: [t('emptyState.addProjectDescription'), _jsx("br", {}), t('emptyState.addProjectDescriptionLine2')] }), _jsxs("div", { className: "mt-8 flex w-full flex-col gap-3", children: [_jsx(AgentAuthBanner, { status: authStatus, onRetry: handleRetryAuth }), _jsx(ToolStatusRow, { label: t('emptyState.git'), status: toolStatus?.git ?? null, missingHint: t('emptyState.gitRequired') }), _jsx(ToolStatusRow, { label: t('emptyState.githubCli'), status: toolStatus?.gh ?? null, missingHint: t('emptyState.githubCliRequired') })] }), _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 ? t('emptyState.opening') : t('emptyState.chooseFolder')] }), _jsxs("button", { type: "button", "data-testid": "empty-state-new-project", onClick: () => setNewProjectOpen(true), disabled: loading, className: "border-foreground/15 text-foreground/80 hover:bg-foreground/5 hover:border-foreground/25 mt-3 flex w-full cursor-pointer items-center justify-center gap-2.5 rounded-xl border px-6 py-3.5 text-sm font-medium transition-all duration-200 active:scale-[0.98] disabled:cursor-not-allowed disabled:opacity-50", children: [_jsx(FolderPlus, { className: "h-4 w-4" }), "New Project"] }), _jsx("p", { className: "text-muted-foreground/60 mt-3 text-center text-sm", children: t('emptyState.folderHint') })] })), agentReady ? (_jsxs("div", { className: "absolute bottom-8 flex flex-col items-center", style: {
83
85
  animationDelay: '400ms',
84
86
  animationDuration: '600ms',
85
87
  animationFillMode: 'both',
86
88
  }, children: [_jsxs("button", { type: "button", onClick: () => setCliExpanded(!cliExpanded), className: "text-muted-foreground hover:text-foreground flex cursor-pointer items-center gap-1.5 transition-colors duration-200", children: [_jsx(Terminal, { className: "h-3.5 w-3.5" }), _jsx("span", { className: "text-sm", children: t('emptyState.orUseCli') }), _jsx(ChevronDown, { className: cn('h-3.5 w-3.5 transition-transform duration-200', cliExpanded ? '' : 'rotate-180') })] }), cliExpanded ? (_jsx("div", { className: "animate-in fade-in slide-in-from-top-1 mt-3 w-80 duration-200", children: _jsxs("div", { "data-testid": "cli-code-block", className: "relative rounded-xl bg-zinc-900 px-5 py-4 font-mono text-[13px] leading-relaxed text-zinc-400", children: [_jsx("button", { type: "button", "data-testid": "cli-code-block-copy", onClick: handleCopy, className: "absolute top-3 right-3 cursor-pointer rounded-md p-1.5 text-zinc-600 transition-colors hover:bg-zinc-800 hover:text-zinc-300", "aria-label": t('emptyState.copyCommands'), children: copied ? (_jsx(Check, { className: "h-3.5 w-3.5 text-emerald-400" })) : (_jsx(Copy, { className: "h-3.5 w-3.5" })) }), _jsx("div", { className: "space-y-1", children: commands.map((cmd) => (_jsxs("div", { className: "whitespace-nowrap", children: [_jsx("span", { className: "text-zinc-600 select-none", children: "$ " }), _jsx("span", { className: "text-zinc-300", children: cmd })] }, cmd))) })] }) })) : null] })) : null, _jsx(ReactFileManagerDialog, { open: showReactPicker, onOpenChange: (open) => {
87
89
  if (!open)
88
90
  setShowReactPicker(false);
89
- }, onSelect: handleReactPickerSelect })] }));
91
+ }, onSelect: handleReactPickerSelect }), _jsx(NewProjectDialog, { open: newProjectOpen, onOpenChange: setNewProjectOpen, onCreated: (path) => onRepositorySelect?.(path) })] }));
90
92
  }
91
93
  /** Status row for the AI agent (Claude Code, etc.) */
92
94
  function AgentAuthBanner({ status, onRetry, }) {
@@ -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":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,eAAe,CAAC;AAIpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAgC5E,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,2CAiezF"}
1
+ {"version":3,"file":"control-center-inner.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-inner.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,eAAe,CAAC;AAoBpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAoC5E,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,2CA2iBzF"}