@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,416 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.WebSocketServer = void 0;
|
|
37
|
+
const ws_1 = __importStar(require("ws"));
|
|
38
|
+
const events_1 = require("events");
|
|
39
|
+
const security_1 = require("../security");
|
|
40
|
+
/**
|
|
41
|
+
* High-performance WebSocket server for agent connections
|
|
42
|
+
* Handles connection lifecycle, heartbeat, reconnection logic, and security
|
|
43
|
+
*/
|
|
44
|
+
class WebSocketServer extends events_1.EventEmitter {
|
|
45
|
+
constructor(config, securityConfig) {
|
|
46
|
+
super();
|
|
47
|
+
this.wss = null;
|
|
48
|
+
this.connections = new Map();
|
|
49
|
+
this.heartbeatInterval = null;
|
|
50
|
+
this.security = null;
|
|
51
|
+
this.stats = {
|
|
52
|
+
totalConnections: 0,
|
|
53
|
+
activeConnections: 0,
|
|
54
|
+
messagesReceived: 0,
|
|
55
|
+
messagesSent: 0,
|
|
56
|
+
reconnections: 0,
|
|
57
|
+
};
|
|
58
|
+
this.config = {
|
|
59
|
+
port: config.port || 8080,
|
|
60
|
+
heartbeatInterval: config.heartbeatInterval || 30000,
|
|
61
|
+
connectionTimeout: config.connectionTimeout || 60000,
|
|
62
|
+
maxConnections: config.maxConnections || 100,
|
|
63
|
+
...config,
|
|
64
|
+
};
|
|
65
|
+
// Initialize security if config provided
|
|
66
|
+
if (securityConfig) {
|
|
67
|
+
this.security = new security_1.SecurityMiddleware(securityConfig);
|
|
68
|
+
console.log('🔒 Security enabled:', {
|
|
69
|
+
auth: securityConfig.auth.enabled,
|
|
70
|
+
rateLimit: securityConfig.rateLimit.enabled,
|
|
71
|
+
sanitization: securityConfig.sanitization.enabled,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Start the WebSocket server
|
|
77
|
+
*/
|
|
78
|
+
start() {
|
|
79
|
+
return new Promise((resolve, reject) => {
|
|
80
|
+
try {
|
|
81
|
+
this.wss = new ws_1.WebSocketServer({
|
|
82
|
+
port: this.config.port,
|
|
83
|
+
maxPayload: 10 * 1024 * 1024, // 10MB max message size
|
|
84
|
+
});
|
|
85
|
+
this.wss.on('connection', (ws, req) => {
|
|
86
|
+
this.handleConnection(ws, req);
|
|
87
|
+
});
|
|
88
|
+
this.wss.on('error', (error) => {
|
|
89
|
+
this.emit('error', error);
|
|
90
|
+
reject(error);
|
|
91
|
+
});
|
|
92
|
+
this.wss.on('listening', () => {
|
|
93
|
+
console.log(`WebSocket server listening on port ${this.config.port}`);
|
|
94
|
+
this.startHeartbeat();
|
|
95
|
+
this.emit('ready');
|
|
96
|
+
resolve();
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
reject(error);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Handle new WebSocket connection
|
|
106
|
+
*/
|
|
107
|
+
handleConnection(ws, req) {
|
|
108
|
+
// Check max connections limit
|
|
109
|
+
if (this.connections.size >= this.config.maxConnections) {
|
|
110
|
+
ws.close(1008, 'Maximum connections reached');
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
// Extract security headers
|
|
114
|
+
const apiKey = req.headers['authorization']?.replace('Bearer ', '');
|
|
115
|
+
const origin = req.headers['origin'];
|
|
116
|
+
// Validate connection if security is enabled
|
|
117
|
+
if (this.security) {
|
|
118
|
+
const securityCheck = this.security.checkRequest(apiKey, origin, { type: 'connection', timestamp: Date.now() }, req.socket.remoteAddress);
|
|
119
|
+
if (!securityCheck.allowed) {
|
|
120
|
+
console.log(`🚫 Connection rejected: ${securityCheck.reason}`);
|
|
121
|
+
ws.close(1008, securityCheck.reason);
|
|
122
|
+
this.emit('securityViolation', {
|
|
123
|
+
type: 'connection_rejected',
|
|
124
|
+
reason: securityCheck.reason,
|
|
125
|
+
ip: req.socket.remoteAddress,
|
|
126
|
+
origin,
|
|
127
|
+
});
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
console.log('✅ Connection authenticated:', securityCheck.apiKey?.agentId);
|
|
131
|
+
}
|
|
132
|
+
const connectionId = this.generateConnectionId();
|
|
133
|
+
const connection = {
|
|
134
|
+
id: connectionId,
|
|
135
|
+
ws,
|
|
136
|
+
agentId: null,
|
|
137
|
+
capabilities: [],
|
|
138
|
+
isAlive: true,
|
|
139
|
+
connectedAt: Date.now(),
|
|
140
|
+
lastPing: Date.now(),
|
|
141
|
+
metadata: {
|
|
142
|
+
ip: req.socket.remoteAddress,
|
|
143
|
+
userAgent: req.headers['user-agent'],
|
|
144
|
+
apiKey: apiKey,
|
|
145
|
+
origin: origin,
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
this.connections.set(connectionId, connection);
|
|
149
|
+
this.stats.totalConnections++;
|
|
150
|
+
this.stats.activeConnections++;
|
|
151
|
+
console.log(`New connection: ${connectionId} (${this.stats.activeConnections} active)`);
|
|
152
|
+
// Setup WebSocket event handlers
|
|
153
|
+
ws.on('message', (data) => {
|
|
154
|
+
this.handleMessage(connectionId, data);
|
|
155
|
+
});
|
|
156
|
+
ws.on('pong', () => {
|
|
157
|
+
this.handlePong(connectionId);
|
|
158
|
+
});
|
|
159
|
+
ws.on('close', (code, reason) => {
|
|
160
|
+
this.handleDisconnection(connectionId, code, reason.toString());
|
|
161
|
+
});
|
|
162
|
+
ws.on('error', (error) => {
|
|
163
|
+
this.handleError(connectionId, error);
|
|
164
|
+
});
|
|
165
|
+
this.emit('connection', connection);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Handle incoming message from agent
|
|
169
|
+
*/
|
|
170
|
+
handleMessage(connectionId, data) {
|
|
171
|
+
const connection = this.connections.get(connectionId);
|
|
172
|
+
if (!connection)
|
|
173
|
+
return;
|
|
174
|
+
try {
|
|
175
|
+
const message = JSON.parse(data.toString());
|
|
176
|
+
// Security check if enabled
|
|
177
|
+
if (this.security) {
|
|
178
|
+
const securityCheck = this.security.checkRequest(connection.metadata?.apiKey, connection.metadata?.origin, message, connection.agentId || connection.metadata?.ip || connectionId);
|
|
179
|
+
if (!securityCheck.allowed) {
|
|
180
|
+
console.log(`🚫 Message rejected from ${connectionId}: ${securityCheck.reason}`);
|
|
181
|
+
this.sendToConnection(connectionId, {
|
|
182
|
+
type: 'ERROR',
|
|
183
|
+
id: message.id || 'unknown',
|
|
184
|
+
timestamp: Date.now(),
|
|
185
|
+
payload: {
|
|
186
|
+
code: 'SECURITY_ERROR',
|
|
187
|
+
message: securityCheck.reason,
|
|
188
|
+
rateLimit: securityCheck.rateLimit,
|
|
189
|
+
},
|
|
190
|
+
});
|
|
191
|
+
this.emit('securityViolation', {
|
|
192
|
+
type: 'message_rejected',
|
|
193
|
+
connectionId,
|
|
194
|
+
agentId: connection.agentId,
|
|
195
|
+
reason: securityCheck.reason,
|
|
196
|
+
message: message.type,
|
|
197
|
+
});
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
// Use sanitized message
|
|
201
|
+
if (securityCheck.sanitizedMessage) {
|
|
202
|
+
Object.assign(message, securityCheck.sanitizedMessage);
|
|
203
|
+
}
|
|
204
|
+
// Add rate limit info to response headers
|
|
205
|
+
if (securityCheck.rateLimit) {
|
|
206
|
+
connection.metadata = {
|
|
207
|
+
...connection.metadata,
|
|
208
|
+
rateLimit: securityCheck.rateLimit,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
this.stats.messagesReceived++;
|
|
213
|
+
console.log('📨 WebSocketServer received message:');
|
|
214
|
+
console.log(' Connection ID:', connectionId);
|
|
215
|
+
console.log(' Agent ID:', connection.agentId);
|
|
216
|
+
console.log(' Message type:', message.type);
|
|
217
|
+
// Update last activity
|
|
218
|
+
connection.lastPing = Date.now();
|
|
219
|
+
this.emit('message', {
|
|
220
|
+
connectionId,
|
|
221
|
+
agentId: connection.agentId,
|
|
222
|
+
message,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
console.error(`Failed to parse message from ${connectionId}:`, error);
|
|
227
|
+
this.sendError(connectionId, 'Invalid JSON message');
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Handle pong response (heartbeat)
|
|
232
|
+
*/
|
|
233
|
+
handlePong(connectionId) {
|
|
234
|
+
const connection = this.connections.get(connectionId);
|
|
235
|
+
if (connection) {
|
|
236
|
+
connection.isAlive = true;
|
|
237
|
+
connection.lastPing = Date.now();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Handle connection close
|
|
242
|
+
*/
|
|
243
|
+
handleDisconnection(connectionId, code, reason) {
|
|
244
|
+
const connection = this.connections.get(connectionId);
|
|
245
|
+
if (!connection)
|
|
246
|
+
return;
|
|
247
|
+
console.log(`Connection closed: ${connectionId} (code: ${code}, reason: ${reason})`);
|
|
248
|
+
this.emit('disconnection', {
|
|
249
|
+
connectionId,
|
|
250
|
+
agentId: connection.agentId,
|
|
251
|
+
code,
|
|
252
|
+
reason,
|
|
253
|
+
});
|
|
254
|
+
this.connections.delete(connectionId);
|
|
255
|
+
this.stats.activeConnections--;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Handle WebSocket error
|
|
259
|
+
*/
|
|
260
|
+
handleError(connectionId, error) {
|
|
261
|
+
console.error(`WebSocket error on ${connectionId}:`, error);
|
|
262
|
+
this.emit('connectionError', { connectionId, error });
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Start heartbeat mechanism (ping/pong)
|
|
266
|
+
*/
|
|
267
|
+
startHeartbeat() {
|
|
268
|
+
this.heartbeatInterval = setInterval(() => {
|
|
269
|
+
this.connections.forEach((connection, connectionId) => {
|
|
270
|
+
// Check if connection is still alive
|
|
271
|
+
if (!connection.isAlive) {
|
|
272
|
+
console.log(`Terminating dead connection: ${connectionId}`);
|
|
273
|
+
connection.ws.terminate();
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
// Check for timeout
|
|
277
|
+
const timeSinceLastPing = Date.now() - connection.lastPing;
|
|
278
|
+
if (timeSinceLastPing > this.config.connectionTimeout) {
|
|
279
|
+
console.log(`Connection timeout: ${connectionId}`);
|
|
280
|
+
connection.ws.close(1000, 'Connection timeout');
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
// Send ping
|
|
284
|
+
connection.isAlive = false;
|
|
285
|
+
connection.ws.ping();
|
|
286
|
+
});
|
|
287
|
+
}, this.config.heartbeatInterval);
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Send message to specific connection
|
|
291
|
+
*/
|
|
292
|
+
sendToConnection(connectionId, message) {
|
|
293
|
+
const connection = this.connections.get(connectionId);
|
|
294
|
+
if (!connection || connection.ws.readyState !== ws_1.default.OPEN) {
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
297
|
+
try {
|
|
298
|
+
connection.ws.send(JSON.stringify(message));
|
|
299
|
+
this.stats.messagesSent++;
|
|
300
|
+
return true;
|
|
301
|
+
}
|
|
302
|
+
catch (error) {
|
|
303
|
+
console.error(`Failed to send message to ${connectionId}:`, error);
|
|
304
|
+
return false;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Send message to specific agent
|
|
309
|
+
*/
|
|
310
|
+
sendToAgent(agentId, message) {
|
|
311
|
+
const connection = Array.from(this.connections.values()).find(conn => conn.agentId === agentId);
|
|
312
|
+
if (!connection) {
|
|
313
|
+
return false;
|
|
314
|
+
}
|
|
315
|
+
return this.sendToConnection(connection.id, message);
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Broadcast message to all connected agents
|
|
319
|
+
*/
|
|
320
|
+
broadcast(message, excludeConnectionId) {
|
|
321
|
+
const payload = JSON.stringify(message);
|
|
322
|
+
this.connections.forEach((connection, connectionId) => {
|
|
323
|
+
if (excludeConnectionId && connectionId === excludeConnectionId) {
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
if (connection.ws.readyState === ws_1.default.OPEN) {
|
|
327
|
+
connection.ws.send(payload);
|
|
328
|
+
this.stats.messagesSent++;
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Send error message to connection
|
|
334
|
+
*/
|
|
335
|
+
sendError(connectionId, errorMessage) {
|
|
336
|
+
this.sendToConnection(connectionId, {
|
|
337
|
+
type: 'error',
|
|
338
|
+
error: errorMessage,
|
|
339
|
+
timestamp: Date.now(),
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Update agent information for a connection
|
|
344
|
+
*/
|
|
345
|
+
updateAgentInfo(connectionId, agentId, capabilities) {
|
|
346
|
+
const connection = this.connections.get(connectionId);
|
|
347
|
+
if (!connection) {
|
|
348
|
+
return false;
|
|
349
|
+
}
|
|
350
|
+
connection.agentId = agentId;
|
|
351
|
+
connection.capabilities = capabilities;
|
|
352
|
+
return true;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Get connection by ID
|
|
356
|
+
*/
|
|
357
|
+
getConnection(connectionId) {
|
|
358
|
+
return this.connections.get(connectionId);
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Get all active connections
|
|
362
|
+
*/
|
|
363
|
+
getConnections() {
|
|
364
|
+
return Array.from(this.connections.values());
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Get connection statistics
|
|
368
|
+
*/
|
|
369
|
+
getStats() {
|
|
370
|
+
return { ...this.stats };
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Generate unique connection ID
|
|
374
|
+
*/
|
|
375
|
+
generateConnectionId() {
|
|
376
|
+
return `conn_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Stop the WebSocket server
|
|
380
|
+
*/
|
|
381
|
+
async stop() {
|
|
382
|
+
return new Promise((resolve) => {
|
|
383
|
+
// Stop heartbeat
|
|
384
|
+
if (this.heartbeatInterval) {
|
|
385
|
+
clearInterval(this.heartbeatInterval);
|
|
386
|
+
this.heartbeatInterval = null;
|
|
387
|
+
}
|
|
388
|
+
// Destroy security middleware
|
|
389
|
+
if (this.security) {
|
|
390
|
+
this.security.destroy();
|
|
391
|
+
}
|
|
392
|
+
// Close all connections
|
|
393
|
+
this.connections.forEach((connection) => {
|
|
394
|
+
connection.ws.close(1000, 'Server shutting down');
|
|
395
|
+
});
|
|
396
|
+
// Close server
|
|
397
|
+
if (this.wss) {
|
|
398
|
+
this.wss.close(() => {
|
|
399
|
+
console.log('WebSocket server stopped');
|
|
400
|
+
resolve();
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
else {
|
|
404
|
+
resolve();
|
|
405
|
+
}
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Get security middleware (for key management)
|
|
410
|
+
*/
|
|
411
|
+
getSecurity() {
|
|
412
|
+
return this.security;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
exports.WebSocketServer = WebSocketServer;
|
|
416
|
+
//# sourceMappingURL=WebSocketServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebSocketServer.js","sourceRoot":"","sources":["../../src/core/WebSocketServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Hub WebSocket - Main exports
|
|
3
|
+
*
|
|
4
|
+
* This module provides the core infrastructure for the Subconscious Router:
|
|
5
|
+
* - WebSocketServer: High-performance WebSocket server with connection management
|
|
6
|
+
* - AgentRegistry: Dynamic agent registration and capability tracking
|
|
7
|
+
* - Router: I.A.P. message routing and task orchestration
|
|
8
|
+
*/
|
|
9
|
+
export { WebSocketServer } from './WebSocketServer';
|
|
10
|
+
export { AgentRegistry } from './AgentRegistry';
|
|
11
|
+
export { Router } from './router';
|
|
12
|
+
export { OrchestrationEngine } from './OrchestrationEngine';
|
|
13
|
+
export { SubconsciousEngine } from './SubconsciousEngine';
|
|
14
|
+
export { DashboardBroadcaster } from './DashboardBroadcaster';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Core Hub WebSocket - Main exports
|
|
4
|
+
*
|
|
5
|
+
* This module provides the core infrastructure for the Subconscious Router:
|
|
6
|
+
* - WebSocketServer: High-performance WebSocket server with connection management
|
|
7
|
+
* - AgentRegistry: Dynamic agent registration and capability tracking
|
|
8
|
+
* - Router: I.A.P. message routing and task orchestration
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.DashboardBroadcaster = exports.SubconsciousEngine = exports.OrchestrationEngine = exports.Router = exports.AgentRegistry = exports.WebSocketServer = void 0;
|
|
12
|
+
var WebSocketServer_1 = require("./WebSocketServer");
|
|
13
|
+
Object.defineProperty(exports, "WebSocketServer", { enumerable: true, get: function () { return WebSocketServer_1.WebSocketServer; } });
|
|
14
|
+
var AgentRegistry_1 = require("./AgentRegistry");
|
|
15
|
+
Object.defineProperty(exports, "AgentRegistry", { enumerable: true, get: function () { return AgentRegistry_1.AgentRegistry; } });
|
|
16
|
+
var router_1 = require("./router");
|
|
17
|
+
Object.defineProperty(exports, "Router", { enumerable: true, get: function () { return router_1.Router; } });
|
|
18
|
+
var OrchestrationEngine_1 = require("./OrchestrationEngine");
|
|
19
|
+
Object.defineProperty(exports, "OrchestrationEngine", { enumerable: true, get: function () { return OrchestrationEngine_1.OrchestrationEngine; } });
|
|
20
|
+
var SubconsciousEngine_1 = require("./SubconsciousEngine");
|
|
21
|
+
Object.defineProperty(exports, "SubconsciousEngine", { enumerable: true, get: function () { return SubconsciousEngine_1.SubconsciousEngine; } });
|
|
22
|
+
var DashboardBroadcaster_1 = require("./DashboardBroadcaster");
|
|
23
|
+
Object.defineProperty(exports, "DashboardBroadcaster", { enumerable: true, get: function () { return DashboardBroadcaster_1.DashboardBroadcaster; } });
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAC5B,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import { AgentRegistry } from './AgentRegistry';
|
|
3
|
+
import { WebSocketServer } from './WebSocketServer';
|
|
4
|
+
import { RouterConfig } from '../types';
|
|
5
|
+
/**
|
|
6
|
+
* Core routing engine for Inter-Agent Protocol (I.A.P.) messages
|
|
7
|
+
* Handles message reception, agent selection, and error management
|
|
8
|
+
*/
|
|
9
|
+
export declare class Router extends EventEmitter {
|
|
10
|
+
private wsServer;
|
|
11
|
+
private agentRegistry;
|
|
12
|
+
private config;
|
|
13
|
+
private pendingTasks;
|
|
14
|
+
private taskTimeouts;
|
|
15
|
+
constructor(wsServer: WebSocketServer, agentRegistry: AgentRegistry, config: RouterConfig);
|
|
16
|
+
/**
|
|
17
|
+
* Setup event handlers for WebSocket server
|
|
18
|
+
*/
|
|
19
|
+
private setupEventHandlers;
|
|
20
|
+
/**
|
|
21
|
+
* Handle incoming I.A.P. message
|
|
22
|
+
*/
|
|
23
|
+
private handleMessage;
|
|
24
|
+
/**
|
|
25
|
+
* Handle agent handshake (registration)
|
|
26
|
+
*/
|
|
27
|
+
private handleHandshake;
|
|
28
|
+
/**
|
|
29
|
+
* Handle task request from agent or external source
|
|
30
|
+
*/
|
|
31
|
+
private handleTaskRequest;
|
|
32
|
+
/**
|
|
33
|
+
* Handle task response from agent
|
|
34
|
+
*/
|
|
35
|
+
private handleTaskResponse;
|
|
36
|
+
/**
|
|
37
|
+
* Handle capability query
|
|
38
|
+
*/
|
|
39
|
+
private handleCapabilityQuery;
|
|
40
|
+
/**
|
|
41
|
+
* Handle heartbeat message
|
|
42
|
+
*/
|
|
43
|
+
private handleHeartbeat;
|
|
44
|
+
/**
|
|
45
|
+
* Handle error message from agent
|
|
46
|
+
*/
|
|
47
|
+
private handleErrorMessage;
|
|
48
|
+
/**
|
|
49
|
+
* Select best agent for a task
|
|
50
|
+
*/
|
|
51
|
+
private selectAgent;
|
|
52
|
+
/**
|
|
53
|
+
* Handle agent disconnection
|
|
54
|
+
*/
|
|
55
|
+
private handleAgentDisconnection;
|
|
56
|
+
/**
|
|
57
|
+
* Handle task failure
|
|
58
|
+
*/
|
|
59
|
+
private handleTaskFailure;
|
|
60
|
+
/**
|
|
61
|
+
* Retry a failed task
|
|
62
|
+
*/
|
|
63
|
+
private retryTask;
|
|
64
|
+
/**
|
|
65
|
+
* Set timeout for a task
|
|
66
|
+
*/
|
|
67
|
+
private setTaskTimeout;
|
|
68
|
+
/**
|
|
69
|
+
* Clear timeout for a task
|
|
70
|
+
*/
|
|
71
|
+
private clearTaskTimeout;
|
|
72
|
+
/**
|
|
73
|
+
* Send error message to connection
|
|
74
|
+
*/
|
|
75
|
+
private sendError;
|
|
76
|
+
/**
|
|
77
|
+
* Validate I.A.P. message structure
|
|
78
|
+
*/
|
|
79
|
+
private validateMessage;
|
|
80
|
+
/**
|
|
81
|
+
* Generate unique message ID
|
|
82
|
+
*/
|
|
83
|
+
private generateMessageId;
|
|
84
|
+
/**
|
|
85
|
+
* Get router statistics
|
|
86
|
+
*/
|
|
87
|
+
getStats(): {
|
|
88
|
+
pendingTasks: number;
|
|
89
|
+
agentStats: {
|
|
90
|
+
totalAgents: number;
|
|
91
|
+
onlineAgents: number;
|
|
92
|
+
offlineAgents: number;
|
|
93
|
+
totalCapabilities: number;
|
|
94
|
+
totalTasksInProgress: number;
|
|
95
|
+
totalTasksCompleted: number;
|
|
96
|
+
totalTasksFailed: number;
|
|
97
|
+
};
|
|
98
|
+
connectionStats: import("../types").ConnectionStats;
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Stop the router
|
|
102
|
+
*/
|
|
103
|
+
stop(): void;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/core/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAKL,YAAY,EAEb,MAAM,UAAU,CAAC;AAElB;;;GAGG;AACH,qBAAa,MAAO,SAAQ,YAAY;IACtC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,YAAY,CAA0C;gBAG5D,QAAQ,EAAE,eAAe,EACzB,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,YAAY;IAetB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;OAEG;YACW,aAAa;IAsD3B;;OAEG;YACW,eAAe;IAsC7B;;OAEG;YACW,iBAAiB;IA2D/B;;OAEG;YACW,kBAAkB;IA4ChC;;OAEG;YACW,qBAAqB;IA0BnC;;OAEG;YACW,eAAe;IAgB7B;;OAEG;YACW,kBAAkB;IAWhC;;OAEG;IACH,OAAO,CAAC,WAAW;IAsBnB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAchC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwCzB;;OAEG;YACW,SAAS;IA6BvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACH,OAAO,CAAC,SAAS;IAWjB;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACI,QAAQ;;;;;;;;;;;;;IAQf;;OAEG;IACI,IAAI,IAAI,IAAI;CAMpB"}
|