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,428 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview REST API endpoints for visualization data
4
+ * @module visualization/api/RestEndpoints
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.RestApiServer = void 0;
11
+ const express_1 = __importDefault(require("express"));
12
+ const cors_1 = __importDefault(require("cors"));
13
+ const DataTransformer_1 = require("../core/DataTransformer");
14
+ const api_1 = require("@opentelemetry/api");
15
+ /**
16
+ * REST API server for visualization data
17
+ *
18
+ * Endpoints:
19
+ * - GET /api/visualization/events - List events with pagination and filtering
20
+ * - GET /api/visualization/reasoning/:taskId - Get reasoning chain details
21
+ * - GET /api/visualization/metrics - Get aggregated metrics
22
+ * - GET /api/visualization/agents/:agentId/history - Get agent activity history
23
+ * - GET /api/visualization/sessions/:sessionId - Get complete session visualization
24
+ * - GET /api/visualization/graph/:sessionId - Get visualization graph
25
+ *
26
+ * Features:
27
+ * - Cursor-based pagination
28
+ * - ETag response caching
29
+ * - OpenTelemetry instrumentation
30
+ * - Comprehensive error handling
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * const api = new RestApiServer(eventStore, reasoningStore, {
35
+ * port: 3000,
36
+ * enableEtag: true,
37
+ * enableCors: true
38
+ * });
39
+ *
40
+ * await api.start();
41
+ * ```
42
+ */
43
+ class RestApiServer {
44
+ constructor(eventStore, reasoningStore, config = {}) {
45
+ this.tracer = api_1.trace.getTracer('aqe-visualization-api');
46
+ this.eventStore = eventStore;
47
+ this.reasoningStore = reasoningStore;
48
+ this.transformer = new DataTransformer_1.DataTransformer(eventStore, reasoningStore);
49
+ this.config = { ...RestApiServer.DEFAULT_CONFIG, ...config };
50
+ this.isRunning = false;
51
+ this.etagCache = new Map();
52
+ // Initialize Express app
53
+ this.app = (0, express_1.default)();
54
+ this.setupMiddleware();
55
+ this.setupRoutes();
56
+ }
57
+ /**
58
+ * Setup Express middleware
59
+ */
60
+ setupMiddleware() {
61
+ // CORS configuration
62
+ if (this.config.enableCors) {
63
+ this.app.use((0, cors_1.default)({
64
+ origin: this.config.corsOrigins,
65
+ methods: ['GET', 'OPTIONS'],
66
+ allowedHeaders: ['Content-Type', 'Authorization', 'If-None-Match'],
67
+ maxAge: 86400,
68
+ }));
69
+ }
70
+ // Body parsing
71
+ this.app.use(express_1.default.json());
72
+ this.app.use(express_1.default.urlencoded({ extended: true }));
73
+ // Request logging middleware
74
+ this.app.use((req, res, next) => {
75
+ const requestId = this.generateRequestId();
76
+ req.requestId = requestId;
77
+ req.startTime = Date.now();
78
+ const span = this.tracer.startSpan(`HTTP ${req.method} ${req.path}`, {
79
+ attributes: {
80
+ 'http.method': req.method,
81
+ 'http.url': req.path,
82
+ 'http.request_id': requestId,
83
+ },
84
+ });
85
+ req.span = span;
86
+ next();
87
+ });
88
+ }
89
+ /**
90
+ * Setup Express routes
91
+ */
92
+ setupRoutes() {
93
+ // GET /api/visualization/events
94
+ this.app.get('/api/visualization/events', this.handleGetEvents.bind(this));
95
+ // GET /api/visualization/reasoning/:chainId
96
+ this.app.get('/api/visualization/reasoning/:chainId', this.handleGetReasoningRoute.bind(this));
97
+ // GET /api/visualization/metrics
98
+ this.app.get('/api/visualization/metrics', this.handleGetMetricsRoute.bind(this));
99
+ // GET /api/visualization/agents/:agentId/history
100
+ this.app.get('/api/visualization/agents/:agentId/history', this.handleGetAgentHistoryRoute.bind(this));
101
+ // GET /api/visualization/sessions/:sessionId
102
+ this.app.get('/api/visualization/sessions/:sessionId', this.handleGetSessionRoute.bind(this));
103
+ // GET /api/visualization/graph/:sessionId
104
+ this.app.get('/api/visualization/graph/:sessionId', this.handleGetGraphRoute.bind(this));
105
+ // Error handling middleware
106
+ this.app.use((err, req, res, next) => {
107
+ const span = req.span;
108
+ if (span) {
109
+ span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: err.message });
110
+ span.recordException(err);
111
+ span.end();
112
+ }
113
+ const statusCode = err.message.startsWith('Not found') ? 404 : 500;
114
+ res.status(statusCode).json({
115
+ success: false,
116
+ error: err.message,
117
+ metadata: {
118
+ timestamp: new Date().toISOString(),
119
+ request_id: req.requestId || 'unknown',
120
+ },
121
+ });
122
+ });
123
+ // 404 handler
124
+ this.app.use((req, res) => {
125
+ res.status(404).json({
126
+ success: false,
127
+ error: `Not found: ${req.path}`,
128
+ metadata: {
129
+ timestamp: new Date().toISOString(),
130
+ request_id: req.requestId || 'unknown',
131
+ },
132
+ });
133
+ });
134
+ }
135
+ /**
136
+ * Start the REST API server
137
+ */
138
+ async start() {
139
+ if (this.isRunning) {
140
+ throw new Error('REST API server is already running');
141
+ }
142
+ await new Promise((resolve, reject) => {
143
+ this.server = this.app.listen(this.config.port, () => {
144
+ this.isRunning = true;
145
+ console.log(`REST API server listening on port ${this.config.port}`);
146
+ resolve();
147
+ });
148
+ this.server.on('error', reject);
149
+ });
150
+ }
151
+ /**
152
+ * Stop the REST API server
153
+ */
154
+ async stop() {
155
+ if (!this.isRunning || !this.server) {
156
+ return;
157
+ }
158
+ await new Promise((resolve) => {
159
+ this.server.close(() => {
160
+ this.isRunning = false;
161
+ resolve();
162
+ });
163
+ });
164
+ }
165
+ /**
166
+ * GET /api/visualization/events?since=timestamp&limit=100&offset=0
167
+ */
168
+ async handleGetEvents(req, res) {
169
+ try {
170
+ const { since, limit: limitStr, offset: offsetStr } = req.query;
171
+ const limit = Math.min(parseInt(limitStr || String(this.config.defaultLimit)), this.config.maxLimit);
172
+ const offset = parseInt(offsetStr || '0');
173
+ let events;
174
+ if (since) {
175
+ events = this.eventStore.getEventsByTimeRange({ start: since, end: new Date().toISOString() }, { limit, offset });
176
+ }
177
+ else {
178
+ events = this.eventStore.getRecentEvents(limit, offset);
179
+ }
180
+ // Get total count for pagination
181
+ const stats = this.eventStore.getStatistics();
182
+ const total = stats.totalEvents;
183
+ this.sendSuccessResponse(res, req, events, {
184
+ limit,
185
+ offset,
186
+ total,
187
+ has_more: offset + events.length < total,
188
+ });
189
+ }
190
+ catch (error) {
191
+ throw error;
192
+ }
193
+ }
194
+ /**
195
+ * GET /api/visualization/reasoning/:chainId
196
+ */
197
+ async handleGetReasoningRoute(req, res) {
198
+ try {
199
+ const { chainId } = req.params;
200
+ const tree = this.transformer.buildReasoningTree(chainId);
201
+ if (!tree) {
202
+ throw new Error(`Reasoning chain not found: ${chainId}`);
203
+ }
204
+ this.sendSuccessResponse(res, req, tree);
205
+ }
206
+ catch (error) {
207
+ throw error;
208
+ }
209
+ }
210
+ /**
211
+ * GET /api/visualization/metrics?timeRange=1h|24h|7d
212
+ */
213
+ async handleGetMetricsRoute(req, res) {
214
+ try {
215
+ const { timeRange } = req.query;
216
+ // Calculate time range
217
+ const now = new Date();
218
+ let startTime;
219
+ switch (timeRange) {
220
+ case '1h':
221
+ startTime = new Date(now.getTime() - 60 * 60 * 1000);
222
+ break;
223
+ case '24h':
224
+ startTime = new Date(now.getTime() - 24 * 60 * 60 * 1000);
225
+ break;
226
+ case '7d':
227
+ startTime = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);
228
+ break;
229
+ default:
230
+ startTime = new Date(now.getTime() - 24 * 60 * 60 * 1000);
231
+ }
232
+ const events = this.eventStore.getEventsByTimeRange({
233
+ start: startTime.toISOString(),
234
+ end: now.toISOString(),
235
+ });
236
+ const eventStats = this.eventStore.getStatistics();
237
+ const reasoningStats = this.reasoningStore.getStatistics();
238
+ const metrics = {
239
+ time_range: {
240
+ start: startTime.toISOString(),
241
+ end: now.toISOString(),
242
+ duration_ms: now.getTime() - startTime.getTime(),
243
+ },
244
+ events: {
245
+ total: events.length,
246
+ by_type: this.groupByType(events),
247
+ by_agent: this.groupByAgent(events),
248
+ },
249
+ reasoning: {
250
+ total_chains: reasoningStats.totalChains,
251
+ total_steps: reasoningStats.totalSteps,
252
+ completed_chains: reasoningStats.completedChains,
253
+ failed_chains: reasoningStats.failedChains,
254
+ avg_steps_per_chain: reasoningStats.avgStepsPerChain,
255
+ avg_confidence: reasoningStats.avgConfidence,
256
+ },
257
+ overall: {
258
+ unique_agents: eventStats.uniqueAgents,
259
+ unique_sessions: eventStats.uniqueSessions,
260
+ },
261
+ };
262
+ this.sendSuccessResponse(res, req, metrics);
263
+ }
264
+ catch (error) {
265
+ throw error;
266
+ }
267
+ }
268
+ /**
269
+ * GET /api/visualization/agents/:agentId/history?limit=100&offset=0
270
+ */
271
+ async handleGetAgentHistoryRoute(req, res) {
272
+ try {
273
+ const { agentId } = req.params;
274
+ const { limit: limitStr, offset: offsetStr } = req.query;
275
+ const limit = Math.min(parseInt(limitStr || String(this.config.defaultLimit)), this.config.maxLimit);
276
+ const offset = parseInt(offsetStr || '0');
277
+ const events = this.eventStore.getEventsByAgent(agentId, { limit, offset });
278
+ const chains = this.reasoningStore.getChainsByAgent(agentId, { limit, offset });
279
+ const total = this.eventStore.countEventsByAgent(agentId);
280
+ const history = {
281
+ agent_id: agentId,
282
+ events,
283
+ reasoning_chains: chains,
284
+ total_events: total,
285
+ };
286
+ this.sendSuccessResponse(res, req, history, {
287
+ limit,
288
+ offset,
289
+ total,
290
+ has_more: offset + events.length < total,
291
+ });
292
+ }
293
+ catch (error) {
294
+ throw error;
295
+ }
296
+ }
297
+ /**
298
+ * GET /api/visualization/sessions/:sessionId
299
+ */
300
+ async handleGetSessionRoute(req, res) {
301
+ try {
302
+ const { sessionId } = req.params;
303
+ const visualization = this.transformer.buildSessionVisualization(sessionId);
304
+ this.sendSuccessResponse(res, req, visualization);
305
+ }
306
+ catch (error) {
307
+ throw error;
308
+ }
309
+ }
310
+ /**
311
+ * GET /api/visualization/graph/:sessionId?algorithm=hierarchical&spacing=100
312
+ */
313
+ async handleGetGraphRoute(req, res) {
314
+ try {
315
+ const { sessionId } = req.params;
316
+ const { algorithm, spacing } = req.query;
317
+ const layoutOptions = {
318
+ algorithm: algorithm || 'hierarchical',
319
+ spacing: parseInt(spacing || '100'),
320
+ direction: 'TB',
321
+ };
322
+ const graph = this.transformer.buildSessionGraph(sessionId, layoutOptions);
323
+ this.sendSuccessResponse(res, req, graph);
324
+ }
325
+ catch (error) {
326
+ throw error;
327
+ }
328
+ }
329
+ /**
330
+ * Send success response
331
+ */
332
+ sendSuccessResponse(res, req, data, pagination) {
333
+ const requestId = req.requestId || 'unknown';
334
+ const span = req.span;
335
+ const response = {
336
+ success: true,
337
+ data,
338
+ metadata: {
339
+ timestamp: new Date().toISOString(),
340
+ request_id: requestId,
341
+ pagination,
342
+ },
343
+ };
344
+ // Calculate ETag if enabled
345
+ if (this.config.enableEtag) {
346
+ const etag = this.calculateEtag(data);
347
+ res.setHeader('ETag', etag);
348
+ // Check If-None-Match header
349
+ const ifNoneMatch = req.headers['if-none-match'];
350
+ if (ifNoneMatch === etag) {
351
+ if (span) {
352
+ span.setStatus({ code: api_1.SpanStatusCode.OK });
353
+ span.end();
354
+ }
355
+ res.status(304).end();
356
+ return;
357
+ }
358
+ }
359
+ // Set cache headers
360
+ res.setHeader('Cache-Control', 'private, max-age=60');
361
+ if (span) {
362
+ span.setStatus({ code: api_1.SpanStatusCode.OK });
363
+ span.end();
364
+ }
365
+ res.status(200).json(response);
366
+ }
367
+ /**
368
+ * Calculate ETag for response caching
369
+ */
370
+ calculateEtag(data) {
371
+ const hash = require('crypto')
372
+ .createHash('md5')
373
+ .update(JSON.stringify(data))
374
+ .digest('hex');
375
+ return `"${hash}"`;
376
+ }
377
+ /**
378
+ * Generate unique request ID
379
+ */
380
+ generateRequestId() {
381
+ return `req-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
382
+ }
383
+ /**
384
+ * Group events by type
385
+ */
386
+ groupByType(events) {
387
+ const groups = {};
388
+ for (const event of events) {
389
+ const e = event;
390
+ groups[e.event_type] = (groups[e.event_type] || 0) + 1;
391
+ }
392
+ return groups;
393
+ }
394
+ /**
395
+ * Group events by agent
396
+ */
397
+ groupByAgent(events) {
398
+ const groups = {};
399
+ for (const event of events) {
400
+ const e = event;
401
+ groups[e.agent_id] = (groups[e.agent_id] || 0) + 1;
402
+ }
403
+ return groups;
404
+ }
405
+ /**
406
+ * Get server status
407
+ */
408
+ getStatus() {
409
+ return {
410
+ isRunning: this.isRunning,
411
+ port: this.config.port,
412
+ etagCacheSize: this.etagCache.size,
413
+ };
414
+ }
415
+ }
416
+ exports.RestApiServer = RestApiServer;
417
+ /**
418
+ * Default configuration
419
+ */
420
+ RestApiServer.DEFAULT_CONFIG = {
421
+ port: 3001,
422
+ enableEtag: true,
423
+ defaultLimit: 50,
424
+ maxLimit: 1000,
425
+ enableCors: true,
426
+ corsOrigins: ['*'],
427
+ };
428
+ //# sourceMappingURL=RestEndpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RestEndpoints.js","sourceRoot":"","sources":["../../../src/visualization/api/RestEndpoints.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * @fileoverview WebSocket server for real-time event streaming
3
+ * @module visualization/api/WebSocketServer
4
+ */
5
+ import { EventEmitter } from 'events';
6
+ import { EventStore } from '../../persistence/event-store';
7
+ import { ReasoningStore } from '../../persistence/reasoning-store';
8
+ import { RealtimeEventMessage, SubscriptionOptions } from '../types';
9
+ import * as http from 'http';
10
+ /**
11
+ * WebSocket server configuration
12
+ */
13
+ export interface WebSocketServerConfig {
14
+ /** HTTP server to attach to */
15
+ server?: http.Server;
16
+ /** Port to listen on (if no server provided) */
17
+ port?: number;
18
+ /** Heartbeat interval in milliseconds */
19
+ heartbeatInterval?: number;
20
+ /** Client timeout in milliseconds */
21
+ clientTimeout?: number;
22
+ /** Maximum backlog size per client */
23
+ maxBacklogSize?: number;
24
+ /** Enable message compression */
25
+ compression?: boolean;
26
+ }
27
+ /**
28
+ * WebSocket server for real-time visualization event streaming
29
+ *
30
+ * Features:
31
+ * - Real-time event streaming with <500ms latency
32
+ * - Client subscription management with filtering
33
+ * - Backpressure handling for high-throughput scenarios
34
+ * - Automatic heartbeat and connection management
35
+ * - Message types: event, reasoning, metrics, heartbeat
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * const wsServer = new WebSocketServer(eventStore, reasoningStore, {
40
+ * port: 8080,
41
+ * heartbeatInterval: 30000,
42
+ * maxBacklogSize: 1000
43
+ * });
44
+ *
45
+ * await wsServer.start();
46
+ *
47
+ * // Broadcast event to subscribed clients
48
+ * wsServer.broadcastEvent({
49
+ * type: 'event',
50
+ * timestamp: new Date().toISOString(),
51
+ * data: { agent_id: 'test-gen', event_type: 'test_generated' }
52
+ * });
53
+ * ```
54
+ */
55
+ export declare class WebSocketServer extends EventEmitter {
56
+ private clients;
57
+ private eventStore;
58
+ private reasoningStore;
59
+ private transformer;
60
+ private config;
61
+ private heartbeatTimer?;
62
+ private isRunning;
63
+ private messageQueue;
64
+ private wss?;
65
+ private httpServer?;
66
+ /**
67
+ * Default configuration
68
+ */
69
+ private static readonly DEFAULT_CONFIG;
70
+ constructor(eventStore: EventStore, reasoningStore: ReasoningStore, config?: WebSocketServerConfig);
71
+ /**
72
+ * Start the WebSocket server
73
+ */
74
+ start(): Promise<void>;
75
+ /**
76
+ * Stop the WebSocket server
77
+ */
78
+ stop(): Promise<void>;
79
+ /**
80
+ * Handle new WebSocket connection
81
+ */
82
+ private handleConnection;
83
+ /**
84
+ * Send initial data to newly connected client
85
+ */
86
+ private sendInitialData;
87
+ /**
88
+ * Handle incoming message from client
89
+ */
90
+ private handleMessage;
91
+ /**
92
+ * Handle client disconnection
93
+ */
94
+ private handleDisconnect;
95
+ /**
96
+ * Handle client error
97
+ */
98
+ private handleError;
99
+ /**
100
+ * Handle pong response (heartbeat)
101
+ */
102
+ private handlePong;
103
+ /**
104
+ * Disconnect a client
105
+ */
106
+ private disconnectClient;
107
+ /**
108
+ * Update client subscription
109
+ */
110
+ private updateSubscription;
111
+ /**
112
+ * Remove client subscription
113
+ */
114
+ private removeSubscription;
115
+ /**
116
+ * Broadcast event to all subscribed clients
117
+ * @param message - Event message to broadcast
118
+ */
119
+ broadcastEvent(message: RealtimeEventMessage): void;
120
+ /**
121
+ * Send message to specific client with backpressure handling
122
+ */
123
+ private sendMessage;
124
+ /**
125
+ * Flush message queue for a client
126
+ */
127
+ private flushMessageQueue;
128
+ /**
129
+ * Check if message should be sent to client based on subscriptions
130
+ */
131
+ private shouldSendToClient;
132
+ /**
133
+ * Start heartbeat timer
134
+ */
135
+ private startHeartbeat;
136
+ /**
137
+ * Stop heartbeat timer
138
+ */
139
+ private stopHeartbeat;
140
+ /**
141
+ * Generate unique client ID
142
+ */
143
+ private generateClientId;
144
+ /**
145
+ * Parse subscription options from URL query parameters
146
+ */
147
+ private parseSubscriptionOptions;
148
+ /**
149
+ * Get server statistics
150
+ */
151
+ getStatistics(): {
152
+ isRunning: boolean;
153
+ connectedClients: number;
154
+ totalMessagesSent: number;
155
+ averageQueueSize: number;
156
+ };
157
+ /**
158
+ * Get connected clients
159
+ */
160
+ getConnectedClients(): Array<{
161
+ id: string;
162
+ subscriptions: SubscriptionOptions;
163
+ }>;
164
+ }
165
+ //# sourceMappingURL=WebSocketServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocketServer.d.ts","sourceRoot":"","sources":["../../../src/visualization/api/WebSocketServer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACrE,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAa7B;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,+BAA+B;IAC/B,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qCAAqC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iCAAiC;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,GAAG,CAAC,CAAW;IACvB,OAAO,CAAC,UAAU,CAAC,CAAc;IAEjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAOpC;gBAGA,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,cAAc,EAC9B,MAAM,GAAE,qBAA0B;IAYpC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqD5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqC3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuCxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAmCvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAoBrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;OAEG;IACH,OAAO,CAAC,UAAU;IAOlB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAkBnD;;OAEG;IACH,OAAO,CAAC,WAAW;IAmBnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA8BzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8B1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAiCtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAchC;;OAEG;IACH,aAAa,IAAI;QACf,SAAS,EAAE,OAAO,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC;QACzB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,gBAAgB,EAAE,MAAM,CAAC;KAC1B;IAcD;;OAEG;IACH,mBAAmB,IAAI,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,mBAAmB,CAAA;KAAE,CAAC;CAMjF"}