imcp 0.1.4 → 0.1.5

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/README.md +21 -4
  2. package/dist/cli/commands/install.js.map +1 -0
  3. package/dist/cli/commands/list.js.map +1 -0
  4. package/dist/cli/commands/pull.js.map +1 -0
  5. package/dist/cli/commands/serve.js.map +1 -0
  6. package/dist/cli/commands/start.d.ts +2 -0
  7. package/dist/cli/commands/start.js +32 -0
  8. package/dist/cli/commands/start.js.map +1 -0
  9. package/dist/cli/commands/sync.d.ts +2 -0
  10. package/dist/cli/commands/sync.js +17 -0
  11. package/dist/cli/commands/sync.js.map +1 -0
  12. package/dist/cli/commands/uninstall.js.map +1 -0
  13. package/dist/cli/index.js +0 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/core/ConfigurationLoader.d.ts +32 -0
  16. package/{src/core/loaders/ConfigurationLoader.ts → dist/core/ConfigurationLoader.js} +236 -298
  17. package/dist/core/ConfigurationLoader.js.map +1 -0
  18. package/dist/core/ConfigurationProvider.d.ts +35 -0
  19. package/{src/core/loaders/ConfigurationProvider.ts → dist/core/ConfigurationProvider.js} +375 -462
  20. package/dist/core/ConfigurationProvider.js.map +1 -0
  21. package/dist/core/InstallationService.d.ts +50 -0
  22. package/dist/core/InstallationService.js +350 -0
  23. package/dist/core/InstallationService.js.map +1 -0
  24. package/dist/core/MCPManager.d.ts +28 -0
  25. package/dist/core/MCPManager.js +188 -0
  26. package/dist/core/MCPManager.js.map +1 -0
  27. package/dist/core/RequirementService.d.ts +40 -0
  28. package/dist/core/RequirementService.js +110 -0
  29. package/dist/core/RequirementService.js.map +1 -0
  30. package/dist/core/ServerSchemaLoader.d.ts +11 -0
  31. package/dist/core/ServerSchemaLoader.js +43 -0
  32. package/dist/core/ServerSchemaLoader.js.map +1 -0
  33. package/dist/core/ServerSchemaProvider.d.ts +17 -0
  34. package/dist/core/ServerSchemaProvider.js +120 -0
  35. package/dist/core/ServerSchemaProvider.js.map +1 -0
  36. package/dist/core/constants.d.ts +47 -0
  37. package/dist/core/constants.js +94 -0
  38. package/dist/core/constants.js.map +1 -0
  39. package/dist/core/installers/BaseInstaller.d.ts +74 -0
  40. package/dist/core/installers/BaseInstaller.js +253 -0
  41. package/dist/core/installers/BaseInstaller.js.map +1 -0
  42. package/dist/core/installers/ClientInstaller.d.ts +23 -0
  43. package/dist/core/installers/ClientInstaller.js +564 -0
  44. package/dist/core/installers/ClientInstaller.js.map +1 -0
  45. package/dist/core/installers/CommandInstaller.d.ts +37 -0
  46. package/{src/core/installers/requirements/CommandInstaller.ts → dist/core/installers/CommandInstaller.js} +173 -231
  47. package/dist/core/installers/CommandInstaller.js.map +1 -0
  48. package/dist/core/installers/GeneralInstaller.d.ts +33 -0
  49. package/dist/core/installers/GeneralInstaller.js +85 -0
  50. package/dist/core/installers/GeneralInstaller.js.map +1 -0
  51. package/dist/core/installers/InstallerFactory.d.ts +54 -0
  52. package/{src/core/installers/requirements/InstallerFactory.ts → dist/core/installers/InstallerFactory.js} +97 -114
  53. package/dist/core/installers/InstallerFactory.js.map +1 -0
  54. package/dist/core/installers/NpmInstaller.d.ts +26 -0
  55. package/dist/core/installers/NpmInstaller.js +127 -0
  56. package/dist/core/installers/NpmInstaller.js.map +1 -0
  57. package/dist/core/installers/PipInstaller.d.ts +28 -0
  58. package/dist/core/installers/PipInstaller.js +127 -0
  59. package/dist/core/installers/PipInstaller.js.map +1 -0
  60. package/{src/core/installers/requirements/RequirementInstaller.ts → dist/core/installers/RequirementInstaller.d.ts} +33 -42
  61. package/dist/core/installers/RequirementInstaller.js +3 -0
  62. package/dist/core/installers/RequirementInstaller.js.map +1 -0
  63. package/dist/core/installers/clients/BaseClientInstaller.js.map +1 -0
  64. package/dist/core/installers/clients/ClientInstaller.js.map +1 -0
  65. package/dist/core/installers/clients/ClientInstallerFactory.js.map +1 -0
  66. package/dist/core/installers/clients/ClineInstaller.js.map +1 -0
  67. package/dist/core/installers/clients/ExtensionInstaller.js.map +1 -0
  68. package/dist/core/installers/clients/GithubCopilotInstaller.js.map +1 -0
  69. package/dist/core/installers/clients/MSRooCodeInstaller.js.map +1 -0
  70. package/dist/core/installers/index.js.map +1 -0
  71. package/dist/core/installers/requirements/BaseInstaller.js.map +1 -0
  72. package/dist/core/installers/requirements/CommandInstaller.js.map +1 -0
  73. package/dist/core/installers/requirements/GeneralInstaller.js.map +1 -0
  74. package/dist/core/installers/requirements/InstallerFactory.js.map +1 -0
  75. package/dist/core/installers/requirements/NpmInstaller.js.map +1 -0
  76. package/dist/core/installers/requirements/NugetInstaller.js.map +1 -0
  77. package/dist/core/installers/requirements/PipInstaller.js.map +1 -0
  78. package/dist/core/installers/requirements/RequirementInstaller.js.map +1 -0
  79. package/dist/core/loaders/ConfigurationLoader.js.map +1 -0
  80. package/dist/core/loaders/ConfigurationProvider.js.map +1 -0
  81. package/dist/core/loaders/InstallOperationManager.js.map +1 -0
  82. package/dist/core/loaders/ServerSchemaLoader.js.map +1 -0
  83. package/dist/core/loaders/ServerSchemaProvider.js.map +1 -0
  84. package/dist/core/loaders/SystemSettingsManager.js.map +1 -0
  85. package/dist/core/metadatas/constants.js.map +1 -0
  86. package/dist/core/metadatas/recordingConstants.js.map +1 -0
  87. package/dist/core/metadatas/types.js.map +1 -0
  88. package/dist/core/onboard/FeedOnboardService.js.map +1 -0
  89. package/dist/core/onboard/OnboardProcessor.js.map +1 -0
  90. package/dist/core/onboard/OnboardStatus.js.map +1 -0
  91. package/dist/core/onboard/OnboardStatusManager.js.map +1 -0
  92. package/dist/core/types.d.ts +166 -0
  93. package/dist/core/types.js +16 -0
  94. package/dist/core/types.js.map +1 -0
  95. package/dist/core/validators/FeedValidator.js.map +1 -0
  96. package/dist/core/validators/IServerValidator.js.map +1 -0
  97. package/dist/core/validators/SSEServerValidator.js.map +1 -0
  98. package/dist/core/validators/ServerValidatorFactory.js.map +1 -0
  99. package/dist/core/validators/StdioServerValidator.js.map +1 -0
  100. package/dist/index.js.map +1 -0
  101. package/dist/services/InstallRequestValidator.d.ts +21 -0
  102. package/dist/services/InstallRequestValidator.js +99 -0
  103. package/dist/services/InstallRequestValidator.js.map +1 -0
  104. package/dist/services/InstallationService.js.map +1 -0
  105. package/dist/services/MCPManager.js.map +1 -0
  106. package/dist/services/RequirementService.js.map +1 -0
  107. package/dist/services/ServerService.js.map +1 -0
  108. package/dist/services/TelemetryService.js.map +1 -0
  109. package/dist/utils/UpdateCheckTracker.js.map +1 -0
  110. package/dist/utils/adoUtils.js.map +1 -0
  111. package/dist/utils/clientUtils.js.map +1 -0
  112. package/dist/utils/feedUtils.js.map +1 -0
  113. package/dist/utils/githubAuth.js.map +1 -0
  114. package/dist/utils/githubUtils.js.map +1 -0
  115. package/dist/utils/logger.js.map +1 -0
  116. package/dist/utils/macroExpressionUtils.js.map +1 -0
  117. package/dist/utils/osUtils.js.map +1 -0
  118. package/dist/utils/versionUtils.js.map +1 -0
  119. package/dist/web/contract/serverContract.js.map +1 -0
  120. package/dist/web/public/index.html +1 -1
  121. package/dist/web/public/js/modal/installHandler.js +227 -0
  122. package/dist/web/public/js/modal/loadingUI.js +74 -0
  123. package/dist/web/public/js/modal/messageQueue.js +101 -45
  124. package/dist/web/public/js/modal/modalUI.js +214 -0
  125. package/{src/web/public/js/modal/versionUtils.js → dist/web/public/js/modal/version.js} +1 -1
  126. package/dist/web/public/onboard.html +4 -4
  127. package/dist/web/server.js.map +1 -0
  128. package/package.json +5 -1
  129. package/.github/ISSUE_TEMPLATE/JitAccess.yml +0 -28
  130. package/.github/acl/access.yml +0 -20
  131. package/.github/compliance/inventory.yml +0 -5
  132. package/.github/policies/jit.yml +0 -19
  133. package/.roo/rules-code/rules.md +0 -88
  134. package/dist/core/onboard/InstallOperationManager.d.ts +0 -23
  135. package/dist/core/onboard/InstallOperationManager.js +0 -144
  136. package/docs/ONBOARDING_PAGE_DESIGN.md +0 -260
  137. package/docs/Telemetry.md +0 -136
  138. package/memory-bank/activeContext.md +0 -26
  139. package/memory-bank/decisionLog.md +0 -91
  140. package/memory-bank/productContext.md +0 -41
  141. package/memory-bank/progress.md +0 -35
  142. package/memory-bank/systemPatterns.md +0 -10
  143. package/src/cli/commands/install.ts +0 -139
  144. package/src/cli/commands/list.ts +0 -113
  145. package/src/cli/commands/pull.ts +0 -16
  146. package/src/cli/commands/serve.ts +0 -39
  147. package/src/cli/commands/uninstall.ts +0 -64
  148. package/src/cli/index.ts +0 -82
  149. package/src/core/installers/clients/BaseClientInstaller.ts +0 -341
  150. package/src/core/installers/clients/ClientInstaller.ts +0 -222
  151. package/src/core/installers/clients/ClientInstallerFactory.ts +0 -43
  152. package/src/core/installers/clients/ClineInstaller.ts +0 -35
  153. package/src/core/installers/clients/ExtensionInstaller.ts +0 -165
  154. package/src/core/installers/clients/GithubCopilotInstaller.ts +0 -79
  155. package/src/core/installers/clients/MSRooCodeInstaller.ts +0 -32
  156. package/src/core/installers/index.ts +0 -11
  157. package/src/core/installers/requirements/BaseInstaller.ts +0 -85
  158. package/src/core/installers/requirements/GeneralInstaller.ts +0 -133
  159. package/src/core/installers/requirements/NpmInstaller.ts +0 -271
  160. package/src/core/installers/requirements/NugetInstaller.ts +0 -203
  161. package/src/core/installers/requirements/PipInstaller.ts +0 -207
  162. package/src/core/loaders/InstallOperationManager.ts +0 -367
  163. package/src/core/loaders/ServerSchemaLoader.ts +0 -117
  164. package/src/core/loaders/ServerSchemaProvider.ts +0 -99
  165. package/src/core/loaders/SystemSettingsManager.ts +0 -278
  166. package/src/core/metadatas/constants.ts +0 -122
  167. package/src/core/metadatas/recordingConstants.ts +0 -65
  168. package/src/core/metadatas/types.ts +0 -202
  169. package/src/core/onboard/FeedOnboardService.ts +0 -501
  170. package/src/core/onboard/OnboardProcessor.ts +0 -356
  171. package/src/core/onboard/OnboardStatus.ts +0 -60
  172. package/src/core/onboard/OnboardStatusManager.ts +0 -416
  173. package/src/core/validators/FeedValidator.ts +0 -135
  174. package/src/core/validators/IServerValidator.ts +0 -21
  175. package/src/core/validators/SSEServerValidator.ts +0 -43
  176. package/src/core/validators/ServerValidatorFactory.ts +0 -51
  177. package/src/core/validators/StdioServerValidator.ts +0 -313
  178. package/src/index.ts +0 -44
  179. package/src/services/InstallationService.ts +0 -102
  180. package/src/services/MCPManager.ts +0 -249
  181. package/src/services/RequirementService.ts +0 -627
  182. package/src/services/ServerService.ts +0 -161
  183. package/src/services/TelemetryService.ts +0 -59
  184. package/src/utils/UpdateCheckTracker.ts +0 -86
  185. package/src/utils/adoUtils.ts +0 -293
  186. package/src/utils/clientUtils.ts +0 -72
  187. package/src/utils/feedUtils.ts +0 -31
  188. package/src/utils/githubAuth.ts +0 -212
  189. package/src/utils/githubUtils.ts +0 -164
  190. package/src/utils/logger.ts +0 -195
  191. package/src/utils/macroExpressionUtils.ts +0 -104
  192. package/src/utils/osUtils.ts +0 -700
  193. package/src/utils/versionUtils.ts +0 -114
  194. package/src/web/contract/serverContract.ts +0 -74
  195. package/src/web/public/css/detailsWidget.css +0 -235
  196. package/src/web/public/css/modal.css +0 -757
  197. package/src/web/public/css/notifications.css +0 -101
  198. package/src/web/public/css/onboard.css +0 -107
  199. package/src/web/public/css/serverCategoryList.css +0 -120
  200. package/src/web/public/css/serverDetails.css +0 -139
  201. package/src/web/public/index.html +0 -359
  202. package/src/web/public/js/api.js +0 -132
  203. package/src/web/public/js/detailsWidget.js +0 -264
  204. package/src/web/public/js/flights/flights.js +0 -127
  205. package/src/web/public/js/modal/index.js +0 -52
  206. package/src/web/public/js/modal/installModal.js +0 -162
  207. package/src/web/public/js/modal/installation.js +0 -266
  208. package/src/web/public/js/modal/loadingModal.js +0 -182
  209. package/src/web/public/js/modal/modalSetup.js +0 -595
  210. package/src/web/public/js/modal/modalUtils.js +0 -37
  211. package/src/web/public/js/modal.js +0 -42
  212. package/src/web/public/js/notifications.js +0 -137
  213. package/src/web/public/js/onboard/formProcessor.js +0 -1037
  214. package/src/web/public/js/onboard/index.js +0 -374
  215. package/src/web/public/js/onboard/publishHandler.js +0 -172
  216. package/src/web/public/js/onboard/state.js +0 -76
  217. package/src/web/public/js/onboard/templates.js +0 -342
  218. package/src/web/public/js/onboard/uiHandlers.js +0 -1076
  219. package/src/web/public/js/onboard/validationHandlers.js +0 -493
  220. package/src/web/public/js/serverCategoryDetails.js +0 -364
  221. package/src/web/public/js/serverCategoryList.js +0 -241
  222. package/src/web/public/js/settings.js +0 -314
  223. package/src/web/public/modal.html +0 -84
  224. package/src/web/public/onboard.html +0 -296
  225. package/src/web/public/settings.html +0 -135
  226. package/src/web/public/styles.css +0 -277
  227. package/src/web/server.ts +0 -478
  228. package/tsconfig.json +0 -18
@@ -0,0 +1,94 @@
1
+ import os from 'os';
2
+ import path from 'path';
3
+ /**
4
+ * Defines constants used across the application.
5
+ */
6
+ /**
7
+ * GitHub repository configuration for feeds
8
+ */
9
+ export const GITHUB_REPO = {
10
+ url: 'https://github.com/ai-microsoft/imcp-feed.git',
11
+ repoName: 'ai-microsoft/imcp-feed',
12
+ feedsPath: 'feeds',
13
+ feedAssetsName: 'imcp-feeds-${latest}.zip',
14
+ };
15
+ /**
16
+ * Local settings directory path based on OS
17
+ */
18
+ export const SETTINGS_DIR = (() => {
19
+ switch (process.platform) {
20
+ case 'win32':
21
+ return path.join(os.homedir(), '.imcp');
22
+ default: // linux, darwin (macOS), etc.
23
+ return path.join(os.homedir(), '.imcp');
24
+ }
25
+ })();
26
+ /**
27
+ * Local feeds directory path
28
+ */
29
+ export const LOCAL_FEEDS_DIR = path.join(SETTINGS_DIR, 'feeds');
30
+ export const LOCAL_FEEDS_SCHEMA_DIR = path.join(LOCAL_FEEDS_DIR, 'schemas');
31
+ const CODE_STRORAGE_DIR = (() => {
32
+ switch (process.platform) {
33
+ case 'win32':
34
+ return path.join(os.homedir(), 'AppData', 'Roaming', 'Code', 'User');
35
+ case 'darwin': // macOS
36
+ return path.join(os.homedir(), 'Library', 'Application Support', 'Code', 'User');
37
+ default: // linux
38
+ return path.join(os.homedir(), '.config', 'Code', 'User');
39
+ }
40
+ })();
41
+ const CODE_INSIDER_STRORAGE_DIR = (() => {
42
+ switch (process.platform) {
43
+ case 'win32':
44
+ return path.join(os.homedir(), 'AppData', 'Roaming', 'Code - Insiders', 'User');
45
+ case 'darwin': // macOS
46
+ return path.join(os.homedir(), 'Library', 'Application Support', 'Code - Insiders', 'User');
47
+ default: // linux
48
+ return path.join(os.homedir(), '.config', 'Code - Insiders', 'User');
49
+ }
50
+ })();
51
+ /**
52
+ * Supported client configurations.
53
+ * Key: Client name (e.g., 'vscode')
54
+ * Value: Client-specific settings or configuration details.
55
+ * TODO: Define actual client settings structure.
56
+ */
57
+ export const SUPPORTED_CLIENTS = {
58
+ 'MSRooCode': {
59
+ extension: {
60
+ extensionId: 'microsoftai.ms-roo-cline',
61
+ leastVersion: '0.0.8',
62
+ repository: 'ai-microsoft/roo-cline',
63
+ assetName: 'ms-roo-cline-${version}.vsix',
64
+ private: true
65
+ },
66
+ codeSettingPath: path.join(CODE_STRORAGE_DIR, 'globalStorage', 'microsoftai.ms-roo-cline', 'settings', 'cline_mcp_settings.json'),
67
+ codeInsiderSettingPath: path.join(CODE_INSIDER_STRORAGE_DIR, 'globalStorage', 'microsoftai.ms-roo-cline', 'settings', 'cline_mcp_settings.json'),
68
+ },
69
+ 'Cline': {
70
+ extension: {
71
+ extensionId: 'saoudrizwan.claude-dev',
72
+ },
73
+ codeSettingPath: path.join(CODE_STRORAGE_DIR, 'globalStorage', 'saoudrizwan.claude-dev', 'settings', 'cline_mcp_settings.json'),
74
+ codeInsiderSettingPath: path.join(CODE_INSIDER_STRORAGE_DIR, 'globalStorage', 'saoudrizwan.claude-dev', 'settings', 'cline_mcp_settings.json'),
75
+ },
76
+ 'GithubCopilot': {
77
+ extension: {
78
+ extensionId: 'github.copilot',
79
+ },
80
+ codeSettingPath: path.join(CODE_STRORAGE_DIR, 'settings.json'),
81
+ codeInsiderSettingPath: path.join(CODE_INSIDER_STRORAGE_DIR, 'settings.json'),
82
+ },
83
+ // Add other supported clients here
84
+ };
85
+ /**
86
+ * List of supported client names.
87
+ */
88
+ export const SUPPORTED_CLIENT_NAMES = Object.keys(SUPPORTED_CLIENTS);
89
+ /**
90
+ * Minimum time between requirement update checks (in milliseconds)
91
+ * 10 minutes = 10 * 60 * 1000 = 600000 ms
92
+ */
93
+ export const UPDATE_CHECK_INTERVAL_MS = 10 * 60 * 1000; // 10 minutes
94
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { RequirementConfig, RequirementStatus, RegistryConfig, ServerInstallOptions } from '../types.js';
2
+ import { RequirementInstaller } from './RequirementInstaller.js';
3
+ /**
4
+ * Abstract base class with common functionality for all requirement installers
5
+ */
6
+ export declare abstract class BaseInstaller implements RequirementInstaller {
7
+ protected execPromise: (command: string) => Promise<{
8
+ stdout: string;
9
+ stderr: string;
10
+ }>;
11
+ protected downloadsDir: string;
12
+ constructor(execPromise: (command: string) => Promise<{
13
+ stdout: string;
14
+ stderr: string;
15
+ }>);
16
+ abstract canHandle(requirement: RequirementConfig): boolean;
17
+ abstract supportCheckUpdates(): boolean;
18
+ abstract install(requirement: RequirementConfig, options?: ServerInstallOptions): Promise<RequirementStatus>;
19
+ abstract checkInstallation(requirement: RequirementConfig, options?: ServerInstallOptions): Promise<RequirementStatus>;
20
+ /**
21
+ * Check if updates are available for the requirement
22
+ * @param requirement The requirement to check
23
+ * @param currentStatus The current status of the requirement
24
+ * @returns The status of the requirement with update information
25
+ */
26
+ checkForUpdates(requirement: RequirementConfig, currentStatus: RequirementStatus): Promise<RequirementStatus>;
27
+ /**
28
+ * Helper method to ensure downloads directory exists
29
+ */
30
+ protected ensureDownloadsDir(): Promise<void>;
31
+ /**
32
+ * Helper to handle GitHub release downloads
33
+ * @param requirement The requirement configuration
34
+ * @param registry The GitHub release registry configuration
35
+ * @returns The path to the downloaded file
36
+ */
37
+ protected handleGitHubRelease(requirement: RequirementConfig, registry: RegistryConfig['githubRelease']): Promise<{
38
+ resolvedVersion: string;
39
+ resolvedPath: string;
40
+ }>;
41
+ /**
42
+ * Helper to handle artifact registry downloads
43
+ * @param requirement The requirement configuration
44
+ * @param registry The artifacts registry configuration
45
+ * @returns The registry URL
46
+ */
47
+ protected handleArtifactsRegistry(requirement: RequirementConfig, registry: RegistryConfig['artifacts']): Promise<string>;
48
+ /**
49
+ * Helper to handle local path registry
50
+ * @param requirement The requirement configuration
51
+ * @param registry The local registry configuration
52
+ * @returns The local path or extracted asset path
53
+ */
54
+ protected handleLocalRegistry(requirement: RequirementConfig, registry: RegistryConfig['local']): Promise<string>;
55
+ private fileExists;
56
+ /**
57
+ * Get the latest version available for a GitHub repository
58
+ * @param repository The GitHub repository in format 'owner/repo'
59
+ * @returns The latest version or tag
60
+ */
61
+ protected getGitHubLatestVersion(repository: string): Promise<string>;
62
+ /**
63
+ * Get the latest version available for an NPM package
64
+ * @param packageName The name of the NPM package
65
+ * @returns The latest version
66
+ */
67
+ protected getNpmLatestVersion(packageName: string): Promise<string>;
68
+ /**
69
+ * Get the latest version available for a pip package
70
+ * @param packageName The name of the pip package
71
+ * @returns The latest version
72
+ */
73
+ protected getPipLatestVersion(packageName: string, options?: ServerInstallOptions): Promise<string>;
74
+ }
@@ -0,0 +1,253 @@
1
+ import path from 'path';
2
+ import fs from 'fs/promises';
3
+ import { SETTINGS_DIR } from '../constants.js';
4
+ import { extractZipFile } from '../../utils/clientUtils.js';
5
+ import { Logger } from '../../utils/logger.js';
6
+ /**
7
+ * Abstract base class with common functionality for all requirement installers
8
+ */
9
+ export class BaseInstaller {
10
+ execPromise;
11
+ downloadsDir;
12
+ constructor(execPromise) {
13
+ this.execPromise = execPromise;
14
+ this.downloadsDir = path.join(SETTINGS_DIR, 'downloads');
15
+ }
16
+ /**
17
+ * Check if updates are available for the requirement
18
+ * @param requirement The requirement to check
19
+ * @param currentStatus The current status of the requirement
20
+ * @returns The status of the requirement with update information
21
+ */
22
+ async checkForUpdates(requirement, currentStatus) {
23
+ try {
24
+ // If requirement is not installed, no need to check for updates
25
+ if (!currentStatus.installed) {
26
+ return currentStatus;
27
+ }
28
+ // If the version doesn't contain "latest", no update check needed
29
+ if (!requirement.version.includes('latest')) {
30
+ return currentStatus;
31
+ }
32
+ let latestVersion;
33
+ // Check based on registry type
34
+ if (requirement.registry?.githubRelease) {
35
+ latestVersion = await this.getGitHubLatestVersion(requirement.registry.githubRelease.repository);
36
+ }
37
+ else {
38
+ // Use common practice based on requirement type
39
+ switch (requirement.type) {
40
+ case 'npm':
41
+ latestVersion = await this.getNpmLatestVersion(requirement.name);
42
+ break;
43
+ case 'pip':
44
+ latestVersion = await this.getPipLatestVersion(requirement.name);
45
+ break;
46
+ // Add other types as needed
47
+ }
48
+ }
49
+ // If we found a latest version and it's different from current
50
+ if (latestVersion && latestVersion !== currentStatus.version) {
51
+ return {
52
+ ...currentStatus,
53
+ availableUpdate: {
54
+ version: latestVersion,
55
+ message: `Update available: ${currentStatus.version} → ${latestVersion}`
56
+ },
57
+ lastCheckTime: new Date().toISOString()
58
+ };
59
+ }
60
+ else {
61
+ return {
62
+ ...currentStatus,
63
+ lastCheckTime: new Date().toISOString()
64
+ };
65
+ }
66
+ }
67
+ catch (error) {
68
+ // Don't update status on error, just log it
69
+ console.warn(`Error checking for updates for ${requirement.name}: ${error instanceof Error ? error.message : String(error)}`);
70
+ return currentStatus;
71
+ }
72
+ }
73
+ /**
74
+ * Helper method to ensure downloads directory exists
75
+ */
76
+ async ensureDownloadsDir() {
77
+ await fs.mkdir(this.downloadsDir, { recursive: true });
78
+ }
79
+ /**
80
+ * Helper to handle GitHub release downloads
81
+ * @param requirement The requirement configuration
82
+ * @param registry The GitHub release registry configuration
83
+ * @returns The path to the downloaded file
84
+ */
85
+ async handleGitHubRelease(requirement, registry) {
86
+ if (!registry) {
87
+ throw new Error('GitHub release registry configuration is required');
88
+ }
89
+ await this.ensureDownloadsDir();
90
+ const { repository, assetsName, assetName } = registry;
91
+ if (!repository) {
92
+ throw new Error('GitHub repository is required for GitHub release downloads');
93
+ }
94
+ let version = requirement.version;
95
+ let resolvedAssetName = assetName || '';
96
+ let resolvedAssetsName = assetsName || '';
97
+ const { stdout } = await this.execPromise(`gh release view --repo ${repository} --json tagName --jq .tagName`);
98
+ const latestTag = stdout.trim();
99
+ let latestVersion = latestTag;
100
+ const tagWithVPrefix = latestVersion.startsWith('v');
101
+ if (tagWithVPrefix)
102
+ latestVersion = latestVersion.substring(1); // Remove 'v' prefix if present
103
+ version = version.includes("latest") ? latestVersion : version;
104
+ if (assetsName) {
105
+ resolvedAssetsName = assetsName.replace('${latest}', version).replace('${version}', version);
106
+ }
107
+ if (assetName) {
108
+ resolvedAssetName = assetName.replace('${latest}', version).replace('${version}', version);
109
+ }
110
+ Logger.debug(`Downloading ${requirement.name} from GitHub release ${repository} version ${version}`);
111
+ Logger.debug(`ResolvedAssetsName} ${resolvedAssetName}; ResolvedAsetName} ${resolvedAssetName}`);
112
+ const pattern = resolvedAssetsName ? resolvedAssetsName : resolvedAssetName;
113
+ Logger.debug(`Resolved pattern: ${pattern}`);
114
+ if (!pattern) {
115
+ throw new Error('Either assetsName or assetName must be specified for GitHub release downloads');
116
+ }
117
+ // Download the release asset
118
+ const downloadPath = path.join(this.downloadsDir, path.basename(pattern));
119
+ if (!await this.fileExists(downloadPath)) {
120
+ await this.execPromise(`gh release download ${tagWithVPrefix ? `v${version}` : version} --repo ${repository} --pattern "${pattern}" -O "${downloadPath}"`);
121
+ }
122
+ // Handle zip file extraction if the downloaded file is a zip
123
+ if (downloadPath.endsWith('.zip')) {
124
+ const extractDir = path.join(this.downloadsDir, path.basename(pattern, '.zip'));
125
+ await fs.mkdir(extractDir, { recursive: true });
126
+ // Extract the zip file
127
+ await extractZipFile(downloadPath, { dir: extractDir });
128
+ let assetPath = '';
129
+ // If resolvedAssetName is specified, look for it in the extracted directory
130
+ if (resolvedAssetName) {
131
+ assetPath = path.join(extractDir, resolvedAssetName);
132
+ try {
133
+ await fs.access(assetPath);
134
+ return { resolvedVersion: version, resolvedPath: assetPath };
135
+ }
136
+ catch (error) {
137
+ throw new Error(`Asset ${resolvedAssetName} not found in extracted directory ${extractDir}`);
138
+ }
139
+ }
140
+ else {
141
+ assetPath = path.join(extractDir, path.basename(pattern, '.zip') + '.tgz');
142
+ }
143
+ // If no specific asset is required, return the extraction directory
144
+ return { resolvedVersion: version, resolvedPath: extractDir };
145
+ }
146
+ return { resolvedVersion: version, resolvedPath: downloadPath };
147
+ }
148
+ /**
149
+ * Helper to handle artifact registry downloads
150
+ * @param requirement The requirement configuration
151
+ * @param registry The artifacts registry configuration
152
+ * @returns The registry URL
153
+ */
154
+ async handleArtifactsRegistry(requirement, registry) {
155
+ if (!registry) {
156
+ throw new Error('Artifacts registry configuration is required');
157
+ }
158
+ const { registryUrl, assetName } = registry;
159
+ if (!registryUrl) {
160
+ throw new Error('Registry URL is required for artifacts downloads');
161
+ }
162
+ return registryUrl;
163
+ }
164
+ /**
165
+ * Helper to handle local path registry
166
+ * @param requirement The requirement configuration
167
+ * @param registry The local registry configuration
168
+ * @returns The local path or extracted asset path
169
+ */
170
+ async handleLocalRegistry(requirement, registry) {
171
+ if (!registry) {
172
+ throw new Error('Local registry configuration is required');
173
+ }
174
+ const { localPath, assetName } = registry;
175
+ if (!localPath) {
176
+ throw new Error('Local path is required for local registry');
177
+ }
178
+ // Verify the local path exists
179
+ try {
180
+ await fs.access(localPath);
181
+ }
182
+ catch (error) {
183
+ throw new Error(`Local path ${localPath} does not exist or is not accessible`);
184
+ }
185
+ // If the path is a zip file and assetName is specified, extract it
186
+ if (localPath.endsWith('.zip') && assetName) {
187
+ const extractDir = path.join(this.downloadsDir, path.basename(localPath, '.zip'));
188
+ await fs.mkdir(extractDir, { recursive: true });
189
+ // Extract the zip file
190
+ await extractZipFile(localPath, { dir: extractDir });
191
+ // Find the asset in the extracted directory
192
+ const assetPath = path.join(extractDir, assetName);
193
+ try {
194
+ await fs.access(assetPath);
195
+ return assetPath;
196
+ }
197
+ catch (error) {
198
+ throw new Error(`Asset ${assetName} not found in extracted directory ${extractDir}`);
199
+ }
200
+ }
201
+ return localPath;
202
+ }
203
+ async fileExists(filePath) {
204
+ try {
205
+ await fs.access(filePath);
206
+ return true;
207
+ }
208
+ catch {
209
+ return false;
210
+ }
211
+ }
212
+ /**
213
+ * Get the latest version available for a GitHub repository
214
+ * @param repository The GitHub repository in format 'owner/repo'
215
+ * @returns The latest version or tag
216
+ */
217
+ async getGitHubLatestVersion(repository) {
218
+ try {
219
+ // Use GitHub CLI to get the latest release
220
+ const { stdout } = await this.execPromise(`gh release view --repo ${repository} --json tagName --jq .tagName`);
221
+ const latestTag = stdout.trim();
222
+ // Remove 'v' prefix if present
223
+ return latestTag.startsWith('v') ? latestTag.substring(1) : latestTag;
224
+ }
225
+ catch (error) {
226
+ // If gh command fails, try to get the latest tag
227
+ const { stdout } = await this.execPromise(`git ls-remote --tags --refs https://github.com/${repository}.git | sort -t '/' -k 3 -V | tail -n 1 | awk -F/ '{print $3}'`);
228
+ let latestTag = stdout.trim();
229
+ // Remove 'v' prefix if present
230
+ return latestTag.startsWith('v') ? latestTag.substring(1) : latestTag;
231
+ }
232
+ }
233
+ /**
234
+ * Get the latest version available for an NPM package
235
+ * @param packageName The name of the NPM package
236
+ * @returns The latest version
237
+ */
238
+ async getNpmLatestVersion(packageName) {
239
+ const { stdout } = await this.execPromise(`npm view ${packageName} version`);
240
+ return stdout.trim();
241
+ }
242
+ /**
243
+ * Get the latest version available for a pip package
244
+ * @param packageName The name of the pip package
245
+ * @returns The latest version
246
+ */
247
+ async getPipLatestVersion(packageName, options) {
248
+ const pythonCmd = options?.settings?.pythonEnv || 'python';
249
+ const { stdout } = await this.execPromise(`${pythonCmd} -m pip index versions ${packageName} --pre=0 | grep -oP "(?<=Latest:\\s)[^\\s]+" | head -1`);
250
+ return stdout.trim();
251
+ }
252
+ }
253
+ //# sourceMappingURL=BaseInstaller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseInstaller.js","sourceRoot":"","sources":["../../../src/core/installers/BaseInstaller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { ServerOperationResult, ServerInstallOptions } from '../types.js';
2
+ export declare class ClientInstaller {
3
+ private categoryName;
4
+ private serverName;
5
+ private clients;
6
+ private configProvider;
7
+ private operationStatuses;
8
+ constructor(categoryName: string, serverName: string, clients: string[]);
9
+ private generateOperationId;
10
+ private getNpmPath;
11
+ /**
12
+ * Check if a command is available on the system
13
+ * @param command The command to check
14
+ * @returns True if the command is available, false otherwise
15
+ */
16
+ private isCommandAvailable;
17
+ private installClient;
18
+ private processInstallation;
19
+ private installClientConfig;
20
+ private updateClineOrMSRooSettings;
21
+ private updateGithubCopilotSettings;
22
+ install(options: ServerInstallOptions): Promise<ServerOperationResult>;
23
+ }