@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.
Files changed (179) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +311 -0
  3. package/dist/cloud/KeyManager.d.ts +29 -0
  4. package/dist/cloud/KeyManager.d.ts.map +1 -0
  5. package/dist/cloud/KeyManager.js +142 -0
  6. package/dist/cloud/KeyManager.js.map +1 -0
  7. package/dist/cloud/TenantCache.d.ts +29 -0
  8. package/dist/cloud/TenantCache.d.ts.map +1 -0
  9. package/dist/cloud/TenantCache.js +162 -0
  10. package/dist/cloud/TenantCache.js.map +1 -0
  11. package/dist/cloud/index.d.ts +4 -0
  12. package/dist/cloud/index.d.ts.map +1 -0
  13. package/dist/cloud/index.js +23 -0
  14. package/dist/cloud/index.js.map +1 -0
  15. package/dist/cloud/server.d.ts +17 -0
  16. package/dist/cloud/server.d.ts.map +1 -0
  17. package/dist/cloud/server.js +189 -0
  18. package/dist/cloud/server.js.map +1 -0
  19. package/dist/cloud/types.d.ts +35 -0
  20. package/dist/cloud/types.d.ts.map +1 -0
  21. package/dist/cloud/types.js +14 -0
  22. package/dist/cloud/types.js.map +1 -0
  23. package/dist/config/index.d.ts +44 -0
  24. package/dist/config/index.d.ts.map +1 -0
  25. package/dist/config/index.js +161 -0
  26. package/dist/config/index.js.map +1 -0
  27. package/dist/consensus/ConsensusEngine.d.ts +119 -0
  28. package/dist/consensus/ConsensusEngine.d.ts.map +1 -0
  29. package/dist/consensus/ConsensusEngine.js +314 -0
  30. package/dist/consensus/ConsensusEngine.js.map +1 -0
  31. package/dist/consensus/ModelPool.d.ts +103 -0
  32. package/dist/consensus/ModelPool.d.ts.map +1 -0
  33. package/dist/consensus/ModelPool.js +276 -0
  34. package/dist/consensus/ModelPool.js.map +1 -0
  35. package/dist/consensus/index.d.ts +8 -0
  36. package/dist/consensus/index.d.ts.map +1 -0
  37. package/dist/consensus/index.js +13 -0
  38. package/dist/consensus/index.js.map +1 -0
  39. package/dist/core/AgentRegistry.d.ts +89 -0
  40. package/dist/core/AgentRegistry.d.ts.map +1 -0
  41. package/dist/core/AgentRegistry.js +264 -0
  42. package/dist/core/AgentRegistry.js.map +1 -0
  43. package/dist/core/DashboardBroadcaster.d.ts +67 -0
  44. package/dist/core/DashboardBroadcaster.d.ts.map +1 -0
  45. package/dist/core/DashboardBroadcaster.js +264 -0
  46. package/dist/core/DashboardBroadcaster.js.map +1 -0
  47. package/dist/core/OrchestrationEngine.d.ts +84 -0
  48. package/dist/core/OrchestrationEngine.d.ts.map +1 -0
  49. package/dist/core/OrchestrationEngine.js +455 -0
  50. package/dist/core/OrchestrationEngine.js.map +1 -0
  51. package/dist/core/SubconsciousEngine.d.ts +53 -0
  52. package/dist/core/SubconsciousEngine.d.ts.map +1 -0
  53. package/dist/core/SubconsciousEngine.js +273 -0
  54. package/dist/core/SubconsciousEngine.js.map +1 -0
  55. package/dist/core/WebSocketServer.d.ts +89 -0
  56. package/dist/core/WebSocketServer.d.ts.map +1 -0
  57. package/dist/core/WebSocketServer.js +416 -0
  58. package/dist/core/WebSocketServer.js.map +1 -0
  59. package/dist/core/index.d.ts +15 -0
  60. package/dist/core/index.d.ts.map +1 -0
  61. package/dist/core/index.js +24 -0
  62. package/dist/core/index.js.map +1 -0
  63. package/dist/core/router.d.ts +105 -0
  64. package/dist/core/router.d.ts.map +1 -0
  65. package/dist/core/router.js +420 -0
  66. package/dist/core/router.js.map +1 -0
  67. package/dist/embed/index.d.ts +153 -0
  68. package/dist/embed/index.d.ts.map +1 -0
  69. package/dist/embed/index.js +408 -0
  70. package/dist/embed/index.js.map +1 -0
  71. package/dist/embed.d.ts +11 -0
  72. package/dist/embed.d.ts.map +1 -0
  73. package/dist/embed.js +19 -0
  74. package/dist/embed.js.map +1 -0
  75. package/dist/index.d.ts +83 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +176 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/protocol/flows.d.ts +126 -0
  80. package/dist/protocol/flows.d.ts.map +1 -0
  81. package/dist/protocol/flows.js +347 -0
  82. package/dist/protocol/flows.js.map +1 -0
  83. package/dist/protocol/iap.d.ts +54 -0
  84. package/dist/protocol/iap.d.ts.map +1 -0
  85. package/dist/protocol/iap.js +108 -0
  86. package/dist/protocol/iap.js.map +1 -0
  87. package/dist/protocol/index.d.ts +23 -0
  88. package/dist/protocol/index.d.ts.map +1 -0
  89. package/dist/protocol/index.js +45 -0
  90. package/dist/protocol/index.js.map +1 -0
  91. package/dist/protocol/types.d.ts +332 -0
  92. package/dist/protocol/types.d.ts.map +1 -0
  93. package/dist/protocol/types.js +57 -0
  94. package/dist/protocol/types.js.map +1 -0
  95. package/dist/protocol/utils.d.ts +130 -0
  96. package/dist/protocol/utils.d.ts.map +1 -0
  97. package/dist/protocol/utils.js +292 -0
  98. package/dist/protocol/utils.js.map +1 -0
  99. package/dist/protocol/validators.d.ts +54 -0
  100. package/dist/protocol/validators.d.ts.map +1 -0
  101. package/dist/protocol/validators.js +344 -0
  102. package/dist/protocol/validators.js.map +1 -0
  103. package/dist/security/AuthManager.d.ts +73 -0
  104. package/dist/security/AuthManager.d.ts.map +1 -0
  105. package/dist/security/AuthManager.js +102 -0
  106. package/dist/security/AuthManager.js.map +1 -0
  107. package/dist/security/MessageSanitizer.d.ts +51 -0
  108. package/dist/security/MessageSanitizer.d.ts.map +1 -0
  109. package/dist/security/MessageSanitizer.js +166 -0
  110. package/dist/security/MessageSanitizer.js.map +1 -0
  111. package/dist/security/RateLimiter.d.ts +46 -0
  112. package/dist/security/RateLimiter.d.ts.map +1 -0
  113. package/dist/security/RateLimiter.js +133 -0
  114. package/dist/security/RateLimiter.js.map +1 -0
  115. package/dist/security/SecurityMiddleware.d.ts +88 -0
  116. package/dist/security/SecurityMiddleware.d.ts.map +1 -0
  117. package/dist/security/SecurityMiddleware.js +146 -0
  118. package/dist/security/SecurityMiddleware.js.map +1 -0
  119. package/dist/security/index.d.ts +35 -0
  120. package/dist/security/index.d.ts.map +1 -0
  121. package/dist/security/index.js +42 -0
  122. package/dist/security/index.js.map +1 -0
  123. package/dist/speculative/PredictionEngine.d.ts +99 -0
  124. package/dist/speculative/PredictionEngine.d.ts.map +1 -0
  125. package/dist/speculative/PredictionEngine.js +291 -0
  126. package/dist/speculative/PredictionEngine.js.map +1 -0
  127. package/dist/speculative/SpeculativeCache.d.ts +117 -0
  128. package/dist/speculative/SpeculativeCache.d.ts.map +1 -0
  129. package/dist/speculative/SpeculativeCache.js +292 -0
  130. package/dist/speculative/SpeculativeCache.js.map +1 -0
  131. package/dist/speculative/SpeculativeEngine.d.ts +114 -0
  132. package/dist/speculative/SpeculativeEngine.d.ts.map +1 -0
  133. package/dist/speculative/SpeculativeEngine.js +244 -0
  134. package/dist/speculative/SpeculativeEngine.js.map +1 -0
  135. package/dist/speculative/WorkerPool.d.ts +109 -0
  136. package/dist/speculative/WorkerPool.d.ts.map +1 -0
  137. package/dist/speculative/WorkerPool.js +327 -0
  138. package/dist/speculative/WorkerPool.js.map +1 -0
  139. package/dist/speculative/index.d.ts +10 -0
  140. package/dist/speculative/index.d.ts.map +1 -0
  141. package/dist/speculative/index.js +17 -0
  142. package/dist/speculative/index.js.map +1 -0
  143. package/dist/subconscious/EmbeddingService.d.ts +73 -0
  144. package/dist/subconscious/EmbeddingService.d.ts.map +1 -0
  145. package/dist/subconscious/EmbeddingService.js +196 -0
  146. package/dist/subconscious/EmbeddingService.js.map +1 -0
  147. package/dist/subconscious/SemanticCache.d.ts +82 -0
  148. package/dist/subconscious/SemanticCache.d.ts.map +1 -0
  149. package/dist/subconscious/SemanticCache.js +164 -0
  150. package/dist/subconscious/SemanticCache.js.map +1 -0
  151. package/dist/subconscious/SubconsciousEngine.d.ts +121 -0
  152. package/dist/subconscious/SubconsciousEngine.d.ts.map +1 -0
  153. package/dist/subconscious/SubconsciousEngine.js +241 -0
  154. package/dist/subconscious/SubconsciousEngine.js.map +1 -0
  155. package/dist/subconscious/VectorStore.d.ts +54 -0
  156. package/dist/subconscious/VectorStore.d.ts.map +1 -0
  157. package/dist/subconscious/VectorStore.js +168 -0
  158. package/dist/subconscious/VectorStore.js.map +1 -0
  159. package/dist/subconscious/cache.d.ts +34 -0
  160. package/dist/subconscious/cache.d.ts.map +1 -0
  161. package/dist/subconscious/cache.js +156 -0
  162. package/dist/subconscious/cache.js.map +1 -0
  163. package/dist/subconscious/embeddings.d.ts +25 -0
  164. package/dist/subconscious/embeddings.d.ts.map +1 -0
  165. package/dist/subconscious/embeddings.js +65 -0
  166. package/dist/subconscious/embeddings.js.map +1 -0
  167. package/dist/subconscious/index.d.ts +12 -0
  168. package/dist/subconscious/index.d.ts.map +1 -0
  169. package/dist/subconscious/index.js +19 -0
  170. package/dist/subconscious/index.js.map +1 -0
  171. package/dist/types/index.d.ts +286 -0
  172. package/dist/types/index.d.ts.map +1 -0
  173. package/dist/types/index.js +43 -0
  174. package/dist/types/index.js.map +1 -0
  175. package/dist/utils/logger.d.ts +63 -0
  176. package/dist/utils/logger.d.ts.map +1 -0
  177. package/dist/utils/logger.js +126 -0
  178. package/dist/utils/logger.js.map +1 -0
  179. package/package.json +99 -0
@@ -0,0 +1,264 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AgentRegistry = void 0;
4
+ const events_1 = require("events");
5
+ const types_1 = require("../types");
6
+ /**
7
+ * Dynamic registry for tracking connected agents and their capabilities
8
+ * Maintains agent state, metrics, and capability discovery
9
+ */
10
+ class AgentRegistry extends events_1.EventEmitter {
11
+ constructor() {
12
+ super();
13
+ this.agents = new Map();
14
+ this.capabilityIndex = new Map();
15
+ this.metricsInterval = null;
16
+ this.startMetricsCollection();
17
+ }
18
+ /**
19
+ * Register a new agent
20
+ */
21
+ registerAgent(agentId, connectionId, capabilities, metadata) {
22
+ const now = Date.now();
23
+ // Check if agent is reconnecting
24
+ const existingAgent = this.agents.get(agentId);
25
+ const isReconnection = existingAgent !== undefined;
26
+ const agentInfo = {
27
+ agentId,
28
+ connectionId,
29
+ capabilities,
30
+ status: types_1.AgentStatus.ONLINE,
31
+ registeredAt: isReconnection ? existingAgent.registeredAt : now,
32
+ lastSeen: now,
33
+ metadata: metadata || {},
34
+ metrics: isReconnection ? existingAgent.metrics : {
35
+ tasksCompleted: 0,
36
+ tasksInProgress: 0,
37
+ tasksFailed: 0,
38
+ averageResponseTime: 0,
39
+ totalResponseTime: 0,
40
+ uptime: 0,
41
+ },
42
+ };
43
+ this.agents.set(agentId, agentInfo);
44
+ // Index capabilities for fast lookup
45
+ capabilities.forEach(capability => {
46
+ if (!this.capabilityIndex.has(capability.name)) {
47
+ this.capabilityIndex.set(capability.name, new Set());
48
+ }
49
+ this.capabilityIndex.get(capability.name).add(agentId);
50
+ });
51
+ console.log(`Agent ${isReconnection ? 'reconnected' : 'registered'}: ${agentId} with ${capabilities.length} capabilities`);
52
+ this.emit(isReconnection ? 'agentReconnected' : 'agentRegistered', agentInfo);
53
+ return agentInfo;
54
+ }
55
+ /**
56
+ * Unregister an agent (on disconnect)
57
+ */
58
+ unregisterAgent(agentId) {
59
+ const agent = this.agents.get(agentId);
60
+ if (!agent) {
61
+ return false;
62
+ }
63
+ // Update status to offline instead of removing
64
+ agent.status = types_1.AgentStatus.OFFLINE;
65
+ agent.lastSeen = Date.now();
66
+ // Remove from capability index
67
+ agent.capabilities.forEach(capability => {
68
+ const agentSet = this.capabilityIndex.get(capability.name);
69
+ if (agentSet) {
70
+ agentSet.delete(agentId);
71
+ if (agentSet.size === 0) {
72
+ this.capabilityIndex.delete(capability.name);
73
+ }
74
+ }
75
+ });
76
+ console.log(`Agent unregistered: ${agentId}`);
77
+ this.emit('agentUnregistered', agent);
78
+ return true;
79
+ }
80
+ /**
81
+ * Get agent information
82
+ */
83
+ getAgent(agentId) {
84
+ return this.agents.get(agentId);
85
+ }
86
+ /**
87
+ * Get all registered agents
88
+ */
89
+ getAllAgents() {
90
+ return Array.from(this.agents.values());
91
+ }
92
+ /**
93
+ * Get online agents only
94
+ */
95
+ getOnlineAgents() {
96
+ return Array.from(this.agents.values()).filter(agent => agent.status === types_1.AgentStatus.ONLINE);
97
+ }
98
+ /**
99
+ * Find agents by capability
100
+ */
101
+ findAgentsByCapability(capabilityName) {
102
+ const agentIds = this.capabilityIndex.get(capabilityName);
103
+ if (!agentIds) {
104
+ return [];
105
+ }
106
+ return Array.from(agentIds)
107
+ .map(id => this.agents.get(id))
108
+ .filter((agent) => agent !== undefined && agent.status === types_1.AgentStatus.ONLINE);
109
+ }
110
+ /**
111
+ * Find agents by multiple capabilities (AND logic)
112
+ */
113
+ findAgentsByCapabilities(capabilityNames) {
114
+ if (capabilityNames.length === 0) {
115
+ return [];
116
+ }
117
+ // Get agents with first capability
118
+ const firstCapability = capabilityNames[0];
119
+ let candidateAgents = this.findAgentsByCapability(firstCapability);
120
+ // Filter by remaining capabilities
121
+ for (let i = 1; i < capabilityNames.length; i++) {
122
+ const capability = capabilityNames[i];
123
+ candidateAgents = candidateAgents.filter(agent => agent.capabilities.some(cap => cap.name === capability));
124
+ }
125
+ return candidateAgents;
126
+ }
127
+ /**
128
+ * Find best agent for a task based on capabilities and load
129
+ */
130
+ findBestAgent(requiredCapabilities) {
131
+ const candidates = this.findAgentsByCapabilities(requiredCapabilities);
132
+ if (candidates.length === 0) {
133
+ return null;
134
+ }
135
+ // Sort by load (tasks in progress) and average response time
136
+ candidates.sort((a, b) => {
137
+ const loadDiff = a.metrics.tasksInProgress - b.metrics.tasksInProgress;
138
+ if (loadDiff !== 0)
139
+ return loadDiff;
140
+ return a.metrics.averageResponseTime - b.metrics.averageResponseTime;
141
+ });
142
+ return candidates[0];
143
+ }
144
+ /**
145
+ * Update agent status
146
+ */
147
+ updateAgentStatus(agentId, status) {
148
+ const agent = this.agents.get(agentId);
149
+ if (!agent) {
150
+ return false;
151
+ }
152
+ const oldStatus = agent.status;
153
+ agent.status = status;
154
+ agent.lastSeen = Date.now();
155
+ if (oldStatus !== status) {
156
+ this.emit('agentStatusChanged', { agentId, oldStatus, newStatus: status });
157
+ }
158
+ return true;
159
+ }
160
+ /**
161
+ * Update agent metrics
162
+ */
163
+ updateAgentMetrics(agentId, metrics) {
164
+ const agent = this.agents.get(agentId);
165
+ if (!agent) {
166
+ return false;
167
+ }
168
+ agent.metrics = { ...agent.metrics, ...metrics };
169
+ agent.lastSeen = Date.now();
170
+ // Recalculate average response time if needed
171
+ if (metrics.totalResponseTime !== undefined && agent.metrics.tasksCompleted > 0) {
172
+ agent.metrics.averageResponseTime =
173
+ agent.metrics.totalResponseTime / agent.metrics.tasksCompleted;
174
+ }
175
+ return true;
176
+ }
177
+ /**
178
+ * Record task start for an agent
179
+ */
180
+ recordTaskStart(agentId) {
181
+ const agent = this.agents.get(agentId);
182
+ if (!agent) {
183
+ return false;
184
+ }
185
+ agent.metrics.tasksInProgress++;
186
+ agent.lastSeen = Date.now();
187
+ return true;
188
+ }
189
+ /**
190
+ * Record task completion for an agent
191
+ */
192
+ recordTaskCompletion(agentId, responseTime, success) {
193
+ const agent = this.agents.get(agentId);
194
+ if (!agent) {
195
+ return false;
196
+ }
197
+ agent.metrics.tasksInProgress = Math.max(0, agent.metrics.tasksInProgress - 1);
198
+ if (success) {
199
+ agent.metrics.tasksCompleted++;
200
+ agent.metrics.totalResponseTime += responseTime;
201
+ agent.metrics.averageResponseTime =
202
+ agent.metrics.totalResponseTime / agent.metrics.tasksCompleted;
203
+ }
204
+ else {
205
+ agent.metrics.tasksFailed++;
206
+ }
207
+ agent.lastSeen = Date.now();
208
+ return true;
209
+ }
210
+ /**
211
+ * Get all available capabilities across all agents
212
+ */
213
+ getAllCapabilities() {
214
+ return Array.from(this.capabilityIndex.keys());
215
+ }
216
+ /**
217
+ * Get registry statistics
218
+ */
219
+ getStats() {
220
+ const agents = Array.from(this.agents.values());
221
+ const onlineAgents = agents.filter(a => a.status === types_1.AgentStatus.ONLINE);
222
+ return {
223
+ totalAgents: agents.length,
224
+ onlineAgents: onlineAgents.length,
225
+ offlineAgents: agents.length - onlineAgents.length,
226
+ totalCapabilities: this.capabilityIndex.size,
227
+ totalTasksInProgress: agents.reduce((sum, a) => sum + a.metrics.tasksInProgress, 0),
228
+ totalTasksCompleted: agents.reduce((sum, a) => sum + a.metrics.tasksCompleted, 0),
229
+ totalTasksFailed: agents.reduce((sum, a) => sum + a.metrics.tasksFailed, 0),
230
+ };
231
+ }
232
+ /**
233
+ * Start periodic metrics collection
234
+ */
235
+ startMetricsCollection() {
236
+ this.metricsInterval = setInterval(() => {
237
+ const now = Date.now();
238
+ this.agents.forEach(agent => {
239
+ if (agent.status === types_1.AgentStatus.ONLINE) {
240
+ agent.metrics.uptime = now - agent.registeredAt;
241
+ }
242
+ });
243
+ this.emit('metricsUpdated', this.getStats());
244
+ }, 10000); // Update every 10 seconds
245
+ }
246
+ /**
247
+ * Stop metrics collection
248
+ */
249
+ stop() {
250
+ if (this.metricsInterval) {
251
+ clearInterval(this.metricsInterval);
252
+ this.metricsInterval = null;
253
+ }
254
+ }
255
+ /**
256
+ * Clear all agents (for testing/reset)
257
+ */
258
+ clear() {
259
+ this.agents.clear();
260
+ this.capabilityIndex.clear();
261
+ }
262
+ }
263
+ exports.AgentRegistry = AgentRegistry;
264
+ //# sourceMappingURL=AgentRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentRegistry.js","sourceRoot":"","sources":["../../src/core/AgentRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { WebSocketServer } from './WebSocketServer';
2
+ import { OrchestrationEngine } from './OrchestrationEngine';
3
+ import { IAPMessage } from '../types';
4
+ /**
5
+ * Dashboard Broadcaster
6
+ * Handles real-time metrics and state broadcasting to dashboard clients
7
+ */
8
+ export declare class DashboardBroadcaster {
9
+ private wsServer;
10
+ private orchestrationEngine;
11
+ private broadcastInterval;
12
+ private stateHistory;
13
+ constructor(wsServer: WebSocketServer, orchestrationEngine: OrchestrationEngine);
14
+ /**
15
+ * Start broadcasting metrics to dashboard clients
16
+ */
17
+ start(intervalMs?: number): void;
18
+ /**
19
+ * Stop broadcasting
20
+ */
21
+ stop(): void;
22
+ /**
23
+ * Setup event listeners for real-time state updates
24
+ */
25
+ private setupEventListeners;
26
+ /**
27
+ * Broadcast current metrics to all dashboard clients
28
+ */
29
+ private broadcastMetrics;
30
+ /**
31
+ * Broadcast agent connected event
32
+ */
33
+ private broadcastAgentConnected;
34
+ /**
35
+ * Broadcast agent disconnected event
36
+ */
37
+ private broadcastAgentDisconnected;
38
+ /**
39
+ * Capture state event for time-travel debugging
40
+ */
41
+ private captureStateEvent;
42
+ /**
43
+ * Broadcast message to all dashboard clients
44
+ */
45
+ private broadcastToDashboards;
46
+ /**
47
+ * Handle dashboard-specific requests
48
+ */
49
+ handleDashboardRequest(connectionId: string, message: IAPMessage): void;
50
+ /**
51
+ * Send current metrics to specific connection
52
+ */
53
+ private sendMetrics;
54
+ /**
55
+ * Send agents list to specific connection
56
+ */
57
+ private sendAgentsList;
58
+ /**
59
+ * Send state history to specific connection
60
+ */
61
+ private sendStateHistory;
62
+ /**
63
+ * Get state history
64
+ */
65
+ getStateHistory(): any[];
66
+ }
67
+ //# sourceMappingURL=DashboardBroadcaster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardBroadcaster.d.ts","sourceRoot":"","sources":["../../src/core/DashboardBroadcaster.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAe,UAAU,EAAE,MAAM,UAAU,CAAC;AAMnD;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,YAAY,CAAa;gBAErB,QAAQ,EAAE,eAAe,EAAE,mBAAmB,EAAE,mBAAmB;IAK/E;;OAEG;IACI,KAAK,CAAC,UAAU,GAAE,MAAa,GAAG,IAAI;IAW7C;;OAEG;IACI,IAAI,IAAI,IAAI;IAQnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA8BxB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAqB/B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAiBlC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqDzB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAW7B;;OAEG;IACI,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI;IAsB9E;;OAEG;IACH,OAAO,CAAC,WAAW;IAkBnB;;OAEG;IACH,OAAO,CAAC,cAAc;IAwBtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;OAEG;IACI,eAAe,IAAI,GAAG,EAAE;CAGhC"}
@@ -0,0 +1,264 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DashboardBroadcaster = void 0;
4
+ const types_1 = require("../types");
5
+ const uuid_1 = require("uuid");
6
+ const logger_1 = require("../utils/logger");
7
+ const logger = (0, logger_1.createLogger)('DashboardBroadcaster');
8
+ /**
9
+ * Dashboard Broadcaster
10
+ * Handles real-time metrics and state broadcasting to dashboard clients
11
+ */
12
+ class DashboardBroadcaster {
13
+ constructor(wsServer, orchestrationEngine) {
14
+ this.broadcastInterval = null;
15
+ this.stateHistory = [];
16
+ this.wsServer = wsServer;
17
+ this.orchestrationEngine = orchestrationEngine;
18
+ }
19
+ /**
20
+ * Start broadcasting metrics to dashboard clients
21
+ */
22
+ start(intervalMs = 2000) {
23
+ logger.info('Starting dashboard broadcaster', { intervalMs });
24
+ this.broadcastInterval = setInterval(() => {
25
+ this.broadcastMetrics();
26
+ }, intervalMs);
27
+ // Setup event listeners for real-time updates
28
+ this.setupEventListeners();
29
+ }
30
+ /**
31
+ * Stop broadcasting
32
+ */
33
+ stop() {
34
+ if (this.broadcastInterval) {
35
+ clearInterval(this.broadcastInterval);
36
+ this.broadcastInterval = null;
37
+ logger.info('Dashboard broadcaster stopped');
38
+ }
39
+ }
40
+ /**
41
+ * Setup event listeners for real-time state updates
42
+ */
43
+ setupEventListeners() {
44
+ // Listen for connection events
45
+ this.wsServer.on('connection', (connection) => {
46
+ this.broadcastAgentConnected(connection);
47
+ });
48
+ // Listen for disconnection events
49
+ this.wsServer.on('disconnection', (data) => {
50
+ this.broadcastAgentDisconnected(data.agentId || data.connectionId);
51
+ });
52
+ // Listen for messages to capture state events
53
+ this.wsServer.on('message', (data) => {
54
+ this.captureStateEvent(data.message);
55
+ });
56
+ }
57
+ /**
58
+ * Broadcast current metrics to all dashboard clients
59
+ */
60
+ broadcastMetrics() {
61
+ const metrics = this.orchestrationEngine.getMetrics();
62
+ const connections = this.wsServer.getConnections();
63
+ // Find dashboard clients (connections without agentId or with 'dashboard' in name)
64
+ const dashboardClients = connections.filter(conn => !conn.agentId || conn.agentId.includes('dashboard'));
65
+ if (dashboardClients.length === 0) {
66
+ return;
67
+ }
68
+ const message = {
69
+ type: 'METRICS_UPDATE',
70
+ messageId: (0, uuid_1.v4)(),
71
+ timestamp: Date.now(),
72
+ payload: {
73
+ ...metrics,
74
+ hitRate: metrics.totalRequests > 0
75
+ ? `${((metrics.cacheHits / metrics.totalRequests) * 100).toFixed(1)}%`
76
+ : '0%',
77
+ },
78
+ };
79
+ dashboardClients.forEach(client => {
80
+ this.wsServer.sendToConnection(client.id, message);
81
+ });
82
+ }
83
+ /**
84
+ * Broadcast agent connected event
85
+ */
86
+ broadcastAgentConnected(connection) {
87
+ if (!connection.agentId || connection.agentId.includes('dashboard')) {
88
+ return;
89
+ }
90
+ const message = {
91
+ type: 'AGENT_CONNECTED',
92
+ messageId: (0, uuid_1.v4)(),
93
+ timestamp: Date.now(),
94
+ payload: {
95
+ id: connection.id,
96
+ name: connection.agentId,
97
+ capabilities: connection.capabilities,
98
+ status: 'idle',
99
+ connectedAt: connection.connectedAt,
100
+ },
101
+ };
102
+ this.broadcastToDashboards(message);
103
+ }
104
+ /**
105
+ * Broadcast agent disconnected event
106
+ */
107
+ broadcastAgentDisconnected(agentId) {
108
+ if (!agentId || agentId.includes('dashboard')) {
109
+ return;
110
+ }
111
+ const message = {
112
+ type: 'AGENT_DISCONNECTED',
113
+ messageId: (0, uuid_1.v4)(),
114
+ timestamp: Date.now(),
115
+ payload: {
116
+ agentId,
117
+ },
118
+ };
119
+ this.broadcastToDashboards(message);
120
+ }
121
+ /**
122
+ * Capture state event for time-travel debugging
123
+ */
124
+ captureStateEvent(message) {
125
+ if (!message || !message.type) {
126
+ return;
127
+ }
128
+ // Only capture relevant events
129
+ const relevantTypes = [
130
+ types_1.MessageType.TASK_REQUEST,
131
+ types_1.MessageType.TASK_RESPONSE,
132
+ 'CACHE_HIT',
133
+ 'CACHE_MISS',
134
+ ];
135
+ if (!relevantTypes.includes(message.type)) {
136
+ return;
137
+ }
138
+ const stateEvent = {
139
+ id: (0, uuid_1.v4)(),
140
+ timestamp: Date.now(),
141
+ type: message.type,
142
+ agentId: message.payload?.agentId,
143
+ data: message.payload,
144
+ snapshot: {
145
+ message,
146
+ metrics: this.orchestrationEngine.getMetrics(),
147
+ agents: this.wsServer.getConnections()
148
+ .filter(c => c.agentId && !c.agentId.includes('dashboard'))
149
+ .map(c => ({
150
+ id: c.id,
151
+ agentId: c.agentId,
152
+ capabilities: c.capabilities,
153
+ })),
154
+ },
155
+ };
156
+ // Add to history (keep last 100 events)
157
+ this.stateHistory.unshift(stateEvent);
158
+ if (this.stateHistory.length > 100) {
159
+ this.stateHistory.pop();
160
+ }
161
+ // Broadcast to dashboards
162
+ const dashboardMessage = {
163
+ type: 'STATE_EVENT',
164
+ messageId: (0, uuid_1.v4)(),
165
+ timestamp: Date.now(),
166
+ payload: stateEvent,
167
+ };
168
+ this.broadcastToDashboards(dashboardMessage);
169
+ }
170
+ /**
171
+ * Broadcast message to all dashboard clients
172
+ */
173
+ broadcastToDashboards(message) {
174
+ const connections = this.wsServer.getConnections();
175
+ const dashboardClients = connections.filter(conn => !conn.agentId || conn.agentId.includes('dashboard'));
176
+ dashboardClients.forEach(client => {
177
+ this.wsServer.sendToConnection(client.id, message);
178
+ });
179
+ }
180
+ /**
181
+ * Handle dashboard-specific requests
182
+ */
183
+ handleDashboardRequest(connectionId, message) {
184
+ // Dashboard-specific message types (not part of IAP enum)
185
+ const messageType = message.type;
186
+ switch (messageType) {
187
+ case 'GET_METRICS':
188
+ this.sendMetrics(connectionId);
189
+ break;
190
+ case 'GET_AGENTS':
191
+ this.sendAgentsList(connectionId);
192
+ break;
193
+ case 'GET_STATE_HISTORY':
194
+ this.sendStateHistory(connectionId);
195
+ break;
196
+ default:
197
+ logger.warn('Unknown dashboard request', { type: message.type });
198
+ }
199
+ }
200
+ /**
201
+ * Send current metrics to specific connection
202
+ */
203
+ sendMetrics(connectionId) {
204
+ const metrics = this.orchestrationEngine.getMetrics();
205
+ const message = {
206
+ type: 'METRICS_UPDATE',
207
+ messageId: (0, uuid_1.v4)(),
208
+ timestamp: Date.now(),
209
+ payload: {
210
+ ...metrics,
211
+ hitRate: metrics.totalRequests > 0
212
+ ? `${((metrics.cacheHits / metrics.totalRequests) * 100).toFixed(1)}%`
213
+ : '0%',
214
+ },
215
+ };
216
+ this.wsServer.sendToConnection(connectionId, message);
217
+ }
218
+ /**
219
+ * Send agents list to specific connection
220
+ */
221
+ sendAgentsList(connectionId) {
222
+ const connections = this.wsServer.getConnections();
223
+ const agents = connections
224
+ .filter(conn => conn.agentId && !conn.agentId.includes('dashboard'))
225
+ .map(conn => ({
226
+ id: conn.id,
227
+ name: conn.agentId,
228
+ capabilities: conn.capabilities,
229
+ status: 'idle',
230
+ connectedAt: conn.connectedAt,
231
+ }));
232
+ const message = {
233
+ type: 'AGENTS_LIST',
234
+ messageId: (0, uuid_1.v4)(),
235
+ timestamp: Date.now(),
236
+ payload: {
237
+ agents,
238
+ },
239
+ };
240
+ this.wsServer.sendToConnection(connectionId, message);
241
+ }
242
+ /**
243
+ * Send state history to specific connection
244
+ */
245
+ sendStateHistory(connectionId) {
246
+ const message = {
247
+ type: 'STATE_HISTORY',
248
+ messageId: (0, uuid_1.v4)(),
249
+ timestamp: Date.now(),
250
+ payload: {
251
+ events: this.stateHistory,
252
+ },
253
+ };
254
+ this.wsServer.sendToConnection(connectionId, message);
255
+ }
256
+ /**
257
+ * Get state history
258
+ */
259
+ getStateHistory() {
260
+ return this.stateHistory;
261
+ }
262
+ }
263
+ exports.DashboardBroadcaster = DashboardBroadcaster;
264
+ //# sourceMappingURL=DashboardBroadcaster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardBroadcaster.js","sourceRoot":"","sources":["../../src/core/DashboardBroadcaster.ts"],"names":[],"mappings":"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"}