import type { DocumentChunkDTO, DocumentIngestionResult } from "../schemas/document"; import type { MemoryRecordDTO, MemorySearchRequest, MemorySearchResult, } from "../schemas/memory"; import type { KnowledgeEntityDTO, KnowledgeEntityDetailDTO, KnowledgeEdgeDTO, KnowledgeGraphSnapshotDTO, KnowledgeEntityContextDTO, ExtractedEntity, KnowledgeGetEntityRequest, KnowledgeCreateEntityRequest, KnowledgeUpdateEntityRequest, KnowledgeDeleteEntityRequest, KnowledgeCreateRelationRequest, KnowledgeGetRelationsRequest, KnowledgeDeleteRelationRequest, KnowledgeSearchRelationsRequest, KnowledgeSearchEntitiesRequest, KnowledgeGetEntitiesByTypeRequest, KnowledgeGetEntitiesByTagRequest, KnowledgeTagEntityRequest, KnowledgeRemoveTagRequest, KnowledgeGetTagsRequest, KnowledgeReadGraphRequest, KnowledgeGetRelatedEntitiesRequest, KnowledgeFindPathRequest, KnowledgeGetEntityContextRequest, KnowledgeGetEntitiesInDocumentRequest, KnowledgeGetEntitiesInMemoryRequest } from "../schemas/knowledge"; import type { HybridSearchResult } from "../schemas/search"; import type { MemoryMetricDTO } from "../schemas/analytics"; export interface EmbeddingProvider { embed(texts: string[]): Promise; } export interface TextSplitterChunk { text: string; start: number; end: number; } export interface TextSplitter { split( text: string, options: { chunkSize: number; chunkOverlap: number }, ): TextSplitterChunk[]; } export interface SummaryGenerator { summarize(text: string): Promise; } export interface EntityExtractor { extract(text: string): Promise; } export interface DocumentService { ingest(request: { path?: string; mime?: string; content?: string; metadata?: Record; hashOverride?: string; references?: Array<{ docId: string; chunkId?: string; score?: number; relation?: string; }>; options?: { chunkSize?: number; chunkOverlap?: number; generateSummary?: boolean; detectEntities?: boolean; }; }): Promise; getDocument(id: string): Promise; listDocuments(limit?: number, offset?: number): Promise; updateDocument(input: { id: string; metadata?: Record; title?: string }): Promise; deleteDocument(input: { id: string }): Promise; searchDocuments(input: { query: string; limit?: number; offset?: number }): Promise; getDocumentReferences(input: { docId: string }): Promise; analyzeDocument(input: { docId: string }): Promise; } export interface MemoryService { addMemory(input: { content: string; layer: MemoryRecordDTO["layer"]; metadata?: Record; importance?: number; sessionId?: string; episodeId?: string; summary?: string; queryVector?: number[]; }): Promise; updateMemory(id: string, patch: Partial): Promise; deleteMemory(id: string): Promise; searchMemories(request: MemorySearchRequest): Promise; getMemory(input: { id: string }): Promise; getMemoriesByEntity(input: { entityId: string; limit?: number; offset?: number }): Promise; getMemoriesByDocument(input: { docId: string; limit?: number; offset?: number }): Promise; } export interface KnowledgeGraphService { ensureEntities(entities: ExtractedEntity[], context: { docId?: string }): Promise; listEntities(limit?: number, offset?: number): Promise; getEntity(request: KnowledgeGetEntityRequest): Promise; createEntity(input: KnowledgeCreateEntityRequest): Promise; updateEntity(input: KnowledgeUpdateEntityRequest): Promise; deleteEntity(input: KnowledgeDeleteEntityRequest): Promise; createRelation(input: KnowledgeCreateRelationRequest): Promise; getEntityRelations(input: KnowledgeGetRelationsRequest): Promise; deleteRelation(input: KnowledgeDeleteRelationRequest): Promise; searchRelations(input: KnowledgeSearchRelationsRequest): Promise; searchEntities(input: KnowledgeSearchEntitiesRequest): Promise; getEntitiesByType(input: KnowledgeGetEntitiesByTypeRequest): Promise; getEntitiesByTag(input: KnowledgeGetEntitiesByTagRequest): Promise; tagEntity(input: KnowledgeTagEntityRequest): Promise; removeTag(input: KnowledgeRemoveTagRequest): Promise; getTags(input: KnowledgeGetTagsRequest): Promise; readGraph(input: KnowledgeReadGraphRequest): Promise; getRelatedEntities(input: KnowledgeGetRelatedEntitiesRequest): Promise; findPath(input: KnowledgeFindPathRequest): Promise; getEntityContext(input: KnowledgeGetEntityContextRequest): Promise; getEntitiesInDocument(input: KnowledgeGetEntitiesInDocumentRequest): Promise; getEntitiesInMemory(input: KnowledgeGetEntitiesInMemoryRequest): Promise; } export interface SearchService { searchMemories(request: MemorySearchRequest): Promise; } export interface AnalyticsService { recordMetric(metric: MemoryMetricDTO): void; listRecentMetrics(limit?: number): MemoryMetricDTO[]; } export interface SystemServiceStatus { env: string; logLevel: string; dataRoot: string; vectra: { ok: boolean; memoryIndex: boolean; documentIndex: boolean; counts: { memories: number; docChunks: number; }; }; } export interface SystemService { status(): Promise; } export interface ServiceRegistry { document: DocumentService; memory: MemoryService; knowledge: KnowledgeGraphService; search: SearchService; analytics: AnalyticsService; system: SystemService; }