UNPKG

packfs-core

Version:

Semantic filesystem operations for LLM agent frameworks with natural language understanding. See LLM_AGENT_GUIDE.md for copy-paste examples.

137 lines 8.42 kB
"use strict"; /** * Zod schemas for Mastra integration input/output validation */ Object.defineProperty(exports, "__esModule", { value: true }); exports.outputSchemas = exports.schemas = exports.updateOutputSchema = exports.searchOutputSchema = exports.fileOutputSchema = exports.updateSchema = exports.discoverSchema = exports.accessSchema = void 0; const zod_1 = require("zod"); // Access Intent Schema exports.accessSchema = zod_1.z.object({ purpose: zod_1.z.enum(['read', 'metadata', 'exists']).describe('Type of access operation to perform'), target: zod_1.z.object({ path: zod_1.z.string().min(1).describe('Path to the file or directory'), encoding: zod_1.z.string().optional().describe('Text encoding for file content (default: utf8)') }).describe('Target file specification'), preferences: zod_1.z.object({ includeMetadata: zod_1.z.boolean().optional().describe('Include file metadata in response'), maxSize: zod_1.z.number().int().positive().optional().describe('Maximum file size to read (bytes)'), chunkIfLarge: zod_1.z.boolean().optional().describe('Automatically chunk large files') }).optional().describe('Operation preferences') }); // Discover Intent Schema exports.discoverSchema = zod_1.z.object({ purpose: zod_1.z.enum(['list', 'search_content', 'search_semantic']).describe('Type of discovery operation'), target: zod_1.z.object({ path: zod_1.z.string().min(1).describe('Directory path to search within'), query: zod_1.z.string().optional().describe('Search query for content matching'), criteria: zod_1.z.object({ content: zod_1.z.string().optional().describe('Content pattern to search for'), extension: zod_1.z.string().optional().describe('File extension filter'), modified: zod_1.z.object({ after: zod_1.z.date().optional().describe('Files modified after this date'), before: zod_1.z.date().optional().describe('Files modified before this date') }).optional().describe('Date range filter'), size: zod_1.z.object({ min: zod_1.z.number().int().nonnegative().optional().describe('Minimum file size (bytes)'), max: zod_1.z.number().int().positive().optional().describe('Maximum file size (bytes)') }).optional().describe('File size range filter') }).optional().describe('Advanced search criteria') }).describe('Search target specification'), options: zod_1.z.object({ recursive: zod_1.z.boolean().optional().describe('Search subdirectories recursively'), maxResults: zod_1.z.number().int().positive().optional().describe('Maximum number of results to return'), includeContent: zod_1.z.boolean().optional().describe('Include file content in results'), followRelationships: zod_1.z.boolean().optional().describe('Follow document relationships in semantic search') }).optional().describe('Search options') }); // Update Intent Schema exports.updateSchema = zod_1.z.object({ purpose: zod_1.z.enum(['create', 'update', 'append', 'delete']).describe('Type of update operation'), target: zod_1.z.object({ path: zod_1.z.string().min(1).describe('Path where to create/update the file') }).describe('Target file specification'), content: zod_1.z.string().optional().describe('File content to write (required for content operations)'), options: zod_1.z.object({ createPath: zod_1.z.boolean().optional().describe('Create parent directories if needed'), backup: zod_1.z.boolean().optional().describe('Create backup before updating'), atomic: zod_1.z.boolean().optional().describe('Use atomic write operations'), preserveRelationships: zod_1.z.boolean().optional().describe('Preserve document relationships during updates') }).optional().describe('Update options') }).refine((data) => { // Content is required for create, update, and append operations const contentRequiredOps = ['create', 'update', 'append']; if (contentRequiredOps.includes(data.purpose) && !data.content) { return false; } return true; }, { message: "Content is required for create, update, and append operations", path: ['content'] }); // Output Schemas // File operation result schema exports.fileOutputSchema = zod_1.z.object({ success: zod_1.z.boolean().describe('Whether the operation succeeded'), content: zod_1.z.string().optional().describe('File content (for read operations)'), exists: zod_1.z.boolean().optional().describe('Whether file exists (for exists operations)'), metadata: zod_1.z.object({ size: zod_1.z.number().int().nonnegative().describe('File size in bytes'), modified: zod_1.z.string().describe('Last modified date (ISO string)'), type: zod_1.z.enum(['file', 'directory']).describe('Type of filesystem entry'), permissions: zod_1.z.string().optional().describe('File permissions (if available)') }).optional().describe('File metadata'), error: zod_1.z.string().optional().describe('Error message if operation failed'), executionMetadata: zod_1.z.object({ executionTime: zod_1.z.number().optional().describe('Operation execution time in milliseconds'), filesAccessed: zod_1.z.array(zod_1.z.string()).optional().describe('Files accessed during operation'), operationType: zod_1.z.string().optional().describe('Type of operation performed') }).optional().describe('Operation metadata') }); // Search operation result schema exports.searchOutputSchema = zod_1.z.object({ success: zod_1.z.boolean().describe('Whether the operation succeeded'), results: zod_1.z.array(zod_1.z.object({ path: zod_1.z.string().describe('File/directory path'), type: zod_1.z.enum(['file', 'directory']).describe('Type of filesystem entry'), content: zod_1.z.string().optional().describe('File content (if requested)'), snippet: zod_1.z.string().optional().describe('Content snippet for search results'), relevance: zod_1.z.number().min(0).max(1).optional().describe('Relevance score for semantic search'), metadata: zod_1.z.object({ size: zod_1.z.number().int().nonnegative().describe('File size in bytes'), modified: zod_1.z.string().describe('Last modified date (ISO string)') }).optional().describe('File metadata') })).describe('Array of found files/directories'), totalResults: zod_1.z.number().int().nonnegative().describe('Total number of results found'), error: zod_1.z.string().optional().describe('Error message if operation failed'), executionMetadata: zod_1.z.object({ executionTime: zod_1.z.number().optional().describe('Operation execution time in milliseconds'), filesAccessed: zod_1.z.array(zod_1.z.string()).optional().describe('Files accessed during operation'), operationType: zod_1.z.string().optional().describe('Type of operation performed') }).optional().describe('Operation metadata') }); // Update operation result schema exports.updateOutputSchema = zod_1.z.object({ success: zod_1.z.boolean().describe('Whether the operation succeeded'), created: zod_1.z.boolean().optional().describe('Whether file was created (vs updated)'), deleted: zod_1.z.boolean().optional().describe('Whether file was deleted'), path: zod_1.z.string().optional().describe('Path of the modified file'), backupPath: zod_1.z.string().optional().describe('Backup file path (if backup was created)'), error: zod_1.z.string().optional().describe('Error message if operation failed'), executionMetadata: zod_1.z.object({ executionTime: zod_1.z.number().optional().describe('Operation execution time in milliseconds'), filesAccessed: zod_1.z.array(zod_1.z.string()).optional().describe('Files accessed during operation'), operationType: zod_1.z.string().optional().describe('Type of operation performed') }).optional().describe('Operation metadata') }); // Schema map for easy access exports.schemas = { access: exports.accessSchema, discover: exports.discoverSchema, update: exports.updateSchema }; exports.outputSchemas = { file: exports.fileOutputSchema, search: exports.searchOutputSchema, update: exports.updateOutputSchema }; //# sourceMappingURL=index.js.map