@utilarium/overcontext 0.0.4-dev.0 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/query-builder.d.ts +3 -0
- package/dist/api/query-builder.js +11 -4
- package/dist/api/query-builder.js.map +1 -1
- package/dist/api/search.js +33 -3
- package/dist/api/search.js.map +1 -1
- package/dist/discovery/hierarchical-provider.js +10 -1
- package/dist/discovery/hierarchical-provider.js.map +1 -1
- package/dist/discovery/walker.js +14 -0
- package/dist/discovery/walker.js.map +1 -1
- package/dist/index.cjs +173 -20
- package/dist/index.cjs.map +1 -1
- package/dist/schema/base.js +3 -1
- package/dist/schema/base.js.map +1 -1
- package/dist/storage/filesystem.js +87 -7
- package/dist/storage/filesystem.js.map +1 -1
- package/dist/storage/memory.js +16 -4
- package/dist/storage/memory.js.map +1 -1
- package/dist/storage/observable.js +1 -0
- package/dist/storage/observable.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/schema/base.ts","../src/schema/inference.ts","../src/schema/validation.ts","../src/schema/registry.ts","../src/schema/builder.ts","../src/storage/errors.ts","../src/storage/observable.ts","../src/storage/filesystem.ts","../src/storage/memory.ts","../src/api/slug.ts","../src/api/search.ts","../src/api/context.ts","../src/api/builder.ts","../src/api/query-builder.ts","../src/namespace/resolver.ts","../src/namespace/multi-context.ts","../src/discovery/walker.ts","../src/discovery/context-root.ts","../src/discovery/hierarchical-provider.ts","../src/discovery/index.ts","../src/cli/formatters.ts","../src/cli/commands.ts","../src/cli/builder.ts"],"sourcesContent":["import { z } from 'zod';\n\n/**\n * Metadata that overcontext manages automatically.\n * Consumers don't need to define these.\n */\nexport const EntityMetadataSchema = z.object({\n createdAt: z.date().optional(),\n updatedAt: z.date().optional(),\n createdBy: z.string().optional(), // Tool that created this entity\n namespace: z.string().optional(), // Which namespace this came from\n source: z.string().optional(), // File path or storage key\n});\n\nexport type EntityMetadata = z.infer<typeof EntityMetadataSchema>;\n\n/**\n * The minimal contract every entity must satisfy.\n * Consuming libraries extend this with their own fields.\n */\nexport const BaseEntitySchema = z.object({\n /** Unique identifier within the entity type (used as filename) */\n id: z.string().min(1),\n\n /** Human-readable name (used for display and search) */\n name: z.string().min(1),\n\n /** Entity type discriminator (must be a string literal in extensions) */\n type: z.string().min(1),\n\n /** Optional notes - common enough to include in base */\n notes: z.string().optional(),\n}).merge(EntityMetadataSchema);\n\nexport type BaseEntity = z.infer<typeof BaseEntitySchema>;\n","import { z } from 'zod';\nimport { BaseEntitySchema, BaseEntity } from './base';\n\n/**\n * A valid entity schema must extend BaseEntitySchema.\n * The type field should be a literal (e.g., z.literal('person')).\n */\nexport type EntitySchema<T extends BaseEntity = BaseEntity> = z.ZodType<T> & {\n _input: T;\n _output: T;\n};\n\n/**\n * Helper to create a properly typed entity schema.\n * Ensures the schema extends BaseEntitySchema.\n */\nexport const createEntitySchema = <\n TType extends string,\n TExtension extends z.ZodRawShape\n>(\n typeName: TType,\n extension: TExtension\n ) => {\n return BaseEntitySchema.extend({\n type: z.literal(typeName),\n ...extension,\n });\n};\n\n/**\n * Extract the type literal from an entity schema.\n */\nexport type EntityTypeFromSchema<T extends z.ZodType<BaseEntity>> =\n T extends z.ZodType<infer U> ? (U extends { type: infer TType } ? TType : never) : never;\n\n/**\n * Extract the full entity type from a schema.\n */\nexport type InferEntity<T extends z.ZodType<BaseEntity>> = z.infer<T>;\n","import { z, ZodError } from 'zod';\nimport { BaseEntity, BaseEntitySchema } from './base';\n\nexport interface ValidationResult<T> {\n success: boolean;\n data?: T;\n errors?: Array<{ path: string; message: string }>;\n}\n\n/**\n * Validate that an object satisfies at least the base entity contract.\n */\nexport const validateBaseEntity = (data: unknown): ValidationResult<BaseEntity> => {\n const result = BaseEntitySchema.safeParse(data);\n\n if (result.success) {\n return { success: true, data: result.data };\n }\n\n return {\n success: false,\n errors: result.error.issues.map(e => ({\n path: e.path.join('.'),\n message: e.message,\n })),\n };\n};\n\n/**\n * Validate data against a specific schema.\n */\nexport const validateEntity = <T extends BaseEntity>(\n schema: z.ZodType<T>,\n data: unknown\n): ValidationResult<T> => {\n const result = schema.safeParse(data);\n\n if (result.success) {\n return { success: true, data: result.data };\n }\n\n return {\n success: false,\n errors: result.error.issues.map(e => ({\n path: e.path.join('.'),\n message: e.message,\n })),\n };\n};\n\n/**\n * Check if data extends the base entity (has id, name, type).\n */\nexport const isBaseEntity = (data: unknown): data is BaseEntity => {\n return validateBaseEntity(data).success;\n};\n\n/**\n * Format Zod errors into a readable message.\n */\nexport const formatValidationErrors = (errors: ZodError): string => {\n return errors.issues\n .map(e => `${e.path.join('.')}: ${e.message}`)\n .join('; ');\n};\n","import { z } from 'zod';\nimport { BaseEntity } from './base';\nimport { validateEntity, ValidationResult } from './validation';\n\n/**\n * A map of entity type names to their Zod schemas.\n */\nexport type SchemaMap = Record<string, z.ZodType<BaseEntity>>;\n\n/**\n * Options for schema registration.\n */\nexport interface SchemaRegistrationOptions {\n /** The type name (should match the schema's type literal) */\n type: string;\n\n /** The Zod schema for this entity type */\n schema: z.ZodType<BaseEntity>;\n\n /** Plural name for directory (e.g., 'people' for 'person') */\n pluralName?: string;\n\n /** Additional validation beyond schema */\n customValidator?: (entity: BaseEntity) => ValidationResult<BaseEntity>;\n}\n\n/**\n * Registered schema with metadata.\n */\nexport interface RegisteredSchema {\n type: string;\n schema: z.ZodType<BaseEntity>;\n pluralName: string;\n customValidator?: (entity: BaseEntity) => ValidationResult<BaseEntity>;\n}\n\n/**\n * Schema registry for managing entity schemas.\n */\nexport interface SchemaRegistry {\n /**\n * Register a schema for an entity type.\n */\n register(options: SchemaRegistrationOptions): void;\n\n /**\n * Register multiple schemas at once.\n */\n registerAll(schemas: SchemaMap): void;\n\n /**\n * Get the schema for a type.\n */\n get(type: string): RegisteredSchema | undefined;\n\n /**\n * Check if a type is registered.\n */\n has(type: string): boolean;\n\n /**\n * Get all registered type names.\n */\n types(): string[];\n\n /**\n * Get the directory name for a type.\n */\n getDirectoryName(type: string): string | undefined;\n\n /**\n * Get the type from a directory name.\n */\n getTypeFromDirectory(directory: string): string | undefined;\n\n /**\n * Validate an entity against its registered schema.\n */\n validate<T extends BaseEntity>(entity: T): ValidationResult<T>;\n\n /**\n * Validate data as a specific type.\n */\n validateAs<T extends BaseEntity>(type: string, data: unknown): ValidationResult<T>;\n}\n\n/**\n * Default plural name derivation.\n */\nconst derivePluralName = (type: string): string => {\n // Simple pluralization rules\n if (type.endsWith('y')) {\n return type.slice(0, -1) + 'ies';\n }\n if (type.endsWith('s') || type.endsWith('x') || type.endsWith('ch') || type.endsWith('sh')) {\n return type + 'es';\n }\n return type + 's';\n};\n\n/**\n * Create a new schema registry.\n */\nexport const createSchemaRegistry = (): SchemaRegistry => {\n const schemas = new Map<string, RegisteredSchema>();\n const directoryToType = new Map<string, string>();\n\n const register = (options: SchemaRegistrationOptions): void => {\n const { type, schema, pluralName, customValidator } = options;\n\n const plural = pluralName || derivePluralName(type);\n\n const registered: RegisteredSchema = {\n type,\n schema,\n pluralName: plural,\n customValidator,\n };\n\n schemas.set(type, registered);\n directoryToType.set(plural, type);\n };\n\n const registerAll = (schemaMap: SchemaMap): void => {\n for (const [type, schema] of Object.entries(schemaMap)) {\n register({ type, schema });\n }\n };\n\n const get = (type: string): RegisteredSchema | undefined => {\n return schemas.get(type);\n };\n\n const has = (type: string): boolean => {\n return schemas.has(type);\n };\n\n const types = (): string[] => {\n return Array.from(schemas.keys());\n };\n\n const getDirectoryName = (type: string): string | undefined => {\n return schemas.get(type)?.pluralName;\n };\n\n const getTypeFromDirectory = (directory: string): string | undefined => {\n return directoryToType.get(directory);\n };\n\n const validate = <T extends BaseEntity>(entity: T): ValidationResult<T> => {\n const registered = schemas.get(entity.type);\n\n if (!registered) {\n return {\n success: false,\n errors: [{ path: 'type', message: `Unknown entity type: ${entity.type}` }],\n };\n }\n\n // Schema validation\n const schemaResult = validateEntity(registered.schema, entity);\n if (!schemaResult.success) {\n return schemaResult as ValidationResult<T>;\n }\n\n // Custom validation\n if (registered.customValidator) {\n return registered.customValidator(entity) as ValidationResult<T>;\n }\n\n return { success: true, data: entity };\n };\n\n const validateAs = <T extends BaseEntity>(\n type: string,\n data: unknown\n ): ValidationResult<T> => {\n const registered = schemas.get(type);\n\n if (!registered) {\n return {\n success: false,\n errors: [{ path: 'type', message: `Unknown entity type: ${type}` }],\n };\n }\n\n // Add type to data if missing (for convenience when loading from files)\n const withType = typeof data === 'object' && data !== null\n ? { ...data, type }\n : data;\n\n return validateEntity(registered.schema, withType) as ValidationResult<T>;\n };\n\n return {\n register,\n registerAll,\n get,\n has,\n types,\n getDirectoryName,\n getTypeFromDirectory,\n validate,\n validateAs,\n };\n};\n","import { z } from 'zod';\nimport { BaseEntity } from './base';\n\n/**\n * Type-safe builder for schema maps.\n * Ensures type inference works correctly.\n */\nexport type SchemaMapBuilder<T extends Record<string, z.ZodType<BaseEntity>>> = {\n schemas: T;\n types: { [K in keyof T]: z.infer<T[K]> };\n};\n\n/**\n * Create a schema map with proper type inference.\n * \n * @example\n * const { schemas, types } = defineSchemas({\n * person: PersonSchema,\n * project: ProjectSchema,\n * });\n * \n * type Person = typeof types.person; // Inferred from PersonSchema\n */\nexport const defineSchemas = <T extends Record<string, z.ZodType<BaseEntity>>>(\n schemas: T\n): SchemaMapBuilder<T> => {\n return {\n schemas,\n types: {} as { [K in keyof T]: z.infer<T[K]> },\n };\n};\n\n/**\n * Helper to check if a schema extends BaseEntity properly.\n */\nexport const isValidEntitySchema = (schema: z.ZodType<unknown>): boolean => {\n try {\n // BaseEntitySchema allows extra fields, so we just need id, name, type\n const result = schema.safeParse({\n id: 'test',\n name: 'Test',\n type: 'test',\n });\n // If it fails, it might be because type is a literal\n // Try without type and check if it has the base structure\n if (!result.success) {\n return false;\n }\n return true;\n } catch {\n return false;\n }\n};\n","export class StorageError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly cause?: Error\n ) {\n super(message);\n this.name = 'StorageError';\n }\n}\n\nexport class EntityNotFoundError extends StorageError {\n constructor(\n public readonly entityType: string,\n public readonly entityId: string,\n public readonly namespace?: string\n ) {\n super(\n `Entity not found: ${entityType}/${entityId}${namespace ? ` in ${namespace}` : ''}`,\n 'ENTITY_NOT_FOUND'\n );\n this.name = 'EntityNotFoundError';\n }\n}\n\nexport class SchemaNotRegisteredError extends StorageError {\n constructor(public readonly entityType: string) {\n super(\n `Schema not registered for type: ${entityType}`,\n 'SCHEMA_NOT_REGISTERED'\n );\n this.name = 'SchemaNotRegisteredError';\n }\n}\n\nexport class ValidationError extends StorageError {\n constructor(\n message: string,\n public readonly validationErrors: Array<{ path: string; message: string }>\n ) {\n super(message, 'VALIDATION_ERROR');\n this.name = 'ValidationError';\n }\n}\n\nexport class StorageAccessError extends StorageError {\n constructor(message: string, cause?: Error) {\n super(message, 'STORAGE_ACCESS_ERROR', cause);\n this.name = 'StorageAccessError';\n }\n}\n\nexport class ReadonlyStorageError extends StorageError {\n constructor() {\n super('Storage is readonly', 'READONLY_STORAGE');\n this.name = 'ReadonlyStorageError';\n }\n}\n\nexport class NamespaceNotFoundError extends StorageError {\n constructor(public readonly namespace: string) {\n super(`Namespace not found: ${namespace}`, 'NAMESPACE_NOT_FOUND');\n this.name = 'NamespaceNotFoundError';\n }\n}\n","import { BaseEntity } from '../schema/base';\nimport { StorageProvider } from './interface';\nimport {\n StorageEventHandler,\n AnyStorageEvent,\n ObservableStorageProvider,\n} from './events';\n\n/**\n * Wrap any StorageProvider to make it observable.\n */\nexport const createObservableProvider = (\n provider: StorageProvider\n): ObservableStorageProvider => {\n const handlers = new Set<StorageEventHandler>();\n\n const emit = (event: AnyStorageEvent): void => {\n handlers.forEach(handler => {\n try {\n handler(event);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Storage event handler error:', error);\n }\n });\n };\n\n return {\n ...provider,\n\n subscribe(handler: StorageEventHandler): () => void {\n handlers.add(handler);\n return () => handlers.delete(handler);\n },\n\n async initialize(): Promise<void> {\n await provider.initialize();\n emit({ type: 'storage:initialized', timestamp: new Date() });\n },\n\n async dispose(): Promise<void> {\n emit({ type: 'storage:disposed', timestamp: new Date() });\n await provider.dispose();\n },\n\n async save<T extends BaseEntity>(entity: T, namespace?: string): Promise<T> {\n const existing = await provider.get(entity.type, entity.id, namespace);\n const saved = await provider.save(entity, namespace);\n\n if (existing) {\n emit({\n type: 'entity:updated',\n timestamp: new Date(),\n namespace,\n entityType: entity.type,\n entityId: entity.id,\n entity: saved,\n previousEntity: existing,\n });\n } else {\n emit({\n type: 'entity:created',\n timestamp: new Date(),\n namespace,\n entityType: entity.type,\n entityId: entity.id,\n entity: saved,\n });\n }\n\n return saved;\n },\n\n async delete(type: string, id: string, namespace?: string): Promise<boolean> {\n const deleted = await provider.delete(type, id, namespace);\n\n if (deleted) {\n emit({\n type: 'entity:deleted',\n timestamp: new Date(),\n namespace,\n entityType: type,\n entityId: id,\n });\n }\n\n return deleted;\n },\n\n async saveBatch<T extends BaseEntity>(entities: T[], namespace?: string): Promise<T[]> {\n const saved = await provider.saveBatch(entities, namespace);\n\n emit({\n type: 'batch:saved',\n timestamp: new Date(),\n namespace,\n entities: saved,\n });\n\n return saved;\n },\n\n async deleteBatch(\n refs: Array<{ type: string; id: string }>,\n namespace?: string\n ): Promise<number> {\n const count = await provider.deleteBatch(refs, namespace);\n\n emit({\n type: 'batch:deleted',\n timestamp: new Date(),\n namespace,\n refs,\n deletedCount: count,\n });\n\n return count;\n },\n };\n};\n","import * as fs from 'node:fs/promises';\nimport { existsSync, statSync } from 'node:fs';\nimport * as path from 'node:path';\nimport * as yaml from 'js-yaml';\nimport {\n StorageProvider,\n StorageProviderOptions,\n EntityFilter,\n} from './interface';\nimport { BaseEntity } from '../schema/base';\nimport {\n StorageAccessError,\n ValidationError,\n SchemaNotRegisteredError,\n ReadonlyStorageError,\n} from './errors';\n\nexport interface FileSystemProviderOptions extends StorageProviderOptions {\n /** Base path for context storage */\n basePath: string;\n\n /** Create directories if they don't exist */\n createIfMissing?: boolean;\n\n /** File extension to use (default: .yaml) */\n extension?: '.yaml' | '.yml';\n}\n\nexport const createFileSystemProvider = async (\n options: FileSystemProviderOptions\n): Promise<StorageProvider> => {\n const {\n basePath,\n registry,\n createIfMissing = true,\n extension = '.yaml',\n readonly = false,\n defaultNamespace,\n } = options;\n\n // --- Helper Functions ---\n\n const getEntityDir = (type: string, namespace?: string): string => {\n const dirName = registry.getDirectoryName(type);\n if (!dirName) {\n throw new SchemaNotRegisteredError(type);\n }\n\n if (namespace) {\n return path.join(basePath, namespace, dirName);\n }\n return path.join(basePath, dirName);\n };\n\n const getEntityPath = (type: string, id: string, namespace?: string): string => {\n return path.join(getEntityDir(type, namespace), `${id}${extension}`);\n };\n\n const ensureDir = async (dir: string): Promise<void> => {\n if (!existsSync(dir) && createIfMissing && !readonly) {\n await fs.mkdir(dir, { recursive: true });\n }\n };\n\n const readEntity = async <T extends BaseEntity>(\n filePath: string,\n type: string\n ): Promise<T | undefined> => {\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n \n let parsed: unknown;\n try {\n parsed = yaml.load(content);\n } catch (yamlError) {\n // eslint-disable-next-line no-console\n console.warn(`Invalid YAML at ${filePath}:`, yamlError);\n return undefined;\n }\n\n if (!parsed || typeof parsed !== 'object') {\n return undefined;\n }\n\n // Validate against registered schema\n const result = registry.validateAs<T>(type, {\n ...(parsed as Record<string, unknown>),\n source: filePath,\n });\n\n if (!result.success) {\n // eslint-disable-next-line no-console\n console.warn(`Invalid entity at ${filePath}:`, result.errors);\n return undefined;\n }\n\n return result.data;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n return undefined;\n }\n throw new StorageAccessError(`Failed to read ${filePath}`, error as Error);\n }\n };\n\n const writeEntity = async <T extends BaseEntity>(\n entity: T,\n namespace?: string\n ): Promise<T> => {\n if (readonly) {\n throw new ReadonlyStorageError();\n }\n\n // Validate against schema\n const validationResult = registry.validate(entity);\n if (!validationResult.success) {\n throw new ValidationError(\n 'Entity validation failed',\n validationResult.errors || []\n );\n }\n\n const dir = getEntityDir(entity.type, namespace);\n await ensureDir(dir);\n\n const filePath = getEntityPath(entity.type, entity.id, namespace);\n\n // Remove framework-managed fields from saved YAML\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { type: _type, source: _source, ...entityToSave } = entity;\n\n // Update metadata\n const now = new Date();\n const toSave = {\n ...entityToSave,\n updatedAt: now,\n createdAt: entityToSave.createdAt || now,\n };\n\n const content = yaml.dump(toSave, {\n lineWidth: -1,\n sortKeys: false,\n });\n await fs.writeFile(filePath, content, 'utf-8');\n\n return {\n ...entity,\n ...toSave,\n type: entity.type,\n source: filePath,\n } as T;\n };\n\n const listDirectoryTypes = async (basePath: string): Promise<string[]> => {\n const types: string[] = [];\n\n try {\n const entries = await fs.readdir(basePath, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const type = registry.getTypeFromDirectory(entry.name);\n if (type) {\n types.push(type);\n }\n }\n }\n } catch {\n // Directory doesn't exist\n }\n\n return types;\n };\n\n // --- StorageProvider Implementation ---\n\n const provider: StorageProvider = {\n name: 'filesystem',\n location: basePath,\n registry,\n\n async initialize(): Promise<void> {\n if (createIfMissing && !readonly) {\n await ensureDir(basePath);\n }\n\n if (!existsSync(basePath)) {\n throw new StorageAccessError(`Context path does not exist: ${basePath}`);\n }\n },\n\n async dispose(): Promise<void> {\n // No cleanup needed for filesystem\n },\n\n async isAvailable(): Promise<boolean> {\n try {\n const stat = statSync(basePath);\n return stat.isDirectory();\n } catch {\n return false;\n }\n },\n\n async get<T extends BaseEntity>(\n type: string,\n id: string,\n namespace?: string\n ): Promise<T | undefined> {\n const ns = namespace ?? defaultNamespace;\n const filePath = getEntityPath(type, id, ns);\n return readEntity<T>(filePath, type);\n },\n\n async getAll<T extends BaseEntity>(\n type: string,\n namespace?: string\n ): Promise<T[]> {\n const ns = namespace ?? defaultNamespace;\n\n let dir: string;\n try {\n dir = getEntityDir(type, ns);\n } catch (error) {\n if (error instanceof SchemaNotRegisteredError) {\n return [];\n }\n throw error;\n }\n\n if (!existsSync(dir)) {\n return [];\n }\n\n const files = await fs.readdir(dir);\n const entities: T[] = [];\n\n for (const file of files) {\n if (!file.endsWith('.yaml') && !file.endsWith('.yml')) {\n continue;\n }\n\n const entity = await readEntity<T>(path.join(dir, file), type);\n if (entity) {\n entities.push(entity);\n }\n }\n\n return entities;\n },\n\n async find<T extends BaseEntity>(filter: EntityFilter): Promise<T[]> {\n let results: T[] = [];\n\n const types = filter.type\n ? (Array.isArray(filter.type) ? filter.type : [filter.type])\n : registry.types();\n\n const namespace = filter.namespace ?? defaultNamespace;\n\n for (const type of types) {\n const entities = await this.getAll<T>(type, namespace);\n results = results.concat(entities);\n }\n\n // Apply ID filter\n if (filter.ids?.length) {\n results = results.filter(e => filter.ids!.includes(e.id));\n }\n\n // Apply search filter\n if (filter.search) {\n const searchLower = filter.search.toLowerCase();\n results = results.filter(e =>\n e.name.toLowerCase().includes(searchLower)\n );\n }\n\n // Apply pagination\n if (filter.offset) {\n results = results.slice(filter.offset);\n }\n if (filter.limit) {\n results = results.slice(0, filter.limit);\n }\n\n return results;\n },\n\n async exists(type: string, id: string, namespace?: string): Promise<boolean> {\n const ns = namespace ?? defaultNamespace;\n try {\n const filePath = getEntityPath(type, id, ns);\n return existsSync(filePath);\n } catch {\n return false;\n }\n },\n\n async count(filter: EntityFilter): Promise<number> {\n const results = await this.find(filter);\n return results.length;\n },\n\n async save<T extends BaseEntity>(entity: T, namespace?: string): Promise<T> {\n const ns = namespace ?? defaultNamespace;\n return writeEntity(entity, ns);\n },\n\n async delete(type: string, id: string, namespace?: string): Promise<boolean> {\n if (readonly) {\n throw new ReadonlyStorageError();\n }\n\n const ns = namespace ?? defaultNamespace;\n\n try {\n const filePath = getEntityPath(type, id, ns);\n await fs.unlink(filePath);\n return true;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n return false;\n }\n throw error;\n }\n },\n\n async saveBatch<T extends BaseEntity>(\n entities: T[],\n namespace?: string\n ): Promise<T[]> {\n const saved: T[] = [];\n for (const entity of entities) {\n saved.push(await this.save(entity, namespace));\n }\n return saved;\n },\n\n async deleteBatch(\n refs: Array<{ type: string; id: string }>,\n namespace?: string\n ): Promise<number> {\n let count = 0;\n for (const ref of refs) {\n if (await this.delete(ref.type, ref.id, namespace)) {\n count++;\n }\n }\n return count;\n },\n\n async listNamespaces(): Promise<string[]> {\n const namespaces: string[] = [];\n\n if (!existsSync(basePath)) {\n return namespaces;\n }\n\n const entries = await fs.readdir(basePath, { withFileTypes: true });\n\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n\n // Check if it's a namespace (contains entity type directories)\n // vs being an entity type directory itself\n const subPath = path.join(basePath, entry.name);\n const subTypes = await listDirectoryTypes(subPath);\n\n if (subTypes.length > 0) {\n namespaces.push(entry.name);\n }\n }\n\n return namespaces;\n },\n\n async namespaceExists(namespace: string): Promise<boolean> {\n const namespacePath = path.join(basePath, namespace);\n return existsSync(namespacePath);\n },\n\n async listTypes(namespace?: string): Promise<string[]> {\n const ns = namespace ?? defaultNamespace;\n const searchPath = ns ? path.join(basePath, ns) : basePath;\n return listDirectoryTypes(searchPath);\n },\n };\n\n return provider;\n};\n","import { StorageProvider, StorageProviderOptions, EntityFilter } from './interface';\nimport { BaseEntity } from '../schema/base';\nimport { ValidationError, ReadonlyStorageError } from './errors';\n\nexport interface MemoryProviderOptions extends StorageProviderOptions {\n /** Initial data to populate */\n initialData?: BaseEntity[];\n}\n\nexport const createMemoryProvider = (\n options: MemoryProviderOptions\n): StorageProvider => {\n const { registry, readonly = false, defaultNamespace, initialData = [] } = options;\n\n // Storage: namespace -> type -> id -> entity\n const store = new Map<string, Map<string, Map<string, BaseEntity>>>();\n\n const getNamespaceStore = (namespace: string): Map<string, Map<string, BaseEntity>> => {\n if (!store.has(namespace)) {\n store.set(namespace, new Map());\n }\n return store.get(namespace)!;\n };\n\n const getTypeStore = (\n namespace: string,\n type: string\n ): Map<string, BaseEntity> => {\n const nsStore = getNamespaceStore(namespace);\n if (!nsStore.has(type)) {\n nsStore.set(type, new Map());\n }\n return nsStore.get(type)!;\n };\n\n const resolveNamespace = (ns?: string): string => ns ?? defaultNamespace ?? '_default';\n\n // Initialize with any provided data\n for (const entity of initialData) {\n const ns = resolveNamespace(entity.namespace);\n getTypeStore(ns, entity.type).set(entity.id, entity);\n }\n\n return {\n name: 'memory',\n location: 'in-memory',\n registry,\n\n async initialize() { },\n\n async dispose() {\n store.clear();\n },\n\n async isAvailable() {\n return true;\n },\n\n async get<T extends BaseEntity>(\n type: string,\n id: string,\n namespace?: string\n ): Promise<T | undefined> {\n const ns = resolveNamespace(namespace);\n return getTypeStore(ns, type).get(id) as T | undefined;\n },\n\n async getAll<T extends BaseEntity>(\n type: string,\n namespace?: string\n ): Promise<T[]> {\n const ns = resolveNamespace(namespace);\n return Array.from(getTypeStore(ns, type).values()) as T[];\n },\n\n async find<T extends BaseEntity>(filter: EntityFilter): Promise<T[]> {\n let results: T[] = [];\n\n const types = filter.type\n ? (Array.isArray(filter.type) ? filter.type : [filter.type])\n : registry.types();\n\n const ns = resolveNamespace(filter.namespace);\n\n for (const type of types) {\n results = results.concat(await this.getAll<T>(type, ns));\n }\n\n if (filter.ids?.length) {\n results = results.filter(e => filter.ids!.includes(e.id));\n }\n\n if (filter.search) {\n const s = filter.search.toLowerCase();\n results = results.filter(e => e.name.toLowerCase().includes(s));\n }\n\n if (filter.offset) results = results.slice(filter.offset);\n if (filter.limit) results = results.slice(0, filter.limit);\n\n return results;\n },\n\n async exists(type: string, id: string, namespace?: string): Promise<boolean> {\n const ns = resolveNamespace(namespace);\n return getTypeStore(ns, type).has(id);\n },\n\n async count(filter: EntityFilter): Promise<number> {\n return (await this.find(filter)).length;\n },\n\n async save<T extends BaseEntity>(entity: T, namespace?: string): Promise<T> {\n if (readonly) {\n throw new ReadonlyStorageError();\n }\n\n const validationResult = registry.validate(entity);\n if (!validationResult.success) {\n throw new ValidationError(\n 'Validation failed',\n validationResult.errors || []\n );\n }\n\n const ns = resolveNamespace(namespace);\n const now = new Date();\n const existing = getTypeStore(ns, entity.type).get(entity.id);\n\n const saved = {\n ...entity,\n namespace: ns,\n createdAt: existing?.createdAt || now,\n updatedAt: now,\n } as T;\n\n getTypeStore(ns, entity.type).set(entity.id, saved);\n return saved;\n },\n\n async delete(type: string, id: string, namespace?: string): Promise<boolean> {\n if (readonly) {\n throw new ReadonlyStorageError();\n }\n\n const ns = resolveNamespace(namespace);\n return getTypeStore(ns, type).delete(id);\n },\n\n async saveBatch<T extends BaseEntity>(\n entities: T[],\n namespace?: string\n ): Promise<T[]> {\n return Promise.all(entities.map(e => this.save(e, namespace)));\n },\n\n async deleteBatch(\n refs: Array<{ type: string; id: string }>,\n namespace?: string\n ): Promise<number> {\n let count = 0;\n for (const ref of refs) {\n if (await this.delete(ref.type, ref.id, namespace)) count++;\n }\n return count;\n },\n\n async listNamespaces(): Promise<string[]> {\n return Array.from(store.keys()).filter(ns => ns !== '_default');\n },\n\n async namespaceExists(namespace: string): Promise<boolean> {\n return store.has(namespace);\n },\n\n async listTypes(namespace?: string): Promise<string[]> {\n const ns = resolveNamespace(namespace);\n const nsStore = store.get(ns);\n return nsStore ? Array.from(nsStore.keys()) : [];\n },\n };\n};\n","/**\n * Generate a slug from a name.\n * \"John Doe\" -> \"john-doe\"\n * \"API Reference\" -> \"api-reference\"\n */\nexport const slugify = (name: string): string => {\n const cleaned = name\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, '') // Remove non-word chars\n .replace(/[\\s_]+/g, '-'); // Replace spaces/underscores\n \n // Single-pass algorithm to collapse hyphens and trim (avoid ReDoS)\n const result: string[] = [];\n let prevWasHyphen = false;\n let startIdx = 0;\n let endIdx = cleaned.length;\n \n // Skip leading hyphens\n while (startIdx < cleaned.length && cleaned[startIdx] === '-') {\n startIdx++;\n }\n \n // Skip trailing hyphens\n while (endIdx > startIdx && cleaned[endIdx - 1] === '-') {\n endIdx--;\n }\n \n // Build result, collapsing consecutive hyphens\n for (let i = startIdx; i < endIdx; i++) {\n const char = cleaned[i];\n if (char === '-') {\n if (!prevWasHyphen) {\n result.push('-');\n prevWasHyphen = true;\n }\n } else {\n result.push(char);\n prevWasHyphen = false;\n }\n }\n \n return result.join('');\n};\n\n/**\n * Generate a unique ID, appending a number if needed.\n */\nexport const generateUniqueId = async (\n baseName: string,\n exists: (id: string) => Promise<boolean>\n): Promise<string> => {\n const baseId = slugify(baseName);\n\n if (!await exists(baseId)) {\n return baseId;\n }\n\n // Try appending numbers\n for (let i = 2; i <= 100; i++) {\n const candidateId = `${baseId}-${i}`;\n if (!await exists(candidateId)) {\n return candidateId;\n }\n }\n\n // Fallback to timestamp\n return `${baseId}-${Date.now()}`;\n};\n","import { BaseEntity } from '../schema/base';\nimport { SchemaRegistry } from '../schema/registry';\nimport { StorageProvider } from '../storage/interface';\nimport { QueryOptions, QueryResult, SortOption } from './query';\n\nexport interface SearchEngine {\n /**\n * Search entities with filtering, pagination, and sorting.\n */\n search<T extends BaseEntity>(options: QueryOptions): Promise<QueryResult<T>>;\n\n /**\n * Quick search by name across all types.\n */\n quickSearch<T extends BaseEntity>(\n query: string,\n options?: Pick<QueryOptions, 'type' | 'namespace' | 'limit'>\n ): Promise<T[]>;\n}\n\nexport interface SearchEngineOptions {\n provider: StorageProvider;\n registry: SchemaRegistry;\n defaultNamespace?: string;\n}\n\nexport const createSearchEngine = (options: SearchEngineOptions): SearchEngine => {\n const { provider, registry, defaultNamespace } = options;\n\n const textMatch = (\n text: string | undefined,\n query: string,\n caseSensitive: boolean\n ): boolean => {\n if (!text) return false;\n const a = caseSensitive ? text : text.toLowerCase();\n const b = caseSensitive ? query : query.toLowerCase();\n return a.includes(b);\n };\n\n const matchesSearch = (\n entity: BaseEntity,\n search: string,\n searchFields: string[],\n caseSensitive: boolean\n ): boolean => {\n // Always search name\n if (textMatch(entity.name, search, caseSensitive)) {\n return true;\n }\n\n // Search additional fields\n for (const field of searchFields) {\n const value = (entity as Record<string, unknown>)[field];\n if (typeof value === 'string' && textMatch(value, search, caseSensitive)) {\n return true;\n }\n // Handle arrays of strings (like sounds_like)\n if (Array.isArray(value)) {\n for (const item of value) {\n if (typeof item === 'string' && textMatch(item, search, caseSensitive)) {\n return true;\n }\n }\n }\n }\n\n return false;\n };\n\n const sortEntities = <T extends BaseEntity>(\n entities: T[],\n sort: SortOption[]\n ): T[] => {\n return [...entities].sort((a, b) => {\n for (const { field, direction } of sort) {\n const aVal = (a as Record<string, unknown>)[field];\n const bVal = (b as Record<string, unknown>)[field];\n\n if (aVal === bVal) continue;\n if (aVal === undefined || aVal === null) return direction === 'asc' ? 1 : -1;\n if (bVal === undefined || bVal === null) return direction === 'asc' ? -1 : 1;\n\n let cmp: number;\n if (typeof aVal === 'string' && typeof bVal === 'string') {\n cmp = aVal.localeCompare(bVal);\n } else if (aVal instanceof Date && bVal instanceof Date) {\n cmp = aVal.getTime() - bVal.getTime();\n } else {\n cmp = aVal < bVal ? -1 : 1;\n }\n\n return direction === 'asc' ? cmp : -cmp;\n }\n return 0;\n });\n };\n\n return {\n async search<T extends BaseEntity>(options: QueryOptions): Promise<QueryResult<T>> {\n const {\n type,\n namespace,\n ids,\n search,\n searchFields = [],\n caseSensitive = false,\n limit,\n offset = 0,\n sort = [{ field: 'name', direction: 'asc' }],\n } = options;\n\n // Determine which types to search\n const types = type\n ? (Array.isArray(type) ? type : [type])\n : registry.types();\n\n // Determine which namespaces to search\n const namespaces = namespace\n ? (Array.isArray(namespace) ? namespace : [namespace])\n : [defaultNamespace];\n\n // Collect entities\n let allEntities: T[] = [];\n\n for (const t of types) {\n for (const ns of namespaces) {\n const entities = await provider.getAll<T>(t, ns);\n allEntities = allEntities.concat(entities);\n }\n }\n\n // Apply ID filter\n if (ids?.length) {\n allEntities = allEntities.filter(e => ids.includes(e.id));\n }\n\n // Apply search filter\n if (search) {\n allEntities = allEntities.filter(e =>\n matchesSearch(e, search, searchFields, caseSensitive)\n );\n }\n\n // Apply sorting\n allEntities = sortEntities(allEntities, sort);\n\n // Get total before pagination\n const total = allEntities.length;\n\n // Apply pagination\n const paginated = allEntities.slice(offset, limit ? offset + limit : undefined);\n\n return {\n items: paginated,\n total,\n hasMore: limit ? offset + limit < total : false,\n query: options,\n };\n },\n\n async quickSearch<T extends BaseEntity>(\n query: string,\n options: Pick<QueryOptions, 'type' | 'namespace' | 'limit'> = {}\n ): Promise<T[]> {\n const result = await this.search<T>({\n ...options,\n search: query,\n });\n return result.items;\n },\n };\n};\n","import { z } from 'zod';\nimport { BaseEntity } from '../schema/base';\nimport { SchemaRegistry, SchemaMap } from '../schema/registry';\nimport { StorageProvider } from '../storage/interface';\nimport { EntityNotFoundError } from '../storage/errors';\nimport { generateUniqueId, slugify } from './slug';\nimport { createSearchEngine } from './search';\nimport { QueryOptions, QueryResult } from './query';\n\n/**\n * Options for creating an entity.\n */\nexport interface CreateOptions {\n /** Override auto-generated ID */\n id?: string;\n\n /** Namespace to create in */\n namespace?: string;\n\n /** Whether to generate unique ID on collision */\n generateUniqueId?: boolean;\n}\n\n/**\n * Main context API for entity operations.\n * Type safety flows from registered schemas.\n */\nexport interface OvercontextAPI<TSchemas extends SchemaMap = SchemaMap> {\n /**\n * The underlying storage provider.\n */\n readonly provider: StorageProvider;\n\n /**\n * The schema registry.\n */\n readonly registry: SchemaRegistry;\n\n /**\n * Default namespace for operations.\n */\n readonly defaultNamespace?: string;\n\n // --- Generic Operations ---\n\n /**\n * Get an entity by type and ID.\n */\n get<K extends keyof TSchemas & string>(\n type: K,\n id: string,\n namespace?: string\n ): Promise<z.infer<TSchemas[K]> | undefined>;\n\n /**\n * Get all entities of a type.\n */\n getAll<K extends keyof TSchemas & string>(\n type: K,\n namespace?: string\n ): Promise<z.infer<TSchemas[K]>[]>;\n\n /**\n * Check if an entity exists.\n */\n exists(\n type: string,\n id: string,\n namespace?: string\n ): Promise<boolean>;\n\n /**\n * Create a new entity.\n */\n create<K extends keyof TSchemas & string>(\n type: K,\n data: Omit<z.infer<TSchemas[K]>, 'id' | 'type'> & { name: string },\n options?: CreateOptions\n ): Promise<z.infer<TSchemas[K]>>;\n\n /**\n * Update an existing entity.\n */\n update<K extends keyof TSchemas & string>(\n type: K,\n id: string,\n updates: Partial<Omit<z.infer<TSchemas[K]>, 'id' | 'type'>>,\n namespace?: string\n ): Promise<z.infer<TSchemas[K]>>;\n\n /**\n * Create or update an entity.\n */\n upsert<K extends keyof TSchemas & string>(\n type: K,\n entity: Omit<z.infer<TSchemas[K]>, 'type'> & { id: string; name: string },\n namespace?: string\n ): Promise<z.infer<TSchemas[K]>>;\n\n /**\n * Delete an entity.\n */\n delete(\n type: string,\n id: string,\n namespace?: string\n ): Promise<boolean>;\n\n /**\n * List all registered entity types.\n */\n types(): string[];\n\n /**\n * Create a namespaced context.\n */\n withNamespace(namespace: string): OvercontextAPI<TSchemas>;\n\n /**\n * Search entities.\n */\n search<T extends BaseEntity>(options: QueryOptions): Promise<QueryResult<T>>;\n\n /**\n * Quick search by name.\n */\n quickSearch<T extends BaseEntity>(\n query: string,\n options?: Pick<QueryOptions, 'type' | 'namespace' | 'limit'>\n ): Promise<T[]>;\n}\n\nexport interface CreateContextOptions<TSchemas extends SchemaMap> {\n provider: StorageProvider;\n registry: SchemaRegistry;\n schemas: TSchemas;\n defaultNamespace?: string;\n}\n\nexport const createContext = <TSchemas extends SchemaMap>(\n options: CreateContextOptions<TSchemas>\n): OvercontextAPI<TSchemas> => {\n const { provider, registry, defaultNamespace } = options;\n\n const resolveNamespace = (ns?: string) => ns ?? defaultNamespace;\n\n const searchEngine = createSearchEngine({\n provider,\n registry,\n defaultNamespace,\n });\n\n const api: OvercontextAPI<TSchemas> = {\n provider,\n registry,\n defaultNamespace,\n\n async get<K extends keyof TSchemas & string>(\n type: K,\n id: string,\n namespace?: string\n ): Promise<z.infer<TSchemas[K]> | undefined> {\n return provider.get(type, id, resolveNamespace(namespace));\n },\n\n async getAll<K extends keyof TSchemas & string>(\n type: K,\n namespace?: string\n ): Promise<z.infer<TSchemas[K]>[]> {\n return provider.getAll(type, resolveNamespace(namespace));\n },\n\n async exists(\n type: string,\n id: string,\n namespace?: string\n ): Promise<boolean> {\n return provider.exists(type, id, resolveNamespace(namespace));\n },\n\n async create<K extends keyof TSchemas & string>(\n type: K,\n data: Omit<z.infer<TSchemas[K]>, 'id' | 'type'> & { name: string },\n options: CreateOptions = {}\n ): Promise<z.infer<TSchemas[K]>> {\n const namespace = resolveNamespace(options.namespace);\n const shouldGenerateUnique = options.generateUniqueId ?? true;\n\n let id: string;\n if (options.id) {\n id = options.id;\n } else if (shouldGenerateUnique) {\n id = await generateUniqueId(\n data.name,\n (testId) => provider.exists(type, testId, namespace)\n );\n } else {\n id = slugify(data.name);\n }\n\n const entity = {\n ...data,\n id,\n type,\n createdAt: new Date(),\n updatedAt: new Date(),\n } as z.infer<TSchemas[K]>;\n\n return provider.save(entity, namespace);\n },\n\n async update<K extends keyof TSchemas & string>(\n type: K,\n id: string,\n updates: Partial<Omit<z.infer<TSchemas[K]>, 'id' | 'type'>>,\n namespace?: string\n ): Promise<z.infer<TSchemas[K]>> {\n const ns = resolveNamespace(namespace);\n const existing = await provider.get(type, id, ns);\n\n if (!existing) {\n throw new EntityNotFoundError(type, id, ns);\n }\n\n const updated = {\n ...existing,\n ...updates,\n id,\n type,\n updatedAt: new Date(),\n } as z.infer<TSchemas[K]>;\n\n return provider.save(updated, ns);\n },\n\n async upsert<K extends keyof TSchemas & string>(\n type: K,\n entity: Omit<z.infer<TSchemas[K]>, 'type'> & { id: string; name: string },\n namespace?: string\n ): Promise<z.infer<TSchemas[K]>> {\n const ns = resolveNamespace(namespace);\n const existing = await provider.get(type, entity.id, ns);\n\n const now = new Date();\n const toSave = {\n ...existing,\n ...entity,\n type,\n createdAt: existing?.createdAt || now,\n updatedAt: now,\n } as z.infer<TSchemas[K]>;\n\n return provider.save(toSave, ns);\n },\n\n async delete(\n type: string,\n id: string,\n namespace?: string\n ): Promise<boolean> {\n return provider.delete(type, id, resolveNamespace(namespace));\n },\n\n types(): string[] {\n return registry.types();\n },\n\n withNamespace(namespace: string): OvercontextAPI<TSchemas> {\n return createContext({\n ...options,\n defaultNamespace: namespace,\n });\n },\n\n search: searchEngine.search.bind(searchEngine),\n quickSearch: searchEngine.quickSearch.bind(searchEngine),\n };\n\n return api;\n};\n","import { z } from 'zod';\nimport { BaseEntity } from '../schema/base';\nimport { SchemaMap, createSchemaRegistry } from '../schema/registry';\nimport { StorageProvider } from '../storage/interface';\nimport { OvercontextAPI, createContext } from './context';\n\n/**\n * Helper to create a type-safe API from schemas.\n * \n * @example\n * const api = await createTypedAPI({\n * schemas: {\n * person: PersonSchema,\n * term: TermSchema,\n * },\n * provider,\n * });\n * \n * // Types flow through\n * const person = await api.get('person', 'john'); // Returns Person\n */\nexport interface TypedAPIOptions<TSchemas extends SchemaMap> {\n schemas: TSchemas;\n provider: StorageProvider;\n defaultNamespace?: string;\n\n /** Custom plural names for directory mapping */\n pluralNames?: Partial<Record<keyof TSchemas, string>>;\n}\n\nexport const createTypedAPI = <TSchemas extends SchemaMap>(\n options: TypedAPIOptions<TSchemas>\n): OvercontextAPI<TSchemas> => {\n const { schemas, provider, defaultNamespace, pluralNames = {} } = options;\n\n // Create registry from schemas\n const registry = createSchemaRegistry();\n\n for (const [type, schema] of Object.entries(schemas)) {\n registry.register({\n type,\n schema: schema as z.ZodType<BaseEntity>,\n pluralName: (pluralNames as Record<string, string>)[type],\n });\n }\n\n return createContext({\n provider,\n registry,\n schemas,\n defaultNamespace,\n });\n};\n","import { QueryOptions, SortDirection } from './query';\n\n/**\n * Fluent query builder for constructing search queries.\n */\nexport class QueryBuilder {\n private options: QueryOptions = {};\n\n /**\n * Filter by entity type(s).\n */\n type(type: string | string[]): this {\n this.options.type = type;\n return this;\n }\n\n /**\n * Filter by namespace(s).\n */\n namespace(ns: string | string[]): this {\n this.options.namespace = ns;\n return this;\n }\n\n /**\n * Filter by specific IDs.\n */\n ids(ids: string[]): this {\n this.options.ids = ids;\n return this;\n }\n\n /**\n * Add text search.\n */\n search(query: string, fields?: string[]): this {\n this.options.search = query;\n if (fields) this.options.searchFields = fields;\n return this;\n }\n\n /**\n * Enable case-sensitive search.\n */\n caseSensitive(enabled: boolean = true): this {\n this.options.caseSensitive = enabled;\n return this;\n }\n\n /**\n * Add sort field.\n */\n sortBy(field: string, direction: SortDirection = 'asc'): this {\n this.options.sort = [...(this.options.sort || []), { field, direction }];\n return this;\n }\n\n /**\n * Set result limit.\n */\n limit(n: number): this {\n this.options.limit = n;\n return this;\n }\n\n /**\n * Set result offset.\n */\n offset(n: number): this {\n this.options.offset = n;\n return this;\n }\n\n /**\n * Set page (calculates offset from limit).\n */\n page(pageNum: number, pageSize: number): this {\n this.options.limit = pageSize;\n this.options.offset = (pageNum - 1) * pageSize;\n return this;\n }\n\n /**\n * Build the query options.\n */\n build(): QueryOptions {\n return { ...this.options };\n }\n}\n\n/**\n * Start building a query.\n */\nexport const query = () => new QueryBuilder();\n","import { StorageProvider } from '../storage/interface';\nimport { NamespaceConfig, NamespaceReference, NamespaceResolution } from './types';\n\nexport interface NamespaceResolverOptions {\n /** Storage provider to query for namespaces */\n provider: StorageProvider;\n\n /** Default namespace when none specified */\n defaultNamespace?: string;\n\n /** Pre-configured namespaces */\n namespaces?: NamespaceConfig[];\n}\n\nexport interface NamespaceResolver {\n /**\n * Resolve which namespaces to use for an operation.\n */\n resolve(requested?: string | string[]): Promise<NamespaceResolution>;\n\n /**\n * Get all available namespaces.\n */\n listAll(): Promise<NamespaceConfig[]>;\n\n /**\n * Register a new namespace configuration.\n */\n register(config: NamespaceConfig): void;\n\n /**\n * Get the primary (writable) namespace.\n */\n getPrimary(): string;\n\n /**\n * Check if a namespace exists.\n */\n exists(namespace: string): Promise<boolean>;\n}\n\nexport const createNamespaceResolver = (\n options: NamespaceResolverOptions\n): NamespaceResolver => {\n const { provider, defaultNamespace = '_default' } = options;\n const configuredNamespaces = new Map<string, NamespaceConfig>();\n\n // Load initial configurations\n if (options.namespaces) {\n for (const ns of options.namespaces) {\n configuredNamespaces.set(ns.id, ns);\n }\n }\n\n return {\n async resolve(requested?: string | string[]): Promise<NamespaceResolution> {\n let namespaceIds: string[];\n\n if (!requested) {\n namespaceIds = [defaultNamespace];\n } else if (typeof requested === 'string') {\n namespaceIds = [requested];\n } else {\n namespaceIds = requested;\n }\n\n const references: NamespaceReference[] = [];\n const readable: string[] = [];\n let primary: string | undefined;\n\n for (let i = 0; i < namespaceIds.length; i++) {\n const nsId = namespaceIds[i];\n const config = configuredNamespaces.get(nsId);\n\n // Include all requested namespaces, even if they don't exist yet\n const ref: NamespaceReference = {\n namespace: nsId,\n priority: namespaceIds.length - i, // Earlier = higher priority\n searchable: config?.active !== false,\n writable: i === 0, // Only first is writable\n };\n\n references.push(ref);\n readable.push(nsId);\n\n if (!primary) {\n primary = nsId;\n }\n }\n\n if (!primary) {\n primary = defaultNamespace;\n readable.push(defaultNamespace);\n }\n\n return { primary, readable, references };\n },\n\n async listAll(): Promise<NamespaceConfig[]> {\n const discovered = await provider.listNamespaces();\n const all = new Map<string, NamespaceConfig>();\n\n // Add configured namespaces\n for (const [id, config] of configuredNamespaces) {\n all.set(id, config);\n }\n\n // Add discovered namespaces\n for (const nsId of discovered) {\n if (!all.has(nsId)) {\n all.set(nsId, { id: nsId, name: nsId, active: true });\n }\n }\n\n return Array.from(all.values());\n },\n\n register(config: NamespaceConfig): void {\n configuredNamespaces.set(config.id, config);\n },\n\n getPrimary(): string {\n return defaultNamespace;\n },\n\n async exists(namespace: string): Promise<boolean> {\n return configuredNamespaces.has(namespace) ||\n await provider.namespaceExists(namespace);\n },\n };\n};\n","import { z } from 'zod';\nimport { SchemaMap } from '../schema/registry';\nimport { OvercontextAPI } from '../api/context';\nimport { NamespaceResolver } from './resolver';\nimport { NamespaceResolution } from './types';\n\nexport interface MultiNamespaceContextOptions<TSchemas extends SchemaMap> {\n api: OvercontextAPI<TSchemas>;\n resolver: NamespaceResolver;\n}\n\n/**\n * Extended context that supports multi-namespace operations.\n */\nexport interface MultiNamespaceContext<TSchemas extends SchemaMap = SchemaMap>\n extends OvercontextAPI<TSchemas> {\n\n /**\n * Get entity from any readable namespace.\n * Returns the first match in priority order.\n */\n getFromAny<K extends keyof TSchemas & string>(\n type: K,\n id: string\n ): Promise<{ entity: z.infer<TSchemas[K]>; namespace: string } | undefined>;\n\n /**\n * Get all entities of a type merged from all namespaces.\n * Higher priority namespaces override lower priority.\n */\n getAllMerged<K extends keyof TSchemas & string>(\n type: K\n ): Promise<z.infer<TSchemas[K]>[]>;\n\n /**\n * Find which namespace an entity lives in.\n */\n locateEntity(type: string, id: string): Promise<string | undefined>;\n\n /**\n * Get the current namespace resolution.\n */\n getResolution(): NamespaceResolution;\n\n /**\n * Create a context with different namespace resolution.\n */\n withNamespaces(namespaces: string | string[]): Promise<MultiNamespaceContext<TSchemas>>;\n}\n\nexport const createMultiNamespaceContext = async <TSchemas extends SchemaMap>(\n options: MultiNamespaceContextOptions<TSchemas>,\n namespaces?: string | string[]\n): Promise<MultiNamespaceContext<TSchemas>> => {\n const { api, resolver } = options;\n const { provider } = api;\n const resolution = await resolver.resolve(namespaces);\n\n return {\n // Forward base API methods\n provider: api.provider,\n registry: api.registry,\n defaultNamespace: resolution.primary,\n\n get: (type, id, namespace) => api.get(type, id, namespace ?? resolution.primary),\n getAll: (type, namespace) => api.getAll(type, namespace ?? resolution.primary),\n exists: (type, id, namespace) => api.exists(type, id, namespace ?? resolution.primary),\n create: (type, data, opts) => api.create(type, data, {\n ...opts,\n namespace: opts?.namespace ?? resolution.primary,\n }),\n update: (type, id, updates, namespace) =>\n api.update(type, id, updates, namespace ?? resolution.primary),\n upsert: (type, entity, namespace) =>\n api.upsert(type, entity, namespace ?? resolution.primary),\n delete: (type, id, namespace) =>\n api.delete(type, id, namespace ?? resolution.primary),\n types: () => api.types(),\n search: (opts) => api.search(opts),\n quickSearch: (q, opts) => api.quickSearch(q, opts),\n withNamespace: (ns) => api.withNamespace(ns),\n\n // Multi-namespace methods\n async getFromAny<K extends keyof TSchemas & string>(\n type: K,\n id: string\n ): Promise<{ entity: z.infer<TSchemas[K]>; namespace: string } | undefined> {\n for (const ns of resolution.readable) {\n const entity = await provider.get(type, id, ns);\n if (entity) {\n return { entity: entity as z.infer<TSchemas[K]>, namespace: ns };\n }\n }\n return undefined;\n },\n\n async getAllMerged<K extends keyof TSchemas & string>(\n type: K\n ): Promise<z.infer<TSchemas[K]>[]> {\n const byId = new Map<string, z.infer<TSchemas[K]>>();\n\n // Process in reverse priority order so higher priority wins\n const reversed = [...resolution.readable].reverse();\n for (const ns of reversed) {\n const entities = await provider.getAll(type, ns);\n for (const entity of entities) {\n byId.set(entity.id, entity as z.infer<TSchemas[K]>);\n }\n }\n\n return Array.from(byId.values());\n },\n\n async locateEntity(type: string, id: string): Promise<string | undefined> {\n for (const ns of resolution.readable) {\n if (await provider.exists(type, id, ns)) {\n return ns;\n }\n }\n return undefined;\n },\n\n getResolution(): NamespaceResolution {\n return resolution;\n },\n\n async withNamespaces(ns: string | string[]): Promise<MultiNamespaceContext<TSchemas>> {\n return createMultiNamespaceContext(options, ns);\n },\n };\n};\n","import * as fs from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport * as path from 'node:path';\nimport { SchemaRegistry } from '../schema/registry';\n\nexport interface DiscoveredContextDir {\n /** Absolute path to the context directory */\n path: string;\n\n /** Distance from starting point (0 = closest) */\n level: number;\n\n /** Namespaces found in this context dir */\n namespaces: string[];\n\n /** Entity types found (based on directory names) */\n types: string[];\n}\n\nexport interface WalkerOptions {\n /** Directory to start searching from */\n startDir: string;\n\n /** Name of context directory to look for */\n contextDirName: string;\n\n /** Maximum levels to walk up */\n maxLevels: number;\n\n /** Stop walking when this directory is reached */\n stopAt?: string;\n\n /** Stop when finding a marker file (e.g., '.git', 'package.json') */\n stopMarkers?: string[];\n\n /** Schema registry to identify entity type directories */\n registry?: SchemaRegistry;\n}\n\nexport interface DirectoryWalker {\n /**\n * Find all context directories walking up from startDir.\n */\n discover(): Promise<DiscoveredContextDir[]>;\n\n /**\n * Check if a specific directory contains context.\n */\n hasContext(dir: string): Promise<boolean>;\n}\n\nexport const createDirectoryWalker = (options: WalkerOptions): DirectoryWalker => {\n const {\n startDir,\n contextDirName,\n maxLevels,\n stopAt,\n stopMarkers = [],\n registry,\n } = options;\n\n const shouldStop = async (dir: string): Promise<boolean> => {\n if (stopAt && dir === stopAt) return true;\n\n for (const marker of stopMarkers) {\n if (existsSync(path.join(dir, marker))) {\n return true;\n }\n }\n\n const parent = path.dirname(dir);\n return parent === dir; // Root\n };\n\n const getNamespacesAndTypes = async (\n contextDir: string\n ): Promise<{ namespaces: string[]; types: string[] }> => {\n const namespaces: string[] = [];\n const types: string[] = [];\n\n try {\n const entries = await fs.readdir(contextDir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n\n const subPath = path.join(contextDir, entry.name);\n const subEntries = await fs.readdir(subPath, { withFileTypes: true });\n\n // Check if this is a type directory (has .yaml files)\n const hasYamlFiles = subEntries.some(\n sub => sub.isFile() && (sub.name.endsWith('.yaml') || sub.name.endsWith('.yml'))\n );\n\n // Check if this looks like a type directory (known to registry)\n const isTypeDir = registry\n ? !!registry.getTypeFromDirectory(entry.name)\n : hasYamlFiles;\n\n if (isTypeDir) {\n const typeName = registry?.getTypeFromDirectory(entry.name) || entry.name;\n if (!types.includes(typeName)) {\n types.push(typeName);\n }\n } else {\n // Check if it's a namespace (contains type directories)\n const hasTypeDirs = subEntries.some(sub => {\n if (!sub.isDirectory()) return false;\n return registry\n ? !!registry.getTypeFromDirectory(sub.name)\n : true; // Assume any subdir could be a type\n });\n\n if (hasTypeDirs) {\n namespaces.push(entry.name);\n }\n }\n }\n } catch {\n // Directory doesn't exist or can't be read\n }\n\n return { namespaces, types };\n };\n\n return {\n async discover(): Promise<DiscoveredContextDir[]> {\n const discovered: DiscoveredContextDir[] = [];\n let currentDir = path.resolve(startDir);\n let level = 0;\n\n while (level < maxLevels) {\n const contextDir = path.join(currentDir, contextDirName);\n\n if (existsSync(contextDir)) {\n const { namespaces, types } = await getNamespacesAndTypes(contextDir);\n discovered.push({ path: contextDir, level, namespaces, types });\n }\n\n if (await shouldStop(currentDir)) break;\n\n currentDir = path.dirname(currentDir);\n level++;\n }\n\n return discovered;\n },\n\n async hasContext(dir: string): Promise<boolean> {\n return existsSync(path.join(dir, contextDirName));\n },\n };\n};\n","import * as path from 'node:path';\nimport { existsSync } from 'node:fs';\nimport { SchemaRegistry } from '../schema/registry';\nimport { DiscoveredContextDir, createDirectoryWalker } from './walker';\n\nexport interface ContextRootOptions {\n /** Starting directory for discovery */\n startDir?: string;\n\n /** Name of context directory (default: 'context') */\n contextDirName?: string;\n\n /** Max levels to search (default: 10) */\n maxLevels?: number;\n\n /** Markers that indicate project root */\n projectMarkers?: string[];\n\n /** Schema registry for type detection */\n registry?: SchemaRegistry;\n}\n\nexport interface ContextRoot {\n /** All discovered context directories (closest first) */\n directories: DiscoveredContextDir[];\n\n /** Primary context directory for writes */\n primary: string | undefined;\n\n /** All paths to load context from (in merge order) */\n contextPaths: string[];\n\n /** All namespaces found across all directories */\n allNamespaces: string[];\n\n /** All types found across all directories */\n allTypes: string[];\n}\n\nexport const discoverContextRoot = async (\n options: ContextRootOptions = {}\n): Promise<ContextRoot> => {\n const {\n startDir = process.cwd(),\n contextDirName = 'context',\n maxLevels = 10,\n projectMarkers = ['.git', 'package.json'],\n registry,\n } = options;\n\n const walker = createDirectoryWalker({\n startDir,\n contextDirName,\n maxLevels,\n stopMarkers: projectMarkers,\n registry,\n });\n\n const directories = await walker.discover();\n\n // Collect all namespaces and types (deduped)\n const namespaceSet = new Set<string>();\n const typeSet = new Set<string>();\n\n for (const dir of directories) {\n for (const ns of dir.namespaces) namespaceSet.add(ns);\n for (const type of dir.types) typeSet.add(type);\n }\n\n return {\n directories,\n primary: directories[0]?.path,\n contextPaths: directories.map(d => d.path),\n allNamespaces: Array.from(namespaceSet),\n allTypes: Array.from(typeSet),\n };\n};\n\n/**\n * Create or ensure a context directory exists.\n */\nexport const ensureContextRoot = async (\n projectDir: string,\n contextDirName: string = 'context'\n): Promise<string> => {\n const contextPath = path.join(projectDir, contextDirName);\n\n if (!existsSync(contextPath)) {\n const fs = await import('node:fs/promises');\n await fs.mkdir(contextPath, { recursive: true });\n }\n\n return contextPath;\n};\n","import { StorageProvider, EntityFilter } from '../storage/interface';\nimport { BaseEntity } from '../schema/base';\nimport { SchemaRegistry } from '../schema/registry';\nimport { createFileSystemProvider } from '../storage/filesystem';\nimport { ContextRoot } from './context-root';\n\nexport interface HierarchicalProviderOptions {\n contextRoot: ContextRoot;\n registry: SchemaRegistry;\n readonly?: boolean;\n}\n\n/**\n * Storage provider that reads from multiple context directories\n * and writes to the primary (closest) directory.\n */\nexport const createHierarchicalProvider = async (\n options: HierarchicalProviderOptions\n): Promise<StorageProvider> => {\n const { contextRoot, registry, readonly = false } = options;\n\n if (contextRoot.contextPaths.length === 0) {\n throw new Error('No context directories found');\n }\n\n // Create read-only providers for each context directory\n const readProviders: StorageProvider[] = [];\n for (const contextPath of contextRoot.contextPaths) {\n const fsProvider = await createFileSystemProvider({\n basePath: contextPath,\n registry,\n createIfMissing: false,\n readonly: true,\n });\n await fsProvider.initialize();\n readProviders.push(fsProvider);\n }\n\n // Primary provider for writes\n const primaryProvider = await createFileSystemProvider({\n basePath: contextRoot.primary!,\n registry,\n createIfMissing: true,\n readonly,\n });\n await primaryProvider.initialize();\n\n const findEntities = async <T extends BaseEntity>(filter: EntityFilter): Promise<T[]> => {\n const byId = new Map<string, T>();\n\n for (const p of [...readProviders].reverse()) {\n const results = await p.find<T>(filter);\n for (const entity of results) {\n byId.set(entity.id, entity);\n }\n }\n\n let results = Array.from(byId.values());\n\n if (filter.offset) results = results.slice(filter.offset);\n if (filter.limit) results = results.slice(0, filter.limit);\n\n return results;\n };\n\n return {\n name: 'hierarchical',\n location: contextRoot.primary!,\n registry,\n\n async initialize() { },\n\n async dispose() {\n for (const p of readProviders) await p.dispose();\n await primaryProvider.dispose();\n },\n\n async isAvailable() {\n return primaryProvider.isAvailable();\n },\n\n // Read operations search all providers (closest first)\n async get<T extends BaseEntity>(type: string, id: string, namespace?: string) {\n for (const p of readProviders) {\n const entity = await p.get<T>(type, id, namespace);\n if (entity) return entity;\n }\n return undefined;\n },\n\n async getAll<T extends BaseEntity>(type: string, namespace?: string) {\n const byId = new Map<string, T>();\n\n // Process in reverse order so closest overwrites\n for (const p of [...readProviders].reverse()) {\n const entities = await p.getAll<T>(type, namespace);\n for (const entity of entities) {\n byId.set(entity.id, entity);\n }\n }\n\n return Array.from(byId.values());\n },\n\n find: findEntities,\n\n async exists(type: string, id: string, namespace?: string) {\n for (const p of readProviders) {\n if (await p.exists(type, id, namespace)) return true;\n }\n return false;\n },\n\n async count(filter: EntityFilter) {\n const results = await findEntities(filter);\n return results.length;\n },\n\n // Write operations go to primary\n save: (entity, namespace) => primaryProvider.save(entity, namespace),\n delete: (type, id, namespace) => primaryProvider.delete(type, id, namespace),\n saveBatch: (entities, namespace) => primaryProvider.saveBatch(entities, namespace),\n deleteBatch: (refs, namespace) => primaryProvider.deleteBatch(refs, namespace),\n\n listNamespaces: () => Promise.resolve(contextRoot.allNamespaces),\n namespaceExists: (ns) => Promise.resolve(contextRoot.allNamespaces.includes(ns)),\n listTypes: () => Promise.resolve(contextRoot.allTypes),\n };\n};\n","export * from './walker';\nexport * from './context-root';\nexport * from './hierarchical-provider';\n\nimport { z } from 'zod';\nimport { SchemaMap, createSchemaRegistry } from '../schema/registry';\nimport { BaseEntity } from '../schema/base';\nimport { discoverContextRoot, ContextRootOptions } from './context-root';\nimport { createHierarchicalProvider } from './hierarchical-provider';\nimport { createContext, OvercontextAPI } from '../api/context';\n\nexport interface DiscoverOptions<TSchemas extends SchemaMap> extends ContextRootOptions {\n /** Schemas to register */\n schemas: TSchemas;\n\n /** Custom plural names for types */\n pluralNames?: Partial<Record<keyof TSchemas, string>>;\n\n /** Whether context is readonly */\n readonly?: boolean;\n}\n\n/**\n * Discover context directories and create an API.\n */\nexport const discoverOvercontext = async <TSchemas extends SchemaMap>(\n options: DiscoverOptions<TSchemas>\n): Promise<OvercontextAPI<TSchemas>> => {\n const { schemas, pluralNames = {}, readonly, ...rootOptions } = options;\n\n // Create registry\n const registry = createSchemaRegistry();\n for (const [type, schema] of Object.entries(schemas)) {\n registry.register({\n type,\n schema: schema as z.ZodType<BaseEntity>,\n pluralName: (pluralNames as Record<string, string>)[type],\n });\n }\n\n // Discover context directories\n const contextRoot = await discoverContextRoot({\n ...rootOptions,\n registry,\n });\n\n if (!contextRoot.primary) {\n throw new Error('No context directory found');\n }\n\n // Create hierarchical provider\n const provider = await createHierarchicalProvider({\n contextRoot,\n registry,\n readonly,\n });\n\n // Create context API\n return createContext({\n provider,\n registry,\n schemas,\n defaultNamespace: undefined,\n });\n};\n","import * as yaml from 'js-yaml';\nimport { BaseEntity } from '../schema/base';\n\nexport type OutputFormat = 'table' | 'json' | 'yaml';\n\nexport interface FormatterOptions {\n format: OutputFormat;\n fields?: string[];\n noHeaders?: boolean;\n}\n\n/**\n * Format entities for CLI output.\n */\nexport const formatEntities = <T extends BaseEntity>(\n entities: T[],\n options: FormatterOptions\n): string => {\n const { format, fields, noHeaders } = options;\n\n if (format === 'json') {\n return JSON.stringify(entities, null, 2);\n }\n\n if (format === 'yaml') {\n return yaml.dump(entities);\n }\n\n // Table format\n if (entities.length === 0) {\n return 'No entities found.';\n }\n\n const displayFields = fields || ['id', 'name', 'type'];\n const rows: string[][] = [];\n\n if (!noHeaders) {\n rows.push(displayFields.map(f => f.toUpperCase()));\n }\n\n for (const entity of entities) {\n const row = displayFields.map(f => {\n const value = (entity as Record<string, unknown>)[f];\n if (value === undefined || value === null) return '-';\n if (typeof value === 'object') return JSON.stringify(value);\n return String(value);\n });\n rows.push(row);\n }\n\n // Calculate column widths\n const widths = displayFields.map((_, i) =>\n Math.max(...rows.map(row => row[i].length))\n );\n\n // Format rows\n return rows\n .map(row =>\n row.map((cell, i) => cell.padEnd(widths[i])).join(' ')\n )\n .join('\\n');\n};\n\n/**\n * Format a single entity for display.\n */\nexport const formatEntity = <T extends BaseEntity>(\n entity: T,\n options: Pick<FormatterOptions, 'format'>\n): string => {\n if (options.format === 'json') {\n return JSON.stringify(entity, null, 2);\n }\n return yaml.dump(entity);\n};\n","import { SchemaMap } from '../schema/registry';\nimport { OvercontextAPI } from '../api/context';\nimport { formatEntities, formatEntity, OutputFormat } from './formatters';\n\nexport interface CommandContext<TSchemas extends SchemaMap = SchemaMap> {\n api: OvercontextAPI<TSchemas>;\n outputFormat: OutputFormat;\n namespace?: string;\n}\n\nexport interface ListCommandOptions {\n type: string;\n search?: string;\n limit?: number;\n fields?: string[];\n}\n\n/**\n * Build a list command handler.\n */\nexport const listCommand = async <TSchemas extends SchemaMap>(\n ctx: CommandContext<TSchemas>,\n options: ListCommandOptions\n): Promise<string> => {\n const result = await ctx.api.search({\n type: options.type,\n namespace: ctx.namespace,\n search: options.search,\n limit: options.limit || 20,\n });\n\n return formatEntities(result.items, {\n format: ctx.outputFormat,\n fields: options.fields,\n });\n};\n\nexport interface GetCommandOptions {\n type: string;\n id: string;\n}\n\n/**\n * Build a get command handler.\n */\nexport const getCommand = async <TSchemas extends SchemaMap>(\n ctx: CommandContext<TSchemas>,\n options: GetCommandOptions\n): Promise<string> => {\n const entity = await ctx.api.get(options.type as keyof TSchemas & string, options.id, ctx.namespace);\n\n if (!entity) {\n throw new Error(`Entity not found: ${options.type}/${options.id}`);\n }\n\n return formatEntity(entity, { format: ctx.outputFormat });\n};\n\nexport interface CreateCommandOptions {\n type: string;\n name: string;\n data?: Record<string, unknown>;\n id?: string;\n}\n\n/**\n * Build a create command handler.\n */\nexport const createCommand = async <TSchemas extends SchemaMap>(\n ctx: CommandContext<TSchemas>,\n options: CreateCommandOptions\n): Promise<string> => {\n const entity = await ctx.api.create(\n options.type as keyof TSchemas & string,\n { name: options.name, ...options.data } as any,\n { id: options.id, namespace: ctx.namespace }\n );\n\n return `Created ${options.type}: ${entity.id}`;\n};\n\nexport interface UpdateCommandOptions {\n type: string;\n id: string;\n data: Record<string, unknown>;\n}\n\n/**\n * Build an update command handler.\n */\nexport const updateCommand = async <TSchemas extends SchemaMap>(\n ctx: CommandContext<TSchemas>,\n options: UpdateCommandOptions\n): Promise<string> => {\n await ctx.api.update(\n options.type as keyof TSchemas & string,\n options.id,\n options.data as any,\n ctx.namespace\n );\n\n return `Updated ${options.type}: ${options.id}`;\n};\n\nexport interface DeleteCommandOptions {\n type: string;\n id: string;\n}\n\n/**\n * Build a delete command handler.\n */\nexport const deleteCommand = async <TSchemas extends SchemaMap>(\n ctx: CommandContext<TSchemas>,\n options: DeleteCommandOptions\n): Promise<string> => {\n const deleted = await ctx.api.delete(options.type, options.id, ctx.namespace);\n\n if (!deleted) {\n throw new Error(`Entity not found: ${options.type}/${options.id}`);\n }\n\n return `Deleted ${options.type}: ${options.id}`;\n};\n","import { SchemaMap } from '../schema/registry';\nimport { OvercontextAPI } from '../api/context';\nimport {\n CommandContext,\n listCommand,\n getCommand,\n createCommand,\n updateCommand,\n deleteCommand,\n} from './commands';\nimport { OutputFormat } from './formatters';\n\nexport interface CLIBuilderOptions<TSchemas extends SchemaMap> {\n api: OvercontextAPI<TSchemas>;\n defaultFormat?: OutputFormat;\n}\n\n/**\n * CLI builder for consumers to create their own CLIs.\n * \n * @example\n * const cli = createCLIBuilder({ api });\n * \n * // In your CLI tool:\n * const result = await cli.list({ type: 'person' });\n * console.log(result);\n */\nexport const createCLIBuilder = <TSchemas extends SchemaMap>(\n options: CLIBuilderOptions<TSchemas>\n) => {\n const { api, defaultFormat = 'table' } = options;\n\n const createContext = (\n format?: OutputFormat,\n namespace?: string\n ): CommandContext<TSchemas> => ({\n api,\n outputFormat: format || defaultFormat,\n namespace,\n });\n\n return {\n /**\n * List entities.\n */\n list: (opts: {\n type: string;\n search?: string;\n limit?: number;\n fields?: string[];\n format?: OutputFormat;\n namespace?: string;\n }) => listCommand(createContext(opts.format, opts.namespace), opts),\n\n /**\n * Get a single entity.\n */\n get: (opts: {\n type: string;\n id: string;\n format?: OutputFormat;\n namespace?: string;\n }) => getCommand(createContext(opts.format, opts.namespace), opts),\n\n /**\n * Create an entity.\n */\n create: (opts: {\n type: string;\n name: string;\n data?: Record<string, unknown>;\n id?: string;\n format?: OutputFormat;\n namespace?: string;\n }) => createCommand(createContext(opts.format, opts.namespace), opts),\n\n /**\n * Update an entity.\n */\n update: (opts: {\n type: string;\n id: string;\n data: Record<string, unknown>;\n format?: OutputFormat;\n namespace?: string;\n }) => updateCommand(createContext(opts.format, opts.namespace), opts),\n\n /**\n * Delete an entity.\n */\n delete: (opts: {\n type: string;\n id: string;\n format?: OutputFormat;\n namespace?: string;\n }) => deleteCommand(createContext(opts.format, opts.namespace), opts),\n\n /**\n * List available entity types.\n */\n types: () => api.types(),\n };\n};\n\nexport type CLIBuilder<TSchemas extends SchemaMap> = ReturnType<\n typeof createCLIBuilder<TSchemas>\n>;\n"],"names":["EntityMetadataSchema","z","object","createdAt","date","optional","updatedAt","createdBy","string","namespace","source","BaseEntitySchema","id","min","name","type","notes","merge","createEntitySchema","typeName","extension","extend","literal","validateBaseEntity","data","result","safeParse","success","errors","error","issues","map","e","path","join","message","validateEntity","schema","isBaseEntity","formatValidationErrors","derivePluralName","endsWith","slice","createSchemaRegistry","schemas","Map","directoryToType","register","options","pluralName","customValidator","plural","registered","set","registerAll","schemaMap","Object","entries","get","has","types","Array","from","keys","getDirectoryName","getTypeFromDirectory","directory","validate","entity","schemaResult","validateAs","withType","defineSchemas","isValidEntitySchema","StorageError","Error","code","cause","EntityNotFoundError","entityType","entityId","SchemaNotRegisteredError","ValidationError","_define_property","validationErrors","StorageAccessError","ReadonlyStorageError","NamespaceNotFoundError","createObservableProvider","provider","handlers","Set","emit","event","forEach","handler","console","subscribe","add","delete","initialize","timestamp","Date","dispose","save","existing","saved","previousEntity","deleted","saveBatch","entities","deleteBatch","refs","count","deletedCount","createFileSystemProvider","basePath","registry","createIfMissing","readonly","defaultNamespace","getEntityDir","dirName","getEntityPath","ensureDir","dir","existsSync","fs","mkdir","recursive","readEntity","filePath","content","readFile","parsed","yaml","load","yamlError","warn","undefined","writeEntity","validationResult","_type","_source","entityToSave","now","toSave","dump","lineWidth","sortKeys","writeFile","listDirectoryTypes","readdir","withFileTypes","entry","isDirectory","push","location","isAvailable","stat","statSync","ns","getAll","files","file","find","filter","results","isArray","concat","ids","length","includes","search","searchLower","toLowerCase","offset","limit","exists","unlink","ref","listNamespaces","namespaces","subPath","subTypes","namespaceExists","namespacePath","listTypes","searchPath","createMemoryProvider","initialData","store","getNamespaceStore","getTypeStore","nsStore","resolveNamespace","clear","values","s","Promise","all","slugify","cleaned","trim","replace","prevWasHyphen","startIdx","endIdx","i","char","generateUniqueId","baseName","baseId","candidateId","createSearchEngine","textMatch","text","query","caseSensitive","a","b","matchesSearch","searchFields","field","value","item","sortEntities","sort","direction","aVal","bVal","cmp","localeCompare","getTime","allEntities","t","total","paginated","items","hasMore","quickSearch","createContext","searchEngine","api","create","shouldGenerateUnique","testId","update","updates","updated","upsert","withNamespace","bind","createTypedAPI","pluralNames","QueryBuilder","fields","enabled","sortBy","n","page","pageNum","pageSize","build","createNamespaceResolver","configuredNamespaces","resolve","requested","namespaceIds","references","readable","primary","nsId","config","priority","searchable","active","writable","listAll","discovered","getPrimary","createMultiNamespaceContext","resolver","resolution","opts","q","getFromAny","getAllMerged","byId","reversed","reverse","locateEntity","getResolution","withNamespaces","createDirectoryWalker","startDir","contextDirName","maxLevels","stopAt","stopMarkers","shouldStop","marker","parent","dirname","getNamespacesAndTypes","contextDir","subEntries","hasYamlFiles","some","sub","isFile","isTypeDir","hasTypeDirs","discover","currentDir","level","hasContext","discoverContextRoot","directories","process","cwd","projectMarkers","walker","namespaceSet","typeSet","contextPaths","d","allNamespaces","allTypes","ensureContextRoot","projectDir","contextPath","createHierarchicalProvider","contextRoot","readProviders","fsProvider","primaryProvider","findEntities","p","discoverOvercontext","rootOptions","formatEntities","format","noHeaders","JSON","stringify","displayFields","rows","f","toUpperCase","row","String","widths","_","Math","max","cell","padEnd","formatEntity","listCommand","ctx","outputFormat","getCommand","createCommand","updateCommand","deleteCommand","createCLIBuilder","defaultFormat","list"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/schema/base.ts","../src/schema/inference.ts","../src/schema/validation.ts","../src/schema/registry.ts","../src/schema/builder.ts","../src/storage/errors.ts","../src/storage/observable.ts","../src/storage/filesystem.ts","../src/storage/memory.ts","../src/api/slug.ts","../src/api/search.ts","../src/api/context.ts","../src/api/builder.ts","../src/api/query-builder.ts","../src/namespace/resolver.ts","../src/namespace/multi-context.ts","../src/discovery/walker.ts","../src/discovery/context-root.ts","../src/discovery/hierarchical-provider.ts","../src/discovery/index.ts","../src/cli/formatters.ts","../src/cli/commands.ts","../src/cli/builder.ts"],"sourcesContent":["import { z } from 'zod';\n\n/**\n * Metadata that overcontext manages automatically.\n * Consumers don't need to define these.\n */\nexport const EntityMetadataSchema = z.object({\n createdAt: z.date().optional(),\n updatedAt: z.date().optional(),\n createdBy: z.string().optional(), // Tool that created this entity\n namespace: z.string().optional(), // Which namespace this came from\n source: z.string().optional(), // File path or storage key\n});\n\nexport type EntityMetadata = z.infer<typeof EntityMetadataSchema>;\n\n/**\n * The minimal contract every entity must satisfy.\n * Consuming libraries extend this with their own fields.\n */\nexport const BaseEntitySchema = z.object({\n /** Unique identifier within the entity type (used as filename) */\n id: z.string()\n .min(1)\n .max(255)\n .regex(/^[a-zA-Z0-9][-a-zA-Z0-9_.]*$/, {\n message: 'ID must be filesystem-safe: start with alphanumeric and contain only alphanumeric, hyphens, underscores, and dots',\n }),\n\n /** Human-readable name (used for display and search) */\n name: z.string().min(1),\n\n /** Entity type discriminator (must be a string literal in extensions) */\n type: z.string().min(1),\n\n /** Optional notes - common enough to include in base */\n notes: z.string().optional(),\n}).merge(EntityMetadataSchema);\n\nexport type BaseEntity = z.infer<typeof BaseEntitySchema>;\n","import { z } from 'zod';\nimport { BaseEntitySchema, BaseEntity } from './base';\n\n/**\n * A valid entity schema must extend BaseEntitySchema.\n * The type field should be a literal (e.g., z.literal('person')).\n */\nexport type EntitySchema<T extends BaseEntity = BaseEntity> = z.ZodType<T> & {\n _input: T;\n _output: T;\n};\n\n/**\n * Helper to create a properly typed entity schema.\n * Ensures the schema extends BaseEntitySchema.\n */\nexport const createEntitySchema = <\n TType extends string,\n TExtension extends z.ZodRawShape\n>(\n typeName: TType,\n extension: TExtension\n ) => {\n return BaseEntitySchema.extend({\n type: z.literal(typeName),\n ...extension,\n });\n};\n\n/**\n * Extract the type literal from an entity schema.\n */\nexport type EntityTypeFromSchema<T extends z.ZodType<BaseEntity>> =\n T extends z.ZodType<infer U> ? (U extends { type: infer TType } ? TType : never) : never;\n\n/**\n * Extract the full entity type from a schema.\n */\nexport type InferEntity<T extends z.ZodType<BaseEntity>> = z.infer<T>;\n","import { z, ZodError } from 'zod';\nimport { BaseEntity, BaseEntitySchema } from './base';\n\nexport interface ValidationResult<T> {\n success: boolean;\n data?: T;\n errors?: Array<{ path: string; message: string }>;\n}\n\n/**\n * Validate that an object satisfies at least the base entity contract.\n */\nexport const validateBaseEntity = (data: unknown): ValidationResult<BaseEntity> => {\n const result = BaseEntitySchema.safeParse(data);\n\n if (result.success) {\n return { success: true, data: result.data };\n }\n\n return {\n success: false,\n errors: result.error.issues.map(e => ({\n path: e.path.join('.'),\n message: e.message,\n })),\n };\n};\n\n/**\n * Validate data against a specific schema.\n */\nexport const validateEntity = <T extends BaseEntity>(\n schema: z.ZodType<T>,\n data: unknown\n): ValidationResult<T> => {\n const result = schema.safeParse(data);\n\n if (result.success) {\n return { success: true, data: result.data };\n }\n\n return {\n success: false,\n errors: result.error.issues.map(e => ({\n path: e.path.join('.'),\n message: e.message,\n })),\n };\n};\n\n/**\n * Check if data extends the base entity (has id, name, type).\n */\nexport const isBaseEntity = (data: unknown): data is BaseEntity => {\n return validateBaseEntity(data).success;\n};\n\n/**\n * Format Zod errors into a readable message.\n */\nexport const formatValidationErrors = (errors: ZodError): string => {\n return errors.issues\n .map(e => `${e.path.join('.')}: ${e.message}`)\n .join('; ');\n};\n","import { z } from 'zod';\nimport { BaseEntity } from './base';\nimport { validateEntity, ValidationResult } from './validation';\n\n/**\n * A map of entity type names to their Zod schemas.\n */\nexport type SchemaMap = Record<string, z.ZodType<BaseEntity>>;\n\n/**\n * Options for schema registration.\n */\nexport interface SchemaRegistrationOptions {\n /** The type name (should match the schema's type literal) */\n type: string;\n\n /** The Zod schema for this entity type */\n schema: z.ZodType<BaseEntity>;\n\n /** Plural name for directory (e.g., 'people' for 'person') */\n pluralName?: string;\n\n /** Additional validation beyond schema */\n customValidator?: (entity: BaseEntity) => ValidationResult<BaseEntity>;\n}\n\n/**\n * Registered schema with metadata.\n */\nexport interface RegisteredSchema {\n type: string;\n schema: z.ZodType<BaseEntity>;\n pluralName: string;\n customValidator?: (entity: BaseEntity) => ValidationResult<BaseEntity>;\n}\n\n/**\n * Schema registry for managing entity schemas.\n */\nexport interface SchemaRegistry {\n /**\n * Register a schema for an entity type.\n */\n register(options: SchemaRegistrationOptions): void;\n\n /**\n * Register multiple schemas at once.\n */\n registerAll(schemas: SchemaMap): void;\n\n /**\n * Get the schema for a type.\n */\n get(type: string): RegisteredSchema | undefined;\n\n /**\n * Check if a type is registered.\n */\n has(type: string): boolean;\n\n /**\n * Get all registered type names.\n */\n types(): string[];\n\n /**\n * Get the directory name for a type.\n */\n getDirectoryName(type: string): string | undefined;\n\n /**\n * Get the type from a directory name.\n */\n getTypeFromDirectory(directory: string): string | undefined;\n\n /**\n * Validate an entity against its registered schema.\n */\n validate<T extends BaseEntity>(entity: T): ValidationResult<T>;\n\n /**\n * Validate data as a specific type.\n */\n validateAs<T extends BaseEntity>(type: string, data: unknown): ValidationResult<T>;\n}\n\n/**\n * Default plural name derivation.\n */\nconst derivePluralName = (type: string): string => {\n // Simple pluralization rules\n if (type.endsWith('y')) {\n return type.slice(0, -1) + 'ies';\n }\n if (type.endsWith('s') || type.endsWith('x') || type.endsWith('ch') || type.endsWith('sh')) {\n return type + 'es';\n }\n return type + 's';\n};\n\n/**\n * Create a new schema registry.\n */\nexport const createSchemaRegistry = (): SchemaRegistry => {\n const schemas = new Map<string, RegisteredSchema>();\n const directoryToType = new Map<string, string>();\n\n const register = (options: SchemaRegistrationOptions): void => {\n const { type, schema, pluralName, customValidator } = options;\n\n const plural = pluralName || derivePluralName(type);\n\n const registered: RegisteredSchema = {\n type,\n schema,\n pluralName: plural,\n customValidator,\n };\n\n schemas.set(type, registered);\n directoryToType.set(plural, type);\n };\n\n const registerAll = (schemaMap: SchemaMap): void => {\n for (const [type, schema] of Object.entries(schemaMap)) {\n register({ type, schema });\n }\n };\n\n const get = (type: string): RegisteredSchema | undefined => {\n return schemas.get(type);\n };\n\n const has = (type: string): boolean => {\n return schemas.has(type);\n };\n\n const types = (): string[] => {\n return Array.from(schemas.keys());\n };\n\n const getDirectoryName = (type: string): string | undefined => {\n return schemas.get(type)?.pluralName;\n };\n\n const getTypeFromDirectory = (directory: string): string | undefined => {\n return directoryToType.get(directory);\n };\n\n const validate = <T extends BaseEntity>(entity: T): ValidationResult<T> => {\n const registered = schemas.get(entity.type);\n\n if (!registered) {\n return {\n success: false,\n errors: [{ path: 'type', message: `Unknown entity type: ${entity.type}` }],\n };\n }\n\n // Schema validation\n const schemaResult = validateEntity(registered.schema, entity);\n if (!schemaResult.success) {\n return schemaResult as ValidationResult<T>;\n }\n\n // Custom validation\n if (registered.customValidator) {\n return registered.customValidator(entity) as ValidationResult<T>;\n }\n\n return { success: true, data: entity };\n };\n\n const validateAs = <T extends BaseEntity>(\n type: string,\n data: unknown\n ): ValidationResult<T> => {\n const registered = schemas.get(type);\n\n if (!registered) {\n return {\n success: false,\n errors: [{ path: 'type', message: `Unknown entity type: ${type}` }],\n };\n }\n\n // Add type to data if missing (for convenience when loading from files)\n const withType = typeof data === 'object' && data !== null\n ? { ...data, type }\n : data;\n\n return validateEntity(registered.schema, withType) as ValidationResult<T>;\n };\n\n return {\n register,\n registerAll,\n get,\n has,\n types,\n getDirectoryName,\n getTypeFromDirectory,\n validate,\n validateAs,\n };\n};\n","import { z } from 'zod';\nimport { BaseEntity } from './base';\n\n/**\n * Type-safe builder for schema maps.\n * Ensures type inference works correctly.\n */\nexport type SchemaMapBuilder<T extends Record<string, z.ZodType<BaseEntity>>> = {\n schemas: T;\n types: { [K in keyof T]: z.infer<T[K]> };\n};\n\n/**\n * Create a schema map with proper type inference.\n * \n * @example\n * const { schemas, types } = defineSchemas({\n * person: PersonSchema,\n * project: ProjectSchema,\n * });\n * \n * type Person = typeof types.person; // Inferred from PersonSchema\n */\nexport const defineSchemas = <T extends Record<string, z.ZodType<BaseEntity>>>(\n schemas: T\n): SchemaMapBuilder<T> => {\n return {\n schemas,\n types: {} as { [K in keyof T]: z.infer<T[K]> },\n };\n};\n\n/**\n * Helper to check if a schema extends BaseEntity properly.\n */\nexport const isValidEntitySchema = (schema: z.ZodType<unknown>): boolean => {\n try {\n // BaseEntitySchema allows extra fields, so we just need id, name, type\n const result = schema.safeParse({\n id: 'test',\n name: 'Test',\n type: 'test',\n });\n // If it fails, it might be because type is a literal\n // Try without type and check if it has the base structure\n if (!result.success) {\n return false;\n }\n return true;\n } catch {\n return false;\n }\n};\n","export class StorageError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly cause?: Error\n ) {\n super(message);\n this.name = 'StorageError';\n }\n}\n\nexport class EntityNotFoundError extends StorageError {\n constructor(\n public readonly entityType: string,\n public readonly entityId: string,\n public readonly namespace?: string\n ) {\n super(\n `Entity not found: ${entityType}/${entityId}${namespace ? ` in ${namespace}` : ''}`,\n 'ENTITY_NOT_FOUND'\n );\n this.name = 'EntityNotFoundError';\n }\n}\n\nexport class SchemaNotRegisteredError extends StorageError {\n constructor(public readonly entityType: string) {\n super(\n `Schema not registered for type: ${entityType}`,\n 'SCHEMA_NOT_REGISTERED'\n );\n this.name = 'SchemaNotRegisteredError';\n }\n}\n\nexport class ValidationError extends StorageError {\n constructor(\n message: string,\n public readonly validationErrors: Array<{ path: string; message: string }>\n ) {\n super(message, 'VALIDATION_ERROR');\n this.name = 'ValidationError';\n }\n}\n\nexport class StorageAccessError extends StorageError {\n constructor(message: string, cause?: Error) {\n super(message, 'STORAGE_ACCESS_ERROR', cause);\n this.name = 'StorageAccessError';\n }\n}\n\nexport class ReadonlyStorageError extends StorageError {\n constructor() {\n super('Storage is readonly', 'READONLY_STORAGE');\n this.name = 'ReadonlyStorageError';\n }\n}\n\nexport class NamespaceNotFoundError extends StorageError {\n constructor(public readonly namespace: string) {\n super(`Namespace not found: ${namespace}`, 'NAMESPACE_NOT_FOUND');\n this.name = 'NamespaceNotFoundError';\n }\n}\n","import { BaseEntity } from '../schema/base';\nimport { StorageProvider } from './interface';\nimport {\n StorageEventHandler,\n AnyStorageEvent,\n ObservableStorageProvider,\n} from './events';\n\n/**\n * Wrap any StorageProvider to make it observable.\n */\nexport const createObservableProvider = (\n provider: StorageProvider\n): ObservableStorageProvider => {\n const handlers = new Set<StorageEventHandler>();\n\n const emit = (event: AnyStorageEvent): void => {\n handlers.forEach(handler => {\n try {\n handler(event);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Storage event handler error:', error);\n }\n });\n };\n\n return {\n ...provider,\n\n subscribe(handler: StorageEventHandler): () => void {\n handlers.add(handler);\n return () => handlers.delete(handler);\n },\n\n async initialize(): Promise<void> {\n await provider.initialize();\n emit({ type: 'storage:initialized', timestamp: new Date() });\n },\n\n async dispose(): Promise<void> {\n emit({ type: 'storage:disposed', timestamp: new Date() });\n handlers.clear(); // Clear all handlers to prevent memory leaks\n await provider.dispose();\n },\n\n async save<T extends BaseEntity>(entity: T, namespace?: string): Promise<T> {\n const existing = await provider.get(entity.type, entity.id, namespace);\n const saved = await provider.save(entity, namespace);\n\n if (existing) {\n emit({\n type: 'entity:updated',\n timestamp: new Date(),\n namespace,\n entityType: entity.type,\n entityId: entity.id,\n entity: saved,\n previousEntity: existing,\n });\n } else {\n emit({\n type: 'entity:created',\n timestamp: new Date(),\n namespace,\n entityType: entity.type,\n entityId: entity.id,\n entity: saved,\n });\n }\n\n return saved;\n },\n\n async delete(type: string, id: string, namespace?: string): Promise<boolean> {\n const deleted = await provider.delete(type, id, namespace);\n\n if (deleted) {\n emit({\n type: 'entity:deleted',\n timestamp: new Date(),\n namespace,\n entityType: type,\n entityId: id,\n });\n }\n\n return deleted;\n },\n\n async saveBatch<T extends BaseEntity>(entities: T[], namespace?: string): Promise<T[]> {\n const saved = await provider.saveBatch(entities, namespace);\n\n emit({\n type: 'batch:saved',\n timestamp: new Date(),\n namespace,\n entities: saved,\n });\n\n return saved;\n },\n\n async deleteBatch(\n refs: Array<{ type: string; id: string }>,\n namespace?: string\n ): Promise<number> {\n const count = await provider.deleteBatch(refs, namespace);\n\n emit({\n type: 'batch:deleted',\n timestamp: new Date(),\n namespace,\n refs,\n deletedCount: count,\n });\n\n return count;\n },\n };\n};\n","import * as fs from 'node:fs/promises';\nimport { existsSync, statSync } from 'node:fs';\nimport * as path from 'node:path';\nimport * as yaml from 'js-yaml';\nimport {\n StorageProvider,\n StorageProviderOptions,\n EntityFilter,\n} from './interface';\nimport { BaseEntity } from '../schema/base';\nimport {\n StorageAccessError,\n ValidationError,\n SchemaNotRegisteredError,\n ReadonlyStorageError,\n} from './errors';\n\nexport interface FileSystemProviderOptions extends StorageProviderOptions {\n /** Base path for context storage */\n basePath: string;\n\n /** Create directories if they don't exist */\n createIfMissing?: boolean;\n\n /** File extension to use (default: .yaml) */\n extension?: '.yaml' | '.yml';\n}\n\nexport const createFileSystemProvider = async (\n options: FileSystemProviderOptions\n): Promise<StorageProvider> => {\n const {\n basePath,\n registry,\n createIfMissing = true,\n extension = '.yaml',\n readonly = false,\n defaultNamespace,\n } = options;\n\n // --- Helper Functions ---\n\n /**\n * Sanitize a path component to prevent directory traversal attacks.\n * Rejects path separators, parent directory references, and other unsafe characters.\n */\n const sanitizePathComponent = (input: string, componentName: string): string => {\n // Reject path separators and parent directory references\n if (input.includes('/') || input.includes('\\\\') || input.includes('..')) {\n throw new ValidationError(\n `Invalid characters in ${componentName}: cannot contain path separators or \"..\"`,\n [{ path: componentName, message: 'Path component cannot contain path separators or \"..\"' }]\n );\n }\n // Reject null bytes and control characters\n if (input.includes('\\0')) {\n throw new ValidationError(\n `Invalid characters in ${componentName}: cannot contain null bytes`,\n [{ path: componentName, message: 'Path component cannot contain null bytes' }]\n );\n }\n // Check for control characters (0x00-0x1F and 0x7F)\n for (let i = 0; i < input.length; i++) {\n const code = input.charCodeAt(i);\n if ((code >= 0 && code <= 0x1F) || code === 0x7F) {\n throw new ValidationError(\n `Invalid characters in ${componentName}: cannot contain control characters`,\n [{ path: componentName, message: 'Path component cannot contain control characters' }]\n );\n }\n }\n return input;\n };\n\n /**\n * Verify that a resolved path stays within the basePath to prevent path traversal.\n */\n const verifyPathWithinBase = (resolvedPath: string): void => {\n const resolvedBase = path.resolve(basePath);\n const resolvedTarget = path.resolve(resolvedPath);\n \n if (!resolvedTarget.startsWith(resolvedBase + path.sep) && resolvedTarget !== resolvedBase) {\n throw new StorageAccessError('Path traversal attempt detected');\n }\n };\n\n const getEntityDir = (type: string, namespace?: string): string => {\n const dirName = registry.getDirectoryName(type);\n if (!dirName) {\n throw new SchemaNotRegisteredError(type);\n }\n\n // Sanitize namespace if provided\n const safeNamespace = namespace ? sanitizePathComponent(namespace, 'namespace') : undefined;\n \n // Sanitize directory name (should already be safe from registry, but double-check)\n const safeDirName = sanitizePathComponent(dirName, 'directoryName');\n\n let dir: string;\n if (safeNamespace) {\n dir = path.join(basePath, safeNamespace, safeDirName);\n } else {\n dir = path.join(basePath, safeDirName);\n }\n\n // Verify the path stays within basePath\n verifyPathWithinBase(dir);\n return dir;\n };\n\n const getEntityPath = (type: string, id: string, namespace?: string): string => {\n // Sanitize ID to prevent path traversal\n const safeId = sanitizePathComponent(id, 'id');\n \n const dir = getEntityDir(type, namespace);\n const fullPath = path.join(dir, `${safeId}${extension}`);\n \n // Verify the final path stays within basePath\n verifyPathWithinBase(fullPath);\n return fullPath;\n };\n\n const ensureDir = async (dir: string): Promise<void> => {\n if (!existsSync(dir) && createIfMissing && !readonly) {\n await fs.mkdir(dir, { recursive: true });\n }\n };\n\n const readEntity = async <T extends BaseEntity>(\n filePath: string,\n type: string\n ): Promise<T | undefined> => {\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n \n let parsed: unknown;\n try {\n parsed = yaml.load(content);\n } catch (yamlError) {\n // eslint-disable-next-line no-console\n console.warn(`Invalid YAML at ${filePath}:`, yamlError);\n return undefined;\n }\n\n if (!parsed || typeof parsed !== 'object') {\n return undefined;\n }\n\n // Protect against prototype pollution from malicious YAML\n // Only __proto__ is dangerous - constructor/prototype as string keys are safe\n const parsedObj = parsed as Record<string, unknown>;\n if (Object.prototype.hasOwnProperty.call(parsedObj, '__proto__')) {\n // eslint-disable-next-line no-console\n console.warn(`Potential prototype pollution attempt in ${filePath}: __proto__ key detected`);\n return undefined;\n }\n\n // Validate against registered schema\n const result = registry.validateAs<T>(type, {\n ...parsedObj,\n source: filePath,\n });\n\n if (!result.success) {\n // eslint-disable-next-line no-console\n console.warn(`Invalid entity at ${filePath}:`, result.errors);\n return undefined;\n }\n\n return result.data;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n return undefined;\n }\n throw new StorageAccessError(`Failed to read ${filePath}`, error as Error);\n }\n };\n\n const writeEntity = async <T extends BaseEntity>(\n entity: T,\n namespace?: string\n ): Promise<T> => {\n if (readonly) {\n throw new ReadonlyStorageError();\n }\n\n // Validate against schema\n const validationResult = registry.validate(entity);\n if (!validationResult.success) {\n throw new ValidationError(\n 'Entity validation failed',\n validationResult.errors || []\n );\n }\n\n const dir = getEntityDir(entity.type, namespace);\n await ensureDir(dir);\n\n const filePath = getEntityPath(entity.type, entity.id, namespace);\n\n // Remove framework-managed fields from saved YAML\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { type: _type, source: _source, ...entityToSave } = entity;\n\n // Update metadata\n const now = new Date();\n const toSave = {\n ...entityToSave,\n updatedAt: now,\n createdAt: entityToSave.createdAt || now,\n };\n\n const content = yaml.dump(toSave, {\n lineWidth: -1,\n sortKeys: false,\n });\n await fs.writeFile(filePath, content, 'utf-8');\n\n return {\n ...entity,\n ...toSave,\n type: entity.type,\n source: filePath,\n } as T;\n };\n\n const listDirectoryTypes = async (basePath: string): Promise<string[]> => {\n const types: string[] = [];\n\n try {\n const entries = await fs.readdir(basePath, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const type = registry.getTypeFromDirectory(entry.name);\n if (type) {\n types.push(type);\n }\n }\n }\n } catch {\n // Directory doesn't exist\n }\n\n return types;\n };\n\n // --- StorageProvider Implementation ---\n\n const provider: StorageProvider = {\n name: 'filesystem',\n location: basePath,\n registry,\n\n async initialize(): Promise<void> {\n if (createIfMissing && !readonly) {\n await ensureDir(basePath);\n }\n\n if (!existsSync(basePath)) {\n throw new StorageAccessError(`Context path does not exist: ${basePath}`);\n }\n },\n\n async dispose(): Promise<void> {\n // No cleanup needed for filesystem\n },\n\n async isAvailable(): Promise<boolean> {\n try {\n const stat = statSync(basePath);\n return stat.isDirectory();\n } catch {\n return false;\n }\n },\n\n async get<T extends BaseEntity>(\n type: string,\n id: string,\n namespace?: string\n ): Promise<T | undefined> {\n const ns = namespace ?? defaultNamespace;\n const filePath = getEntityPath(type, id, ns);\n return readEntity<T>(filePath, type);\n },\n\n async getAll<T extends BaseEntity>(\n type: string,\n namespace?: string\n ): Promise<T[]> {\n const ns = namespace ?? defaultNamespace;\n\n let dir: string;\n try {\n dir = getEntityDir(type, ns);\n } catch (error) {\n if (error instanceof SchemaNotRegisteredError) {\n return [];\n }\n throw error;\n }\n\n if (!existsSync(dir)) {\n return [];\n }\n\n const files = await fs.readdir(dir);\n const entities: T[] = [];\n\n for (const file of files) {\n if (!file.endsWith('.yaml') && !file.endsWith('.yml')) {\n continue;\n }\n\n const entity = await readEntity<T>(path.join(dir, file), type);\n if (entity) {\n entities.push(entity);\n }\n }\n\n return entities;\n },\n\n async find<T extends BaseEntity>(filter: EntityFilter): Promise<T[]> {\n let results: T[] = [];\n\n const types = filter.type\n ? (Array.isArray(filter.type) ? filter.type : [filter.type])\n : registry.types();\n\n const namespace = filter.namespace ?? defaultNamespace;\n\n for (const type of types) {\n const entities = await this.getAll<T>(type, namespace);\n results = results.concat(entities);\n }\n\n // Apply ID filter\n if (filter.ids?.length) {\n results = results.filter(e => filter.ids!.includes(e.id));\n }\n\n // Apply search filter\n if (filter.search) {\n const searchLower = filter.search.toLowerCase();\n results = results.filter(e =>\n e.name.toLowerCase().includes(searchLower)\n );\n }\n\n // Apply pagination\n if (filter.offset) {\n results = results.slice(filter.offset);\n }\n if (filter.limit) {\n results = results.slice(0, filter.limit);\n }\n\n return results;\n },\n\n async exists(type: string, id: string, namespace?: string): Promise<boolean> {\n const ns = namespace ?? defaultNamespace;\n try {\n const filePath = getEntityPath(type, id, ns);\n return existsSync(filePath);\n } catch {\n return false;\n }\n },\n\n async count(filter: EntityFilter): Promise<number> {\n const results = await this.find(filter);\n return results.length;\n },\n\n async save<T extends BaseEntity>(entity: T, namespace?: string): Promise<T> {\n const ns = namespace ?? defaultNamespace;\n return writeEntity(entity, ns);\n },\n\n async delete(type: string, id: string, namespace?: string): Promise<boolean> {\n if (readonly) {\n throw new ReadonlyStorageError();\n }\n\n const ns = namespace ?? defaultNamespace;\n\n try {\n const filePath = getEntityPath(type, id, ns);\n await fs.unlink(filePath);\n return true;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n return false;\n }\n throw error;\n }\n },\n\n async saveBatch<T extends BaseEntity>(\n entities: T[],\n namespace?: string\n ): Promise<T[]> {\n const saved: T[] = [];\n for (const entity of entities) {\n saved.push(await this.save(entity, namespace));\n }\n return saved;\n },\n\n async deleteBatch(\n refs: Array<{ type: string; id: string }>,\n namespace?: string\n ): Promise<number> {\n let count = 0;\n for (const ref of refs) {\n if (await this.delete(ref.type, ref.id, namespace)) {\n count++;\n }\n }\n return count;\n },\n\n async listNamespaces(): Promise<string[]> {\n const namespaces: string[] = [];\n\n if (!existsSync(basePath)) {\n return namespaces;\n }\n\n const entries = await fs.readdir(basePath, { withFileTypes: true });\n\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n\n // Check if it's a namespace (contains entity type directories)\n // vs being an entity type directory itself\n const subPath = path.join(basePath, entry.name);\n const subTypes = await listDirectoryTypes(subPath);\n\n if (subTypes.length > 0) {\n namespaces.push(entry.name);\n }\n }\n\n return namespaces;\n },\n\n async namespaceExists(namespace: string): Promise<boolean> {\n // Sanitize namespace to prevent path traversal\n const safeNamespace = sanitizePathComponent(namespace, 'namespace');\n const namespacePath = path.join(basePath, safeNamespace);\n \n // Verify path stays within basePath\n verifyPathWithinBase(namespacePath);\n return existsSync(namespacePath);\n },\n\n async listTypes(namespace?: string): Promise<string[]> {\n const ns = namespace ?? defaultNamespace;\n let searchPath: string;\n if (ns) {\n // Sanitize namespace to prevent path traversal\n const safeNamespace = sanitizePathComponent(ns, 'namespace');\n searchPath = path.join(basePath, safeNamespace);\n verifyPathWithinBase(searchPath);\n } else {\n searchPath = basePath;\n }\n return listDirectoryTypes(searchPath);\n },\n };\n\n return provider;\n};\n","import { StorageProvider, StorageProviderOptions, EntityFilter } from './interface';\nimport { BaseEntity } from '../schema/base';\nimport { ValidationError, ReadonlyStorageError } from './errors';\n\n/**\n * Create a deep clone of an entity to prevent external mutation of stored data.\n * Uses structured clone for proper handling of dates and nested objects.\n */\nconst cloneEntity = <T extends BaseEntity>(entity: T): T => {\n // structuredClone handles Date objects properly\n return structuredClone(entity);\n};\n\nexport interface MemoryProviderOptions extends StorageProviderOptions {\n /** Initial data to populate */\n initialData?: BaseEntity[];\n}\n\nexport const createMemoryProvider = (\n options: MemoryProviderOptions\n): StorageProvider => {\n const { registry, readonly = false, defaultNamespace, initialData = [] } = options;\n\n // Storage: namespace -> type -> id -> entity\n const store = new Map<string, Map<string, Map<string, BaseEntity>>>();\n\n const getNamespaceStore = (namespace: string): Map<string, Map<string, BaseEntity>> => {\n if (!store.has(namespace)) {\n store.set(namespace, new Map());\n }\n return store.get(namespace)!;\n };\n\n const getTypeStore = (\n namespace: string,\n type: string\n ): Map<string, BaseEntity> => {\n const nsStore = getNamespaceStore(namespace);\n if (!nsStore.has(type)) {\n nsStore.set(type, new Map());\n }\n return nsStore.get(type)!;\n };\n\n const resolveNamespace = (ns?: string): string => ns ?? defaultNamespace ?? '_default';\n\n // Initialize with any provided data\n for (const entity of initialData) {\n const ns = resolveNamespace(entity.namespace);\n getTypeStore(ns, entity.type).set(entity.id, entity);\n }\n\n return {\n name: 'memory',\n location: 'in-memory',\n registry,\n\n async initialize() { },\n\n async dispose() {\n store.clear();\n },\n\n async isAvailable() {\n return true;\n },\n\n async get<T extends BaseEntity>(\n type: string,\n id: string,\n namespace?: string\n ): Promise<T | undefined> {\n const ns = resolveNamespace(namespace);\n const entity = getTypeStore(ns, type).get(id) as T | undefined;\n // Return a defensive copy to prevent external mutation of stored data\n return entity ? cloneEntity(entity) : undefined;\n },\n\n async getAll<T extends BaseEntity>(\n type: string,\n namespace?: string\n ): Promise<T[]> {\n const ns = resolveNamespace(namespace);\n // Return defensive copies to prevent external mutation\n return Array.from(getTypeStore(ns, type).values()).map(e => cloneEntity(e as T));\n },\n\n async find<T extends BaseEntity>(filter: EntityFilter): Promise<T[]> {\n let results: T[] = [];\n\n const types = filter.type\n ? (Array.isArray(filter.type) ? filter.type : [filter.type])\n : registry.types();\n\n const ns = resolveNamespace(filter.namespace);\n\n for (const type of types) {\n results = results.concat(await this.getAll<T>(type, ns));\n }\n\n if (filter.ids?.length) {\n results = results.filter(e => filter.ids!.includes(e.id));\n }\n\n if (filter.search) {\n const s = filter.search.toLowerCase();\n results = results.filter(e => e.name.toLowerCase().includes(s));\n }\n\n if (filter.offset) results = results.slice(filter.offset);\n if (filter.limit) results = results.slice(0, filter.limit);\n\n return results;\n },\n\n async exists(type: string, id: string, namespace?: string): Promise<boolean> {\n const ns = resolveNamespace(namespace);\n return getTypeStore(ns, type).has(id);\n },\n\n async count(filter: EntityFilter): Promise<number> {\n return (await this.find(filter)).length;\n },\n\n async save<T extends BaseEntity>(entity: T, namespace?: string): Promise<T> {\n if (readonly) {\n throw new ReadonlyStorageError();\n }\n\n const validationResult = registry.validate(entity);\n if (!validationResult.success) {\n throw new ValidationError(\n 'Validation failed',\n validationResult.errors || []\n );\n }\n\n const ns = resolveNamespace(namespace);\n const now = new Date();\n const existing = getTypeStore(ns, entity.type).get(entity.id);\n\n const saved = {\n ...entity,\n namespace: ns,\n createdAt: existing?.createdAt || now,\n updatedAt: now,\n } as T;\n\n // Store a cloned copy to prevent external mutation from affecting stored data\n getTypeStore(ns, entity.type).set(entity.id, cloneEntity(saved));\n // Return a clone so caller can't mutate stored data through returned reference\n return cloneEntity(saved);\n },\n\n async delete(type: string, id: string, namespace?: string): Promise<boolean> {\n if (readonly) {\n throw new ReadonlyStorageError();\n }\n\n const ns = resolveNamespace(namespace);\n return getTypeStore(ns, type).delete(id);\n },\n\n async saveBatch<T extends BaseEntity>(\n entities: T[],\n namespace?: string\n ): Promise<T[]> {\n return Promise.all(entities.map(e => this.save(e, namespace)));\n },\n\n async deleteBatch(\n refs: Array<{ type: string; id: string }>,\n namespace?: string\n ): Promise<number> {\n let count = 0;\n for (const ref of refs) {\n if (await this.delete(ref.type, ref.id, namespace)) count++;\n }\n return count;\n },\n\n async listNamespaces(): Promise<string[]> {\n return Array.from(store.keys()).filter(ns => ns !== '_default');\n },\n\n async namespaceExists(namespace: string): Promise<boolean> {\n return store.has(namespace);\n },\n\n async listTypes(namespace?: string): Promise<string[]> {\n const ns = resolveNamespace(namespace);\n const nsStore = store.get(ns);\n return nsStore ? Array.from(nsStore.keys()) : [];\n },\n };\n};\n","/**\n * Generate a slug from a name.\n * \"John Doe\" -> \"john-doe\"\n * \"API Reference\" -> \"api-reference\"\n */\nexport const slugify = (name: string): string => {\n const cleaned = name\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, '') // Remove non-word chars\n .replace(/[\\s_]+/g, '-'); // Replace spaces/underscores\n \n // Single-pass algorithm to collapse hyphens and trim (avoid ReDoS)\n const result: string[] = [];\n let prevWasHyphen = false;\n let startIdx = 0;\n let endIdx = cleaned.length;\n \n // Skip leading hyphens\n while (startIdx < cleaned.length && cleaned[startIdx] === '-') {\n startIdx++;\n }\n \n // Skip trailing hyphens\n while (endIdx > startIdx && cleaned[endIdx - 1] === '-') {\n endIdx--;\n }\n \n // Build result, collapsing consecutive hyphens\n for (let i = startIdx; i < endIdx; i++) {\n const char = cleaned[i];\n if (char === '-') {\n if (!prevWasHyphen) {\n result.push('-');\n prevWasHyphen = true;\n }\n } else {\n result.push(char);\n prevWasHyphen = false;\n }\n }\n \n return result.join('');\n};\n\n/**\n * Generate a unique ID, appending a number if needed.\n */\nexport const generateUniqueId = async (\n baseName: string,\n exists: (id: string) => Promise<boolean>\n): Promise<string> => {\n const baseId = slugify(baseName);\n\n if (!await exists(baseId)) {\n return baseId;\n }\n\n // Try appending numbers\n for (let i = 2; i <= 100; i++) {\n const candidateId = `${baseId}-${i}`;\n if (!await exists(candidateId)) {\n return candidateId;\n }\n }\n\n // Fallback to timestamp\n return `${baseId}-${Date.now()}`;\n};\n","import { BaseEntity } from '../schema/base';\nimport { SchemaRegistry } from '../schema/registry';\nimport { StorageProvider } from '../storage/interface';\nimport { StorageAccessError } from '../storage/errors';\nimport { QueryOptions, QueryResult, SortOption } from './query';\n\n/**\n * Maximum number of entities that can be loaded into memory during search.\n * Prevents memory exhaustion with large datasets.\n */\nconst MAX_SEARCH_ENTITIES = 10000;\n\nexport interface SearchEngine {\n /**\n * Search entities with filtering, pagination, and sorting.\n */\n search<T extends BaseEntity>(options: QueryOptions): Promise<QueryResult<T>>;\n\n /**\n * Quick search by name across all types.\n */\n quickSearch<T extends BaseEntity>(\n query: string,\n options?: Pick<QueryOptions, 'type' | 'namespace' | 'limit'>\n ): Promise<T[]>;\n}\n\nexport interface SearchEngineOptions {\n provider: StorageProvider;\n registry: SchemaRegistry;\n defaultNamespace?: string;\n}\n\nexport const createSearchEngine = (options: SearchEngineOptions): SearchEngine => {\n const { provider, registry, defaultNamespace } = options;\n\n const textMatch = (\n text: string | undefined,\n query: string,\n caseSensitive: boolean\n ): boolean => {\n if (!text) return false;\n const a = caseSensitive ? text : text.toLowerCase();\n const b = caseSensitive ? query : query.toLowerCase();\n return a.includes(b);\n };\n\n const matchesSearch = (\n entity: BaseEntity,\n search: string,\n searchFields: string[],\n caseSensitive: boolean\n ): boolean => {\n // Always search name\n if (textMatch(entity.name, search, caseSensitive)) {\n return true;\n }\n\n // Search additional fields\n for (const field of searchFields) {\n const value = (entity as Record<string, unknown>)[field];\n if (typeof value === 'string' && textMatch(value, search, caseSensitive)) {\n return true;\n }\n // Handle arrays of strings (like sounds_like)\n if (Array.isArray(value)) {\n for (const item of value) {\n if (typeof item === 'string' && textMatch(item, search, caseSensitive)) {\n return true;\n }\n }\n }\n }\n\n return false;\n };\n\n /**\n * Check if a value looks like an ISO date string.\n */\n const isISODateString = (value: unknown): value is string => {\n if (typeof value !== 'string') return false;\n // Match ISO 8601 date format (YAML deserializes dates as ISO strings)\n return /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/.test(value);\n };\n\n /**\n * Try to parse a value as a Date for comparison.\n */\n const toDateValue = (value: unknown): number | null => {\n if (value instanceof Date) return value.getTime();\n if (isISODateString(value)) {\n const parsed = new Date(value);\n return isNaN(parsed.getTime()) ? null : parsed.getTime();\n }\n return null;\n };\n\n const sortEntities = <T extends BaseEntity>(\n entities: T[],\n sort: SortOption[]\n ): T[] => {\n return [...entities].sort((a, b) => {\n for (const { field, direction } of sort) {\n const aVal = (a as Record<string, unknown>)[field];\n const bVal = (b as Record<string, unknown>)[field];\n\n if (aVal === bVal) continue;\n if (aVal === undefined || aVal === null) return direction === 'asc' ? 1 : -1;\n if (bVal === undefined || bVal === null) return direction === 'asc' ? -1 : 1;\n\n let cmp: number;\n\n // Try date comparison first (handles both Date objects and ISO strings)\n const aDate = toDateValue(aVal);\n const bDate = toDateValue(bVal);\n if (aDate !== null && bDate !== null) {\n cmp = aDate - bDate;\n } else if (typeof aVal === 'string' && typeof bVal === 'string') {\n cmp = aVal.localeCompare(bVal);\n } else {\n cmp = aVal < bVal ? -1 : 1;\n }\n\n return direction === 'asc' ? cmp : -cmp;\n }\n return 0;\n });\n };\n\n return {\n async search<T extends BaseEntity>(options: QueryOptions): Promise<QueryResult<T>> {\n const {\n type,\n namespace,\n ids,\n search,\n searchFields = [],\n caseSensitive = false,\n limit,\n offset = 0,\n sort = [{ field: 'name', direction: 'asc' }],\n } = options;\n\n // Determine which types to search\n const types = type\n ? (Array.isArray(type) ? type : [type])\n : registry.types();\n\n // Determine which namespaces to search\n const namespaces = namespace\n ? (Array.isArray(namespace) ? namespace : [namespace])\n : [defaultNamespace];\n\n // Collect entities\n let allEntities: T[] = [];\n\n for (const t of types) {\n for (const ns of namespaces) {\n const entities = await provider.getAll<T>(t, ns);\n allEntities = allEntities.concat(entities);\n }\n }\n\n // Check for memory exhaustion risk\n if (allEntities.length > MAX_SEARCH_ENTITIES) {\n throw new StorageAccessError(\n `Search returned too many results (${allEntities.length}). ` +\n `Please narrow your query by specifying types, namespaces, or search terms. ` +\n `Maximum allowed: ${MAX_SEARCH_ENTITIES} entities.`\n );\n }\n\n // Apply ID filter\n if (ids?.length) {\n allEntities = allEntities.filter(e => ids.includes(e.id));\n }\n\n // Apply search filter\n if (search) {\n allEntities = allEntities.filter(e =>\n matchesSearch(e, search, searchFields, caseSensitive)\n );\n }\n\n // Apply sorting\n allEntities = sortEntities(allEntities, sort);\n\n // Get total before pagination\n const total = allEntities.length;\n\n // Apply pagination\n const paginated = allEntities.slice(offset, limit ? offset + limit : undefined);\n\n return {\n items: paginated,\n total,\n hasMore: limit ? offset + limit < total : false,\n query: options,\n };\n },\n\n async quickSearch<T extends BaseEntity>(\n query: string,\n options: Pick<QueryOptions, 'type' | 'namespace' | 'limit'> = {}\n ): Promise<T[]> {\n const result = await this.search<T>({\n ...options,\n search: query,\n });\n return result.items;\n },\n };\n};\n","import { z } from 'zod';\nimport { BaseEntity } from '../schema/base';\nimport { SchemaRegistry, SchemaMap } from '../schema/registry';\nimport { StorageProvider } from '../storage/interface';\nimport { EntityNotFoundError } from '../storage/errors';\nimport { generateUniqueId, slugify } from './slug';\nimport { createSearchEngine } from './search';\nimport { QueryOptions, QueryResult } from './query';\n\n/**\n * Options for creating an entity.\n */\nexport interface CreateOptions {\n /** Override auto-generated ID */\n id?: string;\n\n /** Namespace to create in */\n namespace?: string;\n\n /** Whether to generate unique ID on collision */\n generateUniqueId?: boolean;\n}\n\n/**\n * Main context API for entity operations.\n * Type safety flows from registered schemas.\n */\nexport interface OvercontextAPI<TSchemas extends SchemaMap = SchemaMap> {\n /**\n * The underlying storage provider.\n */\n readonly provider: StorageProvider;\n\n /**\n * The schema registry.\n */\n readonly registry: SchemaRegistry;\n\n /**\n * Default namespace for operations.\n */\n readonly defaultNamespace?: string;\n\n // --- Generic Operations ---\n\n /**\n * Get an entity by type and ID.\n */\n get<K extends keyof TSchemas & string>(\n type: K,\n id: string,\n namespace?: string\n ): Promise<z.infer<TSchemas[K]> | undefined>;\n\n /**\n * Get all entities of a type.\n */\n getAll<K extends keyof TSchemas & string>(\n type: K,\n namespace?: string\n ): Promise<z.infer<TSchemas[K]>[]>;\n\n /**\n * Check if an entity exists.\n */\n exists(\n type: string,\n id: string,\n namespace?: string\n ): Promise<boolean>;\n\n /**\n * Create a new entity.\n */\n create<K extends keyof TSchemas & string>(\n type: K,\n data: Omit<z.infer<TSchemas[K]>, 'id' | 'type'> & { name: string },\n options?: CreateOptions\n ): Promise<z.infer<TSchemas[K]>>;\n\n /**\n * Update an existing entity.\n */\n update<K extends keyof TSchemas & string>(\n type: K,\n id: string,\n updates: Partial<Omit<z.infer<TSchemas[K]>, 'id' | 'type'>>,\n namespace?: string\n ): Promise<z.infer<TSchemas[K]>>;\n\n /**\n * Create or update an entity.\n */\n upsert<K extends keyof TSchemas & string>(\n type: K,\n entity: Omit<z.infer<TSchemas[K]>, 'type'> & { id: string; name: string },\n namespace?: string\n ): Promise<z.infer<TSchemas[K]>>;\n\n /**\n * Delete an entity.\n */\n delete(\n type: string,\n id: string,\n namespace?: string\n ): Promise<boolean>;\n\n /**\n * List all registered entity types.\n */\n types(): string[];\n\n /**\n * Create a namespaced context.\n */\n withNamespace(namespace: string): OvercontextAPI<TSchemas>;\n\n /**\n * Search entities.\n */\n search<T extends BaseEntity>(options: QueryOptions): Promise<QueryResult<T>>;\n\n /**\n * Quick search by name.\n */\n quickSearch<T extends BaseEntity>(\n query: string,\n options?: Pick<QueryOptions, 'type' | 'namespace' | 'limit'>\n ): Promise<T[]>;\n}\n\nexport interface CreateContextOptions<TSchemas extends SchemaMap> {\n provider: StorageProvider;\n registry: SchemaRegistry;\n schemas: TSchemas;\n defaultNamespace?: string;\n}\n\nexport const createContext = <TSchemas extends SchemaMap>(\n options: CreateContextOptions<TSchemas>\n): OvercontextAPI<TSchemas> => {\n const { provider, registry, defaultNamespace } = options;\n\n const resolveNamespace = (ns?: string) => ns ?? defaultNamespace;\n\n const searchEngine = createSearchEngine({\n provider,\n registry,\n defaultNamespace,\n });\n\n const api: OvercontextAPI<TSchemas> = {\n provider,\n registry,\n defaultNamespace,\n\n async get<K extends keyof TSchemas & string>(\n type: K,\n id: string,\n namespace?: string\n ): Promise<z.infer<TSchemas[K]> | undefined> {\n return provider.get(type, id, resolveNamespace(namespace));\n },\n\n async getAll<K extends keyof TSchemas & string>(\n type: K,\n namespace?: string\n ): Promise<z.infer<TSchemas[K]>[]> {\n return provider.getAll(type, resolveNamespace(namespace));\n },\n\n async exists(\n type: string,\n id: string,\n namespace?: string\n ): Promise<boolean> {\n return provider.exists(type, id, resolveNamespace(namespace));\n },\n\n async create<K extends keyof TSchemas & string>(\n type: K,\n data: Omit<z.infer<TSchemas[K]>, 'id' | 'type'> & { name: string },\n options: CreateOptions = {}\n ): Promise<z.infer<TSchemas[K]>> {\n const namespace = resolveNamespace(options.namespace);\n const shouldGenerateUnique = options.generateUniqueId ?? true;\n\n let id: string;\n if (options.id) {\n id = options.id;\n } else if (shouldGenerateUnique) {\n id = await generateUniqueId(\n data.name,\n (testId) => provider.exists(type, testId, namespace)\n );\n } else {\n id = slugify(data.name);\n }\n\n const entity = {\n ...data,\n id,\n type,\n createdAt: new Date(),\n updatedAt: new Date(),\n } as z.infer<TSchemas[K]>;\n\n return provider.save(entity, namespace);\n },\n\n async update<K extends keyof TSchemas & string>(\n type: K,\n id: string,\n updates: Partial<Omit<z.infer<TSchemas[K]>, 'id' | 'type'>>,\n namespace?: string\n ): Promise<z.infer<TSchemas[K]>> {\n const ns = resolveNamespace(namespace);\n const existing = await provider.get(type, id, ns);\n\n if (!existing) {\n throw new EntityNotFoundError(type, id, ns);\n }\n\n const updated = {\n ...existing,\n ...updates,\n id,\n type,\n updatedAt: new Date(),\n } as z.infer<TSchemas[K]>;\n\n return provider.save(updated, ns);\n },\n\n async upsert<K extends keyof TSchemas & string>(\n type: K,\n entity: Omit<z.infer<TSchemas[K]>, 'type'> & { id: string; name: string },\n namespace?: string\n ): Promise<z.infer<TSchemas[K]>> {\n const ns = resolveNamespace(namespace);\n const existing = await provider.get(type, entity.id, ns);\n\n const now = new Date();\n const toSave = {\n ...existing,\n ...entity,\n type,\n createdAt: existing?.createdAt || now,\n updatedAt: now,\n } as z.infer<TSchemas[K]>;\n\n return provider.save(toSave, ns);\n },\n\n async delete(\n type: string,\n id: string,\n namespace?: string\n ): Promise<boolean> {\n return provider.delete(type, id, resolveNamespace(namespace));\n },\n\n types(): string[] {\n return registry.types();\n },\n\n withNamespace(namespace: string): OvercontextAPI<TSchemas> {\n return createContext({\n ...options,\n defaultNamespace: namespace,\n });\n },\n\n search: searchEngine.search.bind(searchEngine),\n quickSearch: searchEngine.quickSearch.bind(searchEngine),\n };\n\n return api;\n};\n","import { z } from 'zod';\nimport { BaseEntity } from '../schema/base';\nimport { SchemaMap, createSchemaRegistry } from '../schema/registry';\nimport { StorageProvider } from '../storage/interface';\nimport { OvercontextAPI, createContext } from './context';\n\n/**\n * Helper to create a type-safe API from schemas.\n * \n * @example\n * const api = await createTypedAPI({\n * schemas: {\n * person: PersonSchema,\n * term: TermSchema,\n * },\n * provider,\n * });\n * \n * // Types flow through\n * const person = await api.get('person', 'john'); // Returns Person\n */\nexport interface TypedAPIOptions<TSchemas extends SchemaMap> {\n schemas: TSchemas;\n provider: StorageProvider;\n defaultNamespace?: string;\n\n /** Custom plural names for directory mapping */\n pluralNames?: Partial<Record<keyof TSchemas, string>>;\n}\n\nexport const createTypedAPI = <TSchemas extends SchemaMap>(\n options: TypedAPIOptions<TSchemas>\n): OvercontextAPI<TSchemas> => {\n const { schemas, provider, defaultNamespace, pluralNames = {} } = options;\n\n // Create registry from schemas\n const registry = createSchemaRegistry();\n\n for (const [type, schema] of Object.entries(schemas)) {\n registry.register({\n type,\n schema: schema as z.ZodType<BaseEntity>,\n pluralName: (pluralNames as Record<string, string>)[type],\n });\n }\n\n return createContext({\n provider,\n registry,\n schemas,\n defaultNamespace,\n });\n};\n","import { QueryOptions, SortDirection } from './query';\n\n/**\n * Fluent query builder for constructing search queries.\n */\nexport class QueryBuilder {\n private options: QueryOptions = {};\n\n /**\n * Filter by entity type(s).\n */\n type(type: string | string[]): this {\n this.options.type = type;\n return this;\n }\n\n /**\n * Filter by namespace(s).\n */\n namespace(ns: string | string[]): this {\n this.options.namespace = ns;\n return this;\n }\n\n /**\n * Filter by specific IDs.\n */\n ids(ids: string[]): this {\n this.options.ids = ids;\n return this;\n }\n\n /**\n * Add text search.\n */\n search(query: string, fields?: string[]): this {\n this.options.search = query;\n if (fields) this.options.searchFields = fields;\n return this;\n }\n\n /**\n * Enable case-sensitive search.\n */\n caseSensitive(enabled: boolean = true): this {\n this.options.caseSensitive = enabled;\n return this;\n }\n\n /**\n * Add sort field.\n */\n sortBy(field: string, direction: SortDirection = 'asc'): this {\n this.options.sort = [...(this.options.sort || []), { field, direction }];\n return this;\n }\n\n /**\n * Set result limit.\n * Must be a positive integer (minimum 1).\n */\n limit(n: number): this {\n this.options.limit = Math.max(1, Math.floor(n));\n return this;\n }\n\n /**\n * Set result offset.\n * Must be a non-negative integer (minimum 0).\n */\n offset(n: number): this {\n this.options.offset = Math.max(0, Math.floor(n));\n return this;\n }\n\n /**\n * Set page (calculates offset from limit).\n * Page numbers are 1-indexed (first page is 1).\n */\n page(pageNum: number, pageSize: number): this {\n // Ensure valid page number (minimum 1)\n const safePage = Math.max(1, Math.floor(pageNum));\n // Ensure valid page size (minimum 1)\n const safeSize = Math.max(1, Math.floor(pageSize));\n \n this.options.limit = safeSize;\n this.options.offset = (safePage - 1) * safeSize;\n return this;\n }\n\n /**\n * Build the query options.\n */\n build(): QueryOptions {\n return { ...this.options };\n }\n}\n\n/**\n * Start building a query.\n */\nexport const query = () => new QueryBuilder();\n","import { StorageProvider } from '../storage/interface';\nimport { NamespaceConfig, NamespaceReference, NamespaceResolution } from './types';\n\nexport interface NamespaceResolverOptions {\n /** Storage provider to query for namespaces */\n provider: StorageProvider;\n\n /** Default namespace when none specified */\n defaultNamespace?: string;\n\n /** Pre-configured namespaces */\n namespaces?: NamespaceConfig[];\n}\n\nexport interface NamespaceResolver {\n /**\n * Resolve which namespaces to use for an operation.\n */\n resolve(requested?: string | string[]): Promise<NamespaceResolution>;\n\n /**\n * Get all available namespaces.\n */\n listAll(): Promise<NamespaceConfig[]>;\n\n /**\n * Register a new namespace configuration.\n */\n register(config: NamespaceConfig): void;\n\n /**\n * Get the primary (writable) namespace.\n */\n getPrimary(): string;\n\n /**\n * Check if a namespace exists.\n */\n exists(namespace: string): Promise<boolean>;\n}\n\nexport const createNamespaceResolver = (\n options: NamespaceResolverOptions\n): NamespaceResolver => {\n const { provider, defaultNamespace = '_default' } = options;\n const configuredNamespaces = new Map<string, NamespaceConfig>();\n\n // Load initial configurations\n if (options.namespaces) {\n for (const ns of options.namespaces) {\n configuredNamespaces.set(ns.id, ns);\n }\n }\n\n return {\n async resolve(requested?: string | string[]): Promise<NamespaceResolution> {\n let namespaceIds: string[];\n\n if (!requested) {\n namespaceIds = [defaultNamespace];\n } else if (typeof requested === 'string') {\n namespaceIds = [requested];\n } else {\n namespaceIds = requested;\n }\n\n const references: NamespaceReference[] = [];\n const readable: string[] = [];\n let primary: string | undefined;\n\n for (let i = 0; i < namespaceIds.length; i++) {\n const nsId = namespaceIds[i];\n const config = configuredNamespaces.get(nsId);\n\n // Include all requested namespaces, even if they don't exist yet\n const ref: NamespaceReference = {\n namespace: nsId,\n priority: namespaceIds.length - i, // Earlier = higher priority\n searchable: config?.active !== false,\n writable: i === 0, // Only first is writable\n };\n\n references.push(ref);\n readable.push(nsId);\n\n if (!primary) {\n primary = nsId;\n }\n }\n\n if (!primary) {\n primary = defaultNamespace;\n readable.push(defaultNamespace);\n }\n\n return { primary, readable, references };\n },\n\n async listAll(): Promise<NamespaceConfig[]> {\n const discovered = await provider.listNamespaces();\n const all = new Map<string, NamespaceConfig>();\n\n // Add configured namespaces\n for (const [id, config] of configuredNamespaces) {\n all.set(id, config);\n }\n\n // Add discovered namespaces\n for (const nsId of discovered) {\n if (!all.has(nsId)) {\n all.set(nsId, { id: nsId, name: nsId, active: true });\n }\n }\n\n return Array.from(all.values());\n },\n\n register(config: NamespaceConfig): void {\n configuredNamespaces.set(config.id, config);\n },\n\n getPrimary(): string {\n return defaultNamespace;\n },\n\n async exists(namespace: string): Promise<boolean> {\n return configuredNamespaces.has(namespace) ||\n await provider.namespaceExists(namespace);\n },\n };\n};\n","import { z } from 'zod';\nimport { SchemaMap } from '../schema/registry';\nimport { OvercontextAPI } from '../api/context';\nimport { NamespaceResolver } from './resolver';\nimport { NamespaceResolution } from './types';\n\nexport interface MultiNamespaceContextOptions<TSchemas extends SchemaMap> {\n api: OvercontextAPI<TSchemas>;\n resolver: NamespaceResolver;\n}\n\n/**\n * Extended context that supports multi-namespace operations.\n */\nexport interface MultiNamespaceContext<TSchemas extends SchemaMap = SchemaMap>\n extends OvercontextAPI<TSchemas> {\n\n /**\n * Get entity from any readable namespace.\n * Returns the first match in priority order.\n */\n getFromAny<K extends keyof TSchemas & string>(\n type: K,\n id: string\n ): Promise<{ entity: z.infer<TSchemas[K]>; namespace: string } | undefined>;\n\n /**\n * Get all entities of a type merged from all namespaces.\n * Higher priority namespaces override lower priority.\n */\n getAllMerged<K extends keyof TSchemas & string>(\n type: K\n ): Promise<z.infer<TSchemas[K]>[]>;\n\n /**\n * Find which namespace an entity lives in.\n */\n locateEntity(type: string, id: string): Promise<string | undefined>;\n\n /**\n * Get the current namespace resolution.\n */\n getResolution(): NamespaceResolution;\n\n /**\n * Create a context with different namespace resolution.\n */\n withNamespaces(namespaces: string | string[]): Promise<MultiNamespaceContext<TSchemas>>;\n}\n\nexport const createMultiNamespaceContext = async <TSchemas extends SchemaMap>(\n options: MultiNamespaceContextOptions<TSchemas>,\n namespaces?: string | string[]\n): Promise<MultiNamespaceContext<TSchemas>> => {\n const { api, resolver } = options;\n const { provider } = api;\n const resolution = await resolver.resolve(namespaces);\n\n return {\n // Forward base API methods\n provider: api.provider,\n registry: api.registry,\n defaultNamespace: resolution.primary,\n\n get: (type, id, namespace) => api.get(type, id, namespace ?? resolution.primary),\n getAll: (type, namespace) => api.getAll(type, namespace ?? resolution.primary),\n exists: (type, id, namespace) => api.exists(type, id, namespace ?? resolution.primary),\n create: (type, data, opts) => api.create(type, data, {\n ...opts,\n namespace: opts?.namespace ?? resolution.primary,\n }),\n update: (type, id, updates, namespace) =>\n api.update(type, id, updates, namespace ?? resolution.primary),\n upsert: (type, entity, namespace) =>\n api.upsert(type, entity, namespace ?? resolution.primary),\n delete: (type, id, namespace) =>\n api.delete(type, id, namespace ?? resolution.primary),\n types: () => api.types(),\n search: (opts) => api.search(opts),\n quickSearch: (q, opts) => api.quickSearch(q, opts),\n withNamespace: (ns) => api.withNamespace(ns),\n\n // Multi-namespace methods\n async getFromAny<K extends keyof TSchemas & string>(\n type: K,\n id: string\n ): Promise<{ entity: z.infer<TSchemas[K]>; namespace: string } | undefined> {\n for (const ns of resolution.readable) {\n const entity = await provider.get(type, id, ns);\n if (entity) {\n return { entity: entity as z.infer<TSchemas[K]>, namespace: ns };\n }\n }\n return undefined;\n },\n\n async getAllMerged<K extends keyof TSchemas & string>(\n type: K\n ): Promise<z.infer<TSchemas[K]>[]> {\n const byId = new Map<string, z.infer<TSchemas[K]>>();\n\n // Process in reverse priority order so higher priority wins\n const reversed = [...resolution.readable].reverse();\n for (const ns of reversed) {\n const entities = await provider.getAll(type, ns);\n for (const entity of entities) {\n byId.set(entity.id, entity as z.infer<TSchemas[K]>);\n }\n }\n\n return Array.from(byId.values());\n },\n\n async locateEntity(type: string, id: string): Promise<string | undefined> {\n for (const ns of resolution.readable) {\n if (await provider.exists(type, id, ns)) {\n return ns;\n }\n }\n return undefined;\n },\n\n getResolution(): NamespaceResolution {\n return resolution;\n },\n\n async withNamespaces(ns: string | string[]): Promise<MultiNamespaceContext<TSchemas>> {\n return createMultiNamespaceContext(options, ns);\n },\n };\n};\n","import * as fs from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport * as path from 'node:path';\nimport { SchemaRegistry } from '../schema/registry';\n\nexport interface DiscoveredContextDir {\n /** Absolute path to the context directory */\n path: string;\n\n /** Distance from starting point (0 = closest) */\n level: number;\n\n /** Namespaces found in this context dir */\n namespaces: string[];\n\n /** Entity types found (based on directory names) */\n types: string[];\n}\n\nexport interface WalkerOptions {\n /** Directory to start searching from */\n startDir: string;\n\n /** Name of context directory to look for */\n contextDirName: string;\n\n /** Maximum levels to walk up */\n maxLevels: number;\n\n /** Stop walking when this directory is reached */\n stopAt?: string;\n\n /** Stop when finding a marker file (e.g., '.git', 'package.json') */\n stopMarkers?: string[];\n\n /** Schema registry to identify entity type directories */\n registry?: SchemaRegistry;\n}\n\nexport interface DirectoryWalker {\n /**\n * Find all context directories walking up from startDir.\n */\n discover(): Promise<DiscoveredContextDir[]>;\n\n /**\n * Check if a specific directory contains context.\n */\n hasContext(dir: string): Promise<boolean>;\n}\n\nexport const createDirectoryWalker = (options: WalkerOptions): DirectoryWalker => {\n const {\n startDir,\n contextDirName,\n maxLevels,\n stopAt,\n stopMarkers = [],\n registry,\n } = options;\n\n const shouldStop = async (dir: string): Promise<boolean> => {\n if (stopAt && dir === stopAt) return true;\n\n for (const marker of stopMarkers) {\n if (existsSync(path.join(dir, marker))) {\n return true;\n }\n }\n\n const parent = path.dirname(dir);\n return parent === dir; // Root\n };\n\n const getNamespacesAndTypes = async (\n contextDir: string\n ): Promise<{ namespaces: string[]; types: string[] }> => {\n const namespaces: string[] = [];\n const types: string[] = [];\n\n try {\n const entries = await fs.readdir(contextDir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n\n const subPath = path.join(contextDir, entry.name);\n const subEntries = await fs.readdir(subPath, { withFileTypes: true });\n\n // Check if this is a type directory (has .yaml files)\n const hasYamlFiles = subEntries.some(\n sub => sub.isFile() && (sub.name.endsWith('.yaml') || sub.name.endsWith('.yml'))\n );\n\n // Check if this looks like a type directory (known to registry)\n const isTypeDir = registry\n ? !!registry.getTypeFromDirectory(entry.name)\n : hasYamlFiles;\n\n if (isTypeDir) {\n const typeName = registry?.getTypeFromDirectory(entry.name) || entry.name;\n if (!types.includes(typeName)) {\n types.push(typeName);\n }\n } else {\n // Check if it's a namespace (contains type directories)\n const hasTypeDirs = subEntries.some(sub => {\n if (!sub.isDirectory()) return false;\n return registry\n ? !!registry.getTypeFromDirectory(sub.name)\n : true; // Assume any subdir could be a type\n });\n\n if (hasTypeDirs) {\n namespaces.push(entry.name);\n }\n }\n }\n } catch {\n // Directory doesn't exist or can't be read\n }\n\n return { namespaces, types };\n };\n\n return {\n async discover(): Promise<DiscoveredContextDir[]> {\n const discovered: DiscoveredContextDir[] = [];\n let currentDir = path.resolve(startDir);\n let level = 0;\n const visited = new Set<string>();\n\n while (level < maxLevels) {\n // Resolve real path to handle symlinks and prevent cycles\n let realPath: string;\n try {\n realPath = await fs.realpath(currentDir);\n } catch {\n // If realpath fails, use resolved path (may happen with permissions)\n realPath = currentDir;\n }\n\n // Check for symlink cycles\n if (visited.has(realPath)) {\n break; // Already visited this real path, prevent infinite loop\n }\n visited.add(realPath);\n\n const contextDir = path.join(currentDir, contextDirName);\n\n if (existsSync(contextDir)) {\n const { namespaces, types } = await getNamespacesAndTypes(contextDir);\n discovered.push({ path: contextDir, level, namespaces, types });\n }\n\n if (await shouldStop(currentDir)) break;\n\n currentDir = path.dirname(currentDir);\n level++;\n }\n\n return discovered;\n },\n\n async hasContext(dir: string): Promise<boolean> {\n return existsSync(path.join(dir, contextDirName));\n },\n };\n};\n","import * as path from 'node:path';\nimport { existsSync } from 'node:fs';\nimport { SchemaRegistry } from '../schema/registry';\nimport { DiscoveredContextDir, createDirectoryWalker } from './walker';\n\nexport interface ContextRootOptions {\n /** Starting directory for discovery */\n startDir?: string;\n\n /** Name of context directory (default: 'context') */\n contextDirName?: string;\n\n /** Max levels to search (default: 10) */\n maxLevels?: number;\n\n /** Markers that indicate project root */\n projectMarkers?: string[];\n\n /** Schema registry for type detection */\n registry?: SchemaRegistry;\n}\n\nexport interface ContextRoot {\n /** All discovered context directories (closest first) */\n directories: DiscoveredContextDir[];\n\n /** Primary context directory for writes */\n primary: string | undefined;\n\n /** All paths to load context from (in merge order) */\n contextPaths: string[];\n\n /** All namespaces found across all directories */\n allNamespaces: string[];\n\n /** All types found across all directories */\n allTypes: string[];\n}\n\nexport const discoverContextRoot = async (\n options: ContextRootOptions = {}\n): Promise<ContextRoot> => {\n const {\n startDir = process.cwd(),\n contextDirName = 'context',\n maxLevels = 10,\n projectMarkers = ['.git', 'package.json'],\n registry,\n } = options;\n\n const walker = createDirectoryWalker({\n startDir,\n contextDirName,\n maxLevels,\n stopMarkers: projectMarkers,\n registry,\n });\n\n const directories = await walker.discover();\n\n // Collect all namespaces and types (deduped)\n const namespaceSet = new Set<string>();\n const typeSet = new Set<string>();\n\n for (const dir of directories) {\n for (const ns of dir.namespaces) namespaceSet.add(ns);\n for (const type of dir.types) typeSet.add(type);\n }\n\n return {\n directories,\n primary: directories[0]?.path,\n contextPaths: directories.map(d => d.path),\n allNamespaces: Array.from(namespaceSet),\n allTypes: Array.from(typeSet),\n };\n};\n\n/**\n * Create or ensure a context directory exists.\n */\nexport const ensureContextRoot = async (\n projectDir: string,\n contextDirName: string = 'context'\n): Promise<string> => {\n const contextPath = path.join(projectDir, contextDirName);\n\n if (!existsSync(contextPath)) {\n const fs = await import('node:fs/promises');\n await fs.mkdir(contextPath, { recursive: true });\n }\n\n return contextPath;\n};\n","import { StorageProvider, EntityFilter } from '../storage/interface';\nimport { BaseEntity } from '../schema/base';\nimport { SchemaRegistry } from '../schema/registry';\nimport { createFileSystemProvider } from '../storage/filesystem';\nimport { ContextRoot } from './context-root';\n\nexport interface HierarchicalProviderOptions {\n contextRoot: ContextRoot;\n registry: SchemaRegistry;\n readonly?: boolean;\n}\n\n/**\n * Storage provider that reads from multiple context directories\n * and writes to the primary (closest) directory.\n */\nexport const createHierarchicalProvider = async (\n options: HierarchicalProviderOptions\n): Promise<StorageProvider> => {\n const { contextRoot, registry, readonly = false } = options;\n\n if (contextRoot.contextPaths.length === 0) {\n throw new Error('No context directories found');\n }\n\n // Create read-only providers for each context directory\n const readProviders: StorageProvider[] = [];\n for (const contextPath of contextRoot.contextPaths) {\n const fsProvider = await createFileSystemProvider({\n basePath: contextPath,\n registry,\n createIfMissing: false,\n readonly: true,\n });\n await fsProvider.initialize();\n readProviders.push(fsProvider);\n }\n\n // Primary provider for writes\n const primaryProvider = await createFileSystemProvider({\n basePath: contextRoot.primary!,\n registry,\n createIfMissing: true,\n readonly,\n });\n await primaryProvider.initialize();\n\n const findEntities = async <T extends BaseEntity>(filter: EntityFilter): Promise<T[]> => {\n const byId = new Map<string, T>();\n\n // Create a filter without pagination - we'll apply pagination after merging\n // This prevents double-pagination (sub-providers paginating, then us paginating again)\n const filterWithoutPagination: EntityFilter = {\n type: filter.type,\n namespace: filter.namespace,\n ids: filter.ids,\n search: filter.search,\n };\n\n for (const p of [...readProviders].reverse()) {\n const results = await p.find<T>(filterWithoutPagination);\n for (const entity of results) {\n byId.set(entity.id, entity);\n }\n }\n\n let results = Array.from(byId.values());\n\n // Apply pagination once, after merging all results\n if (filter.offset) results = results.slice(filter.offset);\n if (filter.limit) results = results.slice(0, filter.limit);\n\n return results;\n };\n\n return {\n name: 'hierarchical',\n location: contextRoot.primary!,\n registry,\n\n async initialize() { },\n\n async dispose() {\n for (const p of readProviders) await p.dispose();\n await primaryProvider.dispose();\n },\n\n async isAvailable() {\n return primaryProvider.isAvailable();\n },\n\n // Read operations search all providers (closest first)\n async get<T extends BaseEntity>(type: string, id: string, namespace?: string) {\n for (const p of readProviders) {\n const entity = await p.get<T>(type, id, namespace);\n if (entity) return entity;\n }\n return undefined;\n },\n\n async getAll<T extends BaseEntity>(type: string, namespace?: string) {\n const byId = new Map<string, T>();\n\n // Process in reverse order so closest overwrites\n for (const p of [...readProviders].reverse()) {\n const entities = await p.getAll<T>(type, namespace);\n for (const entity of entities) {\n byId.set(entity.id, entity);\n }\n }\n\n return Array.from(byId.values());\n },\n\n find: findEntities,\n\n async exists(type: string, id: string, namespace?: string) {\n for (const p of readProviders) {\n if (await p.exists(type, id, namespace)) return true;\n }\n return false;\n },\n\n async count(filter: EntityFilter) {\n const results = await findEntities(filter);\n return results.length;\n },\n\n // Write operations go to primary\n save: (entity, namespace) => primaryProvider.save(entity, namespace),\n delete: (type, id, namespace) => primaryProvider.delete(type, id, namespace),\n saveBatch: (entities, namespace) => primaryProvider.saveBatch(entities, namespace),\n deleteBatch: (refs, namespace) => primaryProvider.deleteBatch(refs, namespace),\n\n listNamespaces: () => Promise.resolve(contextRoot.allNamespaces),\n namespaceExists: (ns) => Promise.resolve(contextRoot.allNamespaces.includes(ns)),\n listTypes: () => Promise.resolve(contextRoot.allTypes),\n };\n};\n","export * from './walker';\nexport * from './context-root';\nexport * from './hierarchical-provider';\n\nimport { z } from 'zod';\nimport { SchemaMap, createSchemaRegistry } from '../schema/registry';\nimport { BaseEntity } from '../schema/base';\nimport { discoverContextRoot, ContextRootOptions } from './context-root';\nimport { createHierarchicalProvider } from './hierarchical-provider';\nimport { createContext, OvercontextAPI } from '../api/context';\n\nexport interface DiscoverOptions<TSchemas extends SchemaMap> extends ContextRootOptions {\n /** Schemas to register */\n schemas: TSchemas;\n\n /** Custom plural names for types */\n pluralNames?: Partial<Record<keyof TSchemas, string>>;\n\n /** Whether context is readonly */\n readonly?: boolean;\n}\n\n/**\n * Discover context directories and create an API.\n */\nexport const discoverOvercontext = async <TSchemas extends SchemaMap>(\n options: DiscoverOptions<TSchemas>\n): Promise<OvercontextAPI<TSchemas>> => {\n const { schemas, pluralNames = {}, readonly, ...rootOptions } = options;\n\n // Create registry\n const registry = createSchemaRegistry();\n for (const [type, schema] of Object.entries(schemas)) {\n registry.register({\n type,\n schema: schema as z.ZodType<BaseEntity>,\n pluralName: (pluralNames as Record<string, string>)[type],\n });\n }\n\n // Discover context directories\n const contextRoot = await discoverContextRoot({\n ...rootOptions,\n registry,\n });\n\n if (!contextRoot.primary) {\n throw new Error('No context directory found');\n }\n\n // Create hierarchical provider\n const provider = await createHierarchicalProvider({\n contextRoot,\n registry,\n readonly,\n });\n\n // Create context API\n return createContext({\n provider,\n registry,\n schemas,\n defaultNamespace: undefined,\n });\n};\n","import * as yaml from 'js-yaml';\nimport { BaseEntity } from '../schema/base';\n\nexport type OutputFormat = 'table' | 'json' | 'yaml';\n\nexport interface FormatterOptions {\n format: OutputFormat;\n fields?: string[];\n noHeaders?: boolean;\n}\n\n/**\n * Format entities for CLI output.\n */\nexport const formatEntities = <T extends BaseEntity>(\n entities: T[],\n options: FormatterOptions\n): string => {\n const { format, fields, noHeaders } = options;\n\n if (format === 'json') {\n return JSON.stringify(entities, null, 2);\n }\n\n if (format === 'yaml') {\n return yaml.dump(entities);\n }\n\n // Table format\n if (entities.length === 0) {\n return 'No entities found.';\n }\n\n const displayFields = fields || ['id', 'name', 'type'];\n const rows: string[][] = [];\n\n if (!noHeaders) {\n rows.push(displayFields.map(f => f.toUpperCase()));\n }\n\n for (const entity of entities) {\n const row = displayFields.map(f => {\n const value = (entity as Record<string, unknown>)[f];\n if (value === undefined || value === null) return '-';\n if (typeof value === 'object') return JSON.stringify(value);\n return String(value);\n });\n rows.push(row);\n }\n\n // Calculate column widths\n const widths = displayFields.map((_, i) =>\n Math.max(...rows.map(row => row[i].length))\n );\n\n // Format rows\n return rows\n .map(row =>\n row.map((cell, i) => cell.padEnd(widths[i])).join(' ')\n )\n .join('\\n');\n};\n\n/**\n * Format a single entity for display.\n */\nexport const formatEntity = <T extends BaseEntity>(\n entity: T,\n options: Pick<FormatterOptions, 'format'>\n): string => {\n if (options.format === 'json') {\n return JSON.stringify(entity, null, 2);\n }\n return yaml.dump(entity);\n};\n","import { SchemaMap } from '../schema/registry';\nimport { OvercontextAPI } from '../api/context';\nimport { formatEntities, formatEntity, OutputFormat } from './formatters';\n\nexport interface CommandContext<TSchemas extends SchemaMap = SchemaMap> {\n api: OvercontextAPI<TSchemas>;\n outputFormat: OutputFormat;\n namespace?: string;\n}\n\nexport interface ListCommandOptions {\n type: string;\n search?: string;\n limit?: number;\n fields?: string[];\n}\n\n/**\n * Build a list command handler.\n */\nexport const listCommand = async <TSchemas extends SchemaMap>(\n ctx: CommandContext<TSchemas>,\n options: ListCommandOptions\n): Promise<string> => {\n const result = await ctx.api.search({\n type: options.type,\n namespace: ctx.namespace,\n search: options.search,\n limit: options.limit || 20,\n });\n\n return formatEntities(result.items, {\n format: ctx.outputFormat,\n fields: options.fields,\n });\n};\n\nexport interface GetCommandOptions {\n type: string;\n id: string;\n}\n\n/**\n * Build a get command handler.\n */\nexport const getCommand = async <TSchemas extends SchemaMap>(\n ctx: CommandContext<TSchemas>,\n options: GetCommandOptions\n): Promise<string> => {\n const entity = await ctx.api.get(options.type as keyof TSchemas & string, options.id, ctx.namespace);\n\n if (!entity) {\n throw new Error(`Entity not found: ${options.type}/${options.id}`);\n }\n\n return formatEntity(entity, { format: ctx.outputFormat });\n};\n\nexport interface CreateCommandOptions {\n type: string;\n name: string;\n data?: Record<string, unknown>;\n id?: string;\n}\n\n/**\n * Build a create command handler.\n */\nexport const createCommand = async <TSchemas extends SchemaMap>(\n ctx: CommandContext<TSchemas>,\n options: CreateCommandOptions\n): Promise<string> => {\n const entity = await ctx.api.create(\n options.type as keyof TSchemas & string,\n { name: options.name, ...options.data } as any,\n { id: options.id, namespace: ctx.namespace }\n );\n\n return `Created ${options.type}: ${entity.id}`;\n};\n\nexport interface UpdateCommandOptions {\n type: string;\n id: string;\n data: Record<string, unknown>;\n}\n\n/**\n * Build an update command handler.\n */\nexport const updateCommand = async <TSchemas extends SchemaMap>(\n ctx: CommandContext<TSchemas>,\n options: UpdateCommandOptions\n): Promise<string> => {\n await ctx.api.update(\n options.type as keyof TSchemas & string,\n options.id,\n options.data as any,\n ctx.namespace\n );\n\n return `Updated ${options.type}: ${options.id}`;\n};\n\nexport interface DeleteCommandOptions {\n type: string;\n id: string;\n}\n\n/**\n * Build a delete command handler.\n */\nexport const deleteCommand = async <TSchemas extends SchemaMap>(\n ctx: CommandContext<TSchemas>,\n options: DeleteCommandOptions\n): Promise<string> => {\n const deleted = await ctx.api.delete(options.type, options.id, ctx.namespace);\n\n if (!deleted) {\n throw new Error(`Entity not found: ${options.type}/${options.id}`);\n }\n\n return `Deleted ${options.type}: ${options.id}`;\n};\n","import { SchemaMap } from '../schema/registry';\nimport { OvercontextAPI } from '../api/context';\nimport {\n CommandContext,\n listCommand,\n getCommand,\n createCommand,\n updateCommand,\n deleteCommand,\n} from './commands';\nimport { OutputFormat } from './formatters';\n\nexport interface CLIBuilderOptions<TSchemas extends SchemaMap> {\n api: OvercontextAPI<TSchemas>;\n defaultFormat?: OutputFormat;\n}\n\n/**\n * CLI builder for consumers to create their own CLIs.\n * \n * @example\n * const cli = createCLIBuilder({ api });\n * \n * // In your CLI tool:\n * const result = await cli.list({ type: 'person' });\n * console.log(result);\n */\nexport const createCLIBuilder = <TSchemas extends SchemaMap>(\n options: CLIBuilderOptions<TSchemas>\n) => {\n const { api, defaultFormat = 'table' } = options;\n\n const createContext = (\n format?: OutputFormat,\n namespace?: string\n ): CommandContext<TSchemas> => ({\n api,\n outputFormat: format || defaultFormat,\n namespace,\n });\n\n return {\n /**\n * List entities.\n */\n list: (opts: {\n type: string;\n search?: string;\n limit?: number;\n fields?: string[];\n format?: OutputFormat;\n namespace?: string;\n }) => listCommand(createContext(opts.format, opts.namespace), opts),\n\n /**\n * Get a single entity.\n */\n get: (opts: {\n type: string;\n id: string;\n format?: OutputFormat;\n namespace?: string;\n }) => getCommand(createContext(opts.format, opts.namespace), opts),\n\n /**\n * Create an entity.\n */\n create: (opts: {\n type: string;\n name: string;\n data?: Record<string, unknown>;\n id?: string;\n format?: OutputFormat;\n namespace?: string;\n }) => createCommand(createContext(opts.format, opts.namespace), opts),\n\n /**\n * Update an entity.\n */\n update: (opts: {\n type: string;\n id: string;\n data: Record<string, unknown>;\n format?: OutputFormat;\n namespace?: string;\n }) => updateCommand(createContext(opts.format, opts.namespace), opts),\n\n /**\n * Delete an entity.\n */\n delete: (opts: {\n type: string;\n id: string;\n format?: OutputFormat;\n namespace?: string;\n }) => deleteCommand(createContext(opts.format, opts.namespace), opts),\n\n /**\n * List available entity types.\n */\n types: () => api.types(),\n };\n};\n\nexport type CLIBuilder<TSchemas extends SchemaMap> = ReturnType<\n typeof createCLIBuilder<TSchemas>\n>;\n"],"names":["EntityMetadataSchema","z","object","createdAt","date","optional","updatedAt","createdBy","string","namespace","source","BaseEntitySchema","id","min","max","regex","message","name","type","notes","merge","createEntitySchema","typeName","extension","extend","literal","validateBaseEntity","data","result","safeParse","success","errors","error","issues","map","e","path","join","validateEntity","schema","isBaseEntity","formatValidationErrors","derivePluralName","endsWith","slice","createSchemaRegistry","schemas","Map","directoryToType","register","options","pluralName","customValidator","plural","registered","set","registerAll","schemaMap","Object","entries","get","has","types","Array","from","keys","getDirectoryName","getTypeFromDirectory","directory","validate","entity","schemaResult","validateAs","withType","defineSchemas","isValidEntitySchema","StorageError","Error","code","cause","EntityNotFoundError","entityType","entityId","SchemaNotRegisteredError","ValidationError","_define_property","validationErrors","StorageAccessError","ReadonlyStorageError","NamespaceNotFoundError","createObservableProvider","provider","handlers","Set","emit","event","forEach","handler","console","subscribe","add","delete","initialize","timestamp","Date","dispose","clear","save","existing","saved","previousEntity","deleted","saveBatch","entities","deleteBatch","refs","count","deletedCount","createFileSystemProvider","basePath","registry","createIfMissing","readonly","defaultNamespace","sanitizePathComponent","input","componentName","includes","i","length","charCodeAt","verifyPathWithinBase","resolvedPath","resolvedBase","resolve","resolvedTarget","startsWith","sep","getEntityDir","dirName","safeNamespace","undefined","safeDirName","dir","getEntityPath","safeId","fullPath","ensureDir","existsSync","fs","mkdir","recursive","readEntity","filePath","content","readFile","parsed","yaml","load","yamlError","warn","parsedObj","prototype","hasOwnProperty","call","writeEntity","validationResult","_type","_source","entityToSave","now","toSave","dump","lineWidth","sortKeys","writeFile","listDirectoryTypes","readdir","withFileTypes","entry","isDirectory","push","location","isAvailable","stat","statSync","ns","getAll","files","file","find","filter","results","isArray","concat","ids","search","searchLower","toLowerCase","offset","limit","exists","unlink","ref","listNamespaces","namespaces","subPath","subTypes","namespaceExists","namespacePath","listTypes","searchPath","cloneEntity","structuredClone","createMemoryProvider","initialData","store","getNamespaceStore","getTypeStore","nsStore","resolveNamespace","values","s","Promise","all","slugify","cleaned","trim","replace","prevWasHyphen","startIdx","endIdx","char","generateUniqueId","baseName","baseId","candidateId","MAX_SEARCH_ENTITIES","createSearchEngine","textMatch","text","query","caseSensitive","a","b","matchesSearch","searchFields","field","value","item","isISODateString","test","toDateValue","getTime","isNaN","sortEntities","sort","direction","aVal","bVal","cmp","aDate","bDate","localeCompare","allEntities","t","total","paginated","items","hasMore","quickSearch","createContext","searchEngine","api","create","shouldGenerateUnique","testId","update","updates","updated","upsert","withNamespace","bind","createTypedAPI","pluralNames","QueryBuilder","fields","enabled","sortBy","n","Math","floor","page","pageNum","pageSize","safePage","safeSize","build","createNamespaceResolver","configuredNamespaces","requested","namespaceIds","references","readable","primary","nsId","config","priority","searchable","active","writable","listAll","discovered","getPrimary","createMultiNamespaceContext","resolver","resolution","opts","q","getFromAny","getAllMerged","byId","reversed","reverse","locateEntity","getResolution","withNamespaces","createDirectoryWalker","startDir","contextDirName","maxLevels","stopAt","stopMarkers","shouldStop","marker","parent","dirname","getNamespacesAndTypes","contextDir","subEntries","hasYamlFiles","some","sub","isFile","isTypeDir","hasTypeDirs","discover","currentDir","level","visited","realPath","realpath","hasContext","discoverContextRoot","directories","process","cwd","projectMarkers","walker","namespaceSet","typeSet","contextPaths","d","allNamespaces","allTypes","ensureContextRoot","projectDir","contextPath","createHierarchicalProvider","contextRoot","readProviders","fsProvider","primaryProvider","findEntities","filterWithoutPagination","p","discoverOvercontext","rootOptions","formatEntities","format","noHeaders","JSON","stringify","displayFields","rows","f","toUpperCase","row","String","widths","_","cell","padEnd","formatEntity","listCommand","ctx","outputFormat","getCommand","createCommand","updateCommand","deleteCommand","createCLIBuilder","defaultFormat","list"],"mappings":"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"}
|