@vfarcic/dot-ai
Version:
Universal Kubernetes application deployment agent with CLI and MCP interfaces
122 lines (121 loc) • 5 kB
JavaScript
;
/**
* Session directory utilities for MCP tools
* Provides consistent session directory resolution and validation across all tools
*/
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.getSessionDirectory = getSessionDirectory;
exports.validateSessionDirectory = validateSessionDirectory;
exports.getAndValidateSessionDirectory = getAndValidateSessionDirectory;
const fs = __importStar(require("fs"));
const path = __importStar(require("path"));
/**
* Get session directory from CLI args or environment variable
* CLI parameter takes precedence over environment variable
*
* @param args - Tool arguments that may contain sessionDir
* @returns Resolved session directory path (can be relative or absolute)
*/
function getSessionDirectory(args) {
// For CLI interface, sessionDir is required as parameter
if (args.sessionDir) {
return args.sessionDir;
}
// For MCP interface, sessionDir comes from environment
const envSessionDir = process.env.DOT_AI_SESSION_DIR;
if (!envSessionDir) {
throw new Error('Session directory must be specified via --session-dir parameter or DOT_AI_SESSION_DIR environment variable');
}
return envSessionDir;
}
/**
* Validate session directory exists and is accessible
* Works with both relative and absolute paths
*
* @param sessionDir - Session directory path to validate
* @param requireWrite - Whether to test write permissions (default: false)
*/
function validateSessionDirectory(sessionDir, requireWrite = false) {
try {
// Check if directory exists (resolves relative paths automatically)
if (!fs.existsSync(sessionDir)) {
throw new Error(`Session directory does not exist: ${sessionDir}`);
}
// Check if it's actually a directory
const stat = fs.statSync(sessionDir);
if (!stat.isDirectory()) {
throw new Error(`Session directory path is not a directory: ${sessionDir}`);
}
// Test read permissions by attempting to read directory contents
fs.readdirSync(sessionDir);
// Test write permissions if required
if (requireWrite) {
const testFile = path.join(sessionDir, '.write-test-' + Date.now());
fs.writeFileSync(testFile, 'test');
fs.unlinkSync(testFile);
}
}
catch (error) {
if (error instanceof Error) {
// Re-throw specific error messages
if (error.message.includes('Session directory does not exist') ||
error.message.includes('Session directory path is not a directory')) {
throw error;
}
// Handle permission errors
if (error.message.includes('EACCES')) {
throw new Error(`Session directory is not accessible: ${sessionDir}. Check permissions.`);
}
// Handle write permission errors
if (requireWrite) {
throw new Error(`Session directory is not writable: ${sessionDir}. Error: ${error.message}`);
}
}
throw new Error(`Session directory validation failed: ${sessionDir}. Error: ${error}`);
}
}
/**
* Get and validate session directory in one call
*
* @param args - Tool arguments that may contain sessionDir
* @param requireWrite - Whether to test write permissions (default: false)
* @returns Validated session directory path
*/
function getAndValidateSessionDirectory(args, requireWrite = false) {
const sessionDir = getSessionDirectory(args);
validateSessionDirectory(sessionDir, requireWrite);
return sessionDir;
}