agentic-qe 1.8.3 → 1.8.4

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 (91) hide show
  1. package/.claude/skills/cicd-pipeline-qe-orchestrator/README.md +2 -2
  2. package/.claude/skills/cicd-pipeline-qe-orchestrator/SKILL.md +6 -6
  3. package/CHANGELOG.md +220 -0
  4. package/README.md +36 -3
  5. package/config/constitution.schema.json +423 -0
  6. package/config/otel-collector.yaml +234 -0
  7. package/dist/cli/commands/init-claude-md-template.js +3 -3
  8. package/dist/constitution/index.d.ts +105 -0
  9. package/dist/constitution/index.d.ts.map +1 -0
  10. package/dist/constitution/index.js +207 -0
  11. package/dist/constitution/index.js.map +1 -0
  12. package/dist/constitution/loader.d.ts +141 -0
  13. package/dist/constitution/loader.d.ts.map +1 -0
  14. package/dist/constitution/loader.js +515 -0
  15. package/dist/constitution/loader.js.map +1 -0
  16. package/dist/constitution/schema.d.ts +409 -0
  17. package/dist/constitution/schema.d.ts.map +1 -0
  18. package/dist/constitution/schema.js +71 -0
  19. package/dist/constitution/schema.js.map +1 -0
  20. package/dist/core/memory/MemoryManagerFactory.d.ts +77 -0
  21. package/dist/core/memory/MemoryManagerFactory.d.ts.map +1 -0
  22. package/dist/core/memory/MemoryManagerFactory.js +270 -0
  23. package/dist/core/memory/MemoryManagerFactory.js.map +1 -0
  24. package/dist/core/memory/SwarmMemoryManager.d.ts +18 -0
  25. package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
  26. package/dist/core/memory/SwarmMemoryManager.js +96 -11
  27. package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
  28. package/dist/core/memory/index.d.ts +1 -0
  29. package/dist/core/memory/index.d.ts.map +1 -1
  30. package/dist/core/memory/index.js +12 -1
  31. package/dist/core/memory/index.js.map +1 -1
  32. package/dist/mcp/handlers/memory/memory-backup.js +6 -6
  33. package/dist/mcp/handlers/memory/memory-backup.js.map +1 -1
  34. package/dist/mcp/handlers/phase2/Phase2Tools.d.ts.map +1 -1
  35. package/dist/mcp/handlers/phase2/Phase2Tools.js +4 -2
  36. package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -1
  37. package/dist/mcp/server.d.ts.map +1 -1
  38. package/dist/mcp/server.js +4 -38
  39. package/dist/mcp/server.js.map +1 -1
  40. package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
  41. package/dist/mcp/services/AgentRegistry.js +4 -4
  42. package/dist/mcp/services/AgentRegistry.js.map +1 -1
  43. package/dist/persistence/event-store.d.ts +162 -0
  44. package/dist/persistence/event-store.d.ts.map +1 -0
  45. package/dist/persistence/event-store.js +315 -0
  46. package/dist/persistence/event-store.js.map +1 -0
  47. package/dist/persistence/index.d.ts +145 -0
  48. package/dist/persistence/index.d.ts.map +1 -0
  49. package/dist/persistence/index.js +227 -0
  50. package/dist/persistence/index.js.map +1 -0
  51. package/dist/persistence/metrics-aggregator.d.ts +187 -0
  52. package/dist/persistence/metrics-aggregator.d.ts.map +1 -0
  53. package/dist/persistence/metrics-aggregator.js +495 -0
  54. package/dist/persistence/metrics-aggregator.js.map +1 -0
  55. package/dist/persistence/reasoning-store.d.ts +178 -0
  56. package/dist/persistence/reasoning-store.d.ts.map +1 -0
  57. package/dist/persistence/reasoning-store.js +440 -0
  58. package/dist/persistence/reasoning-store.js.map +1 -0
  59. package/dist/persistence/schema.d.ts +181 -0
  60. package/dist/persistence/schema.d.ts.map +1 -0
  61. package/dist/persistence/schema.js +186 -0
  62. package/dist/persistence/schema.js.map +1 -0
  63. package/dist/telemetry/bootstrap.d.ts +67 -0
  64. package/dist/telemetry/bootstrap.d.ts.map +1 -0
  65. package/dist/telemetry/bootstrap.js +320 -0
  66. package/dist/telemetry/bootstrap.js.map +1 -0
  67. package/dist/telemetry/index.d.ts +16 -0
  68. package/dist/telemetry/index.d.ts.map +1 -0
  69. package/dist/telemetry/index.js +84 -0
  70. package/dist/telemetry/index.js.map +1 -0
  71. package/dist/telemetry/metrics/agent-metrics.d.ts +109 -0
  72. package/dist/telemetry/metrics/agent-metrics.d.ts.map +1 -0
  73. package/dist/telemetry/metrics/agent-metrics.js +213 -0
  74. package/dist/telemetry/metrics/agent-metrics.js.map +1 -0
  75. package/dist/telemetry/metrics/index.d.ts +51 -0
  76. package/dist/telemetry/metrics/index.d.ts.map +1 -0
  77. package/dist/telemetry/metrics/index.js +100 -0
  78. package/dist/telemetry/metrics/index.js.map +1 -0
  79. package/dist/telemetry/metrics/quality-metrics.d.ts +171 -0
  80. package/dist/telemetry/metrics/quality-metrics.d.ts.map +1 -0
  81. package/dist/telemetry/metrics/quality-metrics.js +259 -0
  82. package/dist/telemetry/metrics/quality-metrics.js.map +1 -0
  83. package/dist/telemetry/metrics/system-metrics.d.ts +129 -0
  84. package/dist/telemetry/metrics/system-metrics.d.ts.map +1 -0
  85. package/dist/telemetry/metrics/system-metrics.js +380 -0
  86. package/dist/telemetry/metrics/system-metrics.js.map +1 -0
  87. package/dist/telemetry/types.d.ts +195 -0
  88. package/dist/telemetry/types.d.ts.map +1 -0
  89. package/dist/telemetry/types.js +90 -0
  90. package/dist/telemetry/types.js.map +1 -0
  91. package/package.json +18 -2
@@ -0,0 +1,495 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Metrics aggregator for quality metrics collection and analysis
4
+ * @module persistence/metrics-aggregator
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.MetricsAggregator = void 0;
8
+ const uuid_1 = require("uuid");
9
+ const schema_1 = require("./schema");
10
+ /**
11
+ * Period duration in milliseconds
12
+ */
13
+ const PERIOD_DURATIONS = {
14
+ '1min': 60 * 1000,
15
+ '5min': 5 * 60 * 1000,
16
+ '1hour': 60 * 60 * 1000,
17
+ '1day': 24 * 60 * 60 * 1000,
18
+ };
19
+ /**
20
+ * MetricsAggregator collects and aggregates quality metrics
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const aggregator = new MetricsAggregator({ dbPath: './data/metrics.db' });
25
+ *
26
+ * // Record a metric
27
+ * aggregator.recordMetric({
28
+ * agent_id: 'test-generator',
29
+ * metric_name: 'test_coverage',
30
+ * metric_value: 85.5,
31
+ * dimensions: { suite: 'unit', language: 'typescript' }
32
+ * });
33
+ *
34
+ * // Aggregate by period
35
+ * aggregator.aggregateByPeriod({ period: '1hour' });
36
+ *
37
+ * // Get trends
38
+ * const trends = aggregator.getMetricTrends('test_coverage', '24h');
39
+ * ```
40
+ */
41
+ class MetricsAggregator {
42
+ /**
43
+ * Create a new MetricsAggregator instance
44
+ * @param config - Persistence configuration
45
+ */
46
+ constructor(config = {}) {
47
+ this.config = { ...schema_1.DEFAULT_PERSISTENCE_CONFIG, ...config };
48
+ this.db = (0, schema_1.createDatabase)(this.config);
49
+ this.statements = this.prepareStatements();
50
+ }
51
+ /**
52
+ * Prepare SQL statements for performance
53
+ */
54
+ prepareStatements() {
55
+ return {
56
+ insertMetric: this.db.prepare(`
57
+ INSERT INTO quality_metrics (id, timestamp, agent_id, metric_name, metric_value, dimensions)
58
+ VALUES (?, ?, ?, ?, ?, ?)
59
+ `),
60
+ insertAggregated: this.db.prepare(`
61
+ INSERT INTO aggregated_metrics (id, period_start, period_end, agent_id, metric_name, count, sum, min, max, avg)
62
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
63
+ `),
64
+ getMetricsByAgent: this.db.prepare(`
65
+ SELECT * FROM quality_metrics
66
+ WHERE agent_id = ?
67
+ ORDER BY timestamp DESC
68
+ LIMIT ? OFFSET ?
69
+ `),
70
+ getMetricsByName: this.db.prepare(`
71
+ SELECT * FROM quality_metrics
72
+ WHERE metric_name = ?
73
+ ORDER BY timestamp DESC
74
+ LIMIT ? OFFSET ?
75
+ `),
76
+ getAggregatedByPeriod: this.db.prepare(`
77
+ SELECT * FROM aggregated_metrics
78
+ WHERE period_start >= ? AND period_end <= ?
79
+ ORDER BY period_start DESC
80
+ `),
81
+ };
82
+ }
83
+ /**
84
+ * Deserialize metric record from database row
85
+ */
86
+ deserializeMetric(row) {
87
+ return {
88
+ id: row.id,
89
+ timestamp: row.timestamp,
90
+ agent_id: row.agent_id,
91
+ metric_name: row.metric_name,
92
+ metric_value: row.metric_value,
93
+ dimensions: JSON.parse(row.dimensions),
94
+ };
95
+ }
96
+ /**
97
+ * Deserialize aggregated metric from database row
98
+ */
99
+ deserializeAggregated(row) {
100
+ return {
101
+ id: row.id,
102
+ period_start: row.period_start,
103
+ period_end: row.period_end,
104
+ agent_id: row.agent_id,
105
+ metric_name: row.metric_name,
106
+ count: row.count,
107
+ sum: row.sum,
108
+ min: row.min,
109
+ max: row.max,
110
+ avg: row.avg,
111
+ };
112
+ }
113
+ /**
114
+ * Record a quality metric
115
+ * @param input - Metric recording input
116
+ * @returns Created metric record
117
+ */
118
+ recordMetric(input) {
119
+ const id = (0, uuid_1.v4)();
120
+ const timestamp = new Date().toISOString();
121
+ const dimensions = JSON.stringify(input.dimensions || {});
122
+ let retries = this.config.maxRetries || 3;
123
+ while (retries > 0) {
124
+ try {
125
+ this.statements.insertMetric.run(id, timestamp, input.agent_id, input.metric_name, input.metric_value, dimensions);
126
+ break;
127
+ }
128
+ catch (error) {
129
+ retries--;
130
+ if (retries === 0) {
131
+ const errorMessage = error instanceof Error ? error.message : String(error);
132
+ throw new Error(`Failed to record metric after retries: ${errorMessage}`);
133
+ }
134
+ const start = Date.now();
135
+ while (Date.now() - start < 100) {
136
+ // Busy wait for synchronous retry
137
+ }
138
+ }
139
+ }
140
+ return {
141
+ id,
142
+ timestamp,
143
+ agent_id: input.agent_id,
144
+ metric_name: input.metric_name,
145
+ metric_value: input.metric_value,
146
+ dimensions: input.dimensions || {},
147
+ };
148
+ }
149
+ /**
150
+ * Record multiple metrics in a batch
151
+ * @param inputs - Array of metric inputs
152
+ * @returns Array of created metrics
153
+ */
154
+ recordMetricsBatch(inputs) {
155
+ const insertMany = this.db.transaction((items) => {
156
+ const results = [];
157
+ for (const input of items) {
158
+ const result = this.recordMetric(input);
159
+ results.push(result);
160
+ }
161
+ return results;
162
+ });
163
+ return insertMany(inputs);
164
+ }
165
+ /**
166
+ * Get metrics by agent ID
167
+ * @param agentId - Agent identifier
168
+ * @param options - Query options
169
+ * @returns Array of metrics
170
+ */
171
+ getMetricsByAgent(agentId, options = {}) {
172
+ const { limit = 100, offset = 0 } = options;
173
+ const rows = this.statements.getMetricsByAgent.all(agentId, limit, offset);
174
+ return rows.map(row => this.deserializeMetric(row));
175
+ }
176
+ /**
177
+ * Get metrics by name
178
+ * @param metricName - Metric name
179
+ * @param options - Query options
180
+ * @returns Array of metrics
181
+ */
182
+ getMetricsByName(metricName, options = {}) {
183
+ const { limit = 100, offset = 0 } = options;
184
+ const rows = this.statements.getMetricsByName.all(metricName, limit, offset);
185
+ return rows.map(row => this.deserializeMetric(row));
186
+ }
187
+ /**
188
+ * Get metrics within a time range
189
+ * @param start - Start timestamp
190
+ * @param end - End timestamp
191
+ * @param limit - Maximum results
192
+ * @returns Array of metrics
193
+ */
194
+ getMetricsByTimeRange(start, end, limit = 1000) {
195
+ const rows = this.db.prepare(`
196
+ SELECT * FROM quality_metrics
197
+ WHERE timestamp >= ? AND timestamp <= ?
198
+ ORDER BY timestamp DESC
199
+ LIMIT ?
200
+ `).all(start, end, limit);
201
+ return rows.map(row => this.deserializeMetric(row));
202
+ }
203
+ /**
204
+ * Aggregate metrics by period
205
+ * @param config - Aggregation configuration
206
+ * @returns Number of aggregated periods
207
+ */
208
+ aggregateByPeriod(config) {
209
+ const duration = PERIOD_DURATIONS[config.period];
210
+ const now = new Date();
211
+ // Calculate period boundaries
212
+ const periodStart = new Date(Math.floor(now.getTime() / duration) * duration - duration);
213
+ const periodEnd = new Date(periodStart.getTime() + duration);
214
+ // Build query conditions
215
+ let whereClause = 'WHERE timestamp >= ? AND timestamp < ?';
216
+ const params = [periodStart.toISOString(), periodEnd.toISOString()];
217
+ if (config.agentId) {
218
+ whereClause += ' AND agent_id = ?';
219
+ params.push(config.agentId);
220
+ }
221
+ if (config.metricName) {
222
+ whereClause += ' AND metric_name = ?';
223
+ params.push(config.metricName);
224
+ }
225
+ // Get aggregations grouped by agent and metric
226
+ const aggregations = this.db.prepare(`
227
+ SELECT
228
+ agent_id,
229
+ metric_name,
230
+ COUNT(*) as count,
231
+ SUM(metric_value) as sum,
232
+ MIN(metric_value) as min,
233
+ MAX(metric_value) as max,
234
+ AVG(metric_value) as avg
235
+ FROM quality_metrics
236
+ ${whereClause}
237
+ GROUP BY agent_id, metric_name
238
+ `).all(...params);
239
+ // Insert aggregated records
240
+ const insertAggregations = this.db.transaction((aggs) => {
241
+ for (const agg of aggs) {
242
+ this.statements.insertAggregated.run((0, uuid_1.v4)(), periodStart.toISOString(), periodEnd.toISOString(), agg.agent_id, agg.metric_name, agg.count, agg.sum, agg.min, agg.max, agg.avg);
243
+ }
244
+ return aggs.length;
245
+ });
246
+ return insertAggregations(aggregations);
247
+ }
248
+ /**
249
+ * Get aggregated metrics for a time period
250
+ * @param start - Period start
251
+ * @param end - Period end
252
+ * @returns Array of aggregated metrics
253
+ */
254
+ getAggregatedMetrics(start, end) {
255
+ const rows = this.statements.getAggregatedByPeriod.all(start, end);
256
+ return rows.map(row => this.deserializeAggregated(row));
257
+ }
258
+ /**
259
+ * Get metric trends over time
260
+ * @param metricName - Metric to analyze
261
+ * @param timeframe - Timeframe (e.g., '24h', '7d', '30d')
262
+ * @param agentId - Optional agent filter
263
+ * @returns Array of trend data points
264
+ */
265
+ getMetricTrends(metricName, timeframe, agentId) {
266
+ // Parse timeframe
267
+ const match = timeframe.match(/^(\d+)(h|d|m)$/);
268
+ if (!match) {
269
+ throw new Error(`Invalid timeframe: ${timeframe}`);
270
+ }
271
+ const value = parseInt(match[1], 10);
272
+ const unit = match[2];
273
+ let milliseconds;
274
+ switch (unit) {
275
+ case 'm':
276
+ milliseconds = value * 60 * 1000;
277
+ break;
278
+ case 'h':
279
+ milliseconds = value * 60 * 60 * 1000;
280
+ break;
281
+ case 'd':
282
+ milliseconds = value * 24 * 60 * 60 * 1000;
283
+ break;
284
+ default:
285
+ throw new Error(`Invalid time unit: ${unit}`);
286
+ }
287
+ const end = new Date();
288
+ const start = new Date(end.getTime() - milliseconds);
289
+ // Build query
290
+ let query = `
291
+ SELECT
292
+ strftime('%Y-%m-%dT%H:00:00', timestamp) as hour,
293
+ AVG(metric_value) as value,
294
+ COUNT(*) as count
295
+ FROM quality_metrics
296
+ WHERE metric_name = ? AND timestamp >= ? AND timestamp <= ?
297
+ `;
298
+ const params = [metricName, start.toISOString(), end.toISOString()];
299
+ if (agentId) {
300
+ query += ' AND agent_id = ?';
301
+ params.push(agentId);
302
+ }
303
+ query += ' GROUP BY hour ORDER BY hour ASC';
304
+ const rows = this.db.prepare(query).all(...params);
305
+ return rows.map(row => ({
306
+ timestamp: row.hour,
307
+ value: row.value,
308
+ count: row.count,
309
+ }));
310
+ }
311
+ /**
312
+ * Get agent performance summary
313
+ * @param agentId - Agent identifier
314
+ * @param timeframe - Optional timeframe filter
315
+ * @returns Agent performance data
316
+ */
317
+ getAgentPerformance(agentId, timeframe) {
318
+ let whereClause = 'WHERE agent_id = ?';
319
+ const params = [agentId];
320
+ if (timeframe) {
321
+ const match = timeframe.match(/^(\d+)(h|d|m)$/);
322
+ if (match) {
323
+ const value = parseInt(match[1], 10);
324
+ const unit = match[2];
325
+ let milliseconds;
326
+ switch (unit) {
327
+ case 'm':
328
+ milliseconds = value * 60 * 1000;
329
+ break;
330
+ case 'h':
331
+ milliseconds = value * 60 * 60 * 1000;
332
+ break;
333
+ case 'd':
334
+ milliseconds = value * 24 * 60 * 60 * 1000;
335
+ break;
336
+ default:
337
+ milliseconds = 24 * 60 * 60 * 1000;
338
+ }
339
+ const cutoff = new Date(Date.now() - milliseconds).toISOString();
340
+ whereClause += ' AND timestamp >= ?';
341
+ params.push(cutoff);
342
+ }
343
+ }
344
+ // Get metric aggregations
345
+ const metricRows = this.db.prepare(`
346
+ SELECT metric_name, AVG(metric_value) as avg_value
347
+ FROM quality_metrics
348
+ ${whereClause}
349
+ GROUP BY metric_name
350
+ `).all(...params);
351
+ const metrics = {};
352
+ for (const row of metricRows) {
353
+ metrics[row.metric_name] = row.avg_value;
354
+ }
355
+ // Calculate performance stats
356
+ const totalEvents = this.db.prepare(`
357
+ SELECT COUNT(*) as count
358
+ FROM quality_metrics
359
+ ${whereClause}
360
+ `).get(...params);
361
+ // Duration and success rate from specific metrics
362
+ const avgDuration = metrics['duration_ms'] || 0;
363
+ const successRate = metrics['success_rate'] || 1.0;
364
+ return {
365
+ agent_id: agentId,
366
+ total_events: totalEvents.count,
367
+ avg_duration_ms: avgDuration,
368
+ success_rate: successRate,
369
+ metrics,
370
+ };
371
+ }
372
+ /**
373
+ * Get all unique metric names
374
+ * @returns Array of metric names
375
+ */
376
+ getMetricNames() {
377
+ const rows = this.db.prepare(`
378
+ SELECT DISTINCT metric_name FROM quality_metrics
379
+ ORDER BY metric_name
380
+ `).all();
381
+ return rows.map(row => row.metric_name);
382
+ }
383
+ /**
384
+ * Get metric statistics
385
+ * @param metricName - Metric name
386
+ * @returns Statistics for the metric
387
+ */
388
+ getMetricStatistics(metricName) {
389
+ const stats = this.db.prepare(`
390
+ SELECT
391
+ COUNT(*) as count,
392
+ MIN(metric_value) as min,
393
+ MAX(metric_value) as max,
394
+ AVG(metric_value) as avg
395
+ FROM quality_metrics
396
+ WHERE metric_name = ?
397
+ `).get(metricName);
398
+ // Calculate standard deviation
399
+ const stddevResult = this.db.prepare(`
400
+ SELECT
401
+ SQRT(AVG((metric_value - ?) * (metric_value - ?))) as stddev
402
+ FROM quality_metrics
403
+ WHERE metric_name = ?
404
+ `).get(stats.avg, stats.avg, metricName);
405
+ // Get percentiles (approximate using order)
406
+ const values = this.db.prepare(`
407
+ SELECT metric_value
408
+ FROM quality_metrics
409
+ WHERE metric_name = ?
410
+ ORDER BY metric_value ASC
411
+ `).all(metricName);
412
+ const getPercentile = (p) => {
413
+ if (values.length === 0)
414
+ return 0;
415
+ const index = Math.floor((p / 100) * values.length);
416
+ return values[Math.min(index, values.length - 1)].metric_value;
417
+ };
418
+ return {
419
+ count: stats.count,
420
+ min: stats.min || 0,
421
+ max: stats.max || 0,
422
+ avg: stats.avg || 0,
423
+ stddev: stddevResult.stddev || 0,
424
+ p50: getPercentile(50),
425
+ p90: getPercentile(90),
426
+ p99: getPercentile(99),
427
+ };
428
+ }
429
+ /**
430
+ * Compare metric across agents
431
+ * @param metricName - Metric to compare
432
+ * @param limit - Maximum agents to return
433
+ * @returns Agent comparison data
434
+ */
435
+ compareAgents(metricName, limit = 10) {
436
+ const rows = this.db.prepare(`
437
+ SELECT
438
+ agent_id,
439
+ AVG(metric_value) as avg,
440
+ COUNT(*) as count
441
+ FROM quality_metrics
442
+ WHERE metric_name = ?
443
+ GROUP BY agent_id
444
+ ORDER BY avg DESC
445
+ LIMIT ?
446
+ `).all(metricName, limit);
447
+ return rows;
448
+ }
449
+ /**
450
+ * Delete metrics older than specified date
451
+ * @param olderThan - ISO timestamp cutoff
452
+ * @returns Number of deleted metrics
453
+ */
454
+ deleteMetricsOlderThan(olderThan) {
455
+ const result = this.db.prepare(`
456
+ DELETE FROM quality_metrics WHERE timestamp < ?
457
+ `).run(olderThan);
458
+ return result.changes;
459
+ }
460
+ /**
461
+ * Delete aggregated metrics older than specified date
462
+ * @param olderThan - ISO timestamp cutoff
463
+ * @returns Number of deleted records
464
+ */
465
+ deleteAggregatedOlderThan(olderThan) {
466
+ const result = this.db.prepare(`
467
+ DELETE FROM aggregated_metrics WHERE period_end < ?
468
+ `).run(olderThan);
469
+ return result.changes;
470
+ }
471
+ /**
472
+ * Get overall statistics
473
+ * @returns Aggregator statistics
474
+ */
475
+ getStatistics() {
476
+ const stats = this.db.prepare(`
477
+ SELECT
478
+ (SELECT COUNT(*) FROM quality_metrics) as totalMetrics,
479
+ (SELECT COUNT(*) FROM aggregated_metrics) as totalAggregated,
480
+ (SELECT COUNT(DISTINCT agent_id) FROM quality_metrics) as uniqueAgents,
481
+ (SELECT COUNT(DISTINCT metric_name) FROM quality_metrics) as uniqueMetricNames,
482
+ (SELECT MIN(timestamp) FROM quality_metrics) as oldestMetric,
483
+ (SELECT MAX(timestamp) FROM quality_metrics) as newestMetric
484
+ `).get();
485
+ return stats;
486
+ }
487
+ /**
488
+ * Close database connection
489
+ */
490
+ close() {
491
+ (0, schema_1.closeDatabase)(this.db);
492
+ }
493
+ }
494
+ exports.MetricsAggregator = MetricsAggregator;
495
+ //# sourceMappingURL=metrics-aggregator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics-aggregator.js","sourceRoot":"","sources":["../../src/persistence/metrics-aggregator.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,+BAAoC;AACpC,qCAWkB;AAoBlB;;GAEG;AACH,MAAM,gBAAgB,GAAsC;IAC1D,MAAM,EAAE,EAAE,GAAG,IAAI;IACjB,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;IACrB,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;IACvB,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;CAC5B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAa,iBAAiB;IAW5B;;;OAGG;IACH,YAAY,SAAqC,EAAE;QACjD,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,mCAA0B,EAAE,GAAG,MAAM,EAAE,CAAC;QAC3D,IAAI,CAAC,EAAE,GAAG,IAAA,uBAAc,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7C,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;OAG7B,CAAC;YAEF,gBAAgB,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;OAGjC,CAAC;YAEF,iBAAiB,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;OAKlC,CAAC;YAEF,gBAAgB,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;OAKjC,CAAC;YAEF,qBAAqB,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;OAItC,CAAC;SACH,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,GAA4B;QACpD,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAY;YACpB,SAAS,EAAE,GAAG,CAAC,SAAmB;YAClC,QAAQ,EAAE,GAAG,CAAC,QAAkB;YAChC,WAAW,EAAE,GAAG,CAAC,WAAqB;YACtC,YAAY,EAAE,GAAG,CAAC,YAAsB;YACxC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAoB,CAAC;SACjD,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,GAA4B;QACxD,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAY;YACpB,YAAY,EAAE,GAAG,CAAC,YAAsB;YACxC,UAAU,EAAE,GAAG,CAAC,UAAoB;YACpC,QAAQ,EAAE,GAAG,CAAC,QAAkB;YAChC,WAAW,EAAE,GAAG,CAAC,WAAqB;YACtC,KAAK,EAAE,GAAG,CAAC,KAAe;YAC1B,GAAG,EAAE,GAAG,CAAC,GAAa;YACtB,GAAG,EAAE,GAAG,CAAC,GAAa;YACtB,GAAG,EAAE,GAAG,CAAC,GAAa;YACtB,GAAG,EAAE,GAAG,CAAC,GAAa;SACvB,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,KAAwB;QACnC,MAAM,EAAE,GAAG,IAAA,SAAM,GAAE,CAAC;QACpB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QAE1D,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;QAC1C,OAAO,OAAO,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC;gBACH,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,CAC9B,EAAE,EACF,SAAS,EACT,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,UAAU,CACX,CAAC;gBACF,MAAM;YACR,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,OAAO,EAAE,CAAC;gBACV,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;oBAClB,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC5E,MAAM,IAAI,KAAK,CAAC,0CAA0C,YAAY,EAAE,CAAC,CAAC;gBAC5E,CAAC;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,EAAE,CAAC;oBAChC,kCAAkC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,EAAE;YACF,SAAS;YACT,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;SACnC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,MAA2B;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,KAA0B,EAAE,EAAE;YACpE,MAAM,OAAO,GAAoB,EAAE,CAAC;YACpC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACxC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,OAAe,EAAE,UAA8B,EAAE;QACjE,MAAM,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;QAE5C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAA8B,CAAC;QACxG,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;;;;OAKG;IACH,gBAAgB,CAAC,UAAkB,EAAE,UAA8B,EAAE;QACnE,MAAM,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;QAE5C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAA8B,CAAC;QAC1G,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;;;;;OAMG;IACH,qBAAqB,CAAC,KAAa,EAAE,GAAW,EAAE,QAAgB,IAAI;QACpE,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;KAK5B,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAA8B,CAAC;QAEvD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,MAAyB;QACzC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,8BAA8B;QAC9B,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC;QACzF,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC;QAE7D,yBAAyB;QACzB,IAAI,WAAW,GAAG,wCAAwC,CAAC;QAC3D,MAAM,MAAM,GAAwB,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QAEzF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,WAAW,IAAI,mBAAmB,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,WAAW,IAAI,sBAAsB,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACjC,CAAC;QAED,+CAA+C;QAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;QAUjC,WAAW;;KAEd,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAQd,CAAC;QAEH,4BAA4B;QAC5B,MAAM,kBAAkB,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,IAAyB,EAAE,EAAE;YAC3E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAClC,IAAA,SAAM,GAAE,EACR,WAAW,CAAC,WAAW,EAAE,EACzB,SAAS,CAAC,WAAW,EAAE,EACvB,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,GAAG,EACP,GAAG,CAAC,GAAG,EACP,GAAG,CAAC,GAAG,EACP,GAAG,CAAC,GAAG,CACR,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,OAAO,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACH,oBAAoB,CAAC,KAAa,EAAE,GAAW;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAA8B,CAAC;QAChG,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;OAMG;IACH,eAAe,CAAC,UAAkB,EAAE,SAAiB,EAAE,OAAgB;QACrE,kBAAkB;QAClB,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,YAAoB,CAAC;QAEzB,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,GAAG;gBACN,YAAY,GAAG,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC;gBACjC,MAAM;YACR,KAAK,GAAG;gBACN,YAAY,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;gBACtC,MAAM;YACR,KAAK,GAAG;gBACN,YAAY,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;gBAC3C,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC,CAAC;QAErD,cAAc;QACd,IAAI,KAAK,GAAG;;;;;;;KAOX,CAAC;QACF,MAAM,MAAM,GAAwB,CAAC,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAEzF,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,IAAI,mBAAmB,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QAED,KAAK,IAAI,kCAAkC,CAAC;QAE5C,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAI/C,CAAC;QAEH,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACtB,SAAS,EAAE,GAAG,CAAC,IAAI;YACnB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,KAAK,EAAE,GAAG,CAAC,KAAK;SACjB,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;;;OAKG;IACH,mBAAmB,CAAC,OAAe,EAAE,SAAkB;QACrD,IAAI,WAAW,GAAG,oBAAoB,CAAC;QACvC,MAAM,MAAM,GAAwB,CAAC,OAAO,CAAC,CAAC;QAE9C,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAChD,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,YAAoB,CAAC;gBAEzB,QAAQ,IAAI,EAAE,CAAC;oBACb,KAAK,GAAG;wBACN,YAAY,GAAG,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC;wBACjC,MAAM;oBACR,KAAK,GAAG;wBACN,YAAY,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;wBACtC,MAAM;oBACR,KAAK,GAAG;wBACN,YAAY,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;wBAC3C,MAAM;oBACR;wBACE,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;gBACvC,CAAC;gBAED,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;gBACjE,WAAW,IAAI,qBAAqB,CAAC;gBACrC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;QAG/B,WAAW;;KAEd,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAsD,CAAC;QAEvE,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC;QAC3C,CAAC;QAED,8BAA8B;QAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;QAGhC,WAAW;KACd,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAsB,CAAC;QAEvC,kDAAkD;QAClD,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC;QAEnD,OAAO;YACL,QAAQ,EAAE,OAAO;YACjB,YAAY,EAAE,WAAW,CAAC,KAAK;YAC/B,eAAe,EAAE,WAAW;YAC5B,YAAY,EAAE,WAAW;YACzB,OAAO;SACR,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,cAAc;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAG5B,CAAC,CAAC,GAAG,EAAoC,CAAC;QAE3C,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACH,mBAAmB,CAAC,UAAkB;QAUpC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;KAQ7B,CAAC,CAAC,GAAG,CAAC,UAAU,CAA6D,CAAC;QAE/E,+BAA+B;QAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;KAKpC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,UAAU,CAAuB,CAAC;QAE/D,4CAA4C;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;KAK9B,CAAC,CAAC,GAAG,CAAC,UAAU,CAAoC,CAAC;QAEtD,MAAM,aAAa,GAAG,CAAC,CAAS,EAAU,EAAE;YAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;YAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YACpD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QACjE,CAAC,CAAC;QAEF,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;YACnB,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;YACnB,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;YACnB,MAAM,EAAE,YAAY,CAAC,MAAM,IAAI,CAAC;YAChC,GAAG,EAAE,aAAa,CAAC,EAAE,CAAC;YACtB,GAAG,EAAE,aAAa,CAAC,EAAE,CAAC;YACtB,GAAG,EAAE,aAAa,CAAC,EAAE,CAAC;SACvB,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,aAAa,CAAC,UAAkB,EAAE,QAAgB,EAAE;QAKlD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;KAU5B,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAItB,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,sBAAsB,CAAC,SAAiB;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAE9B,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAElB,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,yBAAyB,CAAC,SAAiB;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAE9B,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAElB,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,aAAa;QAQX,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;KAQ7B,CAAC,CAAC,GAAG,EAOL,CAAC;QAEF,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAA,sBAAa,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;CACF;AAtkBD,8CAskBC"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * @fileoverview Reasoning chain store for capturing agent reasoning processes
3
+ * @module persistence/reasoning-store
4
+ */
5
+ import { ReasoningChain, ReasoningStep, ReasoningChainWithSteps, StartChainInput, AddStepInput, ChainStatus, ThoughtType, PersistenceConfig } from './schema';
6
+ /**
7
+ * Query options for reasoning chains
8
+ */
9
+ export interface ChainQueryOptions {
10
+ limit?: number;
11
+ offset?: number;
12
+ status?: ChainStatus;
13
+ includeSteps?: boolean;
14
+ }
15
+ /**
16
+ * ReasoningStore captures and persists agent reasoning processes
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const store = new ReasoningStore({ dbPath: './data/reasoning.db' });
21
+ *
22
+ * // Start a reasoning chain
23
+ * const chain = store.startChain({
24
+ * session_id: 'session-123',
25
+ * agent_id: 'test-generator',
26
+ * context: { task: 'Generate unit tests' }
27
+ * });
28
+ *
29
+ * // Add reasoning steps
30
+ * store.addStep({
31
+ * chain_id: chain.id,
32
+ * thought_type: 'observation',
33
+ * content: 'Analyzing source code structure...',
34
+ * confidence: 0.9,
35
+ * token_count: 150
36
+ * });
37
+ *
38
+ * // Complete the chain
39
+ * store.completeChain(chain.id, 'completed');
40
+ * ```
41
+ */
42
+ export declare class ReasoningStore {
43
+ private db;
44
+ private config;
45
+ private statements;
46
+ /**
47
+ * Create a new ReasoningStore instance
48
+ * @param config - Persistence configuration
49
+ */
50
+ constructor(config?: Partial<PersistenceConfig>);
51
+ /**
52
+ * Prepare SQL statements for performance
53
+ */
54
+ private prepareStatements;
55
+ /**
56
+ * Deserialize chain record from database row
57
+ */
58
+ private deserializeChain;
59
+ /**
60
+ * Deserialize step record from database row
61
+ */
62
+ private deserializeStep;
63
+ /**
64
+ * Start a new reasoning chain
65
+ * @param input - Chain creation input
66
+ * @returns Created chain record
67
+ */
68
+ startChain(input: StartChainInput): ReasoningChain;
69
+ /**
70
+ * Add a reasoning step to a chain
71
+ * @param input - Step creation input
72
+ * @returns Created step record
73
+ */
74
+ addStep(input: AddStepInput): ReasoningStep;
75
+ /**
76
+ * Complete a reasoning chain
77
+ * @param chainId - Chain identifier
78
+ * @param status - Final status (completed, failed, abandoned)
79
+ * @returns Updated chain record
80
+ */
81
+ completeChain(chainId: string, status?: ChainStatus): ReasoningChain | null;
82
+ /**
83
+ * Get chain by ID
84
+ * @param chainId - Chain identifier
85
+ * @returns Chain record or null
86
+ */
87
+ getChainById(chainId: string): ReasoningChain | null;
88
+ /**
89
+ * Get chain with all steps
90
+ * @param chainId - Chain identifier
91
+ * @returns Chain with steps or null
92
+ */
93
+ getChainWithSteps(chainId: string): ReasoningChainWithSteps | null;
94
+ /**
95
+ * Get chains by session ID
96
+ * @param sessionId - Session identifier
97
+ * @param options - Query options
98
+ * @returns Array of chains
99
+ */
100
+ getChainsBySession(sessionId: string, options?: ChainQueryOptions): ReasoningChain[] | ReasoningChainWithSteps[];
101
+ /**
102
+ * Get chains by agent ID
103
+ * @param agentId - Agent identifier
104
+ * @param options - Query options
105
+ * @returns Array of chains
106
+ */
107
+ getChainsByAgent(agentId: string, options?: ChainQueryOptions): ReasoningChain[];
108
+ /**
109
+ * Get chains by status
110
+ * @param status - Chain status
111
+ * @param limit - Maximum results
112
+ * @returns Array of chains
113
+ */
114
+ getChainsByStatus(status: ChainStatus, limit?: number): ReasoningChain[];
115
+ /**
116
+ * Get step count for a chain
117
+ * @param chainId - Chain identifier
118
+ * @returns Number of steps
119
+ */
120
+ getStepCount(chainId: string): number;
121
+ /**
122
+ * Get total token count for a chain
123
+ * @param chainId - Chain identifier
124
+ * @returns Total tokens used
125
+ */
126
+ getTotalTokens(chainId: string): number;
127
+ /**
128
+ * Get average confidence for a chain
129
+ * @param chainId - Chain identifier
130
+ * @returns Average confidence score
131
+ */
132
+ getAverageConfidence(chainId: string): number;
133
+ /**
134
+ * Get steps by thought type
135
+ * @param thoughtType - Type of thought
136
+ * @param limit - Maximum results
137
+ * @returns Array of steps
138
+ */
139
+ getStepsByType(thoughtType: ThoughtType, limit?: number): ReasoningStep[];
140
+ /**
141
+ * Search chains by context
142
+ * @param key - Context key to search
143
+ * @param value - Value to match
144
+ * @param limit - Maximum results
145
+ * @returns Matching chains
146
+ */
147
+ searchByContext(key: string, value: string, limit?: number): ReasoningChain[];
148
+ /**
149
+ * Get reasoning chain statistics
150
+ * @returns Statistics about stored chains
151
+ */
152
+ getStatistics(): {
153
+ totalChains: number;
154
+ totalSteps: number;
155
+ completedChains: number;
156
+ failedChains: number;
157
+ avgStepsPerChain: number;
158
+ avgTokensPerChain: number;
159
+ avgConfidence: number;
160
+ };
161
+ /**
162
+ * Delete completed chains older than specified date
163
+ * @param olderThan - ISO timestamp cutoff
164
+ * @returns Number of deleted chains
165
+ */
166
+ deleteOldChains(olderThan: string): number;
167
+ /**
168
+ * Export chain as JSON for analysis
169
+ * @param chainId - Chain identifier
170
+ * @returns JSON-serializable chain data
171
+ */
172
+ exportChain(chainId: string): Record<string, unknown> | null;
173
+ /**
174
+ * Close database connection
175
+ */
176
+ close(): void;
177
+ }
178
+ //# sourceMappingURL=reasoning-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reasoning-store.d.ts","sourceRoot":"","sources":["../../src/persistence/reasoning-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACL,cAAc,EACd,aAAa,EACb,uBAAuB,EACvB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,WAAW,EACX,iBAAiB,EAIlB,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,UAAU,CAUhB;IAEF;;;OAGG;gBACS,MAAM,GAAE,OAAO,CAAC,iBAAiB,CAAM;IAMnD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsDzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;;;OAIG;IACH,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,cAAc;IAyClD;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa;IAkD3C;;;;;OAKG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,WAAyB,GAAG,cAAc,GAAG,IAAI;IAQxF;;;;OAIG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAKpD;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI;IAUlE;;;;;OAKG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,cAAc,EAAE,GAAG,uBAAuB,EAAE;IAiBpH;;;;;OAKG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,cAAc,EAAE;IAOpF;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,GAAE,MAAY,GAAG,cAAc,EAAE;IAW7E;;;;OAIG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAKrC;;;;OAIG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAUvC;;;;OAIG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAU7C;;;;;OAKG;IACH,cAAc,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,GAAE,MAAY,GAAG,aAAa,EAAE;IAW9E;;;;;;OAMG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAY,GAAG,cAAc,EAAE;IAYlF;;;OAGG;IACH,aAAa,IAAI;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,aAAa,EAAE,MAAM,CAAC;KACvB;IAgCD;;;;OAIG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAkB1C;;;;OAIG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IA0B5D;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}