@soulcraft/brainy 0.43.0 → 0.44.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/dist/augmentationFactory.d.ts.map +1 -0
- package/dist/augmentationFactory.js +342 -0
- package/dist/augmentationFactory.js.map +1 -0
- package/dist/augmentationPipeline.d.ts.map +1 -0
- package/dist/augmentationPipeline.js +472 -0
- package/dist/augmentationPipeline.js.map +1 -0
- package/dist/augmentationRegistry.d.ts.map +1 -0
- package/dist/augmentationRegistry.js +105 -0
- package/dist/augmentationRegistry.js.map +1 -0
- package/dist/augmentationRegistryLoader.d.ts.map +1 -0
- package/dist/augmentationRegistryLoader.js +213 -0
- package/dist/augmentationRegistryLoader.js.map +1 -0
- package/dist/brainyData.d.ts.map +1 -0
- package/dist/brainyData.js +3999 -0
- package/dist/brainyData.js.map +1 -0
- package/dist/browserFramework.d.ts.map +1 -0
- package/dist/browserFramework.js +31 -0
- package/dist/browserFramework.js.map +1 -0
- package/dist/coreTypes.d.ts.map +1 -0
- package/dist/coreTypes.js +5 -0
- package/dist/coreTypes.js.map +1 -0
- package/dist/demo.d.ts.map +1 -0
- package/dist/demo.js +201 -0
- package/dist/demo.js.map +1 -0
- package/dist/distributed/configManager.d.ts.map +1 -0
- package/dist/distributed/configManager.js +322 -0
- package/dist/distributed/configManager.js.map +1 -0
- package/dist/distributed/domainDetector.d.ts.map +1 -0
- package/dist/distributed/domainDetector.js +307 -0
- package/dist/distributed/domainDetector.js.map +1 -0
- package/dist/distributed/hashPartitioner.d.ts.map +1 -0
- package/dist/distributed/hashPartitioner.js +146 -0
- package/dist/distributed/hashPartitioner.js.map +1 -0
- package/dist/distributed/healthMonitor.d.ts.map +1 -0
- package/dist/distributed/healthMonitor.js +244 -0
- package/dist/distributed/healthMonitor.js.map +1 -0
- package/dist/distributed/index.d.ts.map +1 -0
- package/dist/distributed/index.js +9 -0
- package/dist/distributed/index.js.map +1 -0
- package/dist/distributed/operationalModes.d.ts.map +1 -0
- package/dist/distributed/operationalModes.js +201 -0
- package/dist/distributed/operationalModes.js.map +1 -0
- package/dist/errors/brainyError.d.ts.map +1 -0
- package/dist/errors/brainyError.js +113 -0
- package/dist/errors/brainyError.js.map +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +590 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/sequentialPipeline.d.ts.map +1 -0
- package/dist/sequentialPipeline.js +417 -0
- package/dist/sequentialPipeline.js.map +1 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +46 -0
- package/dist/setup.js.map +1 -0
- package/dist/unified.d.ts.map +1 -0
- package/dist/unified.js.map +1 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +54 -0
- package/dist/worker.js.map +1 -0
- package/package.json +8 -12
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Distributed Configuration Manager
|
|
3
|
+
* Manages shared configuration in S3 for distributed Brainy instances
|
|
4
|
+
*/
|
|
5
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
6
|
+
export class DistributedConfigManager {
|
|
7
|
+
constructor(storage, distributedConfig, brainyMode) {
|
|
8
|
+
this.config = null;
|
|
9
|
+
this.lastConfigVersion = 0;
|
|
10
|
+
this.storage = storage;
|
|
11
|
+
this.instanceId = distributedConfig?.instanceId || `instance-${uuidv4()}`;
|
|
12
|
+
this.configPath = distributedConfig?.configPath || '_brainy/config.json';
|
|
13
|
+
this.heartbeatInterval = distributedConfig?.heartbeatInterval || 30000;
|
|
14
|
+
this.configCheckInterval = distributedConfig?.configCheckInterval || 10000;
|
|
15
|
+
this.instanceTimeout = distributedConfig?.instanceTimeout || 60000;
|
|
16
|
+
// Set role from distributed config if provided
|
|
17
|
+
if (distributedConfig?.role) {
|
|
18
|
+
this.role = distributedConfig.role;
|
|
19
|
+
}
|
|
20
|
+
// Infer role from Brainy's read/write mode if not explicitly set
|
|
21
|
+
else if (brainyMode) {
|
|
22
|
+
if (brainyMode.writeOnly) {
|
|
23
|
+
this.role = 'writer';
|
|
24
|
+
}
|
|
25
|
+
else if (brainyMode.readOnly) {
|
|
26
|
+
this.role = 'reader';
|
|
27
|
+
}
|
|
28
|
+
// If neither readOnly nor writeOnly, role must be explicitly set
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Initialize the distributed configuration
|
|
33
|
+
*/
|
|
34
|
+
async initialize() {
|
|
35
|
+
// Load or create configuration
|
|
36
|
+
this.config = await this.loadOrCreateConfig();
|
|
37
|
+
// Determine role if not explicitly set
|
|
38
|
+
if (!this.role) {
|
|
39
|
+
this.role = await this.determineRole();
|
|
40
|
+
}
|
|
41
|
+
// Register this instance
|
|
42
|
+
await this.registerInstance();
|
|
43
|
+
// Start heartbeat and config watching
|
|
44
|
+
this.startHeartbeat();
|
|
45
|
+
this.startConfigWatch();
|
|
46
|
+
return this.config;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Load existing config or create new one
|
|
50
|
+
*/
|
|
51
|
+
async loadOrCreateConfig() {
|
|
52
|
+
try {
|
|
53
|
+
// Use metadata storage with a special ID for config
|
|
54
|
+
const configData = await this.storage.getMetadata('_distributed_config');
|
|
55
|
+
if (configData) {
|
|
56
|
+
this.lastConfigVersion = configData.version;
|
|
57
|
+
return configData;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
// Config doesn't exist yet
|
|
62
|
+
}
|
|
63
|
+
// Create default config
|
|
64
|
+
const newConfig = {
|
|
65
|
+
version: 1,
|
|
66
|
+
updated: new Date().toISOString(),
|
|
67
|
+
settings: {
|
|
68
|
+
partitionStrategy: 'hash',
|
|
69
|
+
partitionCount: 100,
|
|
70
|
+
embeddingModel: 'text-embedding-ada-002',
|
|
71
|
+
dimensions: 1536,
|
|
72
|
+
distanceMetric: 'cosine',
|
|
73
|
+
hnswParams: {
|
|
74
|
+
M: 16,
|
|
75
|
+
efConstruction: 200
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
instances: {}
|
|
79
|
+
};
|
|
80
|
+
await this.saveConfig(newConfig);
|
|
81
|
+
return newConfig;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Determine role based on configuration
|
|
85
|
+
* IMPORTANT: Role must be explicitly set - no automatic assignment based on order
|
|
86
|
+
*/
|
|
87
|
+
async determineRole() {
|
|
88
|
+
// Check environment variable first
|
|
89
|
+
if (process.env.BRAINY_ROLE) {
|
|
90
|
+
const role = process.env.BRAINY_ROLE.toLowerCase();
|
|
91
|
+
if (role === 'writer' || role === 'reader' || role === 'hybrid') {
|
|
92
|
+
return role;
|
|
93
|
+
}
|
|
94
|
+
throw new Error(`Invalid BRAINY_ROLE: ${process.env.BRAINY_ROLE}. Must be 'writer', 'reader', or 'hybrid'`);
|
|
95
|
+
}
|
|
96
|
+
// Check if explicitly passed in distributed config
|
|
97
|
+
if (this.role) {
|
|
98
|
+
return this.role;
|
|
99
|
+
}
|
|
100
|
+
// DO NOT auto-assign roles based on deployment order or existing instances
|
|
101
|
+
// This is dangerous and can lead to data corruption or loss
|
|
102
|
+
throw new Error('Distributed mode requires explicit role configuration. ' +
|
|
103
|
+
'Set BRAINY_ROLE environment variable or pass role in distributed config. ' +
|
|
104
|
+
'Valid roles: "writer", "reader", "hybrid"');
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Check if an instance is still alive
|
|
108
|
+
*/
|
|
109
|
+
isInstanceAlive(instance) {
|
|
110
|
+
const lastSeen = new Date(instance.lastHeartbeat).getTime();
|
|
111
|
+
const now = Date.now();
|
|
112
|
+
return (now - lastSeen) < this.instanceTimeout;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Register this instance in the shared config
|
|
116
|
+
*/
|
|
117
|
+
async registerInstance() {
|
|
118
|
+
if (!this.config)
|
|
119
|
+
return;
|
|
120
|
+
// Role must be set by this point
|
|
121
|
+
if (!this.role) {
|
|
122
|
+
throw new Error('Cannot register instance without a role');
|
|
123
|
+
}
|
|
124
|
+
const instanceInfo = {
|
|
125
|
+
role: this.role,
|
|
126
|
+
status: 'active',
|
|
127
|
+
lastHeartbeat: new Date().toISOString(),
|
|
128
|
+
metrics: {
|
|
129
|
+
memoryUsage: process.memoryUsage().heapUsed
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
// Add endpoint if available
|
|
133
|
+
if (process.env.SERVICE_ENDPOINT) {
|
|
134
|
+
instanceInfo.endpoint = process.env.SERVICE_ENDPOINT;
|
|
135
|
+
}
|
|
136
|
+
this.config.instances[this.instanceId] = instanceInfo;
|
|
137
|
+
await this.saveConfig(this.config);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Save configuration with version increment
|
|
141
|
+
*/
|
|
142
|
+
async saveConfig(config) {
|
|
143
|
+
config.version++;
|
|
144
|
+
config.updated = new Date().toISOString();
|
|
145
|
+
this.lastConfigVersion = config.version;
|
|
146
|
+
// Use metadata storage with a special ID for config
|
|
147
|
+
await this.storage.saveMetadata('_distributed_config', config);
|
|
148
|
+
this.config = config;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Start heartbeat to keep instance alive in config
|
|
152
|
+
*/
|
|
153
|
+
startHeartbeat() {
|
|
154
|
+
this.heartbeatTimer = setInterval(async () => {
|
|
155
|
+
await this.updateHeartbeat();
|
|
156
|
+
}, this.heartbeatInterval);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Update heartbeat and clean stale instances
|
|
160
|
+
*/
|
|
161
|
+
async updateHeartbeat() {
|
|
162
|
+
if (!this.config)
|
|
163
|
+
return;
|
|
164
|
+
// Reload config to get latest state
|
|
165
|
+
try {
|
|
166
|
+
const latestConfig = await this.loadConfig();
|
|
167
|
+
if (latestConfig) {
|
|
168
|
+
this.config = latestConfig;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
console.error('Failed to reload config:', error);
|
|
173
|
+
}
|
|
174
|
+
// Update our heartbeat
|
|
175
|
+
if (this.config.instances[this.instanceId]) {
|
|
176
|
+
this.config.instances[this.instanceId].lastHeartbeat = new Date().toISOString();
|
|
177
|
+
this.config.instances[this.instanceId].status = 'active';
|
|
178
|
+
// Update metrics if available
|
|
179
|
+
this.config.instances[this.instanceId].metrics = {
|
|
180
|
+
memoryUsage: process.memoryUsage().heapUsed
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
// Re-register if we were removed
|
|
185
|
+
await this.registerInstance();
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
// Clean up stale instances
|
|
189
|
+
const now = Date.now();
|
|
190
|
+
let hasChanges = false;
|
|
191
|
+
for (const [id, instance] of Object.entries(this.config.instances)) {
|
|
192
|
+
if (id === this.instanceId)
|
|
193
|
+
continue;
|
|
194
|
+
const lastSeen = new Date(instance.lastHeartbeat).getTime();
|
|
195
|
+
if (now - lastSeen > this.instanceTimeout) {
|
|
196
|
+
delete this.config.instances[id];
|
|
197
|
+
hasChanges = true;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// Save if there were changes
|
|
201
|
+
if (hasChanges) {
|
|
202
|
+
await this.saveConfig(this.config);
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
// Just update our heartbeat without version increment
|
|
206
|
+
await this.storage.saveMetadata('_distributed_config', this.config);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Start watching for config changes
|
|
211
|
+
*/
|
|
212
|
+
startConfigWatch() {
|
|
213
|
+
this.configWatchTimer = setInterval(async () => {
|
|
214
|
+
await this.checkForConfigUpdates();
|
|
215
|
+
}, this.configCheckInterval);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Check for configuration updates
|
|
219
|
+
*/
|
|
220
|
+
async checkForConfigUpdates() {
|
|
221
|
+
try {
|
|
222
|
+
const latestConfig = await this.loadConfig();
|
|
223
|
+
if (!latestConfig)
|
|
224
|
+
return;
|
|
225
|
+
if (latestConfig.version > this.lastConfigVersion) {
|
|
226
|
+
this.config = latestConfig;
|
|
227
|
+
this.lastConfigVersion = latestConfig.version;
|
|
228
|
+
// Notify listeners of config update
|
|
229
|
+
if (this.onConfigUpdate) {
|
|
230
|
+
this.onConfigUpdate(latestConfig);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
console.error('Failed to check config updates:', error);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Load configuration from storage
|
|
240
|
+
*/
|
|
241
|
+
async loadConfig() {
|
|
242
|
+
try {
|
|
243
|
+
const configData = await this.storage.getMetadata('_distributed_config');
|
|
244
|
+
if (configData) {
|
|
245
|
+
return configData;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
console.error('Failed to load config:', error);
|
|
250
|
+
}
|
|
251
|
+
return null;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Get current configuration
|
|
255
|
+
*/
|
|
256
|
+
getConfig() {
|
|
257
|
+
return this.config;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Get instance role
|
|
261
|
+
*/
|
|
262
|
+
getRole() {
|
|
263
|
+
if (!this.role) {
|
|
264
|
+
throw new Error('Role not initialized');
|
|
265
|
+
}
|
|
266
|
+
return this.role;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Get instance ID
|
|
270
|
+
*/
|
|
271
|
+
getInstanceId() {
|
|
272
|
+
return this.instanceId;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Set config update callback
|
|
276
|
+
*/
|
|
277
|
+
setOnConfigUpdate(callback) {
|
|
278
|
+
this.onConfigUpdate = callback;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Get all active instances of a specific role
|
|
282
|
+
*/
|
|
283
|
+
getInstancesByRole(role) {
|
|
284
|
+
if (!this.config)
|
|
285
|
+
return [];
|
|
286
|
+
return Object.entries(this.config.instances)
|
|
287
|
+
.filter(([_, instance]) => instance.role === role &&
|
|
288
|
+
this.isInstanceAlive(instance))
|
|
289
|
+
.map(([_, instance]) => instance);
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Update instance metrics
|
|
293
|
+
*/
|
|
294
|
+
async updateMetrics(metrics) {
|
|
295
|
+
if (!this.config || !this.config.instances[this.instanceId])
|
|
296
|
+
return;
|
|
297
|
+
this.config.instances[this.instanceId].metrics = {
|
|
298
|
+
...this.config.instances[this.instanceId].metrics,
|
|
299
|
+
...metrics
|
|
300
|
+
};
|
|
301
|
+
// Don't increment version for metric updates
|
|
302
|
+
await this.storage.saveMetadata('_distributed_config', this.config);
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Cleanup resources
|
|
306
|
+
*/
|
|
307
|
+
async cleanup() {
|
|
308
|
+
// Stop timers
|
|
309
|
+
if (this.heartbeatTimer) {
|
|
310
|
+
clearInterval(this.heartbeatTimer);
|
|
311
|
+
}
|
|
312
|
+
if (this.configWatchTimer) {
|
|
313
|
+
clearInterval(this.configWatchTimer);
|
|
314
|
+
}
|
|
315
|
+
// Mark instance as inactive
|
|
316
|
+
if (this.config && this.config.instances[this.instanceId]) {
|
|
317
|
+
this.config.instances[this.instanceId].status = 'inactive';
|
|
318
|
+
await this.saveConfig(this.config);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
//# sourceMappingURL=configManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configManager.js","sourceRoot":"","sources":["../../src/distributed/configManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domainDetector.d.ts","sourceRoot":"","sources":["../../src/distributed/domainDetector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAE7D,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;QACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;QACnB,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;IACD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,cAAc,CAiDrB;IAED,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,WAAW,CAAiC;IAEpD;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,cAAc;IAqDvC;;OAEG;IACH,OAAO,CAAC,YAAY;IAkCpB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgD7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;;OAGG;IACH,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAM9C;;;OAGG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIzC;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;;OAGG;IACH,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAIrC;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;;OAGG;IACH,oBAAoB,IAAI,MAAM,EAAE;CASjC"}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain Detector
|
|
3
|
+
* Automatically detects and manages data domains for logical separation
|
|
4
|
+
*/
|
|
5
|
+
export class DomainDetector {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.domainPatterns = [
|
|
8
|
+
{
|
|
9
|
+
domain: 'medical',
|
|
10
|
+
patterns: {
|
|
11
|
+
fields: ['symptoms', 'diagnosis', 'treatment', 'medication', 'patient'],
|
|
12
|
+
keywords: ['medical', 'health', 'disease', 'symptom', 'treatment', 'doctor', 'patient']
|
|
13
|
+
},
|
|
14
|
+
priority: 1
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
domain: 'legal',
|
|
18
|
+
patterns: {
|
|
19
|
+
fields: ['contract', 'clause', 'litigation', 'statute', 'jurisdiction'],
|
|
20
|
+
keywords: ['legal', 'law', 'contract', 'court', 'attorney', 'litigation', 'statute']
|
|
21
|
+
},
|
|
22
|
+
priority: 1
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
domain: 'product',
|
|
26
|
+
patterns: {
|
|
27
|
+
fields: ['price', 'sku', 'inventory', 'category', 'brand'],
|
|
28
|
+
keywords: ['product', 'price', 'sale', 'inventory', 'catalog', 'item', 'sku']
|
|
29
|
+
},
|
|
30
|
+
priority: 1
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
domain: 'customer',
|
|
34
|
+
patterns: {
|
|
35
|
+
fields: ['customerId', 'email', 'phone', 'address', 'orders'],
|
|
36
|
+
keywords: ['customer', 'client', 'user', 'account', 'profile', 'contact']
|
|
37
|
+
},
|
|
38
|
+
priority: 1
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
domain: 'financial',
|
|
42
|
+
patterns: {
|
|
43
|
+
fields: ['amount', 'currency', 'transaction', 'balance', 'account'],
|
|
44
|
+
keywords: ['financial', 'money', 'payment', 'transaction', 'bank', 'credit', 'debit']
|
|
45
|
+
},
|
|
46
|
+
priority: 1
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
domain: 'technical',
|
|
50
|
+
patterns: {
|
|
51
|
+
fields: ['code', 'function', 'error', 'stack', 'api'],
|
|
52
|
+
keywords: ['code', 'software', 'api', 'error', 'debug', 'function', 'class', 'method']
|
|
53
|
+
},
|
|
54
|
+
priority: 2
|
|
55
|
+
}
|
|
56
|
+
];
|
|
57
|
+
this.customPatterns = [];
|
|
58
|
+
this.domainStats = new Map();
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Detect domain from data object
|
|
62
|
+
* @param data - The data object to analyze
|
|
63
|
+
* @returns The detected domain and metadata
|
|
64
|
+
*/
|
|
65
|
+
detectDomain(data) {
|
|
66
|
+
if (!data || typeof data !== 'object') {
|
|
67
|
+
return { domain: 'general' };
|
|
68
|
+
}
|
|
69
|
+
// Check for explicit domain field
|
|
70
|
+
if (data.domain && typeof data.domain === 'string') {
|
|
71
|
+
this.updateStats(data.domain);
|
|
72
|
+
return {
|
|
73
|
+
domain: data.domain,
|
|
74
|
+
domainMetadata: this.extractDomainMetadata(data, data.domain)
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
// Score each domain pattern
|
|
78
|
+
const scores = new Map();
|
|
79
|
+
// Check custom patterns first (higher priority)
|
|
80
|
+
for (const pattern of this.customPatterns) {
|
|
81
|
+
const score = this.scorePattern(data, pattern);
|
|
82
|
+
if (score > 0) {
|
|
83
|
+
scores.set(pattern.domain, score * (pattern.priority || 1));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Check default patterns
|
|
87
|
+
for (const pattern of this.domainPatterns) {
|
|
88
|
+
const score = this.scorePattern(data, pattern);
|
|
89
|
+
if (score > 0) {
|
|
90
|
+
const currentScore = scores.get(pattern.domain) || 0;
|
|
91
|
+
scores.set(pattern.domain, currentScore + score * (pattern.priority || 1));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Find highest scoring domain
|
|
95
|
+
let bestDomain = 'general';
|
|
96
|
+
let bestScore = 0;
|
|
97
|
+
for (const [domain, score] of scores.entries()) {
|
|
98
|
+
if (score > bestScore) {
|
|
99
|
+
bestDomain = domain;
|
|
100
|
+
bestScore = score;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
this.updateStats(bestDomain);
|
|
104
|
+
return {
|
|
105
|
+
domain: bestDomain,
|
|
106
|
+
domainMetadata: this.extractDomainMetadata(data, bestDomain)
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Score a data object against a domain pattern
|
|
111
|
+
*/
|
|
112
|
+
scorePattern(data, pattern) {
|
|
113
|
+
let score = 0;
|
|
114
|
+
// Check field matches
|
|
115
|
+
if (pattern.patterns.fields) {
|
|
116
|
+
const dataKeys = Object.keys(data);
|
|
117
|
+
for (const field of pattern.patterns.fields) {
|
|
118
|
+
if (dataKeys.some(key => key.toLowerCase().includes(field.toLowerCase()))) {
|
|
119
|
+
score += 2; // Field match is strong signal
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Check keyword matches in values
|
|
124
|
+
if (pattern.patterns.keywords) {
|
|
125
|
+
const dataStr = JSON.stringify(data).toLowerCase();
|
|
126
|
+
for (const keyword of pattern.patterns.keywords) {
|
|
127
|
+
if (dataStr.includes(keyword.toLowerCase())) {
|
|
128
|
+
score += 1;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Check regex patterns
|
|
133
|
+
if (pattern.patterns.regex) {
|
|
134
|
+
const dataStr = JSON.stringify(data);
|
|
135
|
+
if (pattern.patterns.regex.test(dataStr)) {
|
|
136
|
+
score += 3; // Regex match is very specific
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return score;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Extract domain-specific metadata
|
|
143
|
+
*/
|
|
144
|
+
extractDomainMetadata(data, domain) {
|
|
145
|
+
const metadata = {};
|
|
146
|
+
switch (domain) {
|
|
147
|
+
case 'medical':
|
|
148
|
+
if (data.patientId)
|
|
149
|
+
metadata.patientId = data.patientId;
|
|
150
|
+
if (data.condition)
|
|
151
|
+
metadata.condition = data.condition;
|
|
152
|
+
if (data.severity)
|
|
153
|
+
metadata.severity = data.severity;
|
|
154
|
+
break;
|
|
155
|
+
case 'legal':
|
|
156
|
+
if (data.caseId)
|
|
157
|
+
metadata.caseId = data.caseId;
|
|
158
|
+
if (data.jurisdiction)
|
|
159
|
+
metadata.jurisdiction = data.jurisdiction;
|
|
160
|
+
if (data.documentType)
|
|
161
|
+
metadata.documentType = data.documentType;
|
|
162
|
+
break;
|
|
163
|
+
case 'product':
|
|
164
|
+
if (data.sku)
|
|
165
|
+
metadata.sku = data.sku;
|
|
166
|
+
if (data.category)
|
|
167
|
+
metadata.category = data.category;
|
|
168
|
+
if (data.brand)
|
|
169
|
+
metadata.brand = data.brand;
|
|
170
|
+
if (data.price)
|
|
171
|
+
metadata.priceRange = this.getPriceRange(data.price);
|
|
172
|
+
break;
|
|
173
|
+
case 'customer':
|
|
174
|
+
if (data.customerId)
|
|
175
|
+
metadata.customerId = data.customerId;
|
|
176
|
+
if (data.segment)
|
|
177
|
+
metadata.segment = data.segment;
|
|
178
|
+
if (data.lifetime_value)
|
|
179
|
+
metadata.valueCategory = this.getValueCategory(data.lifetime_value);
|
|
180
|
+
break;
|
|
181
|
+
case 'financial':
|
|
182
|
+
if (data.accountId)
|
|
183
|
+
metadata.accountId = data.accountId;
|
|
184
|
+
if (data.transactionType)
|
|
185
|
+
metadata.transactionType = data.transactionType;
|
|
186
|
+
if (data.amount)
|
|
187
|
+
metadata.amountRange = this.getAmountRange(data.amount);
|
|
188
|
+
break;
|
|
189
|
+
case 'technical':
|
|
190
|
+
if (data.service)
|
|
191
|
+
metadata.service = data.service;
|
|
192
|
+
if (data.environment)
|
|
193
|
+
metadata.environment = data.environment;
|
|
194
|
+
if (data.severity)
|
|
195
|
+
metadata.severity = data.severity;
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
// Add detection confidence
|
|
199
|
+
metadata.detectionConfidence = this.calculateConfidence(data, domain);
|
|
200
|
+
return metadata;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Calculate detection confidence
|
|
204
|
+
*/
|
|
205
|
+
calculateConfidence(data, domain) {
|
|
206
|
+
// If domain was explicitly specified
|
|
207
|
+
if (data.domain === domain)
|
|
208
|
+
return 'high';
|
|
209
|
+
// Check how many patterns matched
|
|
210
|
+
const pattern = [...this.customPatterns, ...this.domainPatterns]
|
|
211
|
+
.find(p => p.domain === domain);
|
|
212
|
+
if (!pattern)
|
|
213
|
+
return 'low';
|
|
214
|
+
const score = this.scorePattern(data, pattern);
|
|
215
|
+
if (score >= 5)
|
|
216
|
+
return 'high';
|
|
217
|
+
if (score >= 2)
|
|
218
|
+
return 'medium';
|
|
219
|
+
return 'low';
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Categorize price ranges
|
|
223
|
+
*/
|
|
224
|
+
getPriceRange(price) {
|
|
225
|
+
if (price < 10)
|
|
226
|
+
return 'low';
|
|
227
|
+
if (price < 100)
|
|
228
|
+
return 'medium';
|
|
229
|
+
if (price < 1000)
|
|
230
|
+
return 'high';
|
|
231
|
+
return 'premium';
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Categorize customer value
|
|
235
|
+
*/
|
|
236
|
+
getValueCategory(value) {
|
|
237
|
+
if (value < 100)
|
|
238
|
+
return 'low';
|
|
239
|
+
if (value < 1000)
|
|
240
|
+
return 'medium';
|
|
241
|
+
if (value < 10000)
|
|
242
|
+
return 'high';
|
|
243
|
+
return 'vip';
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Categorize amount ranges
|
|
247
|
+
*/
|
|
248
|
+
getAmountRange(amount) {
|
|
249
|
+
if (amount < 100)
|
|
250
|
+
return 'micro';
|
|
251
|
+
if (amount < 1000)
|
|
252
|
+
return 'small';
|
|
253
|
+
if (amount < 10000)
|
|
254
|
+
return 'medium';
|
|
255
|
+
if (amount < 100000)
|
|
256
|
+
return 'large';
|
|
257
|
+
return 'enterprise';
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Add custom domain pattern
|
|
261
|
+
* @param pattern - Custom domain pattern to add
|
|
262
|
+
*/
|
|
263
|
+
addCustomPattern(pattern) {
|
|
264
|
+
// Remove existing pattern for same domain if exists
|
|
265
|
+
this.customPatterns = this.customPatterns.filter(p => p.domain !== pattern.domain);
|
|
266
|
+
this.customPatterns.push(pattern);
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Remove custom domain pattern
|
|
270
|
+
* @param domain - Domain to remove pattern for
|
|
271
|
+
*/
|
|
272
|
+
removeCustomPattern(domain) {
|
|
273
|
+
this.customPatterns = this.customPatterns.filter(p => p.domain !== domain);
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Update domain statistics
|
|
277
|
+
*/
|
|
278
|
+
updateStats(domain) {
|
|
279
|
+
const count = this.domainStats.get(domain) || 0;
|
|
280
|
+
this.domainStats.set(domain, count + 1);
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Get domain statistics
|
|
284
|
+
* @returns Map of domain to count
|
|
285
|
+
*/
|
|
286
|
+
getDomainStats() {
|
|
287
|
+
return new Map(this.domainStats);
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Clear domain statistics
|
|
291
|
+
*/
|
|
292
|
+
clearStats() {
|
|
293
|
+
this.domainStats.clear();
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Get all configured domains
|
|
297
|
+
* @returns Array of domain names
|
|
298
|
+
*/
|
|
299
|
+
getConfiguredDomains() {
|
|
300
|
+
const domains = new Set();
|
|
301
|
+
for (const pattern of [...this.domainPatterns, ...this.customPatterns]) {
|
|
302
|
+
domains.add(pattern.domain);
|
|
303
|
+
}
|
|
304
|
+
return Array.from(domains).sort();
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=domainDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domainDetector.js","sourceRoot":"","sources":["../../src/distributed/domainDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashPartitioner.d.ts","sourceRoot":"","sources":["../../src/distributed/hashPartitioner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAE3D,qBAAa,eAAe;IAC1B,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,eAAe,CAAsB;gBAEjC,MAAM,EAAE,YAAY;IAIhC;;;;OAIG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAMtC;;;;;OAKG;IACH,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAKjE;;;OAGG;IACH,gBAAgB,IAAI,MAAM,EAAE;IAQ5B;;;;OAIG;IACH,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IAQhD;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAKlB;;;;;OAKG;IACH,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAalE;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,eAAe;IACtD,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,UAAU,CAAQ;gBAEd,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM;IAMpD;;OAEG;IACH,OAAO,CAAC,4BAA4B;IA2BpC;;;;OAIG;IACH,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;IASpD;;;OAGG;IACH,sBAAsB,IAAI,MAAM,EAAE;IAKlC;;;OAGG;IACH,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;CAG9C"}
|