UNPKG

vibe-coder-mcp

Version:

Production-ready MCP server with complete agent integration, multi-transport support, and comprehensive development automation tools for AI-assisted workflows.

89 lines (88 loc) 3.14 kB
import path from 'path'; import { fileURLToPath } from 'url'; import logger from '../logger.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const PROJECT_ROOT = path.resolve(__dirname, '../..'); export function getProjectRootSafe() { return PROJECT_ROOT; } export function resolveProjectPathSafe(relativePath) { return path.join(PROJECT_ROOT, relativePath); } export function getSafeOutputDirectory(subDirectory) { const baseOutputDir = resolveProjectPathSafe('VibeCoderOutput'); return subDirectory ? path.join(baseOutputDir, subDirectory) : baseOutputDir; } export function getSafeTempDirectory(subDirectory) { const baseTempDir = resolveProjectPathSafe('tmp'); return subDirectory ? path.join(baseTempDir, subDirectory) : baseTempDir; } export function getSafeDataDirectory(subDirectory) { const baseDataDir = resolveProjectPathSafe('data'); return subDirectory ? path.join(baseDataDir, subDirectory) : baseDataDir; } export function checkWorkingDirectorySafety() { const currentCwd = process.cwd(); if (currentCwd === '/') { return { isSafe: false, currentCwd, recommendedAction: 'CRITICAL: Working directory is root (/). Use absolute path resolution immediately.', severity: 'critical' }; } if (currentCwd === '' || currentCwd === '/tmp' || currentCwd.startsWith('/tmp/')) { return { isSafe: false, currentCwd, recommendedAction: 'HIGH: Working directory is unsafe. Use absolute path resolution.', severity: 'high' }; } if (!currentCwd.includes('Vibe-Coder-MCP')) { return { isSafe: false, currentCwd, recommendedAction: 'MEDIUM: Working directory appears to be outside project. Verify path resolution.', severity: 'medium' }; } return { isSafe: true, currentCwd, recommendedAction: 'Working directory appears safe.', severity: 'low' }; } export function logWorkingDirectorySafety() { const safety = checkWorkingDirectorySafety(); if (safety.severity === 'critical') { logger.error({ workingDirectory: safety.currentCwd, projectRoot: PROJECT_ROOT, severity: safety.severity }, `🚨 ${safety.recommendedAction}`); } else if (safety.severity === 'high') { logger.warn({ workingDirectory: safety.currentCwd, projectRoot: PROJECT_ROOT, severity: safety.severity }, `⚠️ ${safety.recommendedAction}`); } else if (safety.severity === 'medium') { logger.warn({ workingDirectory: safety.currentCwd, projectRoot: PROJECT_ROOT, severity: safety.severity }, `⚠️ ${safety.recommendedAction}`); } else { logger.debug({ workingDirectory: safety.currentCwd, projectRoot: PROJECT_ROOT, severity: safety.severity }, `✅ ${safety.recommendedAction}`); } }