imcp 0.1.6 → 0.1.8-dev

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 (314) hide show
  1. package/dist/cli/commands/install.js +1 -106
  2. package/dist/cli/commands/install.js.map +1 -0
  3. package/dist/cli/commands/list.js +1 -90
  4. package/dist/cli/commands/list.js.map +1 -0
  5. package/dist/cli/commands/pull.js +1 -16
  6. package/dist/cli/commands/pull.js.map +1 -0
  7. package/dist/cli/commands/serve.js +1 -33
  8. package/dist/cli/commands/serve.js.map +1 -0
  9. package/dist/cli/commands/uninstall.js +1 -46
  10. package/dist/cli/commands/uninstall.js.map +1 -0
  11. package/dist/cli/index.js +1 -65
  12. package/dist/cli/index.js.map +1 -0
  13. package/dist/core/installers/clients/BaseClientInstaller.js +1 -282
  14. package/dist/core/installers/clients/BaseClientInstaller.js.map +1 -0
  15. package/dist/core/installers/clients/ClientInstaller.js +1 -163
  16. package/dist/core/installers/clients/ClientInstaller.js.map +1 -0
  17. package/dist/core/installers/clients/ClientInstallerFactory.js +1 -36
  18. package/dist/core/installers/clients/ClientInstallerFactory.js.map +1 -0
  19. package/dist/core/installers/clients/ClineInstaller.js +1 -30
  20. package/dist/core/installers/clients/ClineInstaller.js.map +1 -0
  21. package/dist/core/installers/clients/ExtensionInstaller.js +1 -151
  22. package/dist/core/installers/clients/ExtensionInstaller.js.map +1 -0
  23. package/dist/core/installers/clients/GithubCopilotInstaller.js +1 -68
  24. package/dist/core/installers/clients/GithubCopilotInstaller.js.map +1 -0
  25. package/dist/core/installers/clients/MSRooCodeInstaller.js +1 -28
  26. package/dist/core/installers/clients/MSRooCodeInstaller.js.map +1 -0
  27. package/dist/core/installers/index.js +1 -8
  28. package/dist/core/installers/index.js.map +1 -0
  29. package/dist/core/installers/requirements/BaseInstaller.js +1 -56
  30. package/dist/core/installers/requirements/BaseInstaller.js.map +1 -0
  31. package/dist/core/installers/requirements/CommandInstaller.js +1 -213
  32. package/dist/core/installers/requirements/CommandInstaller.js.map +1 -0
  33. package/dist/core/installers/requirements/GeneralInstaller.js +1 -126
  34. package/dist/core/installers/requirements/GeneralInstaller.js.map +1 -0
  35. package/dist/core/installers/requirements/InstallerFactory.js +1 -99
  36. package/dist/core/installers/requirements/InstallerFactory.js.map +1 -0
  37. package/dist/core/installers/requirements/NpmInstaller.js +1 -235
  38. package/dist/core/installers/requirements/NpmInstaller.js.map +1 -0
  39. package/dist/core/installers/requirements/NugetInstaller.js +1 -188
  40. package/dist/core/installers/requirements/NugetInstaller.js.map +1 -0
  41. package/dist/core/installers/requirements/PipInstaller.js +1 -192
  42. package/dist/core/installers/requirements/PipInstaller.js.map +1 -0
  43. package/dist/core/installers/requirements/RequirementInstaller.js +1 -2
  44. package/dist/core/installers/requirements/RequirementInstaller.js.map +1 -0
  45. package/dist/core/loaders/ConfigurationLoader.js +1 -256
  46. package/dist/core/loaders/ConfigurationLoader.js.map +1 -0
  47. package/dist/core/loaders/ConfigurationProvider.js +1 -383
  48. package/dist/core/loaders/ConfigurationProvider.js.map +1 -0
  49. package/dist/core/loaders/InstallOperationManager.js +1 -310
  50. package/dist/core/loaders/InstallOperationManager.js.map +1 -0
  51. package/dist/core/loaders/ServerSchemaLoader.js +1 -108
  52. package/dist/core/loaders/ServerSchemaLoader.js.map +1 -0
  53. package/dist/core/loaders/ServerSchemaProvider.js +1 -89
  54. package/dist/core/loaders/ServerSchemaProvider.js.map +1 -0
  55. package/dist/core/loaders/SystemSettingsManager.js +1 -256
  56. package/dist/core/loaders/SystemSettingsManager.js.map +1 -0
  57. package/dist/core/metadatas/constants.js +1 -100
  58. package/dist/core/metadatas/constants.js.map +1 -0
  59. package/dist/core/metadatas/recordingConstants.js +1 -46
  60. package/dist/core/metadatas/recordingConstants.js.map +1 -0
  61. package/dist/core/metadatas/types.js +1 -15
  62. package/dist/core/metadatas/types.js.map +1 -0
  63. package/dist/core/onboard/FeedOnboardService.js +1 -422
  64. package/dist/core/onboard/FeedOnboardService.js.map +1 -0
  65. package/dist/core/onboard/OnboardProcessor.js +1 -333
  66. package/dist/core/onboard/OnboardProcessor.js.map +1 -0
  67. package/dist/core/onboard/OnboardStatus.js +1 -9
  68. package/dist/core/onboard/OnboardStatus.js.map +1 -0
  69. package/dist/core/onboard/OnboardStatusManager.js +1 -360
  70. package/dist/core/onboard/OnboardStatusManager.js.map +1 -0
  71. package/dist/core/validators/FeedValidator.js +1 -133
  72. package/dist/core/validators/FeedValidator.js.map +1 -0
  73. package/dist/core/validators/IServerValidator.js +1 -1
  74. package/dist/core/validators/IServerValidator.js.map +1 -0
  75. package/dist/core/validators/SSEServerValidator.js +1 -38
  76. package/dist/core/validators/SSEServerValidator.js.map +1 -0
  77. package/dist/core/validators/ServerValidatorFactory.js +1 -44
  78. package/dist/core/validators/ServerValidatorFactory.js.map +1 -0
  79. package/dist/core/validators/StdioServerValidator.js +1 -281
  80. package/dist/core/validators/StdioServerValidator.js.map +1 -0
  81. package/dist/index.js +1 -18
  82. package/dist/index.js.map +1 -0
  83. package/dist/services/InstallationService.js +1 -81
  84. package/dist/services/InstallationService.js.map +1 -0
  85. package/dist/services/MCPManager.js +1 -197
  86. package/dist/services/MCPManager.js.map +1 -0
  87. package/dist/services/RequirementService.js +1 -548
  88. package/dist/services/RequirementService.js.map +1 -0
  89. package/dist/services/ServerService.js +1 -127
  90. package/dist/services/ServerService.js.map +1 -0
  91. package/dist/services/TelemetryService.js +1 -53
  92. package/dist/services/TelemetryService.js.map +1 -0
  93. package/dist/utils/UpdateCheckTracker.js +1 -79
  94. package/dist/utils/UpdateCheckTracker.js.map +1 -0
  95. package/dist/utils/adoUtils.js +1 -254
  96. package/dist/utils/adoUtils.js.map +1 -0
  97. package/dist/utils/clientUtils.js +1 -65
  98. package/dist/utils/clientUtils.js.map +1 -0
  99. package/dist/utils/feedUtils.js +1 -28
  100. package/dist/utils/feedUtils.js.map +1 -0
  101. package/dist/utils/githubAuth.js +1 -177
  102. package/dist/utils/githubAuth.js.map +1 -0
  103. package/dist/utils/githubUtils.js +1 -125
  104. package/dist/utils/githubUtils.js.map +1 -0
  105. package/dist/utils/logger.js +1 -176
  106. package/dist/utils/logger.js.map +1 -0
  107. package/dist/utils/macroExpressionUtils.js +1 -93
  108. package/dist/utils/macroExpressionUtils.js.map +1 -0
  109. package/dist/utils/osUtils.js +1 -664
  110. package/dist/utils/osUtils.js.map +1 -0
  111. package/dist/utils/versionUtils.js +1 -101
  112. package/dist/utils/versionUtils.js.map +1 -0
  113. package/dist/web/contract/serverContract.js +1 -1
  114. package/dist/web/contract/serverContract.js.map +1 -0
  115. package/dist/web/public/js/api.js +2 -132
  116. package/dist/web/public/js/api.js.map +1 -0
  117. package/dist/web/public/js/detailsWidget.js +2 -264
  118. package/dist/web/public/js/detailsWidget.js.map +1 -0
  119. package/dist/web/public/js/flights/flights.js +2 -127
  120. package/dist/web/public/js/flights/flights.js.map +1 -0
  121. package/dist/web/public/js/modal/index.js +2 -52
  122. package/dist/web/public/js/modal/index.js.map +1 -0
  123. package/dist/web/public/js/modal/installModal.js +2 -162
  124. package/dist/web/public/js/modal/installModal.js.map +1 -0
  125. package/dist/web/public/js/modal/installation.js +2 -266
  126. package/dist/web/public/js/modal/installation.js.map +1 -0
  127. package/dist/web/public/js/modal/loadingModal.js +2 -182
  128. package/dist/web/public/js/modal/loadingModal.js.map +1 -0
  129. package/dist/web/public/js/modal/modalSetup.js +2 -595
  130. package/dist/web/public/js/modal/modalSetup.js.map +1 -0
  131. package/dist/web/public/js/modal/modalUtils.js +2 -37
  132. package/dist/web/public/js/modal/modalUtils.js.map +1 -0
  133. package/dist/web/public/js/modal/versionUtils.js +2 -20
  134. package/dist/web/public/js/modal/versionUtils.js.map +1 -0
  135. package/dist/web/public/js/modal.js +2 -42
  136. package/dist/web/public/js/modal.js.map +1 -0
  137. package/dist/web/public/js/notifications.js +2 -137
  138. package/dist/web/public/js/notifications.js.map +1 -0
  139. package/dist/web/public/js/onboard/formProcessor.js +2 -1037
  140. package/dist/web/public/js/onboard/formProcessor.js.map +1 -0
  141. package/dist/web/public/js/onboard/index.js +2 -374
  142. package/dist/web/public/js/onboard/index.js.map +1 -0
  143. package/dist/web/public/js/onboard/publishHandler.js +2 -172
  144. package/dist/web/public/js/onboard/publishHandler.js.map +1 -0
  145. package/dist/web/public/js/onboard/state.js +2 -76
  146. package/dist/web/public/js/onboard/state.js.map +1 -0
  147. package/dist/web/public/js/onboard/templates.js +2 -342
  148. package/dist/web/public/js/onboard/templates.js.map +1 -0
  149. package/dist/web/public/js/onboard/uiHandlers.js +2 -1076
  150. package/dist/web/public/js/onboard/uiHandlers.js.map +1 -0
  151. package/dist/web/public/js/onboard/validationHandlers.js +2 -493
  152. package/dist/web/public/js/onboard/validationHandlers.js.map +1 -0
  153. package/dist/web/public/js/serverCategoryDetails.js +2 -364
  154. package/dist/web/public/js/serverCategoryDetails.js.map +1 -0
  155. package/dist/web/public/js/serverCategoryList.js +2 -241
  156. package/dist/web/public/js/serverCategoryList.js.map +1 -0
  157. package/dist/web/public/js/settings.js +2 -314
  158. package/dist/web/public/js/settings.js.map +1 -0
  159. package/dist/web/server.js +1 -404
  160. package/dist/web/server.js.map +1 -0
  161. package/package.json +8 -2
  162. package/.github/ISSUE_TEMPLATE/JitAccess.yml +0 -28
  163. package/.github/acl/access.yml +0 -20
  164. package/.github/compliance/inventory.yml +0 -5
  165. package/.github/policies/jit.yml +0 -19
  166. package/.github/workflows/build.yml +0 -28
  167. package/.roo/rules-code/rules.md +0 -88
  168. package/dist/cli/commands/start.d.ts +0 -2
  169. package/dist/cli/commands/start.js +0 -32
  170. package/dist/cli/commands/sync.d.ts +0 -2
  171. package/dist/cli/commands/sync.js +0 -17
  172. package/dist/core/ConfigurationLoader.d.ts +0 -32
  173. package/dist/core/ConfigurationLoader.js +0 -236
  174. package/dist/core/ConfigurationProvider.d.ts +0 -35
  175. package/dist/core/ConfigurationProvider.js +0 -375
  176. package/dist/core/InstallationService.d.ts +0 -50
  177. package/dist/core/InstallationService.js +0 -350
  178. package/dist/core/MCPManager.d.ts +0 -28
  179. package/dist/core/MCPManager.js +0 -188
  180. package/dist/core/RequirementService.d.ts +0 -40
  181. package/dist/core/RequirementService.js +0 -110
  182. package/dist/core/ServerSchemaLoader.d.ts +0 -11
  183. package/dist/core/ServerSchemaLoader.js +0 -43
  184. package/dist/core/ServerSchemaProvider.d.ts +0 -17
  185. package/dist/core/ServerSchemaProvider.js +0 -120
  186. package/dist/core/constants.d.ts +0 -47
  187. package/dist/core/constants.js +0 -94
  188. package/dist/core/installers/BaseInstaller.d.ts +0 -74
  189. package/dist/core/installers/BaseInstaller.js +0 -253
  190. package/dist/core/installers/ClientInstaller.d.ts +0 -23
  191. package/dist/core/installers/ClientInstaller.js +0 -564
  192. package/dist/core/installers/CommandInstaller.d.ts +0 -37
  193. package/dist/core/installers/CommandInstaller.js +0 -173
  194. package/dist/core/installers/GeneralInstaller.d.ts +0 -33
  195. package/dist/core/installers/GeneralInstaller.js +0 -85
  196. package/dist/core/installers/InstallerFactory.d.ts +0 -54
  197. package/dist/core/installers/InstallerFactory.js +0 -97
  198. package/dist/core/installers/NpmInstaller.d.ts +0 -26
  199. package/dist/core/installers/NpmInstaller.js +0 -127
  200. package/dist/core/installers/PipInstaller.d.ts +0 -28
  201. package/dist/core/installers/PipInstaller.js +0 -127
  202. package/dist/core/installers/RequirementInstaller.d.ts +0 -33
  203. package/dist/core/installers/RequirementInstaller.js +0 -3
  204. package/dist/core/types.d.ts +0 -166
  205. package/dist/core/types.js +0 -16
  206. package/dist/services/InstallRequestValidator.d.ts +0 -21
  207. package/dist/services/InstallRequestValidator.js +0 -99
  208. package/dist/web/public/js/modal/installHandler.js +0 -227
  209. package/dist/web/public/js/modal/loadingUI.js +0 -74
  210. package/dist/web/public/js/modal/messageQueue.js +0 -112
  211. package/dist/web/public/js/modal/modalUI.js +0 -214
  212. package/dist/web/public/js/modal/version.js +0 -20
  213. package/dist/web/public/js/onboard/ONBOARDING_PAGE_DESIGN.md +0 -370
  214. package/docs/ONBOARDING_PAGE_DESIGN.md +0 -260
  215. package/docs/Telemetry.md +0 -136
  216. package/memory-bank/activeContext.md +0 -26
  217. package/memory-bank/decisionLog.md +0 -91
  218. package/memory-bank/productContext.md +0 -41
  219. package/memory-bank/progress.md +0 -35
  220. package/memory-bank/systemPatterns.md +0 -10
  221. package/src/cli/commands/install.ts +0 -139
  222. package/src/cli/commands/list.ts +0 -113
  223. package/src/cli/commands/pull.ts +0 -16
  224. package/src/cli/commands/serve.ts +0 -39
  225. package/src/cli/commands/uninstall.ts +0 -64
  226. package/src/cli/index.ts +0 -82
  227. package/src/core/installers/clients/BaseClientInstaller.ts +0 -341
  228. package/src/core/installers/clients/ClientInstaller.ts +0 -222
  229. package/src/core/installers/clients/ClientInstallerFactory.ts +0 -43
  230. package/src/core/installers/clients/ClineInstaller.ts +0 -35
  231. package/src/core/installers/clients/ExtensionInstaller.ts +0 -165
  232. package/src/core/installers/clients/GithubCopilotInstaller.ts +0 -79
  233. package/src/core/installers/clients/MSRooCodeInstaller.ts +0 -32
  234. package/src/core/installers/index.ts +0 -11
  235. package/src/core/installers/requirements/BaseInstaller.ts +0 -85
  236. package/src/core/installers/requirements/CommandInstaller.ts +0 -231
  237. package/src/core/installers/requirements/GeneralInstaller.ts +0 -133
  238. package/src/core/installers/requirements/InstallerFactory.ts +0 -114
  239. package/src/core/installers/requirements/NpmInstaller.ts +0 -271
  240. package/src/core/installers/requirements/NugetInstaller.ts +0 -203
  241. package/src/core/installers/requirements/PipInstaller.ts +0 -207
  242. package/src/core/installers/requirements/RequirementInstaller.ts +0 -42
  243. package/src/core/loaders/ConfigurationLoader.ts +0 -298
  244. package/src/core/loaders/ConfigurationProvider.ts +0 -462
  245. package/src/core/loaders/InstallOperationManager.ts +0 -367
  246. package/src/core/loaders/ServerSchemaLoader.ts +0 -117
  247. package/src/core/loaders/ServerSchemaProvider.ts +0 -99
  248. package/src/core/loaders/SystemSettingsManager.ts +0 -278
  249. package/src/core/metadatas/constants.ts +0 -122
  250. package/src/core/metadatas/recordingConstants.ts +0 -65
  251. package/src/core/metadatas/types.ts +0 -202
  252. package/src/core/onboard/FeedOnboardService.ts +0 -501
  253. package/src/core/onboard/OnboardProcessor.ts +0 -356
  254. package/src/core/onboard/OnboardStatus.ts +0 -60
  255. package/src/core/onboard/OnboardStatusManager.ts +0 -416
  256. package/src/core/validators/FeedValidator.ts +0 -135
  257. package/src/core/validators/IServerValidator.ts +0 -21
  258. package/src/core/validators/SSEServerValidator.ts +0 -43
  259. package/src/core/validators/ServerValidatorFactory.ts +0 -51
  260. package/src/core/validators/StdioServerValidator.ts +0 -313
  261. package/src/index.ts +0 -44
  262. package/src/services/InstallationService.ts +0 -102
  263. package/src/services/MCPManager.ts +0 -249
  264. package/src/services/RequirementService.ts +0 -627
  265. package/src/services/ServerService.ts +0 -161
  266. package/src/services/TelemetryService.ts +0 -59
  267. package/src/utils/UpdateCheckTracker.ts +0 -86
  268. package/src/utils/adoUtils.ts +0 -293
  269. package/src/utils/clientUtils.ts +0 -72
  270. package/src/utils/feedUtils.ts +0 -31
  271. package/src/utils/githubAuth.ts +0 -212
  272. package/src/utils/githubUtils.ts +0 -164
  273. package/src/utils/logger.ts +0 -195
  274. package/src/utils/macroExpressionUtils.ts +0 -104
  275. package/src/utils/osUtils.ts +0 -700
  276. package/src/utils/versionUtils.ts +0 -114
  277. package/src/web/contract/serverContract.ts +0 -74
  278. package/src/web/public/css/detailsWidget.css +0 -235
  279. package/src/web/public/css/modal.css +0 -757
  280. package/src/web/public/css/notifications.css +0 -101
  281. package/src/web/public/css/onboard.css +0 -107
  282. package/src/web/public/css/serverCategoryList.css +0 -120
  283. package/src/web/public/css/serverDetails.css +0 -139
  284. package/src/web/public/index.html +0 -359
  285. package/src/web/public/js/api.js +0 -132
  286. package/src/web/public/js/detailsWidget.js +0 -264
  287. package/src/web/public/js/flights/flights.js +0 -127
  288. package/src/web/public/js/modal/index.js +0 -52
  289. package/src/web/public/js/modal/installModal.js +0 -162
  290. package/src/web/public/js/modal/installation.js +0 -266
  291. package/src/web/public/js/modal/loadingModal.js +0 -182
  292. package/src/web/public/js/modal/modalSetup.js +0 -595
  293. package/src/web/public/js/modal/modalUtils.js +0 -37
  294. package/src/web/public/js/modal/versionUtils.js +0 -20
  295. package/src/web/public/js/modal.js +0 -42
  296. package/src/web/public/js/notifications.js +0 -137
  297. package/src/web/public/js/onboard/formProcessor.js +0 -1037
  298. package/src/web/public/js/onboard/index.js +0 -374
  299. package/src/web/public/js/onboard/publishHandler.js +0 -172
  300. package/src/web/public/js/onboard/state.js +0 -76
  301. package/src/web/public/js/onboard/templates.js +0 -342
  302. package/src/web/public/js/onboard/uiHandlers.js +0 -1076
  303. package/src/web/public/js/onboard/validationHandlers.js +0 -493
  304. package/src/web/public/js/serverCategoryDetails.js +0 -364
  305. package/src/web/public/js/serverCategoryList.js +0 -241
  306. package/src/web/public/js/settings.js +0 -314
  307. package/src/web/public/modal.html +0 -84
  308. package/src/web/public/onboard.html +0 -296
  309. package/src/web/public/settings.html +0 -135
  310. package/src/web/public/styles.css +0 -277
  311. package/src/web/server.ts +0 -478
  312. package/tsconfig.json +0 -18
  313. package/wiki/Installation.md +0 -3
  314. package/wiki/Publish.md +0 -3
@@ -1,283 +1,2 @@
1
- import { Logger } from '../../../utils/logger.js';
2
- import { exec } from 'child_process';
3
- import { promisify } from 'util';
4
- import { isCommandAvailable, getNpmExecutablePath } from '../../../utils/osUtils.js';
5
- import { ExtensionInstaller } from './ExtensionInstaller.js';
6
- import { SUPPORTED_CLIENTS } from '../../metadatas/constants.js';
7
- import { MACRO_EXPRESSIONS, MacroResolverFunctions } from '../../../utils/macroExpressionUtils.js';
8
- import { InstallOperationManager } from '../../loaders/InstallOperationManager.js';
9
- import * as RecordingConstants from '../../metadatas/recordingConstants.js';
10
- const execAsync = promisify(exec);
11
- /**
12
- * Base class for client installers with shared functionality
13
- */
14
- export class BaseClientInstaller {
15
- /**
16
- * Generate a unique operation ID for tracking installations
17
- */
18
- generateOperationId() {
19
- return `install-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
20
- }
21
- /**
22
- * Set up installation configuration with environment variables and arguments
23
- * Handles Python environment configuration if specified
24
- */
25
- async setupInstallConfig(serverConfig, options) {
26
- const finalConfig = { ...serverConfig.installation };
27
- finalConfig.mode = serverConfig.mode;
28
- // Handle command line arguments
29
- if (options.args && options.args.length > 0) {
30
- Logger.debug(`Using args from ServerInstallOptions: ${options.args.join(' ')}`);
31
- finalConfig.args = options.args;
32
- }
33
- // Handle environment variables
34
- const baseEnv = finalConfig.env || {};
35
- const defaultEnv = {};
36
- for (const [key, config] of Object.entries(baseEnv)) {
37
- const envConfig = config;
38
- if (envConfig.Default) {
39
- defaultEnv[key] = envConfig.Default;
40
- }
41
- }
42
- finalConfig.env = { ...defaultEnv, ...(options.env || {}) };
43
- // Handle macro expressions
44
- await this._resolveConfigMacros(finalConfig, options);
45
- Logger.debug(`Final installation config: ${JSON.stringify(finalConfig)}`);
46
- return finalConfig;
47
- }
48
- /**
49
- * Resolves and replaces known macro expressions (e.g., ${PYTHON_PACKAGE}, ${NPMPATH}, ${BROWSER_PATH})
50
- * in the provided configuration object's 'args' and 'env' properties.
51
- * This method directly mutates the finalConfig object.
52
- * @param finalConfig The configuration object to modify.
53
- * @param options Server installation options which may contain settings like pythonEnv or npmPath.
54
- */
55
- async _resolveConfigMacros(finalConfig, options) {
56
- for (const macro of Object.values(MACRO_EXPRESSIONS)) {
57
- const isMacroInArgs = finalConfig.args?.some((arg) => typeof arg === 'string' && arg.includes(macro));
58
- const isMacroInEnv = Object.values(finalConfig.env || {}).some(value => typeof value === 'string' && value.includes(macro));
59
- if (!isMacroInArgs && !isMacroInEnv) {
60
- Logger.debug(`Macro ${macro} not found in args or env, skipping resolution.`);
61
- continue;
62
- }
63
- const resolver = MacroResolverFunctions[macro];
64
- if (resolver) {
65
- const resolvedValue = await resolver(finalConfig, options);
66
- if (resolvedValue !== undefined) {
67
- // Replace in args
68
- if (finalConfig.args) {
69
- const originalArgsString = finalConfig.args.join(' ');
70
- finalConfig.args = finalConfig.args.map((arg) => typeof arg === 'string' && arg.includes(macro)
71
- ? arg.replace(new RegExp(macro.replace(/[${}]/g, '\\$&'), 'g'), resolvedValue)
72
- : arg);
73
- if (finalConfig.args.join(' ') !== originalArgsString) {
74
- Logger.debug(`Args after ${macro} ('${resolvedValue}') replacement: ${finalConfig.args.join(' ')}`);
75
- }
76
- }
77
- // Replace in env
78
- if (finalConfig.env) {
79
- const originalEnvJson = JSON.stringify(finalConfig.env);
80
- for (const key in finalConfig.env) {
81
- if (typeof finalConfig.env[key] === 'string' && finalConfig.env[key].includes(macro)) {
82
- finalConfig.env[key] = finalConfig.env[key].replace(new RegExp(macro.replace(/[${}]/g, '\\$&'), 'g'), resolvedValue);
83
- }
84
- }
85
- if (JSON.stringify(finalConfig.env) !== originalEnvJson) {
86
- Logger.debug(`Env after ${macro} ('${resolvedValue}') replacement: ${JSON.stringify(finalConfig.env)}`);
87
- }
88
- }
89
- }
90
- else {
91
- Logger.debug(`Could not resolve value for macro: ${macro}. It will not be replaced.`);
92
- }
93
- }
94
- }
95
- }
96
- /**
97
- * Handle NPX commands for Windows platform
98
- */
99
- async handleWindowsNpx(config) {
100
- if (process.platform === 'win32' && config.command === 'npx') {
101
- const npmPath = await getNpmExecutablePath();
102
- return {
103
- ...config,
104
- command: 'cmd',
105
- args: ['/c', 'npx', ...config.args],
106
- env: {
107
- ...config.env,
108
- 'APPDATA': npmPath
109
- }
110
- };
111
- }
112
- return config;
113
- }
114
- /**
115
- * Initialize settings object with client-specific structure
116
- * Override in child classes to provide custom initialization
117
- */
118
- initializeSettings(settings) {
119
- if (!settings.mcpServers) {
120
- settings.mcpServers = {};
121
- }
122
- }
123
- /**
124
- * Handle stdio mode configuration
125
- * Override in child classes to provide custom stdio configuration
126
- */
127
- async handleStdioMode(settings, serverName, finalConfig) {
128
- // Convert backslashes to forward slashes in args
129
- if (finalConfig.args) {
130
- finalConfig.args = finalConfig.args.map((arg) => typeof arg === 'string' ? arg.replace(/\\/g, '/') : arg);
131
- }
132
- settings.mcpServers[serverName] = {
133
- command: finalConfig.command,
134
- args: finalConfig.args,
135
- env: finalConfig.env,
136
- autoApprove: [],
137
- disabled: false,
138
- alwaysAllow: []
139
- };
140
- }
141
- /**
142
- * Handle SSE mode configuration
143
- * Override in child classes to provide custom SSE configuration
144
- */
145
- handleSseMode(settings, serverName, installConfig) {
146
- settings.mcpServers[serverName] = {
147
- type: 'sse',
148
- url: installConfig.url
149
- };
150
- }
151
- /**
152
- * Checks if VS Code or VS Code Insiders is installed and installs the client extension.
153
- * @param operationId The operation ID for tracking.
154
- * @returns An OperationStatus object if checks fail or installation fails, otherwise undefined.
155
- */
156
- async checkVSCodeAndInstallExtension(operationId) {
157
- // Check if VS Code or VS Code Insiders is installed
158
- const isVSCodeInstalled = await isCommandAvailable('code');
159
- const isVSCodeInsidersInstalled = await isCommandAvailable('code-insiders');
160
- if (!isVSCodeInstalled && !isVSCodeInsidersInstalled) {
161
- return {
162
- status: 'failed',
163
- type: 'install',
164
- target: 'server',
165
- message: 'Failed to install as neither VS Code nor VS Code Insiders are installed on this system. Please run `code` or `code-insiders` to make sure they are installed. Relaunch imcp after installation.',
166
- operationId
167
- };
168
- }
169
- // Install extension
170
- const extensionResult = await ExtensionInstaller.installExtension(this.clientName);
171
- if (!extensionResult) {
172
- Logger.debug(`Failed to install ${this.clientName} extension`);
173
- return {
174
- status: 'failed',
175
- type: 'install',
176
- target: 'server',
177
- message: `Failed to install ${this.clientName} extension`,
178
- operationId
179
- };
180
- }
181
- return undefined;
182
- }
183
- /**
184
- * Update VS Code settings for both VS Code and VS Code Insiders if installed
185
- * @param serverName The name of the server to configure
186
- * @param installConfig The installation configuration
187
- * @returns Array of results indicating success/failure for each VS Code variant
188
- */
189
- async updateVSCodeSettings(serverName, installConfig) {
190
- const results = [];
191
- const isVSCodeInstalled = await isCommandAvailable('code');
192
- const isVSCodeInsidersInstalled = await isCommandAvailable('code-insiders');
193
- // Update settings for VS Code if installed
194
- if (isVSCodeInstalled) {
195
- try {
196
- const settingPath = SUPPORTED_CLIENTS[this.clientName].codeSettingPath;
197
- await this.setupClientSettings(settingPath, serverName, installConfig);
198
- results.push({ success: true, path: settingPath });
199
- }
200
- catch (error) {
201
- results.push({
202
- success: false,
203
- path: SUPPORTED_CLIENTS[this.clientName].codeSettingPath,
204
- error: error instanceof Error ? error.message : String(error)
205
- });
206
- }
207
- }
208
- // Update settings for VS Code Insiders if installed
209
- if (isVSCodeInsidersInstalled) {
210
- try {
211
- const settingPath = SUPPORTED_CLIENTS[this.clientName].codeInsiderSettingPath;
212
- await this.setupClientSettings(settingPath, serverName, installConfig);
213
- results.push({ success: true, path: settingPath });
214
- }
215
- catch (error) {
216
- results.push({
217
- success: false,
218
- path: SUPPORTED_CLIENTS[this.clientName].codeInsiderSettingPath,
219
- error: error instanceof Error ? error.message : String(error)
220
- });
221
- }
222
- }
223
- return results;
224
- }
225
- /**
226
- * Install the client
227
- * @param serverConfig Server configuration
228
- * @param options Installation options including environment variables and arguments
229
- */
230
- async install(serverConfig, options, categoryName) {
231
- const operationId = this.generateOperationId();
232
- const recorder = InstallOperationManager.getInstance(categoryName || serverConfig.name, serverConfig.name);
233
- return await recorder.recording(async () => {
234
- await recorder.recording(() => this.checkVSCodeAndInstallExtension(operationId), {
235
- stepName: RecordingConstants.STEP_CHECK_VSCODE_AND_INSTALL_EXTENSION,
236
- onResult: (result) => result?.status !== 'failed'
237
- });
238
- const installConfig = await recorder.recording(() => this.setupInstallConfig(serverConfig, options), {
239
- stepName: RecordingConstants.STEP_SETUP_INSTALLATION_CONFIG
240
- });
241
- if (serverConfig.mode) {
242
- installConfig.mode = serverConfig.mode;
243
- }
244
- const results = await recorder.recording(() => this.updateVSCodeSettings(serverConfig.name, installConfig), {
245
- stepName: RecordingConstants.STEP_UPDATE_VSCODE_SETTINGS,
246
- onResult: (result) => result?.some(r => r.success)
247
- });
248
- // Determine overall success
249
- const anySuccess = results.some(r => r.success);
250
- const successPaths = results.filter(r => r.success).map(r => r.path);
251
- const errors = results.filter(r => !r.success).map(r => r.error);
252
- const finalMessage = anySuccess
253
- ? `Successfully installed ${this.clientName} client. Updated settings in: ${successPaths.join(', ')}`
254
- : `Failed to install ${this.clientName} client. Errors: ${errors.join('; ')}`;
255
- return {
256
- status: anySuccess ? 'completed' : 'failed',
257
- type: 'install',
258
- target: 'server',
259
- message: finalMessage,
260
- operationId,
261
- error: anySuccess ? undefined : errors.join('; ')
262
- };
263
- }, {
264
- stepName: RecordingConstants.STEP_INSTALLATION,
265
- onResult: (result) => result?.status !== 'failed',
266
- endMessage: (result) => result?.message,
267
- onError: (error) => {
268
- const errorMsg = `Unexpected error installing ${this.clientName} client: ${error instanceof Error ? error.message : String(error)}`;
269
- return {
270
- result: {
271
- status: 'failed',
272
- type: 'install',
273
- target: 'server',
274
- message: errorMsg,
275
- operationId,
276
- error: error instanceof Error ? error.message : String(error)
277
- }, message: errorMsg
278
- };
279
- }
280
- });
281
- }
282
- }
1
+ import{Logger}from"../../../utils/logger.js";import{exec}from"child_process";import{promisify}from"util";import{isCommandAvailable,getNpmExecutablePath}from"../../../utils/osUtils.js";import{ExtensionInstaller}from"./ExtensionInstaller.js";import{SUPPORTED_CLIENTS}from"../../metadatas/constants.js";import{MACRO_EXPRESSIONS,MacroResolverFunctions}from"../../../utils/macroExpressionUtils.js";import{InstallOperationManager}from"../../loaders/InstallOperationManager.js";import*as RecordingConstants from"../../metadatas/recordingConstants.js";const execAsync=promisify(exec);export class BaseClientInstaller{generateOperationId(){return`install-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}async setupInstallConfig(e,s){const t={...e.installation};t.mode=e.mode,s.args&&s.args.length>0&&(Logger.debug(`Using args from ServerInstallOptions: ${s.args.join(" ")}`),t.args=s.args);const n=t.env||{},a={};for(const[e,s]of Object.entries(n)){const t=s;t.Default&&(a[e]=t.Default)}return t.env={...a,...s.env||{}},await this._resolveConfigMacros(t,s),Logger.debug(`Final installation config: ${JSON.stringify(t)}`),t}async _resolveConfigMacros(e,s){for(const t of Object.values(MACRO_EXPRESSIONS)){const n=e.args?.some((e=>"string"==typeof e&&e.includes(t))),a=Object.values(e.env||{}).some((e=>"string"==typeof e&&e.includes(t)));if(!n&&!a){Logger.debug(`Macro ${t} not found in args or env, skipping resolution.`);continue}const r=MacroResolverFunctions[t];if(r){const n=await r(e,s);if(void 0!==n){if(e.args){const s=e.args.join(" ");e.args=e.args.map((e=>"string"==typeof e&&e.includes(t)?e.replace(new RegExp(t.replace(/[${}]/g,"\\$&"),"g"),n):e)),e.args.join(" ")!==s&&Logger.debug(`Args after ${t} ('${n}') replacement: ${e.args.join(" ")}`)}if(e.env){const s=JSON.stringify(e.env);for(const s in e.env)"string"==typeof e.env[s]&&e.env[s].includes(t)&&(e.env[s]=e.env[s].replace(new RegExp(t.replace(/[${}]/g,"\\$&"),"g"),n));JSON.stringify(e.env)!==s&&Logger.debug(`Env after ${t} ('${n}') replacement: ${JSON.stringify(e.env)}`)}}else Logger.debug(`Could not resolve value for macro: ${t}. It will not be replaced.`)}}}async handleWindowsNpx(e){if("win32"===process.platform&&"npx"===e.command){const s=await getNpmExecutablePath();return{...e,command:"cmd",args:["/c","npx",...e.args],env:{...e.env,APPDATA:s}}}return e}initializeSettings(e){e.mcpServers||(e.mcpServers={})}async handleStdioMode(e,s,t){t.args&&(t.args=t.args.map((e=>"string"==typeof e?e.replace(/\\/g,"/"):e))),e.mcpServers[s]={command:t.command,args:t.args,env:t.env,autoApprove:[],disabled:!1,alwaysAllow:[]}}handleSseMode(e,s,t){e.mcpServers[s]={type:"sse",url:t.url}}async checkVSCodeAndInstallExtension(e){const s=await isCommandAvailable("code"),t=await isCommandAvailable("code-insiders");return s||t?await ExtensionInstaller.installExtension(this.clientName)?void 0:(Logger.debug(`Failed to install ${this.clientName} extension`),{status:"failed",type:"install",target:"server",message:`Failed to install ${this.clientName} extension`,operationId:e}):{status:"failed",type:"install",target:"server",message:"Failed to install as neither VS Code nor VS Code Insiders are installed on this system. Please run `code` or `code-insiders` to make sure they are installed. Relaunch imcp after installation.",operationId:e}}async updateVSCodeSettings(e,s){const t=[],n=await isCommandAvailable("code"),a=await isCommandAvailable("code-insiders");if(n)try{const n=SUPPORTED_CLIENTS[this.clientName].codeSettingPath;await this.setupClientSettings(n,e,s),t.push({success:!0,path:n})}catch(e){t.push({success:!1,path:SUPPORTED_CLIENTS[this.clientName].codeSettingPath,error:e instanceof Error?e.message:String(e)})}if(a)try{const n=SUPPORTED_CLIENTS[this.clientName].codeInsiderSettingPath;await this.setupClientSettings(n,e,s),t.push({success:!0,path:n})}catch(e){t.push({success:!1,path:SUPPORTED_CLIENTS[this.clientName].codeInsiderSettingPath,error:e instanceof Error?e.message:String(e)})}return t}async install(e,s,t){const n=this.generateOperationId(),a=InstallOperationManager.getInstance(t||e.name,e.name);return await a.recording((async()=>{await a.recording((()=>this.checkVSCodeAndInstallExtension(n)),{stepName:RecordingConstants.STEP_CHECK_VSCODE_AND_INSTALL_EXTENSION,onResult:e=>"failed"!==e?.status});const t=await a.recording((()=>this.setupInstallConfig(e,s)),{stepName:RecordingConstants.STEP_SETUP_INSTALLATION_CONFIG});e.mode&&(t.mode=e.mode);const r=await a.recording((()=>this.updateVSCodeSettings(e.name,t)),{stepName:RecordingConstants.STEP_UPDATE_VSCODE_SETTINGS,onResult:e=>e?.some((e=>e.success))}),i=r.some((e=>e.success)),o=r.filter((e=>e.success)).map((e=>e.path)),l=r.filter((e=>!e.success)).map((e=>e.error));return{status:i?"completed":"failed",type:"install",target:"server",message:i?`Successfully installed ${this.clientName} client. Updated settings in: ${o.join(", ")}`:`Failed to install ${this.clientName} client. Errors: ${l.join("; ")}`,operationId:n,error:i?void 0:l.join("; ")}}),{stepName:RecordingConstants.STEP_INSTALLATION,onResult:e=>"failed"!==e?.status,endMessage:e=>e?.message,onError:e=>{const s=`Unexpected error installing ${this.clientName} client: ${e instanceof Error?e.message:String(e)}`;return{result:{status:"failed",type:"install",target:"server",message:s,operationId:n,error:e instanceof Error?e.message:String(e)},message:s}}})}}
283
2
  //# sourceMappingURL=BaseClientInstaller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Logger","exec","promisify","isCommandAvailable","getNpmExecutablePath","ExtensionInstaller","SUPPORTED_CLIENTS","MACRO_EXPRESSIONS","MacroResolverFunctions","InstallOperationManager","RecordingConstants","execAsync","BaseClientInstaller","generateOperationId","Date","now","Math","random","toString","substr","setupInstallConfig","serverConfig","options","finalConfig","installation","mode","args","length","debug","join","baseEnv","env","defaultEnv","key","config","Object","entries","envConfig","Default","this","_resolveConfigMacros","JSON","stringify","macro","values","isMacroInArgs","some","arg","includes","isMacroInEnv","value","resolver","resolvedValue","undefined","originalArgsString","map","replace","RegExp","originalEnvJson","handleWindowsNpx","process","platform","command","npmPath","APPDATA","initializeSettings","settings","mcpServers","handleStdioMode","serverName","autoApprove","disabled","alwaysAllow","handleSseMode","installConfig","type","url","checkVSCodeAndInstallExtension","operationId","isVSCodeInstalled","isVSCodeInsidersInstalled","installExtension","clientName","status","target","message","updateVSCodeSettings","results","settingPath","codeSettingPath","setupClientSettings","push","success","path","error","Error","String","codeInsiderSettingPath","install","categoryName","recorder","getInstance","name","recording","async","stepName","STEP_CHECK_VSCODE_AND_INSTALL_EXTENSION","onResult","result","STEP_SETUP_INSTALLATION_CONFIG","STEP_UPDATE_VSCODE_SETTINGS","r","anySuccess","successPaths","filter","errors","STEP_INSTALLATION","endMessage","onError","errorMsg"],"sources":["../../../../src/core/installers/clients/BaseClientInstaller.ts"],"mappings":"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","ignoreList":[]}
@@ -1,164 +1,2 @@
1
- import { ConfigurationProvider } from '../../loaders/ConfigurationProvider.js';
2
- import { Logger } from '../../../utils/logger.js';
3
- import { ClientInstallerFactory } from './ClientInstallerFactory.js';
4
- import { InstallOperationManager } from '../../loaders/InstallOperationManager.js';
5
- /**
6
- * Main client installer class that orchestrates client installation process
7
- * Handles requirements checking and delegates to specific client installers
8
- */
9
- export class ClientInstaller {
10
- categoryName;
11
- serverName;
12
- clients;
13
- configProvider;
14
- constructor(categoryName, serverName, clients) {
15
- this.categoryName = categoryName;
16
- this.serverName = serverName;
17
- this.clients = clients;
18
- this.configProvider = ConfigurationProvider.getInstance();
19
- }
20
- /**
21
- * Install all specified clients
22
- */
23
- async install(options) {
24
- const initialStatuses = [];
25
- // Start installation for each client asynchronously
26
- const installPromises = this.clients.map(async (clientName) => {
27
- const status = await this.installClient(clientName, options);
28
- initialStatuses.push(status);
29
- return status;
30
- });
31
- // Wait for all installations to complete
32
- await Promise.all(installPromises);
33
- // Return result
34
- return {
35
- success: true,
36
- message: 'Client installations completed',
37
- status: initialStatuses
38
- };
39
- }
40
- /**
41
- * Install client with requirements checking
42
- */
43
- async installClient(clientName, options) {
44
- const operationId = this.generateOperationId();
45
- // Check if client is supported
46
- if (!ClientInstallerFactory.isClientSupported(clientName)) {
47
- return {
48
- status: 'failed',
49
- type: 'install',
50
- target: 'server',
51
- message: `Unsupported client: ${clientName}`,
52
- operationId
53
- };
54
- }
55
- // Create initial operation status
56
- const initialStatus = {
57
- status: 'pending',
58
- type: 'install',
59
- target: 'server',
60
- message: `Initializing installation for client: ${clientName}`,
61
- operationId
62
- };
63
- // Async installation process
64
- this.processInstallation(clientName, operationId, options)
65
- .then((status) => {
66
- if (status.status === 'completed' || status.status === 'failed') {
67
- InstallOperationManager
68
- .getInstance(this.categoryName, this.serverName)
69
- .markOverallStatus(status.status);
70
- }
71
- this.configProvider.updateServerOperationStatus(this.categoryName, this.serverName, clientName, status);
72
- })
73
- .catch((error) => {
74
- this.configProvider.updateServerOperationStatus(this.categoryName, this.serverName, clientName, {
75
- status: 'failed',
76
- type: 'install',
77
- target: 'server',
78
- message: `Error installing client ${clientName}: ${error instanceof Error ? error.message : String(error)}`,
79
- operationId,
80
- error: error instanceof Error ? error.message : String(error)
81
- });
82
- Logger.error(`Error installing client ${clientName}: ${error instanceof Error ? error.message : String(error)}`);
83
- InstallOperationManager
84
- .getInstance(this.categoryName, this.serverName)
85
- .markOverallStatus('failed', error);
86
- });
87
- // Update server status with initial client installation status
88
- await this.configProvider.updateServerOperationStatus(this.categoryName, this.serverName, clientName, initialStatus);
89
- return initialStatus;
90
- }
91
- async processInstallation(clientName, operationId, options) {
92
- const requirementsReady = await this.checkRequirements(operationId, clientName, options);
93
- if (!requirementsReady) {
94
- const failedStatus = {
95
- status: 'failed',
96
- type: 'install',
97
- target: 'server',
98
- message: `Requirements not ready for client: ${clientName} after timeout`,
99
- operationId
100
- };
101
- return failedStatus;
102
- }
103
- // Create client-specific installer
104
- const installer = ClientInstallerFactory.getInstaller(clientName);
105
- if (!installer) {
106
- throw new Error(`Failed to create installer for client: ${clientName}`);
107
- }
108
- const serverConfig = await this.configProvider.getServerMcpConfig(this.categoryName, this.serverName);
109
- if (!serverConfig) {
110
- throw new Error(`Server configuration not found for category: ${this.categoryName}, server: ${this.serverName}`);
111
- }
112
- // If we've reached here, requirements are ready - update status to in-progress
113
- const inProgressStatus = {
114
- status: 'in-progress',
115
- type: 'install',
116
- target: 'server',
117
- message: `Installing client: ${clientName}`,
118
- operationId: operationId
119
- };
120
- await this.configProvider.updateServerOperationStatus(this.categoryName, this.serverName, clientName, inProgressStatus);
121
- // Install client
122
- return await installer.install(serverConfig, options, this.categoryName);
123
- }
124
- /**
125
- * Generate a unique operation ID for tracking installations
126
- */
127
- generateOperationId() {
128
- return `install-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
129
- }
130
- /**
131
- * Check if server requirements are ready
132
- * Waits for requirements to be ready with timeout
133
- */
134
- async checkRequirements(operationId, clientName, options) {
135
- let requirementsReady = await this.configProvider.isRequirementsReady(this.categoryName, this.serverName);
136
- if (!requirementsReady) {
137
- const pendingStatus = {
138
- status: 'pending',
139
- type: 'install',
140
- target: 'server',
141
- message: `Waiting for requirements to be ready for client: ${clientName}`,
142
- operationId
143
- };
144
- await this.configProvider.updateServerOperationStatus(this.categoryName, this.serverName, clientName, pendingStatus);
145
- // Set up periodic checking with timeout
146
- const startTime = Date.now();
147
- const timeoutMs = 5 * 60 * 1000; // 5 minutes
148
- const intervalMs = 5 * 1000; // 5 seconds
149
- while (!requirementsReady && (Date.now() - startTime) < timeoutMs) {
150
- await new Promise(resolve => setTimeout(resolve, intervalMs));
151
- requirementsReady = await this.configProvider.isRequirementsReady(this.categoryName, this.serverName);
152
- }
153
- }
154
- var requirementsStatus = await this.configProvider.GetServerRequirementStatus(this.categoryName, this.serverName);
155
- // Find first non-empty npmPath from requirements status
156
- const npmPathRequirement = requirementsStatus.find(status => status.npmPath && status.npmPath.length > 0);
157
- if (npmPathRequirement && npmPathRequirement.npmPath) {
158
- options.settings = options.settings || {};
159
- options.settings.npmPath = npmPathRequirement.npmPath;
160
- }
161
- return requirementsReady;
162
- }
163
- }
1
+ import{ConfigurationProvider}from"../../loaders/ConfigurationProvider.js";import{Logger}from"../../../utils/logger.js";import{ClientInstallerFactory}from"./ClientInstallerFactory.js";import{InstallOperationManager}from"../../loaders/InstallOperationManager.js";export class ClientInstaller{categoryName;serverName;clients;configProvider;constructor(e,t,r){this.categoryName=e,this.serverName=t,this.clients=r,this.configProvider=ConfigurationProvider.getInstance()}async install(e){const t=[],r=this.clients.map((async r=>{const a=await this.installClient(r,e);return t.push(a),a}));return await Promise.all(r),{success:!0,message:"Client installations completed",status:t}}async installClient(e,t){const r=this.generateOperationId();if(!ClientInstallerFactory.isClientSupported(e))return{status:"failed",type:"install",target:"server",message:`Unsupported client: ${e}`,operationId:r};const a={status:"pending",type:"install",target:"server",message:`Initializing installation for client: ${e}`,operationId:r};return this.processInstallation(e,r,t).then((t=>{"completed"!==t.status&&"failed"!==t.status||InstallOperationManager.getInstance(this.categoryName,this.serverName).markOverallStatus(t.status),this.configProvider.updateServerOperationStatus(this.categoryName,this.serverName,e,t)})).catch((t=>{this.configProvider.updateServerOperationStatus(this.categoryName,this.serverName,e,{status:"failed",type:"install",target:"server",message:`Error installing client ${e}: ${t instanceof Error?t.message:String(t)}`,operationId:r,error:t instanceof Error?t.message:String(t)}),Logger.error(`Error installing client ${e}: ${t instanceof Error?t.message:String(t)}`),InstallOperationManager.getInstance(this.categoryName,this.serverName).markOverallStatus("failed",t)})),await this.configProvider.updateServerOperationStatus(this.categoryName,this.serverName,e,a),a}async processInstallation(e,t,r){if(!await this.checkRequirements(t,e,r))return{status:"failed",type:"install",target:"server",message:`Requirements not ready for client: ${e} after timeout`,operationId:t};const a=ClientInstallerFactory.getInstaller(e);if(!a)throw new Error(`Failed to create installer for client: ${e}`);const s=await this.configProvider.getServerMcpConfig(this.categoryName,this.serverName);if(!s)throw new Error(`Server configuration not found for category: ${this.categoryName}, server: ${this.serverName}`);const i={status:"in-progress",type:"install",target:"server",message:`Installing client: ${e}`,operationId:t};return await this.configProvider.updateServerOperationStatus(this.categoryName,this.serverName,e,i),await a.install(s,r,this.categoryName)}generateOperationId(){return`install-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}async checkRequirements(e,t,r){let a=await this.configProvider.isRequirementsReady(this.categoryName,this.serverName);if(!a){const r={status:"pending",type:"install",target:"server",message:`Waiting for requirements to be ready for client: ${t}`,operationId:e};await this.configProvider.updateServerOperationStatus(this.categoryName,this.serverName,t,r);const s=Date.now(),i=3e5,n=5e3;for(;!a&&Date.now()-s<i;)await new Promise((e=>setTimeout(e,n))),a=await this.configProvider.isRequirementsReady(this.categoryName,this.serverName)}const s=(await this.configProvider.GetServerRequirementStatus(this.categoryName,this.serverName)).find((e=>e.npmPath&&e.npmPath.length>0));return s&&s.npmPath&&(r.settings=r.settings||{},r.settings.npmPath=s.npmPath),a}}
164
2
  //# sourceMappingURL=ClientInstaller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ConfigurationProvider","Logger","ClientInstallerFactory","InstallOperationManager","ClientInstaller","categoryName","serverName","clients","configProvider","constructor","this","getInstance","install","options","initialStatuses","installPromises","map","async","clientName","status","installClient","push","Promise","all","success","message","operationId","generateOperationId","isClientSupported","type","target","initialStatus","processInstallation","then","markOverallStatus","updateServerOperationStatus","catch","error","Error","String","checkRequirements","installer","getInstaller","serverConfig","getServerMcpConfig","inProgressStatus","Date","now","Math","random","toString","substr","requirementsReady","isRequirementsReady","pendingStatus","startTime","timeoutMs","intervalMs","resolve","setTimeout","npmPathRequirement","GetServerRequirementStatus","find","npmPath","length","settings"],"sources":["../../../../src/core/installers/clients/ClientInstaller.ts"],"mappings":"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","ignoreList":[]}
@@ -1,37 +1,2 @@
1
- import { MSRooCodeInstaller } from './MSRooCodeInstaller.js';
2
- import { ClineInstaller } from './ClineInstaller.js';
3
- import { GithubCopilotInstaller } from './GithubCopilotInstaller.js';
4
- import { SUPPORTED_CLIENTS } from '../../metadatas/constants.js';
5
- /**
6
- * Factory for creating client-specific installers
7
- * Handles creation of appropriate installer based on client type
8
- */
9
- export class ClientInstallerFactory {
10
- static installerMap = {
11
- [Object.keys(SUPPORTED_CLIENTS)[0]]: MSRooCodeInstaller,
12
- [Object.keys(SUPPORTED_CLIENTS)[1]]: ClineInstaller,
13
- [Object.keys(SUPPORTED_CLIENTS)[2]]: GithubCopilotInstaller
14
- };
15
- /**
16
- * Get a client installer instance based on client type
17
- * @param clientName Name of the client to get installer for
18
- * @returns Client-specific installer instance or undefined if client not supported
19
- */
20
- static getInstaller(clientName) {
21
- // Check if client is supported
22
- if (!SUPPORTED_CLIENTS[clientName]) {
23
- return undefined;
24
- }
25
- const InstallerClass = this.installerMap[clientName];
26
- return InstallerClass ? new InstallerClass() : undefined;
27
- }
28
- /**
29
- * Check if a client is supported
30
- * @param clientName Name of the client to check
31
- * @returns True if client is supported, false otherwise
32
- */
33
- static isClientSupported(clientName) {
34
- return !!SUPPORTED_CLIENTS[clientName];
35
- }
36
- }
1
+ import{MSRooCodeInstaller}from"./MSRooCodeInstaller.js";import{ClineInstaller}from"./ClineInstaller.js";import{GithubCopilotInstaller}from"./GithubCopilotInstaller.js";import{SUPPORTED_CLIENTS}from"../../metadatas/constants.js";export class ClientInstallerFactory{static installerMap={[Object.keys(SUPPORTED_CLIENTS)[0]]:MSRooCodeInstaller,[Object.keys(SUPPORTED_CLIENTS)[1]]:ClineInstaller,[Object.keys(SUPPORTED_CLIENTS)[2]]:GithubCopilotInstaller};static getInstaller(t){if(!SUPPORTED_CLIENTS[t])return;const e=this.installerMap[t];return e?new e:void 0}static isClientSupported(t){return!!SUPPORTED_CLIENTS[t]}}
37
2
  //# sourceMappingURL=ClientInstallerFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["MSRooCodeInstaller","ClineInstaller","GithubCopilotInstaller","SUPPORTED_CLIENTS","ClientInstallerFactory","static","Object","keys","getInstaller","clientName","InstallerClass","this","installerMap","undefined","isClientSupported"],"sources":["../../../../src/core/installers/clients/ClientInstallerFactory.ts"],"mappings":"OAASA,uBAA0B,iCAC1BC,mBAAsB,6BACtBC,2BAA8B,qCAE9BC,sBAAyB,sCAM5B,MAAOC,uBACDC,oBAA8E,CAClF,CAACC,OAAOC,KAAKJ,mBAAmB,IAAKH,mBACrC,CAACM,OAAOC,KAAKJ,mBAAmB,IAAKF,eACrC,CAACK,OAAOC,KAAKJ,mBAAmB,IAAKD,wBAQzC,mBAAOM,CACHC,GAGA,IAAKN,kBAAkBM,GACnB,OAGJ,MAAMC,EAAiBC,KAAKC,aAAaH,GACzC,OAAOC,EAAiB,IAAIA,OAAmBG,CACnD,CAOA,wBAAOC,CAAkBL,GACrB,QAASN,kBAAkBM,EAC/B","ignoreList":[]}
@@ -1,31 +1,2 @@
1
- import { BaseClientInstaller } from './BaseClientInstaller.js';
2
- import { readJsonFile, writeJsonFile } from '../../../utils/clientUtils.js';
3
- /**
4
- * Cline client installer implementation
5
- * Handles installation of Cline client including extension installation and settings configuration
6
- */
7
- export class ClineInstaller extends BaseClientInstaller {
8
- clientName = 'Cline';
9
- /**
10
- * Set up Cline client settings
11
- * Updates VS Code settings with MCP server configuration
12
- */
13
- async setupClientSettings(settingPath, serverName, installConfig) {
14
- // Read existing settings
15
- const settings = await readJsonFile(settingPath, true);
16
- // Initialize settings with client-specific structure
17
- this.initializeSettings(settings);
18
- // Handle different modes
19
- if (installConfig.mode === 'stdio') {
20
- // Process config for Windows NPX if needed
21
- const finalConfig = await this.handleWindowsNpx(installConfig);
22
- await this.handleStdioMode(settings, serverName, finalConfig);
23
- }
24
- else if (installConfig.mode === 'sse') {
25
- this.handleSseMode(settings, serverName, installConfig);
26
- }
27
- // Write updated settings
28
- await writeJsonFile(settingPath, settings);
29
- }
30
- }
1
+ import{BaseClientInstaller}from"./BaseClientInstaller.js";import{readJsonFile,writeJsonFile}from"../../../utils/clientUtils.js";export class ClineInstaller extends BaseClientInstaller{clientName="Cline";async setupClientSettings(e,i,t){const s=await readJsonFile(e,!0);if(this.initializeSettings(s),"stdio"===t.mode){const e=await this.handleWindowsNpx(t);await this.handleStdioMode(s,i,e)}else"sse"===t.mode&&this.handleSseMode(s,i,t);await writeJsonFile(e,s)}}
31
2
  //# sourceMappingURL=ClineInstaller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["BaseClientInstaller","readJsonFile","writeJsonFile","ClineInstaller","clientName","setupClientSettings","settingPath","serverName","installConfig","settings","this","initializeSettings","mode","finalConfig","handleWindowsNpx","handleStdioMode","handleSseMode"],"sources":["../../../../src/core/installers/clients/ClineInstaller.ts"],"mappings":"OAASA,wBAA2B,kCAC3BC,aAAcC,kBAAqB,uCAMtC,MAAOC,uBAAuBH,oBACbI,WAAqB,QAMxC,yBAAMC,CAAoBC,EAAqBC,EAAoBC,GAE/D,MAAMC,QAAiBR,aAAaK,GAAa,GAMjD,GAHAI,KAAKC,mBAAmBF,GAGG,UAAvBD,EAAcI,KAAkB,CAEhC,MAAMC,QAAoBH,KAAKI,iBAAiBN,SAE1CE,KAAKK,gBAAgBN,EAAUF,EAAYM,EACrD,KAAkC,QAAvBL,EAAcI,MACrBF,KAAKM,cAAcP,EAAUF,EAAYC,SAIvCN,cAAcI,EAAaG,EACrC","ignoreList":[]}