UNPKG

@light-merlin-dark/vssh

Version:

MCP-native SSH proxy for AI agents. CLI & MCP Server, plugin system, AI safety guards.

120 lines 4.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.handlePluginsCommand = handlePluginsCommand; async function handlePluginsCommand(registry, args) { const subcommand = args[0]; switch (subcommand) { case 'list': case 'ls': await listPlugins(registry); break; case 'enable': if (!args[1]) { console.error('Error: Plugin name required'); console.error('Usage: vssh plugins enable <plugin-name>'); process.exit(1); } await enablePlugin(registry, args[1]); break; case 'disable': if (!args[1]) { console.error('Error: Plugin name required'); console.error('Usage: vssh plugins disable <plugin-name>'); process.exit(1); } await disablePlugin(registry, args[1]); break; case 'info': if (!args[1]) { console.error('Error: Plugin name required'); console.error('Usage: vssh plugins info <plugin-name>'); process.exit(1); } await showPluginInfo(registry, args[1]); break; default: console.error(`Unknown plugins subcommand: ${subcommand}`); console.error('Available subcommands: list, enable, disable, info'); process.exit(1); } } async function listPlugins(registry) { const allPlugins = registry.getAllPlugins(); if (allPlugins.length === 0) { console.log('No plugins installed'); return; } console.log('Installed plugins:'); console.log(''); const maxNameLength = Math.max(...allPlugins.map(p => p.name.length)); const maxVersionLength = Math.max(...allPlugins.map(p => p.version.length)); for (const plugin of allPlugins) { const status = registry.isEnabled(plugin.name) ? '✓ enabled' : '✗ disabled'; const statusColor = registry.isEnabled(plugin.name) ? '\x1b[32m' : '\x1b[31m'; const resetColor = '\x1b[0m'; console.log(` ${plugin.name.padEnd(maxNameLength)} ` + `v${plugin.version.padEnd(maxVersionLength)} ` + `${statusColor}${status}${resetColor} ` + `- ${plugin.description}`); } } async function enablePlugin(registry, name) { try { await registry.enablePlugin(name); console.log(`✓ Plugin '${name}' enabled successfully`); // Show any dependencies that were also enabled const plugin = registry.getPlugin(name); if (plugin?.dependencies && plugin.dependencies.length > 0) { console.log(` Dependencies enabled: ${plugin.dependencies.join(', ')}`); } } catch (error) { console.error(`✗ Failed to enable plugin '${name}': ${error.message}`); process.exit(1); } } async function disablePlugin(registry, name) { try { await registry.disablePlugin(name); console.log(`✓ Plugin '${name}' disabled successfully`); } catch (error) { console.error(`✗ Failed to disable plugin '${name}': ${error.message}`); process.exit(1); } } async function showPluginInfo(registry, name) { const plugin = registry.getPlugin(name); if (!plugin) { console.error(`Plugin '${name}' not found`); process.exit(1); } console.log(`Plugin: ${plugin.name}`); console.log(`Version: ${plugin.version}`); console.log(`Description: ${plugin.description}`); if (plugin.author) { console.log(`Author: ${plugin.author}`); } console.log(`Status: ${registry.isEnabled(name) ? 'enabled' : 'disabled'}`); if (plugin.dependencies && plugin.dependencies.length > 0) { console.log(`Dependencies: ${plugin.dependencies.join(', ')}`); } console.log(''); console.log('Commands:'); for (const command of plugin.commands) { const aliases = command.aliases ? ` (${command.aliases.join(', ')})` : ''; console.log(` ${command.name}${aliases}`); console.log(` ${command.description}`); if (command.usage) { console.log(` Usage: ${command.usage}`); } } if (plugin.mcpTools && plugin.mcpTools.length > 0) { console.log(''); console.log('MCP Tools:'); for (const tool of plugin.mcpTools) { console.log(` ${tool.name} - ${tool.description}`); } } } //# sourceMappingURL=plugins.js.map