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.
- package/.claude/agents/n8n/n8n-base-agent.md +3 -3
- package/.claude/agents/n8n/n8n-bdd-scenario-tester.md +2 -2
- package/.claude/agents/n8n/n8n-chaos-tester.md +2 -2
- package/.claude/agents/n8n/n8n-ci-orchestrator.md +2 -2
- package/.claude/agents/n8n/n8n-compliance-validator.md +2 -2
- package/.claude/agents/n8n/n8n-expression-validator.md +2 -2
- package/.claude/agents/n8n/n8n-integration-test.md +2 -2
- package/.claude/agents/n8n/n8n-monitoring-validator.md +2 -2
- package/.claude/agents/n8n/n8n-node-validator.md +2 -2
- package/.claude/agents/n8n/n8n-performance-tester.md +2 -2
- package/.claude/agents/n8n/n8n-security-auditor.md +2 -2
- package/.claude/agents/n8n/n8n-trigger-test.md +2 -2
- package/.claude/agents/n8n/n8n-unit-tester.md +2 -2
- package/.claude/agents/n8n/n8n-version-comparator.md +2 -2
- package/.claude/agents/n8n/n8n-workflow-executor.md +2 -2
- package/.claude/agents/subagents/qe-code-reviewer.md +2 -2
- package/.claude/agents/subagents/qe-coverage-gap-analyzer.md +2 -2
- package/.claude/agents/subagents/qe-data-generator.md +2 -2
- package/.claude/agents/subagents/qe-flaky-investigator.md +2 -2
- package/.claude/agents/subagents/qe-integration-tester.md +2 -2
- package/.claude/agents/subagents/qe-performance-validator.md +2 -2
- package/.claude/agents/subagents/qe-security-auditor.md +2 -2
- package/.claude/agents/subagents/qe-test-data-architect-sub.md +2 -2
- package/.claude/agents/subagents/qe-test-implementer.md +2 -2
- package/.claude/agents/subagents/qe-test-refactorer.md +2 -2
- package/.claude/agents/subagents/qe-test-writer.md +2 -2
- package/.claude/agents/v3/qe-accessibility-auditor.md +3 -3
- package/.claude/agents/v3/qe-bdd-generator.md +4 -4
- package/.claude/agents/v3/qe-chaos-engineer.md +3 -3
- package/.claude/agents/v3/qe-code-complexity.md +3 -3
- package/.claude/agents/v3/qe-code-intelligence.md +3 -3
- package/.claude/agents/v3/qe-contract-validator.md +3 -3
- package/.claude/agents/v3/qe-coverage-specialist.md +4 -4
- package/.claude/agents/v3/qe-defect-predictor.md +4 -4
- package/.claude/agents/v3/qe-dependency-mapper.md +3 -3
- package/.claude/agents/v3/qe-deployment-advisor.md +3 -3
- package/.claude/agents/v3/qe-flaky-hunter.md +3 -3
- package/.claude/agents/v3/qe-fleet-commander.md +3 -3
- package/.claude/agents/v3/qe-gap-detector.md +4 -4
- package/.claude/agents/v3/qe-graphql-tester.md +3 -3
- package/.claude/agents/v3/qe-impact-analyzer.md +3 -3
- package/.claude/agents/v3/qe-integration-architect.md +2 -2
- package/.claude/agents/v3/qe-integration-tester.md +3 -3
- package/.claude/agents/v3/qe-kg-builder.md +3 -3
- package/.claude/agents/v3/qe-learning-coordinator.md +24 -15
- package/.claude/agents/v3/qe-load-tester.md +3 -3
- package/.claude/agents/v3/qe-metrics-optimizer.md +3 -3
- package/.claude/agents/v3/qe-mutation-tester.md +3 -3
- package/.claude/agents/v3/qe-parallel-executor.md +4 -4
- package/.claude/agents/v3/qe-pattern-learner.md +16 -12
- package/.claude/agents/v3/qe-performance-tester.md +3 -3
- package/.claude/agents/v3/qe-product-factors-assessor.md +4 -4
- package/.claude/agents/v3/qe-property-tester.md +3 -3
- package/.claude/agents/v3/qe-quality-criteria-recommender.md +4 -4
- package/.claude/agents/v3/qe-quality-gate.md +4 -4
- package/.claude/agents/v3/qe-qx-partner.md +3 -3
- package/.claude/agents/v3/qe-regression-analyzer.md +3 -3
- package/.claude/agents/v3/qe-requirements-validator.md +4 -4
- package/.claude/agents/v3/qe-responsive-tester.md +3 -3
- package/.claude/agents/v3/qe-retry-handler.md +3 -3
- package/.claude/agents/v3/qe-risk-assessor.md +4 -4
- package/.claude/agents/v3/qe-root-cause-analyzer.md +3 -3
- package/.claude/agents/v3/qe-security-auditor.md +3 -3
- package/.claude/agents/v3/qe-security-scanner.md +3 -3
- package/.claude/agents/v3/qe-tdd-specialist.md +4 -4
- package/.claude/agents/v3/qe-test-architect.md +4 -4
- package/.claude/agents/v3/qe-test-idea-rewriter.md +3 -3
- package/.claude/agents/v3/qe-transfer-specialist.md +3 -3
- package/.claude/agents/v3/qe-visual-tester.md +3 -3
- package/.claude/agents/v3/reasoningbank-learner.md +4 -4
- package/.claude/agents/v3/subagents/qe-code-reviewer.md +3 -3
- package/.claude/agents/v3/subagents/qe-integration-reviewer.md +3 -3
- package/.claude/agents/v3/subagents/qe-performance-reviewer.md +3 -3
- package/.claude/agents/v3/subagents/qe-security-reviewer.md +3 -3
- package/.claude/agents/v3/subagents/qe-tdd-green.md +3 -3
- package/.claude/agents/v3/subagents/qe-tdd-red.md +3 -3
- package/.claude/agents/v3/subagents/qe-tdd-refactor.md +3 -3
- package/.claude/helpers/daemon-manager.sh +10 -10
- package/.claude/helpers/github-safe.js +10 -10
- package/.claude/helpers/statusline-v3.cjs +9 -3
- package/.claude/helpers/statusline.cjs +891 -59
- package/.claude/skills/agentic-quality-engineering/SKILL.md +6 -6
- package/.claude/skills/qcsd-cicd-swarm/SKILL.md +14 -14
- package/.claude/skills/qcsd-development-swarm/SKILL.md +14 -14
- package/.claude/skills/qcsd-ideation-swarm/SKILL.md +21 -21
- package/.claude/skills/qcsd-refinement-swarm/SKILL.md +22 -22
- package/.claude/skills/qe-iterative-loop/SKILL.md +4 -4
- package/.claude/skills/skills-manifest.json +17 -9
- package/.claude/skills/verification-quality/SKILL.md +0 -6
- package/CHANGELOG.md +52 -0
- package/README.md +22 -10
- package/package.json +5 -3
- package/v3/CHANGELOG.md +51 -3
- package/v3/README.md +9 -9
- package/v3/assets/agents/v3/qe-accessibility-auditor.md +12 -8
- package/v3/assets/agents/v3/qe-bdd-generator.md +13 -9
- package/v3/assets/agents/v3/qe-chaos-engineer.md +12 -8
- package/v3/assets/agents/v3/qe-code-complexity.md +12 -8
- package/v3/assets/agents/v3/qe-code-intelligence.md +12 -8
- package/v3/assets/agents/v3/qe-contract-validator.md +12 -8
- package/v3/assets/agents/v3/qe-coverage-specialist.md +13 -9
- package/v3/assets/agents/v3/qe-defect-predictor.md +13 -9
- package/v3/assets/agents/v3/qe-dependency-mapper.md +12 -8
- package/v3/assets/agents/v3/qe-deployment-advisor.md +12 -8
- package/v3/assets/agents/v3/qe-flaky-hunter.md +12 -8
- package/v3/assets/agents/v3/qe-fleet-commander.md +12 -8
- package/v3/assets/agents/v3/qe-gap-detector.md +13 -9
- package/v3/assets/agents/v3/qe-graphql-tester.md +12 -8
- package/v3/assets/agents/v3/qe-impact-analyzer.md +12 -8
- package/v3/assets/agents/v3/qe-integration-architect.md +2 -2
- package/v3/assets/agents/v3/qe-integration-tester.md +3 -3
- package/v3/assets/agents/v3/qe-kg-builder.md +12 -8
- package/v3/assets/agents/v3/qe-learning-coordinator.md +24 -15
- package/v3/assets/agents/v3/qe-load-tester.md +12 -8
- package/v3/assets/agents/v3/qe-metrics-optimizer.md +12 -8
- package/v3/assets/agents/v3/qe-mutation-tester.md +12 -8
- package/v3/assets/agents/v3/qe-parallel-executor.md +4 -4
- package/v3/assets/agents/v3/qe-pattern-learner.md +16 -12
- package/v3/assets/agents/v3/qe-performance-tester.md +12 -8
- package/v3/assets/agents/v3/qe-product-factors-assessor.md +4 -4
- package/v3/assets/agents/v3/qe-property-tester.md +12 -8
- package/v3/assets/agents/v3/qe-quality-criteria-recommender.md +4 -4
- package/v3/assets/agents/v3/qe-quality-gate.md +4 -4
- package/v3/assets/agents/v3/qe-qx-partner.md +12 -8
- package/v3/assets/agents/v3/qe-regression-analyzer.md +12 -8
- package/v3/assets/agents/v3/qe-requirements-validator.md +13 -9
- package/v3/assets/agents/v3/qe-responsive-tester.md +12 -8
- package/v3/assets/agents/v3/qe-retry-handler.md +12 -8
- package/v3/assets/agents/v3/qe-risk-assessor.md +13 -9
- package/v3/assets/agents/v3/qe-root-cause-analyzer.md +12 -8
- package/v3/assets/agents/v3/qe-security-auditor.md +12 -8
- package/v3/assets/agents/v3/qe-security-scanner.md +12 -8
- package/v3/assets/agents/v3/qe-tdd-specialist.md +4 -4
- package/v3/assets/agents/v3/qe-test-architect.md +13 -9
- package/v3/assets/agents/v3/qe-test-idea-rewriter.md +3 -3
- package/v3/assets/agents/v3/qe-transfer-specialist.md +12 -8
- package/v3/assets/agents/v3/qe-visual-tester.md +3 -3
- package/v3/assets/agents/v3/subagents/qe-code-reviewer.md +12 -8
- package/v3/assets/agents/v3/subagents/qe-integration-reviewer.md +12 -8
- package/v3/assets/agents/v3/subagents/qe-performance-reviewer.md +12 -8
- package/v3/assets/agents/v3/subagents/qe-security-reviewer.md +12 -8
- package/v3/assets/agents/v3/subagents/qe-tdd-green.md +12 -8
- package/v3/assets/agents/v3/subagents/qe-tdd-red.md +12 -8
- package/v3/assets/agents/v3/subagents/qe-tdd-refactor.md +12 -8
- package/v3/assets/skills/agentic-quality-engineering/SKILL.md +6 -6
- package/v3/assets/skills/qcsd-ideation-swarm/SKILL.md +21 -21
- package/v3/assets/skills/qe-iterative-loop/SKILL.md +4 -4
- package/v3/dist/cli/bundle.js +2508 -816
- package/v3/dist/cli/commands/hooks.d.ts.map +1 -1
- package/v3/dist/cli/commands/hooks.js +34 -21
- package/v3/dist/cli/commands/hooks.js.map +1 -1
- package/v3/dist/cli/commands/learning.d.ts +23 -0
- package/v3/dist/cli/commands/learning.d.ts.map +1 -0
- package/v3/dist/cli/commands/learning.js +1448 -0
- package/v3/dist/cli/commands/learning.js.map +1 -0
- package/v3/dist/cli/index.js +2 -0
- package/v3/dist/cli/index.js.map +1 -1
- package/v3/dist/init/init-wizard.d.ts +2 -1
- package/v3/dist/init/init-wizard.d.ts.map +1 -1
- package/v3/dist/init/init-wizard.js +25 -23
- package/v3/dist/init/init-wizard.js.map +1 -1
- package/v3/dist/init/phases/07-hooks.d.ts +3 -0
- package/v3/dist/init/phases/07-hooks.d.ts.map +1 -1
- package/v3/dist/init/phases/07-hooks.js +12 -9
- package/v3/dist/init/phases/07-hooks.js.map +1 -1
- package/v3/dist/kernel/unified-memory.d.ts +8 -3
- package/v3/dist/kernel/unified-memory.d.ts.map +1 -1
- package/v3/dist/kernel/unified-memory.js +39 -9
- package/v3/dist/kernel/unified-memory.js.map +1 -1
- package/v3/dist/learning/aqe-learning-engine.d.ts +26 -0
- package/v3/dist/learning/aqe-learning-engine.d.ts.map +1 -1
- package/v3/dist/learning/aqe-learning-engine.js +116 -2
- package/v3/dist/learning/aqe-learning-engine.js.map +1 -1
- package/v3/dist/learning/index.d.ts +4 -0
- package/v3/dist/learning/index.d.ts.map +1 -1
- package/v3/dist/learning/index.js +8 -0
- package/v3/dist/learning/index.js.map +1 -1
- package/v3/dist/learning/metrics-tracker.d.ts +133 -0
- package/v3/dist/learning/metrics-tracker.d.ts.map +1 -0
- package/v3/dist/learning/metrics-tracker.js +396 -0
- package/v3/dist/learning/metrics-tracker.js.map +1 -0
- package/v3/dist/learning/pattern-lifecycle.d.ts +203 -0
- package/v3/dist/learning/pattern-lifecycle.d.ts.map +1 -0
- package/v3/dist/learning/pattern-lifecycle.js +614 -0
- package/v3/dist/learning/pattern-lifecycle.js.map +1 -0
- package/v3/dist/learning/sqlite-persistence.d.ts +30 -0
- package/v3/dist/learning/sqlite-persistence.d.ts.map +1 -1
- package/v3/dist/learning/sqlite-persistence.js +137 -0
- package/v3/dist/learning/sqlite-persistence.js.map +1 -1
- package/v3/dist/mcp/bundle.js +104568 -102038
- package/v3/dist/mcp/handlers/handler-factory.d.ts +5 -0
- package/v3/dist/mcp/handlers/handler-factory.d.ts.map +1 -1
- package/v3/dist/mcp/handlers/handler-factory.js +84 -0
- package/v3/dist/mcp/handlers/handler-factory.js.map +1 -1
- package/v3/dist/mcp/services/task-router.d.ts +32 -0
- package/v3/dist/mcp/services/task-router.d.ts.map +1 -1
- package/v3/dist/mcp/services/task-router.js +28 -0
- package/v3/dist/mcp/services/task-router.js.map +1 -1
- package/v3/dist/workers/workers/learning-consolidation.d.ts +29 -0
- package/v3/dist/workers/workers/learning-consolidation.d.ts.map +1 -1
- package/v3/dist/workers/workers/learning-consolidation.js +294 -3
- package/v3/dist/workers/workers/learning-consolidation.js.map +1 -1
- 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":"AAAA;;;;;;;;;GASG;AAsCH;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAA2B;IAC9D,wBAAwB,EAAE,GAAG;IAC7B,uBAAuB,EAAE,CAAC;IAC1B,uBAAuB,EAAE,GAAG;IAC5B,2BAA2B,EAAE,CAAC;IAC9B,kBAAkB,EAAE,EAAE;IACtB,mBAAmB,EAAE,IAAI,EAAE,aAAa;IACxC,mBAAmB,EAAE,GAAG;IACxB,uBAAuB,EAAE,EAAE;CAC5B,CAAC;AA4EF,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E;;;;;GAKG;AACH,MAAM,OAAO,uBAAuB;IAIf;IAHF,MAAM,CAAyB;IAEhD,YACmB,EAAgB,EACjC,SAA0C,EAAE;QAD3B,OAAE,GAAF,EAAE,CAAc;QAGjC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,wBAAwB,EAAE,GAAG,MAAM,EAAE,CAAC;QACzD,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACK,YAAY;QAClB,yCAAyC;QACzC,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;OAEf,CAAC,CAAC,GAAG,EAAE,CAAC;QACX,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;YAC/B,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;OAEZ,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;QAC9E,CAAC;QAED,gDAAgD;QAChD,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;OAEf,CAAC,CAAC,GAAG,EAAE,CAAC;QACX,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;OAEZ,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;QACrF,CAAC;QAED,0CAA0C;QAC1C,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;OAEf,CAAC,CAAC,GAAG,EAAE,CAAC;QACX,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;OAEZ,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,wBAAwB;IACxB,+EAA+E;IAE/E;;OAEG;IACH,oBAAoB,CAAC,UAIjB,EAAE;QACJ,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC;QAC5E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC;QACnC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;QACzC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAEtE,6CAA6C;QAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAGnC,CAAC,CAAC,GAAG,EAAE,CAAC;QAET,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;YACvE,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;KAgBlC,CAAC,CAAC,GAAG,CACJ,SAAS,EACT,cAAc,EACd,SAAS,GAAG,GAAG,EAAE,uDAAuD;QACxE,IAAI,CAAC,MAAM,CAAC,uBAAuB,EACnC,KAAK,CAUL,CAAC;QAEH,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5B,QAAQ,EAAE,GAAG,CAAC,SAAS;YACvB,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;YAC9C,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;YAClE,YAAY,EAAE,GAAG,CAAC,aAAa;YAC/B,QAAQ,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;SAClC,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,QAAgB;QACzC,MAAM,OAAO,GAA6B;YACxC,UAAU,EAAE,iBAAiB;YAC7B,iBAAiB,EAAE,iBAAiB;YACpC,MAAM,EAAE,iBAAiB;YACzB,SAAS,EAAE,mBAAmB;YAC9B,UAAU,EAAE,mBAAmB;YAC/B,mBAAmB,EAAE,mBAAmB;YACxC,KAAK,EAAE,gBAAgB;YACvB,SAAS,EAAE,gBAAgB;YAC3B,gBAAgB,EAAE,gBAAgB;YAClC,QAAQ,EAAE,oBAAoB;YAC9B,SAAS,EAAE,oBAAoB;YAC/B,YAAY,EAAE,oBAAoB;YAClC,UAAU,EAAE,qBAAqB;YACjC,MAAM,EAAE,qBAAqB;YAC7B,OAAO,EAAE,qBAAqB;YAC9B,QAAQ,EAAE,qBAAqB;YAC/B,SAAS,EAAE,qBAAqB;YAChC,KAAK,EAAE,qBAAqB;YAC5B,cAAc,EAAE,yBAAyB;YACzC,YAAY,EAAE,yBAAyB;YACvC,MAAM,EAAE,mBAAmB;YAC3B,YAAY,EAAE,mBAAmB;YACjC,UAAU,EAAE,kBAAkB;YAC9B,KAAK,EAAE,kBAAkB;YACzB,QAAQ,EAAE,sBAAsB;YAChC,MAAM,EAAE,sBAAsB;YAC9B,eAAe,EAAE,sBAAsB;YACvC,OAAO,EAAE,kBAAkB;YAC3B,YAAY,EAAE,kBAAkB;YAChC,OAAO,EAAE,kBAAkB;YAC3B,UAAU,EAAE,uBAAuB;YACnC,UAAU,EAAE,uBAAuB;SACpC,CAAC;QAEF,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACpD,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,QAAgB;QAC5C,MAAM,OAAO,GAAkC;YAC7C,UAAU,EAAE,eAAe;YAC3B,MAAM,EAAE,eAAe;YACvB,UAAU,EAAE,mBAAmB;YAC/B,SAAS,EAAE,mBAAmB;YAC9B,MAAM,EAAE,cAAc;YACtB,MAAM,EAAE,cAAc;YACtB,QAAQ,EAAE,mBAAmB;YAC7B,QAAQ,EAAE,mBAAmB;YAC7B,UAAU,EAAE,mBAAmB;YAC/B,UAAU,EAAE,cAAc;YAC1B,KAAK,EAAE,cAAc;YACrB,QAAQ,EAAE,iBAAiB;YAC3B,YAAY,EAAE,iBAAiB;YAC/B,MAAM,EAAE,YAAY;YACpB,eAAe,EAAE,YAAY;YAC7B,MAAM,EAAE,gBAAgB;YACxB,MAAM,EAAE,gBAAgB;YACxB,QAAQ,EAAE,gBAAgB;YAC1B,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,WAAW;YACpB,UAAU,EAAE,eAAe;YAC3B,OAAO,EAAE,gBAAgB;YACzB,WAAW,EAAE,gBAAgB;SAC9B,CAAC;QAEF,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACzD,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,WAAW,CAAC;YACrB,CAAC;QACH,CAAC;QACD,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,+EAA+E;IAC/E,mCAAmC;IACnC,+EAA+E;IAE/E;;OAEG;IACH,qBAAqB,CAAC,WAAkC;QACtD,MAAM,UAAU,GAAuB,EAAE,CAAC;QAE1C,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,sCAAsC;YACtC,MAAM,WAAW,GAAG,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC;YAC1E,MAAM,gBAAgB,GAAG,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC;YAC1E,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC;YACjD,MAAM,gBAAgB,GAAG,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC;YAE5E,IAAI,WAAW,IAAI,gBAAgB,IAAI,gBAAgB,EAAE,CAAC;gBACxD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,mBAAmB,CAAC;gBACjD,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAE7D,kCAAkC;gBAClC,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACvE,IAAI,eAAe,EAAE,CAAC;oBACpB,6CAA6C;oBAC7C,SAAS;gBACX,CAAC;gBAED,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,GAAG,GAAG,CAAC,QAAQ,kBAAkB;oBACvC,MAAM;oBACN,WAAW;oBACX,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC;oBAC/C,iBAAiB,EAAE,GAAG,CAAC,KAAK;oBAC5B,SAAS,EAAE,GAAG,CAAC,SAAS;oBACxB,WAAW;oBACX,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;oBAChC,eAAe,EAAE,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC;iBACnD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,QAAgB,EAAE,MAAgB;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAI/B,CAAC,CAAC,GAAG,CAAC,IAAI,QAAQ,GAAG,EAAE,MAAM,CAA2B,CAAC;QAE1D,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,CAAC;IAED;;OAEG;IACK,uBAAuB,CAAC,GAAwB;QACtD,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO;aAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;aAC/B,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,OAAO,cAAc,GAAG,CAAC,QAAQ;UAC3B,GAAG,CAAC,MAAM,IAAI,SAAS;kBACf,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC1B,CAAC,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;;;EAG7D,WAAW,IAAI,KAAK;;yBAEG,GAAG,CAAC,KAAK,0BAA0B,CAAC;IAC3D,CAAC;IAED,+EAA+E;IAC/E,oBAAoB;IACpB,+EAA+E;IAE/E;;OAEG;IACH,cAAc,CAAC,SAAiB;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,aAAa,EAAE,KAAK;gBACpB,oBAAoB,EAAE,KAAK;gBAC3B,wBAAwB,EAAE,KAAK;gBAC/B,yBAAyB,EAAE,KAAK;gBAChC,aAAa,EAAE,CAAC;gBAChB,kBAAkB,EAAE,CAAC;gBACrB,kBAAkB,EAAE,CAAC;aACtB,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;QACvC,MAAM,WAAW,GAAG,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC;QACtE,MAAM,gBAAgB,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC;QACnF,MAAM,gBAAgB,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC;QAEpF,OAAO;YACL,aAAa,EAAE,OAAO,CAAC,IAAI,KAAK,YAAY,IAAI,WAAW,IAAI,gBAAgB,IAAI,gBAAgB;YACnG,oBAAoB,EAAE,WAAW;YACjC,wBAAwB,EAAE,gBAAgB;YAC1C,yBAAyB,EAAE,gBAAgB;YAC3C,aAAa,EAAE,SAAS;YACxB,kBAAkB,EAAE,OAAO,CAAC,UAAU;YACtC,kBAAkB,EAAE,OAAO,CAAC,WAAW;SACxC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,SAAiB;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;KAOf,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAElB,OAAO,CAAC,GAAG,CAAC,uCAAuC,SAAS,eAAe,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,uBAAuB;QACrB,MAAM,iBAAiB,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAGzC,CAAC,CAAC,GAAG,EAA2B,CAAC;QAElC,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,KAAK,MAAM,EAAE,EAAE,EAAE,IAAI,iBAAiB,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC5B,QAAQ,EAAE,CAAC;YACb,CAAC;QACH,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,CAAC,MAAM,EAAE,CAAC;IACzD,CAAC;IAED,+EAA+E;IAC/E,sBAAsB;IACtB,+EAA+E;IAE/E;;OAEG;IACH,gBAAgB,CAAC,SAAiB;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAClD,CAAC;QAED,qBAAqB;QACrB,IAAK,OAAkC,CAAC,aAAa,EAAE,CAAC;YACtD,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAClD,CAAC;QAED,6BAA6B;QAC7B,MAAM,mBAAmB,GAAI,OAAkC,CAAC,oBAAoB,IAAI,CAAC,CAAC;QAC1F,IAAI,mBAAmB,IAAI,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE,CAAC;YACnE,OAAO;gBACL,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,UAAU;gBAClB,mBAAmB;aACpB,CAAC;QACJ,CAAC;QAED,kBAAkB;QAClB,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,YAAY,IAAI;YACrD,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE;YAC9B,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;QAC3C,MAAM,gBAAgB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7E,IAAI,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;YACvD,OAAO;gBACL,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,OAAO;gBACf,gBAAgB;aACjB,CAAC;QACJ,CAAC;QAED,uBAAuB;QACvB,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;YACzD,OAAO;gBACL,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,gBAAgB;gBACxB,iBAAiB,EAAE,OAAO,CAAC,UAAU;aACtC,CAAC;QACJ,CAAC;QAED,YAAY;QACZ,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,YAAY,IAAI;YACnD,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE;YAC7B,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACrE,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,uBAAuB,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YAC/E,OAAO;gBACL,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,KAAK;gBACb,SAAS;aACV,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,SAAiB,EAAE,MAAe;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC;QAExD,yCAAyC;QACzC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;KAKf,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAElB,uCAAuC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG;gBACf,kBAAkB,EAAE,YAAY;gBAChC,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACvC,gBAAgB,EAAE,OAAO,CAAC,UAAU;gBACpC,kBAAkB,EAAE,OAAO,CAAC,WAAW;gBACvC,WAAW,EAAE,OAAO,CAAC,UAAU;aAChC,CAAC;YAEF,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;OAIf,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,oBAAoB,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,yCAAyC,SAAS,KAAK,YAAY,EAAE,CAAC,CAAC;QACnF,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,sBAAsB;QACpB,MAAM,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAGtC,CAAC,CAAC,GAAG,EAA2B,CAAC;QAElC,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,KAAK,MAAM,EAAE,EAAE,EAAE,IAAI,cAAc,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;gBAC1B,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC;gBACrD,UAAU,EAAE,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC;IACxD,CAAC;IAED,+EAA+E;IAC/E,mBAAmB;IACnB,+EAA+E;IAE/E;;OAEG;IACH,oBAAoB,CAAC,mBAA2B,CAAC;QAC/C,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,GAAG,gBAAgB,CAAC,CAAC;QAE7E,0DAA0D;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAEzE,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;KAM9B,CAAC,CAAC,GAAG,CACJ,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAC/B,WAAW,EACX,UAAU,GAAG,IAAI,CAClB,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,yBAAyB;IACzB,+EAA+E;IAE/E;;OAEG;IACH,WAAW,CAAC,SAAiB,EAAE,OAAgB;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,wCAAwC;YACxC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;OAUf,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,iCAAiC;YACjC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;OASf,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpB,CAAC;QAED,4BAA4B;QAC5B,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAIf,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpB,CAAC;IAED,+EAA+E;IAC/E,aAAa;IACb,+EAA+E;IAE/E;;OAEG;IACH,QAAQ;QACN,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;KAW7B,CAAC,CAAC,GAAG,EASL,CAAC;QAEF,4CAA4C;QAC5C,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;KASvC,CAAC,CAAC,GAAG,CACJ,IAAI,CAAC,MAAM,CAAC,2BAA2B,GAAG,CAAC,EAC3C,IAAI,CAAC,MAAM,CAAC,mBAAmB,GAAG,GAAG,EACrC,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,CACd,CAAC;QAEvB,OAAO;YACL,aAAa,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC;YAC/B,cAAc,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC;YACjC,kBAAkB,EAAE,KAAK,CAAC,UAAU,IAAI,CAAC;YACzC,gBAAgB,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC;YACrC,iBAAiB,EAAE,KAAK,CAAC,UAAU,IAAI,CAAC;YACxC,gBAAgB,EAAE,KAAK,CAAC,SAAS,IAAI,CAAC;YACtC,aAAa,EAAE,KAAK,CAAC,cAAc,IAAI,CAAC;YACxC,cAAc,EAAE,KAAK,CAAC,gBAAgB,IAAI,CAAC;YAC3C,uBAAuB,EAAE,eAAe,CAAC,KAAK,IAAI,CAAC;SACpD,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,iBAAiB;IACjB,+EAA+E;IAE/E;;OAEG;IACK,UAAU,CAAC,EAAU;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAE3B,CAAC,CAAC,GAAG,CAAC,EAAE,CAA2B,CAAC;QAErC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7C,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,GAAe;QAClC,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,WAAW,EAAE,GAAG,CAAC,YAA6B;YAC9C,QAAQ,EAAE,GAAG,CAAC,SAAqB;YACnC,MAAM,EAAE,GAAG,CAAC,MAAuD;YACnE,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE;YAClC,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,UAAU,EAAE,GAAG,CAAC,WAAW;YAC3B,WAAW,EAAE,GAAG,CAAC,YAAY;YAC7B,YAAY,EAAE,GAAG,CAAC,aAAa;YAC/B,IAAI,EAAE,GAAG,CAAC,IAAkC;YAC5C,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC;YAC/C,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC;YAC7C,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;YACnC,UAAU,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;YACpF,cAAc,EAAE,GAAG,CAAC,eAAe;YACnC,QAAQ,EAAE,GAAG,CAAC,QAAQ,KAAK,CAAC;YAC5B,UAAU,EAAE,GAAG,CAAC,WAAW,IAAI,CAAC;YAChC,mBAAmB,EAAE,GAAG,CAAC,qBAAqB,IAAI,CAAC;SACpD,CAAC;IACJ,CAAC;CACF;AAiCD,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,6BAA6B,CAC3C,EAAgB,EAChB,MAAwC;IAExC,OAAO,IAAI,uBAAuB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -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
|
*/
|