agentic-qe 1.8.4 → 1.9.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 (212) hide show
  1. package/.claude/skills/agentic-jujutsu/SKILL.md +645 -0
  2. package/CHANGELOG.md +375 -0
  3. package/README.md +86 -18
  4. package/dist/App.d.ts +5 -0
  5. package/dist/App.d.ts.map +1 -0
  6. package/dist/App.js +15 -0
  7. package/dist/App.js.map +1 -0
  8. package/dist/cli/commands/constitution.d.ts +34 -0
  9. package/dist/cli/commands/constitution.d.ts.map +1 -0
  10. package/dist/cli/commands/constitution.js +679 -0
  11. package/dist/cli/commands/constitution.js.map +1 -0
  12. package/dist/cli/commands/init.d.ts +8 -75
  13. package/dist/cli/commands/init.d.ts.map +1 -1
  14. package/dist/cli/commands/init.js +22 -2292
  15. package/dist/cli/commands/init.js.map +1 -1
  16. package/dist/cli/commands/telemetry.d.ts +36 -0
  17. package/dist/cli/commands/telemetry.d.ts.map +1 -0
  18. package/dist/cli/commands/telemetry.js +364 -0
  19. package/dist/cli/commands/telemetry.js.map +1 -0
  20. package/dist/cli/index.js +66 -0
  21. package/dist/cli/index.js.map +1 -1
  22. package/dist/cli/init/agents.d.ts +22 -0
  23. package/dist/cli/init/agents.d.ts.map +1 -0
  24. package/dist/cli/init/agents.js +522 -0
  25. package/dist/cli/init/agents.js.map +1 -0
  26. package/dist/cli/init/bash-wrapper.d.ts +14 -0
  27. package/dist/cli/init/bash-wrapper.d.ts.map +1 -0
  28. package/dist/cli/init/bash-wrapper.js +47 -0
  29. package/dist/cli/init/bash-wrapper.js.map +1 -0
  30. package/dist/cli/init/claude-config.d.ts +24 -0
  31. package/dist/cli/init/claude-config.d.ts.map +1 -0
  32. package/dist/cli/init/claude-config.js +275 -0
  33. package/dist/cli/init/claude-config.js.map +1 -0
  34. package/dist/cli/init/claude-md.d.ts +19 -0
  35. package/dist/cli/init/claude-md.d.ts.map +1 -0
  36. package/dist/cli/init/claude-md.js +153 -0
  37. package/dist/cli/init/claude-md.js.map +1 -0
  38. package/dist/cli/init/commands.d.ts +6 -0
  39. package/dist/cli/init/commands.d.ts.map +1 -0
  40. package/dist/cli/init/commands.js +83 -0
  41. package/dist/cli/init/commands.js.map +1 -0
  42. package/dist/cli/init/database-init.d.ts +15 -0
  43. package/dist/cli/init/database-init.d.ts.map +1 -0
  44. package/dist/cli/init/database-init.js +203 -0
  45. package/dist/cli/init/database-init.js.map +1 -0
  46. package/dist/cli/init/directory-structure.d.ts +14 -0
  47. package/dist/cli/init/directory-structure.d.ts.map +1 -0
  48. package/dist/cli/init/directory-structure.js +107 -0
  49. package/dist/cli/init/directory-structure.js.map +1 -0
  50. package/dist/cli/init/documentation.d.ts +14 -0
  51. package/dist/cli/init/documentation.d.ts.map +1 -0
  52. package/dist/cli/init/documentation.js +195 -0
  53. package/dist/cli/init/documentation.js.map +1 -0
  54. package/dist/cli/init/fleet-config.d.ts +34 -0
  55. package/dist/cli/init/fleet-config.d.ts.map +1 -0
  56. package/dist/cli/init/fleet-config.js +269 -0
  57. package/dist/cli/init/fleet-config.js.map +1 -0
  58. package/dist/cli/init/helpers.d.ts +6 -0
  59. package/dist/cli/init/helpers.d.ts.map +1 -0
  60. package/dist/cli/init/helpers.js +94 -0
  61. package/dist/cli/init/helpers.js.map +1 -0
  62. package/dist/cli/init/index.d.ts +32 -0
  63. package/dist/cli/init/index.d.ts.map +1 -0
  64. package/dist/cli/init/index.js +294 -0
  65. package/dist/cli/init/index.js.map +1 -0
  66. package/dist/cli/init/skills.d.ts +6 -0
  67. package/dist/cli/init/skills.d.ts.map +1 -0
  68. package/dist/cli/init/skills.js +138 -0
  69. package/dist/cli/init/skills.js.map +1 -0
  70. package/dist/cli/init/utils/file-utils.d.ts +74 -0
  71. package/dist/cli/init/utils/file-utils.d.ts.map +1 -0
  72. package/dist/cli/init/utils/file-utils.js +187 -0
  73. package/dist/cli/init/utils/file-utils.js.map +1 -0
  74. package/dist/cli/init/utils/index.d.ts +18 -0
  75. package/dist/cli/init/utils/index.d.ts.map +1 -0
  76. package/dist/cli/init/utils/index.js +48 -0
  77. package/dist/cli/init/utils/index.js.map +1 -0
  78. package/dist/cli/init/utils/log-utils.d.ts +47 -0
  79. package/dist/cli/init/utils/log-utils.d.ts.map +1 -0
  80. package/dist/cli/init/utils/log-utils.js +68 -0
  81. package/dist/cli/init/utils/log-utils.js.map +1 -0
  82. package/dist/cli/init/utils/path-utils.d.ts +91 -0
  83. package/dist/cli/init/utils/path-utils.d.ts.map +1 -0
  84. package/dist/cli/init/utils/path-utils.js +208 -0
  85. package/dist/cli/init/utils/path-utils.js.map +1 -0
  86. package/dist/cli/init/utils/validation-utils.d.ts +44 -0
  87. package/dist/cli/init/utils/validation-utils.d.ts.map +1 -0
  88. package/dist/cli/init/utils/validation-utils.js +68 -0
  89. package/dist/cli/init/utils/validation-utils.js.map +1 -0
  90. package/dist/cli/init/utils.d.ts +183 -0
  91. package/dist/cli/init/utils.d.ts.map +1 -0
  92. package/dist/cli/init/utils.js +354 -0
  93. package/dist/cli/init/utils.js.map +1 -0
  94. package/dist/components/Dashboard/Dashboard.d.ts +4 -0
  95. package/dist/components/Dashboard/Dashboard.d.ts.map +1 -0
  96. package/dist/components/Dashboard/Dashboard.js +148 -0
  97. package/dist/components/Dashboard/Dashboard.js.map +1 -0
  98. package/dist/components/Dashboard/DashboardHeader.d.ts +4 -0
  99. package/dist/components/Dashboard/DashboardHeader.d.ts.map +1 -0
  100. package/dist/components/Dashboard/DashboardHeader.js +138 -0
  101. package/dist/components/Dashboard/DashboardHeader.js.map +1 -0
  102. package/dist/constitution/evaluators/ast-evaluator.d.ts +42 -0
  103. package/dist/constitution/evaluators/ast-evaluator.d.ts.map +1 -0
  104. package/dist/constitution/evaluators/ast-evaluator.js +303 -0
  105. package/dist/constitution/evaluators/ast-evaluator.js.map +1 -0
  106. package/dist/constitution/evaluators/base.d.ts +144 -0
  107. package/dist/constitution/evaluators/base.d.ts.map +1 -0
  108. package/dist/constitution/evaluators/base.js +144 -0
  109. package/dist/constitution/evaluators/base.js.map +1 -0
  110. package/dist/constitution/evaluators/index.d.ts +19 -0
  111. package/dist/constitution/evaluators/index.d.ts.map +1 -0
  112. package/dist/constitution/evaluators/index.js +56 -0
  113. package/dist/constitution/evaluators/index.js.map +1 -0
  114. package/dist/constitution/evaluators/metric-evaluator.d.ts +59 -0
  115. package/dist/constitution/evaluators/metric-evaluator.d.ts.map +1 -0
  116. package/dist/constitution/evaluators/metric-evaluator.js +195 -0
  117. package/dist/constitution/evaluators/metric-evaluator.js.map +1 -0
  118. package/dist/constitution/evaluators/pattern-evaluator.d.ts +66 -0
  119. package/dist/constitution/evaluators/pattern-evaluator.d.ts.map +1 -0
  120. package/dist/constitution/evaluators/pattern-evaluator.js +221 -0
  121. package/dist/constitution/evaluators/pattern-evaluator.js.map +1 -0
  122. package/dist/constitution/evaluators/semantic-evaluator.d.ts +68 -0
  123. package/dist/constitution/evaluators/semantic-evaluator.d.ts.map +1 -0
  124. package/dist/constitution/evaluators/semantic-evaluator.js +250 -0
  125. package/dist/constitution/evaluators/semantic-evaluator.js.map +1 -0
  126. package/dist/contexts/DashboardContext.d.ts +41 -0
  127. package/dist/contexts/DashboardContext.d.ts.map +1 -0
  128. package/dist/contexts/DashboardContext.js +187 -0
  129. package/dist/contexts/DashboardContext.js.map +1 -0
  130. package/dist/core/memory/SwarmMemoryManager.d.ts +40 -0
  131. package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
  132. package/dist/core/memory/SwarmMemoryManager.js +279 -120
  133. package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
  134. package/dist/hooks/useKeyboardShortcuts.d.ts +12 -0
  135. package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  136. package/dist/hooks/useKeyboardShortcuts.js +69 -0
  137. package/dist/hooks/useKeyboardShortcuts.js.map +1 -0
  138. package/dist/telemetry/instrumentation/agent.d.ts +158 -0
  139. package/dist/telemetry/instrumentation/agent.d.ts.map +1 -0
  140. package/dist/telemetry/instrumentation/agent.js +372 -0
  141. package/dist/telemetry/instrumentation/agent.js.map +1 -0
  142. package/dist/telemetry/instrumentation/index.d.ts +24 -0
  143. package/dist/telemetry/instrumentation/index.d.ts.map +1 -0
  144. package/dist/telemetry/instrumentation/index.js +54 -0
  145. package/dist/telemetry/instrumentation/index.js.map +1 -0
  146. package/dist/telemetry/instrumentation/memory.d.ts +313 -0
  147. package/dist/telemetry/instrumentation/memory.d.ts.map +1 -0
  148. package/dist/telemetry/instrumentation/memory.js +552 -0
  149. package/dist/telemetry/instrumentation/memory.js.map +1 -0
  150. package/dist/telemetry/instrumentation/task.d.ts +146 -0
  151. package/dist/telemetry/instrumentation/task.d.ts.map +1 -0
  152. package/dist/telemetry/instrumentation/task.js +305 -0
  153. package/dist/telemetry/instrumentation/task.js.map +1 -0
  154. package/dist/telemetry/metrics/collectors/cost.d.ts +246 -0
  155. package/dist/telemetry/metrics/collectors/cost.d.ts.map +1 -0
  156. package/dist/telemetry/metrics/collectors/cost.js +526 -0
  157. package/dist/telemetry/metrics/collectors/cost.js.map +1 -0
  158. package/dist/telemetry/metrics/collectors/pricing-config.d.ts +87 -0
  159. package/dist/telemetry/metrics/collectors/pricing-config.d.ts.map +1 -0
  160. package/dist/telemetry/metrics/collectors/pricing-config.js +207 -0
  161. package/dist/telemetry/metrics/collectors/pricing-config.js.map +1 -0
  162. package/dist/telemetry/metrics/index.d.ts +4 -1
  163. package/dist/telemetry/metrics/index.d.ts.map +1 -1
  164. package/dist/telemetry/metrics/index.js +18 -2
  165. package/dist/telemetry/metrics/index.js.map +1 -1
  166. package/dist/telemetry/types.d.ts +1 -1
  167. package/dist/telemetry/types.d.ts.map +1 -1
  168. package/dist/visualization/api/RestEndpoints.d.ts +136 -0
  169. package/dist/visualization/api/RestEndpoints.d.ts.map +1 -0
  170. package/dist/visualization/api/RestEndpoints.js +428 -0
  171. package/dist/visualization/api/RestEndpoints.js.map +1 -0
  172. package/dist/visualization/api/WebSocketServer.d.ts +165 -0
  173. package/dist/visualization/api/WebSocketServer.d.ts.map +1 -0
  174. package/dist/visualization/api/WebSocketServer.js +518 -0
  175. package/dist/visualization/api/WebSocketServer.js.map +1 -0
  176. package/dist/visualization/core/DataTransformer.d.ts +89 -0
  177. package/dist/visualization/core/DataTransformer.d.ts.map +1 -0
  178. package/dist/visualization/core/DataTransformer.js +478 -0
  179. package/dist/visualization/core/DataTransformer.js.map +1 -0
  180. package/dist/visualization/index.d.ts +92 -0
  181. package/dist/visualization/index.d.ts.map +1 -0
  182. package/dist/visualization/index.js +121 -0
  183. package/dist/visualization/index.js.map +1 -0
  184. package/dist/visualization/types.d.ts +148 -0
  185. package/dist/visualization/types.d.ts.map +1 -0
  186. package/dist/visualization/types.js +7 -0
  187. package/dist/visualization/types.js.map +1 -0
  188. package/dist/voting/consensus.d.ts +87 -0
  189. package/dist/voting/consensus.d.ts.map +1 -0
  190. package/dist/voting/consensus.js +568 -0
  191. package/dist/voting/consensus.js.map +1 -0
  192. package/dist/voting/index.d.ts +12 -0
  193. package/dist/voting/index.d.ts.map +1 -0
  194. package/dist/voting/index.js +36 -0
  195. package/dist/voting/index.js.map +1 -0
  196. package/dist/voting/orchestrator.d.ts +65 -0
  197. package/dist/voting/orchestrator.d.ts.map +1 -0
  198. package/dist/voting/orchestrator.js +306 -0
  199. package/dist/voting/orchestrator.js.map +1 -0
  200. package/dist/voting/panel-assembly.d.ts +54 -0
  201. package/dist/voting/panel-assembly.d.ts.map +1 -0
  202. package/dist/voting/panel-assembly.js +192 -0
  203. package/dist/voting/panel-assembly.js.map +1 -0
  204. package/dist/voting/protocol.d.ts +119 -0
  205. package/dist/voting/protocol.d.ts.map +1 -0
  206. package/dist/voting/protocol.js +18 -0
  207. package/dist/voting/protocol.js.map +1 -0
  208. package/dist/voting/types.d.ts +125 -0
  209. package/dist/voting/types.d.ts.map +1 -0
  210. package/dist/voting/types.js +7 -0
  211. package/dist/voting/types.js.map +1 -0
  212. package/package.json +27 -2
@@ -0,0 +1,518 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview WebSocket server for real-time event streaming
4
+ * @module visualization/api/WebSocketServer
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.WebSocketServer = void 0;
41
+ const events_1 = require("events");
42
+ const DataTransformer_1 = require("../core/DataTransformer");
43
+ const http = __importStar(require("http"));
44
+ const ws_1 = require("ws");
45
+ /**
46
+ * WebSocket server for real-time visualization event streaming
47
+ *
48
+ * Features:
49
+ * - Real-time event streaming with <500ms latency
50
+ * - Client subscription management with filtering
51
+ * - Backpressure handling for high-throughput scenarios
52
+ * - Automatic heartbeat and connection management
53
+ * - Message types: event, reasoning, metrics, heartbeat
54
+ *
55
+ * @example
56
+ * ```typescript
57
+ * const wsServer = new WebSocketServer(eventStore, reasoningStore, {
58
+ * port: 8080,
59
+ * heartbeatInterval: 30000,
60
+ * maxBacklogSize: 1000
61
+ * });
62
+ *
63
+ * await wsServer.start();
64
+ *
65
+ * // Broadcast event to subscribed clients
66
+ * wsServer.broadcastEvent({
67
+ * type: 'event',
68
+ * timestamp: new Date().toISOString(),
69
+ * data: { agent_id: 'test-gen', event_type: 'test_generated' }
70
+ * });
71
+ * ```
72
+ */
73
+ class WebSocketServer extends events_1.EventEmitter {
74
+ constructor(eventStore, reasoningStore, config = {}) {
75
+ super();
76
+ this.eventStore = eventStore;
77
+ this.reasoningStore = reasoningStore;
78
+ this.transformer = new DataTransformer_1.DataTransformer(eventStore, reasoningStore);
79
+ this.config = { ...WebSocketServer.DEFAULT_CONFIG, ...config };
80
+ this.clients = new Map();
81
+ this.messageQueue = new Map();
82
+ this.isRunning = false;
83
+ }
84
+ /**
85
+ * Start the WebSocket server
86
+ */
87
+ async start() {
88
+ if (this.isRunning) {
89
+ throw new Error('WebSocket server is already running');
90
+ }
91
+ return new Promise((resolve, reject) => {
92
+ try {
93
+ // Create HTTP server if not provided
94
+ this.httpServer = this.config.server || http.createServer();
95
+ // Create WebSocket server
96
+ this.wss = new ws_1.WebSocketServer({
97
+ server: this.httpServer,
98
+ perMessageDeflate: this.config.compression,
99
+ });
100
+ // Handle WebSocket connections
101
+ this.wss.on('connection', (socket, req) => {
102
+ this.handleConnection(socket, req);
103
+ });
104
+ // Handle WebSocket server errors
105
+ this.wss.on('error', (error) => {
106
+ this.emit('error', { error: error.message, source: 'wss' });
107
+ });
108
+ // Start HTTP server if we created it
109
+ if (!this.config.server) {
110
+ this.httpServer.listen(this.config.port, () => {
111
+ console.log(`WebSocket server listening on port ${this.config.port}`);
112
+ this.startHeartbeat();
113
+ this.isRunning = true;
114
+ this.emit('started', { port: this.config.port });
115
+ resolve();
116
+ });
117
+ this.httpServer.on('error', (error) => {
118
+ this.emit('error', { error: error.message, source: 'http' });
119
+ reject(error);
120
+ });
121
+ }
122
+ else {
123
+ // Server already listening, just start heartbeat
124
+ this.startHeartbeat();
125
+ this.isRunning = true;
126
+ this.emit('started', { port: this.config.port });
127
+ resolve();
128
+ }
129
+ }
130
+ catch (error) {
131
+ reject(error);
132
+ }
133
+ });
134
+ }
135
+ /**
136
+ * Stop the WebSocket server
137
+ */
138
+ async stop() {
139
+ if (!this.isRunning) {
140
+ return;
141
+ }
142
+ this.stopHeartbeat();
143
+ // Close all client connections
144
+ for (const client of this.clients.values()) {
145
+ this.disconnectClient(client.id, 'Server shutting down');
146
+ }
147
+ // Close WebSocket server
148
+ return new Promise((resolve) => {
149
+ if (this.wss) {
150
+ this.wss.close(() => {
151
+ // Close HTTP server if we created it
152
+ if (this.httpServer && !this.config.server) {
153
+ this.httpServer.close(() => {
154
+ this.isRunning = false;
155
+ this.emit('stopped');
156
+ resolve();
157
+ });
158
+ }
159
+ else {
160
+ this.isRunning = false;
161
+ this.emit('stopped');
162
+ resolve();
163
+ }
164
+ });
165
+ }
166
+ else {
167
+ this.isRunning = false;
168
+ this.emit('stopped');
169
+ resolve();
170
+ }
171
+ });
172
+ }
173
+ /**
174
+ * Handle new WebSocket connection
175
+ */
176
+ handleConnection(socket, request) {
177
+ const clientId = this.generateClientId();
178
+ const client = {
179
+ id: clientId,
180
+ socket,
181
+ subscriptions: this.parseSubscriptionOptions(request.url),
182
+ lastHeartbeat: Date.now(),
183
+ };
184
+ this.clients.set(clientId, client);
185
+ this.messageQueue.set(clientId, []);
186
+ // Setup WebSocket event handlers
187
+ socket.on('message', (data) => {
188
+ try {
189
+ this.handleMessage(clientId, data);
190
+ }
191
+ catch (error) {
192
+ this.emit('error', { clientId, error, source: 'message_handler' });
193
+ }
194
+ });
195
+ socket.on('close', () => {
196
+ this.handleDisconnect(clientId);
197
+ });
198
+ socket.on('error', (error) => {
199
+ this.handleError(clientId, error);
200
+ });
201
+ socket.on('pong', () => {
202
+ this.handlePong(clientId);
203
+ });
204
+ this.emit('client_connected', { clientId, subscriptions: client.subscriptions });
205
+ // Send initial data based on subscriptions
206
+ this.sendInitialData(client);
207
+ }
208
+ /**
209
+ * Send initial data to newly connected client
210
+ */
211
+ sendInitialData(client) {
212
+ const { session_id, agent_id, since } = client.subscriptions;
213
+ // Send recent events
214
+ if (session_id) {
215
+ const events = this.eventStore.getEventsBySession(session_id);
216
+ const filteredEvents = since
217
+ ? events.filter(e => e.timestamp >= since)
218
+ : events.slice(-50); // Last 50 events
219
+ for (const event of filteredEvents) {
220
+ this.sendMessage(client.id, {
221
+ type: 'event',
222
+ timestamp: event.timestamp,
223
+ data: event,
224
+ });
225
+ }
226
+ }
227
+ // Send reasoning chains
228
+ if (session_id) {
229
+ const chains = this.reasoningStore.getChainsBySession(session_id, { limit: 10 });
230
+ for (const chain of chains) {
231
+ const tree = this.transformer.buildReasoningTree(chain.id);
232
+ if (tree) {
233
+ this.sendMessage(client.id, {
234
+ type: 'reasoning',
235
+ timestamp: chain.created_at,
236
+ data: tree,
237
+ });
238
+ }
239
+ }
240
+ }
241
+ }
242
+ /**
243
+ * Handle incoming message from client
244
+ */
245
+ handleMessage(clientId, data) {
246
+ try {
247
+ const message = JSON.parse(data.toString());
248
+ if (message.type === 'subscribe') {
249
+ this.updateSubscription(clientId, message.options);
250
+ }
251
+ else if (message.type === 'unsubscribe') {
252
+ this.removeSubscription(clientId);
253
+ }
254
+ else if (message.type === 'ping') {
255
+ this.sendMessage(clientId, {
256
+ type: 'heartbeat',
257
+ timestamp: new Date().toISOString(),
258
+ data: { status: 'pong' },
259
+ });
260
+ }
261
+ }
262
+ catch (error) {
263
+ this.emit('error', { clientId, error });
264
+ }
265
+ }
266
+ /**
267
+ * Handle client disconnection
268
+ */
269
+ handleDisconnect(clientId) {
270
+ this.disconnectClient(clientId, 'Client disconnected');
271
+ }
272
+ /**
273
+ * Handle client error
274
+ */
275
+ handleError(clientId, error) {
276
+ this.emit('error', { clientId, error });
277
+ this.disconnectClient(clientId, `Error: ${error.message}`);
278
+ }
279
+ /**
280
+ * Handle pong response (heartbeat)
281
+ */
282
+ handlePong(clientId) {
283
+ const client = this.clients.get(clientId);
284
+ if (client) {
285
+ client.lastHeartbeat = Date.now();
286
+ }
287
+ }
288
+ /**
289
+ * Disconnect a client
290
+ */
291
+ disconnectClient(clientId, reason) {
292
+ const client = this.clients.get(clientId);
293
+ if (!client)
294
+ return;
295
+ try {
296
+ // Close the WebSocket connection
297
+ if (client.socket.readyState === ws_1.WebSocket.OPEN || client.socket.readyState === ws_1.WebSocket.CONNECTING) {
298
+ client.socket.close(1000, reason);
299
+ }
300
+ }
301
+ catch (error) {
302
+ this.emit('error', { clientId, error, source: 'disconnect' });
303
+ }
304
+ this.clients.delete(clientId);
305
+ this.messageQueue.delete(clientId);
306
+ this.emit('client_disconnected', { clientId, reason });
307
+ }
308
+ /**
309
+ * Update client subscription
310
+ */
311
+ updateSubscription(clientId, options) {
312
+ const client = this.clients.get(clientId);
313
+ if (!client)
314
+ return;
315
+ client.subscriptions = { ...client.subscriptions, ...options };
316
+ this.emit('subscription_updated', { clientId, subscriptions: client.subscriptions });
317
+ }
318
+ /**
319
+ * Remove client subscription
320
+ */
321
+ removeSubscription(clientId) {
322
+ const client = this.clients.get(clientId);
323
+ if (!client)
324
+ return;
325
+ client.subscriptions = {};
326
+ this.emit('subscription_removed', { clientId });
327
+ }
328
+ /**
329
+ * Broadcast event to all subscribed clients
330
+ * @param message - Event message to broadcast
331
+ */
332
+ broadcastEvent(message) {
333
+ const startTime = Date.now();
334
+ for (const client of this.clients.values()) {
335
+ if (this.shouldSendToClient(client, message)) {
336
+ this.sendMessage(client.id, message);
337
+ }
338
+ }
339
+ const latency = Date.now() - startTime;
340
+ this.emit('broadcast_complete', { latency, clientCount: this.clients.size });
341
+ // Emit warning if latency exceeds 500ms threshold
342
+ if (latency > 500) {
343
+ this.emit('latency_warning', { latency, threshold: 500 });
344
+ }
345
+ }
346
+ /**
347
+ * Send message to specific client with backpressure handling
348
+ */
349
+ sendMessage(clientId, message) {
350
+ const client = this.clients.get(clientId);
351
+ if (!client)
352
+ return;
353
+ const queue = this.messageQueue.get(clientId);
354
+ // Check backlog size
355
+ if (queue.length >= this.config.maxBacklogSize) {
356
+ // Drop oldest message (FIFO)
357
+ queue.shift();
358
+ this.emit('backpressure', { clientId, queueSize: queue.length });
359
+ }
360
+ queue.push(message);
361
+ // Attempt to flush queue
362
+ this.flushMessageQueue(clientId);
363
+ }
364
+ /**
365
+ * Flush message queue for a client
366
+ */
367
+ flushMessageQueue(clientId) {
368
+ const client = this.clients.get(clientId);
369
+ const queue = this.messageQueue.get(clientId);
370
+ if (!client || !queue)
371
+ return;
372
+ while (queue.length > 0) {
373
+ const message = queue[0];
374
+ // Check if socket is open
375
+ if (client.socket.readyState !== ws_1.WebSocket.OPEN) {
376
+ break;
377
+ }
378
+ // Check for backpressure (buffered data)
379
+ if (client.socket.bufferedAmount > 0) {
380
+ // Socket buffer is full, wait for next flush
381
+ break;
382
+ }
383
+ // Send message
384
+ try {
385
+ client.socket.send(JSON.stringify(message));
386
+ queue.shift();
387
+ }
388
+ catch (error) {
389
+ this.emit('send_error', { clientId, error });
390
+ break;
391
+ }
392
+ }
393
+ }
394
+ /**
395
+ * Check if message should be sent to client based on subscriptions
396
+ */
397
+ shouldSendToClient(client, message) {
398
+ const { session_id, agent_id, event_types, since } = client.subscriptions;
399
+ // Check timestamp filter
400
+ if (since && message.timestamp < since) {
401
+ return false;
402
+ }
403
+ // Check event-specific filters
404
+ if (message.type === 'event') {
405
+ const eventData = message.data;
406
+ if (session_id && eventData.session_id !== session_id) {
407
+ return false;
408
+ }
409
+ if (agent_id && eventData.agent_id !== agent_id) {
410
+ return false;
411
+ }
412
+ if (event_types && eventData.event_type && !event_types.includes(eventData.event_type)) {
413
+ return false;
414
+ }
415
+ }
416
+ return true;
417
+ }
418
+ /**
419
+ * Start heartbeat timer
420
+ */
421
+ startHeartbeat() {
422
+ this.heartbeatTimer = setInterval(() => {
423
+ const now = Date.now();
424
+ for (const client of this.clients.values()) {
425
+ // Check for timeout
426
+ if (now - client.lastHeartbeat > this.config.clientTimeout) {
427
+ this.disconnectClient(client.id, 'Heartbeat timeout');
428
+ continue;
429
+ }
430
+ // Send WebSocket ping frame
431
+ try {
432
+ if (client.socket.readyState === ws_1.WebSocket.OPEN) {
433
+ client.socket.ping();
434
+ }
435
+ }
436
+ catch (error) {
437
+ this.emit('error', { clientId: client.id, error, source: 'ping' });
438
+ }
439
+ // Send heartbeat message
440
+ this.sendMessage(client.id, {
441
+ type: 'heartbeat',
442
+ timestamp: new Date().toISOString(),
443
+ data: {
444
+ connected_clients: this.clients.size,
445
+ uptime_ms: now - (client.lastHeartbeat - this.config.heartbeatInterval),
446
+ },
447
+ });
448
+ }
449
+ }, this.config.heartbeatInterval);
450
+ }
451
+ /**
452
+ * Stop heartbeat timer
453
+ */
454
+ stopHeartbeat() {
455
+ if (this.heartbeatTimer) {
456
+ clearInterval(this.heartbeatTimer);
457
+ this.heartbeatTimer = undefined;
458
+ }
459
+ }
460
+ /**
461
+ * Generate unique client ID
462
+ */
463
+ generateClientId() {
464
+ return `client-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
465
+ }
466
+ /**
467
+ * Parse subscription options from URL query parameters
468
+ */
469
+ parseSubscriptionOptions(url) {
470
+ if (!url)
471
+ return {};
472
+ const urlObj = new URL(url, 'http://localhost');
473
+ const params = urlObj.searchParams;
474
+ return {
475
+ session_id: params.get('session_id') || undefined,
476
+ agent_id: params.get('agent_id') || undefined,
477
+ event_types: params.get('event_types')?.split(','),
478
+ since: params.get('since') || undefined,
479
+ };
480
+ }
481
+ /**
482
+ * Get server statistics
483
+ */
484
+ getStatistics() {
485
+ let totalQueueSize = 0;
486
+ for (const queue of this.messageQueue.values()) {
487
+ totalQueueSize += queue.length;
488
+ }
489
+ return {
490
+ isRunning: this.isRunning,
491
+ connectedClients: this.clients.size,
492
+ totalMessagesSent: 0, // Would track in real implementation
493
+ averageQueueSize: this.clients.size > 0 ? totalQueueSize / this.clients.size : 0,
494
+ };
495
+ }
496
+ /**
497
+ * Get connected clients
498
+ */
499
+ getConnectedClients() {
500
+ return Array.from(this.clients.values()).map(client => ({
501
+ id: client.id,
502
+ subscriptions: client.subscriptions,
503
+ }));
504
+ }
505
+ }
506
+ exports.WebSocketServer = WebSocketServer;
507
+ /**
508
+ * Default configuration
509
+ */
510
+ WebSocketServer.DEFAULT_CONFIG = {
511
+ server: undefined,
512
+ port: 8080,
513
+ heartbeatInterval: 30000, // 30 seconds
514
+ clientTimeout: 60000, // 60 seconds
515
+ maxBacklogSize: 1000,
516
+ compression: true,
517
+ };
518
+ //# sourceMappingURL=WebSocketServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocketServer.js","sourceRoot":"","sources":["../../../src/visualization/api/WebSocketServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * @fileoverview Data transformer for converting telemetry data to visualization formats
3
+ * @module visualization/core/DataTransformer
4
+ */
5
+ import { EventStore } from '../../persistence/event-store';
6
+ import { ReasoningStore } from '../../persistence/reasoning-store';
7
+ import { VisualizationGraph, ReasoningTree, AgentActivitySummary, SessionVisualization, LayoutOptions, VisualizationFilter } from '../types';
8
+ /**
9
+ * DataTransformer converts raw telemetry data into visualization-friendly structures
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const transformer = new DataTransformer(eventStore, reasoningStore);
14
+ *
15
+ * // Build visualization graph for a session
16
+ * const graph = transformer.buildSessionGraph('session-123', {
17
+ * algorithm: 'hierarchical',
18
+ * spacing: 100
19
+ * });
20
+ *
21
+ * // Transform reasoning chain to tree
22
+ * const tree = transformer.buildReasoningTree('chain-456');
23
+ * ```
24
+ */
25
+ export declare class DataTransformer {
26
+ private eventStore;
27
+ private reasoningStore;
28
+ constructor(eventStore: EventStore, reasoningStore: ReasoningStore);
29
+ /**
30
+ * Build a visualization graph from events in a session
31
+ * @param sessionId - Session identifier
32
+ * @param layoutOptions - Graph layout configuration
33
+ * @param filter - Optional filters
34
+ * @returns Complete visualization graph with positioned nodes
35
+ */
36
+ buildSessionGraph(sessionId: string, layoutOptions: LayoutOptions, filter?: VisualizationFilter): VisualizationGraph;
37
+ /**
38
+ * Build a reasoning tree from a reasoning chain
39
+ * @param chainId - Chain identifier
40
+ * @returns Hierarchical tree structure
41
+ */
42
+ buildReasoningTree(chainId: string): ReasoningTree | null;
43
+ /**
44
+ * Generate agent activity summaries for a session
45
+ * @param sessionId - Session identifier
46
+ * @returns Array of agent summaries
47
+ */
48
+ generateAgentSummaries(sessionId: string): AgentActivitySummary[];
49
+ /**
50
+ * Build complete session visualization
51
+ * @param sessionId - Session identifier
52
+ * @returns Complete session visualization data
53
+ */
54
+ buildSessionVisualization(sessionId: string): SessionVisualization;
55
+ /**
56
+ * Build time-series metrics from events
57
+ * @param events - Array of events
58
+ * @returns Aggregated time-series data
59
+ */
60
+ private buildEventsTimeline;
61
+ /**
62
+ * Apply layout algorithm to position nodes
63
+ * @param nodes - Graph nodes
64
+ * @param edges - Graph edges
65
+ * @param options - Layout options
66
+ */
67
+ private applyLayout;
68
+ /**
69
+ * Apply hierarchical layout (top-down or left-right)
70
+ */
71
+ private applyHierarchicalLayout;
72
+ /**
73
+ * Apply force-directed layout (simplified spring model)
74
+ */
75
+ private applyForceDirectedLayout;
76
+ /**
77
+ * Apply circular layout
78
+ */
79
+ private applyCircularLayout;
80
+ /**
81
+ * Apply grid layout
82
+ */
83
+ private applyGridLayout;
84
+ /**
85
+ * Apply filter to events
86
+ */
87
+ private applyEventFilter;
88
+ }
89
+ //# sourceMappingURL=DataTransformer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTransformer.d.ts","sourceRoot":"","sources":["../../../src/visualization/core/DataTransformer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAgC,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,cAAc,EAAqB,MAAM,mCAAmC,CAAC;AAEtF,OAAO,EACL,kBAAkB,EAGlB,aAAa,EAEb,oBAAoB,EACpB,oBAAoB,EAEpB,aAAa,EACb,mBAAmB,EACpB,MAAM,UAAU,CAAC;AASlB;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,eAAe;IAExB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,cAAc;gBADd,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,cAAc;IAGxC;;;;;;OAMG;IACH,iBAAiB,CACf,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,aAAa,EAC5B,MAAM,CAAC,EAAE,mBAAmB,GAC3B,kBAAkB;IAoHrB;;;;OAIG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IA+BzD;;;;OAIG;IACH,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,EAAE;IA4CjE;;;;OAIG;IACH,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB;IA+ClE;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAqBnB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAgE/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAqEhC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAgBzB"}