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,614 @@
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
+ /**
12
+ * Default lifecycle configuration
13
+ */
14
+ export const DEFAULT_LIFECYCLE_CONFIG = {
15
+ promotionRewardThreshold: 0.7,
16
+ promotionMinOccurrences: 2,
17
+ promotionMinSuccessRate: 0.7,
18
+ deprecationFailureThreshold: 3,
19
+ staleDaysThreshold: 30,
20
+ confidenceDecayRate: 0.01, // 1% per day
21
+ minActiveConfidence: 0.3,
22
+ maxAgeForActivePatterns: 90,
23
+ };
24
+ // ============================================================================
25
+ // Pattern Lifecycle Manager
26
+ // ============================================================================
27
+ /**
28
+ * Pattern Lifecycle Manager
29
+ *
30
+ * Handles pattern promotion, deprecation, and quality tracking
31
+ * as part of the continuous learning loop.
32
+ */
33
+ export class PatternLifecycleManager {
34
+ db;
35
+ config;
36
+ constructor(db, config = {}) {
37
+ this.db = db;
38
+ this.config = { ...DEFAULT_LIFECYCLE_CONFIG, ...config };
39
+ this.ensureSchema();
40
+ }
41
+ /**
42
+ * Ensure required schema extensions exist
43
+ */
44
+ ensureSchema() {
45
+ // Add deprecated_at column if not exists
46
+ try {
47
+ this.db.prepare(`
48
+ SELECT deprecated_at FROM qe_patterns LIMIT 1
49
+ `).get();
50
+ }
51
+ catch {
52
+ // Column doesn't exist, add it
53
+ this.db.exec(`
54
+ ALTER TABLE qe_patterns ADD COLUMN deprecated_at TEXT DEFAULT NULL
55
+ `);
56
+ console.log('[PatternLifecycle] Added deprecated_at column to qe_patterns');
57
+ }
58
+ // Add consecutive_failures column if not exists
59
+ try {
60
+ this.db.prepare(`
61
+ SELECT consecutive_failures FROM qe_patterns LIMIT 1
62
+ `).get();
63
+ }
64
+ catch {
65
+ this.db.exec(`
66
+ ALTER TABLE qe_patterns ADD COLUMN consecutive_failures INTEGER DEFAULT 0
67
+ `);
68
+ console.log('[PatternLifecycle] Added consecutive_failures column to qe_patterns');
69
+ }
70
+ // Add promotion_date column if not exists
71
+ try {
72
+ this.db.prepare(`
73
+ SELECT promotion_date FROM qe_patterns LIMIT 1
74
+ `).get();
75
+ }
76
+ catch {
77
+ this.db.exec(`
78
+ ALTER TABLE qe_patterns ADD COLUMN promotion_date TEXT DEFAULT NULL
79
+ `);
80
+ console.log('[PatternLifecycle] Added promotion_date column to qe_patterns');
81
+ }
82
+ }
83
+ // ============================================================================
84
+ // Experience Extraction
85
+ // ============================================================================
86
+ /**
87
+ * Get recent experiences from learning_experiences table
88
+ */
89
+ getRecentExperiences(options = {}) {
90
+ const minReward = options.minReward ?? this.config.promotionRewardThreshold;
91
+ const limit = options.limit ?? 100;
92
+ const sinceDays = options.sinceDays ?? 7;
93
+ const sinceTimestamp = Date.now() - (sinceDays * 24 * 60 * 60 * 1000);
94
+ // Check if learning_experiences table exists
95
+ const tableExists = this.db.prepare(`
96
+ SELECT name FROM sqlite_master
97
+ WHERE type='table' AND name='learning_experiences'
98
+ `).get();
99
+ if (!tableExists) {
100
+ console.log('[PatternLifecycle] learning_experiences table not found');
101
+ return [];
102
+ }
103
+ const aggregates = this.db.prepare(`
104
+ SELECT
105
+ task_type,
106
+ COUNT(*) as count,
107
+ AVG(reward) as avg_reward,
108
+ MAX(reward) as max_reward,
109
+ MIN(reward) as min_reward,
110
+ SUM(CASE WHEN reward >= ? THEN 1 ELSE 0 END) as success_count,
111
+ GROUP_CONCAT(DISTINCT action) as actions,
112
+ MAX(created_at) as latest_at
113
+ FROM learning_experiences
114
+ WHERE created_at >= ? AND reward >= ?
115
+ GROUP BY task_type
116
+ HAVING COUNT(*) >= ?
117
+ ORDER BY avg_reward DESC
118
+ LIMIT ?
119
+ `).all(minReward, sinceTimestamp, minReward * 0.5, // Include experiences above half threshold for context
120
+ this.config.promotionMinOccurrences, limit);
121
+ return aggregates.map(agg => ({
122
+ taskType: agg.task_type,
123
+ domain: this.taskTypeToQEDomain(agg.task_type),
124
+ count: agg.count,
125
+ avgReward: agg.avg_reward,
126
+ maxReward: agg.max_reward,
127
+ minReward: agg.min_reward,
128
+ actions: agg.actions ? agg.actions.split(',').filter(Boolean) : [],
129
+ successCount: agg.success_count,
130
+ latestAt: new Date(agg.latest_at),
131
+ }));
132
+ }
133
+ /**
134
+ * Map task type to QE domain
135
+ */
136
+ taskTypeToQEDomain(taskType) {
137
+ const mapping = {
138
+ 'generate': 'test-generation',
139
+ 'test-generation': 'test-generation',
140
+ 'test': 'test-generation',
141
+ 'analyze': 'coverage-analysis',
142
+ 'coverage': 'coverage-analysis',
143
+ 'coverage-analysis': 'coverage-analysis',
144
+ 'run': 'test-execution',
145
+ 'execute': 'test-execution',
146
+ 'test-execution': 'test-execution',
147
+ 'report': 'quality-assessment',
148
+ 'quality': 'quality-assessment',
149
+ 'assessment': 'quality-assessment',
150
+ 'security': 'security-compliance',
151
+ 'sast': 'security-compliance',
152
+ 'audit': 'security-compliance',
153
+ 'defect': 'defect-intelligence',
154
+ 'predict': 'defect-intelligence',
155
+ 'bug': 'defect-intelligence',
156
+ 'requirements': 'requirements-validation',
157
+ 'validation': 'requirements-validation',
158
+ 'code': 'code-intelligence',
159
+ 'complexity': 'code-intelligence',
160
+ 'contract': 'contract-testing',
161
+ 'api': 'contract-testing',
162
+ 'visual': 'visual-accessibility',
163
+ 'a11y': 'visual-accessibility',
164
+ 'accessibility': 'visual-accessibility',
165
+ 'chaos': 'chaos-resilience',
166
+ 'resilience': 'chaos-resilience',
167
+ 'flaky': 'chaos-resilience',
168
+ 'learning': 'learning-optimization',
169
+ 'optimize': 'learning-optimization',
170
+ };
171
+ const lowerType = taskType.toLowerCase();
172
+ for (const [key, domain] of Object.entries(mapping)) {
173
+ if (lowerType.includes(key)) {
174
+ return domain;
175
+ }
176
+ }
177
+ return null;
178
+ }
179
+ /**
180
+ * Map task type to pattern type
181
+ */
182
+ taskTypeToPatternType(taskType) {
183
+ const mapping = {
184
+ 'generate': 'test-template',
185
+ 'test': 'test-template',
186
+ 'coverage': 'coverage-strategy',
187
+ 'analyze': 'coverage-strategy',
188
+ 'mock': 'mock-pattern',
189
+ 'stub': 'mock-pattern',
190
+ 'assert': 'assertion-pattern',
191
+ 'expect': 'assertion-pattern',
192
+ 'security': 'assertion-pattern',
193
+ 'contract': 'api-contract',
194
+ 'api': 'api-contract',
195
+ 'visual': 'visual-baseline',
196
+ 'screenshot': 'visual-baseline',
197
+ 'a11y': 'a11y-check',
198
+ 'accessibility': 'a11y-check',
199
+ 'perf': 'perf-benchmark',
200
+ 'load': 'perf-benchmark',
201
+ 'stress': 'perf-benchmark',
202
+ 'flaky': 'flaky-fix',
203
+ 'retry': 'flaky-fix',
204
+ 'refactor': 'refactor-safe',
205
+ 'error': 'error-handling',
206
+ 'exception': 'error-handling',
207
+ };
208
+ const lowerType = taskType.toLowerCase();
209
+ for (const [key, patternType] of Object.entries(mapping)) {
210
+ if (lowerType.includes(key)) {
211
+ return patternType;
212
+ }
213
+ }
214
+ return 'test-template';
215
+ }
216
+ // ============================================================================
217
+ // Pattern Candidate Identification
218
+ // ============================================================================
219
+ /**
220
+ * Find pattern candidates from experience aggregates
221
+ */
222
+ findPatternCandidates(experiences) {
223
+ const candidates = [];
224
+ for (const exp of experiences) {
225
+ // Check if meets promotion thresholds
226
+ const meetsReward = exp.avgReward >= this.config.promotionRewardThreshold;
227
+ const meetsOccurrences = exp.count >= this.config.promotionMinOccurrences;
228
+ const successRate = exp.successCount / exp.count;
229
+ const meetsSuccessRate = successRate >= this.config.promotionMinSuccessRate;
230
+ if (meetsReward && meetsOccurrences && meetsSuccessRate) {
231
+ const domain = exp.domain || 'code-intelligence';
232
+ const patternType = this.taskTypeToPatternType(exp.taskType);
233
+ // Check if pattern already exists
234
+ const existingPattern = this.findExistingPattern(exp.taskType, domain);
235
+ if (existingPattern) {
236
+ // Pattern exists, will be reinforced instead
237
+ continue;
238
+ }
239
+ candidates.push({
240
+ name: `${exp.taskType}-success-pattern`,
241
+ domain,
242
+ patternType,
243
+ confidence: Math.min(0.95, exp.avgReward * 0.9),
244
+ sourceExperiences: exp.count,
245
+ avgReward: exp.avgReward,
246
+ successRate,
247
+ actions: exp.actions.slice(0, 5),
248
+ templateContent: this.generateTemplateContent(exp),
249
+ });
250
+ }
251
+ }
252
+ return candidates;
253
+ }
254
+ /**
255
+ * Find existing pattern by task type and domain
256
+ */
257
+ findExistingPattern(taskType, domain) {
258
+ const pattern = this.db.prepare(`
259
+ SELECT * FROM qe_patterns
260
+ WHERE name LIKE ? AND qe_domain = ? AND deprecated_at IS NULL
261
+ LIMIT 1
262
+ `).get(`%${taskType}%`, domain);
263
+ return pattern ? this.rowToPattern(pattern) : null;
264
+ }
265
+ /**
266
+ * Generate template content from experience aggregate
267
+ */
268
+ generateTemplateContent(exp) {
269
+ const actionSteps = exp.actions
270
+ .map((a, i) => `${i + 1}. ${a}`)
271
+ .join('\n');
272
+ return `Task Type: ${exp.taskType}
273
+ Domain: ${exp.domain || 'general'}
274
+ Average Reward: ${exp.avgReward.toFixed(3)}
275
+ Success Rate: ${(exp.successCount / exp.count * 100).toFixed(1)}%
276
+
277
+ Typical Actions:
278
+ ${actionSteps || 'N/A'}
279
+
280
+ Pattern extracted from ${exp.count} successful experiences.`;
281
+ }
282
+ // ============================================================================
283
+ // Pattern Promotion
284
+ // ============================================================================
285
+ /**
286
+ * Check if a pattern should be promoted
287
+ */
288
+ checkPromotion(patternId) {
289
+ const pattern = this.getPattern(patternId);
290
+ if (!pattern) {
291
+ return {
292
+ shouldPromote: false,
293
+ meetsRewardThreshold: false,
294
+ meetsOccurrenceThreshold: false,
295
+ meetsSuccessRateThreshold: false,
296
+ currentReward: 0,
297
+ currentOccurrences: 0,
298
+ currentSuccessRate: 0,
299
+ };
300
+ }
301
+ const avgReward = pattern.qualityScore;
302
+ const meetsReward = avgReward >= this.config.promotionRewardThreshold;
303
+ const meetsOccurrences = pattern.usageCount >= this.config.promotionMinOccurrences;
304
+ const meetsSuccessRate = pattern.successRate >= this.config.promotionMinSuccessRate;
305
+ return {
306
+ shouldPromote: pattern.tier === 'short-term' && meetsReward && meetsOccurrences && meetsSuccessRate,
307
+ meetsRewardThreshold: meetsReward,
308
+ meetsOccurrenceThreshold: meetsOccurrences,
309
+ meetsSuccessRateThreshold: meetsSuccessRate,
310
+ currentReward: avgReward,
311
+ currentOccurrences: pattern.usageCount,
312
+ currentSuccessRate: pattern.successRate,
313
+ };
314
+ }
315
+ /**
316
+ * Promote pattern to long-term tier
317
+ */
318
+ promotePattern(patternId) {
319
+ const check = this.checkPromotion(patternId);
320
+ if (!check.shouldPromote) {
321
+ return false;
322
+ }
323
+ this.db.prepare(`
324
+ UPDATE qe_patterns
325
+ SET tier = 'long-term',
326
+ promotion_date = datetime('now'),
327
+ confidence = MIN(1.0, confidence + 0.1),
328
+ updated_at = datetime('now')
329
+ WHERE id = ?
330
+ `).run(patternId);
331
+ console.log(`[PatternLifecycle] Promoted pattern ${patternId} to long-term`);
332
+ return true;
333
+ }
334
+ /**
335
+ * Promote all eligible patterns
336
+ */
337
+ promoteEligiblePatterns() {
338
+ const shortTermPatterns = this.db.prepare(`
339
+ SELECT id FROM qe_patterns
340
+ WHERE tier = 'short-term' AND deprecated_at IS NULL
341
+ `).all();
342
+ let promoted = 0;
343
+ for (const { id } of shortTermPatterns) {
344
+ if (this.promotePattern(id)) {
345
+ promoted++;
346
+ }
347
+ }
348
+ return { promoted, checked: shortTermPatterns.length };
349
+ }
350
+ // ============================================================================
351
+ // Pattern Deprecation
352
+ // ============================================================================
353
+ /**
354
+ * Check if a pattern should be deprecated
355
+ */
356
+ checkDeprecation(patternId) {
357
+ const pattern = this.getPattern(patternId);
358
+ if (!pattern) {
359
+ return { shouldDeprecate: false, reason: null };
360
+ }
361
+ // Already deprecated
362
+ if (pattern.deprecated_at) {
363
+ return { shouldDeprecate: false, reason: null };
364
+ }
365
+ // Check consecutive failures
366
+ const consecutiveFailures = pattern.consecutive_failures || 0;
367
+ if (consecutiveFailures >= this.config.deprecationFailureThreshold) {
368
+ return {
369
+ shouldDeprecate: true,
370
+ reason: 'failures',
371
+ consecutiveFailures,
372
+ };
373
+ }
374
+ // Check staleness
375
+ const lastUsedTime = pattern.lastUsedAt instanceof Date
376
+ ? pattern.lastUsedAt.getTime()
377
+ : new Date(pattern.lastUsedAt).getTime();
378
+ const daysSinceLastUse = (Date.now() - lastUsedTime) / (1000 * 60 * 60 * 24);
379
+ if (daysSinceLastUse >= this.config.staleDaysThreshold) {
380
+ return {
381
+ shouldDeprecate: true,
382
+ reason: 'stale',
383
+ daysSinceLastUse,
384
+ };
385
+ }
386
+ // Check low confidence
387
+ if (pattern.confidence < this.config.minActiveConfidence) {
388
+ return {
389
+ shouldDeprecate: true,
390
+ reason: 'low_confidence',
391
+ currentConfidence: pattern.confidence,
392
+ };
393
+ }
394
+ // Check age
395
+ const createdTime = pattern.createdAt instanceof Date
396
+ ? pattern.createdAt.getTime()
397
+ : new Date(pattern.createdAt).getTime();
398
+ const ageInDays = (Date.now() - createdTime) / (1000 * 60 * 60 * 24);
399
+ if (ageInDays >= this.config.maxAgeForActivePatterns && pattern.usageCount < 5) {
400
+ return {
401
+ shouldDeprecate: true,
402
+ reason: 'age',
403
+ ageInDays,
404
+ };
405
+ }
406
+ return { shouldDeprecate: false, reason: null };
407
+ }
408
+ /**
409
+ * Deprecate a pattern (soft delete)
410
+ */
411
+ deprecatePattern(patternId, reason) {
412
+ const check = this.checkDeprecation(patternId);
413
+ if (!check.shouldDeprecate && !reason) {
414
+ return false;
415
+ }
416
+ const actualReason = reason || check.reason || 'manual';
417
+ // Move to deprecated state (soft delete)
418
+ this.db.prepare(`
419
+ UPDATE qe_patterns
420
+ SET deprecated_at = datetime('now'),
421
+ updated_at = datetime('now')
422
+ WHERE id = ?
423
+ `).run(patternId);
424
+ // Store deprecation reason in metadata
425
+ const pattern = this.getPattern(patternId);
426
+ if (pattern) {
427
+ const metadata = {
428
+ deprecation_reason: actualReason,
429
+ deprecated_at: new Date().toISOString(),
430
+ final_confidence: pattern.confidence,
431
+ final_success_rate: pattern.successRate,
432
+ total_usage: pattern.usageCount,
433
+ };
434
+ this.db.prepare(`
435
+ UPDATE qe_patterns
436
+ SET context_json = json_patch(COALESCE(context_json, '{}'), ?)
437
+ WHERE id = ?
438
+ `).run(JSON.stringify({ deprecation_metadata: metadata }), patternId);
439
+ }
440
+ console.log(`[PatternLifecycle] Deprecated pattern ${patternId}: ${actualReason}`);
441
+ return true;
442
+ }
443
+ /**
444
+ * Deprecate all patterns that meet deprecation criteria
445
+ */
446
+ deprecateStalePatterns() {
447
+ const activePatterns = this.db.prepare(`
448
+ SELECT id FROM qe_patterns
449
+ WHERE deprecated_at IS NULL
450
+ `).all();
451
+ let deprecated = 0;
452
+ for (const { id } of activePatterns) {
453
+ const check = this.checkDeprecation(id);
454
+ if (check.shouldDeprecate) {
455
+ this.deprecatePattern(id, check.reason || undefined);
456
+ deprecated++;
457
+ }
458
+ }
459
+ return { deprecated, checked: activePatterns.length };
460
+ }
461
+ // ============================================================================
462
+ // Confidence Decay
463
+ // ============================================================================
464
+ /**
465
+ * Apply confidence decay to patterns that haven't been used recently
466
+ */
467
+ applyConfidenceDecay(daysSinceLastRun = 1) {
468
+ const decayFactor = 1 - (this.config.confidenceDecayRate * daysSinceLastRun);
469
+ // Get patterns that haven't been used in the decay period
470
+ const cutoffTime = Date.now() - (daysSinceLastRun * 24 * 60 * 60 * 1000);
471
+ const result = this.db.prepare(`
472
+ UPDATE qe_patterns
473
+ SET confidence = MAX(?, confidence * ?),
474
+ updated_at = datetime('now')
475
+ WHERE deprecated_at IS NULL
476
+ AND (last_used_at IS NULL OR datetime(last_used_at) < datetime(?, 'unixepoch'))
477
+ `).run(this.config.minActiveConfidence, decayFactor, cutoffTime / 1000);
478
+ return {
479
+ updated: result.changes,
480
+ decayed: result.changes,
481
+ };
482
+ }
483
+ // ============================================================================
484
+ // Pattern Usage Feedback
485
+ // ============================================================================
486
+ /**
487
+ * Record pattern usage success/failure
488
+ */
489
+ recordUsage(patternId, success) {
490
+ if (success) {
491
+ // Reset consecutive failures on success
492
+ this.db.prepare(`
493
+ UPDATE qe_patterns
494
+ SET usage_count = usage_count + 1,
495
+ successful_uses = successful_uses + 1,
496
+ consecutive_failures = 0,
497
+ confidence = MIN(1.0, confidence + 0.02),
498
+ success_rate = CAST(successful_uses + 1 AS REAL) / CAST(usage_count + 1 AS REAL),
499
+ last_used_at = datetime('now'),
500
+ updated_at = datetime('now')
501
+ WHERE id = ?
502
+ `).run(patternId);
503
+ }
504
+ else {
505
+ // Increment consecutive failures
506
+ this.db.prepare(`
507
+ UPDATE qe_patterns
508
+ SET usage_count = usage_count + 1,
509
+ consecutive_failures = consecutive_failures + 1,
510
+ confidence = MAX(0.1, confidence - 0.05),
511
+ success_rate = CAST(successful_uses AS REAL) / CAST(usage_count + 1 AS REAL),
512
+ last_used_at = datetime('now'),
513
+ updated_at = datetime('now')
514
+ WHERE id = ?
515
+ `).run(patternId);
516
+ }
517
+ // Recalculate quality score
518
+ this.db.prepare(`
519
+ UPDATE qe_patterns
520
+ SET quality_score = confidence * 0.3 + (MIN(usage_count, 100) / 100.0) * 0.2 + success_rate * 0.5
521
+ WHERE id = ?
522
+ `).run(patternId);
523
+ }
524
+ // ============================================================================
525
+ // Statistics
526
+ // ============================================================================
527
+ /**
528
+ * Get pattern lifecycle statistics
529
+ */
530
+ getStats() {
531
+ const stats = this.db.prepare(`
532
+ SELECT
533
+ COUNT(*) as total,
534
+ SUM(CASE WHEN deprecated_at IS NULL THEN 1 ELSE 0 END) as active,
535
+ SUM(CASE WHEN deprecated_at IS NOT NULL THEN 1 ELSE 0 END) as deprecated,
536
+ SUM(CASE WHEN tier = 'long-term' AND deprecated_at IS NULL THEN 1 ELSE 0 END) as promoted,
537
+ SUM(CASE WHEN tier = 'short-term' AND deprecated_at IS NULL THEN 1 ELSE 0 END) as short_term,
538
+ SUM(CASE WHEN tier = 'long-term' THEN 1 ELSE 0 END) as long_term,
539
+ AVG(CASE WHEN deprecated_at IS NULL THEN confidence ELSE NULL END) as avg_confidence,
540
+ AVG(CASE WHEN deprecated_at IS NULL THEN success_rate ELSE NULL END) as avg_success_rate
541
+ FROM qe_patterns
542
+ `).get();
543
+ // Count patterns near deprecation threshold
544
+ const nearDeprecation = this.db.prepare(`
545
+ SELECT COUNT(*) as count
546
+ FROM qe_patterns
547
+ WHERE deprecated_at IS NULL
548
+ AND (
549
+ consecutive_failures >= ?
550
+ OR confidence < ?
551
+ OR (julianday('now') - julianday(COALESCE(last_used_at, created_at))) >= ?
552
+ )
553
+ `).get(this.config.deprecationFailureThreshold - 1, this.config.minActiveConfidence + 0.1, this.config.staleDaysThreshold - 7);
554
+ return {
555
+ totalPatterns: stats.total || 0,
556
+ activePatterns: stats.active || 0,
557
+ deprecatedPatterns: stats.deprecated || 0,
558
+ promotedPatterns: stats.promoted || 0,
559
+ shortTermPatterns: stats.short_term || 0,
560
+ longTermPatterns: stats.long_term || 0,
561
+ avgConfidence: stats.avg_confidence || 0,
562
+ avgSuccessRate: stats.avg_success_rate || 0,
563
+ patternsNearDeprecation: nearDeprecation.count || 0,
564
+ };
565
+ }
566
+ // ============================================================================
567
+ // Helper Methods
568
+ // ============================================================================
569
+ /**
570
+ * Get a pattern by ID
571
+ */
572
+ getPattern(id) {
573
+ const row = this.db.prepare(`
574
+ SELECT * FROM qe_patterns WHERE id = ?
575
+ `).get(id);
576
+ return row ? this.rowToPattern(row) : null;
577
+ }
578
+ /**
579
+ * Convert database row to QEPattern
580
+ */
581
+ rowToPattern(row) {
582
+ return {
583
+ id: row.id,
584
+ patternType: row.pattern_type,
585
+ qeDomain: row.qe_domain,
586
+ domain: row.domain,
587
+ name: row.name,
588
+ description: row.description || '',
589
+ confidence: row.confidence,
590
+ usageCount: row.usage_count,
591
+ successRate: row.success_rate,
592
+ qualityScore: row.quality_score,
593
+ tier: row.tier,
594
+ template: JSON.parse(row.template_json || '{}'),
595
+ context: JSON.parse(row.context_json || '{}'),
596
+ createdAt: new Date(row.created_at),
597
+ lastUsedAt: row.last_used_at ? new Date(row.last_used_at) : new Date(row.created_at),
598
+ successfulUses: row.successful_uses,
599
+ reusable: row.reusable === 1,
600
+ reuseCount: row.reuse_count || 0,
601
+ averageTokenSavings: row.average_token_savings || 0,
602
+ };
603
+ }
604
+ }
605
+ // ============================================================================
606
+ // Factory
607
+ // ============================================================================
608
+ /**
609
+ * Create a pattern lifecycle manager
610
+ */
611
+ export function createPatternLifecycleManager(db, config) {
612
+ return new PatternLifecycleManager(db, config);
613
+ }
614
+ //# sourceMappingURL=pattern-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-lifecycle.js","sourceRoot":"","sources":["../../src/learning/pattern-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -115,6 +115,36 @@ export declare class SQLitePatternStore {
115
115
  * Store embedding for an existing pattern
116
116
  */
117
117
  storePatternEmbedding(patternId: string, embedding: number[]): void;
118
+ /**
119
+ * Record pattern reuse for metrics tracking (Phase 5.4)
120
+ *
121
+ * @param patternId - Pattern that was considered for reuse
122
+ * @param taskDescription - Task that triggered the pattern search
123
+ * @param similarityScore - Similarity score between task and pattern
124
+ * @param wasReused - Whether the pattern was actually reused
125
+ * @param tokensSaved - Estimated tokens saved if reused
126
+ * @param routingContext - Additional routing context
127
+ */
128
+ recordPatternReuse(patternId: string, taskDescription: string, similarityScore: number, wasReused?: boolean, tokensSaved?: number, routingContext?: Record<string, unknown>): void;
129
+ /**
130
+ * Get pattern reuse statistics (Phase 5.4)
131
+ *
132
+ * @param patternId - Optional: filter by specific pattern
133
+ * @param days - Number of days to look back (default: 7)
134
+ * @returns Reuse statistics
135
+ */
136
+ getPatternReuseStats(patternId?: string, days?: number): {
137
+ totalSearches: number;
138
+ totalReused: number;
139
+ reuseRate: number;
140
+ totalTokensSaved: number;
141
+ avgSimilarity: number;
142
+ topPatterns: Array<{
143
+ patternId: string;
144
+ reuseCount: number;
145
+ avgSimilarity: number;
146
+ }>;
147
+ };
118
148
  /**
119
149
  * Close the database
120
150
  */