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
JavaScript
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}`);
}
}