@shepai/cli 1.171.0 → 1.172.0-pr528.619145

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 (228) hide show
  1. package/apis/json-schema/AgentType.yaml +1 -0
  2. package/dist/packages/core/src/domain/generated/output.d.ts +1 -0
  3. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  4. package/dist/packages/core/src/domain/generated/output.js +1 -0
  5. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  6. package/dist/packages/core/src/infrastructure/di/container.js +3 -0
  7. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts.map +1 -1
  8. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.js +23 -0
  9. package/dist/packages/core/src/infrastructure/services/agents/common/agent-validator.service.d.ts.map +1 -1
  10. package/dist/packages/core/src/infrastructure/services/agents/common/agent-validator.service.js +1 -0
  11. package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.d.ts +63 -0
  12. package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.d.ts.map +1 -0
  13. package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.js +494 -0
  14. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/codex.json +32 -0
  15. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/copilot.json +32 -0
  16. package/dist/src/presentation/tui/prompts/agent-select.prompt.d.ts.map +1 -1
  17. package/dist/src/presentation/tui/prompts/agent-select.prompt.js +5 -0
  18. package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts.map +1 -1
  19. package/dist/src/presentation/web/app/actions/check-agent-auth.js +18 -0
  20. package/dist/src/presentation/web/app/actions/get-all-agent-models.d.ts.map +1 -1
  21. package/dist/src/presentation/web/app/actions/get-all-agent-models.js +4 -2
  22. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.d.ts +1 -1
  23. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.d.ts.map +1 -1
  24. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.js +2 -0
  25. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.stories.d.ts.map +1 -1
  26. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.stories.js +1 -0
  27. package/dist/src/presentation/web/components/common/repo-group/repo-group.js +1 -1
  28. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.d.ts +1 -0
  29. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.d.ts.map +1 -1
  30. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.js +7 -0
  31. package/dist/src/presentation/web/components/features/settings/agent-settings-section.d.ts.map +1 -1
  32. package/dist/src/presentation/web/components/features/settings/agent-settings-section.js +11 -3
  33. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts +1 -0
  34. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts.map +1 -1
  35. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.js +8 -0
  36. package/dist/translations/ar/tui.json +4 -0
  37. package/dist/translations/de/tui.json +4 -0
  38. package/dist/translations/en/tui.json +4 -0
  39. package/dist/translations/es/tui.json +4 -0
  40. package/dist/translations/fr/tui.json +4 -0
  41. package/dist/translations/he/tui.json +4 -0
  42. package/dist/translations/pt/tui.json +4 -0
  43. package/dist/translations/ru/tui.json +4 -0
  44. package/dist/tsconfig.build.tsbuildinfo +1 -1
  45. package/package.json +1 -1
  46. package/web/.next/BUILD_ID +1 -1
  47. package/web/.next/build-manifest.json +2 -2
  48. package/web/.next/fallback-build-manifest.json +2 -2
  49. package/web/.next/prerender-manifest.json +3 -3
  50. package/web/.next/required-server-files.js +3 -3
  51. package/web/.next/required-server-files.json +3 -3
  52. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  53. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  54. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  55. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  56. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  57. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  58. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
  59. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  60. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  61. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +38 -38
  62. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  63. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  64. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +38 -38
  65. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  66. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  67. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  68. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  69. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  70. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  71. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  72. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  73. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  74. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  75. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  76. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
  77. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  78. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  79. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +38 -38
  80. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  81. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  82. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +38 -38
  83. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  84. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  85. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  86. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  87. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  88. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  89. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  90. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  91. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  92. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  93. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  94. package/web/.next/server/app/_global-error.html +2 -2
  95. package/web/.next/server/app/_global-error.rsc +1 -1
  96. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  97. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  98. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  99. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  100. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  101. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  102. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  103. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  104. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  105. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  106. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  107. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  108. package/web/.next/server/app/features/page/server-reference-manifest.json +6 -6
  109. package/web/.next/server/app/features/page.js.nft.json +1 -1
  110. package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
  111. package/web/.next/server/app/settings/page/server-reference-manifest.json +9 -9
  112. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  113. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  114. package/web/.next/server/app/skills/page/server-reference-manifest.json +13 -13
  115. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  116. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  117. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  118. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  119. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  120. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  121. package/web/.next/server/app/version/page.js.nft.json +1 -1
  122. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  123. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  124. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js +1 -1
  125. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -1
  126. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  127. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  128. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  129. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  130. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
  131. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  132. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js +1 -1
  133. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js.map +1 -1
  134. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +1 -1
  135. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +1 -1
  136. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  137. package/web/.next/server/chunks/ssr/[root-of-the-server]__4fb81977._.js +1 -1
  138. package/web/.next/server/chunks/ssr/[root-of-the-server]__4fb81977._.js.map +1 -1
  139. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js +1 -1
  140. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js.map +1 -1
  141. package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js +1 -1
  142. package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js.map +1 -1
  143. package/web/.next/server/chunks/ssr/[root-of-the-server]__92ffd5ee._.js +2 -2
  144. package/web/.next/server/chunks/ssr/[root-of-the-server]__92ffd5ee._.js.map +1 -1
  145. package/web/.next/server/chunks/ssr/[root-of-the-server]__b020c17d._.js +2 -2
  146. package/web/.next/server/chunks/ssr/[root-of-the-server]__b020c17d._.js.map +1 -1
  147. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +1 -1
  148. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -1
  149. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js +1 -1
  150. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js.map +1 -1
  151. package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js +1 -1
  152. package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js.map +1 -1
  153. package/web/.next/server/chunks/ssr/_02e01240._.js +1 -1
  154. package/web/.next/server/chunks/ssr/_02e01240._.js.map +1 -1
  155. package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
  156. package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
  157. package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
  158. package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
  159. package/web/.next/server/chunks/ssr/_18886033._.js +1 -1
  160. package/web/.next/server/chunks/ssr/_18886033._.js.map +1 -1
  161. package/web/.next/server/chunks/ssr/_22e00a14._.js +1 -1
  162. package/web/.next/server/chunks/ssr/_22e00a14._.js.map +1 -1
  163. package/web/.next/server/chunks/ssr/{_d50cde79._.js → _39147808._.js} +2 -2
  164. package/web/.next/server/chunks/ssr/{_d50cde79._.js.map → _39147808._.js.map} +1 -1
  165. package/web/.next/server/chunks/ssr/{_f778f3ef._.js → _3cfb4ce1._.js} +2 -2
  166. package/web/.next/server/chunks/ssr/{_f778f3ef._.js.map → _3cfb4ce1._.js.map} +1 -1
  167. package/web/.next/server/chunks/ssr/_45496654._.js +1 -1
  168. package/web/.next/server/chunks/ssr/_45496654._.js.map +1 -1
  169. package/web/.next/server/chunks/ssr/_4cbb7f95._.js +1 -1
  170. package/web/.next/server/chunks/ssr/_4cbb7f95._.js.map +1 -1
  171. package/web/.next/server/chunks/ssr/_5119a3df._.js.map +1 -1
  172. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  173. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  174. package/web/.next/server/chunks/ssr/{_49447b3c._.js → _8e3828d3._.js} +2 -2
  175. package/web/.next/server/chunks/ssr/{_49447b3c._.js.map → _8e3828d3._.js.map} +1 -1
  176. package/web/.next/server/chunks/ssr/_a5a5901d._.js +1 -1
  177. package/web/.next/server/chunks/ssr/_a5a5901d._.js.map +1 -1
  178. package/web/.next/server/chunks/ssr/_ad09f271._.js +1 -1
  179. package/web/.next/server/chunks/ssr/_ad09f271._.js.map +1 -1
  180. package/web/.next/server/chunks/ssr/_c3f595c6._.js +1 -1
  181. package/web/.next/server/chunks/ssr/_c3f595c6._.js.map +1 -1
  182. package/web/.next/server/chunks/ssr/_df737cce._.js +1 -1
  183. package/web/.next/server/chunks/ssr/_ea9e1556._.js +1 -1
  184. package/web/.next/server/chunks/ssr/_ea9e1556._.js.map +1 -1
  185. package/web/.next/server/chunks/ssr/_f1ba9be6._.js +2 -2
  186. package/web/.next/server/chunks/ssr/_f1ba9be6._.js.map +1 -1
  187. package/web/.next/server/chunks/ssr/_f33cd07e._.js +2 -2
  188. package/web/.next/server/chunks/ssr/_f33cd07e._.js.map +1 -1
  189. package/web/.next/server/chunks/ssr/_f8b45233._.js +1 -1
  190. package/web/.next/server/chunks/ssr/_f8b45233._.js.map +1 -1
  191. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  192. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  193. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  194. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
  195. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
  196. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +1 -1
  197. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
  198. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
  199. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  200. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  201. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
  202. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
  203. package/web/.next/server/pages/500.html +2 -2
  204. package/web/.next/server/server-reference-manifest.js +1 -1
  205. package/web/.next/server/server-reference-manifest.json +50 -50
  206. package/web/.next/static/chunks/109f58becff0eaa2.js +1 -0
  207. package/web/.next/static/chunks/{9705f2a5695a4995.js → 3dbdf0c81a29f5a5.js} +1 -1
  208. package/web/.next/static/chunks/{a80bbfca8ee3d79b.js → 49f2125c4881efbc.js} +1 -1
  209. package/web/.next/static/chunks/4d53de52318846f4.js +1 -0
  210. package/web/.next/static/chunks/{5983ef48d50d2d2a.js → 539b4b3ff91bd762.js} +1 -1
  211. package/web/.next/static/chunks/{aa077ab14015a8fd.js → 5ea512f99e0640fe.js} +1 -1
  212. package/web/.next/static/chunks/{6ee5d45de67d3547.js → 64f42c465e85ae70.js} +3 -3
  213. package/web/.next/static/chunks/{67a430796dea42a7.js → 724db95300328e0d.js} +1 -1
  214. package/web/.next/static/chunks/{b93a918712cd4987.js → 79363cfd15eac50d.js} +1 -1
  215. package/web/.next/static/chunks/{3d182168cdc4c15c.js → 8c1e3f6dbbbb59e7.js} +1 -1
  216. package/web/.next/static/chunks/{4383bcae769740e7.js → ab32ef049942210e.js} +1 -1
  217. package/web/.next/static/chunks/{24dd6b3021c2d849.js → ae79dcb88796c551.js} +1 -1
  218. package/web/.next/static/chunks/{02fe1303471793b9.js → beb5358e4841c286.js} +2 -2
  219. package/web/.next/static/chunks/{0ce50b34df07306b.js → d51a12d63fb56be7.js} +1 -1
  220. package/web/.next/static/chunks/dcf8bb4389557a76.css +1 -0
  221. package/web/.next/static/chunks/{eff45ffddd85918c.js → de69c00721590908.js} +3 -3
  222. package/web/public/icons/agents/copilot.svg +12 -0
  223. package/web/.next/static/chunks/18d4601f068c700d.js +0 -1
  224. package/web/.next/static/chunks/b14085e99b88e7f7.css +0 -1
  225. package/web/.next/static/chunks/bb962a996814718a.js +0 -1
  226. /package/web/.next/static/{akDn2qFk1krSwrjt4345P → Gv_GqdT_QwPhH-8wWF2nQ}/_buildManifest.js +0 -0
  227. /package/web/.next/static/{akDn2qFk1krSwrjt4345P → Gv_GqdT_QwPhH-8wWF2nQ}/_clientMiddlewareManifest.json +0 -0
  228. /package/web/.next/static/{akDn2qFk1krSwrjt4345P → Gv_GqdT_QwPhH-8wWF2nQ}/_ssgManifest.js +0 -0
@@ -21,6 +21,7 @@ DevAgentIcon.displayName = 'DevAgentIcon';
21
21
  const agentTypeIconMap = {
22
22
  'claude-code': createBrandIcon('/icons/agents/claude-ai-icon.svg', 'Claude Code'),
23
23
  'codex-cli': createBrandIcon('/icons/agents/openai.svg', 'Codex CLI'),
24
+ 'copilot-cli': createBrandIcon('/icons/agents/copilot.svg', 'Copilot CLI'),
24
25
  cursor: createBrandIcon('/icons/agents/cursor.jpeg', 'Cursor'),
25
26
  'gemini-cli': createBrandIcon('/icons/agents/gemini-cli.jpeg', 'Gemini CLI'),
26
27
  aider: createBrandIcon('/icons/agents/aider.png', 'Aider'),
@@ -31,6 +32,7 @@ const agentTypeIconMap = {
31
32
  export const agentTypeLabels = {
32
33
  'claude-code': 'Claude Code',
33
34
  'codex-cli': 'Codex CLI',
35
+ 'copilot-cli': 'Copilot CLI',
34
36
  cursor: 'Cursor',
35
37
  'gemini-cli': 'Gemini CLI',
36
38
  aider: 'Aider',
@@ -1 +1 @@
1
- {"version":3,"file":"agent-type-icons.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/agent-type-icons.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA0CvD,QAAA,MAAM,IAAI,EAAE,IAIX,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC;AAEtB,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAa1B,CAAC"}
1
+ {"version":3,"file":"agent-type-icons.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/agent-type-icons.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA2CvD,QAAA,MAAM,IAAI,EAAE,IAIX,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC;AAEtB,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAa1B,CAAC"}
@@ -3,6 +3,7 @@ import { getAgentTypeIcon, DefaultAgentIcon } from './agent-type-icons.js';
3
3
  const allAgentTypes = [
4
4
  { type: 'claude-code', label: 'Claude Code' },
5
5
  { type: 'codex-cli', label: 'Codex CLI' },
6
+ { type: 'copilot-cli', label: 'Copilot CLI' },
6
7
  { type: 'cursor', label: 'Cursor' },
7
8
  { type: 'gemini-cli', label: 'Gemini CLI' },
8
9
  { type: 'aider', label: 'Aider' },
@@ -8,5 +8,5 @@ export function RepoGroup({ repoName, featureCount, children, defaultOpen = true
8
8
  return (_jsxs("div", { "data-testid": "repo-group", className: "group/repo mb-1", children: [_jsxs("div", { className: "flex items-center", children: [_jsxs("button", { type: "button", onClick: () => setOpen(!open), className: cn('text-sidebar-foreground hover:bg-sidebar-accent flex min-w-0 flex-1 items-center gap-1.5 rounded-md px-2 py-1.5 text-left text-xs font-semibold', 'transition-colors duration-100'), "aria-expanded": open, children: [_jsx(ChevronDown, { className: cn('text-muted-foreground h-3.5 w-3.5 shrink-0 transition-transform duration-200', !open && '-rotate-90') }), _jsx(GitFork, { className: "text-muted-foreground h-3.5 w-3.5 shrink-0" }), _jsx("span", { className: "min-w-0 flex-1 truncate", children: repoName }), _jsx("span", { "aria-label": `${featureCount} features`, className: "bg-sidebar-accent text-sidebar-accent-foreground ml-auto inline-flex h-4 min-w-4 shrink-0 items-center justify-center rounded-full px-1 text-[0.6rem] font-medium tabular-nums", role: "img", children: featureCount })] }), onAddFeature ? (_jsx("button", { type: "button", "data-testid": "repo-add-feature", onClick: (e) => {
9
9
  e.stopPropagation();
10
10
  onAddFeature();
11
- }, className: cn('text-muted-foreground hover:text-sidebar-foreground hover:bg-sidebar-accent shrink-0 rounded-md p-1 opacity-0 transition-all duration-100 group-hover/repo:opacity-100', 'focus-visible:ring-ring focus-visible:opacity-100 focus-visible:ring-1 focus-visible:outline-none'), "aria-label": `Add feature to ${repoName}`, children: _jsx(Plus, { className: "h-3.5 w-3.5" }) })) : null] }), open ? _jsx("div", { className: "pl-2", children: children }) : null] }));
11
+ }, className: cn('text-muted-foreground hover:text-sidebar-foreground hover:bg-sidebar-accent mr-2 shrink-0 rounded-md p-1 opacity-0 transition-all duration-100 group-hover/repo:opacity-100', 'focus-visible:ring-ring focus-visible:opacity-100 focus-visible:ring-1 focus-visible:outline-none'), "aria-label": `Add feature to ${repoName}`, children: _jsx(Plus, { className: "h-3.5 w-3.5" }) })) : null] }), open ? _jsx("div", { className: "pl-2", children: children }) : null] }));
12
12
  }
@@ -8,6 +8,7 @@ export declare const CursorSelected: Story;
8
8
  export declare const GeminiCli: Story;
9
9
  export declare const CodexCliSelected: Story;
10
10
  export declare const DemoAgent: Story;
11
+ export declare const CopilotCli: Story;
11
12
  export declare const OverrideMode: Story;
12
13
  export declare const Disabled: Story;
13
14
  export declare const SavingState: Story;
@@ -1 +1 @@
1
- {"version":3,"file":"AgentModelPicker.stories.d.ts","sourceRoot":"","sources":["../../../../../../../../src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAevC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAqBnC,eAAO,MAAM,iBAAiB,EAAE,KAM/B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAM5B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAM9B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAOtB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,KASnC,CAAC"}
1
+ {"version":3,"file":"AgentModelPicker.stories.d.ts","sourceRoot":"","sources":["../../../../../../../../src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAevC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAqBnC,eAAO,MAAM,iBAAiB,EAAE,KAM/B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAM5B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAM9B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAOtB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,KASnC,CAAC"}
@@ -60,6 +60,13 @@ export const DemoAgent = {
60
60
  mode: 'settings',
61
61
  },
62
62
  };
63
+ export const CopilotCli = {
64
+ args: {
65
+ initialAgentType: 'copilot-cli',
66
+ initialModel: 'claude-sonnet-4.5',
67
+ mode: 'settings',
68
+ },
69
+ };
63
70
  export const OverrideMode = {
64
71
  args: {
65
72
  initialAgentType: 'claude-code',
@@ -1 +1 @@
1
- {"version":3,"file":"agent-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/agent-settings-section.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAiBxE,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAAC,EAAE,KAAK,EAAE,EAAE,yBAAyB,2CA+IxE"}
1
+ {"version":3,"file":"agent-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/agent-settings-section.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAqBxE,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAAC,EAAE,KAAK,EAAE,EAAE,yBAAyB,2CAiKxE"}
@@ -14,12 +14,15 @@ import { getAgentTypeIcon } from '../../common/feature-node/agent-type-icons.js'
14
14
  const AGENT_TYPE_OPTIONS = [
15
15
  { value: AgentType.ClaudeCode, label: 'Claude Code' },
16
16
  { value: AgentType.CodexCli, label: 'Codex CLI' },
17
+ { value: AgentType.CopilotCli, label: 'Copilot CLI' },
17
18
  { value: AgentType.Cursor, label: 'Cursor' },
18
19
  { value: AgentType.GeminiCli, label: 'Gemini CLI' },
19
20
  { value: AgentType.Aider, label: 'Aider' },
20
21
  { value: AgentType.Continue, label: 'Continue' },
21
22
  { value: AgentType.Dev, label: 'Dev' },
22
23
  ];
24
+ /** Agent types that only support session-based auth (no API token). */
25
+ const SESSION_ONLY_AGENTS = new Set([AgentType.CopilotCli]);
23
26
  const AUTH_METHOD_OPTIONS = [
24
27
  { value: AgentAuthMethod.Session, label: 'Session' },
25
28
  { value: AgentAuthMethod.Token, label: 'Token' },
@@ -57,8 +60,13 @@ export function AgentSettingsSection({ agent }) {
57
60
  return { agent: result };
58
61
  }
59
62
  function handleAgentTypeChange(value) {
60
- setAgentType(value);
61
- save(buildPayload({ type: value }));
63
+ const newType = value;
64
+ const newAuthMethod = SESSION_ONLY_AGENTS.has(newType) ? AgentAuthMethod.Session : authMethod;
65
+ setAgentType(newType);
66
+ if (newAuthMethod !== authMethod) {
67
+ setAuthMethod(newAuthMethod);
68
+ }
69
+ save(buildPayload({ type: newType, authMethod: newAuthMethod }));
62
70
  }
63
71
  function handleAuthMethodChange(value) {
64
72
  setAuthMethod(value);
@@ -72,5 +80,5 @@ export function AgentSettingsSection({ agent }) {
72
80
  return (_jsxs(Card, { id: "agent", className: "scroll-mt-6", "data-testid": "agent-settings-section", children: [_jsxs(CardHeader, { children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Bot, { className: "text-muted-foreground h-4 w-4" }), _jsx(CardTitle, { children: "Preferred Agent" })] }), isPending ? _jsx("span", { className: "text-muted-foreground text-xs", children: "Saving..." }) : null, showSaved && !isPending ? (_jsxs("span", { className: "flex items-center gap-1 text-xs text-green-600", children: [_jsx(Check, { className: "h-3 w-3" }), "Saved"] })) : null] }), _jsx(CardDescription, { children: "Choose your AI coding agent and authentication method" })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "agent-type", children: "Agent Type" }), _jsxs(Select, { value: agentType, onValueChange: handleAgentTypeChange, children: [_jsx(SelectTrigger, { id: "agent-type", "data-testid": "agent-type-select", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: AGENT_TYPE_OPTIONS.map((opt) => {
73
81
  const Icon = getAgentTypeIcon(opt.value);
74
82
  return (_jsx(SelectItem, { value: opt.value, children: _jsxs("span", { className: "flex items-center gap-2", children: [_jsx(Icon, { className: "h-4 w-4 shrink-0" }), opt.label] }) }, opt.value));
75
- }) })] })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "auth-method", children: "Authentication Method" }), _jsxs(Select, { value: authMethod, onValueChange: handleAuthMethodChange, children: [_jsx(SelectTrigger, { id: "auth-method", "data-testid": "auth-method-select", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: AUTH_METHOD_OPTIONS.map((opt) => (_jsx(SelectItem, { value: opt.value, children: opt.label }, opt.value))) })] })] }), authMethod === AgentAuthMethod.Token && (_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "agent-token", children: "API Token" }), _jsxs("div", { className: "relative", children: [_jsx(Input, { id: "agent-token", "data-testid": "agent-token-input", type: showToken ? 'text' : 'password', value: token, onChange: (e) => setToken(e.target.value), onBlur: handleTokenBlur, placeholder: "Enter your API token", className: "pe-10" }), _jsx(Button, { type: "button", variant: "ghost", size: "sm", className: "absolute top-0 right-0 h-full px-3 hover:bg-transparent", onClick: () => setShowToken(!showToken), "data-testid": "toggle-token-visibility", "aria-label": showToken ? 'Hide token' : 'Show token', children: showToken ? _jsx(EyeOff, { className: "h-4 w-4" }) : _jsx(Eye, { className: "h-4 w-4" }) })] }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Saves automatically when you leave the field" })] }))] })] }));
83
+ }) })] })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "auth-method", children: "Authentication Method" }), _jsxs(Select, { value: authMethod, onValueChange: handleAuthMethodChange, disabled: SESSION_ONLY_AGENTS.has(agentType), children: [_jsx(SelectTrigger, { id: "auth-method", "data-testid": "auth-method-select", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: AUTH_METHOD_OPTIONS.filter((opt) => !SESSION_ONLY_AGENTS.has(agentType) || opt.value === AgentAuthMethod.Session).map((opt) => (_jsx(SelectItem, { value: opt.value, children: opt.label }, opt.value))) })] }), SESSION_ONLY_AGENTS.has(agentType) && (_jsxs("p", { className: "text-muted-foreground text-xs", children: ["Copilot CLI uses GitHub OAuth \u2014 authenticate with", ' ', _jsx("code", { className: "font-mono", children: "copilot auth login" }), ". No API token needed."] }))] }), authMethod === AgentAuthMethod.Token && (_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "agent-token", children: "API Token" }), _jsxs("div", { className: "relative", children: [_jsx(Input, { id: "agent-token", "data-testid": "agent-token-input", type: showToken ? 'text' : 'password', value: token, onChange: (e) => setToken(e.target.value), onBlur: handleTokenBlur, placeholder: "Enter your API token", className: "pe-10" }), _jsx(Button, { type: "button", variant: "ghost", size: "sm", className: "absolute top-0 right-0 h-full px-3 hover:bg-transparent", onClick: () => setShowToken(!showToken), "data-testid": "toggle-token-visibility", "aria-label": showToken ? 'Hide token' : 'Show token', children: showToken ? _jsx(EyeOff, { className: "h-4 w-4" }) : _jsx(Eye, { className: "h-4 w-4" }) })] }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Saves automatically when you leave the field" })] }))] })] }));
76
84
  }
@@ -14,4 +14,5 @@ export declare const Default: Story;
14
14
  export declare const TokenAuth: Story;
15
15
  export declare const CodexCli: Story;
16
16
  export declare const AiderSession: Story;
17
+ export declare const CopilotCli: Story;
17
18
  //# sourceMappingURL=agent-settings-section.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-settings-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/agent-settings-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,QAAA,MAAM,IAAI;;;;;;;CAOmC,CAAC;AAE9C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAOrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAOtB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAO1B,CAAC"}
1
+ {"version":3,"file":"agent-settings-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/agent-settings-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,QAAA,MAAM,IAAI;;;;;;;CAOmC,CAAC;AAE9C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAOrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAOtB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAO1B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAC"}
@@ -42,3 +42,11 @@ export const AiderSession = {
42
42
  },
43
43
  },
44
44
  };
45
+ export const CopilotCli = {
46
+ args: {
47
+ agent: {
48
+ type: AgentType.CopilotCli,
49
+ authMethod: AgentAuthMethod.Session,
50
+ },
51
+ },
52
+ };
@@ -15,6 +15,10 @@
15
15
  "name": "Codex CLI",
16
16
  "description": "وكيل Codex CLI من OpenAI للطرفية (نماذج GPT)"
17
17
  },
18
+ "copilotCli": {
19
+ "name": "Copilot CLI",
20
+ "description": "GitHub Copilot CLI (الإعداد الافتراضي: Claude Sonnet 4.5، يتطلب اشتراك Copilot)"
21
+ },
18
22
  "cursor": {
19
23
  "name": "Cursor",
20
24
  "description": "وكيل البرمجة بالذكاء الاصطناعي Cursor"
@@ -9,6 +9,10 @@
9
9
  "name": "Codex CLI",
10
10
  "description": "OpenAI Codex CLI Terminal-Agent (GPT-Modelle)"
11
11
  },
12
+ "copilotCli": {
13
+ "name": "Copilot CLI",
14
+ "description": "GitHub Copilot CLI (Standard: Claude Sonnet 4.5, erfordert Copilot-Abonnement)"
15
+ },
12
16
  "cursor": { "name": "Cursor", "description": "Cursor KI-Coding-Agent" },
13
17
  "devMock": {
14
18
  "name": "Dev (Mock)",
@@ -15,6 +15,10 @@
15
15
  "name": "Codex CLI",
16
16
  "description": "OpenAI's Codex CLI terminal agent (GPT models)"
17
17
  },
18
+ "copilotCli": {
19
+ "name": "Copilot CLI",
20
+ "description": "GitHub Copilot CLI (Claude Sonnet 4.5 default, requires Copilot subscription)"
21
+ },
18
22
  "cursor": {
19
23
  "name": "Cursor",
20
24
  "description": "Cursor AI coding agent"
@@ -15,6 +15,10 @@
15
15
  "name": "Codex CLI",
16
16
  "description": "Agente de terminal Codex CLI de OpenAI (modelos GPT)"
17
17
  },
18
+ "copilotCli": {
19
+ "name": "Copilot CLI",
20
+ "description": "GitHub Copilot CLI (Claude Sonnet 4.5 por defecto, requiere suscripción a Copilot)"
21
+ },
18
22
  "cursor": {
19
23
  "name": "Cursor",
20
24
  "description": "Agente de codificación AI Cursor"
@@ -15,6 +15,10 @@
15
15
  "name": "Codex CLI",
16
16
  "description": "Agent terminal Codex CLI d'OpenAI (modèles GPT)"
17
17
  },
18
+ "copilotCli": {
19
+ "name": "Copilot CLI",
20
+ "description": "GitHub Copilot CLI (Claude Sonnet 4.5 par défaut, abonnement Copilot requis)"
21
+ },
18
22
  "cursor": {
19
23
  "name": "Cursor",
20
24
  "description": "Agent de codage IA Cursor"
@@ -15,6 +15,10 @@
15
15
  "name": "Codex CLI",
16
16
  "description": "סוכן טרמינל Codex CLI של OpenAI (מודלי GPT)"
17
17
  },
18
+ "copilotCli": {
19
+ "name": "Copilot CLI",
20
+ "description": "GitHub Copilot CLI (ברירת מחדל: Claude Sonnet 4.5, דורש מנוי Copilot)"
21
+ },
18
22
  "cursor": {
19
23
  "name": "Cursor",
20
24
  "description": "סוכן קידוד Cursor AI"
@@ -15,6 +15,10 @@
15
15
  "name": "Codex CLI",
16
16
  "description": "Agente de terminal Codex CLI da OpenAI (modelos GPT)"
17
17
  },
18
+ "copilotCli": {
19
+ "name": "Copilot CLI",
20
+ "description": "GitHub Copilot CLI (padrão: Claude Sonnet 4.5, requer assinatura Copilot)"
21
+ },
18
22
  "cursor": {
19
23
  "name": "Cursor",
20
24
  "description": "Agente de codificação AI Cursor"
@@ -15,6 +15,10 @@
15
15
  "name": "Codex CLI",
16
16
  "description": "Терминальный агент OpenAI Codex CLI (модели GPT)"
17
17
  },
18
+ "copilotCli": {
19
+ "name": "Copilot CLI",
20
+ "description": "GitHub Copilot CLI (по умолчанию: Claude Sonnet 4.5, требуется подписка Copilot)"
21
+ },
18
22
  "cursor": {
19
23
  "name": "Cursor",
20
24
  "description": "AI-агент для кодирования Cursor"