Skip to main content
Glama
command-aliases.jsโ€ข3.6 kB
/** * Command Aliases System for MCP SSH Manager * Provides shortcuts for frequently used commands */ import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'url'; import { loadProfile } from './profile-loader.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const ALIASES_FILE = path.join(__dirname, '..', '.command-aliases.json'); // Get aliases from the active profile let profileAliases = {}; try { const profile = loadProfile(); profileAliases = profile.commandAliases || {}; } catch (error) { console.error(`Error loading profile aliases: ${error.message}`); } /** * Load command aliases from file */ export function loadCommandAliases() { try { // Start with profile aliases let aliases = { ...profileAliases }; // Merge with custom aliases from file if (fs.existsSync(ALIASES_FILE)) { const data = fs.readFileSync(ALIASES_FILE, 'utf8'); aliases = { ...aliases, ...JSON.parse(data) }; } return aliases; } catch (error) { console.error(`Error loading command aliases: ${error.message}`); } return profileAliases; } /** * Save command aliases to file */ export function saveCommandAliases(aliases) { try { // Only save custom aliases (not from profile) const customAliases = {}; for (const [key, value] of Object.entries(aliases)) { if (profileAliases[key] !== value) { customAliases[key] = value; } } fs.writeFileSync(ALIASES_FILE, JSON.stringify(customAliases, null, 2)); return true; } catch (error) { console.error(`Error saving command aliases: ${error.message}`); return false; } } /** * Expand command if it's an alias */ export function expandCommandAlias(command) { const aliases = loadCommandAliases(); // Check if the entire command is an alias if (aliases[command]) { return aliases[command]; } // Check if the command starts with an alias const parts = command.split(' '); const firstPart = parts[0]; if (aliases[firstPart]) { parts[0] = aliases[firstPart]; return parts.join(' '); } return command; } /** * Add or update a command alias */ export function addCommandAlias(alias, command) { const aliases = loadCommandAliases(); aliases[alias] = command; return saveCommandAliases(aliases); } /** * Remove a command alias */ export function removeCommandAlias(alias) { const aliases = loadCommandAliases(); // Don't remove profile aliases, just reset them if (profileAliases[alias]) { aliases[alias] = profileAliases[alias]; } else { delete aliases[alias]; } return saveCommandAliases(aliases); } /** * List all command aliases */ export function listCommandAliases() { const aliases = loadCommandAliases(); const result = []; for (const [alias, command] of Object.entries(aliases)) { result.push({ alias, command, isFromProfile: profileAliases[alias] === command, isCustom: profileAliases[alias] !== command }); } return result.sort((a, b) => a.alias.localeCompare(b.alias)); } /** * Get suggested aliases based on command */ export function suggestAliases(command) { const suggestions = []; const aliases = loadCommandAliases(); const commandLower = command.toLowerCase(); for (const [alias, aliasCommand] of Object.entries(aliases)) { if (aliasCommand.toLowerCase().includes(commandLower) || alias.toLowerCase().includes(commandLower)) { suggestions.push({ alias, command: aliasCommand }); } } return suggestions; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bvisible/mcp-ssh-manager'

If you have feedback or need assistance with the MCP directory API, please join our Discord server