@soulcraft/brainy 3.48.0 → 3.50.0

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.
Files changed (37) hide show
  1. package/dist/api/UniversalImportAPI.d.ts +11 -1
  2. package/dist/api/UniversalImportAPI.js +93 -24
  3. package/dist/brainy.d.ts +5 -1
  4. package/dist/import/ImportCoordinator.d.ts +5 -1
  5. package/dist/import/ImportCoordinator.js +13 -1
  6. package/dist/importers/SmartImportOrchestrator.d.ts +1 -1
  7. package/dist/importers/SmartImportOrchestrator.js +65 -12
  8. package/dist/neural/embeddedTypeEmbeddings.d.ts +1 -1
  9. package/dist/neural/embeddedTypeEmbeddings.js +2 -2
  10. package/dist/storage/baseStorage.js +3 -1
  11. package/dist/utils/fieldTypeInference.d.ts +181 -0
  12. package/dist/utils/fieldTypeInference.js +420 -0
  13. package/dist/utils/metadataIndex.d.ts +7 -1
  14. package/dist/utils/metadataIndex.js +43 -11
  15. package/dist/utils/metadataIndexChunking.d.ts +7 -0
  16. package/dist/utils/metadataIndexChunking.js +14 -0
  17. package/package.json +1 -1
  18. package/dist/augmentations/KnowledgeAugmentation.d.ts +0 -40
  19. package/dist/augmentations/KnowledgeAugmentation.js +0 -251
  20. package/dist/query/typeInference.d.ts +0 -158
  21. package/dist/query/typeInference.js +0 -760
  22. package/dist/types/brainyDataInterface.d.ts +0 -52
  23. package/dist/types/brainyDataInterface.js +0 -10
  24. package/dist/vfs/ConceptSystem.d.ts +0 -203
  25. package/dist/vfs/ConceptSystem.js +0 -545
  26. package/dist/vfs/EntityManager.d.ts +0 -75
  27. package/dist/vfs/EntityManager.js +0 -216
  28. package/dist/vfs/EventRecorder.d.ts +0 -84
  29. package/dist/vfs/EventRecorder.js +0 -269
  30. package/dist/vfs/GitBridge.d.ts +0 -167
  31. package/dist/vfs/GitBridge.js +0 -537
  32. package/dist/vfs/KnowledgeLayer.d.ts +0 -35
  33. package/dist/vfs/KnowledgeLayer.js +0 -443
  34. package/dist/vfs/PersistentEntitySystem.d.ts +0 -165
  35. package/dist/vfs/PersistentEntitySystem.js +0 -503
  36. package/dist/vfs/SemanticVersioning.d.ts +0 -105
  37. package/dist/vfs/SemanticVersioning.js +0 -309
@@ -1,251 +0,0 @@
1
- /**
2
- * Knowledge Layer Augmentation for VFS
3
- *
4
- * Adds intelligent features to VFS without modifying core functionality:
5
- * - Event recording for all operations
6
- * - Semantic versioning based on content changes
7
- * - Entity and concept extraction
8
- * - Git bridge for import/export
9
- *
10
- * This is a TRUE augmentation - VFS works perfectly without it
11
- */
12
- import { BaseAugmentation } from './brainyAugmentation.js';
13
- import { EventRecorder } from '../vfs/EventRecorder.js';
14
- import { SemanticVersioning } from '../vfs/SemanticVersioning.js';
15
- import { PersistentEntitySystem } from '../vfs/PersistentEntitySystem.js';
16
- import { ConceptSystem } from '../vfs/ConceptSystem.js';
17
- import { GitBridge } from '../vfs/GitBridge.js';
18
- export class KnowledgeAugmentation extends BaseAugmentation {
19
- constructor(config = {}) {
20
- super(config);
21
- this.name = 'knowledge';
22
- this.timing = 'after'; // Process after VFS operations
23
- this.metadata = 'none'; // No metadata access needed
24
- this.operations = []; // VFS-specific augmentation, no operation interception
25
- this.priority = 100; // Run last
26
- this.originalMethods = new Map();
27
- }
28
- async execute(operation, params, next) {
29
- // Pass through - this augmentation works at VFS level, not operation level
30
- return await next();
31
- }
32
- async initialize(context) {
33
- await this.augment(context.brain);
34
- }
35
- async augment(brain) {
36
- // Only augment if VFS exists
37
- const vfs = brain.vfs?.();
38
- if (!vfs) {
39
- console.warn('KnowledgeAugmentation: VFS not found, skipping');
40
- return;
41
- }
42
- // Initialize Knowledge Layer components
43
- this.eventRecorder = new EventRecorder(brain);
44
- this.semanticVersioning = new SemanticVersioning(brain);
45
- this.entitySystem = new PersistentEntitySystem(brain);
46
- this.conceptSystem = new ConceptSystem(brain);
47
- this.gitBridge = new GitBridge(vfs, brain);
48
- // Wrap VFS methods to add intelligence WITHOUT slowing them down
49
- this.wrapMethod(vfs, 'writeFile', async (original, path, data, options) => {
50
- // Call original first (stays fast)
51
- const result = await original.call(vfs, path, data, options);
52
- // Knowledge processing in background (non-blocking)
53
- setImmediate(async () => {
54
- try {
55
- // Record event
56
- if (this.eventRecorder) {
57
- await this.eventRecorder.recordEvent({
58
- type: 'write',
59
- path,
60
- content: data,
61
- size: data.length,
62
- author: options?.author || 'system'
63
- });
64
- }
65
- // Check for semantic versioning
66
- if (this.semanticVersioning) {
67
- const existingContent = await vfs.readFile(path).catch(() => null);
68
- const shouldVersion = existingContent && this.isSemanticChange(existingContent, data);
69
- if (shouldVersion) {
70
- await this.semanticVersioning.createVersion(path, data, {
71
- message: 'Automatic semantic version'
72
- });
73
- }
74
- }
75
- // Extract concepts
76
- if (this.conceptSystem && options?.extractConcepts !== false) {
77
- await this.conceptSystem.extractAndLinkConcepts(path, data);
78
- }
79
- // Extract entities
80
- if (this.entitySystem && options?.extractEntities !== false) {
81
- await this.entitySystem.extractEntities(data.toString('utf8'), data);
82
- }
83
- }
84
- catch (error) {
85
- // Knowledge Layer errors should not affect VFS operations
86
- console.debug('KnowledgeLayer background processing error:', error);
87
- }
88
- });
89
- return result;
90
- });
91
- this.wrapMethod(vfs, 'unlink', async (original, path) => {
92
- const result = await original.call(vfs, path);
93
- // Record deletion event
94
- setImmediate(async () => {
95
- if (this.eventRecorder) {
96
- await this.eventRecorder.recordEvent({
97
- type: 'delete',
98
- path,
99
- author: 'system'
100
- });
101
- }
102
- });
103
- return result;
104
- });
105
- this.wrapMethod(vfs, 'rename', async (original, oldPath, newPath) => {
106
- const result = await original.call(vfs, oldPath, newPath);
107
- // Record rename event
108
- setImmediate(async () => {
109
- if (this.eventRecorder) {
110
- await this.eventRecorder.recordEvent({
111
- type: 'rename',
112
- path: oldPath,
113
- metadata: { newPath },
114
- author: 'system'
115
- });
116
- }
117
- });
118
- return result;
119
- });
120
- // Add Knowledge Layer methods to VFS
121
- this.addKnowledgeMethods(vfs);
122
- console.log('✨ Knowledge Layer augmentation enabled');
123
- }
124
- /**
125
- * Wrap a VFS method to add Knowledge Layer functionality
126
- */
127
- wrapMethod(vfs, methodName, wrapper) {
128
- const original = vfs[methodName];
129
- if (!original)
130
- return;
131
- // Store original for cleanup
132
- this.originalMethods.set(methodName, original);
133
- // Replace with wrapped version
134
- vfs[methodName] = async (...args) => {
135
- return await wrapper(original, ...args);
136
- };
137
- }
138
- /**
139
- * Add Knowledge Layer methods to VFS
140
- */
141
- addKnowledgeMethods(vfs) {
142
- // Event history
143
- vfs.getHistory = async (path, options) => {
144
- if (!this.eventRecorder)
145
- throw new Error('Knowledge Layer not initialized');
146
- return await this.eventRecorder.getHistory(path, options);
147
- };
148
- vfs.reconstructAtTime = async (path, timestamp) => {
149
- if (!this.eventRecorder)
150
- throw new Error('Knowledge Layer not initialized');
151
- return await this.eventRecorder.reconstructFileAtTime(path, timestamp);
152
- };
153
- // Semantic versioning
154
- vfs.getVersions = async (path) => {
155
- if (!this.semanticVersioning)
156
- throw new Error('Knowledge Layer not initialized');
157
- return await this.semanticVersioning.getVersions(path);
158
- };
159
- vfs.restoreVersion = async (path, versionId) => {
160
- if (!this.semanticVersioning)
161
- throw new Error('Knowledge Layer not initialized');
162
- const version = await this.semanticVersioning.getVersion(path, versionId);
163
- if (version) {
164
- await vfs.writeFile(path, version);
165
- }
166
- };
167
- // Entities
168
- vfs.findEntity = async (query) => {
169
- if (!this.entitySystem)
170
- throw new Error('Knowledge Layer not initialized');
171
- return await this.entitySystem.findEntity(query);
172
- };
173
- vfs.getEntityAppearances = async (entityId) => {
174
- if (!this.entitySystem)
175
- throw new Error('Knowledge Layer not initialized');
176
- return await this.entitySystem.getEvolution(entityId);
177
- };
178
- // Concepts
179
- vfs.getConcepts = async (path) => {
180
- if (!this.conceptSystem)
181
- throw new Error('Knowledge Layer not initialized');
182
- const concepts = await this.conceptSystem.findConcepts({ manifestedIn: path });
183
- return concepts;
184
- };
185
- vfs.getConceptGraph = async (options) => {
186
- if (!this.conceptSystem)
187
- throw new Error('Knowledge Layer not initialized');
188
- return await this.conceptSystem.getConceptGraph(options);
189
- };
190
- // Git bridge
191
- vfs.exportToGit = async (vfsPath, gitPath) => {
192
- if (!this.gitBridge)
193
- throw new Error('Knowledge Layer not initialized');
194
- return await this.gitBridge.exportToGit(vfsPath, gitPath);
195
- };
196
- vfs.importFromGit = async (gitPath, vfsPath) => {
197
- if (!this.gitBridge)
198
- throw new Error('Knowledge Layer not initialized');
199
- return await this.gitBridge.importFromGit(gitPath, vfsPath);
200
- };
201
- // Temporal coupling
202
- vfs.findTemporalCoupling = async (path, windowMs) => {
203
- if (!this.eventRecorder)
204
- throw new Error('Knowledge Layer not initialized');
205
- return await this.eventRecorder.findTemporalCoupling(path, windowMs);
206
- };
207
- }
208
- isSemanticChange(oldContent, newContent) {
209
- // Simple heuristic - significant size change or different content
210
- const oldStr = oldContent.toString('utf8');
211
- const newStr = newContent.toString('utf8');
212
- // Check for significant size change (>10%)
213
- const sizeDiff = Math.abs(oldStr.length - newStr.length) / oldStr.length;
214
- if (sizeDiff > 0.1)
215
- return true;
216
- // Check for structural changes (simplified)
217
- const oldLines = oldStr.split('\n').filter(l => l.trim());
218
- const newLines = newStr.split('\n').filter(l => l.trim());
219
- // Different number of non-empty lines
220
- return Math.abs(oldLines.length - newLines.length) > 5;
221
- }
222
- async cleanup(brain) {
223
- const vfs = brain.vfs?.();
224
- if (!vfs)
225
- return;
226
- // Restore original methods
227
- for (const [methodName, original] of this.originalMethods) {
228
- vfs[methodName] = original;
229
- }
230
- // Remove added methods
231
- delete vfs.getHistory;
232
- delete vfs.reconstructAtTime;
233
- delete vfs.getVersions;
234
- delete vfs.restoreVersion;
235
- delete vfs.findEntity;
236
- delete vfs.getEntityAppearances;
237
- delete vfs.getConcepts;
238
- delete vfs.getConceptGraph;
239
- delete vfs.exportToGit;
240
- delete vfs.importFromGit;
241
- delete vfs.findTemporalCoupling;
242
- // Clean up components
243
- this.eventRecorder = undefined;
244
- this.semanticVersioning = undefined;
245
- this.entitySystem = undefined;
246
- this.conceptSystem = undefined;
247
- this.gitBridge = undefined;
248
- console.log('Knowledge Layer augmentation removed');
249
- }
250
- }
251
- //# sourceMappingURL=KnowledgeAugmentation.js.map
@@ -1,158 +0,0 @@
1
- /**
2
- * Type Inference System - Phase 3: Type-First Query Optimization
3
- *
4
- * Automatically infers NounTypes from natural language queries using keyword-based
5
- * heuristics for fast O(1) type detection.
6
- *
7
- * Performance Guarantee: < 1ms per query
8
- * Accuracy Target: > 80%
9
- *
10
- * Examples:
11
- * - "Find engineers in San Francisco" → [Person, Location]
12
- * - "Show documents about AI" → [Document, Concept]
13
- * - "List companies in tech sector" → [Organization, Topic]
14
- */
15
- import { NounType } from '../types/graphTypes.js';
16
- /**
17
- * Result of type inference with confidence score
18
- */
19
- export interface TypeInference {
20
- type: NounType;
21
- confidence: number;
22
- matchedKeywords: string[];
23
- }
24
- /**
25
- * Configuration for type inference behavior
26
- */
27
- export interface TypeInferenceConfig {
28
- /**
29
- * Minimum confidence threshold to include a type (default: 0.4)
30
- */
31
- minConfidence?: number;
32
- /**
33
- * Maximum number of types to return (default: 5)
34
- */
35
- maxTypes?: number;
36
- /**
37
- * Enable debug logging (default: false)
38
- */
39
- debug?: boolean;
40
- /**
41
- * Enable vector similarity fallback for unknown words (default: false)
42
- * When enabled, queries with low keyword confidence trigger vector-based type inference
43
- */
44
- enableVectorFallback?: boolean;
45
- /**
46
- * Minimum confidence threshold to trigger vector fallback (default: 0.7)
47
- * If keyword matching produces confidence below this, vector fallback is used
48
- */
49
- fallbackConfidenceThreshold?: number;
50
- /**
51
- * Minimum similarity score for vector-based type matches (default: 0.5)
52
- */
53
- vectorThreshold?: number;
54
- }
55
- /**
56
- * Type Inference System
57
- *
58
- * Uses keyword matching for fast type detection from natural language.
59
- * Designed for billion-scale performance with minimal latency.
60
- */
61
- export declare class TypeInferenceSystem {
62
- private keywordMap;
63
- private phraseMap;
64
- private config;
65
- private typeEmbeddings;
66
- private embedder;
67
- constructor(config?: TypeInferenceConfig);
68
- /**
69
- * Infer noun types from a natural language query (synchronous keyword matching only)
70
- * For hybrid mode with vector fallback, use inferTypesAsync()
71
- *
72
- * @param query - Natural language query string
73
- * @returns Array of type inferences sorted by confidence (highest first)
74
- */
75
- inferTypes(query: string): TypeInference[];
76
- /**
77
- * Infer noun types with hybrid approach: keyword matching + optional vector fallback
78
- * This is the async version that supports vector similarity fallback
79
- *
80
- * @param query - Natural language query string
81
- * @returns Promise resolving to array of type inferences
82
- */
83
- inferTypesAsync(query: string): Promise<TypeInference[]>;
84
- /**
85
- * Internal: Keyword-based type inference (synchronous, fast)
86
- */
87
- private inferTypesViaKeywords;
88
- /**
89
- * Internal: Hybrid inference with vector fallback (asynchronous)
90
- */
91
- private inferTypesWithFallback;
92
- /**
93
- * Match multi-word phrases in query
94
- */
95
- private matchPhrases;
96
- /**
97
- * Match individual keywords in query
98
- */
99
- private matchKeywords;
100
- /**
101
- * Find closest keyword using edit distance (for typo correction)
102
- * Allows edit distance 1-2 depending on word length
103
- */
104
- private findFuzzyKeywordMatch;
105
- /**
106
- * Calculate Levenshtein (edit) distance between two strings
107
- */
108
- private levenshteinDistance;
109
- /**
110
- * Update type score with new match
111
- */
112
- private updateTypeScore;
113
- /**
114
- * Load pre-compiled type embeddings from embeddedTypeEmbeddings.ts
115
- */
116
- private loadTypeEmbeddings;
117
- /**
118
- * Lazy-load TransformerEmbedding model (only when vector fallback is triggered)
119
- */
120
- private loadEmbedder;
121
- /**
122
- * Calculate cosine similarity between two vectors
123
- */
124
- private cosineSimilarity;
125
- /**
126
- * Infer types using vector similarity against pre-compiled type embeddings
127
- */
128
- private inferTypesViaVectorSimilarity;
129
- /**
130
- * Merge keyword-based and vector-based results
131
- * Prioritizes keyword results (explicit matches) over vector results (semantic matches)
132
- */
133
- private mergeResults;
134
- /**
135
- * Build keyword dictionary for single-word matching
136
- */
137
- private buildKeywordMap;
138
- /**
139
- * Build phrase dictionary for multi-word matching
140
- */
141
- private buildPhraseMap;
142
- /**
143
- * Get statistics about the inference system
144
- */
145
- getStats(): {
146
- keywordCount: number;
147
- phraseCount: number;
148
- config: Required<TypeInferenceConfig>;
149
- };
150
- }
151
- /**
152
- * Get or create the global TypeInferenceSystem instance
153
- */
154
- export declare function getTypeInferenceSystem(config?: TypeInferenceConfig): TypeInferenceSystem;
155
- /**
156
- * Convenience function to infer types from a query
157
- */
158
- export declare function inferTypes(query: string, config?: TypeInferenceConfig): TypeInference[];