@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
@@ -3,6 +3,7 @@ $id: Language.yaml
3
3
  type: string
4
4
  enum:
5
5
  - en
6
+ - uk
6
7
  - ru
7
8
  - pt
8
9
  - es
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Agent Auth Detector Service Interface
3
+ *
4
+ * Output port for detecting whether the user is authenticated with a given
5
+ * AI coding agent (Claude Code, Cursor, Gemini CLI, Copilot CLI, etc.).
6
+ *
7
+ * Implementations are platform-specific: they may inspect environment
8
+ * variables, credentials files, the macOS Keychain, or call agent-specific
9
+ * `auth status` subcommands. Keeping this behind an output port keeps the
10
+ * application layer free of node:fs / child_process / keychain imports and
11
+ * lets tests substitute a fake.
12
+ */
13
+ import type { AgentType } from '../../../../domain/generated/output.js';
14
+ export interface IAgentAuthDetectorService {
15
+ /**
16
+ * Returns true if the user appears to be authenticated with the given
17
+ * agent. Implementations should be best-effort and conservative: prefer
18
+ * fast heuristics (env vars, file existence) over slow subprocess calls,
19
+ * and tolerate detection failures by returning false rather than throwing.
20
+ */
21
+ isAuthenticated(agentType: AgentType, binaryName: string | null): Promise<boolean>;
22
+ }
23
+ //# sourceMappingURL=agent-auth-detector.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-auth-detector.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/agent-auth-detector.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAExE,MAAM,WAAW,yBAAyB;IACxC;;;;;OAKG;IACH,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACpF"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Agent Auth Detector Service Interface
3
+ *
4
+ * Output port for detecting whether the user is authenticated with a given
5
+ * AI coding agent (Claude Code, Cursor, Gemini CLI, Copilot CLI, etc.).
6
+ *
7
+ * Implementations are platform-specific: they may inspect environment
8
+ * variables, credentials files, the macOS Keychain, or call agent-specific
9
+ * `auth status` subcommands. Keeping this behind an output port keeps the
10
+ * application layer free of node:fs / child_process / keychain imports and
11
+ * lets tests substitute a fake.
12
+ */
13
+ export {};
@@ -0,0 +1,18 @@
1
+ /**
2
+ * File System Service Interface
3
+ *
4
+ * Output port for filesystem mutations performed by use cases.
5
+ * Keeps the application layer free of direct `node:fs` imports.
6
+ */
7
+ export interface IFileSystemService {
8
+ /**
9
+ * Recursively remove a directory and all its contents.
10
+ *
11
+ * Idempotent: succeeds silently if the path does not exist.
12
+ *
13
+ * @param dirPath - Absolute path to the directory to remove
14
+ * @throws Error if removal fails for reasons other than non-existence
15
+ */
16
+ removeDirectory(dirPath: string): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=file-system-service.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-system-service.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/file-system-service.interface.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;OAOG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * File System Service Interface
3
+ *
4
+ * Output port for filesystem mutations performed by use cases.
5
+ * Keeps the application layer free of direct `node:fs` imports.
6
+ */
7
+ export {};
@@ -21,6 +21,9 @@ export type { IGitHubRepositoryService, GitHubRepo, GitHubOrganization, ListUser
21
21
  export { GitHubAuthError, GitHubCloneError, GitHubUrlParseError, GitHubRepoListError, } from './github-repository-service.interface.js';
22
22
  export type { IInteractiveSessionService, StreamChunk, UnsubscribeFn, ChatState, } from './interactive-session-service.interface.js';
23
23
  export type { ISkillInjectorService, SkillInjectionResult } from './skill-injector.interface.js';
24
+ export type { IFileSystemService } from './file-system-service.interface.js';
25
+ export type { IProjectScaffoldService, ScaffoldProjectInput, ScaffoldProjectResult, } from './project-scaffold-service.interface.js';
26
+ export type { IAgentAuthDetectorService } from './agent-auth-detector.interface.js';
24
27
  export type { IDesktopNotifier } from './i-desktop-notifier.js';
25
28
  export type { IBrowserOpener } from './i-browser-opener.js';
26
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAClG,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,uCAAuC,CAAC;AAC/C,YAAY,EACV,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACnF,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACjG,YAAY,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAChF,YAAY,EACV,aAAa,EACb,QAAQ,EACR,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,GACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC3E,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,eAAe,GAChB,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjF,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC9F,YAAY,EACV,wBAAwB,EACxB,UAAU,EACV,kBAAkB,EAClB,2BAA2B,EAC3B,YAAY,EACZ,eAAe,GAChB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,0CAA0C,CAAC;AAClD,YAAY,EACV,0BAA0B,EAC1B,WAAW,EACX,aAAa,EACb,SAAS,GACV,MAAM,4CAA4C,CAAC;AACpD,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACjG,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAClG,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,uCAAuC,CAAC;AAC/C,YAAY,EACV,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACnF,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACjG,YAAY,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAChF,YAAY,EACV,aAAa,EACb,QAAQ,EACR,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,GACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC3E,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,eAAe,GAChB,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjF,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC9F,YAAY,EACV,wBAAwB,EACxB,UAAU,EACV,kBAAkB,EAClB,2BAA2B,EAC3B,YAAY,EACZ,eAAe,GAChB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,0CAA0C,CAAC;AAClD,YAAY,EACV,0BAA0B,EAC1B,WAAW,EACX,aAAa,EACb,SAAS,GACV,MAAM,4CAA4C,CAAC;AACpD,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACjG,YAAY,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,YAAY,EACV,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,yCAAyC,CAAC;AACjD,YAAY,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Project Scaffold Service Interface
3
+ *
4
+ * Output port for creating brand-new project folders on the filesystem.
5
+ * The adapter owns "where projects live" (e.g. $SHEP_HOME/projects) and
6
+ * how they are bootstrapped (mkdir + git init + initial commit) so the
7
+ * application layer stays free of node:fs / child_process imports.
8
+ */
9
+ export interface ScaffoldProjectInput {
10
+ /** Filesystem-safe slug derived from the user-supplied project name. */
11
+ slug: string;
12
+ }
13
+ export interface ScaffoldProjectResult {
14
+ /** Absolute path to the created folder, normalized to forward slashes. */
15
+ path: string;
16
+ }
17
+ export interface IProjectScaffoldService {
18
+ /**
19
+ * Check whether a project folder with the given slug already exists.
20
+ * Used by the use case to fail fast without overwriting user data.
21
+ */
22
+ projectExists(slug: string): Promise<boolean>;
23
+ /**
24
+ * Create the project folder under the configured projects root, initialise
25
+ * git, and commit an empty initial commit so the canvas can resolve a real
26
+ * HEAD immediately. Implementations should be cross-platform safe.
27
+ *
28
+ * @throws Error if the directory cannot be created. Git init failures
29
+ * should be tolerated (the folder still exists) but logged.
30
+ */
31
+ scaffoldProject(input: ScaffoldProjectInput): Promise<ScaffoldProjectResult>;
32
+ }
33
+ //# sourceMappingURL=project-scaffold-service.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-scaffold-service.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/project-scaffold-service.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,oBAAoB;IACnC,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9C;;;;;;;OAOG;IACH,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAC9E"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Project Scaffold Service Interface
3
+ *
4
+ * Output port for creating brand-new project folders on the filesystem.
5
+ * The adapter owns "where projects live" (e.g. $SHEP_HOME/projects) and
6
+ * how they are bootstrapped (mkdir + git init + initial commit) so the
7
+ * application layer stays free of node:fs / child_process imports.
8
+ */
9
+ export {};
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Check Agent Auth Use Case
3
+ *
4
+ * Reports the install + auth status of the currently selected AI coding
5
+ * agent. Used by the onboarding empty state to drive the "Ready / Not
6
+ * installed / Needs auth" checklist.
7
+ *
8
+ * Owns:
9
+ * - Reading the active agent type from settings
10
+ * - Mapping agent type → user-facing label, tool id, binary name
11
+ * - Looking up tool installation status via ListToolsUseCase
12
+ * - Delegating credential detection to IAgentAuthDetectorService
13
+ *
14
+ * Presentation-agnostic: callable from CLI, TUI, and Web identically.
15
+ * The shape returned mirrors what the web UI consumes today; CLI/TUI may
16
+ * project a subset.
17
+ */
18
+ import type { IAgentAuthDetectorService } from '../../ports/output/services/agent-auth-detector.interface.js';
19
+ import { ListToolsUseCase } from '../tools/list-tools.use-case.js';
20
+ export interface CheckAgentAuthResult {
21
+ /** Raw agent type string (matches AgentType enum values, or 'unknown'). */
22
+ agentType: string;
23
+ /** Whether the CLI tool binary is installed. */
24
+ installed: boolean;
25
+ /** Whether credentials / auth appear valid. */
26
+ authenticated: boolean;
27
+ /** Human-readable label for the agent (e.g. "Claude Code"). */
28
+ label: string;
29
+ /** CLI binary name (e.g. "claude", "gemini"). */
30
+ binaryName: string | null;
31
+ /** Shell command to install the tool, resolved for the current platform. */
32
+ installCommand: string | null;
33
+ /** Hint to show the user when not authenticated (typically the binary name). */
34
+ authCommand: string | null;
35
+ }
36
+ export declare class CheckAgentAuthUseCase {
37
+ private readonly listToolsUseCase;
38
+ private readonly authDetector;
39
+ constructor(listToolsUseCase: ListToolsUseCase, authDetector: IAgentAuthDetectorService);
40
+ execute(): Promise<CheckAgentAuthResult>;
41
+ }
42
+ //# sourceMappingURL=check-agent-auth.use-case.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-agent-auth.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/agents/check-agent-auth.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,8DAA8D,CAAC;AAC9G,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,MAAM,WAAW,oBAAoB;IACnC,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,aAAa,EAAE,OAAO,CAAC;IACvB,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,4EAA4E;IAC5E,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gFAAgF;IAChF,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAuCD,qBACa,qBAAqB;IAEJ,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAE3D,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAFc,gBAAgB,EAAE,gBAAgB,EAE5D,YAAY,EAAE,yBAAyB;IAGpD,OAAO,IAAI,OAAO,CAAC,oBAAoB,CAAC;CAkE/C"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Check Agent Auth Use Case
3
+ *
4
+ * Reports the install + auth status of the currently selected AI coding
5
+ * agent. Used by the onboarding empty state to drive the "Ready / Not
6
+ * installed / Needs auth" checklist.
7
+ *
8
+ * Owns:
9
+ * - Reading the active agent type from settings
10
+ * - Mapping agent type → user-facing label, tool id, binary name
11
+ * - Looking up tool installation status via ListToolsUseCase
12
+ * - Delegating credential detection to IAgentAuthDetectorService
13
+ *
14
+ * Presentation-agnostic: callable from CLI, TUI, and Web identically.
15
+ * The shape returned mirrors what the web UI consumes today; CLI/TUI may
16
+ * project a subset.
17
+ */
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __metadata = (this && this.__metadata) || function (k, v) {
25
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
26
+ };
27
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
28
+ return function (target, key) { decorator(target, key, paramIndex); }
29
+ };
30
+ import { injectable, inject } from 'tsyringe';
31
+ import { AgentType } from '../../../domain/generated/output.js';
32
+ import { getSettings } from '../../../infrastructure/services/settings.service.js';
33
+ import { ListToolsUseCase } from '../tools/list-tools.use-case.js';
34
+ /**
35
+ * Co-located metadata table — pure facts about each AgentType. Lives in
36
+ * the use case because it is the only consumer that needs all three pieces
37
+ * (label + tool id + binary) wired together.
38
+ */
39
+ const AGENT_METADATA = {
40
+ [AgentType.ClaudeCode]: {
41
+ label: 'Claude Code',
42
+ toolId: 'claude-code',
43
+ binaryName: 'claude',
44
+ },
45
+ [AgentType.Cursor]: { label: 'Cursor Agent', toolId: 'cursor-cli', binaryName: 'cursor-agent' },
46
+ [AgentType.GeminiCli]: { label: 'Gemini CLI', toolId: 'gemini-cli', binaryName: 'gemini' },
47
+ [AgentType.CopilotCli]: { label: 'Copilot CLI', toolId: 'copilot-cli', binaryName: 'copilot' },
48
+ [AgentType.Aider]: { label: 'Aider', toolId: null, binaryName: null },
49
+ [AgentType.Continue]: { label: 'Continue', toolId: null, binaryName: null },
50
+ [AgentType.Dev]: { label: 'Demo', toolId: null, binaryName: null },
51
+ };
52
+ const UNKNOWN_RESULT = {
53
+ agentType: 'unknown',
54
+ installed: false,
55
+ authenticated: false,
56
+ label: 'Unknown',
57
+ binaryName: null,
58
+ installCommand: null,
59
+ authCommand: null,
60
+ };
61
+ let CheckAgentAuthUseCase = class CheckAgentAuthUseCase {
62
+ listToolsUseCase;
63
+ authDetector;
64
+ constructor(listToolsUseCase, authDetector) {
65
+ this.listToolsUseCase = listToolsUseCase;
66
+ this.authDetector = authDetector;
67
+ }
68
+ async execute() {
69
+ let agentType;
70
+ try {
71
+ agentType = getSettings().agent.type;
72
+ }
73
+ catch {
74
+ return UNKNOWN_RESULT;
75
+ }
76
+ const metadata = AGENT_METADATA[agentType];
77
+ if (!metadata) {
78
+ return { ...UNKNOWN_RESULT, agentType };
79
+ }
80
+ // Agents with no associated tool (dev/demo, aider, continue) — assume ready.
81
+ if (!metadata.toolId) {
82
+ return {
83
+ agentType,
84
+ installed: true,
85
+ authenticated: true,
86
+ label: metadata.label,
87
+ binaryName: metadata.binaryName,
88
+ installCommand: null,
89
+ authCommand: null,
90
+ };
91
+ }
92
+ // Resolve installation status from the tool catalogue.
93
+ let installed = false;
94
+ let installCommand = null;
95
+ try {
96
+ const tools = await this.listToolsUseCase.execute();
97
+ const tool = tools.find((t) => t.id === metadata.toolId);
98
+ installed = tool?.status.status === 'available';
99
+ installCommand = tool?.installCommand ?? null;
100
+ }
101
+ catch {
102
+ installed = false;
103
+ }
104
+ if (!installed) {
105
+ return {
106
+ agentType,
107
+ installed: false,
108
+ authenticated: false,
109
+ label: metadata.label,
110
+ binaryName: metadata.binaryName,
111
+ installCommand,
112
+ authCommand: metadata.binaryName ? `Install ${metadata.label} first` : null,
113
+ };
114
+ }
115
+ // Tool is installed — defer credential detection to the platform adapter.
116
+ const authenticated = await this.authDetector.isAuthenticated(agentType, metadata.binaryName);
117
+ return {
118
+ agentType,
119
+ installed: true,
120
+ authenticated,
121
+ label: metadata.label,
122
+ binaryName: metadata.binaryName,
123
+ installCommand,
124
+ authCommand: authenticated ? null : metadata.binaryName,
125
+ };
126
+ }
127
+ };
128
+ CheckAgentAuthUseCase = __decorate([
129
+ injectable(),
130
+ __param(0, inject(ListToolsUseCase)),
131
+ __param(1, inject('IAgentAuthDetectorService')),
132
+ __metadata("design:paramtypes", [ListToolsUseCase, Object])
133
+ ], CheckAgentAuthUseCase);
134
+ export { CheckAgentAuthUseCase };
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Create Project Use Case
3
+ *
4
+ * Orchestrates "create a new empty project folder under the Shep projects
5
+ * root". Owns the project naming rules (validation, slugification, length
6
+ * cap) and the "must not already exist" guard. Delegates filesystem and git
7
+ * work to IProjectScaffoldService so the application layer remains free of
8
+ * node:fs / child_process imports.
9
+ *
10
+ * Presentation-agnostic: callable from CLI, TUI, and Web identically.
11
+ */
12
+ import type { IProjectScaffoldService } from '../../ports/output/services/project-scaffold-service.interface.js';
13
+ export interface CreateProjectInput {
14
+ /** User-supplied project name. Will be slugified for the directory name. */
15
+ name: string;
16
+ }
17
+ export interface CreateProjectSuccess {
18
+ ok: true;
19
+ /** Absolute path to the created folder, normalized to forward slashes. */
20
+ path: string;
21
+ }
22
+ export interface CreateProjectFailure {
23
+ ok: false;
24
+ error: string;
25
+ }
26
+ export type CreateProjectResult = CreateProjectSuccess | CreateProjectFailure;
27
+ /**
28
+ * Slugify a user-supplied project name into a safe directory name.
29
+ *
30
+ * - Lowercases
31
+ * - Replaces whitespace + invalid chars with `-`
32
+ * - Strips leading/trailing dashes and dots
33
+ * - Caps length so we stay well under Windows' 260-char path limit
34
+ *
35
+ * Exported for unit testing — production callers should use the use case.
36
+ */
37
+ export declare function slugifyProjectName(name: string): string;
38
+ export declare class CreateProjectUseCase {
39
+ private readonly scaffoldService;
40
+ constructor(scaffoldService: IProjectScaffoldService);
41
+ execute(input: CreateProjectInput): Promise<CreateProjectResult>;
42
+ }
43
+ //# sourceMappingURL=create-project.use-case.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-project.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/projects/create-project.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mEAAmE,CAAC;AAEjH,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,IAAI,CAAC;IACT,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,GAAG,oBAAoB,CAAC;AAE9E;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQvD;AAED,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,EAAE,uBAAuB;IAGrD,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CA+BvE"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Create Project Use Case
3
+ *
4
+ * Orchestrates "create a new empty project folder under the Shep projects
5
+ * root". Owns the project naming rules (validation, slugification, length
6
+ * cap) and the "must not already exist" guard. Delegates filesystem and git
7
+ * work to IProjectScaffoldService so the application layer remains free of
8
+ * node:fs / child_process imports.
9
+ *
10
+ * Presentation-agnostic: callable from CLI, TUI, and Web identically.
11
+ */
12
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
13
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
14
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
15
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
16
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
17
+ };
18
+ var __metadata = (this && this.__metadata) || function (k, v) {
19
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
20
+ };
21
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
22
+ return function (target, key) { decorator(target, key, paramIndex); }
23
+ };
24
+ import { injectable, inject } from 'tsyringe';
25
+ /**
26
+ * Slugify a user-supplied project name into a safe directory name.
27
+ *
28
+ * - Lowercases
29
+ * - Replaces whitespace + invalid chars with `-`
30
+ * - Strips leading/trailing dashes and dots
31
+ * - Caps length so we stay well under Windows' 260-char path limit
32
+ *
33
+ * Exported for unit testing — production callers should use the use case.
34
+ */
35
+ export function slugifyProjectName(name) {
36
+ const cleaned = name
37
+ .trim()
38
+ .toLowerCase()
39
+ .replace(/[^a-z0-9._-]+/g, '-')
40
+ .replace(/-+/g, '-')
41
+ .replace(/^[-.]+|[-.]+$/g, '');
42
+ return cleaned.slice(0, 64);
43
+ }
44
+ let CreateProjectUseCase = class CreateProjectUseCase {
45
+ scaffoldService;
46
+ constructor(scaffoldService) {
47
+ this.scaffoldService = scaffoldService;
48
+ }
49
+ async execute(input) {
50
+ const trimmed = input.name.trim();
51
+ if (!trimmed) {
52
+ return { ok: false, error: 'Project name is required.' };
53
+ }
54
+ const slug = slugifyProjectName(trimmed);
55
+ if (!slug) {
56
+ return {
57
+ ok: false,
58
+ error: 'Project name must contain at least one letter or number.',
59
+ };
60
+ }
61
+ if (await this.scaffoldService.projectExists(slug)) {
62
+ return {
63
+ ok: false,
64
+ error: `A project named "${slug}" already exists. Pick a different name.`,
65
+ };
66
+ }
67
+ try {
68
+ const result = await this.scaffoldService.scaffoldProject({ slug });
69
+ return { ok: true, path: result.path };
70
+ }
71
+ catch (err) {
72
+ return {
73
+ ok: false,
74
+ error: err instanceof Error ? err.message : 'Failed to create project folder.',
75
+ };
76
+ }
77
+ }
78
+ };
79
+ CreateProjectUseCase = __decorate([
80
+ injectable(),
81
+ __param(0, inject('IProjectScaffoldService')),
82
+ __metadata("design:paramtypes", [Object])
83
+ ], CreateProjectUseCase);
84
+ export { CreateProjectUseCase };
@@ -4,15 +4,26 @@
4
4
  * Deletes a Repository and all its child features.
5
5
  * Each feature is properly cleaned up (agent runs cancelled, worktrees removed)
6
6
  * via DeleteFeatureUseCase before the repository is soft-deleted.
7
+ *
8
+ * Optionally removes the repository directory from disk when
9
+ * {@link DeleteRepositoryOptions.deleteFromDisk} is true. The DB soft-delete
10
+ * always runs first so the repository disappears from queries even if the
11
+ * filesystem removal fails.
7
12
  */
8
13
  import type { IRepositoryRepository } from '../../ports/output/repositories/repository-repository.interface.js';
9
14
  import type { IFeatureRepository } from '../../ports/output/repositories/feature-repository.interface.js';
15
+ import type { IFileSystemService } from '../../ports/output/services/file-system-service.interface.js';
10
16
  import { DeleteFeatureUseCase } from '../features/delete-feature.use-case.js';
17
+ export interface DeleteRepositoryOptions {
18
+ /** When true, recursively remove the repository directory from disk. */
19
+ deleteFromDisk?: boolean;
20
+ }
11
21
  export declare class DeleteRepositoryUseCase {
12
22
  private readonly repositoryRepo;
13
23
  private readonly featureRepo;
14
24
  private readonly deleteFeature;
15
- constructor(repositoryRepo: IRepositoryRepository, featureRepo: IFeatureRepository, deleteFeature: DeleteFeatureUseCase);
16
- execute(id: string): Promise<void>;
25
+ private readonly fileSystem;
26
+ constructor(repositoryRepo: IRepositoryRepository, featureRepo: IFeatureRepository, deleteFeature: DeleteFeatureUseCase, fileSystem: IFileSystemService);
27
+ execute(id: string, options?: DeleteRepositoryOptions): Promise<void>;
17
28
  }
18
29
  //# sourceMappingURL=delete-repository.use-case.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delete-repository.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/repositories/delete-repository.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oEAAoE,CAAC;AAChH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAE9E,qBACa,uBAAuB;IAGhC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAJb,cAAc,EAAE,qBAAqB,EAErC,WAAW,EAAE,kBAAkB,EAE/B,aAAa,EAAE,oBAAoB;IAGhD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBzC"}
1
+ {"version":3,"file":"delete-repository.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/repositories/delete-repository.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oEAAoE,CAAC;AAChH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8DAA8D,CAAC;AACvG,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAE9E,MAAM,WAAW,uBAAuB;IACtC,wEAAwE;IACxE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,qBACa,uBAAuB;IAGhC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,UAAU;gBANV,cAAc,EAAE,qBAAqB,EAErC,WAAW,EAAE,kBAAkB,EAE/B,aAAa,EAAE,oBAAoB,EAEnC,UAAU,EAAE,kBAAkB;IAG3C,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;CAsB5E"}
@@ -4,6 +4,11 @@
4
4
  * Deletes a Repository and all its child features.
5
5
  * Each feature is properly cleaned up (agent runs cancelled, worktrees removed)
6
6
  * via DeleteFeatureUseCase before the repository is soft-deleted.
7
+ *
8
+ * Optionally removes the repository directory from disk when
9
+ * {@link DeleteRepositoryOptions.deleteFromDisk} is true. The DB soft-delete
10
+ * always runs first so the repository disappears from queries even if the
11
+ * filesystem removal fails.
7
12
  */
8
13
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
9
14
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -23,12 +28,14 @@ let DeleteRepositoryUseCase = class DeleteRepositoryUseCase {
23
28
  repositoryRepo;
24
29
  featureRepo;
25
30
  deleteFeature;
26
- constructor(repositoryRepo, featureRepo, deleteFeature) {
31
+ fileSystem;
32
+ constructor(repositoryRepo, featureRepo, deleteFeature, fileSystem) {
27
33
  this.repositoryRepo = repositoryRepo;
28
34
  this.featureRepo = featureRepo;
29
35
  this.deleteFeature = deleteFeature;
36
+ this.fileSystem = fileSystem;
30
37
  }
31
- async execute(id) {
38
+ async execute(id, options) {
32
39
  const repository = await this.repositoryRepo.findById(id);
33
40
  if (!repository) {
34
41
  throw new Error(`Repository not found: "${id}"`);
@@ -43,6 +50,9 @@ let DeleteRepositoryUseCase = class DeleteRepositoryUseCase {
43
50
  await this.deleteFeature.execute(feature.id);
44
51
  }
45
52
  await this.repositoryRepo.softDelete(id);
53
+ if (options?.deleteFromDisk) {
54
+ await this.fileSystem.removeDirectory(repository.path);
55
+ }
46
56
  }
47
57
  };
48
58
  DeleteRepositoryUseCase = __decorate([
@@ -50,6 +60,7 @@ DeleteRepositoryUseCase = __decorate([
50
60
  __param(0, inject('IRepositoryRepository')),
51
61
  __param(1, inject('IFeatureRepository')),
52
62
  __param(2, inject(DeleteFeatureUseCase)),
53
- __metadata("design:paramtypes", [Object, Object, DeleteFeatureUseCase])
63
+ __param(3, inject('IFileSystemService')),
64
+ __metadata("design:paramtypes", [Object, Object, DeleteFeatureUseCase, Object])
54
65
  ], DeleteRepositoryUseCase);
55
66
  export { DeleteRepositoryUseCase };
@@ -1 +1 @@
1
- {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/di/container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AA2JrC;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,SAAS,CAAC,CA4crE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/di/container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAmKrC;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,SAAS,CAAC,CA6drE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -21,6 +21,9 @@ import { execFile } from 'node:child_process';
21
21
  import { IS_WINDOWS } from '../platform.js';
22
22
  import { VersionService } from '../services/version.service.js';
23
23
  import { WorktreeService } from '../services/git/worktree.service.js';
24
+ import { FileSystemService } from '../services/file-system.service.js';
25
+ import { FsProjectScaffoldService } from '../services/project-scaffold/fs-project-scaffold.service.js';
26
+ import { PlatformAgentAuthDetectorService } from '../services/agent-auth-detector/platform-agent-auth-detector.service.js';
24
27
  import { ToolInstallerServiceImpl } from '../services/tool-installer/tool-installer.service.js';
25
28
  import { GitPrService } from '../services/git/git-pr.service.js';
26
29
  import { GitForkService } from '../services/git/git-fork.service.js';
@@ -80,6 +83,8 @@ import { ListToolsUseCase } from '../../application/use-cases/tools/list-tools.u
80
83
  import { LaunchToolUseCase } from '../../application/use-cases/tools/launch-tool.use-case.js';
81
84
  import { LaunchIdeUseCase } from '../../application/use-cases/ide/launch-ide.use-case.js';
82
85
  import { AddRepositoryUseCase } from '../../application/use-cases/repositories/add-repository.use-case.js';
86
+ import { CreateProjectUseCase } from '../../application/use-cases/projects/create-project.use-case.js';
87
+ import { CheckAgentAuthUseCase } from '../../application/use-cases/agents/check-agent-auth.use-case.js';
83
88
  import { ListRepositoriesUseCase } from '../../application/use-cases/repositories/list-repositories.use-case.js';
84
89
  import { DeleteRepositoryUseCase } from '../../application/use-cases/repositories/delete-repository.use-case.js';
85
90
  import { ImportGitHubRepositoryUseCase } from '../../application/use-cases/repositories/import-github-repository.use-case.js';
@@ -191,6 +196,9 @@ export async function initializeContainer() {
191
196
  },
192
197
  });
193
198
  container.registerSingleton('IWorktreeService', WorktreeService);
199
+ container.registerSingleton('IFileSystemService', FileSystemService);
200
+ container.registerSingleton('IProjectScaffoldService', FsProjectScaffoldService);
201
+ container.registerSingleton('IAgentAuthDetectorService', PlatformAgentAuthDetectorService);
194
202
  container.registerSingleton('ISkillInjectorService', SkillInjectorService);
195
203
  container.registerSingleton('IToolInstallerService', ToolInstallerServiceImpl);
196
204
  container.registerSingleton('IGitPrService', GitPrService);
@@ -327,6 +335,8 @@ export async function initializeContainer() {
327
335
  container.registerSingleton(LaunchToolUseCase);
328
336
  container.registerSingleton(LaunchIdeUseCase);
329
337
  container.registerSingleton(AddRepositoryUseCase);
338
+ container.registerSingleton(CreateProjectUseCase);
339
+ container.registerSingleton(CheckAgentAuthUseCase);
330
340
  container.registerSingleton(ListRepositoriesUseCase);
331
341
  container.registerSingleton(DeleteRepositoryUseCase);
332
342
  container.registerSingleton(ImportGitHubRepositoryUseCase);
@@ -428,6 +438,12 @@ export async function initializeContainer() {
428
438
  container.register('AddRepositoryUseCase', {
429
439
  useFactory: (c) => c.resolve(AddRepositoryUseCase),
430
440
  });
441
+ container.register('CreateProjectUseCase', {
442
+ useFactory: (c) => c.resolve(CreateProjectUseCase),
443
+ });
444
+ container.register('CheckAgentAuthUseCase', {
445
+ useFactory: (c) => c.resolve(CheckAgentAuthUseCase),
446
+ });
431
447
  container.register('ListRepositoriesUseCase', {
432
448
  useFactory: (c) => c.resolve(ListRepositoriesUseCase),
433
449
  });
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Platform Agent Auth Detector Service
3
+ *
4
+ * Concrete adapter for IAgentAuthDetectorService. Detects whether the user
5
+ * is authenticated with a given AI coding agent using a two-tier strategy:
6
+ *
7
+ * Tier 1 (instant, ~5ms): env vars + credentials file existence + macOS
8
+ * Keychain entry. No subprocess.
9
+ *
10
+ * Tier 2 (subprocess, ~200ms): runs the agent's `auth status` subcommand
11
+ * when one exists. Skipped for Claude Code (no non-interactive auth
12
+ * subcommand — interactive `claude auth status` hangs and gets killed).
13
+ *
14
+ * Conservative by design: any detection failure returns false rather than
15
+ * throwing, so the UI can show "needs auth" instead of crashing.
16
+ *
17
+ * Cross-platform: macOS uses Keychain via `security`, Linux/Windows fall
18
+ * back to the file-based credential location.
19
+ */
20
+ import { AgentType } from '../../../domain/generated/output.js';
21
+ import type { IAgentAuthDetectorService } from '../../../application/ports/output/services/agent-auth-detector.interface.js';
22
+ export declare class PlatformAgentAuthDetectorService implements IAgentAuthDetectorService {
23
+ isAuthenticated(agentType: AgentType, binaryName: string | null): Promise<boolean>;
24
+ /**
25
+ * Instant credential/env check (~5ms, no subprocess).
26
+ * Returns true if credentials likely exist for this agent type.
27
+ */
28
+ private tier1AuthCheck;
29
+ /**
30
+ * Subprocess verification (~200ms). Only called if tier 1 passes, to
31
+ * confirm tokens aren't expired.
32
+ */
33
+ private tier2AuthVerify;
34
+ }
35
+ //# sourceMappingURL=platform-agent-auth-detector.service.d.ts.map