@shepai/cli 1.174.0 → 1.175.0

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 (297) hide show
  1. package/apis/json-schema/Repository.yaml +6 -0
  2. package/dist/packages/core/src/application/ports/output/repositories/repository-repository.interface.d.ts +3 -1
  3. package/dist/packages/core/src/application/ports/output/repositories/repository-repository.interface.d.ts.map +1 -1
  4. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +28 -0
  5. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
  6. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.js +2 -0
  7. package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.d.ts +47 -0
  8. package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.d.ts.map +1 -1
  9. package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.js +12 -0
  10. package/dist/packages/core/src/application/use-cases/features/create/create-feature-from-remote.use-case.d.ts +67 -0
  11. package/dist/packages/core/src/application/use-cases/features/create/create-feature-from-remote.use-case.d.ts.map +1 -0
  12. package/dist/packages/core/src/application/use-cases/features/create/create-feature-from-remote.use-case.js +128 -0
  13. package/dist/packages/core/src/application/use-cases/repositories/import-github-repository.use-case.d.ts +16 -5
  14. package/dist/packages/core/src/application/use-cases/repositories/import-github-repository.use-case.d.ts.map +1 -1
  15. package/dist/packages/core/src/application/use-cases/repositories/import-github-repository.use-case.js +76 -14
  16. package/dist/packages/core/src/application/use-cases/repositories/init-remote-repository.use-case.d.ts +30 -0
  17. package/dist/packages/core/src/application/use-cases/repositories/init-remote-repository.use-case.d.ts.map +1 -0
  18. package/dist/packages/core/src/application/use-cases/repositories/init-remote-repository.use-case.js +51 -0
  19. package/dist/packages/core/src/domain/generated/output.d.ts +8 -0
  20. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  21. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  22. package/dist/packages/core/src/infrastructure/di/container.js +10 -0
  23. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/repository.mapper.d.ts +2 -0
  24. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/repository.mapper.d.ts.map +1 -1
  25. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/repository.mapper.js +4 -0
  26. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/055-add-repository-fork-fields.d.ts +12 -0
  27. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/055-add-repository-fork-fields.d.ts.map +1 -0
  28. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/055-add-repository-fork-fields.js +26 -0
  29. package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.d.ts +2 -1
  30. package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.d.ts.map +1 -1
  31. package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.js +14 -0
  32. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts +4 -1
  33. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts.map +1 -1
  34. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.js +55 -1
  35. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +15 -0
  36. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
  37. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +62 -0
  38. package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
  39. package/dist/src/presentation/cli/commands/feat/new.command.js +32 -6
  40. package/dist/src/presentation/cli/commands/repo/index.d.ts.map +1 -1
  41. package/dist/src/presentation/cli/commands/repo/index.js +3 -1
  42. package/dist/src/presentation/cli/commands/repo/init-remote.command.d.ts +15 -0
  43. package/dist/src/presentation/cli/commands/repo/init-remote.command.d.ts.map +1 -0
  44. package/dist/src/presentation/cli/commands/repo/init-remote.command.js +44 -0
  45. package/dist/src/presentation/web/app/actions/create-feature-from-remote.d.ts +31 -0
  46. package/dist/src/presentation/web/app/actions/create-feature-from-remote.d.ts.map +1 -0
  47. package/dist/src/presentation/web/app/actions/create-feature-from-remote.js +69 -0
  48. package/dist/src/presentation/web/app/actions/import-github-repository.d.ts +1 -0
  49. package/dist/src/presentation/web/app/actions/import-github-repository.d.ts.map +1 -1
  50. package/dist/src/presentation/web/app/actions/import-github-repository.js +1 -1
  51. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +2 -0
  52. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  53. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +1 -1
  54. package/dist/src/presentation/web/components/common/feature-create-drawer/repository-combobox.stories.d.ts +2 -0
  55. package/dist/src/presentation/web/components/common/feature-create-drawer/repository-combobox.stories.d.ts.map +1 -1
  56. package/dist/src/presentation/web/components/common/feature-create-drawer/repository-combobox.stories.js +22 -0
  57. package/dist/src/presentation/web/lib/feature-flags.js +1 -1
  58. package/dist/translations/ar/cli.json +12 -0
  59. package/dist/translations/de/cli.json +12 -0
  60. package/dist/translations/en/cli.json +12 -0
  61. package/dist/translations/es/cli.json +12 -0
  62. package/dist/translations/fr/cli.json +12 -0
  63. package/dist/translations/he/cli.json +12 -0
  64. package/dist/translations/pt/cli.json +12 -0
  65. package/dist/translations/ru/cli.json +12 -0
  66. package/dist/tsconfig.build.tsbuildinfo +1 -1
  67. package/package.json +1 -1
  68. package/web/.next/BUILD_ID +1 -1
  69. package/web/.next/build-manifest.json +2 -2
  70. package/web/.next/fallback-build-manifest.json +2 -2
  71. package/web/.next/prerender-manifest.json +3 -3
  72. package/web/.next/required-server-files.js +2 -2
  73. package/web/.next/required-server-files.json +2 -2
  74. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  75. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +2 -1
  76. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  77. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  78. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  79. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +2 -1
  80. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  81. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  82. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
  83. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +2 -1
  84. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  85. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  86. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +38 -38
  87. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -1
  88. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  89. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  90. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +38 -38
  91. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -1
  92. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  93. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  94. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  95. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +2 -1
  96. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  97. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  98. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  99. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +2 -1
  100. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  101. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  102. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  103. package/web/.next/server/app/(dashboard)/chat/page.js +2 -1
  104. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  105. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  106. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
  107. package/web/.next/server/app/(dashboard)/create/page.js +2 -1
  108. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  109. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  110. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +38 -38
  111. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +2 -1
  112. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  113. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  114. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +38 -38
  115. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -1
  116. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  117. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  118. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  119. package/web/.next/server/app/(dashboard)/page.js +2 -1
  120. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  121. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  122. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  123. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +2 -1
  124. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  125. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  126. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  127. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +2 -1
  128. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  129. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  130. package/web/.next/server/app/_global-error.html +2 -2
  131. package/web/.next/server/app/_global-error.rsc +1 -1
  132. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  133. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  134. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  135. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  136. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  137. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  138. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  139. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  140. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  141. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  142. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  143. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  144. package/web/.next/server/app/features/page/server-reference-manifest.json +6 -6
  145. package/web/.next/server/app/features/page.js.nft.json +1 -1
  146. package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
  147. package/web/.next/server/app/settings/page/server-reference-manifest.json +9 -9
  148. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  149. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  150. package/web/.next/server/app/skills/page/server-reference-manifest.json +13 -13
  151. package/web/.next/server/app/skills/page.js +2 -1
  152. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  153. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  154. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  155. package/web/.next/server/app/tools/page.js +2 -1
  156. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  157. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  158. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  159. package/web/.next/server/app/version/page.js.nft.json +1 -1
  160. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  161. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  162. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -1
  163. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  164. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js +3 -0
  165. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js.map +1 -0
  166. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js +3 -0
  167. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js.map +1 -0
  168. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js +3 -0
  169. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js.map +1 -0
  170. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  171. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  172. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
  173. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  174. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js +1 -1
  175. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js.map +1 -1
  176. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +1 -1
  177. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +1 -1
  178. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  179. package/web/.next/server/chunks/ssr/[root-of-the-server]__51ec77a8._.js +3 -0
  180. package/web/.next/server/chunks/ssr/[root-of-the-server]__51ec77a8._.js.map +1 -0
  181. package/web/.next/server/chunks/ssr/{[root-of-the-server]__b020c17d._.js → [root-of-the-server]__540c615f._.js} +3 -3
  182. package/web/.next/server/chunks/ssr/[root-of-the-server]__540c615f._.js.map +1 -0
  183. package/web/.next/server/chunks/ssr/[root-of-the-server]__66047a1b._.js +3 -0
  184. package/web/.next/server/chunks/ssr/[root-of-the-server]__66047a1b._.js.map +1 -0
  185. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js +1 -1
  186. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js.map +1 -1
  187. package/web/.next/server/chunks/ssr/[root-of-the-server]__a932cd3a._.js +3 -0
  188. package/web/.next/server/chunks/ssr/[root-of-the-server]__a932cd3a._.js.map +1 -0
  189. package/web/.next/server/chunks/ssr/[root-of-the-server]__aa72e794._.js +3 -0
  190. package/web/.next/server/chunks/ssr/[root-of-the-server]__aa72e794._.js.map +1 -0
  191. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +1 -1
  192. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -1
  193. package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
  194. package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
  195. package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
  196. package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
  197. package/web/.next/server/chunks/ssr/_295fffde._.js.map +1 -1
  198. package/web/.next/server/chunks/ssr/{_fd595af2._.js → _2b021b35._.js} +2 -2
  199. package/web/.next/server/chunks/ssr/{_fd595af2._.js.map → _2b021b35._.js.map} +1 -1
  200. package/web/.next/server/chunks/ssr/_45496654._.js +1 -1
  201. package/web/.next/server/chunks/ssr/_45496654._.js.map +1 -1
  202. package/web/.next/server/chunks/ssr/_4cbb7f95._.js +1 -1
  203. package/web/.next/server/chunks/ssr/_4cbb7f95._.js.map +1 -1
  204. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  205. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  206. package/web/.next/server/chunks/ssr/_6abfa39e._.js +1 -1
  207. package/web/.next/server/chunks/ssr/_6abfa39e._.js.map +1 -1
  208. package/web/.next/server/chunks/ssr/{_3a71f39b._.js → _af6b8b94._.js} +2 -2
  209. package/web/.next/server/chunks/ssr/{_3a71f39b._.js.map → _af6b8b94._.js.map} +1 -1
  210. package/web/.next/server/chunks/ssr/{_7953be4d._.js → _e0dd6fcf._.js} +2 -2
  211. package/web/.next/server/chunks/ssr/{_7953be4d._.js.map → _e0dd6fcf._.js.map} +1 -1
  212. package/web/.next/server/chunks/ssr/_f8c55130._.js +4 -0
  213. package/web/.next/server/chunks/ssr/_f8c55130._.js.map +1 -0
  214. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  215. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  216. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  217. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
  218. package/web/.next/server/chunks/ssr/src_presentation_web_17d39233._.js +3 -0
  219. package/web/.next/server/chunks/ssr/src_presentation_web_17d39233._.js.map +1 -0
  220. package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js +5 -0
  221. package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js.map +1 -0
  222. package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js +5 -0
  223. package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js.map +1 -0
  224. package/web/.next/server/chunks/ssr/src_presentation_web_807cba76._.js +3 -0
  225. package/web/.next/server/chunks/ssr/src_presentation_web_807cba76._.js.map +1 -0
  226. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js +3 -0
  227. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js.map +1 -0
  228. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js +3 -0
  229. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js.map +1 -0
  230. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js +3 -0
  231. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js.map +1 -0
  232. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
  233. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
  234. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
  235. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  236. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  237. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
  238. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
  239. package/web/.next/server/chunks/ssr/src_presentation_web_e1cd1869._.js +3 -0
  240. package/web/.next/server/chunks/ssr/src_presentation_web_e1cd1869._.js.map +1 -0
  241. package/web/.next/server/chunks/ssr/src_presentation_web_e3a30e30._.js +3 -0
  242. package/web/.next/server/chunks/ssr/src_presentation_web_e3a30e30._.js.map +1 -0
  243. package/web/.next/server/pages/500.html +2 -2
  244. package/web/.next/server/server-reference-manifest.js +1 -1
  245. package/web/.next/server/server-reference-manifest.json +50 -50
  246. package/web/.next/static/chunks/{ad47bc6ddec7508e.js → 0b07ee72b0c639ef.js} +1 -1
  247. package/web/.next/static/chunks/{f5abbc495d496f5b.js → 1b336d1266a0aa3d.js} +1 -1
  248. package/web/.next/static/chunks/{d9c9db1823b4dffd.js → 238fdbed09dc61b6.js} +2 -2
  249. package/web/.next/static/chunks/{5a2e1c8699897c26.js → 28f6b1cab38ab025.js} +3 -3
  250. package/web/.next/static/chunks/2ad924f5ba5ec0a6.js +1 -0
  251. package/web/.next/static/chunks/2ceebcc839ee0d4b.js +1 -0
  252. package/web/.next/static/chunks/{6dc0a23d333274ae.js → 39054eabee156e55.js} +2 -2
  253. package/web/.next/static/chunks/{a2a03ecb10000974.js → 873e837cd1179cdd.js} +1 -1
  254. package/web/.next/static/chunks/{a060ad1bb509687f.js → 940c842293a6ee9b.js} +1 -1
  255. package/web/.next/static/chunks/a20f2d6f76f469b7.css +1 -0
  256. package/web/.next/static/chunks/{393b27ab5de6c454.js → a22ee308ae1509ca.js} +1 -1
  257. package/web/.next/static/chunks/{e30aa6d2cf824fa1.js → b2aa69e4b0b032d9.js} +1 -1
  258. package/web/.next/static/chunks/{6bc240cd4ae43267.js → b7b5d65a5dd2fff1.js} +1 -1
  259. package/web/.next/static/chunks/{0baf5a2e56d191cf.js → ba0e0fa2d1a650bb.js} +1 -1
  260. package/web/.next/static/chunks/{c164b157638b2a8b.js → bc41a393614b1192.js} +1 -1
  261. package/web/.next/static/chunks/{534194b584a151ed.js → d26542df5ecc8717.js} +1 -1
  262. package/web/.next/server/chunks/ssr/[root-of-the-server]__4fb81977._.js +0 -4
  263. package/web/.next/server/chunks/ssr/[root-of-the-server]__4fb81977._.js.map +0 -1
  264. package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js +0 -4
  265. package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js.map +0 -1
  266. package/web/.next/server/chunks/ssr/[root-of-the-server]__92ffd5ee._.js +0 -4
  267. package/web/.next/server/chunks/ssr/[root-of-the-server]__92ffd5ee._.js.map +0 -1
  268. package/web/.next/server/chunks/ssr/[root-of-the-server]__b020c17d._.js.map +0 -1
  269. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js +0 -4
  270. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js.map +0 -1
  271. package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js +0 -4
  272. package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js.map +0 -1
  273. package/web/.next/server/chunks/ssr/_02e01240._.js +0 -4
  274. package/web/.next/server/chunks/ssr/_02e01240._.js.map +0 -1
  275. package/web/.next/server/chunks/ssr/_18886033._.js +0 -4
  276. package/web/.next/server/chunks/ssr/_18886033._.js.map +0 -1
  277. package/web/.next/server/chunks/ssr/_22e00a14._.js +0 -4
  278. package/web/.next/server/chunks/ssr/_22e00a14._.js.map +0 -1
  279. package/web/.next/server/chunks/ssr/_a5a5901d._.js +0 -4
  280. package/web/.next/server/chunks/ssr/_a5a5901d._.js.map +0 -1
  281. package/web/.next/server/chunks/ssr/_ad09f271._.js +0 -4
  282. package/web/.next/server/chunks/ssr/_ad09f271._.js.map +0 -1
  283. package/web/.next/server/chunks/ssr/_c3f595c6._.js +0 -4
  284. package/web/.next/server/chunks/ssr/_c3f595c6._.js.map +0 -1
  285. package/web/.next/server/chunks/ssr/_ea9e1556._.js +0 -4
  286. package/web/.next/server/chunks/ssr/_ea9e1556._.js.map +0 -1
  287. package/web/.next/server/chunks/ssr/_f1ba9be6._.js +0 -6
  288. package/web/.next/server/chunks/ssr/_f1ba9be6._.js.map +0 -1
  289. package/web/.next/server/chunks/ssr/_f33cd07e._.js +0 -6
  290. package/web/.next/server/chunks/ssr/_f33cd07e._.js.map +0 -1
  291. package/web/.next/server/chunks/ssr/_f8b45233._.js +0 -4
  292. package/web/.next/server/chunks/ssr/_f8b45233._.js.map +0 -1
  293. package/web/.next/static/chunks/32c46154c31c58fc.js +0 -1
  294. package/web/.next/static/chunks/84b480808bd74fa9.css +0 -1
  295. /package/web/.next/static/{nLYXtW5TIrvQiMl1yyD4O → 9rcv3ICw0kZNuv3TVdO8E}/_buildManifest.js +0 -0
  296. /package/web/.next/static/{nLYXtW5TIrvQiMl1yyD4O → 9rcv3ICw0kZNuv3TVdO8E}/_clientMiddlewareManifest.json +0 -0
  297. /package/web/.next/static/{nLYXtW5TIrvQiMl1yyD4O → 9rcv3ICw0kZNuv3TVdO8E}/_ssgManifest.js +0 -0
@@ -15,6 +15,7 @@ import { existsSync } from 'node:fs';
15
15
  import { join, resolve } from 'node:path';
16
16
  import { container } from '../../../../../packages/core/src/infrastructure/di/container.js';
17
17
  import { CreateFeatureUseCase } from '../../../../../packages/core/src/application/use-cases/features/create/create-feature.use-case.js';
18
+ import { CreateFeatureFromRemoteUseCase } from '../../../../../packages/core/src/application/use-cases/features/create/create-feature-from-remote.use-case.js';
18
19
  import { SdlcLifecycle } from '../../../../../packages/core/src/domain/generated/output.js';
19
20
  import { colors, messages, spinner } from '../../ui/index.js';
20
21
  import { getCliI18n } from '../../i18n.js';
@@ -57,6 +58,7 @@ export function createNewCommand() {
57
58
  .description(t('cli:commands.feat.new.description'))
58
59
  .argument('<description>', t('cli:commands.feat.new.descriptionArgument'))
59
60
  .option('-r, --repo <path>', t('cli:commands.feat.new.repoOption'))
61
+ .option('--remote <url>', t('cli:commands.feat.new.remoteOption'))
60
62
  .option('--push', t('cli:commands.feat.new.pushOption'))
61
63
  .option('--pr', t('cli:commands.feat.new.prOption'))
62
64
  .option('--no-pr', t('cli:commands.feat.new.noPrOption'))
@@ -75,6 +77,12 @@ export function createNewCommand() {
75
77
  .option('--attach <path>', t('cli:commands.feat.new.attachOption'), collect, [])
76
78
  .action(async (description, options) => {
77
79
  try {
80
+ // Conflict check: --remote and --repo are mutually exclusive
81
+ if (options.remote && options.repo) {
82
+ messages.error(t('cli:commands.feat.new.remoteConflict'));
83
+ process.exitCode = 1;
84
+ return;
85
+ }
78
86
  // First-run onboarding gate — only for interactive terminals
79
87
  if (process.stdin.isTTY) {
80
88
  const { isComplete } = await new CheckOnboardingStatusUseCase().execute();
@@ -82,7 +90,6 @@ export function createNewCommand() {
82
90
  await onboardingWizard();
83
91
  }
84
92
  }
85
- const useCase = container.resolve(CreateFeatureUseCase);
86
93
  const repoPath = options.repo ?? process.cwd();
87
94
  // Resolve openPr from CLI flags or settings defaults
88
95
  const defaults = getWorkflowDefaults();
@@ -122,9 +129,8 @@ export function createNewCommand() {
122
129
  }
123
130
  }
124
131
  const fast = options.fast ?? defaults.fast;
125
- const result = await spinner(t('cli:commands.feat.new.spinnerText'), () => useCase.execute({
132
+ const commonInput = {
126
133
  userInput: description,
127
- repositoryPath: repoPath,
128
134
  approvalGates,
129
135
  push,
130
136
  openPr,
@@ -133,9 +139,29 @@ export function createNewCommand() {
133
139
  ...(fast && { fast: true }),
134
140
  ...(options.model !== undefined && { model: options.model }),
135
141
  ...(attachmentPaths.length > 0 && { attachmentPaths }),
136
- ...(options.injectSkills !== undefined && { injectSkills: options.injectSkills }),
137
- rebaseBeforeBranch: options.rebase,
138
- }));
142
+ };
143
+ let result;
144
+ if (options.remote) {
145
+ // Remote path: clone (or fork) then create feature
146
+ const settings = getSettings();
147
+ const defaultCloneDir = settings.environment?.defaultCloneDirectory;
148
+ const remoteUseCase = container.resolve(CreateFeatureFromRemoteUseCase);
149
+ result = await spinner(t('cli:commands.feat.new.spinnerText'), () => remoteUseCase.execute({
150
+ ...commonInput,
151
+ remoteUrl: options.remote,
152
+ defaultCloneDir,
153
+ }));
154
+ }
155
+ else {
156
+ // Local path: create feature on existing repo
157
+ const useCase = container.resolve(CreateFeatureUseCase);
158
+ result = await spinner(t('cli:commands.feat.new.spinnerText'), () => useCase.execute({
159
+ ...commonInput,
160
+ repositoryPath: repoPath,
161
+ ...(options.injectSkills !== undefined && { injectSkills: options.injectSkills }),
162
+ rebaseBeforeBranch: options.rebase,
163
+ }));
164
+ }
139
165
  const { feature, warning } = result;
140
166
  const repoHash = createHash('sha256').update(repoPath).digest('hex').slice(0, 16);
141
167
  const wtSlug = feature.branch.replace(/\//g, '-');
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/repo/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAS3C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/repo/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAU3C"}
@@ -15,6 +15,7 @@ import { Command } from 'commander';
15
15
  import { createShowCommand } from './show.command.js';
16
16
  import { createLsCommand } from './ls.command.js';
17
17
  import { createAddCommand } from './add.command.js';
18
+ import { createInitRemoteCommand } from './init-remote.command.js';
18
19
  import { getCliI18n } from '../../i18n.js';
19
20
  /**
20
21
  * Create the repo command with all subcommands
@@ -25,6 +26,7 @@ export function createRepoCommand() {
25
26
  .description(t('cli:commands.repo.description'))
26
27
  .addCommand(createLsCommand())
27
28
  .addCommand(createShowCommand())
28
- .addCommand(createAddCommand());
29
+ .addCommand(createAddCommand())
30
+ .addCommand(createInitRemoteCommand());
29
31
  return repo;
30
32
  }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Repo Init-Remote Command
3
+ *
4
+ * Creates a GitHub repository from a local repo that has no remote,
5
+ * configures the origin remote, and pushes the current branch.
6
+ *
7
+ * Usage:
8
+ * shep repo init-remote # Private repo, name from cwd basename
9
+ * shep repo init-remote my-project # Explicit repo name
10
+ * shep repo init-remote --public # Public repo
11
+ * shep repo init-remote --org myorg # Create under an organization
12
+ */
13
+ import { Command } from 'commander';
14
+ export declare function createInitRemoteCommand(): Command;
15
+ //# sourceMappingURL=init-remote.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-remote.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/repo/init-remote.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,uBAAuB,IAAI,OAAO,CA6BjD"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Repo Init-Remote Command
3
+ *
4
+ * Creates a GitHub repository from a local repo that has no remote,
5
+ * configures the origin remote, and pushes the current branch.
6
+ *
7
+ * Usage:
8
+ * shep repo init-remote # Private repo, name from cwd basename
9
+ * shep repo init-remote my-project # Explicit repo name
10
+ * shep repo init-remote --public # Public repo
11
+ * shep repo init-remote --org myorg # Create under an organization
12
+ */
13
+ import { Command } from 'commander';
14
+ import { container } from '../../../../../packages/core/src/infrastructure/di/container.js';
15
+ import { InitRemoteRepositoryUseCase } from '../../../../../packages/core/src/application/use-cases/repositories/init-remote-repository.use-case.js';
16
+ import { messages, colors } from '../../ui/index.js';
17
+ import { getCliI18n } from '../../i18n.js';
18
+ export function createInitRemoteCommand() {
19
+ const t = getCliI18n().t;
20
+ return new Command('init-remote')
21
+ .description(t('cli:commands.repo.initRemote.description'))
22
+ .argument('[name]', t('cli:commands.repo.initRemote.nameArgument'))
23
+ .option('--public', t('cli:commands.repo.initRemote.publicOption'))
24
+ .option('--org <name>', t('cli:commands.repo.initRemote.orgOption'))
25
+ .action(async (name, options) => {
26
+ try {
27
+ const useCase = container.resolve(InitRemoteRepositoryUseCase);
28
+ const cwd = process.cwd();
29
+ const result = await useCase.execute({
30
+ cwd,
31
+ name,
32
+ isPrivate: !options.public,
33
+ org: options.org,
34
+ });
35
+ messages.success(t('cli:commands.repo.initRemote.created', { name: result.name }));
36
+ console.log(` ${colors.muted(t('cli:commands.repo.initRemote.urlLabel'))} ${colors.accent(result.url)}`);
37
+ }
38
+ catch (error) {
39
+ const err = error instanceof Error ? error : new Error(String(error));
40
+ messages.error(t('cli:commands.repo.initRemote.failed'), err);
41
+ process.exitCode = 1;
42
+ }
43
+ });
44
+ }
@@ -0,0 +1,31 @@
1
+ import type { Feature } from '../../../../../packages/core/src/domain/generated/output.js';
2
+ interface Attachment {
3
+ path: string;
4
+ name: string;
5
+ notes?: string;
6
+ }
7
+ interface CreateFeatureFromRemoteInput {
8
+ /** GitHub URL or owner/repo shorthand */
9
+ remoteUrl: string;
10
+ description: string;
11
+ attachments?: Attachment[];
12
+ sessionId?: string;
13
+ approvalGates?: {
14
+ allowPrd: boolean;
15
+ allowPlan: boolean;
16
+ allowMerge?: boolean;
17
+ };
18
+ push?: boolean;
19
+ openPr?: boolean;
20
+ parentId?: string;
21
+ fast?: boolean;
22
+ pending?: boolean;
23
+ agentType?: string;
24
+ model?: string;
25
+ }
26
+ export declare function createFeatureFromRemote(input: CreateFeatureFromRemoteInput): Promise<{
27
+ feature?: Feature;
28
+ error?: string;
29
+ }>;
30
+ export {};
31
+ //# sourceMappingURL=create-feature-from-remote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-feature-from-remote.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/create-feature-from-remote.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAQpE,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD,UAAU,4BAA4B;IACpC,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE;QACd,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAuFhD"}
@@ -0,0 +1,69 @@
1
+ 'use server';
2
+ import { resolve } from '../../lib/server-container.js';
3
+ import { GitHubAuthError, GitHubUrlParseError, GitHubCloneError, } from '../../../../../packages/core/src/application/ports/output/services/github-repository-service.interface.js';
4
+ import { composeUserInput } from './compose-user-input.js';
5
+ export async function createFeatureFromRemote(input) {
6
+ const { remoteUrl, description, attachments, sessionId, approvalGates, push, openPr, parentId, fast, pending, agentType, model, } = input;
7
+ if (!remoteUrl?.trim()) {
8
+ return { error: 'GitHub URL is required' };
9
+ }
10
+ if (!description?.trim()) {
11
+ return { error: 'Description is required' };
12
+ }
13
+ const userInput = composeUserInput(description, attachments);
14
+ const gates = {
15
+ allowPrd: approvalGates?.allowPrd ?? false,
16
+ allowPlan: approvalGates?.allowPlan ?? false,
17
+ allowMerge: approvalGates?.allowMerge ?? false,
18
+ };
19
+ try {
20
+ const useCase = resolve('CreateFeatureFromRemoteUseCase');
21
+ // Phase 1 (fast): import repo + create DB record — returns immediately
22
+ const { feature, shouldSpawn } = await useCase.createRecord({
23
+ remoteUrl,
24
+ userInput,
25
+ approvalGates: gates,
26
+ push: push ?? false,
27
+ openPr: openPr ?? false,
28
+ ...(parentId ? { parentId } : {}),
29
+ description,
30
+ ...(fast ? { fast } : {}),
31
+ ...(pending ? { pending } : {}),
32
+ ...(agentType ? { agentType } : {}),
33
+ ...(model ? { model } : {}),
34
+ });
35
+ // Phase 2 (background): metadata generation, worktree, spec, agent spawn
36
+ useCase
37
+ .initializeAndSpawn(feature, {
38
+ remoteUrl,
39
+ userInput,
40
+ approvalGates: gates,
41
+ push: push ?? false,
42
+ openPr: openPr ?? false,
43
+ ...(parentId ? { parentId } : {}),
44
+ ...(fast ? { fast } : {}),
45
+ ...(pending ? { pending } : {}),
46
+ ...(agentType ? { agentType } : {}),
47
+ ...(model ? { model } : {}),
48
+ ...(sessionId ? { sessionId } : {}),
49
+ }, shouldSpawn)
50
+ .catch((err) => {
51
+ // eslint-disable-next-line no-console
52
+ console.error('[createFeatureFromRemote] initializeAndSpawn failed:', err);
53
+ });
54
+ return { feature };
55
+ }
56
+ catch (error) {
57
+ if (error instanceof GitHubAuthError) {
58
+ return { error: 'GitHub CLI is not authenticated. Run `gh auth login` to sign in.' };
59
+ }
60
+ if (error instanceof GitHubUrlParseError) {
61
+ return { error: `Invalid GitHub URL: ${error.message}` };
62
+ }
63
+ if (error instanceof GitHubCloneError) {
64
+ return { error: `Clone failed: ${error.message}` };
65
+ }
66
+ const message = error instanceof Error ? error.message : 'Failed to create feature from remote';
67
+ return { error: message };
68
+ }
69
+ }
@@ -5,6 +5,7 @@ interface ImportGitHubRepositoryInput {
5
5
  }
6
6
  export declare function importGitHubRepository(input: ImportGitHubRepositoryInput): Promise<{
7
7
  repository?: Repository;
8
+ forked?: boolean;
8
9
  error?: string;
9
10
  }>;
10
11
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"import-github-repository.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/import-github-repository.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAOvE,UAAU,2BAA2B;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC;IAAE,UAAU,CAAC,EAAE,UAAU,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAwBtD"}
1
+ {"version":3,"file":"import-github-repository.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/import-github-repository.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAOvE,UAAU,2BAA2B;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC;IAAE,UAAU,CAAC,EAAE,UAAU,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAwBxE"}
@@ -9,7 +9,7 @@ export async function importGitHubRepository(input) {
9
9
  try {
10
10
  const useCase = resolve('ImportGitHubRepositoryUseCase');
11
11
  const repository = await useCase.execute({ url, dest });
12
- return { repository };
12
+ return { repository, forked: repository.isFork === true };
13
13
  }
14
14
  catch (error) {
15
15
  if (error instanceof GitHubAuthError) {
@@ -21,6 +21,8 @@ export interface RepositoryOption {
21
21
  id: string;
22
22
  name: string;
23
23
  path: string;
24
+ isFork?: boolean;
25
+ upstreamUrl?: string;
24
26
  }
25
27
  export interface FeatureCreatePayload {
26
28
  description: string;
@@ -1 +1 @@
1
- {"version":3,"file":"feature-create-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feature-create-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx"],"names":[],"mappings":"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"}
@@ -644,7 +644,7 @@ export function RepositoryCombobox({ repositories, value, onChange, onAddReposit
644
644
  setQuery('');
645
645
  }
646
646
  }, [open]);
647
- return (_jsxs(_Fragment, { children: [_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { type: "button", role: "combobox", "aria-expanded": open, "aria-label": "Repository", disabled: disabled, "data-testid": "repository-combobox", className: cn('border-input bg-background ring-offset-background focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border px-3 py-2 text-sm focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50', !selectedRepo && 'text-muted-foreground'), children: [_jsx("span", { className: "truncate", children: selectedRepo ? selectedRepo.name : 'Select repository...' }), _jsx(ChevronsUpDown, { className: "ms-2 h-4 w-4 shrink-0 opacity-50" })] }) }), _jsx(PopoverContent, { className: "w-80 p-0", align: "start", "data-testid": "repository-combobox-content", children: _jsxs("div", { className: "flex flex-col", children: [_jsx("div", { className: "border-b p-2", children: _jsx(Input, { ref: inputRef, placeholder: t('createDrawer.searchRepositories'), value: query, onChange: (e) => setQuery(e.target.value), className: "h-8 border-0 p-0 text-sm shadow-none focus-visible:ring-0", "data-testid": "repository-search" }) }), _jsx("div", { className: "max-h-48 overflow-y-auto py-1", role: "listbox", "aria-label": "Repositories", children: filtered.length === 0 ? (_jsx("p", { className: "text-muted-foreground px-3 py-2 text-sm", "data-testid": "repository-empty", children: "No repositories found." })) : (filtered.map((r) => (_jsxs("button", { type: "button", role: "option", "aria-selected": value === r.path, onClick: () => handleSelect(r.path), className: cn('hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm', value === r.path && 'bg-accent/50'), "data-testid": `repository-option-${r.id}`, children: [_jsx(CheckIcon, { className: cn('h-4 w-4 shrink-0', value !== r.path && 'invisible') }), _jsxs("span", { className: "flex flex-col items-start truncate", children: [_jsx("span", { className: "truncate", children: r.name }), _jsx("span", { className: "text-muted-foreground truncate text-xs", children: r.path })] })] }, r.id)))) }), _jsx(Separator, {}), _jsxs("button", { type: "button", onClick: handleAddRepository, disabled: isAdding, className: "hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm", "data-testid": "add-repository-item", children: [isAdding ? (_jsx(Loader2, { className: "h-4 w-4 shrink-0 animate-spin" })) : (_jsx(FolderPlus, { className: "h-4 w-4 shrink-0" })), _jsx("span", { children: "Add new repository..." })] }), addError ? (_jsx("p", { className: "px-3 pb-2 text-xs text-red-500", "data-testid": "add-repository-error", children: addError })) : null] }) })] }), _jsx(ReactFileManagerDialog, { open: showReactPicker, onOpenChange: (isOpen) => {
647
+ return (_jsxs(_Fragment, { children: [_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { type: "button", role: "combobox", "aria-expanded": open, "aria-label": "Repository", disabled: disabled, "data-testid": "repository-combobox", className: cn('border-input bg-background ring-offset-background focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border px-3 py-2 text-sm focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50', !selectedRepo && 'text-muted-foreground'), children: [_jsx("span", { className: "truncate", children: selectedRepo ? selectedRepo.name : 'Select repository...' }), _jsx(ChevronsUpDown, { className: "ms-2 h-4 w-4 shrink-0 opacity-50" })] }) }), _jsx(PopoverContent, { className: "w-80 p-0", align: "start", "data-testid": "repository-combobox-content", children: _jsxs("div", { className: "flex flex-col", children: [_jsx("div", { className: "border-b p-2", children: _jsx(Input, { ref: inputRef, placeholder: t('createDrawer.searchRepositories'), value: query, onChange: (e) => setQuery(e.target.value), className: "h-8 border-0 p-0 text-sm shadow-none focus-visible:ring-0", "data-testid": "repository-search" }) }), _jsx("div", { className: "max-h-48 overflow-y-auto py-1", role: "listbox", "aria-label": "Repositories", children: filtered.length === 0 ? (_jsx("p", { className: "text-muted-foreground px-3 py-2 text-sm", "data-testid": "repository-empty", children: "No repositories found." })) : (filtered.map((r) => (_jsxs("button", { type: "button", role: "option", "aria-selected": value === r.path, onClick: () => handleSelect(r.path), className: cn('hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm', value === r.path && 'bg-accent/50'), "data-testid": `repository-option-${r.id}`, children: [_jsx(CheckIcon, { className: cn('h-4 w-4 shrink-0', value !== r.path && 'invisible') }), _jsxs("span", { className: "flex flex-col items-start truncate", children: [_jsxs("span", { className: "flex items-center gap-1.5 truncate", children: [r.name, r.isFork ? (_jsxs(Badge, { variant: "outline", className: "h-4 shrink-0 px-1 text-[10px]", children: [_jsx(GitFork, { className: "mr-0.5 h-2.5 w-2.5" }), "Fork"] })) : null] }), _jsx("span", { className: "text-muted-foreground truncate text-xs", children: r.path })] })] }, r.id)))) }), _jsx(Separator, {}), _jsxs("button", { type: "button", onClick: handleAddRepository, disabled: isAdding, className: "hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm", "data-testid": "add-repository-item", children: [isAdding ? (_jsx(Loader2, { className: "h-4 w-4 shrink-0 animate-spin" })) : (_jsx(FolderPlus, { className: "h-4 w-4 shrink-0" })), _jsx("span", { children: "Add new repository..." })] }), addError ? (_jsx("p", { className: "px-3 pb-2 text-xs text-red-500", "data-testid": "add-repository-error", children: addError })) : null] }) })] }), _jsx(ReactFileManagerDialog, { open: showReactPicker, onOpenChange: (isOpen) => {
648
648
  if (!isOpen)
649
649
  setShowReactPicker(false);
650
650
  }, onSelect: handleReactPickerSelect })] }));
@@ -11,4 +11,6 @@ export declare const EmptyList: Story;
11
11
  export declare const PreSelected: Story;
12
12
  /** Disabled state — combobox trigger button is non-interactive. */
13
13
  export declare const Disabled: Story;
14
+ /** Repositories with fork badges — forked repos show a "Fork" badge next to their name. */
15
+ export declare const WithForkBadges: Story;
14
16
  //# sourceMappingURL=repository-combobox.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"repository-combobox.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/repository-combobox.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAU7D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,kBAAkB,CAOzC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,kBAAkB,CAAC,CAAC;AA+BjD,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,EAAE,KAE9B,CAAC;AAEF,8FAA8F;AAC9F,eAAO,MAAM,SAAS,EAAE,KAEvB,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC"}
1
+ {"version":3,"file":"repository-combobox.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/repository-combobox.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AA6B7D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,kBAAkB,CAOzC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,kBAAkB,CAAC,CAAC;AA+BjD,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,EAAE,KAE9B,CAAC;AAEF,8FAA8F;AAC9F,eAAO,MAAM,SAAS,EAAE,KAEvB,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAEF,2FAA2F;AAC3F,eAAO,MAAM,cAAc,EAAE,KAE5B,CAAC"}
@@ -7,6 +7,24 @@ const SAMPLE_REPOSITORIES = [
7
7
  { id: 'repo-003', name: 'shared-lib', path: '/Users/dev/libs/shared-lib' },
8
8
  { id: 'repo-004', name: 'docs-site', path: '/Users/dev/projects/docs-site' },
9
9
  ];
10
+ const REPOS_WITH_FORKS = [
11
+ { id: 'repo-001', name: 'my-app', path: '/Users/dev/projects/my-app' },
12
+ {
13
+ id: 'repo-002',
14
+ name: 'api-service',
15
+ path: '/Users/dev/projects/api-service',
16
+ isFork: true,
17
+ upstreamUrl: 'https://github.com/upstream-org/api-service',
18
+ },
19
+ { id: 'repo-003', name: 'shared-lib', path: '/Users/dev/libs/shared-lib' },
20
+ {
21
+ id: 'repo-004',
22
+ name: 'open-source-tool',
23
+ path: '/Users/dev/projects/open-source-tool',
24
+ isFork: true,
25
+ upstreamUrl: 'https://github.com/community/open-source-tool',
26
+ },
27
+ ];
10
28
  const meta = {
11
29
  title: 'Drawers/Feature/RepositoryCombobox',
12
30
  component: RepositoryCombobox,
@@ -40,3 +58,7 @@ export const PreSelected = {
40
58
  export const Disabled = {
41
59
  render: () => _jsx(RepositoryComboboxWrapper, { repositories: SAMPLE_REPOSITORIES, disabled: true }),
42
60
  };
61
+ /** Repositories with fork badges — forked repos show a "Fork" badge next to their name. */
62
+ export const WithForkBadges = {
63
+ render: () => _jsx(RepositoryComboboxWrapper, { repositories: REPOS_WITH_FORKS }),
64
+ };
@@ -36,7 +36,7 @@ export function getFeatureFlags() {
36
36
  ? isEnabled(process.env.NEXT_PUBLIC_FLAG_ENV_DEPLOY)
37
37
  : true,
38
38
  debug: false,
39
- githubImport: false,
39
+ githubImport: true,
40
40
  adoptBranch: false,
41
41
  gitRebaseSync: false,
42
42
  reactFileManager: isEnabled(process.env.NEXT_PUBLIC_FLAG_REACT_FILE_MANAGER),
@@ -209,6 +209,9 @@
209
209
  "injectSkillsOption": "Inject curated skills into the worktree",
210
210
  "noInjectSkillsOption": "Skip skill injection for this invocation",
211
211
  "attachOption": "إرفاق ملف (قابل للتكرار)",
212
+ "remoteOption": "GitHub URL or owner/repo — clone (or fork) then create feature",
213
+ "remoteConflict": "Cannot use --remote with --repo. --remote clones the repo first.",
214
+ "forkedInfo": "Auto-forked (no push access to original)",
212
215
  "parentNotFound": "الميزة الأصلية غير موجودة: {{id}}",
213
216
  "attachmentNotFound": "المرفق غير موجود: {{path}}",
214
217
  "spinnerText": "جارٍ التفكير",
@@ -438,6 +441,15 @@
438
441
  "cloneFailed": "فشل الاستنساخ: {{error}}",
439
442
  "failedToImport": "فشل استيراد المستودع"
440
443
  },
444
+ "initRemote": {
445
+ "description": "Create a GitHub repository from the current local repo",
446
+ "nameArgument": "Repository name (defaults to directory name)",
447
+ "publicOption": "Create a public repository (default: private)",
448
+ "orgOption": "GitHub organization to create the repo under",
449
+ "created": "GitHub repository created: {{name}}",
450
+ "urlLabel": "URL:",
451
+ "failed": "Failed to create GitHub repository"
452
+ },
441
453
  "ls": {
442
454
  "description": "عرض المستودعات المتتبعة",
443
455
  "title": "المستودعات",
@@ -209,6 +209,9 @@
209
209
  "injectSkillsOption": "Inject curated skills into the worktree",
210
210
  "noInjectSkillsOption": "Skip skill injection for this invocation",
211
211
  "attachOption": "Eine Datei anhängen (wiederholbar)",
212
+ "remoteOption": "GitHub URL or owner/repo — clone (or fork) then create feature",
213
+ "remoteConflict": "Cannot use --remote with --repo. --remote clones the repo first.",
214
+ "forkedInfo": "Auto-forked (no push access to original)",
212
215
  "parentNotFound": "Übergeordnetes Feature nicht gefunden: {{id}}",
213
216
  "attachmentNotFound": "Anhang nicht gefunden: {{path}}",
214
217
  "spinnerText": "Denke nach",
@@ -438,6 +441,15 @@
438
441
  "cloneFailed": "Klonen fehlgeschlagen: {{error}}",
439
442
  "failedToImport": "Repository konnte nicht importiert werden"
440
443
  },
444
+ "initRemote": {
445
+ "description": "Create a GitHub repository from the current local repo",
446
+ "nameArgument": "Repository name (defaults to directory name)",
447
+ "publicOption": "Create a public repository (default: private)",
448
+ "orgOption": "GitHub organization to create the repo under",
449
+ "created": "GitHub repository created: {{name}}",
450
+ "urlLabel": "URL:",
451
+ "failed": "Failed to create GitHub repository"
452
+ },
441
453
  "ls": {
442
454
  "description": "Verfolgte Repositories auflisten",
443
455
  "title": "Repositories",
@@ -209,6 +209,9 @@
209
209
  "injectSkillsOption": "Inject curated skills into the worktree",
210
210
  "noInjectSkillsOption": "Skip skill injection for this invocation",
211
211
  "attachOption": "Attach a file (repeatable)",
212
+ "remoteOption": "GitHub URL or owner/repo — clone (or fork) then create feature",
213
+ "remoteConflict": "Cannot use --remote with --repo. --remote clones the repo first.",
214
+ "forkedInfo": "Auto-forked (no push access to original)",
212
215
  "parentNotFound": "Parent feature not found: {{id}}",
213
216
  "attachmentNotFound": "Attachment not found: {{path}}",
214
217
  "spinnerText": "Thinking",
@@ -438,6 +441,15 @@
438
441
  "cloneFailed": "Clone failed: {{error}}",
439
442
  "failedToImport": "Failed to import repository"
440
443
  },
444
+ "initRemote": {
445
+ "description": "Create a GitHub repository from the current local repo",
446
+ "nameArgument": "Repository name (defaults to directory name)",
447
+ "publicOption": "Create a public repository (default: private)",
448
+ "orgOption": "GitHub organization to create the repo under",
449
+ "created": "GitHub repository created: {{name}}",
450
+ "urlLabel": "URL:",
451
+ "failed": "Failed to create GitHub repository"
452
+ },
441
453
  "ls": {
442
454
  "description": "List tracked repositories",
443
455
  "title": "Repositories",
@@ -209,6 +209,9 @@
209
209
  "injectSkillsOption": "Inject curated skills into the worktree",
210
210
  "noInjectSkillsOption": "Skip skill injection for this invocation",
211
211
  "attachOption": "Adjuntar un archivo (repetible)",
212
+ "remoteOption": "GitHub URL or owner/repo — clone (or fork) then create feature",
213
+ "remoteConflict": "Cannot use --remote with --repo. --remote clones the repo first.",
214
+ "forkedInfo": "Auto-forked (no push access to original)",
212
215
  "parentNotFound": "Funcionalidad padre no encontrada: {{id}}",
213
216
  "attachmentNotFound": "Archivo adjunto no encontrado: {{path}}",
214
217
  "spinnerText": "Pensando",
@@ -438,6 +441,15 @@
438
441
  "cloneFailed": "Error al clonar: {{error}}",
439
442
  "failedToImport": "Error al importar el repositorio"
440
443
  },
444
+ "initRemote": {
445
+ "description": "Create a GitHub repository from the current local repo",
446
+ "nameArgument": "Repository name (defaults to directory name)",
447
+ "publicOption": "Create a public repository (default: private)",
448
+ "orgOption": "GitHub organization to create the repo under",
449
+ "created": "GitHub repository created: {{name}}",
450
+ "urlLabel": "URL:",
451
+ "failed": "Failed to create GitHub repository"
452
+ },
441
453
  "ls": {
442
454
  "description": "Listar repositorios rastreados",
443
455
  "title": "Repositorios",
@@ -209,6 +209,9 @@
209
209
  "injectSkillsOption": "Inject curated skills into the worktree",
210
210
  "noInjectSkillsOption": "Skip skill injection for this invocation",
211
211
  "attachOption": "Joindre un fichier (répétable)",
212
+ "remoteOption": "GitHub URL or owner/repo — clone (or fork) then create feature",
213
+ "remoteConflict": "Cannot use --remote with --repo. --remote clones the repo first.",
214
+ "forkedInfo": "Auto-forked (no push access to original)",
212
215
  "parentNotFound": "Fonctionnalité parente introuvable : {{id}}",
213
216
  "attachmentNotFound": "Pièce jointe introuvable : {{path}}",
214
217
  "spinnerText": "Réflexion en cours",
@@ -438,6 +441,15 @@
438
441
  "cloneFailed": "Échec du clonage : {{error}}",
439
442
  "failedToImport": "Échec de l'importation du dépôt"
440
443
  },
444
+ "initRemote": {
445
+ "description": "Create a GitHub repository from the current local repo",
446
+ "nameArgument": "Repository name (defaults to directory name)",
447
+ "publicOption": "Create a public repository (default: private)",
448
+ "orgOption": "GitHub organization to create the repo under",
449
+ "created": "GitHub repository created: {{name}}",
450
+ "urlLabel": "URL:",
451
+ "failed": "Failed to create GitHub repository"
452
+ },
441
453
  "ls": {
442
454
  "description": "Lister les dépôts suivis",
443
455
  "title": "Dépôts",
@@ -209,6 +209,9 @@
209
209
  "injectSkillsOption": "Inject curated skills into the worktree",
210
210
  "noInjectSkillsOption": "Skip skill injection for this invocation",
211
211
  "attachOption": "צרף קובץ (ניתן לחזור)",
212
+ "remoteOption": "GitHub URL or owner/repo — clone (or fork) then create feature",
213
+ "remoteConflict": "Cannot use --remote with --repo. --remote clones the repo first.",
214
+ "forkedInfo": "Auto-forked (no push access to original)",
212
215
  "parentNotFound": "פיצ'ר הורה לא נמצא: {{id}}",
213
216
  "attachmentNotFound": "קובץ מצורף לא נמצא: {{path}}",
214
217
  "spinnerText": "חושב",
@@ -438,6 +441,15 @@
438
441
  "cloneFailed": "השיבוט נכשל: {{error}}",
439
442
  "failedToImport": "ייבוא המאגר נכשל"
440
443
  },
444
+ "initRemote": {
445
+ "description": "Create a GitHub repository from the current local repo",
446
+ "nameArgument": "Repository name (defaults to directory name)",
447
+ "publicOption": "Create a public repository (default: private)",
448
+ "orgOption": "GitHub organization to create the repo under",
449
+ "created": "GitHub repository created: {{name}}",
450
+ "urlLabel": "URL:",
451
+ "failed": "Failed to create GitHub repository"
452
+ },
441
453
  "ls": {
442
454
  "description": "הצג רשימת מאגרים מנוטרים",
443
455
  "title": "מאגרים",
@@ -209,6 +209,9 @@
209
209
  "injectSkillsOption": "Inject curated skills into the worktree",
210
210
  "noInjectSkillsOption": "Skip skill injection for this invocation",
211
211
  "attachOption": "Anexar um arquivo (repetível)",
212
+ "remoteOption": "GitHub URL or owner/repo — clone (or fork) then create feature",
213
+ "remoteConflict": "Cannot use --remote with --repo. --remote clones the repo first.",
214
+ "forkedInfo": "Auto-forked (no push access to original)",
212
215
  "parentNotFound": "Recurso pai não encontrado: {{id}}",
213
216
  "attachmentNotFound": "Anexo não encontrado: {{path}}",
214
217
  "spinnerText": "Pensando",
@@ -438,6 +441,15 @@
438
441
  "cloneFailed": "Clone falhou: {{error}}",
439
442
  "failedToImport": "Falha ao importar repositório"
440
443
  },
444
+ "initRemote": {
445
+ "description": "Create a GitHub repository from the current local repo",
446
+ "nameArgument": "Repository name (defaults to directory name)",
447
+ "publicOption": "Create a public repository (default: private)",
448
+ "orgOption": "GitHub organization to create the repo under",
449
+ "created": "GitHub repository created: {{name}}",
450
+ "urlLabel": "URL:",
451
+ "failed": "Failed to create GitHub repository"
452
+ },
441
453
  "ls": {
442
454
  "description": "Listar repositórios rastreados",
443
455
  "title": "Repositórios",
@@ -209,6 +209,9 @@
209
209
  "injectSkillsOption": "Inject curated skills into the worktree",
210
210
  "noInjectSkillsOption": "Skip skill injection for this invocation",
211
211
  "attachOption": "Прикрепить файл (можно повторять)",
212
+ "remoteOption": "GitHub URL or owner/repo — clone (or fork) then create feature",
213
+ "remoteConflict": "Cannot use --remote with --repo. --remote clones the repo first.",
214
+ "forkedInfo": "Auto-forked (no push access to original)",
212
215
  "parentNotFound": "Родительская функция не найдена: {{id}}",
213
216
  "attachmentNotFound": "Вложение не найдено: {{path}}",
214
217
  "spinnerText": "Обработка",
@@ -438,6 +441,15 @@
438
441
  "cloneFailed": "Ошибка клонирования: {{error}}",
439
442
  "failedToImport": "Не удалось импортировать репозиторий"
440
443
  },
444
+ "initRemote": {
445
+ "description": "Create a GitHub repository from the current local repo",
446
+ "nameArgument": "Repository name (defaults to directory name)",
447
+ "publicOption": "Create a public repository (default: private)",
448
+ "orgOption": "GitHub organization to create the repo under",
449
+ "created": "GitHub repository created: {{name}}",
450
+ "urlLabel": "URL:",
451
+ "failed": "Failed to create GitHub repository"
452
+ },
441
453
  "ls": {
442
454
  "description": "Показать список отслеживаемых репозиториев",
443
455
  "title": "Репозитории",