UNPKG

langterm

Version:

Secure CLI tool that translates natural language to shell commands using local AI models via Ollama, with project memory system, reusable command templates (hooks), MCP (Model Context Protocol) support, and dangerous command detection

98 lines (83 loc) 2.28 kB
import { promises as fs } from 'fs'; import path from 'path'; import os from 'os'; export const CONFIG_FILE = path.join(os.homedir(), '.langtermrc'); /** * Loads user configuration from ~/.langtermrc * @returns {Promise<object|null>} Configuration object or null if not found */ export async function loadConfig() { try { const configData = await fs.readFile(CONFIG_FILE, 'utf8'); return JSON.parse(configData); } catch (error) { return null; } } /** * Saves configuration to ~/.langtermrc * @param {object} config - Configuration object to save * @returns {Promise<void>} */ export async function saveConfig(config) { await fs.writeFile(CONFIG_FILE, JSON.stringify(config, null, 2)); } /** * Get default configuration with MCP support * @returns {object} Default configuration object */ export function getDefaultConfig() { return { model: null, mcp: { enabled: false, servers: {} }, hooks: {} }; } /** * Add an MCP server configuration * @param {string} name - Server name * @param {object} serverConfig - Server configuration * @returns {Promise<void>} */ export async function addMCPServer(name, serverConfig) { const config = await loadConfig() || getDefaultConfig(); if (!config.mcp) { config.mcp = { enabled: false, servers: {} }; } config.mcp.servers[name] = serverConfig; config.mcp.enabled = true; await saveConfig(config); } /** * Remove an MCP server configuration * @param {string} name - Server name to remove * @returns {Promise<void>} */ export async function removeMCPServer(name) { const config = await loadConfig(); if (!config || !config.mcp || !config.mcp.servers) { return; } delete config.mcp.servers[name]; // Disable MCP if no servers remain if (Object.keys(config.mcp.servers).length === 0) { config.mcp.enabled = false; } await saveConfig(config); } /** * Toggle MCP enabled state * @param {boolean} enabled - Whether to enable MCP * @returns {Promise<void>} */ export async function setMCPEnabled(enabled) { const config = await loadConfig() || getDefaultConfig(); if (!config.mcp) { config.mcp = { enabled: false, servers: {} }; } config.mcp.enabled = enabled; await saveConfig(config); }