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
JavaScript
"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