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.
- package/dist/cli/commands/install.js +1 -106
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/list.js +1 -90
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/pull.js +1 -16
- package/dist/cli/commands/pull.js.map +1 -0
- package/dist/cli/commands/serve.js +1 -33
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/uninstall.js +1 -46
- package/dist/cli/commands/uninstall.js.map +1 -0
- package/dist/cli/index.js +1 -65
- package/dist/cli/index.js.map +1 -0
- package/dist/core/installers/clients/BaseClientInstaller.js +1 -282
- package/dist/core/installers/clients/BaseClientInstaller.js.map +1 -0
- package/dist/core/installers/clients/ClientInstaller.js +1 -163
- package/dist/core/installers/clients/ClientInstaller.js.map +1 -0
- package/dist/core/installers/clients/ClientInstallerFactory.js +1 -36
- package/dist/core/installers/clients/ClientInstallerFactory.js.map +1 -0
- package/dist/core/installers/clients/ClineInstaller.js +1 -30
- package/dist/core/installers/clients/ClineInstaller.js.map +1 -0
- package/dist/core/installers/clients/ExtensionInstaller.js +1 -151
- package/dist/core/installers/clients/ExtensionInstaller.js.map +1 -0
- package/dist/core/installers/clients/GithubCopilotInstaller.js +1 -68
- package/dist/core/installers/clients/GithubCopilotInstaller.js.map +1 -0
- package/dist/core/installers/clients/MSRooCodeInstaller.js +1 -28
- package/dist/core/installers/clients/MSRooCodeInstaller.js.map +1 -0
- package/dist/core/installers/index.js +1 -8
- package/dist/core/installers/index.js.map +1 -0
- package/dist/core/installers/requirements/BaseInstaller.js +1 -56
- package/dist/core/installers/requirements/BaseInstaller.js.map +1 -0
- package/dist/core/installers/requirements/CommandInstaller.js +1 -213
- package/dist/core/installers/requirements/CommandInstaller.js.map +1 -0
- package/dist/core/installers/requirements/GeneralInstaller.js +1 -126
- package/dist/core/installers/requirements/GeneralInstaller.js.map +1 -0
- package/dist/core/installers/requirements/InstallerFactory.js +1 -99
- package/dist/core/installers/requirements/InstallerFactory.js.map +1 -0
- package/dist/core/installers/requirements/NpmInstaller.js +1 -235
- package/dist/core/installers/requirements/NpmInstaller.js.map +1 -0
- package/dist/core/installers/requirements/NugetInstaller.js +1 -188
- package/dist/core/installers/requirements/NugetInstaller.js.map +1 -0
- package/dist/core/installers/requirements/PipInstaller.js +1 -192
- package/dist/core/installers/requirements/PipInstaller.js.map +1 -0
- package/dist/core/installers/requirements/RequirementInstaller.js +1 -2
- package/dist/core/installers/requirements/RequirementInstaller.js.map +1 -0
- package/dist/core/loaders/ConfigurationLoader.js +1 -256
- package/dist/core/loaders/ConfigurationLoader.js.map +1 -0
- package/dist/core/loaders/ConfigurationProvider.js +1 -383
- package/dist/core/loaders/ConfigurationProvider.js.map +1 -0
- package/dist/core/loaders/InstallOperationManager.js +1 -310
- package/dist/core/loaders/InstallOperationManager.js.map +1 -0
- package/dist/core/loaders/ServerSchemaLoader.js +1 -108
- package/dist/core/loaders/ServerSchemaLoader.js.map +1 -0
- package/dist/core/loaders/ServerSchemaProvider.js +1 -89
- package/dist/core/loaders/ServerSchemaProvider.js.map +1 -0
- package/dist/core/loaders/SystemSettingsManager.js +1 -256
- package/dist/core/loaders/SystemSettingsManager.js.map +1 -0
- package/dist/core/metadatas/constants.js +1 -100
- package/dist/core/metadatas/constants.js.map +1 -0
- package/dist/core/metadatas/recordingConstants.js +1 -46
- package/dist/core/metadatas/recordingConstants.js.map +1 -0
- package/dist/core/metadatas/types.js +1 -15
- package/dist/core/metadatas/types.js.map +1 -0
- package/dist/core/onboard/FeedOnboardService.js +1 -422
- package/dist/core/onboard/FeedOnboardService.js.map +1 -0
- package/dist/core/onboard/OnboardProcessor.js +1 -333
- package/dist/core/onboard/OnboardProcessor.js.map +1 -0
- package/dist/core/onboard/OnboardStatus.js +1 -9
- package/dist/core/onboard/OnboardStatus.js.map +1 -0
- package/dist/core/onboard/OnboardStatusManager.js +1 -360
- package/dist/core/onboard/OnboardStatusManager.js.map +1 -0
- package/dist/core/validators/FeedValidator.js +1 -133
- package/dist/core/validators/FeedValidator.js.map +1 -0
- package/dist/core/validators/IServerValidator.js +1 -1
- package/dist/core/validators/IServerValidator.js.map +1 -0
- package/dist/core/validators/SSEServerValidator.js +1 -38
- package/dist/core/validators/SSEServerValidator.js.map +1 -0
- package/dist/core/validators/ServerValidatorFactory.js +1 -44
- package/dist/core/validators/ServerValidatorFactory.js.map +1 -0
- package/dist/core/validators/StdioServerValidator.js +1 -281
- package/dist/core/validators/StdioServerValidator.js.map +1 -0
- package/dist/index.js +1 -18
- package/dist/index.js.map +1 -0
- package/dist/services/InstallationService.js +1 -81
- package/dist/services/InstallationService.js.map +1 -0
- package/dist/services/MCPManager.js +1 -197
- package/dist/services/MCPManager.js.map +1 -0
- package/dist/services/RequirementService.js +1 -548
- package/dist/services/RequirementService.js.map +1 -0
- package/dist/services/ServerService.js +1 -127
- package/dist/services/ServerService.js.map +1 -0
- package/dist/services/TelemetryService.js +1 -53
- package/dist/services/TelemetryService.js.map +1 -0
- package/dist/utils/UpdateCheckTracker.js +1 -79
- package/dist/utils/UpdateCheckTracker.js.map +1 -0
- package/dist/utils/adoUtils.js +1 -254
- package/dist/utils/adoUtils.js.map +1 -0
- package/dist/utils/clientUtils.js +1 -65
- package/dist/utils/clientUtils.js.map +1 -0
- package/dist/utils/feedUtils.js +1 -28
- package/dist/utils/feedUtils.js.map +1 -0
- package/dist/utils/githubAuth.js +1 -177
- package/dist/utils/githubAuth.js.map +1 -0
- package/dist/utils/githubUtils.js +1 -125
- package/dist/utils/githubUtils.js.map +1 -0
- package/dist/utils/logger.js +1 -176
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/macroExpressionUtils.js +1 -93
- package/dist/utils/macroExpressionUtils.js.map +1 -0
- package/dist/utils/osUtils.js +1 -664
- package/dist/utils/osUtils.js.map +1 -0
- package/dist/utils/versionUtils.js +1 -101
- package/dist/utils/versionUtils.js.map +1 -0
- package/dist/web/contract/serverContract.js +1 -1
- package/dist/web/contract/serverContract.js.map +1 -0
- package/dist/web/public/js/api.js +2 -132
- package/dist/web/public/js/api.js.map +1 -0
- package/dist/web/public/js/detailsWidget.js +2 -264
- package/dist/web/public/js/detailsWidget.js.map +1 -0
- package/dist/web/public/js/flights/flights.js +2 -127
- package/dist/web/public/js/flights/flights.js.map +1 -0
- package/dist/web/public/js/modal/index.js +2 -52
- package/dist/web/public/js/modal/index.js.map +1 -0
- package/dist/web/public/js/modal/installModal.js +2 -162
- package/dist/web/public/js/modal/installModal.js.map +1 -0
- package/dist/web/public/js/modal/installation.js +2 -266
- package/dist/web/public/js/modal/installation.js.map +1 -0
- package/dist/web/public/js/modal/loadingModal.js +2 -182
- package/dist/web/public/js/modal/loadingModal.js.map +1 -0
- package/dist/web/public/js/modal/modalSetup.js +2 -595
- package/dist/web/public/js/modal/modalSetup.js.map +1 -0
- package/dist/web/public/js/modal/modalUtils.js +2 -37
- package/dist/web/public/js/modal/modalUtils.js.map +1 -0
- package/dist/web/public/js/modal/versionUtils.js +2 -20
- package/dist/web/public/js/modal/versionUtils.js.map +1 -0
- package/dist/web/public/js/modal.js +2 -42
- package/dist/web/public/js/modal.js.map +1 -0
- package/dist/web/public/js/notifications.js +2 -137
- package/dist/web/public/js/notifications.js.map +1 -0
- package/dist/web/public/js/onboard/formProcessor.js +2 -1037
- package/dist/web/public/js/onboard/formProcessor.js.map +1 -0
- package/dist/web/public/js/onboard/index.js +2 -374
- package/dist/web/public/js/onboard/index.js.map +1 -0
- package/dist/web/public/js/onboard/publishHandler.js +2 -172
- package/dist/web/public/js/onboard/publishHandler.js.map +1 -0
- package/dist/web/public/js/onboard/state.js +2 -76
- package/dist/web/public/js/onboard/state.js.map +1 -0
- package/dist/web/public/js/onboard/templates.js +2 -342
- package/dist/web/public/js/onboard/templates.js.map +1 -0
- package/dist/web/public/js/onboard/uiHandlers.js +2 -1076
- package/dist/web/public/js/onboard/uiHandlers.js.map +1 -0
- package/dist/web/public/js/onboard/validationHandlers.js +2 -493
- package/dist/web/public/js/onboard/validationHandlers.js.map +1 -0
- package/dist/web/public/js/serverCategoryDetails.js +2 -364
- package/dist/web/public/js/serverCategoryDetails.js.map +1 -0
- package/dist/web/public/js/serverCategoryList.js +2 -241
- package/dist/web/public/js/serverCategoryList.js.map +1 -0
- package/dist/web/public/js/settings.js +2 -314
- package/dist/web/public/js/settings.js.map +1 -0
- package/dist/web/server.js +1 -404
- package/dist/web/server.js.map +1 -0
- package/package.json +8 -2
- package/.github/ISSUE_TEMPLATE/JitAccess.yml +0 -28
- package/.github/acl/access.yml +0 -20
- package/.github/compliance/inventory.yml +0 -5
- package/.github/policies/jit.yml +0 -19
- package/.github/workflows/build.yml +0 -28
- package/.roo/rules-code/rules.md +0 -88
- package/dist/cli/commands/start.d.ts +0 -2
- package/dist/cli/commands/start.js +0 -32
- package/dist/cli/commands/sync.d.ts +0 -2
- package/dist/cli/commands/sync.js +0 -17
- package/dist/core/ConfigurationLoader.d.ts +0 -32
- package/dist/core/ConfigurationLoader.js +0 -236
- package/dist/core/ConfigurationProvider.d.ts +0 -35
- package/dist/core/ConfigurationProvider.js +0 -375
- package/dist/core/InstallationService.d.ts +0 -50
- package/dist/core/InstallationService.js +0 -350
- package/dist/core/MCPManager.d.ts +0 -28
- package/dist/core/MCPManager.js +0 -188
- package/dist/core/RequirementService.d.ts +0 -40
- package/dist/core/RequirementService.js +0 -110
- package/dist/core/ServerSchemaLoader.d.ts +0 -11
- package/dist/core/ServerSchemaLoader.js +0 -43
- package/dist/core/ServerSchemaProvider.d.ts +0 -17
- package/dist/core/ServerSchemaProvider.js +0 -120
- package/dist/core/constants.d.ts +0 -47
- package/dist/core/constants.js +0 -94
- package/dist/core/installers/BaseInstaller.d.ts +0 -74
- package/dist/core/installers/BaseInstaller.js +0 -253
- package/dist/core/installers/ClientInstaller.d.ts +0 -23
- package/dist/core/installers/ClientInstaller.js +0 -564
- package/dist/core/installers/CommandInstaller.d.ts +0 -37
- package/dist/core/installers/CommandInstaller.js +0 -173
- package/dist/core/installers/GeneralInstaller.d.ts +0 -33
- package/dist/core/installers/GeneralInstaller.js +0 -85
- package/dist/core/installers/InstallerFactory.d.ts +0 -54
- package/dist/core/installers/InstallerFactory.js +0 -97
- package/dist/core/installers/NpmInstaller.d.ts +0 -26
- package/dist/core/installers/NpmInstaller.js +0 -127
- package/dist/core/installers/PipInstaller.d.ts +0 -28
- package/dist/core/installers/PipInstaller.js +0 -127
- package/dist/core/installers/RequirementInstaller.d.ts +0 -33
- package/dist/core/installers/RequirementInstaller.js +0 -3
- package/dist/core/types.d.ts +0 -166
- package/dist/core/types.js +0 -16
- package/dist/services/InstallRequestValidator.d.ts +0 -21
- package/dist/services/InstallRequestValidator.js +0 -99
- package/dist/web/public/js/modal/installHandler.js +0 -227
- package/dist/web/public/js/modal/loadingUI.js +0 -74
- package/dist/web/public/js/modal/messageQueue.js +0 -112
- package/dist/web/public/js/modal/modalUI.js +0 -214
- package/dist/web/public/js/modal/version.js +0 -20
- package/dist/web/public/js/onboard/ONBOARDING_PAGE_DESIGN.md +0 -370
- package/docs/ONBOARDING_PAGE_DESIGN.md +0 -260
- package/docs/Telemetry.md +0 -136
- package/memory-bank/activeContext.md +0 -26
- package/memory-bank/decisionLog.md +0 -91
- package/memory-bank/productContext.md +0 -41
- package/memory-bank/progress.md +0 -35
- package/memory-bank/systemPatterns.md +0 -10
- package/src/cli/commands/install.ts +0 -139
- package/src/cli/commands/list.ts +0 -113
- package/src/cli/commands/pull.ts +0 -16
- package/src/cli/commands/serve.ts +0 -39
- package/src/cli/commands/uninstall.ts +0 -64
- package/src/cli/index.ts +0 -82
- package/src/core/installers/clients/BaseClientInstaller.ts +0 -341
- package/src/core/installers/clients/ClientInstaller.ts +0 -222
- package/src/core/installers/clients/ClientInstallerFactory.ts +0 -43
- package/src/core/installers/clients/ClineInstaller.ts +0 -35
- package/src/core/installers/clients/ExtensionInstaller.ts +0 -165
- package/src/core/installers/clients/GithubCopilotInstaller.ts +0 -79
- package/src/core/installers/clients/MSRooCodeInstaller.ts +0 -32
- package/src/core/installers/index.ts +0 -11
- package/src/core/installers/requirements/BaseInstaller.ts +0 -85
- package/src/core/installers/requirements/CommandInstaller.ts +0 -231
- package/src/core/installers/requirements/GeneralInstaller.ts +0 -133
- package/src/core/installers/requirements/InstallerFactory.ts +0 -114
- package/src/core/installers/requirements/NpmInstaller.ts +0 -271
- package/src/core/installers/requirements/NugetInstaller.ts +0 -203
- package/src/core/installers/requirements/PipInstaller.ts +0 -207
- package/src/core/installers/requirements/RequirementInstaller.ts +0 -42
- package/src/core/loaders/ConfigurationLoader.ts +0 -298
- package/src/core/loaders/ConfigurationProvider.ts +0 -462
- package/src/core/loaders/InstallOperationManager.ts +0 -367
- package/src/core/loaders/ServerSchemaLoader.ts +0 -117
- package/src/core/loaders/ServerSchemaProvider.ts +0 -99
- package/src/core/loaders/SystemSettingsManager.ts +0 -278
- package/src/core/metadatas/constants.ts +0 -122
- package/src/core/metadatas/recordingConstants.ts +0 -65
- package/src/core/metadatas/types.ts +0 -202
- package/src/core/onboard/FeedOnboardService.ts +0 -501
- package/src/core/onboard/OnboardProcessor.ts +0 -356
- package/src/core/onboard/OnboardStatus.ts +0 -60
- package/src/core/onboard/OnboardStatusManager.ts +0 -416
- package/src/core/validators/FeedValidator.ts +0 -135
- package/src/core/validators/IServerValidator.ts +0 -21
- package/src/core/validators/SSEServerValidator.ts +0 -43
- package/src/core/validators/ServerValidatorFactory.ts +0 -51
- package/src/core/validators/StdioServerValidator.ts +0 -313
- package/src/index.ts +0 -44
- package/src/services/InstallationService.ts +0 -102
- package/src/services/MCPManager.ts +0 -249
- package/src/services/RequirementService.ts +0 -627
- package/src/services/ServerService.ts +0 -161
- package/src/services/TelemetryService.ts +0 -59
- package/src/utils/UpdateCheckTracker.ts +0 -86
- package/src/utils/adoUtils.ts +0 -293
- package/src/utils/clientUtils.ts +0 -72
- package/src/utils/feedUtils.ts +0 -31
- package/src/utils/githubAuth.ts +0 -212
- package/src/utils/githubUtils.ts +0 -164
- package/src/utils/logger.ts +0 -195
- package/src/utils/macroExpressionUtils.ts +0 -104
- package/src/utils/osUtils.ts +0 -700
- package/src/utils/versionUtils.ts +0 -114
- package/src/web/contract/serverContract.ts +0 -74
- package/src/web/public/css/detailsWidget.css +0 -235
- package/src/web/public/css/modal.css +0 -757
- package/src/web/public/css/notifications.css +0 -101
- package/src/web/public/css/onboard.css +0 -107
- package/src/web/public/css/serverCategoryList.css +0 -120
- package/src/web/public/css/serverDetails.css +0 -139
- package/src/web/public/index.html +0 -359
- package/src/web/public/js/api.js +0 -132
- package/src/web/public/js/detailsWidget.js +0 -264
- package/src/web/public/js/flights/flights.js +0 -127
- package/src/web/public/js/modal/index.js +0 -52
- package/src/web/public/js/modal/installModal.js +0 -162
- package/src/web/public/js/modal/installation.js +0 -266
- package/src/web/public/js/modal/loadingModal.js +0 -182
- package/src/web/public/js/modal/modalSetup.js +0 -595
- package/src/web/public/js/modal/modalUtils.js +0 -37
- package/src/web/public/js/modal/versionUtils.js +0 -20
- package/src/web/public/js/modal.js +0 -42
- package/src/web/public/js/notifications.js +0 -137
- package/src/web/public/js/onboard/formProcessor.js +0 -1037
- package/src/web/public/js/onboard/index.js +0 -374
- package/src/web/public/js/onboard/publishHandler.js +0 -172
- package/src/web/public/js/onboard/state.js +0 -76
- package/src/web/public/js/onboard/templates.js +0 -342
- package/src/web/public/js/onboard/uiHandlers.js +0 -1076
- package/src/web/public/js/onboard/validationHandlers.js +0 -493
- package/src/web/public/js/serverCategoryDetails.js +0 -364
- package/src/web/public/js/serverCategoryList.js +0 -241
- package/src/web/public/js/settings.js +0 -314
- package/src/web/public/modal.html +0 -84
- package/src/web/public/onboard.html +0 -296
- package/src/web/public/settings.html +0 -135
- package/src/web/public/styles.css +0 -277
- package/src/web/server.ts +0 -478
- package/tsconfig.json +0 -18
- package/wiki/Installation.md +0 -3
- package/wiki/Publish.md +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["OSType","os","exec","util","Logger","fs","path","execSync","fsSync","execAsync","promisify","getOSType","platform","debug","action","Windows","MacOS","Linux","error","Error","async","installCLI","tool","osType","refreshPathEnv","Promise","resolve","setTimeout","stdout","winPath","process","env","PATH","trim","commonPaths","homedir","currentPaths","split","newPaths","Set","join","isCommandAvailable","command","systemVSCodePath","HOME","userVSCodePath","isToolInstalled","retries","installed","openBrowser","url","getPythonPackagePath","pythonExecutablePath","dir","dirname","endsWith","pythonDir","readdirSync","find","e","startsWith","includes","parts","version","localAppData","LOCALAPPDATA","sitePkgsPath","APPDATA","venvRoot","libDir","existsSync","pythonDirs","filter","d","length","toLowerCase","getSystemPythonPackageDirectory","pythonPath","packagePath","getSystemPythonExecutablePath","getBrowserPath","edgePaths","chromePaths","edgePath","chromePath","safariPath","getGlobalNPMPackagePath","nvmHome","NVM_HOME","nodeVersion","toString","nvmNodePath","accessSync","getNpmExecutablePath","replace","ensureDotnetToolsInPath","dotnetToolsPath","getDotnetGlobalToolsPath","exportLine","shellConfigFiles","shell","SHELL","push","updatedAnyFile","configFile","content","promises","readFile","pathRegex","RegExp","homePathRegex","test","appendFile","log","writeFile","message","String","homeDir"],"sources":["../../src/utils/osUtils.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,102 +1,2 @@
|
|
|
1
|
-
import fs from
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
import axios from 'axios';
|
|
5
|
-
import { Logger } from './logger.js'; // Assuming logger.js is in the same directory
|
|
6
|
-
// ANSI color codes
|
|
7
|
-
const COLORS = {
|
|
8
|
-
reset: '\x1b[0m',
|
|
9
|
-
yellow: '\x1b[33m'
|
|
10
|
-
};
|
|
11
|
-
const PACKAGE_NAME = 'imcp'; // Default package name
|
|
12
|
-
export function getPackageVersion() {
|
|
13
|
-
try {
|
|
14
|
-
// First try npm environment variable (available during npm scripts)
|
|
15
|
-
if (process.env.npm_package_version) {
|
|
16
|
-
return { packageName: PACKAGE_NAME, packageVersion: process.env.npm_package_version };
|
|
17
|
-
}
|
|
18
|
-
// Fall back to reading package.json
|
|
19
|
-
// Get directory name of current module
|
|
20
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
21
|
-
// Traverse up to find package.json (max 3 levels up)
|
|
22
|
-
let currentDir = __dirname;
|
|
23
|
-
for (let i = 0; i < 3; i++) {
|
|
24
|
-
const packagePath = path.join(currentDir, 'package.json');
|
|
25
|
-
if (fs.existsSync(packagePath)) {
|
|
26
|
-
const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8'));
|
|
27
|
-
return { packageName: PACKAGE_NAME, packageVersion: packageJson.version };
|
|
28
|
-
}
|
|
29
|
-
currentDir = path.join(currentDir, '..');
|
|
30
|
-
}
|
|
31
|
-
return { packageName: PACKAGE_NAME, packageVersion: 'unknown' };
|
|
32
|
-
}
|
|
33
|
-
catch (error) {
|
|
34
|
-
console.error('Failed to get package version:', error);
|
|
35
|
-
return { packageName: PACKAGE_NAME, packageVersion: 'unknown' };
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Utility functions for version comparison and management
|
|
40
|
-
*/
|
|
41
|
-
/**
|
|
42
|
-
* Compare two semantic version strings
|
|
43
|
-
* @param v1 First version
|
|
44
|
-
* @param v2 Second version
|
|
45
|
-
* @returns -1 if v1 < v2, 0 if v1 = v2, 1 if v1 > v2
|
|
46
|
-
* (or more specifically, a negative number if v1 < v2,
|
|
47
|
-
* a positive number if v1 > v2, 0 if equal)
|
|
48
|
-
*/
|
|
49
|
-
export function compareVersions(v1, v2) {
|
|
50
|
-
const v1Parts = v1.split('.').map(Number);
|
|
51
|
-
const v2Parts = v2.split('.').map(Number);
|
|
52
|
-
for (let i = 0; i < Math.max(v1Parts.length, v2Parts.length); i++) {
|
|
53
|
-
const v1Part = i < v1Parts.length ? v1Parts[i] : 0;
|
|
54
|
-
const v2Part = i < v2Parts.length ? v2Parts[i] : 0;
|
|
55
|
-
if (v1Part !== v2Part) {
|
|
56
|
-
// This returns the actual difference, which is:
|
|
57
|
-
// negative if v1Part < v2Part, positive if v1Part > v2Part
|
|
58
|
-
return v1Part - v2Part;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
return 0;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Check if there's a newer version of the package available
|
|
65
|
-
*/
|
|
66
|
-
export async function checkForUpdates() {
|
|
67
|
-
Logger.debug(`Checking for updates...`);
|
|
68
|
-
try {
|
|
69
|
-
const version = await getAppVersion();
|
|
70
|
-
if (version.availableUpdate) {
|
|
71
|
-
console.log(`${COLORS.yellow}Update available for ${version.name}: ${version.version} → ${version.availableUpdate.latestVersion}${COLORS.reset}`);
|
|
72
|
-
console.log(`${COLORS.yellow}Relaunch with \`npx -y ${version.name}@latest serve\` or update package with \`npm install -g ${version.name}@latest\`${COLORS.reset}`);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
catch (error) {
|
|
76
|
-
// Log the npm error
|
|
77
|
-
Logger.debug(`Failed to check npm registry: ${error instanceof Error ? error.message : String(error)}`);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Retrieves the application version and information about available updates.
|
|
82
|
-
* @returns A promise that resolves to an object containing the current packageVersion and any availableUpdates.
|
|
83
|
-
*/
|
|
84
|
-
export async function getAppVersion() {
|
|
85
|
-
let availableUpdate = undefined;
|
|
86
|
-
const { packageName, packageVersion } = getPackageVersion();
|
|
87
|
-
// Check for updates from npm registry
|
|
88
|
-
try {
|
|
89
|
-
const npmResponse = await axios.get(`https://registry.npmjs.org/${packageName}`);
|
|
90
|
-
if (npmResponse.data && npmResponse.data['dist-tags'] && npmResponse.data['dist-tags'].latest) {
|
|
91
|
-
const latestVersion = npmResponse.data['dist-tags'].latest;
|
|
92
|
-
if (compareVersions(latestVersion, packageVersion) > 0) {
|
|
93
|
-
availableUpdate = { latestVersion, message: `New version (${latestVersion}) is available. Relaunch with \`npx -y ${packageName}@latest serve\`` };
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
catch (npmError) {
|
|
98
|
-
Logger.debug(`Failed to fetch latest version from npm for ${packageName}: ${npmError instanceof Error ? npmError.message : String(npmError)}`);
|
|
99
|
-
}
|
|
100
|
-
return { name: packageName, version: packageVersion, availableUpdate };
|
|
101
|
-
}
|
|
1
|
+
import fs from"fs";import path from"path";import{fileURLToPath}from"url";import axios from"axios";import{Logger}from"./logger.js";const COLORS={reset:"[0m",yellow:"[33m"},PACKAGE_NAME="imcp";export function getPackageVersion(){try{if(process.env.npm_package_version)return{packageName:"imcp",packageVersion:process.env.npm_package_version};let e=path.dirname(fileURLToPath(import.meta.url));for(let a=0;a<3;a++){const a=path.join(e,"package.json");if(fs.existsSync(a))return{packageName:"imcp",packageVersion:JSON.parse(fs.readFileSync(a,"utf8")).version};e=path.join(e,"..")}return{packageName:"imcp",packageVersion:"unknown"}}catch(e){return{packageName:"imcp",packageVersion:"unknown"}}}export function compareVersions(e,a){const t=e.split(".").map(Number),r=a.split(".").map(Number);for(let e=0;e<Math.max(t.length,r.length);e++){const a=e<t.length?t[e]:0,o=e<r.length?r[e]:0;if(a!==o)return a-o}return 0}export async function checkForUpdates(){Logger.debug("Checking for updates...");try{(await getAppVersion()).availableUpdate}catch(e){Logger.debug(`Failed to check npm registry: ${e instanceof Error?e.message:String(e)}`)}}export async function getAppVersion(){let e;const{packageName:a,packageVersion:t}=getPackageVersion();try{const r=await axios.get(`https://registry.npmjs.org/${a}`);if(r.data&&r.data["dist-tags"]&&r.data["dist-tags"].latest){const o=r.data["dist-tags"].latest;compareVersions(o,t)>0&&(e={latestVersion:o,message:`New version (${o}) is available. Relaunch with \`npx -y ${a}@latest serve\``})}}catch(e){Logger.debug(`Failed to fetch latest version from npm for ${a}: ${e instanceof Error?e.message:String(e)}`)}return{name:a,version:t,availableUpdate:e}}
|
|
102
2
|
//# sourceMappingURL=versionUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["fs","path","fileURLToPath","axios","Logger","COLORS","reset","yellow","PACKAGE_NAME","getPackageVersion","process","env","npm_package_version","packageName","packageVersion","currentDir","dirname","url","i","packagePath","join","existsSync","JSON","parse","readFileSync","version","error","compareVersions","v1","v2","v1Parts","split","map","Number","v2Parts","Math","max","length","v1Part","v2Part","async","checkForUpdates","debug","getAppVersion","availableUpdate","Error","message","String","npmResponse","get","data","latest","latestVersion","npmError","name"],"sources":["../../src/utils/versionUtils.ts"],"mappings":"OAAOA,OAAQ,YACRC,SAAU,cACRC,kBAAqB,aACvBC,UAAW,eACTC,WAAc,cAGvB,MAAMC,OAAS,CACbC,MAAO,OACPC,OAAQ,SAGJC,aAAe,cAEf,SAAUC,oBACd,IAEE,GAAIC,QAAQC,IAAIC,oBACd,MAAO,CAAEC,YANM,OAMqBC,eAAgBJ,QAAQC,IAAIC,qBAQlE,IAAIG,EAHcd,KAAKe,QAAQd,0BAA0Be,MAIzD,IAAK,IAAIC,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAMC,EAAclB,KAAKmB,KAAKL,EAAY,gBAC1C,GAAIf,GAAGqB,WAAWF,GAEhB,MAAO,CAAEN,YAnBI,OAmBuBC,eADhBQ,KAAKC,MAAMvB,GAAGwB,aAAaL,EAAa,SACIM,SAElEV,EAAad,KAAKmB,KAAKL,EAAY,KACrC,CAEA,MAAO,CAAEF,YAxBQ,OAwBmBC,eAAgB,UACtD,CAAE,MAAOY,GAEP,MAAO,CAAEb,YA3BQ,OA2BmBC,eAAgB,UACtD,CACF,QAcM,SAAUa,gBAAgBC,EAAYC,GAC1C,MAAMC,EAAUF,EAAGG,MAAM,KAAKC,IAAIC,QAC5BC,EAAUL,EAAGE,MAAM,KAAKC,IAAIC,QAElC,IAAK,IAAIf,EAAI,EAAGA,EAAIiB,KAAKC,IAAIN,EAAQO,OAAQH,EAAQG,QAASnB,IAAK,CACjE,MAAMoB,EAASpB,EAAIY,EAAQO,OAASP,EAAQZ,GAAK,EAC3CqB,EAASrB,EAAIgB,EAAQG,OAASH,EAAQhB,GAAK,EAEjD,GAAIoB,IAAWC,EAGb,OAAOD,EAASC,CAEpB,CAEA,OAAO,CACT,QAKOC,eAAeC,kBACpBrC,OAAOsC,MAAM,2BACb,WACwBC,iBACVC,eAKd,CAAE,MAAOlB,GAEPtB,OAAOsC,MAAM,iCAAiChB,aAAiBmB,MAAQnB,EAAMoB,QAAUC,OAAOrB,KAChG,CACF,QAMOc,eAAeG,gBACpB,IAAIC,EAEJ,MAAM/B,YAAEA,EAAWC,eAAEA,GAAmBL,oBAExC,IACE,MAAMuC,QAAoB7C,MAAM8C,IAAI,8BAA8BpC,KAClE,GAAImC,EAAYE,MAAQF,EAAYE,KAAK,cAAgBF,EAAYE,KAAK,aAAaC,OAAQ,CAC7F,MAAMC,EAAgBJ,EAAYE,KAAK,aAAaC,OAChDxB,gBAAgByB,EAAetC,GAAkB,IACnD8B,EAAkB,CAAEQ,gBAAeN,QAAS,gBAAgBM,2CAAuDvC,oBAEvH,CACF,CAAE,MAAOwC,GACPjD,OAAOsC,MAAM,+CAA+C7B,MAAgBwC,aAAoBR,MAAQQ,EAASP,QAAUC,OAAOM,KACpI,CAEA,MAAO,CAAEC,KAAMzC,EAAaY,QAASX,EAAgB8B,kBACvD","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export
|
|
1
|
+
export{};
|
|
2
2
|
//# sourceMappingURL=serverContract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":[],"mappings":"","ignoreList":[]}
|
|
@@ -1,132 +1,2 @@
|
|
|
1
|
-
import { renderServerCategoryList }
|
|
2
|
-
|
|
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
|
-
};
|
|
1
|
+
import{renderServerCategoryList}from"./serverCategoryList.js";import{showToast}from"./notifications.js";let allServerCategoriesData=[];async function fetchServerCategories(){try{const e=await fetch("/api/categories");if(!e.ok)throw new Error(`HTTP error! status: ${e.status}`);const t=await e.json();if(!t.success||!t.data)throw new Error(`API Error fetching servers: ${t.error||"Invalid data format"}`);allServerCategoriesData=window.allServerCategoriesData=t.data,renderServerCategoryList(allServerCategoriesData);const r=document.getElementById("searchBox").value.toLowerCase();if(r){const e=allServerCategoriesData.filter((e=>(e.displayName||e.name).toLowerCase().includes(r)||(e.description||"").toLowerCase().includes(r)));renderServerCategoryList(e)}}catch(e){document.getElementById("serverCategoryList").innerHTML='<p class="text-red-600">Error loading servers. Please check console and try again.</p>',document.getElementById("serverCategoryDetails").innerHTML=""}}async function handleInstallServer(e,t,r,a,o={}){e.preventDefault();const s=o.targets||[...document.querySelectorAll('input[name="targets"]:checked')].map((e=>e.value));if(0===s.length)return void showToast("Please select at least one target","error");const n=e.target,i=new FormData(n),l={};i.forEach(((e,t)=>{!t.startsWith("targets")&&e&&(l[t]=e)}));try{const e={};e[r]={env:l,targetClients:s};const a=await fetch(`/api/categories/${t}/install`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverList:e})});if(!a.ok){const e=await a.text();throw new Error(`Installation failed: ${e||a.statusText}`)}showToast('MCP server "'+r+'" for '+t+" installation initiated successfully!","success"),window.closeModal(),fetchServerCategories(),window.showServerDetails(t)}catch(e){showToast("Error installing MCP server: "+e.message+". Please check console.","error")}}async function uninstallTool(e){const t=document.querySelector("#serverCategoryDetails h3")?.textContent;if(t){if(await showConfirm(`Do you want to uninstall tool '${e}' from ${t}?`))try{const r=await fetch(`/api/categories/${t}/uninstall-tool`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({toolName:e})});if(!r.ok){const e=await r.text();throw new Error(`Uninstall failed: ${e||r.statusText}`)}showToast(`Tool '${e}' uninstall initiated successfully!`,"success"),fetchServerCategories(),window.showServerDetails(t)}catch(e){showToast(`Error uninstalling tool: ${e.message}`,"error")}}else showToast("No server selected.","error")}window.allServerCategoriesData=allServerCategoriesData;export{allServerCategoriesData,fetchServerCategories,handleInstallServer,uninstallTool};
|
|
2
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["renderServerCategoryList"],"sources":["0"],"sourcesContent":["import { renderServerCategoryList } from './serverCategoryList.js';\r\nimport { showToast } from './notifications.js';\r\n\r\n// Global store for server data\r\nlet allServerCategoriesData = [];\r\n// Make it available globally for legacy code\r\nwindow.allServerCategoriesData = allServerCategoriesData;\r\n\r\n// Fetch and display servers\r\nasync function fetchServerCategories() {\r\n try {\r\n // Fetch all servers (without filters)\r\n const response = await fetch('/api/categories');\r\n if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\r\n const responseData = await response.json();\r\n if (!responseData.success || !responseData.data) {\r\n throw new Error(`API Error fetching servers: ${responseData.error || 'Invalid data format'}`);\r\n }\r\n allServerCategoriesData = window.allServerCategoriesData = responseData.data; // Update both local and global references\r\n\r\n // Use the renderServerCategoryList function to display servers\r\n renderServerCategoryList(allServerCategoriesData);\r\n\r\n // Check if search is active\r\n const searchTerm = document.getElementById('searchBox').value.toLowerCase();\r\n if (searchTerm) {\r\n const filteredServerCategories = allServerCategoriesData.filter(server =>\r\n (server.displayName || server.name).toLowerCase().includes(searchTerm) ||\r\n (server.description || '').toLowerCase().includes(searchTerm)\r\n );\r\n renderServerCategoryList(filteredServerCategories);\r\n }\r\n } catch (error) {\r\n console.error('Error fetching servers:', error);\r\n document.getElementById('serverCategoryList').innerHTML =\r\n '<p class=\"text-red-600\">Error loading servers. Please check console and try again.</p>';\r\n document.getElementById('serverCategoryDetails').innerHTML = ''; // Clear details on error\r\n }\r\n}\r\n\r\n// Handle MCP tool installation\r\nasync function handleInstallServer(event, categoryName, serverName, callback, options = {}) {\r\n event.preventDefault(); // Prevent page reload\r\n console.log(\"Handling install for:\", categoryName, serverName);\r\n\r\n // Get selected targets from the form if not provided in options\r\n const selectedTargets = options.targets || [...document.querySelectorAll('input[name=\"targets\"]:checked')]\r\n .map(cb => cb.value);\r\n\r\n if (selectedTargets.length === 0) {\r\n showToast('Please select at least one target', 'error');\r\n return;\r\n }\r\n\r\n // Get environment variables from the form\r\n const form = event.target;\r\n const formData = new FormData(form);\r\n const envValues = {};\r\n formData.forEach((value, key) => {\r\n if (!key.startsWith('targets') && value) { // Skip target checkboxes\r\n envValues[key] = value;\r\n }\r\n });\r\n\r\n try {\r\n const serverList = {};\r\n serverList[serverName] = {\r\n env: envValues,\r\n targetClients: selectedTargets\r\n }; // Use serverName as key\r\n const response = await fetch(`/api/categories/${categoryName}/install`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ serverList: serverList })\r\n });\r\n\r\n if (!response.ok) {\r\n const errorData = await response.text();\r\n throw new Error(`Installation failed: ${errorData || response.statusText}`);\r\n }\r\n\r\n showToast('MCP server \"' + serverName + '\" for ' + categoryName + ' installation initiated successfully!', 'success');\r\n window.closeModal();\r\n fetchServerCategories(); // Refresh the main server list\r\n window.showServerDetails(categoryName); // Refresh the details pane\r\n\r\n } catch (error) {\r\n console.error('Error installing MCP server:', error);\r\n showToast('Error installing MCP server: ' + error.message + '. Please check console.', 'error');\r\n }\r\n}\r\n\r\n\r\nasync function uninstallTool(name) {\r\n const serverTitle = document.querySelector('#serverCategoryDetails h3')?.textContent;\r\n if (!serverTitle) {\r\n showToast('No server selected.', 'error');\r\n return;\r\n }\r\n\r\n const uninstallConfirmed = await showConfirm(`Do you want to uninstall tool '${name}' from ${serverTitle}?`);\r\n if (!uninstallConfirmed) {\r\n return;\r\n }\r\n\r\n try {\r\n const response = await fetch(`/api/categories/${serverTitle}/uninstall-tool`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ toolName: name })\r\n });\r\n\r\n if (!response.ok) {\r\n const errorData = await response.text();\r\n throw new Error(`Uninstall failed: ${errorData || response.statusText}`);\r\n }\r\n\r\n showToast(`Tool '${name}' uninstall initiated successfully!`, 'success');\r\n fetchServerCategories();\r\n window.showServerDetails(serverTitle);\r\n } catch (error) {\r\n console.error('Error uninstalling tool:', error);\r\n showToast(`Error uninstalling tool: ${error.message}`, 'error');\r\n }\r\n}\r\n\r\nexport {\r\n allServerCategoriesData,\r\n fetchServerCategories,\r\n handleInstallServer,\r\n uninstallTool\r\n};"],"mappings":"OAASA,6BAAgC,iC","ignoreList":[]}
|
|
@@ -1,264 +1,2 @@
|
|
|
1
|
-
export class DetailsWidget {
|
|
2
|
-
|
|
3
|
-
this.container = container;
|
|
4
|
-
this.isExpanded = false;
|
|
5
|
-
this.expandedTool = null;
|
|
6
|
-
this.init();
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
init() {
|
|
10
|
-
// Create and append stylesheet
|
|
11
|
-
const link = document.createElement('link');
|
|
12
|
-
link.rel = 'stylesheet';
|
|
13
|
-
link.href = '/css/detailsWidget.css';
|
|
14
|
-
document.head.appendChild(link);
|
|
15
|
-
// Create wrapper to maintain proper width alignment
|
|
16
|
-
this.containerWrapper = document.createElement('div');
|
|
17
|
-
this.containerWrapper.className = 'details-widget-container';
|
|
18
|
-
this.containerWrapper.style.width = '100%';
|
|
19
|
-
this.containerWrapper.style.boxSizing = 'border-box';
|
|
20
|
-
this.containerWrapper.style.maxWidth = '100%';
|
|
21
|
-
this.containerWrapper.style.overflow = 'hidden';
|
|
22
|
-
|
|
23
|
-
// Create the widget element
|
|
24
|
-
this.widgetElement = document.createElement('div');
|
|
25
|
-
this.widgetElement.className = 'details-widget';
|
|
26
|
-
this.widgetElement.style.width = '100%';
|
|
27
|
-
this.widgetElement.style.boxSizing = 'border-box';
|
|
28
|
-
this.widgetElement.style.maxWidth = '100%';
|
|
29
|
-
|
|
30
|
-
// Create the content element
|
|
31
|
-
this.contentElement = document.createElement('div');
|
|
32
|
-
this.contentElement.className = 'details-widget-content';
|
|
33
|
-
this.contentElement.style.width = '100%';
|
|
34
|
-
this.contentElement.style.boxSizing = 'border-box';
|
|
35
|
-
|
|
36
|
-
// Build the DOM structure
|
|
37
|
-
this.widgetElement.appendChild(this.contentElement);
|
|
38
|
-
this.containerWrapper.appendChild(this.widgetElement);
|
|
39
|
-
|
|
40
|
-
// Insert after the server item while maintaining proper structure
|
|
41
|
-
this.container.after(this.containerWrapper);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
setContent(content) {
|
|
45
|
-
if (typeof content === 'string') {
|
|
46
|
-
this.contentElement.innerHTML = `
|
|
47
|
-
<div class="description-text">
|
|
48
|
-
${content || 'No description available.'}
|
|
49
|
-
</div>
|
|
50
|
-
`;
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Handle direct schema object or wrapped schema object
|
|
55
|
-
if (typeof content === 'object') {
|
|
56
|
-
const schemaData = content.schema || content; // Handle both {schema: data} and direct data
|
|
57
|
-
this.renderToolsList(schemaData);
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
this.contentElement.innerHTML = '<p>Invalid content format</p>';
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// Maintain compatibility with old toggle behavior
|
|
65
|
-
toggle() {
|
|
66
|
-
if (this.isExpanded) {
|
|
67
|
-
this.collapse();
|
|
68
|
-
} else {
|
|
69
|
-
this.expand();
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
expand() {
|
|
74
|
-
this.isExpanded = true;
|
|
75
|
-
this.widgetElement.classList.add('expanded');
|
|
76
|
-
|
|
77
|
-
// Ensure proper dimensions based on container
|
|
78
|
-
const containerWidth = this.container.offsetWidth;
|
|
79
|
-
this.containerWrapper.style.width = `${containerWidth}px`;
|
|
80
|
-
this.containerWrapper.style.maxWidth = '100%';
|
|
81
|
-
this.containerWrapper.style.display = 'block';
|
|
82
|
-
|
|
83
|
-
// Add expanded state to container
|
|
84
|
-
if (this.container) {
|
|
85
|
-
this.container.classList.add('expanded');
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
collapse() {
|
|
90
|
-
this.isExpanded = false;
|
|
91
|
-
this.widgetElement.classList.remove('expanded');
|
|
92
|
-
if (this.container) {
|
|
93
|
-
this.container.classList.remove('expanded');
|
|
94
|
-
}
|
|
95
|
-
// Reset expanded tool state
|
|
96
|
-
this.expandedTool = null;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
renderToolsList(schemaContent) {
|
|
100
|
-
if (!schemaContent || typeof schemaContent !== 'object') {
|
|
101
|
-
this.contentElement.innerHTML = '<p>Invalid schema format</p>';
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
let html = `
|
|
106
|
-
<div class="tools-list">
|
|
107
|
-
`;
|
|
108
|
-
|
|
109
|
-
Object.entries(schemaContent).forEach(([toolName, toolInfo]) => {
|
|
110
|
-
if (!toolInfo) return;
|
|
111
|
-
|
|
112
|
-
html += `<div class="tool-card" data-tool="${this.escapeHtml(toolName)}">
|
|
113
|
-
<div class="tool-card-header">
|
|
114
|
-
<div class="tool-header">
|
|
115
|
-
<h3 class="text-md font-semibold text-blue-600">${toolInfo.name || toolName}</h3>
|
|
116
|
-
<div class="text-gray-600 text-sm">${toolInfo.description || 'No description available'}</div>
|
|
117
|
-
</div>
|
|
118
|
-
</div>
|
|
119
|
-
<div class="tool-details hidden" data-tool-details="${this.escapeHtml(toolName)}">
|
|
120
|
-
${this.renderInputSchema(toolInfo.inputSchema)}
|
|
121
|
-
</div>
|
|
122
|
-
</div>
|
|
123
|
-
`;
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
html += `
|
|
127
|
-
</div>
|
|
128
|
-
`;
|
|
129
|
-
|
|
130
|
-
this.contentElement.innerHTML = html;
|
|
131
|
-
|
|
132
|
-
// Add event listeners to tool cards
|
|
133
|
-
this.contentElement.querySelectorAll('.tool-card').forEach(card => {
|
|
134
|
-
const header = card.querySelector('.tool-card-header');
|
|
135
|
-
header.addEventListener('click', (e) => {
|
|
136
|
-
e.stopPropagation(); // Prevent click from bubbling up to server-item
|
|
137
|
-
const toolName = card.dataset.tool;
|
|
138
|
-
this.toggleToolDetails(toolName, card);
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
// Add click handler for the details area to prevent bubbling
|
|
142
|
-
const details = card.querySelector('.tool-details');
|
|
143
|
-
details.addEventListener('click', (e) => {
|
|
144
|
-
e.stopPropagation(); // Prevent click from bubbling up
|
|
145
|
-
});
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
toggleToolDetails(toolName, card) {
|
|
150
|
-
const detailsElement = card.querySelector(`[data-tool-details="${toolName}"]`);
|
|
151
|
-
const isExpanded = !detailsElement.classList.contains('hidden');
|
|
152
|
-
|
|
153
|
-
// Collapse all other expanded tools
|
|
154
|
-
if (this.expandedTool && this.expandedTool !== toolName) {
|
|
155
|
-
const prevCard = this.contentElement.querySelector(`[data-tool="${this.expandedTool}"]`);
|
|
156
|
-
if (prevCard) {
|
|
157
|
-
const prevDetails = prevCard.querySelector(`[data-tool-details="${this.expandedTool}"]`);
|
|
158
|
-
prevDetails?.classList.add('hidden');
|
|
159
|
-
prevCard.classList.remove('active');
|
|
160
|
-
setTimeout(() => {
|
|
161
|
-
prevDetails.classList.remove('visible');
|
|
162
|
-
}, 0);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
// Toggle current tool with animation
|
|
167
|
-
if (isExpanded) {
|
|
168
|
-
detailsElement.classList.remove('visible');
|
|
169
|
-
card.classList.remove('active');
|
|
170
|
-
setTimeout(() => {
|
|
171
|
-
detailsElement.classList.add('hidden');
|
|
172
|
-
}, 300); // Match transition duration from CSS
|
|
173
|
-
this.expandedTool = null;
|
|
174
|
-
} else {
|
|
175
|
-
detailsElement.classList.remove('hidden');
|
|
176
|
-
card.classList.add('active');
|
|
177
|
-
setTimeout(() => {
|
|
178
|
-
detailsElement.classList.add('visible');
|
|
179
|
-
}, 0);
|
|
180
|
-
this.expandedTool = toolName;
|
|
181
|
-
detailsElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
renderInputSchema(schema) {
|
|
186
|
-
if (!schema || typeof schema !== 'object') {
|
|
187
|
-
return '<p>No input schema available</p>';
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
if (!schema.properties || Object.keys(schema.properties).length === 0) {
|
|
191
|
-
return '<p>No input properties defined</p>';
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
let html = '<div class="properties-list">';
|
|
195
|
-
|
|
196
|
-
try {
|
|
197
|
-
// Render each property
|
|
198
|
-
Object.entries(schema.properties).forEach(([propName, propDetails]) => {
|
|
199
|
-
if (!propDetails) return;
|
|
200
|
-
|
|
201
|
-
const isRequired = schema.required?.includes(propName);
|
|
202
|
-
const type = this.getPropertyType(propDetails);
|
|
203
|
-
|
|
204
|
-
html += `<div class="property-item ${isRequired ? 'required' : ''}">
|
|
205
|
-
<div class="property-header">
|
|
206
|
-
<span class="property-name">${this.escapeHtml(propName)}${isRequired ? '<span class="required-star">*</span>' : ''}</span><span class="property-type">${this.escapeHtml(type)}</span>${propDetails.description ? `<span class="property-desc">${this.escapeHtml(propDetails.description)}</span>` : ''}
|
|
207
|
-
${propDetails.default !== undefined ? `<div class="property-default">Default: <code>${this.escapeHtml(JSON.stringify(propDetails.default))}</code></div>` : ''}
|
|
208
|
-
</div>
|
|
209
|
-
${this.renderNestedProperties(propDetails)}
|
|
210
|
-
</div>
|
|
211
|
-
`;
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
return html + '</div>';
|
|
215
|
-
} catch (error) {
|
|
216
|
-
console.error('Error rendering input schema:', error);
|
|
217
|
-
return '<p>Error rendering input schema</p>';
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
renderNestedProperties(propDetails) {
|
|
222
|
-
if (propDetails.properties) {
|
|
223
|
-
let html = '<div class="nested-properties">';
|
|
224
|
-
Object.entries(propDetails.properties).forEach(([name, details]) => {
|
|
225
|
-
const type = this.getPropertyType(details);
|
|
226
|
-
html += `
|
|
227
|
-
<div class="nested-property-item">
|
|
228
|
-
<span class="property-name">${this.escapeHtml(name)}</span><span class="property-type">${this.escapeHtml(type)}</span>
|
|
229
|
-
${details.description ? `<div class="property-desc">${this.escapeHtml(details.description)}</div>` : ''}
|
|
230
|
-
</div>
|
|
231
|
-
`;
|
|
232
|
-
});
|
|
233
|
-
return html + '</div>';
|
|
234
|
-
}
|
|
235
|
-
return '';
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
getPropertyType(propDetails) {
|
|
239
|
-
if (propDetails.anyOf) {
|
|
240
|
-
return `oneOf: [${propDetails.anyOf.map(type => type.type || 'any').join(', ')}]`;
|
|
241
|
-
}
|
|
242
|
-
if (propDetails.type === 'array') {
|
|
243
|
-
const itemType = propDetails.items?.type || 'any';
|
|
244
|
-
return `array<${itemType}>`;
|
|
245
|
-
}
|
|
246
|
-
return propDetails.type || 'any';
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
escapeHtml(unsafe) {
|
|
250
|
-
if (unsafe === undefined || unsafe === null) {
|
|
251
|
-
return '';
|
|
252
|
-
}
|
|
253
|
-
return String(unsafe)
|
|
254
|
-
.replace(/&/g, "&")
|
|
255
|
-
.replace(/</g, "<")
|
|
256
|
-
.replace(/>/g, ">")
|
|
257
|
-
.replace(/"/g, """)
|
|
258
|
-
.replace(/'/g, "'");
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
isVisible() {
|
|
262
|
-
return this.isExpanded;
|
|
263
|
-
}
|
|
264
|
-
}
|
|
1
|
+
export class DetailsWidget{constructor(e){this.container=e,this.isExpanded=!1,this.expandedTool=null,this.init()}init(){const e=document.createElement("link");e.rel="stylesheet",e.href="/css/detailsWidget.css",document.head.appendChild(e),this.containerWrapper=document.createElement("div"),this.containerWrapper.className="details-widget-container",this.containerWrapper.style.width="100%",this.containerWrapper.style.boxSizing="border-box",this.containerWrapper.style.maxWidth="100%",this.containerWrapper.style.overflow="hidden",this.widgetElement=document.createElement("div"),this.widgetElement.className="details-widget",this.widgetElement.style.width="100%",this.widgetElement.style.boxSizing="border-box",this.widgetElement.style.maxWidth="100%",this.contentElement=document.createElement("div"),this.contentElement.className="details-widget-content",this.contentElement.style.width="100%",this.contentElement.style.boxSizing="border-box",this.widgetElement.appendChild(this.contentElement),this.containerWrapper.appendChild(this.widgetElement),this.container.after(this.containerWrapper)}setContent(e){if("string"!=typeof e)if("object"!=typeof e)this.contentElement.innerHTML="<p>Invalid content format</p>";else{const t=e.schema||e;this.renderToolsList(t)}else this.contentElement.innerHTML=`\n <div class="description-text">\n ${e||"No description available."}\n </div>\n `}toggle(){this.isExpanded?this.collapse():this.expand()}expand(){this.isExpanded=!0,this.widgetElement.classList.add("expanded");const e=this.container.offsetWidth;this.containerWrapper.style.width=`${e}px`,this.containerWrapper.style.maxWidth="100%",this.containerWrapper.style.display="block",this.container&&this.container.classList.add("expanded")}collapse(){this.isExpanded=!1,this.widgetElement.classList.remove("expanded"),this.container&&this.container.classList.remove("expanded"),this.expandedTool=null}renderToolsList(e){if(!e||"object"!=typeof e)return void(this.contentElement.innerHTML="<p>Invalid schema format</p>");let t='\n <div class="tools-list">\n ';Object.entries(e).forEach((([e,s])=>{s&&(t+=`<div class="tool-card" data-tool="${this.escapeHtml(e)}">\n <div class="tool-card-header">\n <div class="tool-header">\n <h3 class="text-md font-semibold text-blue-600">${s.name||e}</h3>\n <div class="text-gray-600 text-sm">${s.description||"No description available"}</div>\n </div>\n </div>\n <div class="tool-details hidden" data-tool-details="${this.escapeHtml(e)}">\n ${this.renderInputSchema(s.inputSchema)}\n </div>\n </div>\n `)})),t+="\n </div>\n ",this.contentElement.innerHTML=t,this.contentElement.querySelectorAll(".tool-card").forEach((e=>{e.querySelector(".tool-card-header").addEventListener("click",(t=>{t.stopPropagation();const s=e.dataset.tool;this.toggleToolDetails(s,e)})),e.querySelector(".tool-details").addEventListener("click",(e=>{e.stopPropagation()}))}))}toggleToolDetails(e,t){const s=t.querySelector(`[data-tool-details="${e}"]`),i=!s.classList.contains("hidden");if(this.expandedTool&&this.expandedTool!==e){const e=this.contentElement.querySelector(`[data-tool="${this.expandedTool}"]`);if(e){const t=e.querySelector(`[data-tool-details="${this.expandedTool}"]`);t?.classList.add("hidden"),e.classList.remove("active"),setTimeout((()=>{t.classList.remove("visible")}),0)}}i?(s.classList.remove("visible"),t.classList.remove("active"),setTimeout((()=>{s.classList.add("hidden")}),300),this.expandedTool=null):(s.classList.remove("hidden"),t.classList.add("active"),setTimeout((()=>{s.classList.add("visible")}),0),this.expandedTool=e,s.scrollIntoView({behavior:"smooth",block:"nearest"}))}renderInputSchema(e){if(!e||"object"!=typeof e)return"<p>No input schema available</p>";if(!e.properties||0===Object.keys(e.properties).length)return"<p>No input properties defined</p>";let t='<div class="properties-list">';try{return Object.entries(e.properties).forEach((([s,i])=>{if(!i)return;const n=e.required?.includes(s),a=this.getPropertyType(i);t+=`<div class="property-item ${n?"required":""}">\n <div class="property-header">\n <span class="property-name">${this.escapeHtml(s)}${n?'<span class="required-star">*</span>':""}</span><span class="property-type">${this.escapeHtml(a)}</span>${i.description?`<span class="property-desc">${this.escapeHtml(i.description)}</span>`:""}\n ${void 0!==i.default?`<div class="property-default">Default: <code>${this.escapeHtml(JSON.stringify(i.default))}</code></div>`:""}\n </div>\n ${this.renderNestedProperties(i)}\n </div>\n `})),t+"</div>"}catch(e){return"<p>Error rendering input schema</p>"}}renderNestedProperties(e){if(e.properties){let t='<div class="nested-properties">';return Object.entries(e.properties).forEach((([e,s])=>{const i=this.getPropertyType(s);t+=`\n <div class="nested-property-item">\n <span class="property-name">${this.escapeHtml(e)}</span><span class="property-type">${this.escapeHtml(i)}</span>\n ${s.description?`<div class="property-desc">${this.escapeHtml(s.description)}</div>`:""}\n </div>\n `})),t+"</div>"}return""}getPropertyType(e){return e.anyOf?`oneOf: [${e.anyOf.map((e=>e.type||"any")).join(", ")}]`:"array"===e.type?`array<${e.items?.type||"any"}>`:e.type||"any"}escapeHtml(e){return null==e?"":String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}isVisible(){return this.isExpanded}}
|
|
2
|
+
//# sourceMappingURL=detailsWidget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DetailsWidget"],"sources":["0"],"sourcesContent":["export class DetailsWidget {\r\n constructor(container) {\r\n this.container = container;\r\n this.isExpanded = false;\r\n this.expandedTool = null;\r\n this.init();\r\n }\r\n\r\n init() {\r\n // Create and append stylesheet\r\n const link = document.createElement('link');\r\n link.rel = 'stylesheet';\r\n link.href = '/css/detailsWidget.css';\r\n document.head.appendChild(link);\r\n // Create wrapper to maintain proper width alignment\r\n this.containerWrapper = document.createElement('div');\r\n this.containerWrapper.className = 'details-widget-container';\r\n this.containerWrapper.style.width = '100%';\r\n this.containerWrapper.style.boxSizing = 'border-box';\r\n this.containerWrapper.style.maxWidth = '100%';\r\n this.containerWrapper.style.overflow = 'hidden';\r\n\r\n // Create the widget element\r\n this.widgetElement = document.createElement('div');\r\n this.widgetElement.className = 'details-widget';\r\n this.widgetElement.style.width = '100%';\r\n this.widgetElement.style.boxSizing = 'border-box';\r\n this.widgetElement.style.maxWidth = '100%';\r\n\r\n // Create the content element\r\n this.contentElement = document.createElement('div');\r\n this.contentElement.className = 'details-widget-content';\r\n this.contentElement.style.width = '100%';\r\n this.contentElement.style.boxSizing = 'border-box';\r\n\r\n // Build the DOM structure\r\n this.widgetElement.appendChild(this.contentElement);\r\n this.containerWrapper.appendChild(this.widgetElement);\r\n\r\n // Insert after the server item while maintaining proper structure\r\n this.container.after(this.containerWrapper);\r\n }\r\n\r\n setContent(content) {\r\n if (typeof content === 'string') {\r\n this.contentElement.innerHTML = `\r\n <div class=\"description-text\">\r\n ${content || 'No description available.'}\r\n </div>\r\n `;\r\n return;\r\n }\r\n\r\n // Handle direct schema object or wrapped schema object\r\n if (typeof content === 'object') {\r\n const schemaData = content.schema || content; // Handle both {schema: data} and direct data\r\n this.renderToolsList(schemaData);\r\n return;\r\n }\r\n\r\n this.contentElement.innerHTML = '<p>Invalid content format</p>';\r\n }\r\n\r\n // Maintain compatibility with old toggle behavior\r\n toggle() {\r\n if (this.isExpanded) {\r\n this.collapse();\r\n } else {\r\n this.expand();\r\n }\r\n }\r\n\r\n expand() {\r\n this.isExpanded = true;\r\n this.widgetElement.classList.add('expanded');\r\n\r\n // Ensure proper dimensions based on container\r\n const containerWidth = this.container.offsetWidth;\r\n this.containerWrapper.style.width = `${containerWidth}px`;\r\n this.containerWrapper.style.maxWidth = '100%';\r\n this.containerWrapper.style.display = 'block';\r\n\r\n // Add expanded state to container\r\n if (this.container) {\r\n this.container.classList.add('expanded');\r\n }\r\n }\r\n\r\n collapse() {\r\n this.isExpanded = false;\r\n this.widgetElement.classList.remove('expanded');\r\n if (this.container) {\r\n this.container.classList.remove('expanded');\r\n }\r\n // Reset expanded tool state\r\n this.expandedTool = null;\r\n }\r\n\r\n renderToolsList(schemaContent) {\r\n if (!schemaContent || typeof schemaContent !== 'object') {\r\n this.contentElement.innerHTML = '<p>Invalid schema format</p>';\r\n return;\r\n }\r\n\r\n let html = `\r\n <div class=\"tools-list\">\r\n `;\r\n\r\n Object.entries(schemaContent).forEach(([toolName, toolInfo]) => {\r\n if (!toolInfo) return;\r\n\r\n html += `<div class=\"tool-card\" data-tool=\"${this.escapeHtml(toolName)}\">\r\n <div class=\"tool-card-header\">\r\n <div class=\"tool-header\">\r\n <h3 class=\"text-md font-semibold text-blue-600\">${toolInfo.name || toolName}</h3>\r\n <div class=\"text-gray-600 text-sm\">${toolInfo.description || 'No description available'}</div>\r\n </div>\r\n </div>\r\n <div class=\"tool-details hidden\" data-tool-details=\"${this.escapeHtml(toolName)}\">\r\n ${this.renderInputSchema(toolInfo.inputSchema)}\r\n </div>\r\n </div>\r\n `;\r\n });\r\n\r\n html += `\r\n </div>\r\n `;\r\n\r\n this.contentElement.innerHTML = html;\r\n\r\n // Add event listeners to tool cards\r\n this.contentElement.querySelectorAll('.tool-card').forEach(card => {\r\n const header = card.querySelector('.tool-card-header');\r\n header.addEventListener('click', (e) => {\r\n e.stopPropagation(); // Prevent click from bubbling up to server-item\r\n const toolName = card.dataset.tool;\r\n this.toggleToolDetails(toolName, card);\r\n });\r\n\r\n // Add click handler for the details area to prevent bubbling\r\n const details = card.querySelector('.tool-details');\r\n details.addEventListener('click', (e) => {\r\n e.stopPropagation(); // Prevent click from bubbling up\r\n });\r\n });\r\n }\r\n\r\n toggleToolDetails(toolName, card) {\r\n const detailsElement = card.querySelector(`[data-tool-details=\"${toolName}\"]`);\r\n const isExpanded = !detailsElement.classList.contains('hidden');\r\n\r\n // Collapse all other expanded tools\r\n if (this.expandedTool && this.expandedTool !== toolName) {\r\n const prevCard = this.contentElement.querySelector(`[data-tool=\"${this.expandedTool}\"]`);\r\n if (prevCard) {\r\n const prevDetails = prevCard.querySelector(`[data-tool-details=\"${this.expandedTool}\"]`);\r\n prevDetails?.classList.add('hidden');\r\n prevCard.classList.remove('active');\r\n setTimeout(() => {\r\n prevDetails.classList.remove('visible');\r\n }, 0);\r\n }\r\n }\r\n\r\n // Toggle current tool with animation\r\n if (isExpanded) {\r\n detailsElement.classList.remove('visible');\r\n card.classList.remove('active');\r\n setTimeout(() => {\r\n detailsElement.classList.add('hidden');\r\n }, 300); // Match transition duration from CSS\r\n this.expandedTool = null;\r\n } else {\r\n detailsElement.classList.remove('hidden');\r\n card.classList.add('active');\r\n setTimeout(() => {\r\n detailsElement.classList.add('visible');\r\n }, 0);\r\n this.expandedTool = toolName;\r\n detailsElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n }\r\n }\r\n\r\n renderInputSchema(schema) {\r\n if (!schema || typeof schema !== 'object') {\r\n return '<p>No input schema available</p>';\r\n }\r\n\r\n if (!schema.properties || Object.keys(schema.properties).length === 0) {\r\n return '<p>No input properties defined</p>';\r\n }\r\n\r\n let html = '<div class=\"properties-list\">';\r\n\r\n try {\r\n // Render each property\r\n Object.entries(schema.properties).forEach(([propName, propDetails]) => {\r\n if (!propDetails) return;\r\n\r\n const isRequired = schema.required?.includes(propName);\r\n const type = this.getPropertyType(propDetails);\r\n\r\n html += `<div class=\"property-item ${isRequired ? 'required' : ''}\">\r\n <div class=\"property-header\">\r\n <span class=\"property-name\">${this.escapeHtml(propName)}${isRequired ? '<span class=\"required-star\">*</span>' : ''}</span><span class=\"property-type\">${this.escapeHtml(type)}</span>${propDetails.description ? `<span class=\"property-desc\">${this.escapeHtml(propDetails.description)}</span>` : ''}\r\n ${propDetails.default !== undefined ? `<div class=\"property-default\">Default: <code>${this.escapeHtml(JSON.stringify(propDetails.default))}</code></div>` : ''}\r\n </div>\r\n ${this.renderNestedProperties(propDetails)}\r\n </div>\r\n `;\r\n });\r\n\r\n return html + '</div>';\r\n } catch (error) {\r\n console.error('Error rendering input schema:', error);\r\n return '<p>Error rendering input schema</p>';\r\n }\r\n }\r\n\r\n renderNestedProperties(propDetails) {\r\n if (propDetails.properties) {\r\n let html = '<div class=\"nested-properties\">';\r\n Object.entries(propDetails.properties).forEach(([name, details]) => {\r\n const type = this.getPropertyType(details);\r\n html += `\r\n <div class=\"nested-property-item\">\r\n <span class=\"property-name\">${this.escapeHtml(name)}</span><span class=\"property-type\">${this.escapeHtml(type)}</span>\r\n ${details.description ? `<div class=\"property-desc\">${this.escapeHtml(details.description)}</div>` : ''}\r\n </div>\r\n `;\r\n });\r\n return html + '</div>';\r\n }\r\n return '';\r\n }\r\n\r\n getPropertyType(propDetails) {\r\n if (propDetails.anyOf) {\r\n return `oneOf: [${propDetails.anyOf.map(type => type.type || 'any').join(', ')}]`;\r\n }\r\n if (propDetails.type === 'array') {\r\n const itemType = propDetails.items?.type || 'any';\r\n return `array<${itemType}>`;\r\n }\r\n return propDetails.type || 'any';\r\n }\r\n\r\n escapeHtml(unsafe) {\r\n if (unsafe === undefined || unsafe === null) {\r\n return '';\r\n }\r\n return String(unsafe)\r\n .replace(/&/g, \"&\")\r\n .replace(/</g, \"<\")\r\n .replace(/>/g, \">\")\r\n .replace(/\"/g, \""\")\r\n .replace(/'/g, \"'\");\r\n }\r\n\r\n isVisible() {\r\n return this.isExpanded;\r\n }\r\n}"],"mappings":"OAAO,MAAMA,c","ignoreList":[]}
|