imcp 0.1.7 → 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,359 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
-
4
- <head>
5
- <meta charset="UTF-8">
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
- <title>IMCP Server Manager</title>
8
- <script src="https://cdn.tailwindcss.com"></script>
9
- <link href="https://unpkg.com/boxicons@2.1.4/css/boxicons.min.css" rel="stylesheet">
10
- <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
11
- <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.2/font/bootstrap-icons.css" rel="stylesheet">
12
- <link rel="stylesheet" href="styles.css">
13
- <link rel="stylesheet" href="css/modal.css">
14
- <link rel="stylesheet" href="css/notifications.css">
15
- <link rel="stylesheet" href="css/serverDetails.css">
16
- <link rel="stylesheet" href="css/detailsWidget.css">
17
- <link rel="stylesheet" href="css/serverCategoryList.css">
18
- <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
19
-
20
- <!-- Alert container for notifications -->
21
- <div class="alert-container position-fixed top-0 end-0 p-3">
22
- </div>
23
- </head>
24
-
25
- <body class="bg-gray-50 min-h-screen">
26
- <div class="container mx-auto px-4 py-6">
27
- <div class="flex items-center justify-between mb-8">
28
- <h1 class="text-3xl font-bold text-gray-900 flex items-center">
29
- <a href="index.html" class="flex items-center text-gray-900 hover:text-blue-600 transition-colors">
30
- <i class='bx bx-server mr-3 text-blue-600'></i>
31
- IMCP Server Manager
32
- </a>
33
- <button id="settingsButton"
34
- class="text-gray-700 hover:text-blue-600 transition-colors flex items-center ml-3 mt-1">
35
- <i class='bx bx-cog text-3xl'></i>
36
- </button>
37
- </h1>
38
- <div class="lg:w-2/3 flex justify-end items-center gap-4">
39
- <div class="relative w-48 focus-within:w-96 transition-all duration-300 ease-in-out">
40
- <input type="text" id="searchBox" placeholder="Search..."
41
- data-expanded-placeholder="Search servers or tools..." class="w-full px-10 py-2.5 bg-gray-50 border border-gray-200 rounded-lg
42
- text-gray-700 placeholder-gray-400
43
- focus:border-blue-400 focus:ring-2 focus:ring-blue-100
44
- transition-all duration-300 ease-in-out">
45
- <i class='bx bx-search absolute left-3.5 top-1/2 transform -translate-y-1/2 text-gray-400'></i>
46
- </div>
47
- <button id="onboardButton" style="display: none;"
48
- class="px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors flex items-center">
49
- <i class='bx bx-plus-circle mr-2'></i>
50
- Publish Server
51
- </button>
52
- </div>
53
- <script>
54
- document.addEventListener('DOMContentLoaded', () => {
55
- const searchBox = document.getElementById('searchBox');
56
- const expandedPlaceholder = searchBox.dataset.expandedPlaceholder;
57
- searchBox.addEventListener('focus', () => {
58
- setTimeout(() => searchBox.placeholder = expandedPlaceholder, 150);
59
- });
60
- searchBox.addEventListener('blur', () => {
61
- if (!searchBox.value) {
62
- searchBox.placeholder = 'Search...';
63
- }
64
- });
65
- });
66
- </script>
67
- </div>
68
-
69
- <div class="flex flex-col lg:flex-row gap-6">
70
- <!-- Server List Sidebar -->
71
- <div class="lg:w-1/3">
72
- <div class="bg-white rounded-xl shadow-sm border border-gray-100 p-6">
73
- <h2 class="text-xl font-semibold mb-4 text-gray-900 flex items-center">
74
- <i class='bx bx-list-ul mr-2 text-blue-600'></i>
75
- MCP Server Categories
76
- </h2>
77
- <div class="server-list space-y-3" id="serverCategoryList">
78
- <div class="animate-pulse">
79
- <p class="text-gray-500">Loading MCP server categories...</p>
80
- </div>
81
- </div>
82
- </div>
83
- </div>
84
-
85
- <!-- Main Content Area -->
86
- <div class="lg:w-2/3">
87
- <div class="bg-white rounded-xl shadow-sm border border-gray-100 p-6">
88
- <h2 class="text-xl font-semibold mb-4 text-gray-900 flex items-center">
89
- <i class='bx bx-detail mr-2 text-blue-600'></i>
90
- Server Category Details
91
- </h2>
92
- <div id="serverCategoryDetails" class="text-gray-600">
93
- <div class="flex items-center justify-center h-32 text-gray-400">
94
- <div class="text-center">
95
- <i class='bx bx-selection text-4xl mb-2'></i>
96
- <p>Select a server category from the list to see details</p>
97
- </div>
98
- </div>
99
- </div>
100
- <div id="toolMcpsList" class="mt-6 grid gap-4">
101
- <!-- Tool cards will be dynamically inserted here -->
102
- </div>
103
- </div>
104
- </div>
105
- </div>
106
- </div>
107
-
108
- <!-- Installation Modal -->
109
- <div id="installModal" class="modal">
110
- <div class="modal-content">
111
- <div class="flex justify-between items-center mb-4">
112
- <h3 id="modalTitle" class="text-xl font-semibold text-gray-900">Install MCP Tool</h3>
113
- <span class="close" onclick="closeModal()">&times;</span>
114
- </div>
115
- <form id="installForm">
116
- <!-- Requirements Section -->
117
- <div id="modalRequirements" class="mb-6">
118
- <!-- Requirements will be injected here -->
119
- </div>
120
-
121
- <!-- Target Selection Section -->
122
- <div id="modalTargets" class="bg-gray-50 rounded-lg">
123
- <!-- Target options will be injected here -->
124
- </div>
125
-
126
- <!-- Environment Variables Section -->
127
- <div id="modalEnvInputs" class="space-y-4">
128
- <!-- Environment variable inputs will be injected here -->
129
- </div>
130
-
131
- <!-- Arguments Section -->
132
- <div id="modalArguments" class="space-y-4 mb-6">
133
- <!-- Arguments will be injected here -->
134
- </div>
135
-
136
- <div class="flex justify-end space-x-4 mt-6">
137
- <button type="button" onclick="closeModal()"
138
- class="px-4 py-2 text-gray-600 hover:text-gray-800 font-medium rounded-md hover:bg-gray-100 transition-colors">
139
- Cancel
140
- </button>
141
- <button type="submit" class="submit-button">
142
- <i class='bx bx-download mr-2'></i>
143
- Install
144
- </button>
145
- </div>
146
- </form>
147
- </div>
148
- </div>
149
- <!-- Loading Modal -->
150
- <div id="installLoadingModal" class="modal" style="display:none; z-index:2000;">
151
- <div class="modal-content" style="text-align:center; pointer-events:auto; position:relative;">
152
- <button class="modal-close-button" onclick="hideInstallLoadingModal()" aria-label="Close">&times;</button>
153
- <div style="margin-top:40px;">
154
- <div class="loading-icon" style="margin-bottom:16px;">
155
- <svg width="48" height="48" viewBox="0 0 48 48" fill="none">
156
- <circle cx="24" cy="24" r="20" stroke="#888" stroke-width="4" opacity="0.2" />
157
- <circle cx="24" cy="24" r="20" stroke="#3498db" stroke-width="4" stroke-linecap="round"
158
- stroke-dasharray="100" stroke-dashoffset="60">
159
- <animateTransform attributeName="transform" type="rotate" from="0 24 24" to="360 24 24"
160
- dur="1s" repeatCount="indefinite" />
161
- </circle>
162
- </svg>
163
- </div>
164
- <div class="loading-title" style="font-size:1.5rem; font-weight:bold; margin-bottom:8px;">Installing...
165
- </div>
166
- <div id="installLoadingMessage"
167
- style="min-height:48px; max-height:160px; overflow:auto; background:#f8f8f8; border-radius:6px; padding:12px; font-size:1rem; color:#444; text-align:left;">
168
- </div>
169
- </div>
170
- </div>
171
- </div>
172
-
173
- <!-- Module scripts -->
174
- <script type="module">
175
- import { fetchServerCategories, handleInstallServer, uninstallTool } from './js/api.js';
176
- import { setupSearch } from './js/serverCategoryList.js';
177
- import { showServerDetails } from './js/serverCategoryDetails.js';
178
- import { showInstallModal, closeModal } from './js/modal.js';
179
- // import { showOnboardModal as navigateToOnboard } from './js/onboard/index.js'; // We are directly navigating
180
- import flights, { getFlightQueryParameters, buildUrlWithFlights } from './js/flights/flights.js';
181
-
182
- // Make necessary functions available globally
183
- window.showServerDetails = showServerDetails;
184
- window.showInstallModal = showInstallModal;
185
- // window.showOnboardModal = showOnboardModal; // This might conflict if showOnboardModal is also in onboard/index.js
186
- // We'll rely on the event listener above for the main page's onboard button.
187
- // If other parts of the app call window.showOnboardModal, they'll need updating too.
188
- window.closeModal = closeModal;
189
- window.handleInstallServer = handleInstallServer;
190
- window.uninstallTool = uninstallTool;
191
-
192
- // Initialize
193
- document.addEventListener('DOMContentLoaded', async () => {
194
- setupSearch();
195
- const onboardButton = document.getElementById('onboardButton');
196
- if (flights.enableOnboard) {
197
- onboardButton.style.display = 'flex'; // Make it visible
198
- onboardButton.addEventListener('click', () => {
199
- const flightQueryString = getFlightQueryParameters();
200
- window.location.href = buildUrlWithFlights('onboard.html');
201
- });
202
- }
203
-
204
- const settingsButton = document.getElementById('settingsButton');
205
- settingsButton.addEventListener('click', () => {
206
- window.location.href = buildUrlWithFlights('settings.html');
207
- });
208
-
209
- // No 'else' block needed as it's hidden by default via inline style
210
-
211
- try {
212
- // First fetch categories and wait for completion
213
- // fetchServerCategories will call renderServerCategoryList, which might call loadLastSelectedCategory.
214
- // loadLastSelectedCategory calls showServerDetails.
215
- // The logic for setting initial category URL is now more centralized.
216
-
217
- await fetchServerCategories(); // This populates allServerCategoriesData
218
-
219
- const urlParams = new URLSearchParams(window.location.search);
220
- const categoryParam = urlParams.get('category');
221
- const lastSelectedCategoryFromStorage = localStorage.getItem('lastSelectedCategory');
222
-
223
- if (categoryParam) {
224
- // Category is in URL, load it
225
- await window.showServerDetails(categoryParam);
226
- } else if (lastSelectedCategoryFromStorage) {
227
- // Category not in URL, but in localStorage. Redirect to URL with this category and flights.
228
- window.location.href = buildUrlWithFlights('index.html', { category: lastSelectedCategoryFromStorage });
229
- return; // Stop further execution, page will reload
230
- } else if (allServerCategoriesData && allServerCategoriesData.length > 0) {
231
- // No category in URL or localStorage, pick first from list and redirect.
232
- window.location.href = buildUrlWithFlights('index.html', { category: allServerCategoriesData[0].name });
233
- return; // Stop further execution, page will reload
234
- } else {
235
- }
236
-
237
- } catch (error) {
238
- console.error('Error during initialization:', error);
239
- // Potentially show a user-friendly error message in the UI
240
- const serverCategoryDetailsDiv = document.getElementById('serverCategoryDetails');
241
- if (serverCategoryDetailsDiv) {
242
- serverCategoryDetailsDiv.innerHTML = `<p class="text-red-500">Error initializing page: ${error.message}</p>`;
243
- }
244
- const serverCategoryListDiv = document.getElementById('serverCategoryList');
245
- if (serverCategoryListDiv) {
246
- serverCategoryListDiv.innerHTML = `<p class="text-red-500">Could not load categories.</p>`;
247
- }
248
- }
249
-
250
- // Fetch and display application version
251
- try {
252
- const versionResponse = await fetch('/api/version');
253
- const appVersionSpan = document.getElementById('appVersion');
254
- const versionInfoContainer = document.getElementById('versionInfoContainer');
255
- const versionIcon = versionInfoContainer.querySelector('i');
256
-
257
- // Create tooltip element
258
- const tooltip = document.createElement('div');
259
- tooltip.className = 'version-tooltip';
260
- versionInfoContainer.appendChild(tooltip);
261
-
262
- let tooltipMessage = "Loading version information...";
263
- let isUpdateAvailable = false;
264
-
265
- if (versionResponse.ok) {
266
- const versionData = await versionResponse.json();
267
- if (versionData.success && versionData.data) {
268
- const currentVersion = versionData.data.version || 'N/A';
269
- appVersionSpan.textContent = currentVersion;
270
-
271
- if (versionData.data.availableUpdate) {
272
- isUpdateAvailable = true;
273
- tooltipMessage = versionData.data.availableUpdate.message;
274
- } else {
275
- tooltipMessage = "You're already up to date!";
276
- }
277
- } else {
278
- appVersionSpan.textContent = 'N/A';
279
- tooltipMessage = "Could not retrieve version information.";
280
- }
281
- } else {
282
- console.error('Failed to fetch version:', versionResponse.status);
283
- appVersionSpan.textContent = 'N/A';
284
- tooltipMessage = "Failed to fetch version information.";
285
- }
286
-
287
- tooltip.textContent = tooltipMessage;
288
-
289
- if (isUpdateAvailable) {
290
- versionInfoContainer.classList.add('text-orange-500');
291
- versionIcon.classList.add('text-orange-500');
292
- appVersionSpan.classList.add('text-orange-500');
293
- }
294
-
295
- versionInfoContainer.addEventListener('mouseenter', () => {
296
- tooltip.classList.add('visible');
297
- });
298
-
299
- versionInfoContainer.addEventListener('mouseleave', () => {
300
- // Only hide if the mouse isn't over the tooltip itself
301
- setTimeout(() => { // Add a small delay to allow moving to the tooltip
302
- if (!tooltip.matches(':hover')) {
303
- tooltip.classList.remove('visible');
304
- }
305
- }, 100);
306
- });
307
-
308
- tooltip.addEventListener('mouseleave', () => {
309
- tooltip.classList.remove('visible');
310
- });
311
-
312
- // Keep tooltip visible if clicked, and allow clicking outside to close
313
- versionInfoContainer.addEventListener('click', (event) => {
314
- event.stopPropagation();
315
- tooltip.classList.add('visible'); // Ensure it's visible on click
316
- });
317
-
318
- document.addEventListener('click', (event) => {
319
- if (!versionInfoContainer.contains(event.target) && !tooltip.contains(event.target)) {
320
- tooltip.classList.remove('visible');
321
- }
322
- });
323
-
324
-
325
- } catch (error) {
326
- console.error('Error fetching version:', error);
327
- const appVersionSpan = document.getElementById('appVersion');
328
- if (appVersionSpan) {
329
- appVersionSpan.textContent = 'N/A';
330
- const versionInfoContainer = document.getElementById('versionInfoContainer');
331
- const tooltip = versionInfoContainer.querySelector('.version-tooltip');
332
- if (tooltip) {
333
- tooltip.textContent = "Error fetching version information.";
334
- }
335
- }
336
- }
337
- });
338
- </script>
339
- <script src="js/modal.js" type="module"></script>
340
-
341
- <footer class="text-sm text-gray-600 py-6 mt-10 border-t border-gray-200">
342
- <div class="container mx-auto px-4">
343
- <div class="flex flex-col sm:flex-row justify-start items-start sm:items-center space-y-2 sm:space-y-0 sm:space-x-6 px-6">
344
- <a href="https://github.com/ai-microsoft/imcp" target="_blank" rel="noopener noreferrer"
345
- class="flex items-center text-blue-600 hover:text-blue-700 hover:underline transition-colors"
346
- title="Welcome for any feedback.">
347
- <i class='bx bxl-github mr-1.5'></i> GitHub
348
- </a>
349
- <span class="hidden sm:inline text-gray-300">|</span>
350
- <span id="versionInfoContainer" class="version-info-container flex items-center text-gray-700">
351
- <i class='bx bx-info-circle mr-1.5 text-gray-500'></i>
352
- Version: <span id="appVersion" class="ml-1 font-medium">Loading...</span>
353
- </span>
354
- </div>
355
- </div>
356
- </footer>
357
- </body>
358
-
359
- </html>
@@ -1,132 +0,0 @@
1
- import { renderServerCategoryList } from './serverCategoryList.js';
2
- import { showToast } from './notifications.js';
3
-
4
- // Global store for server data
5
- let allServerCategoriesData = [];
6
- // Make it available globally for legacy code
7
- window.allServerCategoriesData = allServerCategoriesData;
8
-
9
- // Fetch and display servers
10
- async function fetchServerCategories() {
11
- try {
12
- // Fetch all servers (without filters)
13
- const response = await fetch('/api/categories');
14
- if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
15
- const responseData = await response.json();
16
- if (!responseData.success || !responseData.data) {
17
- throw new Error(`API Error fetching servers: ${responseData.error || 'Invalid data format'}`);
18
- }
19
- allServerCategoriesData = window.allServerCategoriesData = responseData.data; // Update both local and global references
20
-
21
- // Use the renderServerCategoryList function to display servers
22
- renderServerCategoryList(allServerCategoriesData);
23
-
24
- // Check if search is active
25
- const searchTerm = document.getElementById('searchBox').value.toLowerCase();
26
- if (searchTerm) {
27
- const filteredServerCategories = allServerCategoriesData.filter(server =>
28
- (server.displayName || server.name).toLowerCase().includes(searchTerm) ||
29
- (server.description || '').toLowerCase().includes(searchTerm)
30
- );
31
- renderServerCategoryList(filteredServerCategories);
32
- }
33
- } catch (error) {
34
- console.error('Error fetching servers:', error);
35
- document.getElementById('serverCategoryList').innerHTML =
36
- '<p class="text-red-600">Error loading servers. Please check console and try again.</p>';
37
- document.getElementById('serverCategoryDetails').innerHTML = ''; // Clear details on error
38
- }
39
- }
40
-
41
- // Handle MCP tool installation
42
- async function handleInstallServer(event, categoryName, serverName, callback, options = {}) {
43
- event.preventDefault(); // Prevent page reload
44
- console.log("Handling install for:", categoryName, serverName);
45
-
46
- // Get selected targets from the form if not provided in options
47
- const selectedTargets = options.targets || [...document.querySelectorAll('input[name="targets"]:checked')]
48
- .map(cb => cb.value);
49
-
50
- if (selectedTargets.length === 0) {
51
- showToast('Please select at least one target', 'error');
52
- return;
53
- }
54
-
55
- // Get environment variables from the form
56
- const form = event.target;
57
- const formData = new FormData(form);
58
- const envValues = {};
59
- formData.forEach((value, key) => {
60
- if (!key.startsWith('targets') && value) { // Skip target checkboxes
61
- envValues[key] = value;
62
- }
63
- });
64
-
65
- try {
66
- const serverList = {};
67
- serverList[serverName] = {
68
- env: envValues,
69
- targetClients: selectedTargets
70
- }; // Use serverName as key
71
- const response = await fetch(`/api/categories/${categoryName}/install`, {
72
- method: 'POST',
73
- headers: { 'Content-Type': 'application/json' },
74
- body: JSON.stringify({ serverList: serverList })
75
- });
76
-
77
- if (!response.ok) {
78
- const errorData = await response.text();
79
- throw new Error(`Installation failed: ${errorData || response.statusText}`);
80
- }
81
-
82
- showToast('MCP server "' + serverName + '" for ' + categoryName + ' installation initiated successfully!', 'success');
83
- window.closeModal();
84
- fetchServerCategories(); // Refresh the main server list
85
- window.showServerDetails(categoryName); // Refresh the details pane
86
-
87
- } catch (error) {
88
- console.error('Error installing MCP server:', error);
89
- showToast('Error installing MCP server: ' + error.message + '. Please check console.', 'error');
90
- }
91
- }
92
-
93
-
94
- async function uninstallTool(name) {
95
- const serverTitle = document.querySelector('#serverCategoryDetails h3')?.textContent;
96
- if (!serverTitle) {
97
- showToast('No server selected.', 'error');
98
- return;
99
- }
100
-
101
- const uninstallConfirmed = await showConfirm(`Do you want to uninstall tool '${name}' from ${serverTitle}?`);
102
- if (!uninstallConfirmed) {
103
- return;
104
- }
105
-
106
- try {
107
- const response = await fetch(`/api/categories/${serverTitle}/uninstall-tool`, {
108
- method: 'POST',
109
- headers: { 'Content-Type': 'application/json' },
110
- body: JSON.stringify({ toolName: name })
111
- });
112
-
113
- if (!response.ok) {
114
- const errorData = await response.text();
115
- throw new Error(`Uninstall failed: ${errorData || response.statusText}`);
116
- }
117
-
118
- showToast(`Tool '${name}' uninstall initiated successfully!`, 'success');
119
- fetchServerCategories();
120
- window.showServerDetails(serverTitle);
121
- } catch (error) {
122
- console.error('Error uninstalling tool:', error);
123
- showToast(`Error uninstalling tool: ${error.message}`, 'error');
124
- }
125
- }
126
-
127
- export {
128
- allServerCategoriesData,
129
- fetchServerCategories,
130
- handleInstallServer,
131
- uninstallTool
132
- };