@soulcraft/brainy 3.0.0 → 3.0.1
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/CHANGELOG.md +53 -3
- package/README.md +353 -110
- package/bin/brainy.js +340 -62
- package/dist/api/ConfigAPI.d.ts +67 -0
- package/dist/api/ConfigAPI.js +166 -0
- package/dist/api/DataAPI.d.ts +123 -0
- package/dist/api/DataAPI.js +391 -0
- package/dist/api/SecurityAPI.d.ts +50 -0
- package/dist/api/SecurityAPI.js +139 -0
- package/dist/api/UniversalImportAPI.d.ts +134 -0
- package/dist/api/UniversalImportAPI.js +615 -0
- package/dist/augmentationManager.js +12 -7
- package/dist/augmentationPipeline.d.ts +0 -61
- package/dist/augmentationPipeline.js +0 -87
- package/dist/augmentationRegistry.d.ts +1 -1
- package/dist/augmentationRegistry.js +1 -1
- package/dist/augmentations/apiServerAugmentation.d.ts +27 -1
- package/dist/augmentations/apiServerAugmentation.js +290 -9
- package/dist/augmentations/auditLogAugmentation.d.ts +109 -0
- package/dist/augmentations/auditLogAugmentation.js +358 -0
- package/dist/augmentations/batchProcessingAugmentation.d.ts +3 -2
- package/dist/augmentations/batchProcessingAugmentation.js +123 -22
- package/dist/augmentations/brainyAugmentation.d.ts +142 -8
- package/dist/augmentations/brainyAugmentation.js +179 -2
- package/dist/augmentations/cacheAugmentation.d.ts +8 -5
- package/dist/augmentations/cacheAugmentation.js +116 -17
- package/dist/augmentations/conduitAugmentations.d.ts +2 -2
- package/dist/augmentations/conduitAugmentations.js +2 -2
- package/dist/augmentations/configResolver.d.ts +122 -0
- package/dist/augmentations/configResolver.js +440 -0
- package/dist/augmentations/connectionPoolAugmentation.d.ts +3 -1
- package/dist/augmentations/connectionPoolAugmentation.js +37 -12
- package/dist/augmentations/defaultAugmentations.d.ts +14 -10
- package/dist/augmentations/defaultAugmentations.js +16 -11
- package/dist/augmentations/discovery/catalogDiscovery.d.ts +142 -0
- package/dist/augmentations/discovery/catalogDiscovery.js +249 -0
- package/dist/augmentations/discovery/localDiscovery.d.ts +84 -0
- package/dist/augmentations/discovery/localDiscovery.js +246 -0
- package/dist/augmentations/discovery/runtimeLoader.d.ts +97 -0
- package/dist/augmentations/discovery/runtimeLoader.js +337 -0
- package/dist/augmentations/discovery.d.ts +152 -0
- package/dist/augmentations/discovery.js +441 -0
- package/dist/augmentations/display/cache.d.ts +130 -0
- package/dist/augmentations/display/cache.js +319 -0
- package/dist/augmentations/display/fieldPatterns.d.ts +52 -0
- package/dist/augmentations/display/fieldPatterns.js +393 -0
- package/dist/augmentations/display/iconMappings.d.ts +57 -0
- package/dist/augmentations/display/iconMappings.js +68 -0
- package/dist/augmentations/display/intelligentComputation.d.ts +109 -0
- package/dist/augmentations/display/intelligentComputation.js +462 -0
- package/dist/augmentations/display/types.d.ts +203 -0
- package/dist/augmentations/display/types.js +7 -0
- package/dist/augmentations/entityRegistryAugmentation.d.ts +3 -1
- package/dist/augmentations/entityRegistryAugmentation.js +5 -1
- package/dist/augmentations/indexAugmentation.d.ts +5 -3
- package/dist/augmentations/indexAugmentation.js +5 -2
- package/dist/augmentations/intelligentVerbScoringAugmentation.d.ts +24 -7
- package/dist/augmentations/intelligentVerbScoringAugmentation.js +111 -27
- package/dist/augmentations/manifest.d.ts +176 -0
- package/dist/augmentations/manifest.js +8 -0
- package/dist/augmentations/marketplace/AugmentationMarketplace.d.ts +168 -0
- package/dist/augmentations/marketplace/AugmentationMarketplace.js +329 -0
- package/dist/augmentations/marketplace/cli.d.ts +47 -0
- package/dist/augmentations/marketplace/cli.js +265 -0
- package/dist/augmentations/metricsAugmentation.d.ts +3 -3
- package/dist/augmentations/metricsAugmentation.js +2 -2
- package/dist/augmentations/monitoringAugmentation.d.ts +3 -3
- package/dist/augmentations/monitoringAugmentation.js +2 -2
- package/dist/augmentations/neuralImport.d.ts +1 -1
- package/dist/augmentations/neuralImport.js +4 -4
- package/dist/augmentations/rateLimitAugmentation.d.ts +82 -0
- package/dist/augmentations/rateLimitAugmentation.js +321 -0
- package/dist/augmentations/requestDeduplicatorAugmentation.d.ts +2 -2
- package/dist/augmentations/requestDeduplicatorAugmentation.js +1 -1
- package/dist/augmentations/storageAugmentation.d.ts +1 -1
- package/dist/augmentations/storageAugmentation.js +2 -2
- package/dist/augmentations/storageAugmentations.d.ts +37 -8
- package/dist/augmentations/storageAugmentations.js +204 -15
- package/dist/augmentations/synapseAugmentation.d.ts +1 -1
- package/dist/augmentations/synapseAugmentation.js +35 -16
- package/dist/augmentations/typeMatching/brainyTypes.d.ts +83 -0
- package/dist/augmentations/typeMatching/brainyTypes.js +425 -0
- package/dist/augmentations/typeMatching/intelligentTypeMatcher.d.ts +39 -59
- package/dist/augmentations/typeMatching/intelligentTypeMatcher.js +103 -389
- package/dist/augmentations/universalDisplayAugmentation.d.ts +191 -0
- package/dist/augmentations/universalDisplayAugmentation.js +371 -0
- package/dist/brainy-unified.d.ts +106 -0
- package/dist/brainy-unified.js +327 -0
- package/dist/brainy.d.ts +273 -0
- package/dist/brainy.js +1181 -0
- package/dist/brainyData.d.ts +56 -111
- package/dist/brainyData.js +912 -756
- package/dist/brainyDataV3.d.ts +186 -0
- package/dist/brainyDataV3.js +337 -0
- package/dist/browserFramework.d.ts +6 -6
- package/dist/browserFramework.js +11 -8
- package/dist/browserFramework.minimal.d.ts +5 -5
- package/dist/browserFramework.minimal.js +11 -8
- package/dist/config/distributedPresets-new.d.ts +118 -0
- package/dist/config/distributedPresets-new.js +318 -0
- package/dist/config/distributedPresets.d.ts +118 -0
- package/dist/config/distributedPresets.js +318 -0
- package/dist/config/extensibleConfig.d.ts +99 -0
- package/dist/config/extensibleConfig.js +268 -0
- package/dist/config/index.d.ts +17 -0
- package/dist/config/index.js +35 -0
- package/dist/config/modelAutoConfig.d.ts +32 -0
- package/dist/config/modelAutoConfig.js +139 -0
- package/dist/config/modelPrecisionManager.d.ts +42 -0
- package/dist/config/modelPrecisionManager.js +98 -0
- package/dist/config/sharedConfigManager.d.ts +67 -0
- package/dist/config/sharedConfigManager.js +215 -0
- package/dist/config/storageAutoConfig.d.ts +41 -0
- package/dist/config/storageAutoConfig.js +328 -0
- package/dist/config/zeroConfig.d.ts +68 -0
- package/dist/config/zeroConfig.js +301 -0
- package/dist/cortex/backupRestore.d.ts +2 -2
- package/dist/cortex/backupRestore.js +85 -27
- package/dist/cortex/healthCheck.d.ts +2 -2
- package/dist/cortex/neuralImport.d.ts +2 -2
- package/dist/cortex/neuralImport.js +18 -13
- package/dist/cortex/performanceMonitor.d.ts +2 -2
- package/dist/critical/model-guardian.d.ts +4 -0
- package/dist/critical/model-guardian.js +31 -11
- package/dist/demo.d.ts +4 -4
- package/dist/demo.js +7 -7
- package/dist/distributed/cacheSync.d.ts +112 -0
- package/dist/distributed/cacheSync.js +265 -0
- package/dist/distributed/coordinator.d.ts +193 -0
- package/dist/distributed/coordinator.js +548 -0
- package/dist/distributed/httpTransport.d.ts +120 -0
- package/dist/distributed/httpTransport.js +446 -0
- package/dist/distributed/index.d.ts +8 -0
- package/dist/distributed/index.js +5 -0
- package/dist/distributed/networkTransport.d.ts +132 -0
- package/dist/distributed/networkTransport.js +633 -0
- package/dist/distributed/queryPlanner.d.ts +104 -0
- package/dist/distributed/queryPlanner.js +327 -0
- package/dist/distributed/readWriteSeparation.d.ts +134 -0
- package/dist/distributed/readWriteSeparation.js +350 -0
- package/dist/distributed/shardManager.d.ts +114 -0
- package/dist/distributed/shardManager.js +357 -0
- package/dist/distributed/shardMigration.d.ts +110 -0
- package/dist/distributed/shardMigration.js +289 -0
- package/dist/distributed/storageDiscovery.d.ts +160 -0
- package/dist/distributed/storageDiscovery.js +551 -0
- package/dist/embeddings/CachedEmbeddings.d.ts +40 -0
- package/dist/embeddings/CachedEmbeddings.js +146 -0
- package/dist/embeddings/EmbeddingManager.d.ts +102 -0
- package/dist/embeddings/EmbeddingManager.js +291 -0
- package/dist/embeddings/SingletonModelManager.d.ts +95 -0
- package/dist/embeddings/SingletonModelManager.js +220 -0
- package/dist/embeddings/index.d.ts +12 -0
- package/dist/embeddings/index.js +16 -0
- package/dist/embeddings/lightweight-embedder.d.ts +0 -1
- package/dist/embeddings/lightweight-embedder.js +4 -12
- package/dist/embeddings/model-manager.d.ts +11 -0
- package/dist/embeddings/model-manager.js +43 -7
- package/dist/embeddings/universal-memory-manager.d.ts +1 -1
- package/dist/embeddings/universal-memory-manager.js +27 -67
- package/dist/embeddings/worker-embedding.js +4 -8
- package/dist/errors/brainyError.d.ts +5 -1
- package/dist/errors/brainyError.js +12 -0
- package/dist/examples/basicUsage.js +7 -4
- package/dist/graph/graphAdjacencyIndex.d.ts +96 -0
- package/dist/graph/graphAdjacencyIndex.js +288 -0
- package/dist/graph/pathfinding.js +4 -2
- package/dist/hnsw/scaledHNSWSystem.js +11 -2
- package/dist/importManager.js +8 -5
- package/dist/index.d.ts +17 -22
- package/dist/index.js +37 -23
- package/dist/mcp/brainyMCPAdapter.d.ts +4 -4
- package/dist/mcp/brainyMCPAdapter.js +5 -5
- package/dist/mcp/brainyMCPService.d.ts +3 -3
- package/dist/mcp/brainyMCPService.js +3 -11
- package/dist/mcp/mcpAugmentationToolset.js +20 -30
- package/dist/neural/embeddedPatterns.d.ts +1 -1
- package/dist/neural/embeddedPatterns.js +2 -2
- package/dist/neural/entityExtractor.d.ts +65 -0
- package/dist/neural/entityExtractor.js +316 -0
- package/dist/neural/improvedNeuralAPI.d.ts +357 -0
- package/dist/neural/improvedNeuralAPI.js +2628 -0
- package/dist/neural/naturalLanguageProcessor.d.ts +155 -10
- package/dist/neural/naturalLanguageProcessor.js +941 -66
- package/dist/neural/naturalLanguageProcessorStatic.d.ts +2 -2
- package/dist/neural/naturalLanguageProcessorStatic.js +3 -3
- package/dist/neural/neuralAPI.js +8 -2
- package/dist/neural/patternLibrary.d.ts +57 -3
- package/dist/neural/patternLibrary.js +348 -13
- package/dist/neural/staticPatternMatcher.d.ts +2 -2
- package/dist/neural/staticPatternMatcher.js +2 -2
- package/dist/neural/types.d.ts +287 -0
- package/dist/neural/types.js +24 -0
- package/dist/shared/default-augmentations.d.ts +3 -3
- package/dist/shared/default-augmentations.js +5 -5
- package/dist/storage/adapters/baseStorageAdapter.d.ts +42 -0
- package/dist/storage/adapters/fileSystemStorage.d.ts +26 -2
- package/dist/storage/adapters/fileSystemStorage.js +218 -15
- package/dist/storage/adapters/memoryStorage.d.ts +4 -4
- package/dist/storage/adapters/memoryStorage.js +17 -12
- package/dist/storage/adapters/opfsStorage.d.ts +2 -2
- package/dist/storage/adapters/opfsStorage.js +2 -2
- package/dist/storage/adapters/s3CompatibleStorage.d.ts +2 -2
- package/dist/storage/adapters/s3CompatibleStorage.js +2 -2
- package/dist/storage/backwardCompatibility.d.ts +10 -78
- package/dist/storage/backwardCompatibility.js +17 -132
- package/dist/storage/baseStorage.d.ts +18 -2
- package/dist/storage/baseStorage.js +74 -3
- package/dist/storage/cacheManager.js +2 -2
- package/dist/storage/readOnlyOptimizations.js +8 -3
- package/dist/streaming/pipeline.d.ts +154 -0
- package/dist/streaming/pipeline.js +551 -0
- package/dist/triple/TripleIntelligence.d.ts +25 -110
- package/dist/triple/TripleIntelligence.js +4 -574
- package/dist/triple/TripleIntelligenceSystem.d.ts +159 -0
- package/dist/triple/TripleIntelligenceSystem.js +519 -0
- package/dist/types/apiTypes.d.ts +278 -0
- package/dist/types/apiTypes.js +33 -0
- package/dist/types/brainy.types.d.ts +308 -0
- package/dist/types/brainy.types.js +8 -0
- package/dist/types/brainyDataInterface.d.ts +5 -8
- package/dist/types/brainyDataInterface.js +2 -2
- package/dist/types/graphTypes.js +2 -2
- package/dist/utils/brainyTypes.d.ts +217 -0
- package/dist/utils/brainyTypes.js +261 -0
- package/dist/utils/cacheAutoConfig.d.ts +3 -3
- package/dist/utils/embedding.d.ts +9 -4
- package/dist/utils/embedding.js +89 -26
- package/dist/utils/enhancedLogger.d.ts +104 -0
- package/dist/utils/enhancedLogger.js +232 -0
- package/dist/utils/hybridModelManager.d.ts +19 -28
- package/dist/utils/hybridModelManager.js +36 -200
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/intelligentTypeMapper.d.ts +60 -0
- package/dist/utils/intelligentTypeMapper.js +349 -0
- package/dist/utils/metadataIndex.d.ts +118 -1
- package/dist/utils/metadataIndex.js +539 -16
- package/dist/utils/nodeVersionCheck.d.ts +24 -0
- package/dist/utils/nodeVersionCheck.js +65 -0
- package/dist/utils/paramValidation.d.ts +39 -0
- package/dist/utils/paramValidation.js +192 -0
- package/dist/utils/rateLimiter.d.ts +160 -0
- package/dist/utils/rateLimiter.js +271 -0
- package/dist/utils/statistics.d.ts +4 -4
- package/dist/utils/statistics.js +3 -3
- package/dist/utils/structuredLogger.d.ts +146 -0
- package/dist/utils/structuredLogger.js +394 -0
- package/dist/utils/textEncoding.js +2 -1
- package/dist/utils/typeValidation.d.ts +59 -0
- package/dist/utils/typeValidation.js +374 -0
- package/dist/utils/version.js +19 -3
- package/package.json +15 -4
- package/scripts/download-models.cjs +94 -20
- package/dist/augmentations/walAugmentation.d.ts +0 -109
- package/dist/augmentations/walAugmentation.js +0 -516
- package/dist/chat/BrainyChat.d.ts +0 -121
- package/dist/chat/BrainyChat.js +0 -396
- package/dist/chat/ChatCLI.d.ts +0 -61
- package/dist/chat/ChatCLI.js +0 -351
|
@@ -433,7 +433,7 @@ export class FileSystemStorage extends BaseStorage {
|
|
|
433
433
|
/**
|
|
434
434
|
* Save noun metadata to storage
|
|
435
435
|
*/
|
|
436
|
-
async
|
|
436
|
+
async saveNounMetadata_internal(id, metadata) {
|
|
437
437
|
await this.ensureInitialized();
|
|
438
438
|
const filePath = path.join(this.nounMetadataDir, `${id}.json`);
|
|
439
439
|
await fs.promises.writeFile(filePath, JSON.stringify(metadata, null, 2));
|
|
@@ -458,7 +458,7 @@ export class FileSystemStorage extends BaseStorage {
|
|
|
458
458
|
/**
|
|
459
459
|
* Save verb metadata to storage
|
|
460
460
|
*/
|
|
461
|
-
async
|
|
461
|
+
async saveVerbMetadata_internal(id, metadata) {
|
|
462
462
|
await this.ensureInitialized();
|
|
463
463
|
const filePath = path.join(this.verbMetadataDir, `${id}.json`);
|
|
464
464
|
await fs.promises.writeFile(filePath, JSON.stringify(metadata, null, 2));
|
|
@@ -770,28 +770,178 @@ export class FileSystemStorage extends BaseStorage {
|
|
|
770
770
|
* Get verbs by source
|
|
771
771
|
*/
|
|
772
772
|
async getVerbsBySource_internal(sourceId) {
|
|
773
|
-
|
|
774
|
-
//
|
|
775
|
-
|
|
776
|
-
|
|
773
|
+
console.log(`[DEBUG] getVerbsBySource_internal called for sourceId: ${sourceId}`);
|
|
774
|
+
// Use the working pagination method with source filter
|
|
775
|
+
const result = await this.getVerbsWithPagination({
|
|
776
|
+
limit: 10000,
|
|
777
|
+
filter: { sourceId: [sourceId] }
|
|
778
|
+
});
|
|
779
|
+
console.log(`[DEBUG] Found ${result.items.length} verbs for source ${sourceId}`);
|
|
780
|
+
return result.items;
|
|
777
781
|
}
|
|
778
782
|
/**
|
|
779
783
|
* Get verbs by target
|
|
780
784
|
*/
|
|
781
785
|
async getVerbsByTarget_internal(targetId) {
|
|
782
|
-
|
|
783
|
-
//
|
|
784
|
-
|
|
785
|
-
|
|
786
|
+
console.log(`[DEBUG] getVerbsByTarget_internal called for targetId: ${targetId}`);
|
|
787
|
+
// Use the working pagination method with target filter
|
|
788
|
+
const result = await this.getVerbsWithPagination({
|
|
789
|
+
limit: 10000,
|
|
790
|
+
filter: { targetId: [targetId] }
|
|
791
|
+
});
|
|
792
|
+
console.log(`[DEBUG] Found ${result.items.length} verbs for target ${targetId}`);
|
|
793
|
+
return result.items;
|
|
786
794
|
}
|
|
787
795
|
/**
|
|
788
796
|
* Get verbs by type
|
|
789
797
|
*/
|
|
790
798
|
async getVerbsByType_internal(type) {
|
|
791
|
-
|
|
792
|
-
//
|
|
793
|
-
|
|
794
|
-
|
|
799
|
+
console.log(`[DEBUG] getVerbsByType_internal called for type: ${type}`);
|
|
800
|
+
// Use the working pagination method with type filter
|
|
801
|
+
const result = await this.getVerbsWithPagination({
|
|
802
|
+
limit: 10000,
|
|
803
|
+
filter: { verbType: [type] }
|
|
804
|
+
});
|
|
805
|
+
console.log(`[DEBUG] Found ${result.items.length} verbs for type ${type}`);
|
|
806
|
+
return result.items;
|
|
807
|
+
}
|
|
808
|
+
/**
|
|
809
|
+
* Get verbs with pagination
|
|
810
|
+
* This method reads verb files from the filesystem and returns them with pagination
|
|
811
|
+
*/
|
|
812
|
+
async getVerbsWithPagination(options = {}) {
|
|
813
|
+
await this.ensureInitialized();
|
|
814
|
+
const limit = options.limit || 100;
|
|
815
|
+
const startIndex = options.cursor ? parseInt(options.cursor, 10) : 0;
|
|
816
|
+
try {
|
|
817
|
+
// List all verb files in the verbs directory
|
|
818
|
+
// Note: For very large directories (millions of files), this could be memory-intensive
|
|
819
|
+
// Future optimization: Use fs.opendir() for streaming directory reads
|
|
820
|
+
const files = await fs.promises.readdir(this.verbsDir);
|
|
821
|
+
const verbFiles = files.filter((f) => f.endsWith('.json'));
|
|
822
|
+
// Sort files for consistent ordering
|
|
823
|
+
verbFiles.sort();
|
|
824
|
+
// Calculate pagination
|
|
825
|
+
const totalCount = verbFiles.length;
|
|
826
|
+
const endIndex = Math.min(startIndex + limit, totalCount);
|
|
827
|
+
const hasMore = endIndex < totalCount;
|
|
828
|
+
// Safety check for large datasets
|
|
829
|
+
if (totalCount > 100000) {
|
|
830
|
+
console.warn(`Large verb dataset detected (${totalCount} verbs). Consider using a database for better performance.`);
|
|
831
|
+
}
|
|
832
|
+
// Load the requested page of verbs
|
|
833
|
+
const verbs = [];
|
|
834
|
+
for (let i = startIndex; i < endIndex; i++) {
|
|
835
|
+
const file = verbFiles[i];
|
|
836
|
+
const id = file.replace('.json', '');
|
|
837
|
+
try {
|
|
838
|
+
// Read the verb data (HNSWVerb stored as edge)
|
|
839
|
+
const filePath = path.join(this.verbsDir, file);
|
|
840
|
+
const data = await fs.promises.readFile(filePath, 'utf-8');
|
|
841
|
+
const edge = JSON.parse(data);
|
|
842
|
+
// Get metadata which contains the actual verb information
|
|
843
|
+
const metadata = await this.getVerbMetadata(id);
|
|
844
|
+
// If no metadata exists, try to reconstruct basic metadata from filename
|
|
845
|
+
if (!metadata) {
|
|
846
|
+
console.warn(`Verb ${id} has no metadata, trying to create minimal verb`);
|
|
847
|
+
// Create minimal GraphVerb without full metadata
|
|
848
|
+
const minimalVerb = {
|
|
849
|
+
id: edge.id,
|
|
850
|
+
vector: edge.vector,
|
|
851
|
+
connections: edge.connections || new Map(),
|
|
852
|
+
sourceId: 'unknown',
|
|
853
|
+
targetId: 'unknown',
|
|
854
|
+
source: 'unknown',
|
|
855
|
+
target: 'unknown',
|
|
856
|
+
type: 'relationship',
|
|
857
|
+
verb: 'relatedTo'
|
|
858
|
+
};
|
|
859
|
+
verbs.push(minimalVerb);
|
|
860
|
+
continue;
|
|
861
|
+
}
|
|
862
|
+
// Convert connections Map to proper format if needed
|
|
863
|
+
let connections = edge.connections;
|
|
864
|
+
if (connections && typeof connections === 'object' && !(connections instanceof Map)) {
|
|
865
|
+
const connectionsMap = new Map();
|
|
866
|
+
for (const [level, nodeIds] of Object.entries(connections)) {
|
|
867
|
+
connectionsMap.set(Number(level), new Set(nodeIds));
|
|
868
|
+
}
|
|
869
|
+
connections = connectionsMap;
|
|
870
|
+
}
|
|
871
|
+
// Properly reconstruct GraphVerb from HNSWVerb + metadata
|
|
872
|
+
const verb = {
|
|
873
|
+
id: edge.id,
|
|
874
|
+
vector: edge.vector, // Include the vector field!
|
|
875
|
+
connections: connections,
|
|
876
|
+
sourceId: metadata.sourceId || metadata.source,
|
|
877
|
+
targetId: metadata.targetId || metadata.target,
|
|
878
|
+
source: metadata.source || metadata.sourceId,
|
|
879
|
+
target: metadata.target || metadata.targetId,
|
|
880
|
+
verb: metadata.verb || metadata.type,
|
|
881
|
+
type: metadata.type || metadata.verb,
|
|
882
|
+
weight: metadata.weight,
|
|
883
|
+
metadata: metadata.metadata || metadata,
|
|
884
|
+
data: metadata.data,
|
|
885
|
+
createdAt: metadata.createdAt,
|
|
886
|
+
updatedAt: metadata.updatedAt,
|
|
887
|
+
createdBy: metadata.createdBy,
|
|
888
|
+
embedding: metadata.embedding || edge.vector
|
|
889
|
+
};
|
|
890
|
+
// Apply filters if provided
|
|
891
|
+
if (options.filter) {
|
|
892
|
+
const filter = options.filter;
|
|
893
|
+
// Check verbType filter
|
|
894
|
+
if (filter.verbType) {
|
|
895
|
+
const types = Array.isArray(filter.verbType) ? filter.verbType : [filter.verbType];
|
|
896
|
+
const verbType = verb.type || verb.verb;
|
|
897
|
+
if (verbType && !types.includes(verbType))
|
|
898
|
+
continue;
|
|
899
|
+
}
|
|
900
|
+
// Check sourceId filter
|
|
901
|
+
if (filter.sourceId) {
|
|
902
|
+
const sources = Array.isArray(filter.sourceId) ? filter.sourceId : [filter.sourceId];
|
|
903
|
+
const sourceId = verb.sourceId || verb.source;
|
|
904
|
+
if (!sourceId || !sources.includes(sourceId))
|
|
905
|
+
continue;
|
|
906
|
+
}
|
|
907
|
+
// Check targetId filter
|
|
908
|
+
if (filter.targetId) {
|
|
909
|
+
const targets = Array.isArray(filter.targetId) ? filter.targetId : [filter.targetId];
|
|
910
|
+
const targetId = verb.targetId || verb.target;
|
|
911
|
+
if (!targetId || !targets.includes(targetId))
|
|
912
|
+
continue;
|
|
913
|
+
}
|
|
914
|
+
// Check service filter
|
|
915
|
+
if (filter.service && metadata?.service) {
|
|
916
|
+
const services = Array.isArray(filter.service) ? filter.service : [filter.service];
|
|
917
|
+
if (!services.includes(metadata.service))
|
|
918
|
+
continue;
|
|
919
|
+
}
|
|
920
|
+
}
|
|
921
|
+
verbs.push(verb);
|
|
922
|
+
}
|
|
923
|
+
catch (error) {
|
|
924
|
+
console.warn(`Failed to read verb ${id}:`, error);
|
|
925
|
+
}
|
|
926
|
+
}
|
|
927
|
+
return {
|
|
928
|
+
items: verbs,
|
|
929
|
+
totalCount,
|
|
930
|
+
hasMore,
|
|
931
|
+
nextCursor: hasMore ? String(endIndex) : undefined
|
|
932
|
+
};
|
|
933
|
+
}
|
|
934
|
+
catch (error) {
|
|
935
|
+
if (error.code === 'ENOENT') {
|
|
936
|
+
// Verbs directory doesn't exist yet
|
|
937
|
+
return {
|
|
938
|
+
items: [],
|
|
939
|
+
totalCount: 0,
|
|
940
|
+
hasMore: false
|
|
941
|
+
};
|
|
942
|
+
}
|
|
943
|
+
throw error;
|
|
944
|
+
}
|
|
795
945
|
}
|
|
796
946
|
/**
|
|
797
947
|
* Delete a verb from storage
|
|
@@ -1030,7 +1180,60 @@ export class FileSystemStorage extends BaseStorage {
|
|
|
1030
1180
|
}
|
|
1031
1181
|
}
|
|
1032
1182
|
// Merge statistics from both locations
|
|
1033
|
-
return
|
|
1183
|
+
return this.mergeStatistics(newStats, oldStats);
|
|
1184
|
+
}
|
|
1185
|
+
/**
|
|
1186
|
+
* Merge statistics from multiple sources
|
|
1187
|
+
*/
|
|
1188
|
+
mergeStatistics(storageStats, localStats) {
|
|
1189
|
+
// Handle null cases
|
|
1190
|
+
if (!storageStats && !localStats) {
|
|
1191
|
+
return {
|
|
1192
|
+
nounCount: {},
|
|
1193
|
+
verbCount: {},
|
|
1194
|
+
metadataCount: {},
|
|
1195
|
+
hnswIndexSize: 0,
|
|
1196
|
+
totalNodes: 0,
|
|
1197
|
+
totalEdges: 0,
|
|
1198
|
+
lastUpdated: new Date().toISOString()
|
|
1199
|
+
};
|
|
1200
|
+
}
|
|
1201
|
+
if (!storageStats)
|
|
1202
|
+
return localStats;
|
|
1203
|
+
if (!localStats)
|
|
1204
|
+
return storageStats;
|
|
1205
|
+
// Merge noun counts by taking the maximum of each type
|
|
1206
|
+
const mergedNounCount = {
|
|
1207
|
+
...storageStats.nounCount
|
|
1208
|
+
};
|
|
1209
|
+
for (const [type, count] of Object.entries(localStats.nounCount)) {
|
|
1210
|
+
mergedNounCount[type] = Math.max(mergedNounCount[type] || 0, count);
|
|
1211
|
+
}
|
|
1212
|
+
// Merge verb counts by taking the maximum of each type
|
|
1213
|
+
const mergedVerbCount = {
|
|
1214
|
+
...storageStats.verbCount
|
|
1215
|
+
};
|
|
1216
|
+
for (const [type, count] of Object.entries(localStats.verbCount)) {
|
|
1217
|
+
mergedVerbCount[type] = Math.max(mergedVerbCount[type] || 0, count);
|
|
1218
|
+
}
|
|
1219
|
+
// Merge metadata counts by taking the maximum of each type
|
|
1220
|
+
const mergedMetadataCount = {
|
|
1221
|
+
...storageStats.metadataCount
|
|
1222
|
+
};
|
|
1223
|
+
for (const [type, count] of Object.entries(localStats.metadataCount)) {
|
|
1224
|
+
mergedMetadataCount[type] = Math.max(mergedMetadataCount[type] || 0, count);
|
|
1225
|
+
}
|
|
1226
|
+
return {
|
|
1227
|
+
nounCount: mergedNounCount,
|
|
1228
|
+
verbCount: mergedVerbCount,
|
|
1229
|
+
metadataCount: mergedMetadataCount,
|
|
1230
|
+
hnswIndexSize: Math.max(storageStats.hnswIndexSize || 0, localStats.hnswIndexSize || 0),
|
|
1231
|
+
totalNodes: Math.max(storageStats.totalNodes || 0, localStats.totalNodes || 0),
|
|
1232
|
+
totalEdges: Math.max(storageStats.totalEdges || 0, localStats.totalEdges || 0),
|
|
1233
|
+
totalMetadata: Math.max(storageStats.totalMetadata || 0, localStats.totalMetadata || 0),
|
|
1234
|
+
operations: storageStats.operations || localStats.operations,
|
|
1235
|
+
lastUpdated: new Date().toISOString()
|
|
1236
|
+
};
|
|
1034
1237
|
}
|
|
1035
1238
|
}
|
|
1036
1239
|
//# sourceMappingURL=fileSystemStorage.js.map
|
|
@@ -131,17 +131,17 @@ export declare class MemoryStorage extends BaseStorage {
|
|
|
131
131
|
*/
|
|
132
132
|
getMetadataBatch(ids: string[]): Promise<Map<string, any>>;
|
|
133
133
|
/**
|
|
134
|
-
* Save noun metadata to storage
|
|
134
|
+
* Save noun metadata to storage (internal implementation)
|
|
135
135
|
*/
|
|
136
|
-
|
|
136
|
+
protected saveNounMetadata_internal(id: string, metadata: any): Promise<void>;
|
|
137
137
|
/**
|
|
138
138
|
* Get noun metadata from storage
|
|
139
139
|
*/
|
|
140
140
|
getNounMetadata(id: string): Promise<any | null>;
|
|
141
141
|
/**
|
|
142
|
-
* Save verb metadata to storage
|
|
142
|
+
* Save verb metadata to storage (internal implementation)
|
|
143
143
|
*/
|
|
144
|
-
|
|
144
|
+
protected saveVerbMetadata_internal(id: string, metadata: any): Promise<void>;
|
|
145
145
|
/**
|
|
146
146
|
* Get verb metadata from storage
|
|
147
147
|
*/
|
|
@@ -35,7 +35,8 @@ export class MemoryStorage extends BaseStorage {
|
|
|
35
35
|
id: noun.id,
|
|
36
36
|
vector: [...noun.vector],
|
|
37
37
|
connections: new Map(),
|
|
38
|
-
level: noun.level || 0
|
|
38
|
+
level: noun.level || 0,
|
|
39
|
+
metadata: noun.metadata
|
|
39
40
|
};
|
|
40
41
|
// Copy connections
|
|
41
42
|
for (const [level, connections] of noun.connections.entries()) {
|
|
@@ -59,7 +60,8 @@ export class MemoryStorage extends BaseStorage {
|
|
|
59
60
|
id: noun.id,
|
|
60
61
|
vector: [...noun.vector],
|
|
61
62
|
connections: new Map(),
|
|
62
|
-
level: noun.level || 0
|
|
63
|
+
level: noun.level || 0,
|
|
64
|
+
metadata: noun.metadata
|
|
63
65
|
};
|
|
64
66
|
// Copy connections
|
|
65
67
|
for (const [level, connections] of noun.connections.entries()) {
|
|
@@ -89,12 +91,14 @@ export class MemoryStorage extends BaseStorage {
|
|
|
89
91
|
const matchingIds = [];
|
|
90
92
|
// Iterate through all nouns to find matches
|
|
91
93
|
for (const [nounId, noun] of this.nouns.entries()) {
|
|
92
|
-
//
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
94
|
+
// Check the noun's embedded metadata field
|
|
95
|
+
const nounMetadata = noun.metadata || {};
|
|
96
|
+
// Also check separate metadata store for backward compatibility
|
|
97
|
+
const separateMetadata = await this.getMetadata(nounId);
|
|
98
|
+
// Merge both metadata sources (noun.metadata takes precedence)
|
|
99
|
+
const metadata = { ...separateMetadata, ...nounMetadata };
|
|
96
100
|
// Filter by noun type if specified
|
|
97
|
-
if (nounTypes && !nounTypes.includes(metadata.noun)) {
|
|
101
|
+
if (nounTypes && metadata.noun && !nounTypes.includes(metadata.noun)) {
|
|
98
102
|
continue;
|
|
99
103
|
}
|
|
100
104
|
// Filter by service if specified
|
|
@@ -133,7 +137,8 @@ export class MemoryStorage extends BaseStorage {
|
|
|
133
137
|
id: noun.id,
|
|
134
138
|
vector: [...noun.vector],
|
|
135
139
|
connections: new Map(),
|
|
136
|
-
level: noun.level || 0
|
|
140
|
+
level: noun.level || 0,
|
|
141
|
+
metadata: noun.metadata
|
|
137
142
|
};
|
|
138
143
|
// Copy connections
|
|
139
144
|
for (const [level, connections] of noun.connections.entries()) {
|
|
@@ -424,9 +429,9 @@ export class MemoryStorage extends BaseStorage {
|
|
|
424
429
|
return results;
|
|
425
430
|
}
|
|
426
431
|
/**
|
|
427
|
-
* Save noun metadata to storage
|
|
432
|
+
* Save noun metadata to storage (internal implementation)
|
|
428
433
|
*/
|
|
429
|
-
async
|
|
434
|
+
async saveNounMetadata_internal(id, metadata) {
|
|
430
435
|
this.nounMetadata.set(id, JSON.parse(JSON.stringify(metadata)));
|
|
431
436
|
}
|
|
432
437
|
/**
|
|
@@ -440,9 +445,9 @@ export class MemoryStorage extends BaseStorage {
|
|
|
440
445
|
return JSON.parse(JSON.stringify(metadata));
|
|
441
446
|
}
|
|
442
447
|
/**
|
|
443
|
-
* Save verb metadata to storage
|
|
448
|
+
* Save verb metadata to storage (internal implementation)
|
|
444
449
|
*/
|
|
445
|
-
async
|
|
450
|
+
async saveVerbMetadata_internal(id, metadata) {
|
|
446
451
|
this.verbMetadata.set(id, JSON.parse(JSON.stringify(metadata)));
|
|
447
452
|
}
|
|
448
453
|
/**
|
|
@@ -144,7 +144,7 @@ export declare class OPFSStorage extends BaseStorage {
|
|
|
144
144
|
/**
|
|
145
145
|
* Save verb metadata to storage
|
|
146
146
|
*/
|
|
147
|
-
|
|
147
|
+
protected saveVerbMetadata_internal(id: string, metadata: any): Promise<void>;
|
|
148
148
|
/**
|
|
149
149
|
* Get verb metadata from storage
|
|
150
150
|
*/
|
|
@@ -152,7 +152,7 @@ export declare class OPFSStorage extends BaseStorage {
|
|
|
152
152
|
/**
|
|
153
153
|
* Save noun metadata to storage
|
|
154
154
|
*/
|
|
155
|
-
|
|
155
|
+
protected saveNounMetadata_internal(id: string, metadata: any): Promise<void>;
|
|
156
156
|
/**
|
|
157
157
|
* Get noun metadata from storage
|
|
158
158
|
*/
|
|
@@ -540,7 +540,7 @@ export class OPFSStorage extends BaseStorage {
|
|
|
540
540
|
/**
|
|
541
541
|
* Save verb metadata to storage
|
|
542
542
|
*/
|
|
543
|
-
async
|
|
543
|
+
async saveVerbMetadata_internal(id, metadata) {
|
|
544
544
|
await this.ensureInitialized();
|
|
545
545
|
const fileName = `${id}.json`;
|
|
546
546
|
const fileHandle = await this.verbMetadataDir.getFileHandle(fileName, { create: true });
|
|
@@ -570,7 +570,7 @@ export class OPFSStorage extends BaseStorage {
|
|
|
570
570
|
/**
|
|
571
571
|
* Save noun metadata to storage
|
|
572
572
|
*/
|
|
573
|
-
async
|
|
573
|
+
async saveNounMetadata_internal(id, metadata) {
|
|
574
574
|
await this.ensureInitialized();
|
|
575
575
|
const fileName = `${id}.json`;
|
|
576
576
|
const fileHandle = await this.nounMetadataDir.getFileHandle(fileName, { create: true });
|
|
@@ -328,7 +328,7 @@ export declare class S3CompatibleStorage extends BaseStorage {
|
|
|
328
328
|
/**
|
|
329
329
|
* Save verb metadata to storage
|
|
330
330
|
*/
|
|
331
|
-
|
|
331
|
+
protected saveVerbMetadata_internal(id: string, metadata: any): Promise<void>;
|
|
332
332
|
/**
|
|
333
333
|
* Get verb metadata from storage
|
|
334
334
|
*/
|
|
@@ -336,7 +336,7 @@ export declare class S3CompatibleStorage extends BaseStorage {
|
|
|
336
336
|
/**
|
|
337
337
|
* Save noun metadata to storage
|
|
338
338
|
*/
|
|
339
|
-
|
|
339
|
+
protected saveNounMetadata_internal(id: string, metadata: any): Promise<void>;
|
|
340
340
|
/**
|
|
341
341
|
* Get multiple metadata objects in batches (CRITICAL: Prevents socket exhaustion)
|
|
342
342
|
* This is the solution to the metadata reading socket exhaustion during initialization
|
|
@@ -1450,7 +1450,7 @@ export class S3CompatibleStorage extends BaseStorage {
|
|
|
1450
1450
|
/**
|
|
1451
1451
|
* Save verb metadata to storage
|
|
1452
1452
|
*/
|
|
1453
|
-
async
|
|
1453
|
+
async saveVerbMetadata_internal(id, metadata) {
|
|
1454
1454
|
await this.ensureInitialized();
|
|
1455
1455
|
try {
|
|
1456
1456
|
// Import the PutObjectCommand only when needed
|
|
@@ -1523,7 +1523,7 @@ export class S3CompatibleStorage extends BaseStorage {
|
|
|
1523
1523
|
/**
|
|
1524
1524
|
* Save noun metadata to storage
|
|
1525
1525
|
*/
|
|
1526
|
-
async
|
|
1526
|
+
async saveNounMetadata_internal(id, metadata) {
|
|
1527
1527
|
await this.ensureInitialized();
|
|
1528
1528
|
try {
|
|
1529
1529
|
// Import the PutObjectCommand only when needed
|
|
@@ -1,84 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Handles the transition from 'index' to '_system' directory
|
|
5
|
-
* Ensures services running different versions can coexist
|
|
6
|
-
*/
|
|
7
|
-
import { StatisticsData } from '../coreTypes.js';
|
|
8
|
-
export interface MigrationMetadata {
|
|
9
|
-
schemaVersion: number;
|
|
10
|
-
migrationStarted?: string;
|
|
11
|
-
migrationCompleted?: string;
|
|
12
|
-
lastUpdatedBy?: string;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Backward compatibility strategy for directory migration
|
|
2
|
+
* Storage backward compatibility layer for legacy data migrations
|
|
16
3
|
*/
|
|
17
4
|
export declare class StorageCompatibilityLayer {
|
|
18
|
-
private migrationMetadata;
|
|
19
|
-
/**
|
|
20
|
-
* Determines the read strategy based on what's available
|
|
21
|
-
* @returns Priority-ordered list of directories to try
|
|
22
|
-
*/
|
|
23
|
-
static getReadPriority(): string[];
|
|
24
|
-
/**
|
|
25
|
-
* Determines write strategy based on migration state
|
|
26
|
-
* @param migrationComplete Whether migration is complete
|
|
27
|
-
* @returns List of directories to write to
|
|
28
|
-
*/
|
|
29
|
-
static getWriteTargets(migrationComplete?: boolean): string[];
|
|
30
|
-
/**
|
|
31
|
-
* Check if we should perform migration based on service coordination
|
|
32
|
-
* @param existingStats Statistics from storage
|
|
33
|
-
* @returns Whether to initiate migration
|
|
34
|
-
*/
|
|
35
|
-
static shouldMigrate(existingStats: StatisticsData | null): boolean;
|
|
36
|
-
/**
|
|
37
|
-
* Creates migration metadata
|
|
38
|
-
*/
|
|
39
|
-
static createMigrationMetadata(): MigrationMetadata;
|
|
40
|
-
/**
|
|
41
|
-
* Merge statistics from multiple locations (deduplication)
|
|
42
|
-
*/
|
|
43
|
-
static mergeStatistics(primary: StatisticsData | null, fallback: StatisticsData | null): StatisticsData | null;
|
|
44
|
-
/**
|
|
45
|
-
* Determines if dual-write is needed based on environment
|
|
46
|
-
* @param storageType The type of storage being used
|
|
47
|
-
* @returns Whether to write to both old and new locations
|
|
48
|
-
*/
|
|
49
|
-
static needsDualWrite(storageType: string): boolean;
|
|
50
|
-
/**
|
|
51
|
-
* Grace period for migration (30 days default)
|
|
52
|
-
* After this period, services can stop reading from old location
|
|
53
|
-
*/
|
|
54
|
-
static getMigrationGracePeriodMs(): number;
|
|
55
|
-
/**
|
|
56
|
-
* Check if migration grace period has expired
|
|
57
|
-
*/
|
|
58
|
-
static isGracePeriodExpired(migrationStarted: string): boolean;
|
|
59
|
-
/**
|
|
60
|
-
* Log migration events for monitoring
|
|
61
|
-
*/
|
|
62
5
|
static logMigrationEvent(event: string, details?: any): void;
|
|
6
|
+
static migrateIfNeeded(storagePath: string): Promise<void>;
|
|
63
7
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
static getStatisticsPath(baseDir: string, filename?: string): string;
|
|
72
|
-
/**
|
|
73
|
-
* Get distributed config path
|
|
74
|
-
*/
|
|
75
|
-
static getDistributedConfigPath(baseDir: string): string;
|
|
76
|
-
/**
|
|
77
|
-
* Check if a path is using the old structure
|
|
78
|
-
*/
|
|
79
|
-
static isLegacyPath(path: string): boolean;
|
|
80
|
-
/**
|
|
81
|
-
* Convert legacy path to new structure
|
|
82
|
-
*/
|
|
83
|
-
static modernizePath(path: string): string;
|
|
8
|
+
export interface StoragePaths {
|
|
9
|
+
nouns: string;
|
|
10
|
+
verbs: string;
|
|
11
|
+
metadata: string;
|
|
12
|
+
index: string;
|
|
13
|
+
system: string;
|
|
14
|
+
statistics: string;
|
|
84
15
|
}
|
|
16
|
+
export declare function getDefaultStoragePaths(basePath: string): StoragePaths;
|