agentic-qe 3.5.0 → 3.5.2

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 (203) hide show
  1. package/.claude/agents/n8n/n8n-base-agent.md +3 -3
  2. package/.claude/agents/n8n/n8n-bdd-scenario-tester.md +2 -2
  3. package/.claude/agents/n8n/n8n-chaos-tester.md +2 -2
  4. package/.claude/agents/n8n/n8n-ci-orchestrator.md +2 -2
  5. package/.claude/agents/n8n/n8n-compliance-validator.md +2 -2
  6. package/.claude/agents/n8n/n8n-expression-validator.md +2 -2
  7. package/.claude/agents/n8n/n8n-integration-test.md +2 -2
  8. package/.claude/agents/n8n/n8n-monitoring-validator.md +2 -2
  9. package/.claude/agents/n8n/n8n-node-validator.md +2 -2
  10. package/.claude/agents/n8n/n8n-performance-tester.md +2 -2
  11. package/.claude/agents/n8n/n8n-security-auditor.md +2 -2
  12. package/.claude/agents/n8n/n8n-trigger-test.md +2 -2
  13. package/.claude/agents/n8n/n8n-unit-tester.md +2 -2
  14. package/.claude/agents/n8n/n8n-version-comparator.md +2 -2
  15. package/.claude/agents/n8n/n8n-workflow-executor.md +2 -2
  16. package/.claude/agents/subagents/qe-code-reviewer.md +2 -2
  17. package/.claude/agents/subagents/qe-coverage-gap-analyzer.md +2 -2
  18. package/.claude/agents/subagents/qe-data-generator.md +2 -2
  19. package/.claude/agents/subagents/qe-flaky-investigator.md +2 -2
  20. package/.claude/agents/subagents/qe-integration-tester.md +2 -2
  21. package/.claude/agents/subagents/qe-performance-validator.md +2 -2
  22. package/.claude/agents/subagents/qe-security-auditor.md +2 -2
  23. package/.claude/agents/subagents/qe-test-data-architect-sub.md +2 -2
  24. package/.claude/agents/subagents/qe-test-implementer.md +2 -2
  25. package/.claude/agents/subagents/qe-test-refactorer.md +2 -2
  26. package/.claude/agents/subagents/qe-test-writer.md +2 -2
  27. package/.claude/agents/v3/qe-accessibility-auditor.md +3 -3
  28. package/.claude/agents/v3/qe-bdd-generator.md +4 -4
  29. package/.claude/agents/v3/qe-chaos-engineer.md +3 -3
  30. package/.claude/agents/v3/qe-code-complexity.md +3 -3
  31. package/.claude/agents/v3/qe-code-intelligence.md +3 -3
  32. package/.claude/agents/v3/qe-contract-validator.md +3 -3
  33. package/.claude/agents/v3/qe-coverage-specialist.md +4 -4
  34. package/.claude/agents/v3/qe-defect-predictor.md +4 -4
  35. package/.claude/agents/v3/qe-dependency-mapper.md +3 -3
  36. package/.claude/agents/v3/qe-deployment-advisor.md +3 -3
  37. package/.claude/agents/v3/qe-flaky-hunter.md +3 -3
  38. package/.claude/agents/v3/qe-fleet-commander.md +3 -3
  39. package/.claude/agents/v3/qe-gap-detector.md +4 -4
  40. package/.claude/agents/v3/qe-graphql-tester.md +3 -3
  41. package/.claude/agents/v3/qe-impact-analyzer.md +3 -3
  42. package/.claude/agents/v3/qe-integration-architect.md +2 -2
  43. package/.claude/agents/v3/qe-integration-tester.md +3 -3
  44. package/.claude/agents/v3/qe-kg-builder.md +3 -3
  45. package/.claude/agents/v3/qe-learning-coordinator.md +24 -15
  46. package/.claude/agents/v3/qe-load-tester.md +3 -3
  47. package/.claude/agents/v3/qe-metrics-optimizer.md +3 -3
  48. package/.claude/agents/v3/qe-mutation-tester.md +3 -3
  49. package/.claude/agents/v3/qe-parallel-executor.md +4 -4
  50. package/.claude/agents/v3/qe-pattern-learner.md +16 -12
  51. package/.claude/agents/v3/qe-performance-tester.md +3 -3
  52. package/.claude/agents/v3/qe-product-factors-assessor.md +4 -4
  53. package/.claude/agents/v3/qe-property-tester.md +3 -3
  54. package/.claude/agents/v3/qe-quality-criteria-recommender.md +4 -4
  55. package/.claude/agents/v3/qe-quality-gate.md +4 -4
  56. package/.claude/agents/v3/qe-qx-partner.md +3 -3
  57. package/.claude/agents/v3/qe-regression-analyzer.md +3 -3
  58. package/.claude/agents/v3/qe-requirements-validator.md +4 -4
  59. package/.claude/agents/v3/qe-responsive-tester.md +3 -3
  60. package/.claude/agents/v3/qe-retry-handler.md +3 -3
  61. package/.claude/agents/v3/qe-risk-assessor.md +4 -4
  62. package/.claude/agents/v3/qe-root-cause-analyzer.md +3 -3
  63. package/.claude/agents/v3/qe-security-auditor.md +3 -3
  64. package/.claude/agents/v3/qe-security-scanner.md +3 -3
  65. package/.claude/agents/v3/qe-tdd-specialist.md +4 -4
  66. package/.claude/agents/v3/qe-test-architect.md +4 -4
  67. package/.claude/agents/v3/qe-test-idea-rewriter.md +3 -3
  68. package/.claude/agents/v3/qe-transfer-specialist.md +3 -3
  69. package/.claude/agents/v3/qe-visual-tester.md +3 -3
  70. package/.claude/agents/v3/reasoningbank-learner.md +4 -4
  71. package/.claude/agents/v3/subagents/qe-code-reviewer.md +3 -3
  72. package/.claude/agents/v3/subagents/qe-integration-reviewer.md +3 -3
  73. package/.claude/agents/v3/subagents/qe-performance-reviewer.md +3 -3
  74. package/.claude/agents/v3/subagents/qe-security-reviewer.md +3 -3
  75. package/.claude/agents/v3/subagents/qe-tdd-green.md +3 -3
  76. package/.claude/agents/v3/subagents/qe-tdd-red.md +3 -3
  77. package/.claude/agents/v3/subagents/qe-tdd-refactor.md +3 -3
  78. package/.claude/helpers/daemon-manager.sh +10 -10
  79. package/.claude/helpers/github-safe.js +10 -10
  80. package/.claude/helpers/statusline-v3.cjs +9 -3
  81. package/.claude/helpers/statusline.cjs +891 -59
  82. package/.claude/skills/agentic-quality-engineering/SKILL.md +6 -6
  83. package/.claude/skills/qcsd-cicd-swarm/SKILL.md +14 -14
  84. package/.claude/skills/qcsd-development-swarm/SKILL.md +14 -14
  85. package/.claude/skills/qcsd-ideation-swarm/SKILL.md +21 -21
  86. package/.claude/skills/qcsd-refinement-swarm/SKILL.md +22 -22
  87. package/.claude/skills/qe-iterative-loop/SKILL.md +4 -4
  88. package/.claude/skills/skills-manifest.json +17 -9
  89. package/.claude/skills/verification-quality/SKILL.md +0 -6
  90. package/CHANGELOG.md +52 -0
  91. package/README.md +22 -10
  92. package/package.json +5 -3
  93. package/v3/CHANGELOG.md +51 -3
  94. package/v3/README.md +9 -9
  95. package/v3/assets/agents/v3/qe-accessibility-auditor.md +12 -8
  96. package/v3/assets/agents/v3/qe-bdd-generator.md +13 -9
  97. package/v3/assets/agents/v3/qe-chaos-engineer.md +12 -8
  98. package/v3/assets/agents/v3/qe-code-complexity.md +12 -8
  99. package/v3/assets/agents/v3/qe-code-intelligence.md +12 -8
  100. package/v3/assets/agents/v3/qe-contract-validator.md +12 -8
  101. package/v3/assets/agents/v3/qe-coverage-specialist.md +13 -9
  102. package/v3/assets/agents/v3/qe-defect-predictor.md +13 -9
  103. package/v3/assets/agents/v3/qe-dependency-mapper.md +12 -8
  104. package/v3/assets/agents/v3/qe-deployment-advisor.md +12 -8
  105. package/v3/assets/agents/v3/qe-flaky-hunter.md +12 -8
  106. package/v3/assets/agents/v3/qe-fleet-commander.md +12 -8
  107. package/v3/assets/agents/v3/qe-gap-detector.md +13 -9
  108. package/v3/assets/agents/v3/qe-graphql-tester.md +12 -8
  109. package/v3/assets/agents/v3/qe-impact-analyzer.md +12 -8
  110. package/v3/assets/agents/v3/qe-integration-architect.md +2 -2
  111. package/v3/assets/agents/v3/qe-integration-tester.md +3 -3
  112. package/v3/assets/agents/v3/qe-kg-builder.md +12 -8
  113. package/v3/assets/agents/v3/qe-learning-coordinator.md +24 -15
  114. package/v3/assets/agents/v3/qe-load-tester.md +12 -8
  115. package/v3/assets/agents/v3/qe-metrics-optimizer.md +12 -8
  116. package/v3/assets/agents/v3/qe-mutation-tester.md +12 -8
  117. package/v3/assets/agents/v3/qe-parallel-executor.md +4 -4
  118. package/v3/assets/agents/v3/qe-pattern-learner.md +16 -12
  119. package/v3/assets/agents/v3/qe-performance-tester.md +12 -8
  120. package/v3/assets/agents/v3/qe-product-factors-assessor.md +4 -4
  121. package/v3/assets/agents/v3/qe-property-tester.md +12 -8
  122. package/v3/assets/agents/v3/qe-quality-criteria-recommender.md +4 -4
  123. package/v3/assets/agents/v3/qe-quality-gate.md +4 -4
  124. package/v3/assets/agents/v3/qe-qx-partner.md +12 -8
  125. package/v3/assets/agents/v3/qe-regression-analyzer.md +12 -8
  126. package/v3/assets/agents/v3/qe-requirements-validator.md +13 -9
  127. package/v3/assets/agents/v3/qe-responsive-tester.md +12 -8
  128. package/v3/assets/agents/v3/qe-retry-handler.md +12 -8
  129. package/v3/assets/agents/v3/qe-risk-assessor.md +13 -9
  130. package/v3/assets/agents/v3/qe-root-cause-analyzer.md +12 -8
  131. package/v3/assets/agents/v3/qe-security-auditor.md +12 -8
  132. package/v3/assets/agents/v3/qe-security-scanner.md +12 -8
  133. package/v3/assets/agents/v3/qe-tdd-specialist.md +4 -4
  134. package/v3/assets/agents/v3/qe-test-architect.md +13 -9
  135. package/v3/assets/agents/v3/qe-test-idea-rewriter.md +3 -3
  136. package/v3/assets/agents/v3/qe-transfer-specialist.md +12 -8
  137. package/v3/assets/agents/v3/qe-visual-tester.md +3 -3
  138. package/v3/assets/agents/v3/subagents/qe-code-reviewer.md +12 -8
  139. package/v3/assets/agents/v3/subagents/qe-integration-reviewer.md +12 -8
  140. package/v3/assets/agents/v3/subagents/qe-performance-reviewer.md +12 -8
  141. package/v3/assets/agents/v3/subagents/qe-security-reviewer.md +12 -8
  142. package/v3/assets/agents/v3/subagents/qe-tdd-green.md +12 -8
  143. package/v3/assets/agents/v3/subagents/qe-tdd-red.md +12 -8
  144. package/v3/assets/agents/v3/subagents/qe-tdd-refactor.md +12 -8
  145. package/v3/assets/skills/agentic-quality-engineering/SKILL.md +6 -6
  146. package/v3/assets/skills/qcsd-ideation-swarm/SKILL.md +21 -21
  147. package/v3/assets/skills/qe-iterative-loop/SKILL.md +4 -4
  148. package/v3/dist/cli/bundle.js +2508 -816
  149. package/v3/dist/cli/commands/hooks.d.ts.map +1 -1
  150. package/v3/dist/cli/commands/hooks.js +34 -21
  151. package/v3/dist/cli/commands/hooks.js.map +1 -1
  152. package/v3/dist/cli/commands/learning.d.ts +23 -0
  153. package/v3/dist/cli/commands/learning.d.ts.map +1 -0
  154. package/v3/dist/cli/commands/learning.js +1448 -0
  155. package/v3/dist/cli/commands/learning.js.map +1 -0
  156. package/v3/dist/cli/index.js +2 -0
  157. package/v3/dist/cli/index.js.map +1 -1
  158. package/v3/dist/init/init-wizard.d.ts +2 -1
  159. package/v3/dist/init/init-wizard.d.ts.map +1 -1
  160. package/v3/dist/init/init-wizard.js +25 -23
  161. package/v3/dist/init/init-wizard.js.map +1 -1
  162. package/v3/dist/init/phases/07-hooks.d.ts +3 -0
  163. package/v3/dist/init/phases/07-hooks.d.ts.map +1 -1
  164. package/v3/dist/init/phases/07-hooks.js +12 -9
  165. package/v3/dist/init/phases/07-hooks.js.map +1 -1
  166. package/v3/dist/kernel/unified-memory.d.ts +8 -3
  167. package/v3/dist/kernel/unified-memory.d.ts.map +1 -1
  168. package/v3/dist/kernel/unified-memory.js +39 -9
  169. package/v3/dist/kernel/unified-memory.js.map +1 -1
  170. package/v3/dist/learning/aqe-learning-engine.d.ts +26 -0
  171. package/v3/dist/learning/aqe-learning-engine.d.ts.map +1 -1
  172. package/v3/dist/learning/aqe-learning-engine.js +116 -2
  173. package/v3/dist/learning/aqe-learning-engine.js.map +1 -1
  174. package/v3/dist/learning/index.d.ts +4 -0
  175. package/v3/dist/learning/index.d.ts.map +1 -1
  176. package/v3/dist/learning/index.js +8 -0
  177. package/v3/dist/learning/index.js.map +1 -1
  178. package/v3/dist/learning/metrics-tracker.d.ts +133 -0
  179. package/v3/dist/learning/metrics-tracker.d.ts.map +1 -0
  180. package/v3/dist/learning/metrics-tracker.js +396 -0
  181. package/v3/dist/learning/metrics-tracker.js.map +1 -0
  182. package/v3/dist/learning/pattern-lifecycle.d.ts +203 -0
  183. package/v3/dist/learning/pattern-lifecycle.d.ts.map +1 -0
  184. package/v3/dist/learning/pattern-lifecycle.js +614 -0
  185. package/v3/dist/learning/pattern-lifecycle.js.map +1 -0
  186. package/v3/dist/learning/sqlite-persistence.d.ts +30 -0
  187. package/v3/dist/learning/sqlite-persistence.d.ts.map +1 -1
  188. package/v3/dist/learning/sqlite-persistence.js +137 -0
  189. package/v3/dist/learning/sqlite-persistence.js.map +1 -1
  190. package/v3/dist/mcp/bundle.js +104568 -102038
  191. package/v3/dist/mcp/handlers/handler-factory.d.ts +5 -0
  192. package/v3/dist/mcp/handlers/handler-factory.d.ts.map +1 -1
  193. package/v3/dist/mcp/handlers/handler-factory.js +84 -0
  194. package/v3/dist/mcp/handlers/handler-factory.js.map +1 -1
  195. package/v3/dist/mcp/services/task-router.d.ts +32 -0
  196. package/v3/dist/mcp/services/task-router.d.ts.map +1 -1
  197. package/v3/dist/mcp/services/task-router.js +28 -0
  198. package/v3/dist/mcp/services/task-router.js.map +1 -1
  199. package/v3/dist/workers/workers/learning-consolidation.d.ts +29 -0
  200. package/v3/dist/workers/workers/learning-consolidation.d.ts.map +1 -1
  201. package/v3/dist/workers/workers/learning-consolidation.js +294 -3
  202. package/v3/dist/workers/workers/learning-consolidation.js.map +1 -1
  203. package/v3/package.json +3 -2
@@ -0,0 +1,396 @@
1
+ /**
2
+ * Agentic QE v3 - Learning Metrics Tracker
3
+ * Phase 6: Learning Metrics & Dashboard (Learning Improvement Plan)
4
+ *
5
+ * Tracks learning improvement over time with metrics collection and analysis.
6
+ *
7
+ * Features:
8
+ * - Pattern creation and reuse tracking
9
+ * - Reward improvement analysis
10
+ * - Domain coverage metrics
11
+ * - Daily snapshots for trend analysis
12
+ * - Dashboard data generation
13
+ */
14
+ import Database from 'better-sqlite3';
15
+ import path from 'node:path';
16
+ import { existsSync } from 'node:fs';
17
+ import { QE_DOMAIN_LIST } from './qe-patterns.js';
18
+ // ============================================================================
19
+ // Learning Metrics Tracker
20
+ // ============================================================================
21
+ /**
22
+ * Learning Metrics Tracker
23
+ *
24
+ * Collects and analyzes learning system metrics for dashboard display.
25
+ */
26
+ export class LearningMetricsTracker {
27
+ db = null;
28
+ dbPath;
29
+ initialized = false;
30
+ constructor(projectRoot = process.cwd()) {
31
+ this.dbPath = path.join(projectRoot, '.agentic-qe', 'memory.db');
32
+ }
33
+ /**
34
+ * Initialize the tracker (open database, ensure tables exist)
35
+ */
36
+ async initialize() {
37
+ if (this.initialized)
38
+ return;
39
+ if (!existsSync(this.dbPath)) {
40
+ throw new Error(`Database not found: ${this.dbPath}. Run "aqe init --auto" first.`);
41
+ }
42
+ this.db = new Database(this.dbPath, { readonly: false });
43
+ // Ensure learning_metrics table exists for snapshots
44
+ this.ensureMetricsTable();
45
+ this.initialized = true;
46
+ }
47
+ /**
48
+ * Ensure the learning_daily_snapshots table exists
49
+ */
50
+ ensureMetricsTable() {
51
+ if (!this.db)
52
+ return;
53
+ this.db.exec(`
54
+ CREATE TABLE IF NOT EXISTS learning_daily_snapshots (
55
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
56
+ snapshot_date TEXT NOT NULL UNIQUE,
57
+ total_patterns INTEGER DEFAULT 0,
58
+ patterns_created_today INTEGER DEFAULT 0,
59
+ total_experiences INTEGER DEFAULT 0,
60
+ experiences_today INTEGER DEFAULT 0,
61
+ total_q_values INTEGER DEFAULT 0,
62
+ avg_reward REAL DEFAULT 0.0,
63
+ avg_confidence REAL DEFAULT 0.0,
64
+ avg_quality_score REAL DEFAULT 0.0,
65
+ success_rate REAL DEFAULT 0.0,
66
+ pattern_reuse_count INTEGER DEFAULT 0,
67
+ short_term_patterns INTEGER DEFAULT 0,
68
+ long_term_patterns INTEGER DEFAULT 0,
69
+ domain_coverage_json TEXT,
70
+ created_at TEXT DEFAULT (datetime('now'))
71
+ );
72
+ CREATE INDEX IF NOT EXISTS idx_learning_daily_snapshots_date ON learning_daily_snapshots(snapshot_date DESC);
73
+ `);
74
+ }
75
+ /**
76
+ * Get current learning metrics
77
+ */
78
+ async getCurrentMetrics() {
79
+ if (!this.initialized)
80
+ await this.initialize();
81
+ if (!this.db)
82
+ throw new Error('Database not initialized');
83
+ const today = new Date().toISOString().split('T')[0];
84
+ const oneWeekAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString().split('T')[0];
85
+ // Pattern metrics
86
+ const patternStats = this.getPatternStats(today);
87
+ // Experience metrics (from learning_experiences if exists, or qe_pattern_usage)
88
+ const experienceStats = this.getExperienceStats(today);
89
+ // Q-value metrics
90
+ const qValueStats = this.getQValueStats();
91
+ // Domain coverage
92
+ const domainCoverage = this.getDomainCoverage();
93
+ // Get last week's avg reward for delta calculation
94
+ const lastWeekReward = this.getHistoricalAvgReward(oneWeekAgo);
95
+ return {
96
+ timestamp: new Date(),
97
+ totalPatterns: patternStats.total,
98
+ patternsCreatedToday: patternStats.createdToday,
99
+ totalExperiences: experienceStats.total,
100
+ experiencesToday: experienceStats.recordedToday,
101
+ totalQValues: qValueStats.total,
102
+ avgReward: experienceStats.avgReward,
103
+ avgRewardDelta: experienceStats.avgReward - lastWeekReward,
104
+ domainCoverage,
105
+ patternReuseCount: patternStats.reuseCount,
106
+ shortTermPatterns: patternStats.shortTerm,
107
+ longTermPatterns: patternStats.longTerm,
108
+ avgConfidence: patternStats.avgConfidence,
109
+ avgQualityScore: patternStats.avgQualityScore,
110
+ successRate: experienceStats.successRate,
111
+ };
112
+ }
113
+ /**
114
+ * Get pattern statistics
115
+ */
116
+ getPatternStats(today) {
117
+ if (!this.db) {
118
+ return {
119
+ total: 0,
120
+ createdToday: 0,
121
+ shortTerm: 0,
122
+ longTerm: 0,
123
+ avgConfidence: 0,
124
+ avgQualityScore: 0,
125
+ reuseCount: 0,
126
+ };
127
+ }
128
+ // Check if qe_patterns table exists
129
+ const tableExists = this.db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name='qe_patterns'`).get();
130
+ if (!tableExists) {
131
+ return {
132
+ total: 0,
133
+ createdToday: 0,
134
+ shortTerm: 0,
135
+ longTerm: 0,
136
+ avgConfidence: 0,
137
+ avgQualityScore: 0,
138
+ reuseCount: 0,
139
+ };
140
+ }
141
+ const stats = this.db.prepare(`
142
+ SELECT
143
+ COUNT(*) as total,
144
+ SUM(CASE WHEN date(created_at) = ? THEN 1 ELSE 0 END) as created_today,
145
+ SUM(CASE WHEN tier = 'short-term' THEN 1 ELSE 0 END) as short_term,
146
+ SUM(CASE WHEN tier = 'long-term' THEN 1 ELSE 0 END) as long_term,
147
+ AVG(confidence) as avg_confidence,
148
+ AVG(quality_score) as avg_quality_score,
149
+ SUM(usage_count) as total_usage
150
+ FROM qe_patterns
151
+ `).get(today);
152
+ return {
153
+ total: stats.total || 0,
154
+ createdToday: stats.created_today || 0,
155
+ shortTerm: stats.short_term || 0,
156
+ longTerm: stats.long_term || 0,
157
+ avgConfidence: stats.avg_confidence || 0,
158
+ avgQualityScore: stats.avg_quality_score || 0,
159
+ reuseCount: stats.total_usage || 0,
160
+ };
161
+ }
162
+ /**
163
+ * Get experience statistics
164
+ */
165
+ getExperienceStats(today) {
166
+ if (!this.db) {
167
+ return { total: 0, recordedToday: 0, avgReward: 0, successRate: 0 };
168
+ }
169
+ // Try learning_experiences table first (v2 compatible)
170
+ const learningTableExists = this.db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name='learning_experiences'`).get();
171
+ if (learningTableExists) {
172
+ const stats = this.db.prepare(`
173
+ SELECT
174
+ COUNT(*) as total,
175
+ SUM(CASE WHEN date(datetime(created_at, 'unixepoch')) = ? THEN 1 ELSE 0 END) as recorded_today,
176
+ AVG(reward) as avg_reward,
177
+ AVG(CASE WHEN reward >= 0.5 THEN 1.0 ELSE 0.0 END) as success_rate
178
+ FROM learning_experiences
179
+ `).get(today);
180
+ return {
181
+ total: stats.total || 0,
182
+ recordedToday: stats.recorded_today || 0,
183
+ avgReward: stats.avg_reward || 0,
184
+ successRate: stats.success_rate || 0,
185
+ };
186
+ }
187
+ // Fall back to qe_pattern_usage table
188
+ const usageTableExists = this.db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name='qe_pattern_usage'`).get();
189
+ if (usageTableExists) {
190
+ const stats = this.db.prepare(`
191
+ SELECT
192
+ COUNT(*) as total,
193
+ SUM(CASE WHEN date(created_at) = ? THEN 1 ELSE 0 END) as recorded_today,
194
+ AVG(success) as success_rate
195
+ FROM qe_pattern_usage
196
+ `).get(today);
197
+ return {
198
+ total: stats.total || 0,
199
+ recordedToday: stats.recorded_today || 0,
200
+ avgReward: stats.success_rate || 0, // Use success as reward proxy
201
+ successRate: stats.success_rate || 0,
202
+ };
203
+ }
204
+ return { total: 0, recordedToday: 0, avgReward: 0, successRate: 0 };
205
+ }
206
+ /**
207
+ * Get Q-value statistics
208
+ */
209
+ getQValueStats() {
210
+ if (!this.db)
211
+ return { total: 0 };
212
+ const tableExists = this.db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name='rl_q_values'`).get();
213
+ if (!tableExists)
214
+ return { total: 0 };
215
+ const stats = this.db.prepare(`
216
+ SELECT COUNT(*) as total FROM rl_q_values
217
+ `).get();
218
+ return { total: stats.total || 0 };
219
+ }
220
+ /**
221
+ * Get domain coverage (patterns per domain)
222
+ */
223
+ getDomainCoverage() {
224
+ const coverage = {};
225
+ // Initialize all domains to 0
226
+ for (const domain of QE_DOMAIN_LIST) {
227
+ coverage[domain] = 0;
228
+ }
229
+ if (!this.db)
230
+ return coverage;
231
+ const tableExists = this.db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name='qe_patterns'`).get();
232
+ if (!tableExists)
233
+ return coverage;
234
+ const rows = this.db.prepare(`
235
+ SELECT qe_domain, COUNT(*) as count
236
+ FROM qe_patterns
237
+ GROUP BY qe_domain
238
+ `).all();
239
+ for (const row of rows) {
240
+ if (QE_DOMAIN_LIST.includes(row.qe_domain)) {
241
+ coverage[row.qe_domain] = row.count;
242
+ }
243
+ }
244
+ return coverage;
245
+ }
246
+ /**
247
+ * Get historical average reward
248
+ */
249
+ getHistoricalAvgReward(date) {
250
+ if (!this.db)
251
+ return 0;
252
+ // Try learning_experiences first
253
+ const tableExists = this.db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name='learning_experiences'`).get();
254
+ if (tableExists) {
255
+ const result = this.db.prepare(`
256
+ SELECT AVG(reward) as avg_reward
257
+ FROM learning_experiences
258
+ WHERE datetime(created_at, 'unixepoch') <= datetime(?)
259
+ `).get(date + ' 23:59:59');
260
+ return result?.avg_reward || 0;
261
+ }
262
+ return 0;
263
+ }
264
+ /**
265
+ * Get dashboard data for CLI display
266
+ */
267
+ async getDashboardData() {
268
+ if (!this.initialized)
269
+ await this.initialize();
270
+ const current = await this.getCurrentMetrics();
271
+ const history = await this.getMetricsHistory(7);
272
+ // Calculate trends
273
+ const patternsPerDay = history.map(h => h.patternsCreatedToday);
274
+ const experiencesPerDay = history.map(h => h.experiencesToday);
275
+ const avgRewardPerDay = history.map(h => h.avgReward);
276
+ // Top domains by pattern count
277
+ const topDomains = Object.entries(current.domainCoverage)
278
+ .filter(([_, count]) => count > 0)
279
+ .sort((a, b) => b[1] - a[1])
280
+ .slice(0, 5)
281
+ .map(([domain, count]) => ({
282
+ domain: domain,
283
+ count,
284
+ }));
285
+ return {
286
+ current,
287
+ history,
288
+ trends: {
289
+ patternsPerDay,
290
+ experiencesPerDay,
291
+ avgRewardPerDay,
292
+ },
293
+ topDomains,
294
+ };
295
+ }
296
+ /**
297
+ * Get metrics history for the last N days
298
+ */
299
+ async getMetricsHistory(days) {
300
+ if (!this.initialized)
301
+ await this.initialize();
302
+ if (!this.db)
303
+ return [];
304
+ const history = [];
305
+ // Check if learning_daily_snapshots table exists
306
+ const tableExists = this.db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name='learning_daily_snapshots'`).get();
307
+ if (!tableExists) {
308
+ return [];
309
+ }
310
+ const rows = this.db.prepare(`
311
+ SELECT *
312
+ FROM learning_daily_snapshots
313
+ ORDER BY snapshot_date DESC
314
+ LIMIT ?
315
+ `).all(days);
316
+ for (const row of rows) {
317
+ let domainCoverage = {};
318
+ try {
319
+ domainCoverage = JSON.parse(row.domain_coverage_json || '{}');
320
+ }
321
+ catch {
322
+ // Use empty coverage if parse fails
323
+ for (const domain of QE_DOMAIN_LIST) {
324
+ domainCoverage[domain] = 0;
325
+ }
326
+ }
327
+ history.push({
328
+ timestamp: new Date(row.snapshot_date),
329
+ totalPatterns: row.total_patterns,
330
+ patternsCreatedToday: row.patterns_created_today,
331
+ totalExperiences: row.total_experiences,
332
+ experiencesToday: row.experiences_today,
333
+ totalQValues: row.total_q_values,
334
+ avgReward: row.avg_reward,
335
+ avgRewardDelta: 0, // Not stored in history
336
+ domainCoverage,
337
+ patternReuseCount: row.pattern_reuse_count,
338
+ shortTermPatterns: row.short_term_patterns,
339
+ longTermPatterns: row.long_term_patterns,
340
+ avgConfidence: row.avg_confidence,
341
+ avgQualityScore: row.avg_quality_score,
342
+ successRate: row.success_rate,
343
+ });
344
+ }
345
+ return history;
346
+ }
347
+ /**
348
+ * Save a daily metrics snapshot
349
+ */
350
+ async saveSnapshot() {
351
+ if (!this.initialized)
352
+ await this.initialize();
353
+ if (!this.db)
354
+ throw new Error('Database not initialized');
355
+ const metrics = await this.getCurrentMetrics();
356
+ const today = new Date().toISOString().split('T')[0];
357
+ this.db.prepare(`
358
+ INSERT OR REPLACE INTO learning_daily_snapshots (
359
+ snapshot_date,
360
+ total_patterns,
361
+ patterns_created_today,
362
+ total_experiences,
363
+ experiences_today,
364
+ total_q_values,
365
+ avg_reward,
366
+ avg_confidence,
367
+ avg_quality_score,
368
+ success_rate,
369
+ pattern_reuse_count,
370
+ short_term_patterns,
371
+ long_term_patterns,
372
+ domain_coverage_json
373
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
374
+ `).run(today, metrics.totalPatterns, metrics.patternsCreatedToday, metrics.totalExperiences, metrics.experiencesToday, metrics.totalQValues, metrics.avgReward, metrics.avgConfidence, metrics.avgQualityScore, metrics.successRate, metrics.patternReuseCount, metrics.shortTermPatterns, metrics.longTermPatterns, JSON.stringify(metrics.domainCoverage));
375
+ }
376
+ /**
377
+ * Close the database connection
378
+ */
379
+ close() {
380
+ if (this.db) {
381
+ this.db.close();
382
+ this.db = null;
383
+ this.initialized = false;
384
+ }
385
+ }
386
+ }
387
+ // ============================================================================
388
+ // Factory Function
389
+ // ============================================================================
390
+ /**
391
+ * Create a new LearningMetricsTracker instance
392
+ */
393
+ export function createLearningMetricsTracker(projectRoot) {
394
+ return new LearningMetricsTracker(projectRoot);
395
+ }
396
+ //# sourceMappingURL=metrics-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics-tracker.js","sourceRoot":"","sources":["../../src/learning/metrics-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Agentic QE v3 - Pattern Lifecycle Management
3
+ * Phase 7: Continuous Learning Loop
4
+ *
5
+ * Manages the full lifecycle of QE patterns including:
6
+ * - Pattern promotion from short-term to long-term
7
+ * - Pattern deprecation after failures
8
+ * - Quality feedback loops
9
+ * - Confidence decay over time
10
+ */
11
+ import type { Database as DatabaseType } from 'better-sqlite3';
12
+ import type { QEDomain, QEPatternType } from './qe-patterns.js';
13
+ /**
14
+ * Pattern lifecycle configuration
15
+ */
16
+ export interface PatternLifecycleConfig {
17
+ /** Minimum reward threshold for pattern promotion (0-1) */
18
+ promotionRewardThreshold: number;
19
+ /** Minimum occurrence count for pattern promotion */
20
+ promotionMinOccurrences: number;
21
+ /** Minimum success rate for pattern promotion (0-1) */
22
+ promotionMinSuccessRate: number;
23
+ /** Number of consecutive failures before deprecation */
24
+ deprecationFailureThreshold: number;
25
+ /** Days without use before pattern becomes stale */
26
+ staleDaysThreshold: number;
27
+ /** Daily confidence decay rate (0-1) */
28
+ confidenceDecayRate: number;
29
+ /** Minimum confidence to keep pattern active */
30
+ minActiveConfidence: number;
31
+ /** Maximum age in days before automatic deprecation review */
32
+ maxAgeForActivePatterns: number;
33
+ }
34
+ /**
35
+ * Default lifecycle configuration
36
+ */
37
+ export declare const DEFAULT_LIFECYCLE_CONFIG: PatternLifecycleConfig;
38
+ /**
39
+ * Experience aggregation for pattern candidate identification
40
+ */
41
+ export interface ExperienceAggregate {
42
+ taskType: string;
43
+ domain: QEDomain | null;
44
+ count: number;
45
+ avgReward: number;
46
+ maxReward: number;
47
+ minReward: number;
48
+ actions: string[];
49
+ successCount: number;
50
+ latestAt: Date;
51
+ }
52
+ /**
53
+ * Pattern candidate identified from experiences
54
+ */
55
+ export interface PatternCandidate {
56
+ name: string;
57
+ domain: QEDomain;
58
+ patternType: QEPatternType;
59
+ confidence: number;
60
+ sourceExperiences: number;
61
+ avgReward: number;
62
+ successRate: number;
63
+ actions: string[];
64
+ templateContent: string;
65
+ }
66
+ /**
67
+ * Result of pattern promotion check
68
+ */
69
+ export interface PromotionCheckResult {
70
+ shouldPromote: boolean;
71
+ meetsRewardThreshold: boolean;
72
+ meetsOccurrenceThreshold: boolean;
73
+ meetsSuccessRateThreshold: boolean;
74
+ currentReward: number;
75
+ currentOccurrences: number;
76
+ currentSuccessRate: number;
77
+ }
78
+ /**
79
+ * Result of deprecation check
80
+ */
81
+ export interface DeprecationCheckResult {
82
+ shouldDeprecate: boolean;
83
+ reason: 'failures' | 'stale' | 'low_confidence' | 'age' | null;
84
+ consecutiveFailures?: number;
85
+ daysSinceLastUse?: number;
86
+ currentConfidence?: number;
87
+ ageInDays?: number;
88
+ }
89
+ /**
90
+ * Pattern lifecycle statistics
91
+ */
92
+ export interface PatternLifecycleStats {
93
+ totalPatterns: number;
94
+ activePatterns: number;
95
+ deprecatedPatterns: number;
96
+ promotedPatterns: number;
97
+ shortTermPatterns: number;
98
+ longTermPatterns: number;
99
+ avgConfidence: number;
100
+ avgSuccessRate: number;
101
+ patternsNearDeprecation: number;
102
+ }
103
+ /**
104
+ * Pattern Lifecycle Manager
105
+ *
106
+ * Handles pattern promotion, deprecation, and quality tracking
107
+ * as part of the continuous learning loop.
108
+ */
109
+ export declare class PatternLifecycleManager {
110
+ private readonly db;
111
+ private readonly config;
112
+ constructor(db: DatabaseType, config?: Partial<PatternLifecycleConfig>);
113
+ /**
114
+ * Ensure required schema extensions exist
115
+ */
116
+ private ensureSchema;
117
+ /**
118
+ * Get recent experiences from learning_experiences table
119
+ */
120
+ getRecentExperiences(options?: {
121
+ minReward?: number;
122
+ limit?: number;
123
+ sinceDays?: number;
124
+ }): ExperienceAggregate[];
125
+ /**
126
+ * Map task type to QE domain
127
+ */
128
+ private taskTypeToQEDomain;
129
+ /**
130
+ * Map task type to pattern type
131
+ */
132
+ private taskTypeToPatternType;
133
+ /**
134
+ * Find pattern candidates from experience aggregates
135
+ */
136
+ findPatternCandidates(experiences: ExperienceAggregate[]): PatternCandidate[];
137
+ /**
138
+ * Find existing pattern by task type and domain
139
+ */
140
+ private findExistingPattern;
141
+ /**
142
+ * Generate template content from experience aggregate
143
+ */
144
+ private generateTemplateContent;
145
+ /**
146
+ * Check if a pattern should be promoted
147
+ */
148
+ checkPromotion(patternId: string): PromotionCheckResult;
149
+ /**
150
+ * Promote pattern to long-term tier
151
+ */
152
+ promotePattern(patternId: string): boolean;
153
+ /**
154
+ * Promote all eligible patterns
155
+ */
156
+ promoteEligiblePatterns(): {
157
+ promoted: number;
158
+ checked: number;
159
+ };
160
+ /**
161
+ * Check if a pattern should be deprecated
162
+ */
163
+ checkDeprecation(patternId: string): DeprecationCheckResult;
164
+ /**
165
+ * Deprecate a pattern (soft delete)
166
+ */
167
+ deprecatePattern(patternId: string, reason?: string): boolean;
168
+ /**
169
+ * Deprecate all patterns that meet deprecation criteria
170
+ */
171
+ deprecateStalePatterns(): {
172
+ deprecated: number;
173
+ checked: number;
174
+ };
175
+ /**
176
+ * Apply confidence decay to patterns that haven't been used recently
177
+ */
178
+ applyConfidenceDecay(daysSinceLastRun?: number): {
179
+ updated: number;
180
+ decayed: number;
181
+ };
182
+ /**
183
+ * Record pattern usage success/failure
184
+ */
185
+ recordUsage(patternId: string, success: boolean): void;
186
+ /**
187
+ * Get pattern lifecycle statistics
188
+ */
189
+ getStats(): PatternLifecycleStats;
190
+ /**
191
+ * Get a pattern by ID
192
+ */
193
+ private getPattern;
194
+ /**
195
+ * Convert database row to QEPattern
196
+ */
197
+ private rowToPattern;
198
+ }
199
+ /**
200
+ * Create a pattern lifecycle manager
201
+ */
202
+ export declare function createPatternLifecycleManager(db: DatabaseType, config?: Partial<PatternLifecycleConfig>): PatternLifecycleManager;
203
+ //# sourceMappingURL=pattern-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-lifecycle.d.ts","sourceRoot":"","sources":["../../src/learning/pattern-lifecycle.ts"],"names":[],"mappings":"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"}