imcp 0.1.5 → 0.1.6

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 (186) hide show
  1. package/.github/ISSUE_TEMPLATE/JitAccess.yml +28 -0
  2. package/.github/acl/access.yml +20 -0
  3. package/.github/compliance/inventory.yml +5 -0
  4. package/.github/policies/jit.yml +19 -0
  5. package/.github/workflows/build.yml +28 -0
  6. package/.roo/rules-code/rules.md +88 -0
  7. package/docs/ONBOARDING_PAGE_DESIGN.md +260 -0
  8. package/docs/Telemetry.md +136 -0
  9. package/memory-bank/activeContext.md +26 -0
  10. package/memory-bank/decisionLog.md +91 -0
  11. package/memory-bank/productContext.md +41 -0
  12. package/memory-bank/progress.md +35 -0
  13. package/memory-bank/systemPatterns.md +10 -0
  14. package/package.json +1 -5
  15. package/src/cli/commands/install.ts +139 -0
  16. package/src/cli/commands/list.ts +113 -0
  17. package/src/cli/commands/pull.ts +16 -0
  18. package/src/cli/commands/serve.ts +39 -0
  19. package/src/cli/commands/uninstall.ts +64 -0
  20. package/src/cli/index.ts +82 -0
  21. package/src/core/installers/clients/BaseClientInstaller.ts +341 -0
  22. package/src/core/installers/clients/ClientInstaller.ts +222 -0
  23. package/src/core/installers/clients/ClientInstallerFactory.ts +43 -0
  24. package/src/core/installers/clients/ClineInstaller.ts +35 -0
  25. package/src/core/installers/clients/ExtensionInstaller.ts +165 -0
  26. package/src/core/installers/clients/GithubCopilotInstaller.ts +79 -0
  27. package/src/core/installers/clients/MSRooCodeInstaller.ts +32 -0
  28. package/src/core/installers/index.ts +11 -0
  29. package/src/core/installers/requirements/BaseInstaller.ts +85 -0
  30. package/src/core/installers/requirements/CommandInstaller.ts +231 -0
  31. package/src/core/installers/requirements/GeneralInstaller.ts +133 -0
  32. package/src/core/installers/requirements/InstallerFactory.ts +114 -0
  33. package/src/core/installers/requirements/NpmInstaller.ts +271 -0
  34. package/src/core/installers/requirements/NugetInstaller.ts +203 -0
  35. package/src/core/installers/requirements/PipInstaller.ts +207 -0
  36. package/src/core/installers/requirements/RequirementInstaller.ts +42 -0
  37. package/src/core/loaders/ConfigurationLoader.ts +298 -0
  38. package/src/core/loaders/ConfigurationProvider.ts +462 -0
  39. package/src/core/loaders/InstallOperationManager.ts +367 -0
  40. package/src/core/loaders/ServerSchemaLoader.ts +117 -0
  41. package/src/core/loaders/ServerSchemaProvider.ts +99 -0
  42. package/src/core/loaders/SystemSettingsManager.ts +278 -0
  43. package/src/core/metadatas/constants.ts +122 -0
  44. package/src/core/metadatas/recordingConstants.ts +65 -0
  45. package/src/core/metadatas/types.ts +202 -0
  46. package/src/core/onboard/FeedOnboardService.ts +501 -0
  47. package/src/core/onboard/OnboardProcessor.ts +356 -0
  48. package/src/core/onboard/OnboardStatus.ts +60 -0
  49. package/src/core/onboard/OnboardStatusManager.ts +416 -0
  50. package/src/core/validators/FeedValidator.ts +135 -0
  51. package/src/core/validators/IServerValidator.ts +21 -0
  52. package/src/core/validators/SSEServerValidator.ts +43 -0
  53. package/src/core/validators/ServerValidatorFactory.ts +51 -0
  54. package/src/core/validators/StdioServerValidator.ts +313 -0
  55. package/src/index.ts +44 -0
  56. package/src/services/InstallationService.ts +102 -0
  57. package/src/services/MCPManager.ts +249 -0
  58. package/src/services/RequirementService.ts +627 -0
  59. package/src/services/ServerService.ts +161 -0
  60. package/src/services/TelemetryService.ts +59 -0
  61. package/src/utils/UpdateCheckTracker.ts +86 -0
  62. package/src/utils/adoUtils.ts +293 -0
  63. package/src/utils/clientUtils.ts +72 -0
  64. package/src/utils/feedUtils.ts +31 -0
  65. package/src/utils/githubAuth.ts +212 -0
  66. package/src/utils/githubUtils.ts +164 -0
  67. package/src/utils/logger.ts +195 -0
  68. package/src/utils/macroExpressionUtils.ts +104 -0
  69. package/src/utils/osUtils.ts +700 -0
  70. package/src/utils/versionUtils.ts +114 -0
  71. package/src/web/contract/serverContract.ts +74 -0
  72. package/src/web/public/css/detailsWidget.css +235 -0
  73. package/src/web/public/css/modal.css +757 -0
  74. package/src/web/public/css/notifications.css +101 -0
  75. package/src/web/public/css/onboard.css +107 -0
  76. package/src/web/public/css/serverCategoryList.css +120 -0
  77. package/src/web/public/css/serverDetails.css +139 -0
  78. package/src/web/public/index.html +359 -0
  79. package/src/web/public/js/api.js +132 -0
  80. package/src/web/public/js/detailsWidget.js +264 -0
  81. package/src/web/public/js/flights/flights.js +127 -0
  82. package/src/web/public/js/modal/index.js +52 -0
  83. package/src/web/public/js/modal/installModal.js +162 -0
  84. package/src/web/public/js/modal/installation.js +266 -0
  85. package/src/web/public/js/modal/loadingModal.js +182 -0
  86. package/src/web/public/js/modal/modalSetup.js +595 -0
  87. package/src/web/public/js/modal/modalUtils.js +37 -0
  88. package/src/web/public/js/modal/versionUtils.js +20 -0
  89. package/src/web/public/js/modal.js +42 -0
  90. package/src/web/public/js/notifications.js +137 -0
  91. package/src/web/public/js/onboard/formProcessor.js +1037 -0
  92. package/src/web/public/js/onboard/index.js +374 -0
  93. package/src/web/public/js/onboard/publishHandler.js +172 -0
  94. package/src/web/public/js/onboard/state.js +76 -0
  95. package/src/web/public/js/onboard/templates.js +342 -0
  96. package/src/web/public/js/onboard/uiHandlers.js +1076 -0
  97. package/src/web/public/js/onboard/validationHandlers.js +493 -0
  98. package/src/web/public/js/serverCategoryDetails.js +364 -0
  99. package/src/web/public/js/serverCategoryList.js +241 -0
  100. package/src/web/public/js/settings.js +314 -0
  101. package/src/web/public/modal.html +84 -0
  102. package/src/web/public/onboard.html +296 -0
  103. package/src/web/public/settings.html +135 -0
  104. package/src/web/public/styles.css +277 -0
  105. package/src/web/server.ts +478 -0
  106. package/tsconfig.json +18 -0
  107. package/wiki/Installation.md +3 -0
  108. package/wiki/Publish.md +3 -0
  109. package/dist/cli/commands/install.js.map +0 -1
  110. package/dist/cli/commands/list.js.map +0 -1
  111. package/dist/cli/commands/pull.js.map +0 -1
  112. package/dist/cli/commands/serve.js.map +0 -1
  113. package/dist/cli/commands/start.js.map +0 -1
  114. package/dist/cli/commands/sync.js.map +0 -1
  115. package/dist/cli/commands/uninstall.js.map +0 -1
  116. package/dist/cli/index.js.map +0 -1
  117. package/dist/core/ConfigurationLoader.js.map +0 -1
  118. package/dist/core/ConfigurationProvider.js.map +0 -1
  119. package/dist/core/InstallationService.js.map +0 -1
  120. package/dist/core/MCPManager.js.map +0 -1
  121. package/dist/core/RequirementService.js.map +0 -1
  122. package/dist/core/ServerSchemaLoader.js.map +0 -1
  123. package/dist/core/ServerSchemaProvider.js.map +0 -1
  124. package/dist/core/constants.js.map +0 -1
  125. package/dist/core/installers/BaseInstaller.js.map +0 -1
  126. package/dist/core/installers/ClientInstaller.js.map +0 -1
  127. package/dist/core/installers/CommandInstaller.js.map +0 -1
  128. package/dist/core/installers/GeneralInstaller.js.map +0 -1
  129. package/dist/core/installers/InstallerFactory.js.map +0 -1
  130. package/dist/core/installers/NpmInstaller.js.map +0 -1
  131. package/dist/core/installers/PipInstaller.js.map +0 -1
  132. package/dist/core/installers/RequirementInstaller.js.map +0 -1
  133. package/dist/core/installers/clients/BaseClientInstaller.js.map +0 -1
  134. package/dist/core/installers/clients/ClientInstaller.js.map +0 -1
  135. package/dist/core/installers/clients/ClientInstallerFactory.js.map +0 -1
  136. package/dist/core/installers/clients/ClineInstaller.js.map +0 -1
  137. package/dist/core/installers/clients/ExtensionInstaller.js.map +0 -1
  138. package/dist/core/installers/clients/GithubCopilotInstaller.js.map +0 -1
  139. package/dist/core/installers/clients/MSRooCodeInstaller.js.map +0 -1
  140. package/dist/core/installers/index.js.map +0 -1
  141. package/dist/core/installers/requirements/BaseInstaller.js.map +0 -1
  142. package/dist/core/installers/requirements/CommandInstaller.js.map +0 -1
  143. package/dist/core/installers/requirements/GeneralInstaller.js.map +0 -1
  144. package/dist/core/installers/requirements/InstallerFactory.js.map +0 -1
  145. package/dist/core/installers/requirements/NpmInstaller.js.map +0 -1
  146. package/dist/core/installers/requirements/NugetInstaller.js.map +0 -1
  147. package/dist/core/installers/requirements/PipInstaller.js.map +0 -1
  148. package/dist/core/installers/requirements/RequirementInstaller.js.map +0 -1
  149. package/dist/core/loaders/ConfigurationLoader.js.map +0 -1
  150. package/dist/core/loaders/ConfigurationProvider.js.map +0 -1
  151. package/dist/core/loaders/InstallOperationManager.js.map +0 -1
  152. package/dist/core/loaders/ServerSchemaLoader.js.map +0 -1
  153. package/dist/core/loaders/ServerSchemaProvider.js.map +0 -1
  154. package/dist/core/loaders/SystemSettingsManager.js.map +0 -1
  155. package/dist/core/metadatas/constants.js.map +0 -1
  156. package/dist/core/metadatas/recordingConstants.js.map +0 -1
  157. package/dist/core/metadatas/types.js.map +0 -1
  158. package/dist/core/onboard/FeedOnboardService.js.map +0 -1
  159. package/dist/core/onboard/OnboardProcessor.js.map +0 -1
  160. package/dist/core/onboard/OnboardStatus.js.map +0 -1
  161. package/dist/core/onboard/OnboardStatusManager.js.map +0 -1
  162. package/dist/core/types.js.map +0 -1
  163. package/dist/core/validators/FeedValidator.js.map +0 -1
  164. package/dist/core/validators/IServerValidator.js.map +0 -1
  165. package/dist/core/validators/SSEServerValidator.js.map +0 -1
  166. package/dist/core/validators/ServerValidatorFactory.js.map +0 -1
  167. package/dist/core/validators/StdioServerValidator.js.map +0 -1
  168. package/dist/index.js.map +0 -1
  169. package/dist/services/InstallRequestValidator.js.map +0 -1
  170. package/dist/services/InstallationService.js.map +0 -1
  171. package/dist/services/MCPManager.js.map +0 -1
  172. package/dist/services/RequirementService.js.map +0 -1
  173. package/dist/services/ServerService.js.map +0 -1
  174. package/dist/services/TelemetryService.js.map +0 -1
  175. package/dist/utils/UpdateCheckTracker.js.map +0 -1
  176. package/dist/utils/adoUtils.js.map +0 -1
  177. package/dist/utils/clientUtils.js.map +0 -1
  178. package/dist/utils/feedUtils.js.map +0 -1
  179. package/dist/utils/githubAuth.js.map +0 -1
  180. package/dist/utils/githubUtils.js.map +0 -1
  181. package/dist/utils/logger.js.map +0 -1
  182. package/dist/utils/macroExpressionUtils.js.map +0 -1
  183. package/dist/utils/osUtils.js.map +0 -1
  184. package/dist/utils/versionUtils.js.map +0 -1
  185. package/dist/web/contract/serverContract.js.map +0 -1
  186. package/dist/web/server.js.map +0 -1
@@ -0,0 +1,296 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Onboard MCP Category - IMCP</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <link href="https://unpkg.com/boxicons@2.1.4/css/boxicons.min.css" rel="stylesheet">
9
+ <!-- Bootstrap CSS is likely not needed if primarily using Tailwind -->
10
+ <!-- <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> -->
11
+ <link rel="stylesheet" href="styles.css">
12
+ <link rel="stylesheet" href="css/onboard.css">
13
+ <!-- Highlight.js for JSON syntax highlighting -->
14
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/default.min.css">
15
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
16
+ <link rel="stylesheet" href="css/modal.css">
17
+ <link rel="stylesheet" href="css/notifications.css">
18
+ <script type="module">
19
+ import flights, { getFlightQueryParameters } from './js/flights/flights.js';
20
+ if (!flights.enableOnboard) {
21
+ // Preserve flight params when redirecting
22
+ window.location.href = `index.html${getFlightQueryParameters()}`;
23
+ }
24
+
25
+ document.addEventListener('DOMContentLoaded', () => {
26
+ const flightQueryString = getFlightQueryParameters();
27
+
28
+ const backToServerLink = document.querySelector('a[href="index.html"]');
29
+ if (backToServerLink) {
30
+ backToServerLink.href = `index.html${flightQueryString}`;
31
+ }
32
+
33
+ // Update cancel buttons in forms
34
+ const cancelButtons = document.querySelectorAll('button[onclick="window.location.href=\'index.html\'"]');
35
+ cancelButtons.forEach(button => {
36
+ button.onclick = () => { window.location.href = `index.html${flightQueryString}`; };
37
+ });
38
+
39
+ const jsonEditorCancelButton = document.querySelector('#jsonEditorActionsContainer button[onclick="window.location.href=\'index.html\'"]');
40
+ if (jsonEditorCancelButton) {
41
+ jsonEditorCancelButton.onclick = () => { window.location.href = `index.html${flightQueryString}`; };
42
+ }
43
+ });
44
+ </script>
45
+ </head>
46
+ <body class="bg-gray-50 min-h-screen">
47
+ <div class="alert-container"></div>
48
+ <div class="container mx-auto px-4 py-6">
49
+ <div class="flex items-center justify-between mb-8">
50
+ <h1 class="text-3xl font-bold text-gray-900 flex items-center">
51
+ <i class='bx bx-server mr-3 text-blue-600'></i>
52
+ Publish MCP Server
53
+ </h1>
54
+ <a href="index.html" class="text-gray-600 hover:text-gray-900 flex items-center">
55
+ <i class='bx bx-arrow-back mr-2'></i>
56
+ Server List
57
+ </a>
58
+ </div>
59
+
60
+ <div class="bg-white rounded-xl shadow-sm border border-gray-100 p-6 max-w-6xl mx-auto">
61
+ <!-- Tab Navigation -->
62
+ <div class="mb-6 border-b border-gray-200">
63
+ <nav class="flex space-x-8" aria-label="Tabs">
64
+ <button id="tab-create-category" class="py-2 px-4 text-blue-600 border-b-2 border-blue-600 font-semibold focus:outline-none" type="button">
65
+ Add New Server Category
66
+ </button>
67
+ <button id="tab-create-server" class="py-2 px-4 text-gray-600 border-b-2 border-transparent hover:text-blue-600 hover:border-blue-600 font-semibold focus:outline-none" type="button">
68
+ Add New Server in Existing Category
69
+ </button>
70
+ </nav>
71
+ <!-- View Mode Toggle Switch -->
72
+ <div class="flex justify-end mt-2 mb-4">
73
+ <label for="viewModeToggle" class="flex items-center cursor-pointer">
74
+ <span class="mr-3 text-sm font-medium text-gray-700">Form View</span>
75
+ <div class="relative">
76
+ <input type="checkbox" id="viewModeToggle" class="sr-only peer">
77
+ <div class="w-10 h-6 bg-gray-200 rounded-full peer peer-focus:ring-2 peer-focus:ring-blue-300 peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-0.5 after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all"></div>
78
+ </div>
79
+ <span class="ml-3 text-sm font-medium text-gray-700">JSON View</span>
80
+ </label>
81
+ </div>
82
+ </div>
83
+ <!-- Tab Panels -->
84
+ <div id="panel-create-category">
85
+ <form id="onboardForm" class="space-y-6">
86
+ <!-- Basic Information -->
87
+ <div class="space-y-4">
88
+ <h2 onclick="toggleSectionContent('basicInformationContent', this.querySelector('.toggle-icon'))" class="text-xl font-semibold text-gray-900 flex items-center justify-between mb-4 cursor-pointer">
89
+ <span class="flex items-center">
90
+ <i class='bx bx-info-circle mr-2 text-blue-600'></i>
91
+ Basic Information
92
+ </span>
93
+ <i class='bx bx-chevron-down toggle-icon text-xl text-gray-500'></i>
94
+ </h2>
95
+ <div id="basicInformationContent" class="grid grid-cols-1 md:grid-cols-2 gap-4 p-6 bg-white rounded-lg border border-gray-200 shadow-sm">
96
+ <div>
97
+ <label class="block text-sm font-medium text-gray-700 mb-1">Category Name*</label>
98
+ <input type="text" name="name" required
99
+ class="w-full px-3 py-1.5 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
100
+ placeholder="e.g., ai-coder-tools">
101
+ </div>
102
+ <div>
103
+ <label class="block text-sm font-medium text-gray-700 mb-1">Display Name*</label>
104
+ <input type="text" name="displayName" required
105
+ class="w-full px-3 py-1.5 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
106
+ placeholder="e.g., Coder Tools">
107
+ </div>
108
+ <div class="md:col-span-2">
109
+ <label class="block text-sm font-medium text-gray-700 mb-1">Description*</label>
110
+ <textarea name="description" rows="3" required
111
+ class="w-full px-3 py-1.5 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
112
+ placeholder="Describe the purpose and capabilities of this server category"></textarea>
113
+ </div>
114
+ <div class="md:col-span-2">
115
+ <label class="block text-sm font-medium text-gray-700 mb-1">Repository URL</label>
116
+ <input type="url" name="repository"
117
+ class="w-full px-3 py-1.5 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
118
+ placeholder="e.g., https://github.com/organization/repository">
119
+ </div>
120
+ </div>
121
+ </div>
122
+ <!-- MCP Servers -->
123
+ <div class="space-y-4">
124
+ <div class="flex justify-between items-center mb-4">
125
+ <h2 class="text-xl font-semibold text-gray-900 flex items-center">
126
+ <i class='bx bx-server mr-2 text-blue-600'></i>
127
+ MCP Servers
128
+ </h2>
129
+ <button type="button" id="addServerBtnNewCategory"
130
+ class="px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 flex items-center text-sm">
131
+ <i class='bx bx-plus mr-2'></i>
132
+ Add MCP Server
133
+ </button>
134
+ </div>
135
+ <div id="serversList" class="space-y-4">
136
+ <!-- Server configurations will be added here dynamically by serverTemplate -->
137
+ </div>
138
+ </div>
139
+ <div class="flex justify-end space-x-4 pt-6 border-t">
140
+ <button type="button" onclick="window.location.href='index.html'"
141
+ class="px-6 py-2.5 border border-gray-300 rounded-lg text-gray-600 hover:bg-gray-50">
142
+ Cancel
143
+ </button>
144
+ <button type="button" id="validateButtonNewCategory"
145
+ class="px-6 py-2.5 bg-green-500 text-white rounded-lg hover:bg-green-600 flex items-center">
146
+ <i class='bx bx-check-shield mr-2'></i>
147
+ Validate
148
+ </button>
149
+ <button type="submit" id="publishButtonNewCategory"
150
+ class="px-6 py-2.5 bg-blue-600 text-white rounded-lg hover:bg-blue-700 flex items-center">
151
+ <i class='bx bxs-cloud-upload mr-2'></i>
152
+ Publish
153
+ </button>
154
+ </div>
155
+ <!-- Validation Status Panel -->
156
+ <div id="validationStatusPanelNewCategory" class="hidden p-6 bg-gray-50 rounded-lg border border-gray-200">
157
+ <h3 onclick="toggleSectionContent('validationStatusContentNewCategory', this.querySelector('.toggle-icon'))" class="cursor-pointer text-lg font-semibold text-gray-800 mb-3 flex items-center justify-between">
158
+ <span class="flex items-center">
159
+ <i class='bx bx-analyse mr-2 text-blue-600'></i>Validation Status
160
+ </span>
161
+ <i class='bx bx-chevron-down toggle-icon text-xl text-gray-500'></i>
162
+ </h3>
163
+ <div id="validationStatusContentNewCategory" class="text-sm text-gray-700 space-y-2">
164
+ <!-- Validation messages will be displayed here -->
165
+ </div>
166
+ </div>
167
+ </form>
168
+ </div>
169
+ <div id="panel-create-server" class="hidden">
170
+ <form id="onboardServerForm" class="space-y-6">
171
+ <!-- Select Existing Category -->
172
+ <div class="space-y-4">
173
+ <h2 class="text-xl font-semibold text-gray-900 flex items-center mb-4">
174
+ <i class='bx bx-category mr-2 text-blue-600'></i>
175
+ Select Server Category
176
+ </h2>
177
+ <select id="existingCategorySelect" name="categoryName" required
178
+ class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500">
179
+ <option value="">Loading categories...</option>
180
+ </select>
181
+ </div>
182
+
183
+ <!-- Basic Information (Read-only after category selection) -->
184
+ <div id="existingCategoryBasicInfoContainer" class="hidden space-y-4">
185
+ <h2 onclick="toggleSectionContent('existingCategoryBasicInformationContent', this.querySelector('.toggle-icon'))" class="text-xl font-semibold text-gray-900 flex items-center justify-between mb-4 cursor-pointer">
186
+ <span class="flex items-center">
187
+ <i class='bx bx-info-circle mr-2 text-blue-600'></i>
188
+ Basic Information (Read-only)
189
+ </span>
190
+ <i class='bx bx-chevron-down toggle-icon text-xl text-gray-500'></i>
191
+ </h2>
192
+ <div id="existingCategoryBasicInformationContent" class="grid grid-cols-1 md:grid-cols-2 gap-4 p-6 bg-white rounded-lg border border-gray-200 shadow-sm">
193
+ <div>
194
+ <label class="block text-sm font-medium text-gray-700 mb-1">Category Name</label>
195
+ <input type="text" name="name" readonly class="w-full px-3 py-1.5 border border-gray-300 rounded-lg bg-gray-100 cursor-not-allowed">
196
+ </div>
197
+ <div>
198
+ <label class="block text-sm font-medium text-gray-700 mb-1">Display Name</label>
199
+ <input type="text" name="displayName" readonly class="w-full px-3 py-1.5 border border-gray-300 rounded-lg bg-gray-100 cursor-not-allowed">
200
+ </div>
201
+ <div class="md:col-span-2">
202
+ <label class="block text-sm font-medium text-gray-700 mb-1">Description</label>
203
+ <textarea name="description" rows="3" readonly class="w-full px-3 py-1.5 border border-gray-300 rounded-lg bg-gray-100 cursor-not-allowed"></textarea>
204
+ </div>
205
+ <div class="md:col-span-2">
206
+ <label class="block text-sm font-medium text-gray-700 mb-1">Repository URL</label>
207
+ <input type="url" name="repository" readonly class="w-full px-3 py-1.5 border border-gray-300 rounded-lg bg-gray-100 cursor-not-allowed">
208
+ </div>
209
+ </div>
210
+ </div>
211
+
212
+ <!-- MCP Servers (Existing read-only, new ones editable) -->
213
+ <div id="existingCategoryMcpServersContainer" class="hidden space-y-4">
214
+ <div class="flex justify-between items-center mb-4">
215
+ <h2 class="text-xl font-semibold text-gray-900 flex items-center">
216
+ <i class='bx bx-server mr-2 text-blue-600'></i>
217
+ MCP Servers
218
+ </h2>
219
+ <button type="button" id="addServerToExistingCategoryBtn"
220
+ class="px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 flex items-center text-sm">
221
+ <i class='bx bx-plus mr-2'></i>
222
+ Add MCP Server
223
+ </button>
224
+ </div>
225
+ <div id="existingCategoryServersList" class="space-y-4">
226
+ <!-- Server configurations will be added here: existing ones read-only, new ones editable -->
227
+ </div>
228
+ </div>
229
+
230
+ <!-- Action Buttons -->
231
+ <div class="flex justify-end space-x-4 pt-6 border-t">
232
+ <button type="button" onclick="window.location.href='index.html'"
233
+ class="px-6 py-2.5 border border-gray-300 rounded-lg text-gray-600 hover:bg-gray-50">
234
+ Cancel
235
+ </button>
236
+ <button type="button" id="validateButtonExistingCategory"
237
+ class="px-6 py-2.5 bg-green-500 text-white rounded-lg hover:bg-green-600 flex items-center">
238
+ <i class='bx bx-check-shield mr-2'></i>
239
+ Validate
240
+ </button>
241
+ <button type="submit" id="publishButtonExistingCategory"
242
+ class="px-6 py-2.5 bg-blue-600 text-white rounded-lg hover:bg-blue-700 flex items-center">
243
+ <i class='bx bxs-cloud-upload mr-2'></i>
244
+ Publish
245
+ </button>
246
+ </div>
247
+
248
+ <!-- Validation Status Panel -->
249
+ <div id="validationStatusPanelExistingCategory" class="hidden p-6 bg-gray-50 rounded-lg border border-gray-200">
250
+ <h3 onclick="toggleSectionContent('validationStatusContentExistingCategoryTab', this.querySelector('.toggle-icon'))" class="cursor-pointer text-lg font-semibold text-gray-800 mb-3 flex items-center justify-between">
251
+ <span class="flex items-center">
252
+ <i class='bx bx-analyse mr-2 text-blue-600'></i>Validation Status
253
+ </span>
254
+ <i class='bx bx-chevron-down toggle-icon text-xl text-gray-500'></i>
255
+ </h3>
256
+ <div id="validationStatusContentExistingCategoryTab" class="text-sm text-gray-700 space-y-2">
257
+ <!-- Validation messages will be displayed here -->
258
+ </div>
259
+ </div>
260
+ </form>
261
+ </div>
262
+
263
+ <!-- JSON Editor Panel -->
264
+ <div id="panel-json-editor" class="hidden">
265
+ <h2 class="text-xl font-semibold text-gray-900 flex items-center mb-4">
266
+ <i class='bx bx-code-alt mr-2 text-blue-600'></i>
267
+ Edit Configuration as JSON
268
+ </h2>
269
+ <div class="relative">
270
+ <button type="button" onclick="copyJsonToClipboard()" title="Copy JSON to clipboard"
271
+ class="absolute top-2 right-2 z-10 px-3 py-1.5 text-xs bg-gray-200 hover:bg-gray-300 text-gray-700 rounded-md flex items-center">
272
+ <i class='bx bx-copy mr-1'></i> Copy
273
+ </button>
274
+ <textarea id="jsonEditorTextarea" rows="20"
275
+ class="w-full px-3 py-2 font-mono text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
276
+ placeholder="JSON configuration will appear here..."></textarea>
277
+ </div>
278
+ <div id="jsonEditorActionsContainer" class="flex justify-end space-x-4 pt-6 border-t mt-6">
279
+ <!-- "Apply JSON to Form" button removed -->
280
+ <button type="button" onclick="window.location.href='index.html'"
281
+ class="px-6 py-2.5 border border-gray-300 rounded-lg text-gray-600 hover:bg-gray-50">
282
+ Cancel
283
+ </button>
284
+ <button type="button" id="saveJsonButton"
285
+ class="px-6 py-2.5 bg-blue-600 text-white rounded-lg hover:bg-blue-700 flex items-center">
286
+ <i class='bx bxs-cloud-upload mr-2'></i>
287
+ Publish JSON
288
+ </button>
289
+ </div>
290
+ </div>
291
+ </div>
292
+
293
+ <script src="js/onboard/index.js" type="module"></script>
294
+ <!-- Highlight.js script can be removed if not using <pre><code> for JSON -->
295
+ </body>
296
+ </html>
@@ -0,0 +1,135 @@
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 System Settings</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/notifications.css">
14
+ <style>
15
+ .form-label {
16
+ font-weight: 600;
17
+ color: #374151; /* text-gray-700 */
18
+ }
19
+ .form-input {
20
+ border-color: #D1D5DB; /* border-gray-300 */
21
+ transition: all 0.15s ease-in-out;
22
+ }
23
+ .form-input:focus {
24
+ border-color: #3B82F6; /* focus:border-blue-500 */
25
+ box-shadow: 0 0 0 0.2rem rgba(59, 130, 246, 0.25); /* focus:ring-blue-200 focus:ring-opacity-50 */
26
+ }
27
+ .btn-primary {
28
+ background-color: #2563EB; /* bg-blue-600 */
29
+ border-color: #2563EB;
30
+ }
31
+ .btn-primary:hover {
32
+ background-color: #1D4ED8; /* hover:bg-blue-700 */
33
+ border-color: #1D4ED8;
34
+ }
35
+ .btn-secondary {
36
+ background-color: #6B7280; /* bg-gray-500 */
37
+ border-color: #6B7280;
38
+ color: white;
39
+ }
40
+ .btn-secondary:hover {
41
+ background-color: #4B5563; /* hover:bg-gray-600 */
42
+ border-color: #4B5563;
43
+ }
44
+ .toast-container {
45
+ z-index: 1090; /* Ensure toast is above other elements */
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body class="bg-gray-50 min-h-screen">
51
+ <div class="container mx-auto px-4 py-6">
52
+ <div class="flex items-center justify-between mb-8">
53
+ <h1 class="text-3xl font-bold text-gray-900 flex items-center">
54
+ <a href="index.html" class="flex items-center text-gray-900 hover:text-blue-600 transition-colors">
55
+ <i class='bx bx-left-arrow-alt mr-3 text-blue-600'></i>
56
+ System Settings
57
+ </a>
58
+ </h1>
59
+ </div>
60
+
61
+ <div class="bg-white rounded-xl shadow-sm border border-gray-100 p-6 lg:p-8">
62
+ <form id="settingsForm">
63
+ <!-- Paths Section -->
64
+ <h2 class="text-xl font-semibold text-gray-800 mb-3">Path Configurations</h2>
65
+ <fieldset class="border border-gray-300 p-4 rounded-md mb-6">
66
+ <!-- Python Environments Section -->
67
+ <div class="mb-4">
68
+ <h3 class="text-lg font-semibold text-gray-800 mb-2">Python Environments</h3>
69
+ <div id="pythonEnvsContainer" class="space-y-3 mb-3">
70
+ <!-- Python environments will be dynamically added here -->
71
+ <p class="text-gray-500" id="pythonEnvsLoadingMsg">Loading Python environments...</p>
72
+ </div>
73
+ <button type="button" id="addPythonEnvButton" class="btn btn-outline-primary btn-sm mb-4 flex items-center">
74
+ <i class='bx bx-plus mr-1'></i>Add Python Environment
75
+ </button>
76
+ </div>
77
+
78
+ <!-- Other path configurations -->
79
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
80
+ <div>
81
+ <label for="nodePath" class="form-label block mb-2">Node.js Path</label>
82
+ <input type="text" id="nodePath" name="nodePath" class="form-input form-control w-full px-3 py-2 rounded-md" placeholder="e.g., /usr/local/bin/node or C:/Program Files/nodejs/node.exe">
83
+ </div>
84
+ <div>
85
+ <label for="browserPath" class="form-label block mb-2">Browser Executable Path</label>
86
+ <input type="text" id="browserPath" name="browserPath" class="form-input form-control w-full px-3 py-2 rounded-md" placeholder="e.g., /usr/bin/google-chrome or C:/Program Files/Google/Chrome/Application/chrome.exe">
87
+ </div>
88
+ </div>
89
+ </fieldset>
90
+
91
+ <!-- User Configurations Section -->
92
+ <div class="flex items-center mb-3">
93
+ <h2 class="text-xl font-semibold text-gray-800 mr-2">User Configurations</h2>
94
+ <p class="text-sm text-gray-500 flex items-center">
95
+ <i class='bx bx-help-circle mr-1 text-gray-400'></i>
96
+ Stored and used for mcp server installation environments.
97
+ </p>
98
+ </div>
99
+ <fieldset class="border border-gray-300 p-4 rounded-md mb-6">
100
+ <div id="userConfigurationsContainer" class="space-y-3">
101
+ <!-- User configs will be dynamically added here -->
102
+ <p class="text-gray-500" id="userConfigLoadingMsg">Loading user configurations...</p>
103
+ </div>
104
+ <button type="button" id="addUserConfigButton" class="btn btn-outline-primary btn-sm mt-3 flex items-center">
105
+ <i class='bx bx-plus mr-1'></i>Add User Configuration
106
+ </button>
107
+ </fieldset>
108
+
109
+ <!-- System Environment Variables Section -->
110
+ <div class="mb-6">
111
+ <h2 class="text-xl font-semibold text-gray-800 mb-2 py-2">System Environment Variables</h2>
112
+ <div id="systemEnvironments" class="max-h-96 overflow-y-auto bg-white p-2 rounded-lg border border-gray-200">
113
+ <p class="text-gray-500">Loading environment variables...</p>
114
+ </div>
115
+ </div>
116
+
117
+ <div class="flex justify-end gap-4 mt-8">
118
+ <button type="button" id="cancelButton" class="btn btn-secondary px-6 py-2.5 rounded-md font-medium">Cancel</button>
119
+ <button type="submit" id="setupButton" class="btn btn-primary px-6 py-2.5 rounded-md font-medium flex items-center">
120
+ <i class='bx bx-save mr-2'></i>Save Settings
121
+ </button>
122
+ </div>
123
+ </form>
124
+ </div>
125
+ </div>
126
+
127
+ <!-- Toast Notification Container -->
128
+ <div class="toast-container position-fixed top-0 end-0 p-3">
129
+ <!-- Toasts will be appended here -->
130
+ </div>
131
+
132
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
133
+ <script src="js/settings.js" type="module"></script>
134
+ </body>
135
+ </html>