@nxuss/lemma 0.1.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/LICENSE +21 -0
- package/README.md +311 -0
- package/dist/cloud/KeyManager.d.ts +29 -0
- package/dist/cloud/KeyManager.d.ts.map +1 -0
- package/dist/cloud/KeyManager.js +142 -0
- package/dist/cloud/KeyManager.js.map +1 -0
- package/dist/cloud/TenantCache.d.ts +29 -0
- package/dist/cloud/TenantCache.d.ts.map +1 -0
- package/dist/cloud/TenantCache.js +162 -0
- package/dist/cloud/TenantCache.js.map +1 -0
- package/dist/cloud/index.d.ts +4 -0
- package/dist/cloud/index.d.ts.map +1 -0
- package/dist/cloud/index.js +23 -0
- package/dist/cloud/index.js.map +1 -0
- package/dist/cloud/server.d.ts +17 -0
- package/dist/cloud/server.d.ts.map +1 -0
- package/dist/cloud/server.js +189 -0
- package/dist/cloud/server.js.map +1 -0
- package/dist/cloud/types.d.ts +35 -0
- package/dist/cloud/types.d.ts.map +1 -0
- package/dist/cloud/types.js +14 -0
- package/dist/cloud/types.js.map +1 -0
- package/dist/config/index.d.ts +44 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +161 -0
- package/dist/config/index.js.map +1 -0
- package/dist/consensus/ConsensusEngine.d.ts +119 -0
- package/dist/consensus/ConsensusEngine.d.ts.map +1 -0
- package/dist/consensus/ConsensusEngine.js +314 -0
- package/dist/consensus/ConsensusEngine.js.map +1 -0
- package/dist/consensus/ModelPool.d.ts +103 -0
- package/dist/consensus/ModelPool.d.ts.map +1 -0
- package/dist/consensus/ModelPool.js +276 -0
- package/dist/consensus/ModelPool.js.map +1 -0
- package/dist/consensus/index.d.ts +8 -0
- package/dist/consensus/index.d.ts.map +1 -0
- package/dist/consensus/index.js +13 -0
- package/dist/consensus/index.js.map +1 -0
- package/dist/core/AgentRegistry.d.ts +89 -0
- package/dist/core/AgentRegistry.d.ts.map +1 -0
- package/dist/core/AgentRegistry.js +264 -0
- package/dist/core/AgentRegistry.js.map +1 -0
- package/dist/core/DashboardBroadcaster.d.ts +67 -0
- package/dist/core/DashboardBroadcaster.d.ts.map +1 -0
- package/dist/core/DashboardBroadcaster.js +264 -0
- package/dist/core/DashboardBroadcaster.js.map +1 -0
- package/dist/core/OrchestrationEngine.d.ts +84 -0
- package/dist/core/OrchestrationEngine.d.ts.map +1 -0
- package/dist/core/OrchestrationEngine.js +455 -0
- package/dist/core/OrchestrationEngine.js.map +1 -0
- package/dist/core/SubconsciousEngine.d.ts +53 -0
- package/dist/core/SubconsciousEngine.d.ts.map +1 -0
- package/dist/core/SubconsciousEngine.js +273 -0
- package/dist/core/SubconsciousEngine.js.map +1 -0
- package/dist/core/WebSocketServer.d.ts +89 -0
- package/dist/core/WebSocketServer.d.ts.map +1 -0
- package/dist/core/WebSocketServer.js +416 -0
- package/dist/core/WebSocketServer.js.map +1 -0
- package/dist/core/index.d.ts +15 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +24 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/router.d.ts +105 -0
- package/dist/core/router.d.ts.map +1 -0
- package/dist/core/router.js +420 -0
- package/dist/core/router.js.map +1 -0
- package/dist/embed/index.d.ts +153 -0
- package/dist/embed/index.d.ts.map +1 -0
- package/dist/embed/index.js +408 -0
- package/dist/embed/index.js.map +1 -0
- package/dist/embed.d.ts +11 -0
- package/dist/embed.d.ts.map +1 -0
- package/dist/embed.js +19 -0
- package/dist/embed.js.map +1 -0
- package/dist/index.d.ts +83 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +176 -0
- package/dist/index.js.map +1 -0
- package/dist/protocol/flows.d.ts +126 -0
- package/dist/protocol/flows.d.ts.map +1 -0
- package/dist/protocol/flows.js +347 -0
- package/dist/protocol/flows.js.map +1 -0
- package/dist/protocol/iap.d.ts +54 -0
- package/dist/protocol/iap.d.ts.map +1 -0
- package/dist/protocol/iap.js +108 -0
- package/dist/protocol/iap.js.map +1 -0
- package/dist/protocol/index.d.ts +23 -0
- package/dist/protocol/index.d.ts.map +1 -0
- package/dist/protocol/index.js +45 -0
- package/dist/protocol/index.js.map +1 -0
- package/dist/protocol/types.d.ts +332 -0
- package/dist/protocol/types.d.ts.map +1 -0
- package/dist/protocol/types.js +57 -0
- package/dist/protocol/types.js.map +1 -0
- package/dist/protocol/utils.d.ts +130 -0
- package/dist/protocol/utils.d.ts.map +1 -0
- package/dist/protocol/utils.js +292 -0
- package/dist/protocol/utils.js.map +1 -0
- package/dist/protocol/validators.d.ts +54 -0
- package/dist/protocol/validators.d.ts.map +1 -0
- package/dist/protocol/validators.js +344 -0
- package/dist/protocol/validators.js.map +1 -0
- package/dist/security/AuthManager.d.ts +73 -0
- package/dist/security/AuthManager.d.ts.map +1 -0
- package/dist/security/AuthManager.js +102 -0
- package/dist/security/AuthManager.js.map +1 -0
- package/dist/security/MessageSanitizer.d.ts +51 -0
- package/dist/security/MessageSanitizer.d.ts.map +1 -0
- package/dist/security/MessageSanitizer.js +166 -0
- package/dist/security/MessageSanitizer.js.map +1 -0
- package/dist/security/RateLimiter.d.ts +46 -0
- package/dist/security/RateLimiter.d.ts.map +1 -0
- package/dist/security/RateLimiter.js +133 -0
- package/dist/security/RateLimiter.js.map +1 -0
- package/dist/security/SecurityMiddleware.d.ts +88 -0
- package/dist/security/SecurityMiddleware.d.ts.map +1 -0
- package/dist/security/SecurityMiddleware.js +146 -0
- package/dist/security/SecurityMiddleware.js.map +1 -0
- package/dist/security/index.d.ts +35 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +42 -0
- package/dist/security/index.js.map +1 -0
- package/dist/speculative/PredictionEngine.d.ts +99 -0
- package/dist/speculative/PredictionEngine.d.ts.map +1 -0
- package/dist/speculative/PredictionEngine.js +291 -0
- package/dist/speculative/PredictionEngine.js.map +1 -0
- package/dist/speculative/SpeculativeCache.d.ts +117 -0
- package/dist/speculative/SpeculativeCache.d.ts.map +1 -0
- package/dist/speculative/SpeculativeCache.js +292 -0
- package/dist/speculative/SpeculativeCache.js.map +1 -0
- package/dist/speculative/SpeculativeEngine.d.ts +114 -0
- package/dist/speculative/SpeculativeEngine.d.ts.map +1 -0
- package/dist/speculative/SpeculativeEngine.js +244 -0
- package/dist/speculative/SpeculativeEngine.js.map +1 -0
- package/dist/speculative/WorkerPool.d.ts +109 -0
- package/dist/speculative/WorkerPool.d.ts.map +1 -0
- package/dist/speculative/WorkerPool.js +327 -0
- package/dist/speculative/WorkerPool.js.map +1 -0
- package/dist/speculative/index.d.ts +10 -0
- package/dist/speculative/index.d.ts.map +1 -0
- package/dist/speculative/index.js +17 -0
- package/dist/speculative/index.js.map +1 -0
- package/dist/subconscious/EmbeddingService.d.ts +73 -0
- package/dist/subconscious/EmbeddingService.d.ts.map +1 -0
- package/dist/subconscious/EmbeddingService.js +196 -0
- package/dist/subconscious/EmbeddingService.js.map +1 -0
- package/dist/subconscious/SemanticCache.d.ts +82 -0
- package/dist/subconscious/SemanticCache.d.ts.map +1 -0
- package/dist/subconscious/SemanticCache.js +164 -0
- package/dist/subconscious/SemanticCache.js.map +1 -0
- package/dist/subconscious/SubconsciousEngine.d.ts +121 -0
- package/dist/subconscious/SubconsciousEngine.d.ts.map +1 -0
- package/dist/subconscious/SubconsciousEngine.js +241 -0
- package/dist/subconscious/SubconsciousEngine.js.map +1 -0
- package/dist/subconscious/VectorStore.d.ts +54 -0
- package/dist/subconscious/VectorStore.d.ts.map +1 -0
- package/dist/subconscious/VectorStore.js +168 -0
- package/dist/subconscious/VectorStore.js.map +1 -0
- package/dist/subconscious/cache.d.ts +34 -0
- package/dist/subconscious/cache.d.ts.map +1 -0
- package/dist/subconscious/cache.js +156 -0
- package/dist/subconscious/cache.js.map +1 -0
- package/dist/subconscious/embeddings.d.ts +25 -0
- package/dist/subconscious/embeddings.d.ts.map +1 -0
- package/dist/subconscious/embeddings.js +65 -0
- package/dist/subconscious/embeddings.js.map +1 -0
- package/dist/subconscious/index.d.ts +12 -0
- package/dist/subconscious/index.d.ts.map +1 -0
- package/dist/subconscious/index.js +19 -0
- package/dist/subconscious/index.js.map +1 -0
- package/dist/types/index.d.ts +286 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +43 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/logger.d.ts +63 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +126 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +99 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SubconsciousEngine = void 0;
|
|
7
|
+
const chromadb_1 = require("chromadb");
|
|
8
|
+
const axios_1 = __importDefault(require("axios"));
|
|
9
|
+
const config_1 = require("../config");
|
|
10
|
+
const logger_1 = require("../utils/logger");
|
|
11
|
+
const logger = (0, logger_1.createLogger)('SubconsciousEngine');
|
|
12
|
+
/**
|
|
13
|
+
* Subconscious Semantic Engine
|
|
14
|
+
* Provides semantic caching using ChromaDB and Ollama embeddings
|
|
15
|
+
* Implements the "short-circuit" logic for instant task resolution
|
|
16
|
+
*/
|
|
17
|
+
class SubconsciousEngine {
|
|
18
|
+
constructor() {
|
|
19
|
+
this.collection = null;
|
|
20
|
+
this.isInitialized = false;
|
|
21
|
+
this.cacheHits = 0;
|
|
22
|
+
this.cacheMisses = 0;
|
|
23
|
+
this.client = new chromadb_1.ChromaClient({
|
|
24
|
+
path: (0, config_1.getChromaURL)(),
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Initialize the engine and create/get collection
|
|
29
|
+
*/
|
|
30
|
+
async initialize() {
|
|
31
|
+
try {
|
|
32
|
+
logger.info('Initializing Subconscious Engine...');
|
|
33
|
+
// Create or get collection
|
|
34
|
+
this.collection = await this.client.getOrCreateCollection({
|
|
35
|
+
name: config_1.config.CHROMA_COLLECTION,
|
|
36
|
+
metadata: {
|
|
37
|
+
description: 'Semantic cache for agent task responses',
|
|
38
|
+
'hnsw:space': 'cosine',
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
this.isInitialized = true;
|
|
42
|
+
logger.info('Subconscious Engine initialized successfully', {
|
|
43
|
+
collection: config_1.config.CHROMA_COLLECTION,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
logger.error('Failed to initialize Subconscious Engine', error);
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Generate embedding using Ollama
|
|
53
|
+
*/
|
|
54
|
+
async generateEmbedding(text) {
|
|
55
|
+
try {
|
|
56
|
+
const startTime = Date.now();
|
|
57
|
+
const response = await axios_1.default.post(`${config_1.config.OLLAMA_HOST}/api/embeddings`, {
|
|
58
|
+
model: config_1.config.OLLAMA_MODEL,
|
|
59
|
+
prompt: text,
|
|
60
|
+
}, {
|
|
61
|
+
timeout: 30000, // 30 second timeout
|
|
62
|
+
});
|
|
63
|
+
const embedding = response.data.embedding;
|
|
64
|
+
const duration = Date.now() - startTime;
|
|
65
|
+
logger.debug('Generated embedding', {
|
|
66
|
+
textLength: text.length,
|
|
67
|
+
embeddingDim: embedding.length,
|
|
68
|
+
duration,
|
|
69
|
+
});
|
|
70
|
+
return embedding;
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
logger.error('Failed to generate embedding', error);
|
|
74
|
+
throw new Error('Embedding generation failed');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Search for semantically similar cached responses
|
|
79
|
+
* Returns the best match if similarity exceeds threshold
|
|
80
|
+
*/
|
|
81
|
+
async search(query) {
|
|
82
|
+
if (!this.isInitialized || !this.collection) {
|
|
83
|
+
throw new Error('SubconsciousEngine not initialized');
|
|
84
|
+
}
|
|
85
|
+
if (!config_1.config.ENABLE_CACHING) {
|
|
86
|
+
this.cacheMisses++;
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
const startTime = Date.now();
|
|
91
|
+
// Generate embedding for query
|
|
92
|
+
const queryEmbedding = await this.generateEmbedding(query);
|
|
93
|
+
// Search in ChromaDB
|
|
94
|
+
const results = await this.collection.query({
|
|
95
|
+
queryEmbeddings: [queryEmbedding],
|
|
96
|
+
nResults: 1,
|
|
97
|
+
});
|
|
98
|
+
const duration = Date.now() - startTime;
|
|
99
|
+
// Check if we have results
|
|
100
|
+
if (!results.ids[0] || results.ids[0].length === 0) {
|
|
101
|
+
this.cacheMisses++;
|
|
102
|
+
logger.debug('Cache miss - no results', { query, duration });
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
// Get similarity score (ChromaDB returns distances, convert to similarity)
|
|
106
|
+
const distance = results.distances?.[0]?.[0] ?? 1;
|
|
107
|
+
const similarity = 1 - distance; // Cosine distance to similarity
|
|
108
|
+
logger.debug('Semantic search result', {
|
|
109
|
+
similarity,
|
|
110
|
+
threshold: config_1.config.SEMANTIC_THRESHOLD,
|
|
111
|
+
duration,
|
|
112
|
+
});
|
|
113
|
+
// Check if similarity meets threshold
|
|
114
|
+
if (similarity < config_1.config.SEMANTIC_THRESHOLD) {
|
|
115
|
+
this.cacheMisses++;
|
|
116
|
+
logger.info('Cache miss - below threshold', {
|
|
117
|
+
similarity,
|
|
118
|
+
threshold: config_1.config.SEMANTIC_THRESHOLD,
|
|
119
|
+
duration,
|
|
120
|
+
});
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
// Cache hit!
|
|
124
|
+
this.cacheHits++;
|
|
125
|
+
const id = results.ids[0][0];
|
|
126
|
+
const metadata = results.metadatas?.[0]?.[0];
|
|
127
|
+
const response = metadata?.response ? JSON.parse(metadata.response) : null;
|
|
128
|
+
logger.info('Cache HIT! 🎯', {
|
|
129
|
+
similarity,
|
|
130
|
+
duration,
|
|
131
|
+
savedTime: metadata?.executionTime || 0,
|
|
132
|
+
});
|
|
133
|
+
logger.metric('cache-hit-latency', duration);
|
|
134
|
+
return {
|
|
135
|
+
id,
|
|
136
|
+
similarity,
|
|
137
|
+
response,
|
|
138
|
+
metadata: {
|
|
139
|
+
agentId: metadata?.agentId || 'unknown',
|
|
140
|
+
timestamp: metadata?.timestamp || Date.now(),
|
|
141
|
+
executionTime: metadata?.executionTime || 0,
|
|
142
|
+
tokensUsed: metadata?.tokensUsed,
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
logger.error('Search failed', error);
|
|
148
|
+
this.cacheMisses++;
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Store a new response in the semantic cache
|
|
154
|
+
*/
|
|
155
|
+
async store(entry) {
|
|
156
|
+
if (!this.isInitialized || !this.collection) {
|
|
157
|
+
throw new Error('SubconsciousEngine not initialized');
|
|
158
|
+
}
|
|
159
|
+
if (!config_1.config.ENABLE_CACHING) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
const startTime = Date.now();
|
|
164
|
+
// Generate embedding for the query
|
|
165
|
+
const embedding = await this.generateEmbedding(entry.query);
|
|
166
|
+
// Store in ChromaDB
|
|
167
|
+
await this.collection.add({
|
|
168
|
+
ids: [entry.id],
|
|
169
|
+
embeddings: [embedding],
|
|
170
|
+
metadatas: [{
|
|
171
|
+
agentId: entry.metadata.agentId,
|
|
172
|
+
timestamp: entry.metadata.timestamp,
|
|
173
|
+
executionTime: entry.metadata.executionTime || 0,
|
|
174
|
+
tokensUsed: entry.metadata.tokensUsed || 0,
|
|
175
|
+
response: JSON.stringify(entry.response),
|
|
176
|
+
}],
|
|
177
|
+
documents: [entry.query],
|
|
178
|
+
});
|
|
179
|
+
const duration = Date.now() - startTime;
|
|
180
|
+
logger.debug('Stored in cache', {
|
|
181
|
+
id: entry.id,
|
|
182
|
+
duration,
|
|
183
|
+
});
|
|
184
|
+
// Check cache size and prune if necessary
|
|
185
|
+
await this.pruneIfNeeded();
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
logger.error('Failed to store in cache', error);
|
|
189
|
+
// Don't throw - caching failures shouldn't break the system
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Prune old entries if cache exceeds max size
|
|
194
|
+
*/
|
|
195
|
+
async pruneIfNeeded() {
|
|
196
|
+
if (!this.collection)
|
|
197
|
+
return;
|
|
198
|
+
try {
|
|
199
|
+
const count = await this.collection.count();
|
|
200
|
+
if (count > config_1.config.MAX_CACHE_SIZE) {
|
|
201
|
+
const toDelete = count - config_1.config.MAX_CACHE_SIZE;
|
|
202
|
+
logger.info('Pruning cache', {
|
|
203
|
+
currentSize: count,
|
|
204
|
+
maxSize: config_1.config.MAX_CACHE_SIZE,
|
|
205
|
+
toDelete,
|
|
206
|
+
});
|
|
207
|
+
// Get oldest entries (this is a simplified approach)
|
|
208
|
+
// In production, you'd want more sophisticated LRU logic
|
|
209
|
+
const results = await this.collection.get({
|
|
210
|
+
limit: toDelete,
|
|
211
|
+
});
|
|
212
|
+
if (results.ids.length > 0) {
|
|
213
|
+
await this.collection.delete({
|
|
214
|
+
ids: results.ids,
|
|
215
|
+
});
|
|
216
|
+
logger.info('Cache pruned', { deleted: results.ids.length });
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
logger.error('Failed to prune cache', error);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Get cache statistics
|
|
226
|
+
*/
|
|
227
|
+
getStats() {
|
|
228
|
+
const total = this.cacheHits + this.cacheMisses;
|
|
229
|
+
const hitRate = total > 0 ? (this.cacheHits / total) * 100 : 0;
|
|
230
|
+
return {
|
|
231
|
+
cacheHits: this.cacheHits,
|
|
232
|
+
cacheMisses: this.cacheMisses,
|
|
233
|
+
totalQueries: total,
|
|
234
|
+
hitRate: hitRate.toFixed(2) + '%',
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Clear all cache entries
|
|
239
|
+
*/
|
|
240
|
+
async clear() {
|
|
241
|
+
if (!this.collection)
|
|
242
|
+
return;
|
|
243
|
+
try {
|
|
244
|
+
await this.client.deleteCollection({
|
|
245
|
+
name: config_1.config.CHROMA_COLLECTION,
|
|
246
|
+
});
|
|
247
|
+
this.collection = await this.client.createCollection({
|
|
248
|
+
name: config_1.config.CHROMA_COLLECTION,
|
|
249
|
+
metadata: {
|
|
250
|
+
description: 'Semantic cache for agent task responses',
|
|
251
|
+
'hnsw:space': 'cosine',
|
|
252
|
+
},
|
|
253
|
+
});
|
|
254
|
+
this.cacheHits = 0;
|
|
255
|
+
this.cacheMisses = 0;
|
|
256
|
+
logger.info('Cache cleared');
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
logger.error('Failed to clear cache', error);
|
|
260
|
+
throw error;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Shutdown the engine
|
|
265
|
+
*/
|
|
266
|
+
async shutdown() {
|
|
267
|
+
logger.info('Shutting down Subconscious Engine');
|
|
268
|
+
this.isInitialized = false;
|
|
269
|
+
this.collection = null;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
exports.SubconsciousEngine = SubconsciousEngine;
|
|
273
|
+
//# sourceMappingURL=SubconsciousEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubconsciousEngine.js","sourceRoot":"","sources":["../../src/core/SubconsciousEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import { AgentConnection, ServerConfig, ConnectionStats } from '../types';
|
|
3
|
+
import { SecurityMiddleware, SecurityConfig } from '../security';
|
|
4
|
+
/**
|
|
5
|
+
* High-performance WebSocket server for agent connections
|
|
6
|
+
* Handles connection lifecycle, heartbeat, reconnection logic, and security
|
|
7
|
+
*/
|
|
8
|
+
export declare class WebSocketServer extends EventEmitter {
|
|
9
|
+
private wss;
|
|
10
|
+
private connections;
|
|
11
|
+
private heartbeatInterval;
|
|
12
|
+
private config;
|
|
13
|
+
private security;
|
|
14
|
+
private stats;
|
|
15
|
+
constructor(config: ServerConfig, securityConfig?: SecurityConfig);
|
|
16
|
+
/**
|
|
17
|
+
* Start the WebSocket server
|
|
18
|
+
*/
|
|
19
|
+
start(): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Handle new WebSocket connection
|
|
22
|
+
*/
|
|
23
|
+
private handleConnection;
|
|
24
|
+
/**
|
|
25
|
+
* Handle incoming message from agent
|
|
26
|
+
*/
|
|
27
|
+
private handleMessage;
|
|
28
|
+
/**
|
|
29
|
+
* Handle pong response (heartbeat)
|
|
30
|
+
*/
|
|
31
|
+
private handlePong;
|
|
32
|
+
/**
|
|
33
|
+
* Handle connection close
|
|
34
|
+
*/
|
|
35
|
+
private handleDisconnection;
|
|
36
|
+
/**
|
|
37
|
+
* Handle WebSocket error
|
|
38
|
+
*/
|
|
39
|
+
private handleError;
|
|
40
|
+
/**
|
|
41
|
+
* Start heartbeat mechanism (ping/pong)
|
|
42
|
+
*/
|
|
43
|
+
private startHeartbeat;
|
|
44
|
+
/**
|
|
45
|
+
* Send message to specific connection
|
|
46
|
+
*/
|
|
47
|
+
sendToConnection(connectionId: string, message: any): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Send message to specific agent
|
|
50
|
+
*/
|
|
51
|
+
sendToAgent(agentId: string, message: any): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Broadcast message to all connected agents
|
|
54
|
+
*/
|
|
55
|
+
broadcast(message: any, excludeConnectionId?: string): void;
|
|
56
|
+
/**
|
|
57
|
+
* Send error message to connection
|
|
58
|
+
*/
|
|
59
|
+
private sendError;
|
|
60
|
+
/**
|
|
61
|
+
* Update agent information for a connection
|
|
62
|
+
*/
|
|
63
|
+
updateAgentInfo(connectionId: string, agentId: string, capabilities: string[]): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Get connection by ID
|
|
66
|
+
*/
|
|
67
|
+
getConnection(connectionId: string): AgentConnection | undefined;
|
|
68
|
+
/**
|
|
69
|
+
* Get all active connections
|
|
70
|
+
*/
|
|
71
|
+
getConnections(): AgentConnection[];
|
|
72
|
+
/**
|
|
73
|
+
* Get connection statistics
|
|
74
|
+
*/
|
|
75
|
+
getStats(): ConnectionStats;
|
|
76
|
+
/**
|
|
77
|
+
* Generate unique connection ID
|
|
78
|
+
*/
|
|
79
|
+
private generateConnectionId;
|
|
80
|
+
/**
|
|
81
|
+
* Stop the WebSocket server
|
|
82
|
+
*/
|
|
83
|
+
stop(): Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* Get security middleware (for key management)
|
|
86
|
+
*/
|
|
87
|
+
getSecurity(): SecurityMiddleware | null;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=WebSocketServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebSocketServer.d.ts","sourceRoot":"","sources":["../../src/core/WebSocketServer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEjE;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,GAAG,CAAyB;IACpC,OAAO,CAAC,WAAW,CAA2C;IAC9D,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,KAAK,CAMX;gBAEU,MAAM,EAAE,YAAY,EAAE,cAAc,CAAC,EAAE,cAAc;IAqBjE;;OAEG;IACI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA8ExB;;OAEG;IACH,OAAO,CAAC,aAAa;IA6ErB;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACI,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO;IAgBpE;;OAEG;IACI,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO;IAY1D;;OAEG;IACI,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI;IAelE;;OAEG;IACH,OAAO,CAAC,SAAS;IAQjB;;OAEG;IACI,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO;IAY9F;;OAEG;IACI,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIvE;;OAEG;IACI,cAAc,IAAI,eAAe,EAAE;IAI1C;;OAEG;IACI,QAAQ,IAAI,eAAe;IAIlC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BlC;;OAEG;IACI,WAAW,IAAI,kBAAkB,GAAG,IAAI;CAGhD"}
|