ruvector 0.1.85 → 0.1.86
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.
|
@@ -70,6 +70,8 @@ export declare class SemanticDriftDetector {
|
|
|
70
70
|
private history;
|
|
71
71
|
private driftEvents;
|
|
72
72
|
private config;
|
|
73
|
+
private readonly MAX_DRIFT_EVENTS;
|
|
74
|
+
private readonly MAX_HISTORY_SIZE;
|
|
73
75
|
private reflexes;
|
|
74
76
|
constructor(config?: NeuralConfig);
|
|
75
77
|
/**
|
|
@@ -119,6 +121,9 @@ export declare class MemoryPhysics {
|
|
|
119
121
|
private memories;
|
|
120
122
|
private config;
|
|
121
123
|
private lastUpdate;
|
|
124
|
+
private readonly MAX_MEMORIES;
|
|
125
|
+
private readonly MAX_CONTENT_LENGTH;
|
|
126
|
+
private readonly MAX_ID_LENGTH;
|
|
122
127
|
constructor(config?: NeuralConfig);
|
|
123
128
|
/**
|
|
124
129
|
* Encode a new memory
|
|
@@ -150,6 +155,10 @@ export declare class MemoryPhysics {
|
|
|
150
155
|
avgInterference: number;
|
|
151
156
|
};
|
|
152
157
|
private cosineSimilarity;
|
|
158
|
+
/**
|
|
159
|
+
* Force cleanup of weak memories when limit reached
|
|
160
|
+
*/
|
|
161
|
+
private forceCleanup;
|
|
153
162
|
}
|
|
154
163
|
/**
|
|
155
164
|
* Manages agent state as movement through embedding space.
|
|
@@ -194,6 +203,8 @@ export declare class SwarmCoordinator {
|
|
|
194
203
|
private agents;
|
|
195
204
|
private sharedContext;
|
|
196
205
|
private config;
|
|
206
|
+
private readonly MAX_AGENTS;
|
|
207
|
+
private readonly MAX_SPECIALTY_LENGTH;
|
|
197
208
|
constructor(config?: NeuralConfig);
|
|
198
209
|
/**
|
|
199
210
|
* Register an agent with the swarm
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neural-embeddings.d.ts","sourceRoot":"","sources":["../../src/core/neural-embeddings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,YAAY,CAAC;IACxB,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,YAAY,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,YAAY,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAMD;;;GAGG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,OAAO,CAA6D;IAC5E,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,MAAM,CAAiF;IAG/F,OAAO,CAAC,QAAQ,CAAuD;gBAE3D,MAAM,GAAE,YAAiB;IAQrC;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,GAAG,IAAI;IAMrD;;OAEG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"neural-embeddings.d.ts","sourceRoot":"","sources":["../../src/core/neural-embeddings.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,9 @@ class SemanticDriftDetector {
|
|
|
30
30
|
this.baseline = null;
|
|
31
31
|
this.history = [];
|
|
32
32
|
this.driftEvents = [];
|
|
33
|
+
// Security: Prevent unbounded memory growth
|
|
34
|
+
this.MAX_DRIFT_EVENTS = 1000;
|
|
35
|
+
this.MAX_HISTORY_SIZE = 500;
|
|
33
36
|
// Reflex callbacks
|
|
34
37
|
this.reflexes = new Map();
|
|
35
38
|
this.config = {
|
|
@@ -56,9 +59,13 @@ class SemanticDriftDetector {
|
|
|
56
59
|
const now = Date.now();
|
|
57
60
|
// Add to history
|
|
58
61
|
this.history.push({ embedding: new Float32Array(emb), timestamp: now });
|
|
59
|
-
// Prune old history
|
|
62
|
+
// Prune old history (with size limit)
|
|
60
63
|
const cutoff = now - this.config.driftWindowMs;
|
|
61
64
|
this.history = this.history.filter(h => h.timestamp > cutoff);
|
|
65
|
+
// Security: Enforce maximum history size
|
|
66
|
+
if (this.history.length > this.MAX_HISTORY_SIZE) {
|
|
67
|
+
this.history = this.history.slice(-this.MAX_HISTORY_SIZE);
|
|
68
|
+
}
|
|
62
69
|
// If no baseline, set first observation as baseline
|
|
63
70
|
if (!this.baseline) {
|
|
64
71
|
this.baseline = new Float32Array(emb);
|
|
@@ -81,9 +88,13 @@ class SemanticDriftDetector {
|
|
|
81
88
|
category,
|
|
82
89
|
source,
|
|
83
90
|
};
|
|
84
|
-
// Record event if significant
|
|
91
|
+
// Record event if significant (with size limit)
|
|
85
92
|
if (category !== 'normal') {
|
|
86
93
|
this.driftEvents.push(event);
|
|
94
|
+
// Security: Prevent unbounded growth
|
|
95
|
+
if (this.driftEvents.length > this.MAX_DRIFT_EVENTS) {
|
|
96
|
+
this.driftEvents = this.driftEvents.slice(-this.MAX_DRIFT_EVENTS);
|
|
97
|
+
}
|
|
87
98
|
this.triggerReflexes(event);
|
|
88
99
|
}
|
|
89
100
|
return event;
|
|
@@ -118,14 +129,20 @@ class SemanticDriftDetector {
|
|
|
118
129
|
* Trigger registered reflexes
|
|
119
130
|
*/
|
|
120
131
|
triggerReflexes(event) {
|
|
121
|
-
|
|
132
|
+
const errors = [];
|
|
133
|
+
for (const [name, callback] of this.reflexes) {
|
|
122
134
|
try {
|
|
123
135
|
callback(event);
|
|
124
136
|
}
|
|
125
137
|
catch (e) {
|
|
126
|
-
//
|
|
138
|
+
// Security: Track reflex failures but don't break execution
|
|
139
|
+
errors.push({ reflex: name, error: e });
|
|
127
140
|
}
|
|
128
141
|
}
|
|
142
|
+
// Security: Warn if multiple reflexes fail (potential attack or system issue)
|
|
143
|
+
if (errors.length > 0 && errors.length >= this.reflexes.size / 2) {
|
|
144
|
+
console.warn(`Neural: ${errors.length}/${this.reflexes.size} reflexes failed`);
|
|
145
|
+
}
|
|
129
146
|
}
|
|
130
147
|
/**
|
|
131
148
|
* Get recent drift velocity (rate of change)
|
|
@@ -180,6 +197,10 @@ class MemoryPhysics {
|
|
|
180
197
|
constructor(config = {}) {
|
|
181
198
|
this.memories = new Map();
|
|
182
199
|
this.lastUpdate = Date.now();
|
|
200
|
+
// Security: Prevent unbounded memory growth
|
|
201
|
+
this.MAX_MEMORIES = 10000;
|
|
202
|
+
this.MAX_CONTENT_LENGTH = 10000;
|
|
203
|
+
this.MAX_ID_LENGTH = 256;
|
|
183
204
|
this.config = {
|
|
184
205
|
dimension: config.dimension ?? 384,
|
|
185
206
|
memoryDecayRate: config.memoryDecayRate ?? 0.01, // per minute
|
|
@@ -191,9 +212,24 @@ class MemoryPhysics {
|
|
|
191
212
|
* Encode a new memory
|
|
192
213
|
*/
|
|
193
214
|
encode(id, embedding, content) {
|
|
215
|
+
// Security: Validate inputs
|
|
216
|
+
if (typeof id !== 'string' || id.length === 0 || id.length > this.MAX_ID_LENGTH) {
|
|
217
|
+
throw new Error(`Invalid memory ID: must be string of 1-${this.MAX_ID_LENGTH} characters`);
|
|
218
|
+
}
|
|
219
|
+
if (typeof content !== 'string' || content.length > this.MAX_CONTENT_LENGTH) {
|
|
220
|
+
throw new Error(`Content exceeds maximum length: ${this.MAX_CONTENT_LENGTH}`);
|
|
221
|
+
}
|
|
222
|
+
if (this.memories.size >= this.MAX_MEMORIES && !this.memories.has(id)) {
|
|
223
|
+
// Force cleanup of weak memories before adding new one
|
|
224
|
+
this.forceCleanup();
|
|
225
|
+
}
|
|
194
226
|
const emb = embedding instanceof Float32Array
|
|
195
227
|
? new Float32Array(embedding)
|
|
196
228
|
: new Float32Array(embedding);
|
|
229
|
+
// Security: Validate embedding dimension
|
|
230
|
+
if (emb.length !== this.config.dimension) {
|
|
231
|
+
throw new Error(`Embedding dimension mismatch: expected ${this.config.dimension}, got ${emb.length}`);
|
|
232
|
+
}
|
|
197
233
|
const now = Date.now();
|
|
198
234
|
// Check for interference with existing memories
|
|
199
235
|
let interference = 0;
|
|
@@ -312,7 +348,21 @@ class MemoryPhysics {
|
|
|
312
348
|
normA += a[i] * a[i];
|
|
313
349
|
normB += b[i] * b[i];
|
|
314
350
|
}
|
|
315
|
-
|
|
351
|
+
const denom = Math.sqrt(normA * normB);
|
|
352
|
+
if (denom < 1e-10)
|
|
353
|
+
return 0; // Handle zero vectors
|
|
354
|
+
return Math.max(-1, Math.min(1, dot / denom)); // Clamp to valid range
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Force cleanup of weak memories when limit reached
|
|
358
|
+
*/
|
|
359
|
+
forceCleanup() {
|
|
360
|
+
const entries = Array.from(this.memories.entries())
|
|
361
|
+
.sort((a, b) => a[1].strength - b[1].strength);
|
|
362
|
+
const removeCount = Math.ceil(this.memories.size * 0.1); // Remove weakest 10%
|
|
363
|
+
for (let i = 0; i < removeCount; i++) {
|
|
364
|
+
this.memories.delete(entries[i][0]);
|
|
365
|
+
}
|
|
316
366
|
}
|
|
317
367
|
}
|
|
318
368
|
exports.MemoryPhysics = MemoryPhysics;
|
|
@@ -454,6 +504,9 @@ exports.EmbeddingStateMachine = EmbeddingStateMachine;
|
|
|
454
504
|
class SwarmCoordinator {
|
|
455
505
|
constructor(config = {}) {
|
|
456
506
|
this.agents = new Map();
|
|
507
|
+
// Security: Prevent unbounded agent growth
|
|
508
|
+
this.MAX_AGENTS = 1000;
|
|
509
|
+
this.MAX_SPECIALTY_LENGTH = 100;
|
|
457
510
|
this.config = { dimension: config.dimension ?? 384 };
|
|
458
511
|
this.sharedContext = new Float32Array(this.config.dimension);
|
|
459
512
|
}
|
|
@@ -461,9 +514,23 @@ class SwarmCoordinator {
|
|
|
461
514
|
* Register an agent with the swarm
|
|
462
515
|
*/
|
|
463
516
|
register(id, embedding, specialty = 'general') {
|
|
517
|
+
// Security: Validate inputs
|
|
518
|
+
if (typeof id !== 'string' || id.length === 0 || id.length > 256) {
|
|
519
|
+
throw new Error('Invalid agent ID: must be string of 1-256 characters');
|
|
520
|
+
}
|
|
521
|
+
if (typeof specialty !== 'string' || specialty.length > this.MAX_SPECIALTY_LENGTH) {
|
|
522
|
+
throw new Error(`Specialty exceeds maximum length: ${this.MAX_SPECIALTY_LENGTH}`);
|
|
523
|
+
}
|
|
524
|
+
if (this.agents.size >= this.MAX_AGENTS && !this.agents.has(id)) {
|
|
525
|
+
throw new Error(`Agent limit reached: ${this.MAX_AGENTS}`);
|
|
526
|
+
}
|
|
464
527
|
const position = embedding instanceof Float32Array
|
|
465
528
|
? new Float32Array(embedding)
|
|
466
529
|
: new Float32Array(embedding);
|
|
530
|
+
// Security: Validate embedding dimension
|
|
531
|
+
if (position.length !== this.config.dimension) {
|
|
532
|
+
throw new Error(`Embedding dimension mismatch: expected ${this.config.dimension}, got ${position.length}`);
|
|
533
|
+
}
|
|
467
534
|
this.agents.set(id, {
|
|
468
535
|
position,
|
|
469
536
|
velocity: new Float32Array(this.config.dimension),
|