@shepai/cli 1.127.3-pr401.eb52cb4 → 1.127.3

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 (385) hide show
  1. package/apis/json-schema/EnvironmentConfig.yaml +0 -3
  2. package/apis/json-schema/FeatureFlags.yaml +0 -5
  3. package/apis/json-schema/Repository.yaml +0 -3
  4. package/dist/packages/core/src/application/ports/output/repositories/repository-repository.interface.d.ts +0 -4
  5. package/dist/packages/core/src/application/ports/output/repositories/repository-repository.interface.d.ts.map +1 -1
  6. package/dist/packages/core/src/application/ports/output/services/index.d.ts +0 -2
  7. package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
  8. package/dist/packages/core/src/application/ports/output/services/index.js +0 -1
  9. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  10. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +0 -2
  11. package/dist/packages/core/src/domain/generated/output.d.ts +0 -12
  12. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  13. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  14. package/dist/packages/core/src/infrastructure/di/container.js +0 -12
  15. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/repository.mapper.d.ts +0 -1
  16. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/repository.mapper.d.ts.map +1 -1
  17. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/repository.mapper.js +0 -2
  18. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +0 -1
  19. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  20. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +0 -2
  21. package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.d.ts +0 -3
  22. package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.d.ts.map +1 -1
  23. package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.js +2 -38
  24. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
  25. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +2 -3
  26. package/dist/src/presentation/cli/commands/repo/index.d.ts +0 -1
  27. package/dist/src/presentation/cli/commands/repo/index.d.ts.map +1 -1
  28. package/dist/src/presentation/cli/commands/repo/index.js +1 -4
  29. package/dist/src/presentation/web/app/(dashboard)/@drawer/repository/[repositoryId]/page.d.ts.map +1 -1
  30. package/dist/src/presentation/web/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -14
  31. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.d.ts +0 -2
  32. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.d.ts.map +1 -1
  33. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.js +1 -1
  34. package/dist/src/presentation/web/components/common/add-repository-button/add-repository-button.d.ts +3 -4
  35. package/dist/src/presentation/web/components/common/add-repository-button/add-repository-button.d.ts.map +1 -1
  36. package/dist/src/presentation/web/components/common/add-repository-button/add-repository-button.js +5 -22
  37. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.d.ts.map +1 -1
  38. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.js +3 -20
  39. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.d.ts.map +1 -1
  40. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.js +2 -19
  41. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts +0 -5
  42. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts.map +1 -1
  43. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.js +9 -38
  44. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts.map +1 -1
  45. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js +1 -9
  46. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +1 -1
  47. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.js +0 -3
  48. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  49. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +0 -5
  50. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
  51. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +0 -1
  52. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
  53. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +27 -56
  54. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
  55. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +1 -7
  56. package/dist/src/presentation/web/hooks/feature-flags-context.d.ts.map +1 -1
  57. package/dist/src/presentation/web/hooks/feature-flags-context.js +0 -1
  58. package/dist/src/presentation/web/lib/feature-flags.d.ts +0 -2
  59. package/dist/src/presentation/web/lib/feature-flags.d.ts.map +1 -1
  60. package/dist/src/presentation/web/lib/feature-flags.js +0 -5
  61. package/dist/tsconfig.build.tsbuildinfo +1 -1
  62. package/package.json +1 -1
  63. package/web/.next/BUILD_ID +1 -1
  64. package/web/.next/build-manifest.json +2 -2
  65. package/web/.next/fallback-build-manifest.json +2 -2
  66. package/web/.next/prerender-manifest.json +3 -3
  67. package/web/.next/required-server-files.js +3 -3
  68. package/web/.next/required-server-files.json +3 -3
  69. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +44 -74
  70. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +4 -4
  71. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  72. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  73. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +44 -74
  74. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +4 -4
  75. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  76. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  77. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +56 -86
  78. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +4 -4
  79. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  80. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  81. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +56 -86
  82. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +4 -4
  83. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  84. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  85. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +40 -70
  86. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +4 -4
  87. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  88. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  89. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +44 -74
  90. package/web/.next/server/app/(dashboard)/create/page.js +4 -4
  91. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  92. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  93. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +56 -86
  94. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +4 -4
  95. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  96. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  97. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +56 -86
  98. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +4 -4
  99. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  100. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  101. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +40 -70
  102. package/web/.next/server/app/(dashboard)/page.js +4 -4
  103. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  104. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  105. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +40 -70
  106. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +4 -4
  107. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  108. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  109. package/web/.next/server/app/_global-error.html +2 -2
  110. package/web/.next/server/app/_global-error.rsc +1 -1
  111. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  112. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  113. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  114. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  115. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  116. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +2 -32
  117. package/web/.next/server/app/_not-found/page.js +1 -1
  118. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  119. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  120. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  121. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  122. package/web/.next/server/app/api/graph-data/route.js +1 -1
  123. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  124. package/web/.next/server/app/settings/page/server-reference-manifest.json +12 -42
  125. package/web/.next/server/app/settings/page.js +2 -2
  126. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  127. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  128. package/web/.next/server/app/skills/page/server-reference-manifest.json +12 -42
  129. package/web/.next/server/app/skills/page.js +1 -2
  130. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  131. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  132. package/web/.next/server/app/tools/page/server-reference-manifest.json +12 -42
  133. package/web/.next/server/app/tools/page.js +1 -2
  134. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  135. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  136. package/web/.next/server/app/version/page/server-reference-manifest.json +2 -32
  137. package/web/.next/server/app/version/page.js +2 -2
  138. package/web/.next/server/app/version/page.js.nft.json +1 -1
  139. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  140. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  141. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  142. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  143. package/web/.next/server/chunks/{[root-of-the-server]__693510ee._.js → [root-of-the-server]__dcd4f847._.js} +2 -2
  144. package/web/.next/server/chunks/[root-of-the-server]__dcd4f847._.js.map +1 -0
  145. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_fbb88113.js +3 -0
  146. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_fbb88113.js.map +1 -0
  147. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  148. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  149. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_fdfbf5cc.js +3 -0
  150. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_fdfbf5cc.js.map +1 -0
  151. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_d8fa0b5f.js +3 -0
  152. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_d8fa0b5f.js.map +1 -0
  153. package/web/.next/server/chunks/ssr/[root-of-the-server]__02c84e6b._.js +3 -0
  154. package/web/.next/server/chunks/ssr/[root-of-the-server]__02c84e6b._.js.map +1 -0
  155. package/web/.next/server/chunks/ssr/[root-of-the-server]__06fef644._.js +3 -0
  156. package/web/.next/server/chunks/ssr/[root-of-the-server]__06fef644._.js.map +1 -0
  157. package/web/.next/server/chunks/ssr/{[root-of-the-server]__755cfe02._.js → [root-of-the-server]__1aa034e9._.js} +2 -2
  158. package/web/.next/server/chunks/ssr/{[root-of-the-server]__c3ab8422._.js.map → [root-of-the-server]__1aa034e9._.js.map} +1 -1
  159. package/web/.next/server/chunks/ssr/[root-of-the-server]__23b5ca2c._.js +1 -1
  160. package/web/.next/server/chunks/ssr/[root-of-the-server]__23b5ca2c._.js.map +1 -1
  161. package/web/.next/server/chunks/ssr/[root-of-the-server]__34323a67._.js +3 -0
  162. package/web/.next/server/chunks/ssr/[root-of-the-server]__34323a67._.js.map +1 -0
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__357de47c._.js +4 -0
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__357de47c._.js.map +1 -0
  165. package/web/.next/server/chunks/ssr/{[root-of-the-server]__c3ab8422._.js → [root-of-the-server]__430169b6._.js} +2 -2
  166. package/web/.next/server/chunks/ssr/{[root-of-the-server]__755cfe02._.js.map → [root-of-the-server]__430169b6._.js.map} +1 -1
  167. package/web/.next/server/chunks/ssr/[root-of-the-server]__67fe07fe._.js +4 -0
  168. package/web/.next/server/chunks/ssr/[root-of-the-server]__67fe07fe._.js.map +1 -0
  169. package/web/.next/server/chunks/ssr/[root-of-the-server]__68c2d48e._.js +3 -0
  170. package/web/.next/server/chunks/ssr/[root-of-the-server]__68c2d48e._.js.map +1 -0
  171. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +4 -0
  172. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -0
  173. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +2 -2
  174. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -1
  175. package/web/.next/server/chunks/ssr/{[root-of-the-server]__a628fb91._.js → [root-of-the-server]__6cc70784._.js} +2 -2
  176. package/web/.next/server/chunks/ssr/{[root-of-the-server]__bfba58e6._.js.map → [root-of-the-server]__6cc70784._.js.map} +1 -1
  177. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +4 -0
  178. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -0
  179. package/web/.next/server/chunks/ssr/[root-of-the-server]__8c553503._.js +4 -0
  180. package/web/.next/server/chunks/ssr/[root-of-the-server]__8c553503._.js.map +1 -0
  181. package/web/.next/server/chunks/ssr/[root-of-the-server]__a50a7e39._.js +4 -0
  182. package/web/.next/server/chunks/ssr/[root-of-the-server]__a50a7e39._.js.map +1 -0
  183. package/web/.next/server/chunks/ssr/{[root-of-the-server]__bfba58e6._.js → [root-of-the-server]__e44ae5ca._.js} +2 -2
  184. package/web/.next/server/chunks/ssr/{[root-of-the-server]__a628fb91._.js.map → [root-of-the-server]__e44ae5ca._.js.map} +1 -1
  185. package/web/.next/server/chunks/ssr/_1bb79fe8._.js +3 -0
  186. package/web/.next/server/chunks/ssr/_1bb79fe8._.js.map +1 -0
  187. package/web/.next/server/chunks/ssr/{_02ec1aea._.js → _2f6f48b8._.js} +2 -2
  188. package/web/.next/server/chunks/ssr/{_02ec1aea._.js.map → _2f6f48b8._.js.map} +1 -1
  189. package/web/.next/server/chunks/ssr/{_d4c49d8a._.js → _4207f708._.js} +2 -2
  190. package/web/.next/server/chunks/ssr/_4207f708._.js.map +1 -0
  191. package/web/.next/server/chunks/ssr/_583a83fb._.js +3 -0
  192. package/web/.next/server/chunks/ssr/_583a83fb._.js.map +1 -0
  193. package/web/.next/server/chunks/ssr/_7dca1882._.js +1 -1
  194. package/web/.next/server/chunks/ssr/_7dca1882._.js.map +1 -1
  195. package/web/.next/server/chunks/ssr/{_0020fddd._.js → _918887c5._.js} +2 -2
  196. package/web/.next/server/chunks/ssr/_918887c5._.js.map +1 -0
  197. package/web/.next/server/chunks/ssr/_9f56cf8f._.js +3 -0
  198. package/web/.next/server/chunks/ssr/_9f56cf8f._.js.map +1 -0
  199. package/web/.next/server/chunks/ssr/_a187fd7e._.js +3 -0
  200. package/web/.next/server/chunks/ssr/_a187fd7e._.js.map +1 -0
  201. package/web/.next/server/chunks/ssr/_a37f5f18._.js +1 -1
  202. package/web/.next/server/chunks/ssr/_a37f5f18._.js.map +1 -1
  203. package/web/.next/server/chunks/ssr/_a5aa6371._.js +9 -0
  204. package/web/.next/server/chunks/ssr/_a5aa6371._.js.map +1 -0
  205. package/web/.next/server/chunks/ssr/_a9f57758._.js +1 -1
  206. package/web/.next/server/chunks/ssr/_b730ac57._.js +3 -0
  207. package/web/.next/server/chunks/ssr/_b730ac57._.js.map +1 -0
  208. package/web/.next/server/chunks/ssr/_d4b20e29._.js.map +1 -1
  209. package/web/.next/server/chunks/ssr/_f39a1adb._.js +1 -1
  210. package/web/.next/server/chunks/ssr/_f39a1adb._.js.map +1 -1
  211. package/web/.next/server/chunks/ssr/_fae9e550._.js +3 -0
  212. package/web/.next/server/chunks/ssr/_fae9e550._.js.map +1 -0
  213. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  214. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  215. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  216. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
  217. package/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js +3 -0
  218. package/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js.map +1 -0
  219. package/web/.next/server/chunks/ssr/node_modules__pnpm_026172d1._.js +3 -0
  220. package/web/.next/server/chunks/ssr/node_modules__pnpm_026172d1._.js.map +1 -0
  221. package/web/.next/server/chunks/ssr/{src_presentation_web_f5b454cd._.js → src_presentation_web_0f98f202._.js} +2 -2
  222. package/web/.next/server/chunks/ssr/{src_presentation_web_f5b454cd._.js.map → src_presentation_web_0f98f202._.js.map} +1 -1
  223. package/web/.next/server/chunks/ssr/src_presentation_web_9db47db7._.js +5 -0
  224. package/web/.next/server/chunks/ssr/{src_presentation_web_8e7fe0d1._.js.map → src_presentation_web_9db47db7._.js.map} +1 -1
  225. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f66cd328.js +3 -0
  226. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f66cd328.js.map +1 -0
  227. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +3 -0
  228. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -0
  229. package/web/.next/server/chunks/ssr/src_presentation_web_components_bdcfba35._.js +3 -0
  230. package/web/.next/server/chunks/ssr/src_presentation_web_components_bdcfba35._.js.map +1 -0
  231. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  232. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  233. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  234. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  235. package/web/.next/server/chunks/ssr/src_presentation_web_ede4a227._.js +5 -0
  236. package/web/.next/server/chunks/ssr/{src_presentation_web_b9023017._.js.map → src_presentation_web_ede4a227._.js.map} +1 -1
  237. package/web/.next/server/pages/500.html +2 -2
  238. package/web/.next/server/server-reference-manifest.js +1 -1
  239. package/web/.next/server/server-reference-manifest.json +294 -520
  240. package/web/.next/static/chunks/01ba448cf76c6014.js +1 -0
  241. package/web/.next/static/chunks/05e9c71e5e4cf531.js +1 -0
  242. package/web/.next/static/chunks/33d2f67ad4814aba.css +1 -0
  243. package/web/.next/static/chunks/{dc350d99389c1a4a.js → 41c7cee55ef51fc8.js} +1 -1
  244. package/web/.next/static/chunks/534e18ee1fbd8452.js +1 -0
  245. package/web/.next/static/chunks/{aa241b7236671e43.js → 62a58d2f3cd5f35f.js} +2 -2
  246. package/web/.next/static/chunks/8080c842b0358904.js +1 -0
  247. package/web/.next/static/chunks/9b2a23851096f1aa.js +1 -0
  248. package/web/.next/static/chunks/a67c9c6125c1aa32.js +1 -0
  249. package/web/.next/static/chunks/a8ba3f3e2b0f87aa.js +1 -0
  250. package/web/.next/static/chunks/abc3f71a05ccbdfe.js +1 -0
  251. package/web/.next/static/chunks/c1f3db103c2b226f.js +1 -0
  252. package/web/.next/static/chunks/cca0f5112a9260d8.js +1 -0
  253. package/web/.next/static/chunks/cd45aed9c46e1bf5.js +11 -0
  254. package/web/.next/static/chunks/d04de4be30ab78ca.js +3 -0
  255. package/web/.next/static/chunks/d47658be0870a4b9.js +1 -0
  256. package/web/.next/static/chunks/d8e86e8e5bb7cc0a.js +1 -0
  257. package/web/.next/static/chunks/eb9841ec4d80af01.js +1 -0
  258. package/web/.next/static/chunks/f9667ee1e5b445b7.js +1 -0
  259. package/web/.next/static/chunks/{c33839a8d27c34ce.js → fa373c6f8139a712.js} +2 -2
  260. package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.d.ts +0 -118
  261. package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.d.ts.map +0 -1
  262. package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.js +0 -58
  263. package/dist/packages/core/src/application/use-cases/repositories/import-github-repository.use-case.d.ts +0 -31
  264. package/dist/packages/core/src/application/use-cases/repositories/import-github-repository.use-case.d.ts.map +0 -1
  265. package/dist/packages/core/src/application/use-cases/repositories/import-github-repository.use-case.js +0 -86
  266. package/dist/packages/core/src/application/use-cases/repositories/list-github-repositories.use-case.d.ts +0 -13
  267. package/dist/packages/core/src/application/use-cases/repositories/list-github-repositories.use-case.d.ts.map +0 -1
  268. package/dist/packages/core/src/application/use-cases/repositories/list-github-repositories.use-case.js +0 -35
  269. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/040-add-repository-remote-url.d.ts +0 -12
  270. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/040-add-repository-remote-url.d.ts.map +0 -1
  271. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/040-add-repository-remote-url.js +0 -29
  272. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/041-add-feature-flag-github-import.d.ts +0 -11
  273. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/041-add-feature-flag-github-import.d.ts.map +0 -1
  274. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/041-add-feature-flag-github-import.js +0 -17
  275. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts +0 -18
  276. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts.map +0 -1
  277. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.js +0 -171
  278. package/dist/src/presentation/cli/commands/repo/add.command.d.ts +0 -13
  279. package/dist/src/presentation/cli/commands/repo/add.command.d.ts.map +0 -1
  280. package/dist/src/presentation/cli/commands/repo/add.command.js +0 -82
  281. package/dist/src/presentation/tui/wizards/github-import.wizard.d.ts +0 -33
  282. package/dist/src/presentation/tui/wizards/github-import.wizard.d.ts.map +0 -1
  283. package/dist/src/presentation/tui/wizards/github-import.wizard.js +0 -121
  284. package/dist/src/presentation/web/app/actions/import-github-repository.d.ts +0 -11
  285. package/dist/src/presentation/web/app/actions/import-github-repository.d.ts.map +0 -1
  286. package/dist/src/presentation/web/app/actions/import-github-repository.js +0 -27
  287. package/dist/src/presentation/web/app/actions/list-github-repositories.d.ts +0 -11
  288. package/dist/src/presentation/web/app/actions/list-github-repositories.d.ts.map +0 -1
  289. package/dist/src/presentation/web/app/actions/list-github-repositories.js +0 -17
  290. package/dist/src/presentation/web/components/common/github-import-dialog/github-import-dialog.d.ts +0 -8
  291. package/dist/src/presentation/web/components/common/github-import-dialog/github-import-dialog.d.ts.map +0 -1
  292. package/dist/src/presentation/web/components/common/github-import-dialog/github-import-dialog.js +0 -33
  293. package/dist/src/presentation/web/components/common/github-import-dialog/github-import-dialog.stories.d.ts +0 -10
  294. package/dist/src/presentation/web/components/common/github-import-dialog/github-import-dialog.stories.d.ts.map +0 -1
  295. package/dist/src/presentation/web/components/common/github-import-dialog/github-import-dialog.stories.js +0 -26
  296. package/dist/src/presentation/web/components/common/github-import-dialog/github-repo-browser.d.ts +0 -15
  297. package/dist/src/presentation/web/components/common/github-import-dialog/github-repo-browser.d.ts.map +0 -1
  298. package/dist/src/presentation/web/components/common/github-import-dialog/github-repo-browser.js +0 -52
  299. package/dist/src/presentation/web/components/common/github-import-dialog/github-repo-browser.stories.d.ts +0 -10
  300. package/dist/src/presentation/web/components/common/github-import-dialog/github-repo-browser.stories.d.ts.map +0 -1
  301. package/dist/src/presentation/web/components/common/github-import-dialog/github-repo-browser.stories.js +0 -78
  302. package/dist/src/presentation/web/components/common/github-import-dialog/github-url-input.d.ts +0 -7
  303. package/dist/src/presentation/web/components/common/github-import-dialog/github-url-input.d.ts.map +0 -1
  304. package/dist/src/presentation/web/components/common/github-import-dialog/github-url-input.js +0 -46
  305. package/dist/src/presentation/web/components/common/github-import-dialog/github-url-input.stories.d.ts +0 -10
  306. package/dist/src/presentation/web/components/common/github-import-dialog/github-url-input.stories.d.ts.map +0 -1
  307. package/dist/src/presentation/web/components/common/github-import-dialog/github-url-input.stories.js +0 -29
  308. package/dist/src/presentation/web/components/common/github-import-dialog/index.d.ts +0 -4
  309. package/dist/src/presentation/web/components/common/github-import-dialog/index.d.ts.map +0 -1
  310. package/dist/src/presentation/web/components/common/github-import-dialog/index.js +0 -3
  311. package/web/.next/server/chunks/[root-of-the-server]__693510ee._.js.map +0 -1
  312. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4e741df2.js +0 -3
  313. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4e741df2.js.map +0 -1
  314. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_8b618f7d._.js +0 -3
  315. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_8b618f7d._.js.map +0 -1
  316. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_026fdffa.js +0 -3
  317. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_026fdffa.js.map +0 -1
  318. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_8b91e197.js +0 -3
  319. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_8b91e197.js.map +0 -1
  320. package/web/.next/server/chunks/ssr/[root-of-the-server]__166bcbbe._.js +0 -4
  321. package/web/.next/server/chunks/ssr/[root-of-the-server]__166bcbbe._.js.map +0 -1
  322. package/web/.next/server/chunks/ssr/[root-of-the-server]__338c67a2._.js +0 -4
  323. package/web/.next/server/chunks/ssr/[root-of-the-server]__338c67a2._.js.map +0 -1
  324. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +0 -3
  325. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js.map +0 -1
  326. package/web/.next/server/chunks/ssr/[root-of-the-server]__364a7d51._.js +0 -4
  327. package/web/.next/server/chunks/ssr/[root-of-the-server]__364a7d51._.js.map +0 -1
  328. package/web/.next/server/chunks/ssr/[root-of-the-server]__86692e81._.js +0 -4
  329. package/web/.next/server/chunks/ssr/[root-of-the-server]__86692e81._.js.map +0 -1
  330. package/web/.next/server/chunks/ssr/[root-of-the-server]__9a576834._.js +0 -3
  331. package/web/.next/server/chunks/ssr/[root-of-the-server]__9a576834._.js.map +0 -1
  332. package/web/.next/server/chunks/ssr/[root-of-the-server]__d61bd462._.js +0 -3
  333. package/web/.next/server/chunks/ssr/[root-of-the-server]__d61bd462._.js.map +0 -1
  334. package/web/.next/server/chunks/ssr/[root-of-the-server]__f08be88a._.js +0 -3
  335. package/web/.next/server/chunks/ssr/[root-of-the-server]__f08be88a._.js.map +0 -1
  336. package/web/.next/server/chunks/ssr/[root-of-the-server]__f4a463ee._.js +0 -4
  337. package/web/.next/server/chunks/ssr/[root-of-the-server]__f4a463ee._.js.map +0 -1
  338. package/web/.next/server/chunks/ssr/_0020fddd._.js.map +0 -1
  339. package/web/.next/server/chunks/ssr/_67104d9e._.js +0 -3
  340. package/web/.next/server/chunks/ssr/_67104d9e._.js.map +0 -1
  341. package/web/.next/server/chunks/ssr/_78e22029._.js +0 -3
  342. package/web/.next/server/chunks/ssr/_78e22029._.js.map +0 -1
  343. package/web/.next/server/chunks/ssr/_a7a52b70._.js +0 -9
  344. package/web/.next/server/chunks/ssr/_a7a52b70._.js.map +0 -1
  345. package/web/.next/server/chunks/ssr/_b4b8a636._.js +0 -3
  346. package/web/.next/server/chunks/ssr/_b4b8a636._.js.map +0 -1
  347. package/web/.next/server/chunks/ssr/_d4c49d8a._.js.map +0 -1
  348. package/web/.next/server/chunks/ssr/_d8575088._.js +0 -3
  349. package/web/.next/server/chunks/ssr/_d8575088._.js.map +0 -1
  350. package/web/.next/server/chunks/ssr/node_modules__pnpm_55c7a131._.js +0 -3
  351. package/web/.next/server/chunks/ssr/node_modules__pnpm_55c7a131._.js.map +0 -1
  352. package/web/.next/server/chunks/ssr/node_modules__pnpm_8ec2c790._.js +0 -3
  353. package/web/.next/server/chunks/ssr/node_modules__pnpm_8ec2c790._.js.map +0 -1
  354. package/web/.next/server/chunks/ssr/src_presentation_web_8e7fe0d1._.js +0 -5
  355. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_ca051134.js +0 -3
  356. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_ca051134.js.map +0 -1
  357. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js +0 -3
  358. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js.map +0 -1
  359. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js +0 -3
  360. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js.map +0 -1
  361. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js +0 -3
  362. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js.map +0 -1
  363. package/web/.next/server/chunks/ssr/src_presentation_web_b9023017._.js +0 -5
  364. package/web/.next/server/chunks/ssr/src_presentation_web_components_a5e6c910._.js +0 -3
  365. package/web/.next/server/chunks/ssr/src_presentation_web_components_a5e6c910._.js.map +0 -1
  366. package/web/.next/static/chunks/179823f453f854ae.js +0 -1
  367. package/web/.next/static/chunks/19b580c6b5690953.js +0 -1
  368. package/web/.next/static/chunks/1dd878b6feb55d2e.js +0 -1
  369. package/web/.next/static/chunks/284ee94768ff2fcf.css +0 -1
  370. package/web/.next/static/chunks/314b8314f77d6921.js +0 -1
  371. package/web/.next/static/chunks/31aa863b59d1dc79.js +0 -1
  372. package/web/.next/static/chunks/370b319bd39f846c.js +0 -1
  373. package/web/.next/static/chunks/3e1e0f9bde3530d2.js +0 -1
  374. package/web/.next/static/chunks/5e552eb781b82c56.js +0 -1
  375. package/web/.next/static/chunks/601d93593f5f664f.js +0 -1
  376. package/web/.next/static/chunks/664120018846590e.js +0 -1
  377. package/web/.next/static/chunks/66d0ac0ea569e330.js +0 -1
  378. package/web/.next/static/chunks/688971d5bad5dc7c.js +0 -1
  379. package/web/.next/static/chunks/71e105c697b932e8.js +0 -1
  380. package/web/.next/static/chunks/a8055dd33cc3235b.js +0 -1
  381. package/web/.next/static/chunks/f259386f4875e70c.js +0 -1
  382. package/web/.next/static/chunks/fad3ba104b4a90e4.js +0 -13
  383. /package/web/.next/static/{qOZ4XNmNZzNHwEPy-2A7p → hWrKuop_3FR0syZrFWLvn}/_buildManifest.js +0 -0
  384. /package/web/.next/static/{qOZ4XNmNZzNHwEPy-2A7p → hWrKuop_3FR0syZrFWLvn}/_clientMiddlewareManifest.json +0 -0
  385. /package/web/.next/static/{qOZ4XNmNZzNHwEPy-2A7p → hWrKuop_3FR0syZrFWLvn}/_ssgManifest.js +0 -0
@@ -1,118 +0,0 @@
1
- /**
2
- * GitHub Repository Service Interface
3
- *
4
- * Output port for GitHub repository operations via the gh CLI.
5
- * Implementations manage authentication checks, repository cloning,
6
- * user repository listing, and GitHub URL parsing.
7
- */
8
- /**
9
- * Thrown when the GitHub CLI is not authenticated.
10
- */
11
- export declare class GitHubAuthError extends Error {
12
- constructor(message: string, cause?: Error);
13
- }
14
- /**
15
- * Thrown when a `gh repo clone` operation fails.
16
- */
17
- export declare class GitHubCloneError extends Error {
18
- constructor(message: string, cause?: Error);
19
- }
20
- /**
21
- * Thrown when a GitHub URL cannot be parsed into owner/repo.
22
- */
23
- export declare class GitHubUrlParseError extends Error {
24
- constructor(message: string, cause?: Error);
25
- }
26
- /**
27
- * Thrown when listing the user's GitHub repositories fails.
28
- */
29
- export declare class GitHubRepoListError extends Error {
30
- constructor(message: string, cause?: Error);
31
- }
32
- /**
33
- * A GitHub repository as returned by `gh repo list --json`.
34
- */
35
- export interface GitHubRepo {
36
- /** Repository name (e.g. "my-project") */
37
- name: string;
38
- /** Full owner/repo identifier (e.g. "octocat/my-project") */
39
- nameWithOwner: string;
40
- /** Repository description (may be empty string) */
41
- description: string;
42
- /** Whether the repository is private */
43
- isPrivate: boolean;
44
- /** ISO 8601 timestamp of the most recent push */
45
- pushedAt: string;
46
- }
47
- /**
48
- * Options for listing user repositories.
49
- */
50
- export interface ListUserRepositoriesOptions {
51
- /** Maximum number of repos to return (default: 30) */
52
- limit?: number;
53
- /** Filter repos by name substring */
54
- search?: string;
55
- }
56
- /**
57
- * Options for cloning a repository.
58
- */
59
- export interface CloneOptions {
60
- /** Callback invoked with stderr chunks during clone for progress display */
61
- onProgress?: (data: string) => void;
62
- }
63
- /**
64
- * Result of parsing a GitHub URL.
65
- */
66
- export interface ParsedGitHubUrl {
67
- /** Repository owner (e.g. "octocat") */
68
- owner: string;
69
- /** Repository name (e.g. "my-project") */
70
- repo: string;
71
- /** Combined owner/repo (e.g. "octocat/my-project") */
72
- nameWithOwner: string;
73
- }
74
- /**
75
- * Output port for GitHub repository operations.
76
- *
77
- * Implementations use the `gh` CLI for all GitHub interactions.
78
- */
79
- export interface IGitHubRepositoryService {
80
- /**
81
- * Verify that the GitHub CLI is authenticated.
82
- *
83
- * @throws {GitHubAuthError} if `gh auth status` indicates the user is not logged in
84
- */
85
- checkAuth(): Promise<void>;
86
- /**
87
- * Clone a GitHub repository to a local destination directory.
88
- *
89
- * @param nameWithOwner - Full owner/repo identifier (e.g. "octocat/my-project")
90
- * @param destination - Absolute path to clone into
91
- * @param options - Optional clone configuration (e.g. progress callback)
92
- * @throws {GitHubCloneError} if the clone subprocess fails
93
- */
94
- cloneRepository(nameWithOwner: string, destination: string, options?: CloneOptions): Promise<void>;
95
- /**
96
- * List the authenticated user's GitHub repositories.
97
- *
98
- * @param options - Optional filtering and pagination
99
- * @returns Array of GitHub repositories sorted by most recently pushed
100
- * @throws {GitHubRepoListError} if the list operation fails
101
- */
102
- listUserRepositories(options?: ListUserRepositoriesOptions): Promise<GitHubRepo[]>;
103
- /**
104
- * Parse a GitHub URL or shorthand into its owner/repo components.
105
- *
106
- * Supported formats:
107
- * - `https://github.com/owner/repo`
108
- * - `https://github.com/owner/repo.git`
109
- * - `git@github.com:owner/repo.git`
110
- * - `owner/repo` (shorthand)
111
- *
112
- * @param url - The GitHub URL or shorthand to parse
113
- * @returns Parsed owner, repo, and nameWithOwner
114
- * @throws {GitHubUrlParseError} if the URL does not match any supported format
115
- */
116
- parseGitHubUrl(url: string): ParsedGitHubUrl;
117
- }
118
- //# sourceMappingURL=github-repository-service.interface.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"github-repository-service.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/github-repository-service.interface.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAM3C;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAM3C;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAM3C;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAM3C;AAMD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,aAAa,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,SAAS,EAAE,OAAO,CAAC;IACnB,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4EAA4E;IAC5E,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,aAAa,EAAE,MAAM,CAAC;CACvB;AAMD;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3B;;;;;;;OAOG;IACH,eAAe,CACb,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;;;;OAMG;IACH,oBAAoB,CAAC,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAEnF;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAC;CAC9C"}
@@ -1,58 +0,0 @@
1
- /**
2
- * GitHub Repository Service Interface
3
- *
4
- * Output port for GitHub repository operations via the gh CLI.
5
- * Implementations manage authentication checks, repository cloning,
6
- * user repository listing, and GitHub URL parsing.
7
- */
8
- // ---------------------------------------------------------------------------
9
- // Error classes
10
- // ---------------------------------------------------------------------------
11
- /**
12
- * Thrown when the GitHub CLI is not authenticated.
13
- */
14
- export class GitHubAuthError extends Error {
15
- constructor(message, cause) {
16
- super(message);
17
- this.name = 'GitHubAuthError';
18
- Object.setPrototypeOf(this, new.target.prototype);
19
- if (cause)
20
- this.cause = cause;
21
- }
22
- }
23
- /**
24
- * Thrown when a `gh repo clone` operation fails.
25
- */
26
- export class GitHubCloneError extends Error {
27
- constructor(message, cause) {
28
- super(message);
29
- this.name = 'GitHubCloneError';
30
- Object.setPrototypeOf(this, new.target.prototype);
31
- if (cause)
32
- this.cause = cause;
33
- }
34
- }
35
- /**
36
- * Thrown when a GitHub URL cannot be parsed into owner/repo.
37
- */
38
- export class GitHubUrlParseError extends Error {
39
- constructor(message, cause) {
40
- super(message);
41
- this.name = 'GitHubUrlParseError';
42
- Object.setPrototypeOf(this, new.target.prototype);
43
- if (cause)
44
- this.cause = cause;
45
- }
46
- }
47
- /**
48
- * Thrown when listing the user's GitHub repositories fails.
49
- */
50
- export class GitHubRepoListError extends Error {
51
- constructor(message, cause) {
52
- super(message);
53
- this.name = 'GitHubRepoListError';
54
- Object.setPrototypeOf(this, new.target.prototype);
55
- if (cause)
56
- this.cause = cause;
57
- }
58
- }
@@ -1,31 +0,0 @@
1
- /**
2
- * Import GitHub Repository Use Case
3
- *
4
- * Orchestrates importing a GitHub repository: validates the URL, checks auth,
5
- * detects duplicates by remoteUrl, clones via IGitHubRepositoryService,
6
- * delegates local registration to AddRepositoryUseCase, and updates the
7
- * repository record with the normalized remoteUrl.
8
- */
9
- import type { Repository } from '../../../domain/generated/output.js';
10
- import type { IGitHubRepositoryService, CloneOptions } from '../../ports/output/services/github-repository-service.interface.js';
11
- import type { IRepositoryRepository } from '../../ports/output/repositories/repository-repository.interface.js';
12
- import { AddRepositoryUseCase } from './add-repository.use-case.js';
13
- export interface ImportGitHubRepositoryInput {
14
- /** GitHub URL or shorthand (e.g. "owner/repo") */
15
- url: string;
16
- /** Override clone destination directory */
17
- dest?: string;
18
- /** Default base directory for clones (from settings) */
19
- defaultCloneDir?: string;
20
- /** Options for the clone subprocess (e.g. progress callback) */
21
- cloneOptions?: CloneOptions;
22
- }
23
- export declare class ImportGitHubRepositoryUseCase {
24
- private readonly gitHubService;
25
- private readonly repositoryRepo;
26
- private readonly addRepositoryUseCase;
27
- constructor(gitHubService: IGitHubRepositoryService, repositoryRepo: IRepositoryRepository, addRepositoryUseCase: AddRepositoryUseCase);
28
- execute(input: ImportGitHubRepositoryInput): Promise<Repository>;
29
- private resolveDestination;
30
- }
31
- //# sourceMappingURL=import-github-repository.use-case.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"import-github-repository.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/repositories/import-github-repository.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,KAAK,EACV,wBAAwB,EACxB,YAAY,EACb,MAAM,oEAAoE,CAAC;AAC5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oEAAoE,CAAC;AAChH,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,MAAM,WAAW,2BAA2B;IAC1C,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAUD,qBACa,6BAA6B;IAGtC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,oBAAoB;gBAJpB,aAAa,EAAE,wBAAwB,EAEvC,cAAc,EAAE,qBAAqB,EAErC,oBAAoB,EAAE,oBAAoB;IAGvD,OAAO,CAAC,KAAK,EAAE,2BAA2B,GAAG,OAAO,CAAC,UAAU,CAAC;IAoCtE,OAAO,CAAC,kBAAkB;CAW3B"}
@@ -1,86 +0,0 @@
1
- /**
2
- * Import GitHub Repository Use Case
3
- *
4
- * Orchestrates importing a GitHub repository: validates the URL, checks auth,
5
- * detects duplicates by remoteUrl, clones via IGitHubRepositoryService,
6
- * delegates local registration to AddRepositoryUseCase, and updates the
7
- * repository record with the normalized remoteUrl.
8
- */
9
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
10
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
11
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
12
- 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;
13
- return c > 3 && r && Object.defineProperty(target, key, r), r;
14
- };
15
- var __metadata = (this && this.__metadata) || function (k, v) {
16
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
17
- };
18
- var __param = (this && this.__param) || function (paramIndex, decorator) {
19
- return function (target, key) { decorator(target, key, paramIndex); }
20
- };
21
- import { injectable, inject } from 'tsyringe';
22
- import { homedir } from 'node:os';
23
- import { join } from 'node:path';
24
- import { AddRepositoryUseCase } from './add-repository.use-case.js';
25
- /**
26
- * Normalizes a GitHub remote URL for storage and duplicate detection.
27
- * Lowercases and strips trailing .git suffix.
28
- */
29
- function normalizeRemoteUrl(nameWithOwner) {
30
- return `https://github.com/${nameWithOwner.toLowerCase()}`;
31
- }
32
- let ImportGitHubRepositoryUseCase = class ImportGitHubRepositoryUseCase {
33
- gitHubService;
34
- repositoryRepo;
35
- addRepositoryUseCase;
36
- constructor(gitHubService, repositoryRepo, addRepositoryUseCase) {
37
- this.gitHubService = gitHubService;
38
- this.repositoryRepo = repositoryRepo;
39
- this.addRepositoryUseCase = addRepositoryUseCase;
40
- }
41
- async execute(input) {
42
- // 1. Validate URL — throws GitHubUrlParseError for invalid formats
43
- const parsed = this.gitHubService.parseGitHubUrl(input.url);
44
- // 2. Normalize the remote URL for storage and duplicate detection
45
- const normalizedUrl = normalizeRemoteUrl(parsed.nameWithOwner);
46
- // 3. Check for duplicate by remoteUrl — skip clone if already tracked
47
- const existing = await this.repositoryRepo.findByRemoteUrl(normalizedUrl);
48
- if (existing) {
49
- return existing;
50
- }
51
- // 4. Check auth — throws GitHubAuthError if not authenticated
52
- await this.gitHubService.checkAuth();
53
- // 5. Resolve clone destination
54
- const destination = this.resolveDestination(input, parsed.repo);
55
- // 6. Clone the repository
56
- await this.gitHubService.cloneRepository(parsed.nameWithOwner, destination, input.cloneOptions);
57
- // 7. Register the cloned repo via AddRepositoryUseCase
58
- const repository = await this.addRepositoryUseCase.execute({
59
- path: destination,
60
- name: parsed.repo,
61
- });
62
- // 8. Update with normalized remoteUrl
63
- await this.repositoryRepo.update(repository.id, {
64
- remoteUrl: normalizedUrl,
65
- });
66
- return { ...repository, remoteUrl: normalizedUrl };
67
- }
68
- resolveDestination(input, repoName) {
69
- if (input.dest) {
70
- return input.dest;
71
- }
72
- let baseDir = input.defaultCloneDir ?? join(homedir(), 'repos');
73
- if (baseDir.startsWith('~/')) {
74
- baseDir = join(homedir(), baseDir.slice(2));
75
- }
76
- return join(baseDir, repoName);
77
- }
78
- };
79
- ImportGitHubRepositoryUseCase = __decorate([
80
- injectable(),
81
- __param(0, inject('IGitHubRepositoryService')),
82
- __param(1, inject('IRepositoryRepository')),
83
- __param(2, inject(AddRepositoryUseCase)),
84
- __metadata("design:paramtypes", [Object, Object, AddRepositoryUseCase])
85
- ], ImportGitHubRepositoryUseCase);
86
- export { ImportGitHubRepositoryUseCase };
@@ -1,13 +0,0 @@
1
- /**
2
- * List GitHub Repositories Use Case
3
- *
4
- * Checks GitHub CLI auth, then fetches the authenticated user's repositories.
5
- * Decouples presentation from the IGitHubRepositoryService infrastructure.
6
- */
7
- import type { IGitHubRepositoryService, GitHubRepo, ListUserRepositoriesOptions } from '../../ports/output/services/github-repository-service.interface.js';
8
- export declare class ListGitHubRepositoriesUseCase {
9
- private readonly gitHubService;
10
- constructor(gitHubService: IGitHubRepositoryService);
11
- execute(options?: ListUserRepositoriesOptions): Promise<GitHubRepo[]>;
12
- }
13
- //# sourceMappingURL=list-github-repositories.use-case.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list-github-repositories.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/repositories/list-github-repositories.use-case.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,wBAAwB,EACxB,UAAU,EACV,2BAA2B,EAC5B,MAAM,oEAAoE,CAAC;AAE5E,qBACa,6BAA6B;IAGtC,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,wBAAwB;IAGpD,OAAO,CAAC,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAI5E"}
@@ -1,35 +0,0 @@
1
- /**
2
- * List GitHub Repositories Use Case
3
- *
4
- * Checks GitHub CLI auth, then fetches the authenticated user's repositories.
5
- * Decouples presentation from the IGitHubRepositoryService infrastructure.
6
- */
7
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
8
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
9
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
10
- 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;
11
- return c > 3 && r && Object.defineProperty(target, key, r), r;
12
- };
13
- var __metadata = (this && this.__metadata) || function (k, v) {
14
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
15
- };
16
- var __param = (this && this.__param) || function (paramIndex, decorator) {
17
- return function (target, key) { decorator(target, key, paramIndex); }
18
- };
19
- import { injectable, inject } from 'tsyringe';
20
- let ListGitHubRepositoriesUseCase = class ListGitHubRepositoriesUseCase {
21
- gitHubService;
22
- constructor(gitHubService) {
23
- this.gitHubService = gitHubService;
24
- }
25
- async execute(options) {
26
- await this.gitHubService.checkAuth();
27
- return this.gitHubService.listUserRepositories(options);
28
- }
29
- };
30
- ListGitHubRepositoriesUseCase = __decorate([
31
- injectable(),
32
- __param(0, inject('IGitHubRepositoryService')),
33
- __metadata("design:paramtypes", [Object])
34
- ], ListGitHubRepositoriesUseCase);
35
- export { ListGitHubRepositoriesUseCase };
@@ -1,12 +0,0 @@
1
- /**
2
- * Migration 040: Add remote_url column to repositories table.
3
- *
4
- * Adds a nullable TEXT column for storing the GitHub remote URL a repository
5
- * was cloned from. Includes an index for efficient duplicate detection
6
- * via findByRemoteUrl().
7
- */
8
- import type { MigrationParams } from 'umzug';
9
- import type Database from 'better-sqlite3';
10
- export declare function up({ context: db }: MigrationParams<Database.Database>): Promise<void>;
11
- export declare function down({ context: db }: MigrationParams<Database.Database>): Promise<void>;
12
- //# sourceMappingURL=040-add-repository-remote-url.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"040-add-repository-remote-url.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/persistence/sqlite/migrations/040-add-repository-remote-url.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,wBAAsB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAc3F;AAED,wBAAsB,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ7F"}
@@ -1,29 +0,0 @@
1
- /**
2
- * Migration 040: Add remote_url column to repositories table.
3
- *
4
- * Adds a nullable TEXT column for storing the GitHub remote URL a repository
5
- * was cloned from. Includes an index for efficient duplicate detection
6
- * via findByRemoteUrl().
7
- */
8
- export async function up({ context: db }) {
9
- const columns = db.pragma('table_info(repositories)');
10
- const existing = new Set(columns.map((c) => c.name));
11
- if (!existing.has('remote_url')) {
12
- db.exec('ALTER TABLE repositories ADD COLUMN remote_url TEXT');
13
- }
14
- // Add index for efficient duplicate detection by remote URL
15
- const indexes = db.pragma('index_list(repositories)');
16
- const indexNames = new Set(indexes.map((i) => i.name));
17
- if (!indexNames.has('idx_repositories_remote_url')) {
18
- db.exec('CREATE INDEX idx_repositories_remote_url ON repositories(remote_url)');
19
- }
20
- }
21
- export async function down({ context: db }) {
22
- // SQLite does not support DROP COLUMN before 3.35.0; drop the index only.
23
- // The column remains but is unused after rollback.
24
- const indexes = db.pragma('index_list(repositories)');
25
- const indexNames = new Set(indexes.map((i) => i.name));
26
- if (indexNames.has('idx_repositories_remote_url')) {
27
- db.exec('DROP INDEX idx_repositories_remote_url');
28
- }
29
- }
@@ -1,11 +0,0 @@
1
- /**
2
- * Migration 041: Add feature_flag_github_import column to settings table.
3
- *
4
- * Adds a boolean (INTEGER 0/1) column for the GitHub import feature flag.
5
- * Defaults to 0 (disabled).
6
- */
7
- import type { MigrationParams } from 'umzug';
8
- import type Database from 'better-sqlite3';
9
- export declare function up({ context: db }: MigrationParams<Database.Database>): Promise<void>;
10
- export declare function down({ context: db }: MigrationParams<Database.Database>): Promise<void>;
11
- //# sourceMappingURL=041-add-feature-flag-github-import.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"041-add-feature-flag-github-import.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/persistence/sqlite/migrations/041-add-feature-flag-github-import.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,wBAAsB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAS3F;AAED,wBAAsB,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7F"}
@@ -1,17 +0,0 @@
1
- /**
2
- * Migration 041: Add feature_flag_github_import column to settings table.
3
- *
4
- * Adds a boolean (INTEGER 0/1) column for the GitHub import feature flag.
5
- * Defaults to 0 (disabled).
6
- */
7
- export async function up({ context: db }) {
8
- const columns = db.pragma('table_info(settings)');
9
- const existing = new Set(columns.map((c) => c.name));
10
- if (!existing.has('feature_flag_github_import')) {
11
- db.exec('ALTER TABLE settings ADD COLUMN feature_flag_github_import INTEGER NOT NULL DEFAULT 0');
12
- }
13
- }
14
- export async function down({ context: db }) {
15
- // SQLite does not support DROP COLUMN before 3.35.0; column remains but is unused after rollback.
16
- void db;
17
- }
@@ -1,18 +0,0 @@
1
- /**
2
- * GitHub Repository Service Implementation
3
- *
4
- * Implements IGitHubRepositoryService using the gh CLI for authentication
5
- * checks, repository listing, cloning (with progress streaming), and URL parsing.
6
- */
7
- import type { ExecFunction } from '../git/worktree.service.js';
8
- import type { IGitHubRepositoryService, GitHubRepo, ListUserRepositoriesOptions, CloneOptions, ParsedGitHubUrl } from '../../../application/ports/output/services/github-repository-service.interface.js';
9
- export declare class GitHubRepositoryService implements IGitHubRepositoryService {
10
- private readonly execFile;
11
- constructor(execFile: ExecFunction);
12
- checkAuth(): Promise<void>;
13
- listUserRepositories(options?: ListUserRepositoriesOptions): Promise<GitHubRepo[]>;
14
- cloneRepository(nameWithOwner: string, destination: string, options?: CloneOptions): Promise<void>;
15
- parseGitHubUrl(url: string): ParsedGitHubUrl;
16
- private cleanupPartialClone;
17
- }
18
- //# sourceMappingURL=github-repository.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"github-repository.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/external/github-repository.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EACV,wBAAwB,EACxB,UAAU,EACV,2BAA2B,EAC3B,YAAY,EACZ,eAAe,EAChB,MAAM,mFAAmF,CAAC;AAwB3F,qBACa,uBAAwB,YAAW,wBAAwB;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,YAAY;IAErE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB1B,oBAAoB,CAAC,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAsClF,eAAe,CACnB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,IAAI,CAAC;IAgDhB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;YA2C9B,mBAAmB;CAOlC"}
@@ -1,171 +0,0 @@
1
- /**
2
- * GitHub Repository Service Implementation
3
- *
4
- * Implements IGitHubRepositoryService using the gh CLI for authentication
5
- * checks, repository listing, cloning (with progress streaming), and URL parsing.
6
- */
7
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
8
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
9
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
10
- 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;
11
- return c > 3 && r && Object.defineProperty(target, key, r), r;
12
- };
13
- var __metadata = (this && this.__metadata) || function (k, v) {
14
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
15
- };
16
- var __param = (this && this.__param) || function (paramIndex, decorator) {
17
- return function (target, key) { decorator(target, key, paramIndex); }
18
- };
19
- import { injectable, inject } from 'tsyringe';
20
- import { resolve, normalize } from 'node:path';
21
- import { rm } from 'node:fs/promises';
22
- import { spawn } from 'node:child_process';
23
- import { GitHubAuthError, GitHubCloneError, GitHubRepoListError, GitHubUrlParseError, } from '../../../application/ports/output/services/github-repository-service.interface.js';
24
- // ---------------------------------------------------------------------------
25
- // URL regex patterns
26
- // ---------------------------------------------------------------------------
27
- /** Matches https://github.com/owner/repo or https://github.com/owner/repo.git */
28
- const HTTPS_PATTERN = /^https:\/\/github\.com\/([^/]+)\/([^/.]+?)(?:\.git)?$/;
29
- /** Matches git@github.com:owner/repo.git */
30
- const SSH_PATTERN = /^git@github\.com:([^/]+)\/([^/.]+?)(?:\.git)?$/;
31
- /** Matches owner/repo shorthand (no slashes except the one separating owner/repo) */
32
- const SHORTHAND_PATTERN = /^([a-zA-Z0-9_.-]+)\/([a-zA-Z0-9_.-]+)$/;
33
- /** Default limit for listing repositories */
34
- const DEFAULT_LIST_LIMIT = 30;
35
- let GitHubRepositoryService = class GitHubRepositoryService {
36
- execFile;
37
- constructor(execFile) {
38
- this.execFile = execFile;
39
- }
40
- async checkAuth() {
41
- try {
42
- // Use `gh auth token` instead of `gh auth status` because `gh auth status`
43
- // exits non-zero when *any* configured account has a stale token, even if
44
- // the active account is fully authenticated. `gh auth token` only checks the
45
- // active account and exits 0 as long as it has a valid token.
46
- await this.execFile('gh', ['auth', 'token']);
47
- }
48
- catch (error) {
49
- const cause = error instanceof Error ? error : undefined;
50
- const errnoCode = error?.code;
51
- if (errnoCode === 'ENOENT') {
52
- throw new GitHubAuthError('GitHub CLI (gh) is not installed. Install it from https://cli.github.com/', cause);
53
- }
54
- throw new GitHubAuthError('GitHub CLI is not authenticated. Run `gh auth login` to sign in.', cause);
55
- }
56
- }
57
- async listUserRepositories(options) {
58
- const limit = options?.limit ?? DEFAULT_LIST_LIMIT;
59
- const args = [
60
- 'repo',
61
- 'list',
62
- '--json',
63
- 'name,nameWithOwner,description,isPrivate,pushedAt',
64
- '--limit',
65
- String(limit),
66
- ];
67
- if (options?.search) {
68
- // gh repo list does not have a --match flag; use jq to filter by name
69
- const escaped = options.search.replace(/"/g, '\\"');
70
- args.push('-q', `[.[] | select(.name | test("${escaped}"; "i"))]`);
71
- }
72
- try {
73
- const { stdout } = await this.execFile('gh', args);
74
- return JSON.parse(stdout);
75
- }
76
- catch (error) {
77
- const cause = error instanceof Error ? error : undefined;
78
- const errnoCode = error?.code;
79
- if (errnoCode === 'ENOENT') {
80
- throw new GitHubRepoListError('GitHub CLI (gh) is not installed. Install it from https://cli.github.com/', cause);
81
- }
82
- throw new GitHubRepoListError(`Failed to list GitHub repositories: ${cause?.message ?? String(error)}`, cause);
83
- }
84
- }
85
- async cloneRepository(nameWithOwner, destination, options) {
86
- // Validate destination path — reject path traversal
87
- const resolved = resolve(destination);
88
- const normalized = normalize(resolved);
89
- if (normalized !== resolved || destination.includes('..')) {
90
- throw new GitHubCloneError(`Invalid clone destination: path traversal detected in "${destination}"`);
91
- }
92
- return new Promise((resolvePromise, reject) => {
93
- const child = spawn('gh', ['repo', 'clone', nameWithOwner, resolved], {
94
- stdio: ['ignore', 'pipe', 'pipe'],
95
- });
96
- let stderrOutput = '';
97
- child.stderr?.on('data', (chunk) => {
98
- const data = chunk.toString();
99
- stderrOutput += data;
100
- options?.onProgress?.(data);
101
- });
102
- child.stdout?.on('data', (chunk) => {
103
- const data = chunk.toString();
104
- options?.onProgress?.(data);
105
- });
106
- child.on('error', async (error) => {
107
- await this.cleanupPartialClone(resolved);
108
- reject(new GitHubCloneError(`Failed to clone ${nameWithOwner}: ${error.message}`, error));
109
- });
110
- child.on('close', async (code) => {
111
- if (code === 0) {
112
- resolvePromise();
113
- }
114
- else {
115
- await this.cleanupPartialClone(resolved);
116
- reject(new GitHubCloneError(`Clone of ${nameWithOwner} failed with exit code ${code}: ${stderrOutput.trim()}`));
117
- }
118
- });
119
- });
120
- }
121
- parseGitHubUrl(url) {
122
- const trimmed = url.trim();
123
- if (!trimmed) {
124
- throw new GitHubUrlParseError('URL cannot be empty');
125
- }
126
- // Try HTTPS format
127
- const httpsMatch = trimmed.match(HTTPS_PATTERN);
128
- if (httpsMatch) {
129
- return {
130
- owner: httpsMatch[1],
131
- repo: httpsMatch[2],
132
- nameWithOwner: `${httpsMatch[1]}/${httpsMatch[2]}`,
133
- };
134
- }
135
- // Try SSH format
136
- const sshMatch = trimmed.match(SSH_PATTERN);
137
- if (sshMatch) {
138
- return {
139
- owner: sshMatch[1],
140
- repo: sshMatch[2],
141
- nameWithOwner: `${sshMatch[1]}/${sshMatch[2]}`,
142
- };
143
- }
144
- // Try shorthand format (must be last — it's the loosest pattern)
145
- const shorthandMatch = trimmed.match(SHORTHAND_PATTERN);
146
- if (shorthandMatch) {
147
- return {
148
- owner: shorthandMatch[1],
149
- repo: shorthandMatch[2],
150
- nameWithOwner: `${shorthandMatch[1]}/${shorthandMatch[2]}`,
151
- };
152
- }
153
- throw new GitHubUrlParseError(`Unrecognized GitHub URL format: "${trimmed}". ` +
154
- 'Supported formats: https://github.com/owner/repo, ' +
155
- 'git@github.com:owner/repo.git, or owner/repo shorthand.');
156
- }
157
- async cleanupPartialClone(destination) {
158
- try {
159
- await rm(destination, { recursive: true, force: true });
160
- }
161
- catch {
162
- // Cleanup is best-effort
163
- }
164
- }
165
- };
166
- GitHubRepositoryService = __decorate([
167
- injectable(),
168
- __param(0, inject('ExecFunction')),
169
- __metadata("design:paramtypes", [Function])
170
- ], GitHubRepositoryService);
171
- export { GitHubRepositoryService };
@@ -1,13 +0,0 @@
1
- /**
2
- * Repo Add Command
3
- *
4
- * Import a GitHub repository by URL or interactively browse user's repos.
5
- *
6
- * Usage:
7
- * shep repo add # Interactive wizard
8
- * shep repo add --url owner/repo # Direct import by URL
9
- * shep repo add --url <url> --dest /path # Override clone destination
10
- */
11
- import { Command } from 'commander';
12
- export declare function createAddCommand(): Command;
13
- //# sourceMappingURL=add.command.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/repo/add.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,wBAAgB,gBAAgB,IAAI,OAAO,CA0E1C"}