agentic-qe 2.3.3 → 2.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +122 -0
- package/README.md +1 -1
- package/dist/agents/ApiContractValidatorAgent.d.ts +5 -0
- package/dist/agents/ApiContractValidatorAgent.d.ts.map +1 -1
- package/dist/agents/ApiContractValidatorAgent.js +41 -0
- package/dist/agents/ApiContractValidatorAgent.js.map +1 -1
- package/dist/agents/BaseAgent.d.ts +10 -0
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +113 -0
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/CodeComplexityAnalyzerAgent.d.ts +5 -0
- package/dist/agents/CodeComplexityAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CodeComplexityAnalyzerAgent.js +47 -0
- package/dist/agents/CodeComplexityAnalyzerAgent.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.d.ts +26 -0
- package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +149 -1
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/DeploymentReadinessAgent.d.ts +5 -0
- package/dist/agents/DeploymentReadinessAgent.d.ts.map +1 -1
- package/dist/agents/DeploymentReadinessAgent.js +41 -0
- package/dist/agents/DeploymentReadinessAgent.js.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.d.ts +5 -0
- package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.js +40 -0
- package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
- package/dist/agents/FleetCommanderAgent.d.ts +5 -0
- package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
- package/dist/agents/FleetCommanderAgent.js +51 -0
- package/dist/agents/FleetCommanderAgent.js.map +1 -1
- package/dist/agents/PerformanceTesterAgent.d.ts +5 -0
- package/dist/agents/PerformanceTesterAgent.d.ts.map +1 -1
- package/dist/agents/PerformanceTesterAgent.js +44 -0
- package/dist/agents/PerformanceTesterAgent.js.map +1 -1
- package/dist/agents/ProductionIntelligenceAgent.d.ts +5 -0
- package/dist/agents/ProductionIntelligenceAgent.d.ts.map +1 -1
- package/dist/agents/ProductionIntelligenceAgent.js +46 -0
- package/dist/agents/ProductionIntelligenceAgent.js.map +1 -1
- package/dist/agents/QXPartnerAgent.js +52 -0
- package/dist/agents/QXPartnerAgent.js.map +1 -1
- package/dist/agents/QualityAnalyzerAgent.d.ts +5 -0
- package/dist/agents/QualityAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/QualityAnalyzerAgent.js +45 -0
- package/dist/agents/QualityAnalyzerAgent.js.map +1 -1
- package/dist/agents/QualityGateAgent.d.ts +40 -0
- package/dist/agents/QualityGateAgent.d.ts.map +1 -1
- package/dist/agents/QualityGateAgent.js +227 -1
- package/dist/agents/QualityGateAgent.js.map +1 -1
- package/dist/agents/RegressionRiskAnalyzerAgent.d.ts +5 -0
- package/dist/agents/RegressionRiskAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/RegressionRiskAnalyzerAgent.js +46 -0
- package/dist/agents/RegressionRiskAnalyzerAgent.js.map +1 -1
- package/dist/agents/RequirementsValidatorAgent.d.ts +5 -0
- package/dist/agents/RequirementsValidatorAgent.d.ts.map +1 -1
- package/dist/agents/RequirementsValidatorAgent.js +42 -0
- package/dist/agents/RequirementsValidatorAgent.js.map +1 -1
- package/dist/agents/SecurityScannerAgent.d.ts +5 -0
- package/dist/agents/SecurityScannerAgent.d.ts.map +1 -1
- package/dist/agents/SecurityScannerAgent.js +39 -0
- package/dist/agents/SecurityScannerAgent.js.map +1 -1
- package/dist/agents/TestDataArchitectAgent.d.ts +5 -0
- package/dist/agents/TestDataArchitectAgent.d.ts.map +1 -1
- package/dist/agents/TestDataArchitectAgent.js +46 -0
- package/dist/agents/TestDataArchitectAgent.js.map +1 -1
- package/dist/agents/TestExecutorAgent.d.ts +5 -0
- package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
- package/dist/agents/TestExecutorAgent.js +48 -0
- package/dist/agents/TestExecutorAgent.js.map +1 -1
- package/dist/agents/TestGeneratorAgent.d.ts +5 -0
- package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
- package/dist/agents/TestGeneratorAgent.js +36 -0
- package/dist/agents/TestGeneratorAgent.js.map +1 -1
- package/dist/agents/lifecycle/AgentLifecycleManager.d.ts.map +1 -1
- package/dist/agents/lifecycle/AgentLifecycleManager.js +5 -2
- package/dist/agents/lifecycle/AgentLifecycleManager.js.map +1 -1
- package/dist/cli/commands/dream/index.d.ts +50 -0
- package/dist/cli/commands/dream/index.d.ts.map +1 -0
- package/dist/cli/commands/dream/index.js +282 -0
- package/dist/cli/commands/dream/index.js.map +1 -0
- package/dist/cli/commands/learn/index.d.ts +31 -5
- package/dist/cli/commands/learn/index.d.ts.map +1 -1
- package/dist/cli/commands/learn/index.js +183 -50
- package/dist/cli/commands/learn/index.js.map +1 -1
- package/dist/cli/commands/transfer/index.d.ts +55 -0
- package/dist/cli/commands/transfer/index.d.ts.map +1 -0
- package/dist/cli/commands/transfer/index.js +317 -0
- package/dist/cli/commands/transfer/index.js.map +1 -0
- package/dist/cli/index.js +224 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/index.d.ts.map +1 -1
- package/dist/cli/init/index.js +12 -4
- package/dist/cli/init/index.js.map +1 -1
- package/dist/cli/init/learning-init.d.ts +39 -0
- package/dist/cli/init/learning-init.d.ts.map +1 -0
- package/dist/cli/init/learning-init.js +239 -0
- package/dist/cli/init/learning-init.js.map +1 -0
- package/dist/core/memory/HNSWVectorMemory.js +1 -1
- package/dist/learning/baselines/BaselineCollector.d.ts +178 -0
- package/dist/learning/baselines/BaselineCollector.d.ts.map +1 -0
- package/dist/learning/baselines/BaselineCollector.js +398 -0
- package/dist/learning/baselines/BaselineCollector.js.map +1 -0
- package/dist/learning/baselines/StandardTaskSuite.d.ts +88 -0
- package/dist/learning/baselines/StandardTaskSuite.d.ts.map +1 -0
- package/dist/learning/baselines/StandardTaskSuite.js +801 -0
- package/dist/learning/baselines/StandardTaskSuite.js.map +1 -0
- package/dist/learning/baselines/index.d.ts +10 -0
- package/dist/learning/baselines/index.d.ts.map +1 -0
- package/dist/learning/baselines/index.js +15 -0
- package/dist/learning/baselines/index.js.map +1 -0
- package/dist/learning/capture/ExecutionRecorder.d.ts +97 -0
- package/dist/learning/capture/ExecutionRecorder.d.ts.map +1 -0
- package/dist/learning/capture/ExecutionRecorder.js +195 -0
- package/dist/learning/capture/ExecutionRecorder.js.map +1 -0
- package/dist/learning/capture/ExperienceCapture.d.ts +177 -0
- package/dist/learning/capture/ExperienceCapture.d.ts.map +1 -0
- package/dist/learning/capture/ExperienceCapture.js +432 -0
- package/dist/learning/capture/ExperienceCapture.js.map +1 -0
- package/dist/learning/capture/ExperienceExtractor.d.ts +219 -0
- package/dist/learning/capture/ExperienceExtractor.d.ts.map +1 -0
- package/dist/learning/capture/ExperienceExtractor.js +536 -0
- package/dist/learning/capture/ExperienceExtractor.js.map +1 -0
- package/dist/learning/capture/ExperienceStore.d.ts +196 -0
- package/dist/learning/capture/ExperienceStore.d.ts.map +1 -0
- package/dist/learning/capture/ExperienceStore.js +453 -0
- package/dist/learning/capture/ExperienceStore.js.map +1 -0
- package/dist/learning/capture/index.d.ts +12 -0
- package/dist/learning/capture/index.d.ts.map +1 -0
- package/dist/learning/capture/index.js +17 -0
- package/dist/learning/capture/index.js.map +1 -0
- package/dist/learning/dashboard/MetricsDashboard.d.ts +63 -0
- package/dist/learning/dashboard/MetricsDashboard.d.ts.map +1 -0
- package/dist/learning/dashboard/MetricsDashboard.js +230 -0
- package/dist/learning/dashboard/MetricsDashboard.js.map +1 -0
- package/dist/learning/dashboard/index.d.ts +7 -0
- package/dist/learning/dashboard/index.d.ts.map +1 -0
- package/dist/learning/dashboard/index.js +23 -0
- package/dist/learning/dashboard/index.js.map +1 -0
- package/dist/learning/dream/ConceptGraph.d.ts +160 -0
- package/dist/learning/dream/ConceptGraph.d.ts.map +1 -0
- package/dist/learning/dream/ConceptGraph.js +445 -0
- package/dist/learning/dream/ConceptGraph.js.map +1 -0
- package/dist/learning/dream/DreamEngine.d.ts +150 -0
- package/dist/learning/dream/DreamEngine.d.ts.map +1 -0
- package/dist/learning/dream/DreamEngine.js +551 -0
- package/dist/learning/dream/DreamEngine.js.map +1 -0
- package/dist/learning/dream/InsightGenerator.d.ts +152 -0
- package/dist/learning/dream/InsightGenerator.d.ts.map +1 -0
- package/dist/learning/dream/InsightGenerator.js +463 -0
- package/dist/learning/dream/InsightGenerator.js.map +1 -0
- package/dist/learning/dream/SpreadingActivation.d.ts +138 -0
- package/dist/learning/dream/SpreadingActivation.d.ts.map +1 -0
- package/dist/learning/dream/SpreadingActivation.js +320 -0
- package/dist/learning/dream/SpreadingActivation.js.map +1 -0
- package/dist/learning/dream/index.d.ts +14 -0
- package/dist/learning/dream/index.d.ts.map +1 -0
- package/dist/learning/dream/index.js +22 -0
- package/dist/learning/dream/index.js.map +1 -0
- package/dist/learning/metrics/AlertManager.d.ts +107 -0
- package/dist/learning/metrics/AlertManager.d.ts.map +1 -0
- package/dist/learning/metrics/AlertManager.js +246 -0
- package/dist/learning/metrics/AlertManager.js.map +1 -0
- package/dist/learning/metrics/LearningMetrics.d.ts +184 -0
- package/dist/learning/metrics/LearningMetrics.d.ts.map +1 -0
- package/dist/learning/metrics/LearningMetrics.js +754 -0
- package/dist/learning/metrics/LearningMetrics.js.map +1 -0
- package/dist/learning/metrics/MetricsCollector.d.ts +108 -0
- package/dist/learning/metrics/MetricsCollector.d.ts.map +1 -0
- package/dist/learning/metrics/MetricsCollector.js +240 -0
- package/dist/learning/metrics/MetricsCollector.js.map +1 -0
- package/dist/learning/metrics/MetricsStore.d.ts +149 -0
- package/dist/learning/metrics/MetricsStore.d.ts.map +1 -0
- package/dist/learning/metrics/MetricsStore.js +502 -0
- package/dist/learning/metrics/MetricsStore.js.map +1 -0
- package/dist/learning/metrics/TrendAnalyzer.d.ts +85 -0
- package/dist/learning/metrics/TrendAnalyzer.d.ts.map +1 -0
- package/dist/learning/metrics/TrendAnalyzer.js +210 -0
- package/dist/learning/metrics/TrendAnalyzer.js.map +1 -0
- package/dist/learning/metrics/index.d.ts +13 -0
- package/dist/learning/metrics/index.d.ts.map +1 -0
- package/dist/learning/metrics/index.js +39 -0
- package/dist/learning/metrics/index.js.map +1 -0
- package/dist/learning/scheduler/IdleDetector.d.ts +126 -0
- package/dist/learning/scheduler/IdleDetector.d.ts.map +1 -0
- package/dist/learning/scheduler/IdleDetector.js +281 -0
- package/dist/learning/scheduler/IdleDetector.js.map +1 -0
- package/dist/learning/scheduler/SleepCycle.d.ts +150 -0
- package/dist/learning/scheduler/SleepCycle.d.ts.map +1 -0
- package/dist/learning/scheduler/SleepCycle.js +506 -0
- package/dist/learning/scheduler/SleepCycle.js.map +1 -0
- package/dist/learning/scheduler/SleepScheduler.d.ts +133 -0
- package/dist/learning/scheduler/SleepScheduler.d.ts.map +1 -0
- package/dist/learning/scheduler/SleepScheduler.js +301 -0
- package/dist/learning/scheduler/SleepScheduler.js.map +1 -0
- package/dist/learning/scheduler/TimeBasedTrigger.d.ts +108 -0
- package/dist/learning/scheduler/TimeBasedTrigger.d.ts.map +1 -0
- package/dist/learning/scheduler/TimeBasedTrigger.js +222 -0
- package/dist/learning/scheduler/TimeBasedTrigger.js.map +1 -0
- package/dist/learning/scheduler/index.d.ts +16 -0
- package/dist/learning/scheduler/index.d.ts.map +1 -0
- package/dist/learning/scheduler/index.js +23 -0
- package/dist/learning/scheduler/index.js.map +1 -0
- package/dist/learning/synthesis/ClusteringEngine.d.ts +122 -0
- package/dist/learning/synthesis/ClusteringEngine.d.ts.map +1 -0
- package/dist/learning/synthesis/ClusteringEngine.js +356 -0
- package/dist/learning/synthesis/ClusteringEngine.js.map +1 -0
- package/dist/learning/synthesis/PatternSynthesis.d.ts +162 -0
- package/dist/learning/synthesis/PatternSynthesis.d.ts.map +1 -0
- package/dist/learning/synthesis/PatternSynthesis.js +479 -0
- package/dist/learning/synthesis/PatternSynthesis.js.map +1 -0
- package/dist/learning/synthesis/index.d.ts +10 -0
- package/dist/learning/synthesis/index.d.ts.map +1 -0
- package/dist/learning/synthesis/index.js +14 -0
- package/dist/learning/synthesis/index.js.map +1 -0
- package/dist/learning/transfer/CompatibilityScorer.d.ts +115 -0
- package/dist/learning/transfer/CompatibilityScorer.d.ts.map +1 -0
- package/dist/learning/transfer/CompatibilityScorer.js +319 -0
- package/dist/learning/transfer/CompatibilityScorer.js.map +1 -0
- package/dist/learning/transfer/TransferProtocol.d.ts +172 -0
- package/dist/learning/transfer/TransferProtocol.d.ts.map +1 -0
- package/dist/learning/transfer/TransferProtocol.js +611 -0
- package/dist/learning/transfer/TransferProtocol.js.map +1 -0
- package/dist/learning/transfer/TransferPrototype.d.ts +93 -0
- package/dist/learning/transfer/TransferPrototype.d.ts.map +1 -0
- package/dist/learning/transfer/TransferPrototype.js +433 -0
- package/dist/learning/transfer/TransferPrototype.js.map +1 -0
- package/dist/learning/transfer/TransferRegistry.d.ts +245 -0
- package/dist/learning/transfer/TransferRegistry.d.ts.map +1 -0
- package/dist/learning/transfer/TransferRegistry.js +410 -0
- package/dist/learning/transfer/TransferRegistry.js.map +1 -0
- package/dist/learning/transfer/TransferValidator.d.ts +140 -0
- package/dist/learning/transfer/TransferValidator.d.ts.map +1 -0
- package/dist/learning/transfer/TransferValidator.js +413 -0
- package/dist/learning/transfer/TransferValidator.js.map +1 -0
- package/dist/learning/transfer/index.d.ts +14 -0
- package/dist/learning/transfer/index.d.ts.map +1 -0
- package/dist/learning/transfer/index.js +22 -0
- package/dist/learning/transfer/index.js.map +1 -0
- package/dist/mcp/handlers/task-orchestrate.d.ts +11 -0
- package/dist/mcp/handlers/task-orchestrate.d.ts.map +1 -1
- package/dist/mcp/handlers/task-orchestrate.js +297 -4
- package/dist/mcp/handlers/task-orchestrate.js.map +1 -1
- package/dist/mcp/handlers/test/test-generate-enhanced.d.ts +26 -2
- package/dist/mcp/handlers/test/test-generate-enhanced.d.ts.map +1 -1
- package/dist/mcp/handlers/test/test-generate-enhanced.js +159 -27
- package/dist/mcp/handlers/test/test-generate-enhanced.js.map +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +2 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/services/AgentRegistry.d.ts +6 -1
- package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
- package/dist/mcp/services/AgentRegistry.js +34 -3
- package/dist/mcp/services/AgentRegistry.js.map +1 -1
- package/package.json +5 -2
|
@@ -0,0 +1,502 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MetricsStore - Persist metrics to database for historical analysis
|
|
4
|
+
*
|
|
5
|
+
* Stores metric snapshots over time and provides queries for
|
|
6
|
+
* historical analysis, trend detection, and reporting.
|
|
7
|
+
*
|
|
8
|
+
* Part of the Nightly-Learner Phase 3 implementation.
|
|
9
|
+
*
|
|
10
|
+
* @version 1.0.0
|
|
11
|
+
* @module src/learning/metrics/MetricsStore
|
|
12
|
+
*/
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
+
var ownKeys = function(o) {
|
|
31
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
+
var ar = [];
|
|
33
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
+
return ar;
|
|
35
|
+
};
|
|
36
|
+
return ownKeys(o);
|
|
37
|
+
};
|
|
38
|
+
return function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
})();
|
|
46
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
47
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
48
|
+
};
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.MetricsStore = void 0;
|
|
51
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
const Logger_1 = require("../../utils/Logger");
|
|
54
|
+
const SecureRandom_1 = require("../../utils/SecureRandom");
|
|
55
|
+
const LearningMetrics_1 = require("./LearningMetrics");
|
|
56
|
+
/**
|
|
57
|
+
* MetricsStore persists and queries learning metrics over time
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* const store = new MetricsStore({ autoSnapshotInterval: 1 });
|
|
62
|
+
*
|
|
63
|
+
* // Capture current metrics
|
|
64
|
+
* await store.captureSnapshot();
|
|
65
|
+
*
|
|
66
|
+
* // Query historical metrics
|
|
67
|
+
* const history = await store.getHistory({
|
|
68
|
+
* startTime: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000), // Last 7 days
|
|
69
|
+
* limit: 100,
|
|
70
|
+
* });
|
|
71
|
+
*
|
|
72
|
+
* // Get rolling averages
|
|
73
|
+
* const rolling = await store.getRollingAverage('discoveryRate', 24); // 24-hour window
|
|
74
|
+
*
|
|
75
|
+
* // Analyze trends
|
|
76
|
+
* const trends = await store.getTrends(['discoveryRate', 'transferSuccessRate']);
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
class MetricsStore {
|
|
80
|
+
constructor(config) {
|
|
81
|
+
this.logger = Logger_1.Logger.getInstance();
|
|
82
|
+
this.config = {
|
|
83
|
+
dbPath: config?.dbPath || path.join(process.cwd(), '.agentic-qe', 'memory.db'),
|
|
84
|
+
autoSnapshotInterval: config?.autoSnapshotInterval ?? 1, // 1 hour
|
|
85
|
+
retentionDays: config?.retentionDays ?? 90,
|
|
86
|
+
debug: config?.debug ?? false,
|
|
87
|
+
};
|
|
88
|
+
this.db = new better_sqlite3_1.default(this.config.dbPath);
|
|
89
|
+
this.collector = new LearningMetrics_1.LearningMetrics({ dbPath: this.config.dbPath, debug: this.config.debug });
|
|
90
|
+
this.initializeSchema();
|
|
91
|
+
if (this.config.autoSnapshotInterval > 0) {
|
|
92
|
+
this.startAutoSnapshot();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Initialize database schema
|
|
97
|
+
*/
|
|
98
|
+
initializeSchema() {
|
|
99
|
+
this.db.exec(`
|
|
100
|
+
CREATE TABLE IF NOT EXISTS metrics_snapshots (
|
|
101
|
+
id TEXT PRIMARY KEY,
|
|
102
|
+
snapshot_time INTEGER NOT NULL,
|
|
103
|
+
period_hours INTEGER NOT NULL,
|
|
104
|
+
|
|
105
|
+
-- Discovery metrics
|
|
106
|
+
patterns_discovered_total INTEGER NOT NULL,
|
|
107
|
+
patterns_discovered_today INTEGER NOT NULL,
|
|
108
|
+
discovery_rate REAL NOT NULL,
|
|
109
|
+
|
|
110
|
+
-- Quality metrics
|
|
111
|
+
pattern_accuracy REAL NOT NULL,
|
|
112
|
+
insight_actionability REAL NOT NULL,
|
|
113
|
+
false_positive_rate REAL NOT NULL,
|
|
114
|
+
|
|
115
|
+
-- Transfer metrics
|
|
116
|
+
transfer_success_rate REAL NOT NULL,
|
|
117
|
+
adoption_rate REAL NOT NULL,
|
|
118
|
+
negative_transfer_count INTEGER NOT NULL,
|
|
119
|
+
|
|
120
|
+
-- Impact metrics
|
|
121
|
+
task_time_reduction REAL NOT NULL,
|
|
122
|
+
coverage_improvement REAL NOT NULL,
|
|
123
|
+
bug_detection_improvement REAL NOT NULL,
|
|
124
|
+
|
|
125
|
+
-- System health
|
|
126
|
+
sleep_cycle_completion_rate REAL NOT NULL,
|
|
127
|
+
avg_cycle_duration REAL NOT NULL,
|
|
128
|
+
error_rate REAL NOT NULL,
|
|
129
|
+
|
|
130
|
+
-- Metadata
|
|
131
|
+
calculated_at INTEGER NOT NULL,
|
|
132
|
+
period_start INTEGER NOT NULL,
|
|
133
|
+
period_end INTEGER NOT NULL,
|
|
134
|
+
created_at INTEGER NOT NULL
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
CREATE INDEX IF NOT EXISTS idx_metrics_snapshot_time ON metrics_snapshots(snapshot_time);
|
|
138
|
+
CREATE INDEX IF NOT EXISTS idx_metrics_calculated_at ON metrics_snapshots(calculated_at);
|
|
139
|
+
CREATE INDEX IF NOT EXISTS idx_metrics_period ON metrics_snapshots(period_start, period_end);
|
|
140
|
+
`);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Start auto-snapshot timer
|
|
144
|
+
*/
|
|
145
|
+
startAutoSnapshot() {
|
|
146
|
+
const intervalMs = this.config.autoSnapshotInterval * 60 * 60 * 1000;
|
|
147
|
+
this.autoSnapshotTimer = setInterval(async () => {
|
|
148
|
+
try {
|
|
149
|
+
await this.captureSnapshot();
|
|
150
|
+
await this.cleanupOldSnapshots();
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
this.logger.error('[MetricsStore] Auto-snapshot failed', { error });
|
|
154
|
+
}
|
|
155
|
+
}, intervalMs);
|
|
156
|
+
this.logger.info('[MetricsStore] Auto-snapshot enabled', {
|
|
157
|
+
interval: this.config.autoSnapshotInterval + 'h',
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Stop auto-snapshot timer
|
|
162
|
+
*/
|
|
163
|
+
stopAutoSnapshot() {
|
|
164
|
+
if (this.autoSnapshotTimer) {
|
|
165
|
+
clearInterval(this.autoSnapshotTimer);
|
|
166
|
+
this.autoSnapshotTimer = undefined;
|
|
167
|
+
this.logger.info('[MetricsStore] Auto-snapshot disabled');
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Capture a metrics snapshot
|
|
172
|
+
*/
|
|
173
|
+
async captureSnapshot(periodHours = 24) {
|
|
174
|
+
const metrics = await this.collector.getCurrentMetrics(periodHours);
|
|
175
|
+
const id = `snapshot-${Date.now()}-${SecureRandom_1.SecureRandom.randomString(8, 'alphanumeric')}`;
|
|
176
|
+
const snapshotTime = new Date();
|
|
177
|
+
// Store snapshot
|
|
178
|
+
this.db.prepare(`
|
|
179
|
+
INSERT INTO metrics_snapshots (
|
|
180
|
+
id, snapshot_time, period_hours,
|
|
181
|
+
patterns_discovered_total, patterns_discovered_today, discovery_rate,
|
|
182
|
+
pattern_accuracy, insight_actionability, false_positive_rate,
|
|
183
|
+
transfer_success_rate, adoption_rate, negative_transfer_count,
|
|
184
|
+
task_time_reduction, coverage_improvement, bug_detection_improvement,
|
|
185
|
+
sleep_cycle_completion_rate, avg_cycle_duration, error_rate,
|
|
186
|
+
calculated_at, period_start, period_end, created_at
|
|
187
|
+
) VALUES (
|
|
188
|
+
?, ?, ?,
|
|
189
|
+
?, ?, ?,
|
|
190
|
+
?, ?, ?,
|
|
191
|
+
?, ?, ?,
|
|
192
|
+
?, ?, ?,
|
|
193
|
+
?, ?, ?,
|
|
194
|
+
?, ?, ?, ?
|
|
195
|
+
)
|
|
196
|
+
`).run(id, snapshotTime.getTime(), periodHours, metrics.patternsDiscoveredTotal, metrics.patternsDiscoveredToday, metrics.discoveryRate, metrics.patternAccuracy, metrics.insightActionability, metrics.falsePositiveRate, metrics.transferSuccessRate, metrics.adoptionRate, metrics.negativeTransferCount, metrics.taskTimeReduction, metrics.coverageImprovement, metrics.bugDetectionImprovement, metrics.sleepCycleCompletionRate, metrics.avgCycleDuration, metrics.errorRate, metrics.calculatedAt.getTime(), metrics.periodStart.getTime(), metrics.periodEnd.getTime(), Date.now());
|
|
197
|
+
if (this.config.debug) {
|
|
198
|
+
this.logger.debug('[MetricsStore] Snapshot captured', {
|
|
199
|
+
id,
|
|
200
|
+
discoveryRate: metrics.discoveryRate,
|
|
201
|
+
transferSuccessRate: metrics.transferSuccessRate,
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
return {
|
|
205
|
+
id,
|
|
206
|
+
metrics,
|
|
207
|
+
snapshotTime,
|
|
208
|
+
periodHours,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Get historical snapshots
|
|
213
|
+
*/
|
|
214
|
+
async getHistory(query) {
|
|
215
|
+
const { startTime, endTime, limit = 100, orderBy = 'desc' } = query || {};
|
|
216
|
+
let sql = 'SELECT * FROM metrics_snapshots WHERE 1=1';
|
|
217
|
+
const params = [];
|
|
218
|
+
if (startTime) {
|
|
219
|
+
sql += ' AND snapshot_time >= ?';
|
|
220
|
+
params.push(startTime.getTime());
|
|
221
|
+
}
|
|
222
|
+
if (endTime) {
|
|
223
|
+
sql += ' AND snapshot_time <= ?';
|
|
224
|
+
params.push(endTime.getTime());
|
|
225
|
+
}
|
|
226
|
+
sql += ` ORDER BY snapshot_time ${orderBy.toUpperCase()} LIMIT ?`;
|
|
227
|
+
params.push(limit);
|
|
228
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
229
|
+
return rows.map(row => this.rowToSnapshot(row));
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Get latest snapshot
|
|
233
|
+
*/
|
|
234
|
+
async getLatest() {
|
|
235
|
+
const row = this.db.prepare(`
|
|
236
|
+
SELECT * FROM metrics_snapshots
|
|
237
|
+
ORDER BY snapshot_time DESC
|
|
238
|
+
LIMIT 1
|
|
239
|
+
`).get();
|
|
240
|
+
return row ? this.rowToSnapshot(row) : null;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Get rolling average for a metric
|
|
244
|
+
*/
|
|
245
|
+
async getRollingAverage(metricName, windowHours) {
|
|
246
|
+
const columnName = this.metricNameToColumn(metricName);
|
|
247
|
+
const windowMs = windowHours * 60 * 60 * 1000;
|
|
248
|
+
const now = Date.now();
|
|
249
|
+
// Get snapshots in window
|
|
250
|
+
const rows = this.db.prepare(`
|
|
251
|
+
SELECT snapshot_time, ${columnName} as value
|
|
252
|
+
FROM metrics_snapshots
|
|
253
|
+
WHERE snapshot_time >= ?
|
|
254
|
+
ORDER BY snapshot_time ASC
|
|
255
|
+
`).all(now - windowMs);
|
|
256
|
+
if (rows.length === 0)
|
|
257
|
+
return [];
|
|
258
|
+
// Calculate rolling average
|
|
259
|
+
const values = [];
|
|
260
|
+
for (let i = 0; i < rows.length; i++) {
|
|
261
|
+
const windowStart = rows[i].snapshot_time - windowMs;
|
|
262
|
+
const windowData = rows.filter(r => r.snapshot_time >= windowStart && r.snapshot_time <= rows[i].snapshot_time);
|
|
263
|
+
const avg = windowData.reduce((sum, r) => sum + (r.value || 0), 0) / windowData.length;
|
|
264
|
+
values.push(avg);
|
|
265
|
+
}
|
|
266
|
+
return values;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Get aggregated statistics for metrics
|
|
270
|
+
*/
|
|
271
|
+
async getAggregations(metricNames, query) {
|
|
272
|
+
const { startTime, endTime } = query || {};
|
|
273
|
+
const result = new Map();
|
|
274
|
+
for (const metricName of metricNames) {
|
|
275
|
+
const columnName = this.metricNameToColumn(metricName);
|
|
276
|
+
let sql = `
|
|
277
|
+
SELECT
|
|
278
|
+
AVG(${columnName}) as avg,
|
|
279
|
+
MIN(${columnName}) as min,
|
|
280
|
+
MAX(${columnName}) as max,
|
|
281
|
+
COUNT(*) as count
|
|
282
|
+
FROM metrics_snapshots
|
|
283
|
+
WHERE 1=1
|
|
284
|
+
`;
|
|
285
|
+
const params = [];
|
|
286
|
+
if (startTime) {
|
|
287
|
+
sql += ' AND snapshot_time >= ?';
|
|
288
|
+
params.push(startTime.getTime());
|
|
289
|
+
}
|
|
290
|
+
if (endTime) {
|
|
291
|
+
sql += ' AND snapshot_time <= ?';
|
|
292
|
+
params.push(endTime.getTime());
|
|
293
|
+
}
|
|
294
|
+
const row = this.db.prepare(sql).get(...params);
|
|
295
|
+
// Calculate standard deviation
|
|
296
|
+
let stdDev = 0;
|
|
297
|
+
if (row.count > 1) {
|
|
298
|
+
let varianceSql = `
|
|
299
|
+
SELECT
|
|
300
|
+
SUM((${columnName} - ?) * (${columnName} - ?)) / (COUNT(*) - 1) as variance
|
|
301
|
+
FROM metrics_snapshots
|
|
302
|
+
WHERE 1=1
|
|
303
|
+
`;
|
|
304
|
+
const varianceParams = [row.avg, row.avg];
|
|
305
|
+
if (startTime) {
|
|
306
|
+
varianceSql += ' AND snapshot_time >= ?';
|
|
307
|
+
varianceParams.push(startTime.getTime());
|
|
308
|
+
}
|
|
309
|
+
if (endTime) {
|
|
310
|
+
varianceSql += ' AND snapshot_time <= ?';
|
|
311
|
+
varianceParams.push(endTime.getTime());
|
|
312
|
+
}
|
|
313
|
+
const varianceRow = this.db.prepare(varianceSql).get(...varianceParams);
|
|
314
|
+
stdDev = Math.sqrt(varianceRow?.variance || 0);
|
|
315
|
+
}
|
|
316
|
+
// Calculate trend (linear regression slope)
|
|
317
|
+
const trend = await this.calculateTrend(columnName, query);
|
|
318
|
+
result.set(metricName, {
|
|
319
|
+
metric: metricName,
|
|
320
|
+
avg: row.avg || 0,
|
|
321
|
+
min: row.min || 0,
|
|
322
|
+
max: row.max || 0,
|
|
323
|
+
stdDev,
|
|
324
|
+
count: row.count || 0,
|
|
325
|
+
trend,
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
return result;
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Calculate trend using linear regression
|
|
332
|
+
*/
|
|
333
|
+
async calculateTrend(columnName, query) {
|
|
334
|
+
const { startTime, endTime } = query || {};
|
|
335
|
+
let sql = `
|
|
336
|
+
SELECT snapshot_time, ${columnName} as value
|
|
337
|
+
FROM metrics_snapshots
|
|
338
|
+
WHERE 1=1
|
|
339
|
+
`;
|
|
340
|
+
const params = [];
|
|
341
|
+
if (startTime) {
|
|
342
|
+
sql += ' AND snapshot_time >= ?';
|
|
343
|
+
params.push(startTime.getTime());
|
|
344
|
+
}
|
|
345
|
+
if (endTime) {
|
|
346
|
+
sql += ' AND snapshot_time <= ?';
|
|
347
|
+
params.push(endTime.getTime());
|
|
348
|
+
}
|
|
349
|
+
sql += ' ORDER BY snapshot_time ASC';
|
|
350
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
351
|
+
if (rows.length < 2)
|
|
352
|
+
return 0;
|
|
353
|
+
// Simple linear regression: y = mx + b, we return m (slope)
|
|
354
|
+
const n = rows.length;
|
|
355
|
+
let sumX = 0, sumY = 0, sumXY = 0, sumX2 = 0;
|
|
356
|
+
for (let i = 0; i < n; i++) {
|
|
357
|
+
const x = i; // Use index as x to normalize
|
|
358
|
+
const y = rows[i].value || 0;
|
|
359
|
+
sumX += x;
|
|
360
|
+
sumY += y;
|
|
361
|
+
sumXY += x * y;
|
|
362
|
+
sumX2 += x * x;
|
|
363
|
+
}
|
|
364
|
+
const slope = (n * sumXY - sumX * sumY) / (n * sumX2 - sumX * sumX);
|
|
365
|
+
return isFinite(slope) ? slope : 0;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Get trends for multiple metrics
|
|
369
|
+
*/
|
|
370
|
+
async getTrends(metricNames, query) {
|
|
371
|
+
const trends = new Map();
|
|
372
|
+
for (const metricName of metricNames) {
|
|
373
|
+
const columnName = this.metricNameToColumn(metricName);
|
|
374
|
+
const trend = await this.calculateTrend(columnName, query);
|
|
375
|
+
trends.set(metricName, trend);
|
|
376
|
+
}
|
|
377
|
+
return trends;
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Get metric comparison between two time periods
|
|
381
|
+
*/
|
|
382
|
+
async compareMetrics(metricNames, period1Start, period1End, period2Start, period2End) {
|
|
383
|
+
const result = new Map();
|
|
384
|
+
for (const metricName of metricNames) {
|
|
385
|
+
const columnName = this.metricNameToColumn(metricName);
|
|
386
|
+
const period1Row = this.db.prepare(`
|
|
387
|
+
SELECT AVG(${columnName}) as avg
|
|
388
|
+
FROM metrics_snapshots
|
|
389
|
+
WHERE snapshot_time >= ? AND snapshot_time <= ?
|
|
390
|
+
`).get(period1Start.getTime(), period1End.getTime());
|
|
391
|
+
const period2Row = this.db.prepare(`
|
|
392
|
+
SELECT AVG(${columnName}) as avg
|
|
393
|
+
FROM metrics_snapshots
|
|
394
|
+
WHERE snapshot_time >= ? AND snapshot_time <= ?
|
|
395
|
+
`).get(period2Start.getTime(), period2End.getTime());
|
|
396
|
+
const period1Avg = period1Row?.avg || 0;
|
|
397
|
+
const period2Avg = period2Row?.avg || 0;
|
|
398
|
+
const change = period2Avg - period1Avg;
|
|
399
|
+
const changePercent = period1Avg > 0 ? (change / period1Avg) * 100 : 0;
|
|
400
|
+
result.set(metricName, {
|
|
401
|
+
period1: period1Avg,
|
|
402
|
+
period2: period2Avg,
|
|
403
|
+
change,
|
|
404
|
+
changePercent,
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
return result;
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Clean up old snapshots based on retention policy
|
|
411
|
+
*/
|
|
412
|
+
async cleanupOldSnapshots() {
|
|
413
|
+
if (this.config.retentionDays === 0)
|
|
414
|
+
return 0;
|
|
415
|
+
const cutoffTime = Date.now() - this.config.retentionDays * 24 * 60 * 60 * 1000;
|
|
416
|
+
const result = this.db.prepare(`
|
|
417
|
+
DELETE FROM metrics_snapshots
|
|
418
|
+
WHERE snapshot_time < ?
|
|
419
|
+
`).run(cutoffTime);
|
|
420
|
+
const deleted = result.changes;
|
|
421
|
+
if (deleted > 0) {
|
|
422
|
+
this.logger.info('[MetricsStore] Cleaned up old snapshots', {
|
|
423
|
+
deleted,
|
|
424
|
+
retentionDays: this.config.retentionDays,
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
return deleted;
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Get snapshot count
|
|
431
|
+
*/
|
|
432
|
+
getSnapshotCount(query) {
|
|
433
|
+
const { startTime, endTime } = query || {};
|
|
434
|
+
let sql = 'SELECT COUNT(*) as count FROM metrics_snapshots WHERE 1=1';
|
|
435
|
+
const params = [];
|
|
436
|
+
if (startTime) {
|
|
437
|
+
sql += ' AND snapshot_time >= ?';
|
|
438
|
+
params.push(startTime.getTime());
|
|
439
|
+
}
|
|
440
|
+
if (endTime) {
|
|
441
|
+
sql += ' AND snapshot_time <= ?';
|
|
442
|
+
params.push(endTime.getTime());
|
|
443
|
+
}
|
|
444
|
+
const row = this.db.prepare(sql).get(...params);
|
|
445
|
+
return row?.count || 0;
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Export metrics to JSON
|
|
449
|
+
*/
|
|
450
|
+
async exportMetrics(query) {
|
|
451
|
+
return this.getHistory(query);
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Convert database row to MetricsSnapshot
|
|
455
|
+
*/
|
|
456
|
+
rowToSnapshot(row) {
|
|
457
|
+
const metrics = {
|
|
458
|
+
patternsDiscoveredTotal: row.patterns_discovered_total,
|
|
459
|
+
patternsDiscoveredToday: row.patterns_discovered_today,
|
|
460
|
+
discoveryRate: row.discovery_rate,
|
|
461
|
+
patternAccuracy: row.pattern_accuracy,
|
|
462
|
+
insightActionability: row.insight_actionability,
|
|
463
|
+
falsePositiveRate: row.false_positive_rate,
|
|
464
|
+
transferSuccessRate: row.transfer_success_rate,
|
|
465
|
+
adoptionRate: row.adoption_rate,
|
|
466
|
+
negativeTransferCount: row.negative_transfer_count,
|
|
467
|
+
taskTimeReduction: row.task_time_reduction,
|
|
468
|
+
coverageImprovement: row.coverage_improvement,
|
|
469
|
+
bugDetectionImprovement: row.bug_detection_improvement,
|
|
470
|
+
sleepCycleCompletionRate: row.sleep_cycle_completion_rate,
|
|
471
|
+
avgCycleDuration: row.avg_cycle_duration,
|
|
472
|
+
errorRate: row.error_rate,
|
|
473
|
+
calculatedAt: new Date(row.calculated_at),
|
|
474
|
+
periodStart: new Date(row.period_start),
|
|
475
|
+
periodEnd: new Date(row.period_end),
|
|
476
|
+
};
|
|
477
|
+
return {
|
|
478
|
+
id: row.id,
|
|
479
|
+
metrics,
|
|
480
|
+
snapshotTime: new Date(row.snapshot_time),
|
|
481
|
+
periodHours: row.period_hours,
|
|
482
|
+
};
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* Convert metric name to database column name
|
|
486
|
+
*/
|
|
487
|
+
metricNameToColumn(metricName) {
|
|
488
|
+
// Convert camelCase to snake_case
|
|
489
|
+
return metricName.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Close database connection and stop auto-snapshot
|
|
493
|
+
*/
|
|
494
|
+
close() {
|
|
495
|
+
this.stopAutoSnapshot();
|
|
496
|
+
this.collector.close();
|
|
497
|
+
this.db.close();
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
exports.MetricsStore = MetricsStore;
|
|
501
|
+
exports.default = MetricsStore;
|
|
502
|
+
//# sourceMappingURL=MetricsStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetricsStore.js","sourceRoot":"","sources":["../../../src/learning/metrics/MetricsStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TrendAnalyzer - Phase 3 Trend Analysis
|
|
3
|
+
*
|
|
4
|
+
* Analyzes metric trends over time and provides forecasting.
|
|
5
|
+
* Detects improving, stable, or declining trends.
|
|
6
|
+
*/
|
|
7
|
+
import { MetricsCollector, AggregatedMetrics } from './MetricsCollector';
|
|
8
|
+
/**
|
|
9
|
+
* Trend direction
|
|
10
|
+
*/
|
|
11
|
+
export declare enum TrendDirection {
|
|
12
|
+
IMPROVING = "improving",
|
|
13
|
+
STABLE = "stable",
|
|
14
|
+
DECLINING = "declining"
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Trend analysis result
|
|
18
|
+
*/
|
|
19
|
+
export interface TrendAnalysis {
|
|
20
|
+
metric: string;
|
|
21
|
+
direction: TrendDirection;
|
|
22
|
+
changePercentage: number;
|
|
23
|
+
forecast: number;
|
|
24
|
+
confidence: number;
|
|
25
|
+
dataPoints: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Time period for trend analysis
|
|
29
|
+
*/
|
|
30
|
+
export declare enum TrendPeriod {
|
|
31
|
+
DAILY = "daily",
|
|
32
|
+
WEEKLY = "weekly",
|
|
33
|
+
MONTHLY = "monthly"
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* TrendAnalyzer - Analyzes metric trends
|
|
37
|
+
*/
|
|
38
|
+
export declare class TrendAnalyzer {
|
|
39
|
+
private readonly logger;
|
|
40
|
+
private readonly metricsCollector;
|
|
41
|
+
constructor(metricsCollector: MetricsCollector);
|
|
42
|
+
/**
|
|
43
|
+
* Analyze trend for a specific metric
|
|
44
|
+
*/
|
|
45
|
+
analyzeTrend(metricName: string, days?: number): Promise<TrendAnalysis>;
|
|
46
|
+
/**
|
|
47
|
+
* Analyze all key metrics
|
|
48
|
+
*/
|
|
49
|
+
analyzeAllTrends(period?: TrendPeriod): Promise<TrendAnalysis[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Get trend summary for all categories
|
|
52
|
+
*/
|
|
53
|
+
getTrendSummary(metrics: AggregatedMetrics): Promise<{
|
|
54
|
+
discovery: TrendDirection;
|
|
55
|
+
quality: TrendDirection;
|
|
56
|
+
transfer: TrendDirection;
|
|
57
|
+
impact: TrendDirection;
|
|
58
|
+
system: TrendDirection;
|
|
59
|
+
}>;
|
|
60
|
+
/**
|
|
61
|
+
* Linear regression for trend analysis
|
|
62
|
+
*/
|
|
63
|
+
private linearRegression;
|
|
64
|
+
/**
|
|
65
|
+
* Determine trend direction from slope
|
|
66
|
+
*/
|
|
67
|
+
private determineTrendDirection;
|
|
68
|
+
/**
|
|
69
|
+
* Calculate confidence using R² (coefficient of determination)
|
|
70
|
+
*/
|
|
71
|
+
private calculateConfidence;
|
|
72
|
+
/**
|
|
73
|
+
* Convert period to days
|
|
74
|
+
*/
|
|
75
|
+
private periodToDays;
|
|
76
|
+
/**
|
|
77
|
+
* Get visual indicator for trend
|
|
78
|
+
*/
|
|
79
|
+
static getTrendIndicator(direction: TrendDirection): string;
|
|
80
|
+
/**
|
|
81
|
+
* Generate sparkline from metric history
|
|
82
|
+
*/
|
|
83
|
+
static generateSparkline(values: number[], width?: number): string;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=TrendAnalyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrendAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/learning/metrics/TrendAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAe,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEtF;;GAEG;AACH,oBAAY,cAAc;IACxB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,SAAS,cAAc;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,cAAc,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,oBAAY,WAAW;IACrB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;gBAExC,gBAAgB,EAAE,gBAAgB;IAK9C;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,OAAO,CAAC,aAAa,CAAC;IA2CjF;;OAEG;IACG,gBAAgB,CAAC,MAAM,GAAE,WAAgC,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAqB1F;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC;QACzD,SAAS,EAAE,cAAc,CAAC;QAC1B,OAAO,EAAE,cAAc,CAAC;QACxB,QAAQ,EAAE,cAAc,CAAC;QACzB,MAAM,EAAE,cAAc,CAAC;QACvB,MAAM,EAAE,cAAc,CAAC;KACxB,CAAC;IAiBF;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAW/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,cAAc,GAAG,MAAM;IAW3D;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,GAAE,MAAW,GAAG,MAAM;CAsBvE"}
|