cmp-standards 3.5.1 → 3.7.1
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/README.md +399 -633
- package/dist/analytics/CrossProjectAnalytics.js +65 -65
- package/dist/cli/index.js +255 -12
- package/dist/cli/index.js.map +1 -1
- package/dist/dashboard/tokens.js +173 -173
- package/dist/db/cloud.d.ts +1 -0
- package/dist/db/cloud.d.ts.map +1 -1
- package/dist/db/migrations.js +256 -256
- package/dist/db/turso-client.js +2 -2
- package/dist/db/upstash-client.d.ts +9 -0
- package/dist/db/upstash-client.d.ts.map +1 -1
- package/dist/db/upstash-client.js +11 -0
- package/dist/db/upstash-client.js.map +1 -1
- package/dist/eslint/rules/no-async-useeffect.js +6 -6
- package/dist/experts/ExpertVotePersistence.js +9 -9
- package/dist/hooks/auto-learning-hook.d.ts +48 -0
- package/dist/hooks/auto-learning-hook.d.ts.map +1 -0
- package/dist/hooks/auto-learning-hook.js +258 -0
- package/dist/hooks/auto-learning-hook.js.map +1 -0
- package/dist/hooks/cloud-post-tool-use.d.ts.map +1 -1
- package/dist/hooks/cloud-post-tool-use.js +72 -10
- package/dist/hooks/cloud-post-tool-use.js.map +1 -1
- package/dist/hooks/cloud-pre-tool-use.d.ts +12 -9
- package/dist/hooks/cloud-pre-tool-use.d.ts.map +1 -1
- package/dist/hooks/cloud-pre-tool-use.js +227 -99
- package/dist/hooks/cloud-pre-tool-use.js.map +1 -1
- package/dist/hooks/cloud-session-start.js +5 -5
- package/dist/hooks/fast-session-start.d.ts +24 -0
- package/dist/hooks/fast-session-start.d.ts.map +1 -0
- package/dist/hooks/fast-session-start.js +354 -0
- package/dist/hooks/fast-session-start.js.map +1 -0
- package/dist/hooks/resilient-hook-runner.d.ts +78 -0
- package/dist/hooks/resilient-hook-runner.d.ts.map +1 -0
- package/dist/hooks/resilient-hook-runner.js +201 -0
- package/dist/hooks/resilient-hook-runner.js.map +1 -0
- package/dist/hooks/session-end.js +14 -14
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -1
- package/dist/patterns/registry.js +90 -90
- package/dist/schema/codewiki-types.d.ts +10 -10
- package/dist/schema/docs-types.d.ts +8 -8
- package/dist/schema/ecosystem-types.d.ts +12 -12
- package/dist/services/BootstrapService.d.ts +123 -0
- package/dist/services/BootstrapService.d.ts.map +1 -0
- package/dist/services/BootstrapService.js +309 -0
- package/dist/services/BootstrapService.js.map +1 -0
- package/dist/services/CodeWikiIndexer.js +3 -3
- package/dist/services/ContextGenerator.js +7 -7
- package/dist/services/FeedbackCollector.js +11 -11
- package/dist/services/GitIntegration.js +9 -9
- package/dist/services/HookVerifier.js +70 -70
- package/dist/services/KnowledgeGapDetector.d.ts +122 -0
- package/dist/services/KnowledgeGapDetector.d.ts.map +1 -0
- package/dist/services/KnowledgeGapDetector.js +530 -0
- package/dist/services/KnowledgeGapDetector.js.map +1 -0
- package/dist/services/ProjectScaffold.d.ts.map +1 -1
- package/dist/services/ProjectScaffold.js +79 -78
- package/dist/services/ProjectScaffold.js.map +1 -1
- package/dist/services/auto-evolution-trigger.d.ts +101 -0
- package/dist/services/auto-evolution-trigger.d.ts.map +1 -0
- package/dist/services/auto-evolution-trigger.js +359 -0
- package/dist/services/auto-evolution-trigger.js.map +1 -0
- package/dist/services/cloud-memory-service.d.ts +101 -0
- package/dist/services/cloud-memory-service.d.ts.map +1 -0
- package/dist/services/cloud-memory-service.js +363 -0
- package/dist/services/cloud-memory-service.js.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +6 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/knowledge-graph.d.ts +121 -0
- package/dist/services/knowledge-graph.d.ts.map +1 -0
- package/dist/services/knowledge-graph.js +446 -0
- package/dist/services/knowledge-graph.js.map +1 -0
- package/dist/services/memory-keeper-client.d.ts +106 -0
- package/dist/services/memory-keeper-client.d.ts.map +1 -0
- package/dist/services/memory-keeper-client.js +319 -0
- package/dist/services/memory-keeper-client.js.map +1 -0
- package/dist/services/memory-router.d.ts +25 -0
- package/dist/services/memory-router.d.ts.map +1 -1
- package/dist/services/memory-router.js +236 -98
- package/dist/services/memory-router.js.map +1 -1
- package/dist/services/pattern-learning.d.ts +79 -0
- package/dist/services/pattern-learning.d.ts.map +1 -0
- package/dist/services/pattern-learning.js +312 -0
- package/dist/services/pattern-learning.js.map +1 -0
- package/dist/services/pattern-tracker.js +95 -95
- package/dist/services/semantic-search.js +2 -2
- package/dist/services/skill-learning-bridge.d.ts +100 -0
- package/dist/services/skill-learning-bridge.d.ts.map +1 -0
- package/dist/services/skill-learning-bridge.js +331 -0
- package/dist/services/skill-learning-bridge.js.map +1 -0
- package/dist/services/unified-memory-router.d.ts +123 -0
- package/dist/services/unified-memory-router.d.ts.map +1 -0
- package/dist/services/unified-memory-router.js +555 -0
- package/dist/services/unified-memory-router.js.map +1 -0
- package/package.json +124 -116
- package/standards/README.md +94 -50
- package/standards/experts/expert-routing.md +215 -215
- package/standards/general/code-quality.md +86 -86
- package/standards/general/ecosystem.md +243 -0
- package/standards/general/learning-loop.md +192 -0
- package/standards/general/memory-usage.md +205 -205
- package/standards/general/project-onboarding.md +339 -0
- package/standards/general/sync-workflow.md +235 -235
- package/standards/general/workflow.md +82 -82
- package/standards/hooks/mandatory-tracking.md +446 -446
- package/standards/infrastructure/cloud-database.md +287 -287
- package/standards/mcp/server-design.md +243 -243
- package/standards/mcp/tool-patterns.md +354 -354
- package/standards/skills/skill-structure.md +286 -286
- package/standards/skills/workflow-design.md +323 -323
- package/standards/tools/tool-design.md +297 -297
- package/templates/agents/architecture-expert.md +61 -61
- package/templates/agents/database-expert.md +62 -62
- package/templates/agents/documentation-expert.md +57 -57
- package/templates/agents/ecosystem-expert.md +104 -0
- package/templates/agents/memory-expert.md +88 -88
- package/templates/agents/performance-expert.md +61 -61
- package/templates/agents/security-expert.md +59 -59
- package/templates/agents/ux-expert.md +63 -63
- package/templates/agents/worker.md +75 -75
- package/templates/ai-skills/SKILL_TEMPLATE.md +55 -55
- package/templates/claude-settings.json +72 -72
- package/templates/commands/experts.md +138 -138
- package/templates/hooks/README.md +158 -158
- package/templates/hooks/project.config.json.template +77 -77
- package/templates/hooks/settings.local.json.template +57 -57
- package/templates/hooks.config.json +21 -0
- package/templates/memory-config.json +56 -56
- package/templates/memory-config.schema.json +212 -212
- package/templates/settings.json +58 -58
- package/templates/skills/continue.md +205 -205
- package/templates/workflows/business-improvement.md +264 -264
- package/templates/workflows/expert-review.md +153 -153
- package/templates/workflows/internal-app.md +245 -245
- package/templates/workflows/sync-docs.md +187 -187
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Auto-Evolution Trigger Service
|
|
3
|
+
* @description Automatically triggers skill evolution when thresholds are met
|
|
4
|
+
*
|
|
5
|
+
* Monitors skill learnings and triggers evolution when:
|
|
6
|
+
* - A skill reaches 10+ pending learnings
|
|
7
|
+
* - Weekly schedule (if enabled)
|
|
8
|
+
* - Manual trigger via API
|
|
9
|
+
*
|
|
10
|
+
* @version 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
13
|
+
import { join } from 'path';
|
|
14
|
+
import { homedir } from 'os';
|
|
15
|
+
import { getSkillLearningBridge } from './skill-learning-bridge.js';
|
|
16
|
+
// =============================================================================
|
|
17
|
+
// Constants
|
|
18
|
+
// =============================================================================
|
|
19
|
+
const DEFAULT_CONFIG = {
|
|
20
|
+
skillsDir: join(homedir(), '.claude', 'skills'),
|
|
21
|
+
threshold: 10,
|
|
22
|
+
autoTrigger: true,
|
|
23
|
+
logEvolutions: true,
|
|
24
|
+
notifyOnEvolution: false
|
|
25
|
+
};
|
|
26
|
+
const EVOLUTION_LOG = join(homedir(), '.cmp-standards', 'evolution-history.json');
|
|
27
|
+
// =============================================================================
|
|
28
|
+
// Auto-Evolution Trigger
|
|
29
|
+
// =============================================================================
|
|
30
|
+
export class AutoEvolutionTrigger {
|
|
31
|
+
config;
|
|
32
|
+
bridge = getSkillLearningBridge();
|
|
33
|
+
lastCheck = 0;
|
|
34
|
+
checkInterval = null;
|
|
35
|
+
constructor(config = {}) {
|
|
36
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Check all skills and trigger evolution for those ready
|
|
40
|
+
*/
|
|
41
|
+
async checkAndEvolve() {
|
|
42
|
+
const report = {
|
|
43
|
+
triggered: new Date().toISOString(),
|
|
44
|
+
results: [],
|
|
45
|
+
skillsChecked: 0,
|
|
46
|
+
skillsEvolved: 0,
|
|
47
|
+
totalPatterns: 0
|
|
48
|
+
};
|
|
49
|
+
try {
|
|
50
|
+
// Get skill stats
|
|
51
|
+
const allStats = await this.bridge.getSkillStats();
|
|
52
|
+
report.skillsChecked = allStats.length;
|
|
53
|
+
// Find skills ready for evolution
|
|
54
|
+
const readySkills = allStats.filter(s => s.readyForEvolution);
|
|
55
|
+
if (readySkills.length === 0) {
|
|
56
|
+
return report;
|
|
57
|
+
}
|
|
58
|
+
console.log(`[auto-evolution] Found ${readySkills.length} skills ready for evolution`);
|
|
59
|
+
// Evolve each ready skill
|
|
60
|
+
for (const skill of readySkills) {
|
|
61
|
+
const result = await this.evolveSkill(skill);
|
|
62
|
+
report.results.push(result);
|
|
63
|
+
if (result.success) {
|
|
64
|
+
report.skillsEvolved++;
|
|
65
|
+
report.totalPatterns += result.patternsFound;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Log evolution
|
|
69
|
+
if (this.config.logEvolutions) {
|
|
70
|
+
this.logEvolution(report);
|
|
71
|
+
}
|
|
72
|
+
this.lastCheck = Date.now();
|
|
73
|
+
return report;
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.error('[auto-evolution] Check failed:', error);
|
|
77
|
+
return report;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Evolve a single skill
|
|
82
|
+
*/
|
|
83
|
+
async evolveSkill(skill) {
|
|
84
|
+
const result = {
|
|
85
|
+
skill: skill.name,
|
|
86
|
+
patternsFound: 0,
|
|
87
|
+
rulesGenerated: 0,
|
|
88
|
+
timestamp: new Date().toISOString(),
|
|
89
|
+
success: false
|
|
90
|
+
};
|
|
91
|
+
try {
|
|
92
|
+
const learningsFile = join(this.config.skillsDir, skill.path, 'learnings.md');
|
|
93
|
+
const skillFile = join(this.config.skillsDir, skill.path, 'SKILL.md');
|
|
94
|
+
if (!existsSync(learningsFile)) {
|
|
95
|
+
result.error = 'Learnings file not found';
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
const content = readFileSync(learningsFile, 'utf-8');
|
|
99
|
+
// Extract learning blocks
|
|
100
|
+
const learningBlocks = content.match(/### Learning \d{4}-\d{2}-\d{2}[\s\S]*?(?=### Learning|\n## |$)/g) || [];
|
|
101
|
+
// Analyze patterns
|
|
102
|
+
const patterns = this.analyzePatterns(learningBlocks);
|
|
103
|
+
result.patternsFound = patterns.length;
|
|
104
|
+
if (patterns.length > 0) {
|
|
105
|
+
// Generate evolution entry
|
|
106
|
+
const evolutionEntry = this.generateEvolutionEntry(skill, patterns);
|
|
107
|
+
// Update skill file with new patterns
|
|
108
|
+
if (existsSync(skillFile)) {
|
|
109
|
+
this.updateSkillFile(skillFile, patterns);
|
|
110
|
+
}
|
|
111
|
+
// Update learnings.md stats
|
|
112
|
+
this.updateLearningsStats(learningsFile, patterns.length);
|
|
113
|
+
// Log to evolution-log.md
|
|
114
|
+
this.appendToEvolutionLog(skill, patterns);
|
|
115
|
+
result.rulesGenerated = patterns.length;
|
|
116
|
+
result.success = true;
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
result.success = true; // No patterns, but not an error
|
|
120
|
+
}
|
|
121
|
+
return result;
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
result.error = String(error);
|
|
125
|
+
return result;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Analyze learnings to extract patterns
|
|
130
|
+
*/
|
|
131
|
+
analyzePatterns(learningBlocks) {
|
|
132
|
+
const problemSolutions = new Map();
|
|
133
|
+
for (const block of learningBlocks) {
|
|
134
|
+
const problemMatch = block.match(/\*\*Problem:\*\* (.+)/);
|
|
135
|
+
const solutionMatch = block.match(/\*\*Solution:\*\* (.+)/);
|
|
136
|
+
if (problemMatch && solutionMatch) {
|
|
137
|
+
const problem = this.normalizePattern(problemMatch[1]);
|
|
138
|
+
const solution = solutionMatch[1];
|
|
139
|
+
const existing = problemSolutions.get(problem);
|
|
140
|
+
if (existing) {
|
|
141
|
+
existing.count++;
|
|
142
|
+
if (!existing.solutions.includes(solution)) {
|
|
143
|
+
existing.solutions.push(solution);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
problemSolutions.set(problem, { count: 1, solutions: [solution] });
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Return patterns that appear 2+ times
|
|
152
|
+
const patterns = [];
|
|
153
|
+
for (const [pattern, data] of problemSolutions) {
|
|
154
|
+
if (data.count >= 2) {
|
|
155
|
+
patterns.push({
|
|
156
|
+
pattern,
|
|
157
|
+
count: data.count,
|
|
158
|
+
solution: data.solutions[0] // Most common solution
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return patterns.sort((a, b) => b.count - a.count);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Normalize a problem pattern for comparison
|
|
166
|
+
*/
|
|
167
|
+
normalizePattern(text) {
|
|
168
|
+
return text
|
|
169
|
+
.toLowerCase()
|
|
170
|
+
.replace(/`[^`]+`/g, 'CODE') // Replace inline code
|
|
171
|
+
.replace(/\s+/g, ' ')
|
|
172
|
+
.trim();
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Generate evolution entry markdown
|
|
176
|
+
*/
|
|
177
|
+
generateEvolutionEntry(skill, patterns) {
|
|
178
|
+
const date = new Date().toISOString().split('T')[0];
|
|
179
|
+
return `
|
|
180
|
+
## Evolution ${date}
|
|
181
|
+
|
|
182
|
+
**Skill:** ${skill.name}
|
|
183
|
+
**Learnings Analyzed:** ${skill.pendingLearnings}
|
|
184
|
+
**Patterns Extracted:** ${patterns.length}
|
|
185
|
+
|
|
186
|
+
### New Patterns
|
|
187
|
+
|
|
188
|
+
${patterns.map(p => `- **${p.pattern}** (${p.count}x)
|
|
189
|
+
- Solution: ${p.solution}`).join('\n\n')}
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
`;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Update skill file with new patterns
|
|
196
|
+
*/
|
|
197
|
+
updateSkillFile(skillFile, patterns) {
|
|
198
|
+
let content = readFileSync(skillFile, 'utf-8');
|
|
199
|
+
// Find "## Patterns" section and add new patterns
|
|
200
|
+
const patternsSection = content.indexOf('## Patterns');
|
|
201
|
+
if (patternsSection !== -1) {
|
|
202
|
+
const insertPoint = content.indexOf('\n', patternsSection) + 1;
|
|
203
|
+
const newPatterns = patterns.map(p => `\n### ${p.pattern}\n- **Occurrences:** ${p.count}\n- **Resolution:** ${p.solution}\n`).join('');
|
|
204
|
+
content = content.slice(0, insertPoint) + newPatterns + content.slice(insertPoint);
|
|
205
|
+
writeFileSync(skillFile, content);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Update learnings.md statistics
|
|
210
|
+
*/
|
|
211
|
+
updateLearningsStats(learningsFile, patternsExtracted) {
|
|
212
|
+
let content = readFileSync(learningsFile, 'utf-8');
|
|
213
|
+
// Reset pending count
|
|
214
|
+
content = content.replace(/\*\*Learnings Pendientes:\*\* \d+/, '**Learnings Pendientes:** 0');
|
|
215
|
+
// Update last evolution date
|
|
216
|
+
const today = new Date().toISOString().split('T')[0];
|
|
217
|
+
content = content.replace(/\*\*Última Evolución:\*\* .+/, `**Última Evolución:** ${today}`);
|
|
218
|
+
writeFileSync(learningsFile, content);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Append to evolution-log.md
|
|
222
|
+
*/
|
|
223
|
+
appendToEvolutionLog(skill, patterns) {
|
|
224
|
+
const logFile = join(this.config.skillsDir, 'meta', 'skill-evolver', 'evolution-log.md');
|
|
225
|
+
if (!existsSync(logFile)) {
|
|
226
|
+
return; // Skip if no log file
|
|
227
|
+
}
|
|
228
|
+
const date = new Date().toISOString();
|
|
229
|
+
const entry = `
|
|
230
|
+
## Evolution ${date}
|
|
231
|
+
|
|
232
|
+
**Skill Evolved:** ${skill.name}
|
|
233
|
+
**Learnings Analyzed:** ${skill.pendingLearnings}
|
|
234
|
+
**Patterns Found:** ${patterns.length}
|
|
235
|
+
|
|
236
|
+
**Patterns:**
|
|
237
|
+
${patterns.map(p => `- ${p.pattern} (${p.count}x)`).join('\n')}
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
`;
|
|
241
|
+
let content = readFileSync(logFile, 'utf-8');
|
|
242
|
+
// Update total count
|
|
243
|
+
const totalMatch = content.match(/\*\*Total Evoluciones:\*\* (\d+)/);
|
|
244
|
+
if (totalMatch) {
|
|
245
|
+
const total = parseInt(totalMatch[1], 10);
|
|
246
|
+
content = content.replace(/\*\*Total Evoluciones:\*\* \d+/, `**Total Evoluciones:** ${total + 1}`);
|
|
247
|
+
}
|
|
248
|
+
// Insert after "## Evolution History"
|
|
249
|
+
const historyHeader = '## Evolution History';
|
|
250
|
+
const historyIndex = content.indexOf(historyHeader);
|
|
251
|
+
if (historyIndex !== -1) {
|
|
252
|
+
const insertPoint = content.indexOf('\n', historyIndex) + 1;
|
|
253
|
+
content = content.slice(0, insertPoint) + '\n' + entry + content.slice(insertPoint);
|
|
254
|
+
}
|
|
255
|
+
writeFileSync(logFile, content);
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Log evolution to history file
|
|
259
|
+
*/
|
|
260
|
+
logEvolution(report) {
|
|
261
|
+
try {
|
|
262
|
+
const dir = join(homedir(), '.cmp-standards');
|
|
263
|
+
if (!existsSync(dir)) {
|
|
264
|
+
mkdirSync(dir, { recursive: true });
|
|
265
|
+
}
|
|
266
|
+
let history = [];
|
|
267
|
+
if (existsSync(EVOLUTION_LOG)) {
|
|
268
|
+
try {
|
|
269
|
+
history = JSON.parse(readFileSync(EVOLUTION_LOG, 'utf-8'));
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
history = [];
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
history.push(report);
|
|
276
|
+
// Keep last 100 evolutions
|
|
277
|
+
if (history.length > 100) {
|
|
278
|
+
history = history.slice(-100);
|
|
279
|
+
}
|
|
280
|
+
writeFileSync(EVOLUTION_LOG, JSON.stringify(history, null, 2));
|
|
281
|
+
}
|
|
282
|
+
catch (error) {
|
|
283
|
+
console.error('[auto-evolution] Failed to log evolution:', error);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Start periodic evolution checks
|
|
288
|
+
*/
|
|
289
|
+
startPeriodicCheck(intervalMs = 60 * 60 * 1000) {
|
|
290
|
+
if (this.checkInterval)
|
|
291
|
+
return;
|
|
292
|
+
// Check immediately
|
|
293
|
+
this.checkAndEvolve();
|
|
294
|
+
// Then check periodically
|
|
295
|
+
this.checkInterval = setInterval(() => {
|
|
296
|
+
this.checkAndEvolve();
|
|
297
|
+
}, intervalMs);
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Stop periodic evolution checks
|
|
301
|
+
*/
|
|
302
|
+
stopPeriodicCheck() {
|
|
303
|
+
if (this.checkInterval) {
|
|
304
|
+
clearInterval(this.checkInterval);
|
|
305
|
+
this.checkInterval = null;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Get evolution history
|
|
310
|
+
*/
|
|
311
|
+
getHistory() {
|
|
312
|
+
if (!existsSync(EVOLUTION_LOG))
|
|
313
|
+
return [];
|
|
314
|
+
try {
|
|
315
|
+
return JSON.parse(readFileSync(EVOLUTION_LOG, 'utf-8'));
|
|
316
|
+
}
|
|
317
|
+
catch {
|
|
318
|
+
return [];
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Get current evolution status
|
|
323
|
+
*/
|
|
324
|
+
async getStatus() {
|
|
325
|
+
const stats = await this.bridge.getSkillStats();
|
|
326
|
+
const ready = stats.filter(s => s.readyForEvolution);
|
|
327
|
+
const totalLearnings = stats.reduce((sum, s) => sum + s.totalLearnings, 0);
|
|
328
|
+
const history = this.getHistory();
|
|
329
|
+
const lastEvolution = history.length > 0
|
|
330
|
+
? history[history.length - 1].triggered
|
|
331
|
+
: null;
|
|
332
|
+
return {
|
|
333
|
+
skillsReady: ready.length,
|
|
334
|
+
totalLearnings,
|
|
335
|
+
lastEvolution,
|
|
336
|
+
nextCheck: this.checkInterval
|
|
337
|
+
? new Date(this.lastCheck + 60 * 60 * 1000).toISOString()
|
|
338
|
+
: null
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
// =============================================================================
|
|
343
|
+
// Singleton & Factory
|
|
344
|
+
// =============================================================================
|
|
345
|
+
let triggerInstance = null;
|
|
346
|
+
export function getAutoEvolutionTrigger(config) {
|
|
347
|
+
if (!triggerInstance || config) {
|
|
348
|
+
triggerInstance = new AutoEvolutionTrigger(config);
|
|
349
|
+
}
|
|
350
|
+
return triggerInstance;
|
|
351
|
+
}
|
|
352
|
+
export function resetAutoEvolutionTrigger() {
|
|
353
|
+
if (triggerInstance) {
|
|
354
|
+
triggerInstance.stopPeriodicCheck();
|
|
355
|
+
triggerInstance = null;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
export default AutoEvolutionTrigger;
|
|
359
|
+
//# sourceMappingURL=auto-evolution-trigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-evolution-trigger.js","sourceRoot":"","sources":["../../src/services/auto-evolution-trigger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Cloud Memory Service
|
|
3
|
+
* @description Unified cloud memory operations using Turso + Upstash Vector
|
|
4
|
+
*
|
|
5
|
+
* This service provides:
|
|
6
|
+
* - Persistent storage in Turso (SQLite edge)
|
|
7
|
+
* - Semantic search via Upstash Vector
|
|
8
|
+
* - Bidirectional sync with local memory systems
|
|
9
|
+
*
|
|
10
|
+
* @version 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
import type { DevSystem } from '../types/index.js';
|
|
13
|
+
export interface CloudMemory {
|
|
14
|
+
id: string;
|
|
15
|
+
type: 'memory' | 'learning' | 'pattern' | 'task' | 'decision' | 'knowledge';
|
|
16
|
+
system: DevSystem;
|
|
17
|
+
title: string;
|
|
18
|
+
content: string;
|
|
19
|
+
domain?: string;
|
|
20
|
+
tags?: string[];
|
|
21
|
+
priority?: 'critical' | 'high' | 'normal' | 'low';
|
|
22
|
+
source?: 'auto' | 'manual' | 'sync';
|
|
23
|
+
syncedAt?: string;
|
|
24
|
+
createdAt: string;
|
|
25
|
+
updatedAt: string;
|
|
26
|
+
}
|
|
27
|
+
export interface CloudMemoryInput {
|
|
28
|
+
type: CloudMemory['type'];
|
|
29
|
+
system: DevSystem;
|
|
30
|
+
title: string;
|
|
31
|
+
content: string;
|
|
32
|
+
domain?: string;
|
|
33
|
+
tags?: string[];
|
|
34
|
+
priority?: CloudMemory['priority'];
|
|
35
|
+
source?: CloudMemory['source'];
|
|
36
|
+
}
|
|
37
|
+
export interface SearchOptions {
|
|
38
|
+
query: string;
|
|
39
|
+
system?: DevSystem;
|
|
40
|
+
type?: CloudMemory['type'];
|
|
41
|
+
domain?: string;
|
|
42
|
+
limit?: number;
|
|
43
|
+
minScore?: number;
|
|
44
|
+
}
|
|
45
|
+
export interface SearchResult {
|
|
46
|
+
memory: CloudMemory;
|
|
47
|
+
score: number;
|
|
48
|
+
}
|
|
49
|
+
export interface SyncStatus {
|
|
50
|
+
tursoConnected: boolean;
|
|
51
|
+
vectorConnected: boolean;
|
|
52
|
+
lastSync: string | null;
|
|
53
|
+
memoriesInCloud: number;
|
|
54
|
+
vectorsIndexed: number;
|
|
55
|
+
}
|
|
56
|
+
export declare class CloudMemoryService {
|
|
57
|
+
private initialized;
|
|
58
|
+
private tursoAvailable;
|
|
59
|
+
private vectorAvailable;
|
|
60
|
+
/**
|
|
61
|
+
* Initialize cloud connections
|
|
62
|
+
*/
|
|
63
|
+
init(): Promise<SyncStatus>;
|
|
64
|
+
/**
|
|
65
|
+
* Save a memory to cloud (Turso + Vector)
|
|
66
|
+
*/
|
|
67
|
+
save(input: CloudMemoryInput): Promise<CloudMemory | null>;
|
|
68
|
+
/**
|
|
69
|
+
* Search memories using semantic similarity
|
|
70
|
+
*/
|
|
71
|
+
search(options: SearchOptions): Promise<SearchResult[]>;
|
|
72
|
+
/**
|
|
73
|
+
* Get a memory by ID
|
|
74
|
+
*/
|
|
75
|
+
get(id: string): Promise<CloudMemory | null>;
|
|
76
|
+
/**
|
|
77
|
+
* Get recent memories
|
|
78
|
+
*/
|
|
79
|
+
getRecent(options?: {
|
|
80
|
+
system?: DevSystem;
|
|
81
|
+
type?: CloudMemory['type'];
|
|
82
|
+
limit?: number;
|
|
83
|
+
since?: Date;
|
|
84
|
+
}): Promise<CloudMemory[]>;
|
|
85
|
+
/**
|
|
86
|
+
* Delete a memory
|
|
87
|
+
*/
|
|
88
|
+
delete(id: string): Promise<boolean>;
|
|
89
|
+
/**
|
|
90
|
+
* Batch save memories
|
|
91
|
+
*/
|
|
92
|
+
batchSave(inputs: CloudMemoryInput[]): Promise<number>;
|
|
93
|
+
/**
|
|
94
|
+
* Get sync status
|
|
95
|
+
*/
|
|
96
|
+
getStatus(): Promise<SyncStatus>;
|
|
97
|
+
}
|
|
98
|
+
export declare function getCloudMemoryService(): CloudMemoryService;
|
|
99
|
+
export declare function resetCloudMemoryService(): void;
|
|
100
|
+
export default CloudMemoryService;
|
|
101
|
+
//# sourceMappingURL=cloud-memory-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-memory-service.d.ts","sourceRoot":"","sources":["../../src/services/cloud-memory-service.ts"],"names":[],"mappings":"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"}
|