@soulcraft/brainy 2.10.1 → 2.12.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.
- package/README.md +10 -10
- package/dist/augmentations/apiServerAugmentation.js +2 -2
- package/dist/augmentations/display/fieldPatterns.d.ts +1 -1
- package/dist/augmentations/display/fieldPatterns.js +1 -1
- package/dist/augmentations/display/intelligentComputation.d.ts +2 -2
- package/dist/augmentations/display/intelligentComputation.js +4 -4
- package/dist/augmentations/display/types.d.ts +1 -1
- package/dist/augmentations/neuralImport.js +4 -4
- package/dist/augmentations/synapseAugmentation.js +3 -3
- package/dist/augmentations/typeMatching/brainyTypes.d.ts +83 -0
- package/dist/augmentations/typeMatching/brainyTypes.js +425 -0
- package/dist/augmentations/universalDisplayAugmentation.d.ts +1 -1
- package/dist/augmentations/universalDisplayAugmentation.js +1 -1
- package/dist/brainyData.d.ts +20 -41
- package/dist/brainyData.js +1467 -1430
- package/dist/chat/BrainyChat.js +11 -11
- package/dist/examples/basicUsage.js +4 -1
- package/dist/importManager.js +2 -2
- package/dist/index.d.ts +3 -1
- package/dist/index.js +5 -1
- package/dist/neural/embeddedPatterns.d.ts +1 -1
- package/dist/neural/embeddedPatterns.js +2 -2
- package/dist/neural/improvedNeuralAPI.d.ts +346 -0
- package/dist/neural/improvedNeuralAPI.js +2439 -0
- package/dist/neural/types.d.ts +267 -0
- package/dist/neural/types.js +24 -0
- package/dist/storage/adapters/fileSystemStorage.d.ts +2 -2
- package/dist/storage/adapters/fileSystemStorage.js +2 -2
- package/dist/storage/adapters/memoryStorage.d.ts +4 -4
- package/dist/storage/adapters/memoryStorage.js +4 -4
- 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/baseStorage.d.ts +12 -2
- package/dist/storage/baseStorage.js +32 -0
- package/dist/types/brainyDataInterface.d.ts +2 -5
- package/dist/utils/brainyTypes.d.ts +217 -0
- package/dist/utils/brainyTypes.js +261 -0
- package/dist/utils/typeValidation.d.ts +25 -0
- package/dist/utils/typeValidation.js +127 -0
- package/package.json +1 -1
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Neural API Type Definitions
|
|
3
|
+
* Comprehensive interfaces for clustering, similarity, and analysis
|
|
4
|
+
*/
|
|
5
|
+
export interface Vector {
|
|
6
|
+
[index: number]: number;
|
|
7
|
+
length: number;
|
|
8
|
+
}
|
|
9
|
+
export interface SemanticCluster {
|
|
10
|
+
id: string;
|
|
11
|
+
centroid: Vector;
|
|
12
|
+
members: string[];
|
|
13
|
+
size: number;
|
|
14
|
+
confidence: number;
|
|
15
|
+
label?: string;
|
|
16
|
+
metadata?: Record<string, any>;
|
|
17
|
+
cohesion?: number;
|
|
18
|
+
level?: number;
|
|
19
|
+
}
|
|
20
|
+
export interface DomainCluster extends SemanticCluster {
|
|
21
|
+
domain: string;
|
|
22
|
+
domainConfidence: number;
|
|
23
|
+
crossDomainMembers?: string[];
|
|
24
|
+
}
|
|
25
|
+
export interface TemporalCluster extends SemanticCluster {
|
|
26
|
+
timeWindow: TimeWindow;
|
|
27
|
+
trend?: 'increasing' | 'decreasing' | 'stable';
|
|
28
|
+
temporal: {
|
|
29
|
+
startTime: Date;
|
|
30
|
+
endTime: Date;
|
|
31
|
+
peakTime?: Date;
|
|
32
|
+
frequency?: number;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export interface ExplainableCluster extends SemanticCluster {
|
|
36
|
+
explanation: {
|
|
37
|
+
primaryFeatures: string[];
|
|
38
|
+
commonTerms: string[];
|
|
39
|
+
reasoning: string;
|
|
40
|
+
confidence: number;
|
|
41
|
+
};
|
|
42
|
+
subClusters?: ExplainableCluster[];
|
|
43
|
+
}
|
|
44
|
+
export interface ConfidentCluster extends SemanticCluster {
|
|
45
|
+
minConfidence: number;
|
|
46
|
+
uncertainMembers: string[];
|
|
47
|
+
certainMembers: string[];
|
|
48
|
+
}
|
|
49
|
+
export interface BaseClusteringOptions {
|
|
50
|
+
maxClusters?: number;
|
|
51
|
+
minClusterSize?: number;
|
|
52
|
+
threshold?: number;
|
|
53
|
+
cacheResults?: boolean;
|
|
54
|
+
}
|
|
55
|
+
export interface ClusteringOptions extends BaseClusteringOptions {
|
|
56
|
+
algorithm?: 'auto' | 'hierarchical' | 'kmeans' | 'dbscan' | 'sample' | 'semantic' | 'graph' | 'multimodal';
|
|
57
|
+
sampleSize?: number;
|
|
58
|
+
strategy?: 'random' | 'diverse' | 'recent' | 'important';
|
|
59
|
+
memoryLimit?: string;
|
|
60
|
+
includeOutliers?: boolean;
|
|
61
|
+
maxIterations?: number;
|
|
62
|
+
tolerance?: number;
|
|
63
|
+
}
|
|
64
|
+
export interface DomainClusteringOptions extends BaseClusteringOptions {
|
|
65
|
+
domainField?: string;
|
|
66
|
+
crossDomainThreshold?: number;
|
|
67
|
+
preserveDomainBoundaries?: boolean;
|
|
68
|
+
}
|
|
69
|
+
export interface TemporalClusteringOptions extends BaseClusteringOptions {
|
|
70
|
+
timeField: string;
|
|
71
|
+
windows: TimeWindow[];
|
|
72
|
+
overlapStrategy?: 'merge' | 'separate' | 'hierarchical';
|
|
73
|
+
trendAnalysis?: boolean;
|
|
74
|
+
}
|
|
75
|
+
export interface StreamClusteringOptions extends BaseClusteringOptions {
|
|
76
|
+
batchSize?: number;
|
|
77
|
+
updateInterval?: number;
|
|
78
|
+
adaptiveThreshold?: boolean;
|
|
79
|
+
decayFactor?: number;
|
|
80
|
+
}
|
|
81
|
+
export interface SimilarityOptions {
|
|
82
|
+
detailed?: boolean;
|
|
83
|
+
metric?: 'cosine' | 'euclidean' | 'manhattan' | 'jaccard';
|
|
84
|
+
normalized?: boolean;
|
|
85
|
+
}
|
|
86
|
+
export interface SimilarityResult {
|
|
87
|
+
score: number;
|
|
88
|
+
confidence: number;
|
|
89
|
+
explanation?: string;
|
|
90
|
+
metric?: string;
|
|
91
|
+
}
|
|
92
|
+
export interface NeighborOptions {
|
|
93
|
+
limit?: number;
|
|
94
|
+
radius?: number;
|
|
95
|
+
minSimilarity?: number;
|
|
96
|
+
includeMetadata?: boolean;
|
|
97
|
+
sortBy?: 'similarity' | 'importance' | 'recency';
|
|
98
|
+
}
|
|
99
|
+
export interface Neighbor {
|
|
100
|
+
id: string;
|
|
101
|
+
similarity: number;
|
|
102
|
+
data?: any;
|
|
103
|
+
metadata?: Record<string, any>;
|
|
104
|
+
distance?: number;
|
|
105
|
+
}
|
|
106
|
+
export interface NeighborsResult {
|
|
107
|
+
neighbors: Neighbor[];
|
|
108
|
+
queryId: string;
|
|
109
|
+
totalFound: number;
|
|
110
|
+
averageSimilarity: number;
|
|
111
|
+
}
|
|
112
|
+
export interface SemanticHierarchy {
|
|
113
|
+
self: {
|
|
114
|
+
id: string;
|
|
115
|
+
vector?: Vector;
|
|
116
|
+
metadata?: any;
|
|
117
|
+
};
|
|
118
|
+
parent?: {
|
|
119
|
+
id: string;
|
|
120
|
+
similarity: number;
|
|
121
|
+
};
|
|
122
|
+
children?: Array<{
|
|
123
|
+
id: string;
|
|
124
|
+
similarity: number;
|
|
125
|
+
}>;
|
|
126
|
+
siblings?: Array<{
|
|
127
|
+
id: string;
|
|
128
|
+
similarity: number;
|
|
129
|
+
}>;
|
|
130
|
+
level?: number;
|
|
131
|
+
depth?: number;
|
|
132
|
+
}
|
|
133
|
+
export interface HierarchyOptions {
|
|
134
|
+
maxDepth?: number;
|
|
135
|
+
minSimilarity?: number;
|
|
136
|
+
includeMetadata?: boolean;
|
|
137
|
+
buildStrategy?: 'similarity' | 'metadata' | 'mixed';
|
|
138
|
+
}
|
|
139
|
+
export interface VisualizationOptions {
|
|
140
|
+
maxNodes?: number;
|
|
141
|
+
dimensions?: 2 | 3;
|
|
142
|
+
algorithm?: 'force' | 'spring' | 'circular' | 'hierarchical';
|
|
143
|
+
includeEdges?: boolean;
|
|
144
|
+
clusterColors?: boolean;
|
|
145
|
+
nodeSize?: 'uniform' | 'importance' | 'connections';
|
|
146
|
+
}
|
|
147
|
+
export interface VisualizationNode {
|
|
148
|
+
id: string;
|
|
149
|
+
x: number;
|
|
150
|
+
y: number;
|
|
151
|
+
z?: number;
|
|
152
|
+
cluster?: string;
|
|
153
|
+
size?: number;
|
|
154
|
+
color?: string;
|
|
155
|
+
metadata?: Record<string, any>;
|
|
156
|
+
}
|
|
157
|
+
export interface VisualizationEdge {
|
|
158
|
+
source: string;
|
|
159
|
+
target: string;
|
|
160
|
+
weight: number;
|
|
161
|
+
color?: string;
|
|
162
|
+
type?: string;
|
|
163
|
+
}
|
|
164
|
+
export interface VisualizationResult {
|
|
165
|
+
nodes: VisualizationNode[];
|
|
166
|
+
edges: VisualizationEdge[];
|
|
167
|
+
clusters?: Array<{
|
|
168
|
+
id: string;
|
|
169
|
+
color: string;
|
|
170
|
+
size: number;
|
|
171
|
+
label?: string;
|
|
172
|
+
}>;
|
|
173
|
+
metadata: {
|
|
174
|
+
algorithm: string;
|
|
175
|
+
dimensions: number;
|
|
176
|
+
totalNodes: number;
|
|
177
|
+
totalEdges: number;
|
|
178
|
+
generatedAt: Date;
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
export interface TimeWindow {
|
|
182
|
+
start: Date;
|
|
183
|
+
end: Date;
|
|
184
|
+
label?: string;
|
|
185
|
+
weight?: number;
|
|
186
|
+
}
|
|
187
|
+
export interface ClusterFeedback {
|
|
188
|
+
clusterId: string;
|
|
189
|
+
action: 'merge' | 'split' | 'relabel' | 'adjust';
|
|
190
|
+
parameters?: Record<string, any>;
|
|
191
|
+
confidence?: number;
|
|
192
|
+
}
|
|
193
|
+
export interface OutlierOptions {
|
|
194
|
+
threshold?: number;
|
|
195
|
+
method?: 'isolation' | 'statistical' | 'cluster-based';
|
|
196
|
+
minNeighbors?: number;
|
|
197
|
+
includeReasons?: boolean;
|
|
198
|
+
}
|
|
199
|
+
export interface Outlier {
|
|
200
|
+
id: string;
|
|
201
|
+
score: number;
|
|
202
|
+
reasons?: string[];
|
|
203
|
+
nearestNeighbors?: Neighbor[];
|
|
204
|
+
metadata?: Record<string, any>;
|
|
205
|
+
}
|
|
206
|
+
export interface PerformanceMetrics {
|
|
207
|
+
executionTime: number;
|
|
208
|
+
memoryUsed: number;
|
|
209
|
+
itemsProcessed: number;
|
|
210
|
+
cacheHits: number;
|
|
211
|
+
cacheMisses: number;
|
|
212
|
+
algorithm: string;
|
|
213
|
+
}
|
|
214
|
+
export interface ClusteringResult<T = SemanticCluster> {
|
|
215
|
+
clusters: T[];
|
|
216
|
+
metrics: PerformanceMetrics;
|
|
217
|
+
metadata: {
|
|
218
|
+
totalItems: number;
|
|
219
|
+
clustersFound: number;
|
|
220
|
+
averageClusterSize: number;
|
|
221
|
+
silhouetteScore?: number;
|
|
222
|
+
timestamp: Date;
|
|
223
|
+
semanticTypes?: number;
|
|
224
|
+
hnswLevel?: number;
|
|
225
|
+
kValue?: number;
|
|
226
|
+
hasConverged?: boolean;
|
|
227
|
+
outlierCount?: number;
|
|
228
|
+
eps?: number;
|
|
229
|
+
minPts?: number;
|
|
230
|
+
averageModularity?: number;
|
|
231
|
+
fusionMethod?: string;
|
|
232
|
+
componentAlgorithms?: string[];
|
|
233
|
+
sampleSize?: number;
|
|
234
|
+
samplingStrategy?: string;
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
export interface StreamingBatch<T = SemanticCluster> {
|
|
238
|
+
clusters: T[];
|
|
239
|
+
batchNumber: number;
|
|
240
|
+
isComplete: boolean;
|
|
241
|
+
progress: {
|
|
242
|
+
processed: number;
|
|
243
|
+
total: number;
|
|
244
|
+
percentage: number;
|
|
245
|
+
};
|
|
246
|
+
metrics: PerformanceMetrics;
|
|
247
|
+
}
|
|
248
|
+
export declare class NeuralAPIError extends Error {
|
|
249
|
+
code: string;
|
|
250
|
+
context?: Record<string, any> | undefined;
|
|
251
|
+
constructor(message: string, code: string, context?: Record<string, any> | undefined);
|
|
252
|
+
}
|
|
253
|
+
export declare class ClusteringError extends NeuralAPIError {
|
|
254
|
+
constructor(message: string, context?: Record<string, any>);
|
|
255
|
+
}
|
|
256
|
+
export declare class SimilarityError extends NeuralAPIError {
|
|
257
|
+
constructor(message: string, context?: Record<string, any>);
|
|
258
|
+
}
|
|
259
|
+
export interface NeuralAPIConfig {
|
|
260
|
+
cacheSize?: number;
|
|
261
|
+
defaultAlgorithm?: string;
|
|
262
|
+
similarityMetric?: 'cosine' | 'euclidean' | 'manhattan';
|
|
263
|
+
performanceTracking?: boolean;
|
|
264
|
+
maxMemoryUsage?: string;
|
|
265
|
+
parallelProcessing?: boolean;
|
|
266
|
+
streamingBatchSize?: number;
|
|
267
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Neural API Type Definitions
|
|
3
|
+
* Comprehensive interfaces for clustering, similarity, and analysis
|
|
4
|
+
*/
|
|
5
|
+
// ===== ERROR TYPES =====
|
|
6
|
+
export class NeuralAPIError extends Error {
|
|
7
|
+
constructor(message, code, context) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.code = code;
|
|
10
|
+
this.context = context;
|
|
11
|
+
this.name = 'NeuralAPIError';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export class ClusteringError extends NeuralAPIError {
|
|
15
|
+
constructor(message, context) {
|
|
16
|
+
super(message, 'CLUSTERING_ERROR', context);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class SimilarityError extends NeuralAPIError {
|
|
20
|
+
constructor(message, context) {
|
|
21
|
+
super(message, 'SIMILARITY_ERROR', context);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -105,7 +105,7 @@ export declare class FileSystemStorage extends BaseStorage {
|
|
|
105
105
|
/**
|
|
106
106
|
* Save noun metadata to storage
|
|
107
107
|
*/
|
|
108
|
-
|
|
108
|
+
protected saveNounMetadata_internal(id: string, metadata: any): Promise<void>;
|
|
109
109
|
/**
|
|
110
110
|
* Get noun metadata from storage
|
|
111
111
|
*/
|
|
@@ -113,7 +113,7 @@ export declare class FileSystemStorage extends BaseStorage {
|
|
|
113
113
|
/**
|
|
114
114
|
* Save verb metadata to storage
|
|
115
115
|
*/
|
|
116
|
-
|
|
116
|
+
protected saveVerbMetadata_internal(id: string, metadata: any): Promise<void>;
|
|
117
117
|
/**
|
|
118
118
|
* Get verb metadata from storage
|
|
119
119
|
*/
|
|
@@ -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));
|
|
@@ -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
|
*/
|
|
@@ -424,9 +424,9 @@ export class MemoryStorage extends BaseStorage {
|
|
|
424
424
|
return results;
|
|
425
425
|
}
|
|
426
426
|
/**
|
|
427
|
-
* Save noun metadata to storage
|
|
427
|
+
* Save noun metadata to storage (internal implementation)
|
|
428
428
|
*/
|
|
429
|
-
async
|
|
429
|
+
async saveNounMetadata_internal(id, metadata) {
|
|
430
430
|
this.nounMetadata.set(id, JSON.parse(JSON.stringify(metadata)));
|
|
431
431
|
}
|
|
432
432
|
/**
|
|
@@ -440,9 +440,9 @@ export class MemoryStorage extends BaseStorage {
|
|
|
440
440
|
return JSON.parse(JSON.stringify(metadata));
|
|
441
441
|
}
|
|
442
442
|
/**
|
|
443
|
-
* Save verb metadata to storage
|
|
443
|
+
* Save verb metadata to storage (internal implementation)
|
|
444
444
|
*/
|
|
445
|
-
async
|
|
445
|
+
async saveVerbMetadata_internal(id, metadata) {
|
|
446
446
|
this.verbMetadata.set(id, JSON.parse(JSON.stringify(metadata)));
|
|
447
447
|
}
|
|
448
448
|
/**
|
|
@@ -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
|
|
@@ -172,7 +172,12 @@ export declare abstract class BaseStorage extends BaseStorageAdapter {
|
|
|
172
172
|
* Save noun metadata to storage
|
|
173
173
|
* This method should be implemented by each specific adapter
|
|
174
174
|
*/
|
|
175
|
-
|
|
175
|
+
saveNounMetadata(id: string, metadata: any): Promise<void>;
|
|
176
|
+
/**
|
|
177
|
+
* Internal method for saving noun metadata
|
|
178
|
+
* This method should be implemented by each specific adapter
|
|
179
|
+
*/
|
|
180
|
+
protected abstract saveNounMetadata_internal(id: string, metadata: any): Promise<void>;
|
|
176
181
|
/**
|
|
177
182
|
* Get noun metadata from storage
|
|
178
183
|
* This method should be implemented by each specific adapter
|
|
@@ -182,7 +187,12 @@ export declare abstract class BaseStorage extends BaseStorageAdapter {
|
|
|
182
187
|
* Save verb metadata to storage
|
|
183
188
|
* This method should be implemented by each specific adapter
|
|
184
189
|
*/
|
|
185
|
-
|
|
190
|
+
saveVerbMetadata(id: string, metadata: any): Promise<void>;
|
|
191
|
+
/**
|
|
192
|
+
* Internal method for saving verb metadata
|
|
193
|
+
* This method should be implemented by each specific adapter
|
|
194
|
+
*/
|
|
195
|
+
protected abstract saveVerbMetadata_internal(id: string, metadata: any): Promise<void>;
|
|
186
196
|
/**
|
|
187
197
|
* Get verb metadata from storage
|
|
188
198
|
* This method should be implemented by each specific adapter
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Provides common functionality for all storage adapters
|
|
4
4
|
*/
|
|
5
5
|
import { BaseStorageAdapter } from './adapters/baseStorageAdapter.js';
|
|
6
|
+
import { validateNounType, validateVerbType } from '../utils/typeValidation.js';
|
|
6
7
|
// Common directory/prefix names
|
|
7
8
|
// Option A: Entity-Based Directory Structure
|
|
8
9
|
export const ENTITIES_DIR = 'entities';
|
|
@@ -71,6 +72,11 @@ export class BaseStorage extends BaseStorageAdapter {
|
|
|
71
72
|
*/
|
|
72
73
|
async saveNoun(noun) {
|
|
73
74
|
await this.ensureInitialized();
|
|
75
|
+
// Validate noun type before saving - storage boundary protection
|
|
76
|
+
const metadata = await this.getNounMetadata(noun.id);
|
|
77
|
+
if (metadata?.noun) {
|
|
78
|
+
validateNounType(metadata.noun);
|
|
79
|
+
}
|
|
74
80
|
return this.saveNoun_internal(noun);
|
|
75
81
|
}
|
|
76
82
|
/**
|
|
@@ -101,6 +107,10 @@ export class BaseStorage extends BaseStorageAdapter {
|
|
|
101
107
|
*/
|
|
102
108
|
async saveVerb(verb) {
|
|
103
109
|
await this.ensureInitialized();
|
|
110
|
+
// Validate verb type before saving - storage boundary protection
|
|
111
|
+
if (verb.verb) {
|
|
112
|
+
validateVerbType(verb.verb);
|
|
113
|
+
}
|
|
104
114
|
// Extract the lightweight HNSWVerb data
|
|
105
115
|
const hnswVerb = {
|
|
106
116
|
id: verb.id,
|
|
@@ -488,6 +498,28 @@ export class BaseStorage extends BaseStorageAdapter {
|
|
|
488
498
|
await this.ensureInitialized();
|
|
489
499
|
return this.deleteVerb_internal(id);
|
|
490
500
|
}
|
|
501
|
+
/**
|
|
502
|
+
* Save noun metadata to storage
|
|
503
|
+
* This method should be implemented by each specific adapter
|
|
504
|
+
*/
|
|
505
|
+
async saveNounMetadata(id, metadata) {
|
|
506
|
+
// Validate noun type in metadata - storage boundary protection
|
|
507
|
+
if (metadata?.noun) {
|
|
508
|
+
validateNounType(metadata.noun);
|
|
509
|
+
}
|
|
510
|
+
return this.saveNounMetadata_internal(id, metadata);
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Save verb metadata to storage
|
|
514
|
+
* This method should be implemented by each specific adapter
|
|
515
|
+
*/
|
|
516
|
+
async saveVerbMetadata(id, metadata) {
|
|
517
|
+
// Validate verb type in metadata - storage boundary protection
|
|
518
|
+
if (metadata?.verb) {
|
|
519
|
+
validateVerbType(metadata.verb);
|
|
520
|
+
}
|
|
521
|
+
return this.saveVerbMetadata_internal(id, metadata);
|
|
522
|
+
}
|
|
491
523
|
/**
|
|
492
524
|
* Helper method to convert a Map to a plain object for serialization
|
|
493
525
|
*/
|
|
@@ -18,14 +18,11 @@ export interface BrainyDataInterface<T = unknown> {
|
|
|
18
18
|
/**
|
|
19
19
|
* Add a noun (entity with vector and metadata) to the database
|
|
20
20
|
* @param data Text string or vector representation (will auto-embed strings)
|
|
21
|
+
* @param nounType Required noun type (one of 31 types)
|
|
21
22
|
* @param metadata Optional metadata to associate with the noun
|
|
22
|
-
* @param options Optional configuration including custom ID
|
|
23
23
|
* @returns The ID of the added noun
|
|
24
24
|
*/
|
|
25
|
-
addNoun(data: string | Vector, metadata?: T
|
|
26
|
-
id?: string;
|
|
27
|
-
[key: string]: any;
|
|
28
|
-
}): Promise<string>;
|
|
25
|
+
addNoun(data: string | Vector, nounType: string, metadata?: T): Promise<string>;
|
|
29
26
|
/**
|
|
30
27
|
* Search for text in the database
|
|
31
28
|
* @param text The text to search for
|