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.
Files changed (139) hide show
  1. package/README.md +399 -633
  2. package/dist/analytics/CrossProjectAnalytics.js +65 -65
  3. package/dist/cli/index.js +255 -12
  4. package/dist/cli/index.js.map +1 -1
  5. package/dist/dashboard/tokens.js +173 -173
  6. package/dist/db/cloud.d.ts +1 -0
  7. package/dist/db/cloud.d.ts.map +1 -1
  8. package/dist/db/migrations.js +256 -256
  9. package/dist/db/turso-client.js +2 -2
  10. package/dist/db/upstash-client.d.ts +9 -0
  11. package/dist/db/upstash-client.d.ts.map +1 -1
  12. package/dist/db/upstash-client.js +11 -0
  13. package/dist/db/upstash-client.js.map +1 -1
  14. package/dist/eslint/rules/no-async-useeffect.js +6 -6
  15. package/dist/experts/ExpertVotePersistence.js +9 -9
  16. package/dist/hooks/auto-learning-hook.d.ts +48 -0
  17. package/dist/hooks/auto-learning-hook.d.ts.map +1 -0
  18. package/dist/hooks/auto-learning-hook.js +258 -0
  19. package/dist/hooks/auto-learning-hook.js.map +1 -0
  20. package/dist/hooks/cloud-post-tool-use.d.ts.map +1 -1
  21. package/dist/hooks/cloud-post-tool-use.js +72 -10
  22. package/dist/hooks/cloud-post-tool-use.js.map +1 -1
  23. package/dist/hooks/cloud-pre-tool-use.d.ts +12 -9
  24. package/dist/hooks/cloud-pre-tool-use.d.ts.map +1 -1
  25. package/dist/hooks/cloud-pre-tool-use.js +227 -99
  26. package/dist/hooks/cloud-pre-tool-use.js.map +1 -1
  27. package/dist/hooks/cloud-session-start.js +5 -5
  28. package/dist/hooks/fast-session-start.d.ts +24 -0
  29. package/dist/hooks/fast-session-start.d.ts.map +1 -0
  30. package/dist/hooks/fast-session-start.js +354 -0
  31. package/dist/hooks/fast-session-start.js.map +1 -0
  32. package/dist/hooks/resilient-hook-runner.d.ts +78 -0
  33. package/dist/hooks/resilient-hook-runner.d.ts.map +1 -0
  34. package/dist/hooks/resilient-hook-runner.js +201 -0
  35. package/dist/hooks/resilient-hook-runner.js.map +1 -0
  36. package/dist/hooks/session-end.js +14 -14
  37. package/dist/index.d.ts +12 -0
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +17 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/patterns/registry.js +90 -90
  42. package/dist/schema/codewiki-types.d.ts +10 -10
  43. package/dist/schema/docs-types.d.ts +8 -8
  44. package/dist/schema/ecosystem-types.d.ts +12 -12
  45. package/dist/services/BootstrapService.d.ts +123 -0
  46. package/dist/services/BootstrapService.d.ts.map +1 -0
  47. package/dist/services/BootstrapService.js +309 -0
  48. package/dist/services/BootstrapService.js.map +1 -0
  49. package/dist/services/CodeWikiIndexer.js +3 -3
  50. package/dist/services/ContextGenerator.js +7 -7
  51. package/dist/services/FeedbackCollector.js +11 -11
  52. package/dist/services/GitIntegration.js +9 -9
  53. package/dist/services/HookVerifier.js +70 -70
  54. package/dist/services/KnowledgeGapDetector.d.ts +122 -0
  55. package/dist/services/KnowledgeGapDetector.d.ts.map +1 -0
  56. package/dist/services/KnowledgeGapDetector.js +530 -0
  57. package/dist/services/KnowledgeGapDetector.js.map +1 -0
  58. package/dist/services/ProjectScaffold.d.ts.map +1 -1
  59. package/dist/services/ProjectScaffold.js +79 -78
  60. package/dist/services/ProjectScaffold.js.map +1 -1
  61. package/dist/services/auto-evolution-trigger.d.ts +101 -0
  62. package/dist/services/auto-evolution-trigger.d.ts.map +1 -0
  63. package/dist/services/auto-evolution-trigger.js +359 -0
  64. package/dist/services/auto-evolution-trigger.js.map +1 -0
  65. package/dist/services/cloud-memory-service.d.ts +101 -0
  66. package/dist/services/cloud-memory-service.d.ts.map +1 -0
  67. package/dist/services/cloud-memory-service.js +363 -0
  68. package/dist/services/cloud-memory-service.js.map +1 -0
  69. package/dist/services/index.d.ts +4 -0
  70. package/dist/services/index.d.ts.map +1 -1
  71. package/dist/services/index.js +6 -0
  72. package/dist/services/index.js.map +1 -1
  73. package/dist/services/knowledge-graph.d.ts +121 -0
  74. package/dist/services/knowledge-graph.d.ts.map +1 -0
  75. package/dist/services/knowledge-graph.js +446 -0
  76. package/dist/services/knowledge-graph.js.map +1 -0
  77. package/dist/services/memory-keeper-client.d.ts +106 -0
  78. package/dist/services/memory-keeper-client.d.ts.map +1 -0
  79. package/dist/services/memory-keeper-client.js +319 -0
  80. package/dist/services/memory-keeper-client.js.map +1 -0
  81. package/dist/services/memory-router.d.ts +25 -0
  82. package/dist/services/memory-router.d.ts.map +1 -1
  83. package/dist/services/memory-router.js +236 -98
  84. package/dist/services/memory-router.js.map +1 -1
  85. package/dist/services/pattern-learning.d.ts +79 -0
  86. package/dist/services/pattern-learning.d.ts.map +1 -0
  87. package/dist/services/pattern-learning.js +312 -0
  88. package/dist/services/pattern-learning.js.map +1 -0
  89. package/dist/services/pattern-tracker.js +95 -95
  90. package/dist/services/semantic-search.js +2 -2
  91. package/dist/services/skill-learning-bridge.d.ts +100 -0
  92. package/dist/services/skill-learning-bridge.d.ts.map +1 -0
  93. package/dist/services/skill-learning-bridge.js +331 -0
  94. package/dist/services/skill-learning-bridge.js.map +1 -0
  95. package/dist/services/unified-memory-router.d.ts +123 -0
  96. package/dist/services/unified-memory-router.d.ts.map +1 -0
  97. package/dist/services/unified-memory-router.js +555 -0
  98. package/dist/services/unified-memory-router.js.map +1 -0
  99. package/package.json +124 -116
  100. package/standards/README.md +94 -50
  101. package/standards/experts/expert-routing.md +215 -215
  102. package/standards/general/code-quality.md +86 -86
  103. package/standards/general/ecosystem.md +243 -0
  104. package/standards/general/learning-loop.md +192 -0
  105. package/standards/general/memory-usage.md +205 -205
  106. package/standards/general/project-onboarding.md +339 -0
  107. package/standards/general/sync-workflow.md +235 -235
  108. package/standards/general/workflow.md +82 -82
  109. package/standards/hooks/mandatory-tracking.md +446 -446
  110. package/standards/infrastructure/cloud-database.md +287 -287
  111. package/standards/mcp/server-design.md +243 -243
  112. package/standards/mcp/tool-patterns.md +354 -354
  113. package/standards/skills/skill-structure.md +286 -286
  114. package/standards/skills/workflow-design.md +323 -323
  115. package/standards/tools/tool-design.md +297 -297
  116. package/templates/agents/architecture-expert.md +61 -61
  117. package/templates/agents/database-expert.md +62 -62
  118. package/templates/agents/documentation-expert.md +57 -57
  119. package/templates/agents/ecosystem-expert.md +104 -0
  120. package/templates/agents/memory-expert.md +88 -88
  121. package/templates/agents/performance-expert.md +61 -61
  122. package/templates/agents/security-expert.md +59 -59
  123. package/templates/agents/ux-expert.md +63 -63
  124. package/templates/agents/worker.md +75 -75
  125. package/templates/ai-skills/SKILL_TEMPLATE.md +55 -55
  126. package/templates/claude-settings.json +72 -72
  127. package/templates/commands/experts.md +138 -138
  128. package/templates/hooks/README.md +158 -158
  129. package/templates/hooks/project.config.json.template +77 -77
  130. package/templates/hooks/settings.local.json.template +57 -57
  131. package/templates/hooks.config.json +21 -0
  132. package/templates/memory-config.json +56 -56
  133. package/templates/memory-config.schema.json +212 -212
  134. package/templates/settings.json +58 -58
  135. package/templates/skills/continue.md +205 -205
  136. package/templates/workflows/business-improvement.md +264 -264
  137. package/templates/workflows/expert-review.md +153 -153
  138. package/templates/workflows/internal-app.md +245 -245
  139. package/templates/workflows/sync-docs.md +187 -187
@@ -0,0 +1,555 @@
1
+ /**
2
+ * @file Unified Memory Router
3
+ * @description Routes memory operations across all storage backends
4
+ *
5
+ * ## Architecture
6
+ *
7
+ * UnifiedMemoryRouter routes operations to multiple backends:
8
+ *
9
+ * save(item):
10
+ * - memory-keeper MCP (local, fast, session-based)
11
+ * - skills/learnings.md (if learning type)
12
+ * - cmp-standards cloud (persistent, cross-project)
13
+ *
14
+ * search(query):
15
+ * - memory-keeper (local context)
16
+ * - skills (learned patterns)
17
+ * - cloud (historical knowledge)
18
+ *
19
+ * sync():
20
+ * - Bidirectional sync between all backends
21
+ *
22
+ * @version 1.0.0
23
+ */
24
+ import { existsSync, readFileSync } from 'fs';
25
+ import { join } from 'path';
26
+ import { homedir } from 'os';
27
+ import { getSkillLearningBridge } from './skill-learning-bridge.js';
28
+ import { getMemoryKeeperClient } from './memory-keeper-client.js';
29
+ import { getCloudMemoryService } from './cloud-memory-service.js';
30
+ // =============================================================================
31
+ // Default Config
32
+ // =============================================================================
33
+ const DEFAULT_CONFIG = {
34
+ system: 'ECOSYSTEM',
35
+ skillsDir: join(homedir(), '.claude', 'skills'),
36
+ enableCloud: true, // Uses CloudMemoryService for Turso + Upstash Vector
37
+ enableSkills: true,
38
+ cloudSyncInterval: 5 * 60 * 1000 // 5 minutes - set to 0 to disable
39
+ };
40
+ // =============================================================================
41
+ // Unified Memory Router
42
+ // =============================================================================
43
+ export class UnifiedMemoryRouter {
44
+ config;
45
+ skillBridge = getSkillLearningBridge();
46
+ memoryKeeper = getMemoryKeeperClient();
47
+ cloudMemory = getCloudMemoryService();
48
+ syncTimer = null;
49
+ syncedKeys = new Set();
50
+ constructor(config = {}) {
51
+ this.config = { ...DEFAULT_CONFIG, ...config };
52
+ // Start periodic sync if enabled
53
+ if (this.config.cloudSyncInterval > 0) {
54
+ this.startPeriodicSync();
55
+ }
56
+ }
57
+ /**
58
+ * Save an item to all appropriate backends
59
+ */
60
+ async save(item) {
61
+ const result = {
62
+ memoryKeeper: false,
63
+ skills: false,
64
+ cloud: false
65
+ };
66
+ // 1. Always try memory-keeper (local, fast)
67
+ try {
68
+ result.memoryKeeper = await this.saveToMemoryKeeper(item);
69
+ }
70
+ catch (error) {
71
+ console.error('[router] memory-keeper save failed:', error);
72
+ }
73
+ // 2. If it's a learning, also write to skills
74
+ if (this.config.enableSkills && (item.type === 'learning' || item.type === 'pattern')) {
75
+ try {
76
+ const learning = this.itemToLearning(item);
77
+ if (learning) {
78
+ const bridgeResult = await this.skillBridge.recordLearning(learning);
79
+ result.skills = bridgeResult.skillsWritten;
80
+ }
81
+ }
82
+ catch (error) {
83
+ console.error('[router] skills save failed:', error);
84
+ }
85
+ }
86
+ // 3. Sync to cloud (async, non-blocking)
87
+ if (this.config.enableCloud) {
88
+ this.saveToCloud(item)
89
+ .then(success => { result.cloud = success; })
90
+ .catch(error => console.error('[router] cloud save failed:', error));
91
+ }
92
+ return result;
93
+ }
94
+ /**
95
+ * Search across all backends
96
+ */
97
+ async search(query) {
98
+ const results = [];
99
+ const limit = query.limit ?? 20;
100
+ // Search in parallel
101
+ const searches = await Promise.allSettled([
102
+ this.searchMemoryKeeper(query),
103
+ query.includeSkills !== false ? this.searchSkills(query) : Promise.resolve([]),
104
+ query.includeCloud !== false && this.config.enableCloud
105
+ ? this.searchCloud(query)
106
+ : Promise.resolve([])
107
+ ]);
108
+ // Collect results
109
+ for (const search of searches) {
110
+ if (search.status === 'fulfilled') {
111
+ results.push(...search.value);
112
+ }
113
+ }
114
+ // Sort by score and limit
115
+ return results
116
+ .sort((a, b) => b.score - a.score)
117
+ .slice(0, limit);
118
+ }
119
+ /**
120
+ * Get context for session start
121
+ */
122
+ async getSessionContext(domain) {
123
+ const [memories, learnings, patterns, skillsStats] = await Promise.all([
124
+ this.search({ type: 'memory', domain, limit: 5 }),
125
+ this.search({ type: 'learning', domain, limit: 5 }),
126
+ this.search({ type: 'pattern', limit: 10 }),
127
+ this.skillBridge.getSkillStats()
128
+ ]);
129
+ return {
130
+ recentMemories: memories.map(r => r.item),
131
+ recentLearnings: learnings.map(r => r.item),
132
+ activePatterns: patterns.map(r => r.item),
133
+ skillsStatus: skillsStats.map(s => ({
134
+ name: s.name,
135
+ learnings: s.totalLearnings,
136
+ ready: s.readyForEvolution
137
+ }))
138
+ };
139
+ }
140
+ /**
141
+ * Sync between all backends
142
+ */
143
+ async sync() {
144
+ const result = {
145
+ memoryKeeperToCloud: 0,
146
+ cloudToMemoryKeeper: 0,
147
+ skillsUpdated: 0,
148
+ errors: []
149
+ };
150
+ try {
151
+ // 1. Get items from memory-keeper that aren't synced
152
+ const localItems = await this.getUnsyncedFromMemoryKeeper();
153
+ // 2. Push to cloud
154
+ for (const item of localItems) {
155
+ try {
156
+ const saved = await this.saveToCloud(item);
157
+ if (saved)
158
+ result.memoryKeeperToCloud++;
159
+ }
160
+ catch (error) {
161
+ result.errors.push(`Failed to sync ${item.id} to cloud: ${error}`);
162
+ }
163
+ }
164
+ // 3. Get items from cloud that aren't in memory-keeper
165
+ const cloudItems = await this.getUnsyncedFromCloud();
166
+ // 4. Pull to memory-keeper
167
+ for (const item of cloudItems) {
168
+ try {
169
+ const saved = await this.saveToMemoryKeeper(item);
170
+ if (saved)
171
+ result.cloudToMemoryKeeper++;
172
+ }
173
+ catch (error) {
174
+ result.errors.push(`Failed to sync ${item.id} to memory-keeper: ${error}`);
175
+ }
176
+ }
177
+ // 5. Check for skills ready to evolve
178
+ const readySkills = await this.skillBridge.getSkillsReadyForEvolution();
179
+ if (readySkills.length > 0) {
180
+ const evolved = await this.skillBridge.triggerEvolution();
181
+ result.skillsUpdated = evolved.length;
182
+ }
183
+ }
184
+ catch (error) {
185
+ result.errors.push(`Sync failed: ${error}`);
186
+ }
187
+ return result;
188
+ }
189
+ /**
190
+ * Start periodic sync
191
+ */
192
+ startPeriodicSync() {
193
+ if (this.syncTimer)
194
+ return;
195
+ this.syncTimer = setInterval(async () => {
196
+ try {
197
+ await this.sync();
198
+ }
199
+ catch (error) {
200
+ console.error('[router] Periodic sync failed:', error);
201
+ }
202
+ }, this.config.cloudSyncInterval);
203
+ }
204
+ /**
205
+ * Stop periodic sync
206
+ */
207
+ stopPeriodicSync() {
208
+ if (this.syncTimer) {
209
+ clearInterval(this.syncTimer);
210
+ this.syncTimer = null;
211
+ }
212
+ }
213
+ // ===========================================================================
214
+ // Private: Memory-Keeper Operations
215
+ // ===========================================================================
216
+ async saveToMemoryKeeper(item) {
217
+ try {
218
+ const category = this.mapTypeToCategory(item.type);
219
+ const channel = item.domain || 'general';
220
+ const saved = await this.memoryKeeper.save({
221
+ key: item.id || `${item.type}-${Date.now()}`,
222
+ value: JSON.stringify({
223
+ title: item.title,
224
+ content: item.content,
225
+ tags: item.tags,
226
+ metadata: item.metadata
227
+ }),
228
+ category,
229
+ channel,
230
+ priority: item.priority === 'critical' ? 'high' : (item.priority || 'normal')
231
+ });
232
+ if (saved) {
233
+ this.syncedKeys.add(item.id || item.title);
234
+ }
235
+ return saved;
236
+ }
237
+ catch (error) {
238
+ console.error('[router] memory-keeper save failed:', error);
239
+ return false;
240
+ }
241
+ }
242
+ async searchMemoryKeeper(query) {
243
+ try {
244
+ const results = [];
245
+ if (!query.text)
246
+ return results;
247
+ const searchResult = await this.memoryKeeper.search({
248
+ query: query.text,
249
+ channel: query.domain,
250
+ limit: query.limit || 20,
251
+ includeMetadata: true
252
+ });
253
+ for (const item of searchResult.items) {
254
+ try {
255
+ const parsed = JSON.parse(item.value);
256
+ results.push({
257
+ item: {
258
+ id: item.key,
259
+ type: this.mapCategoryToType(item.category),
260
+ title: parsed.title || item.key,
261
+ content: parsed.content || item.value,
262
+ domain: item.channel,
263
+ tags: parsed.tags,
264
+ source: 'auto'
265
+ },
266
+ source: 'memory-keeper',
267
+ score: 0.8
268
+ });
269
+ }
270
+ catch {
271
+ // If not JSON, use raw value
272
+ results.push({
273
+ item: {
274
+ id: item.key,
275
+ type: 'memory',
276
+ title: item.key,
277
+ content: item.value,
278
+ domain: item.channel,
279
+ source: 'auto'
280
+ },
281
+ source: 'memory-keeper',
282
+ score: 0.7
283
+ });
284
+ }
285
+ }
286
+ return results;
287
+ }
288
+ catch (error) {
289
+ console.error('[router] memory-keeper search failed:', error);
290
+ return [];
291
+ }
292
+ }
293
+ async getUnsyncedFromMemoryKeeper() {
294
+ try {
295
+ const recent = await this.memoryKeeper.getRecent(50);
296
+ const unsynced = [];
297
+ for (const item of recent) {
298
+ if (!this.syncedKeys.has(item.key)) {
299
+ try {
300
+ const parsed = JSON.parse(item.value);
301
+ unsynced.push({
302
+ id: item.key,
303
+ type: this.mapCategoryToType(item.category),
304
+ title: parsed.title || item.key,
305
+ content: parsed.content || item.value,
306
+ domain: item.channel,
307
+ tags: parsed.tags,
308
+ source: 'sync'
309
+ });
310
+ }
311
+ catch {
312
+ unsynced.push({
313
+ id: item.key,
314
+ type: 'memory',
315
+ title: item.key,
316
+ content: item.value,
317
+ domain: item.channel,
318
+ source: 'sync'
319
+ });
320
+ }
321
+ }
322
+ }
323
+ return unsynced;
324
+ }
325
+ catch (error) {
326
+ console.error('[router] getUnsyncedFromMemoryKeeper failed:', error);
327
+ return [];
328
+ }
329
+ }
330
+ mapTypeToCategory(type) {
331
+ const map = {
332
+ 'memory': 'note',
333
+ 'learning': 'progress',
334
+ 'pattern': 'decision',
335
+ 'task': 'task',
336
+ 'decision': 'decision',
337
+ 'knowledge': 'note'
338
+ };
339
+ return map[type] || 'note';
340
+ }
341
+ mapCategoryToType(category) {
342
+ if (!category)
343
+ return 'memory';
344
+ const map = {
345
+ 'task': 'task',
346
+ 'decision': 'decision',
347
+ 'progress': 'learning',
348
+ 'note': 'memory',
349
+ 'error': 'memory',
350
+ 'warning': 'memory'
351
+ };
352
+ return map[category] || 'memory';
353
+ }
354
+ // ===========================================================================
355
+ // Private: Cloud Operations
356
+ // ===========================================================================
357
+ cloudInitialized = false;
358
+ async initCloudIfNeeded() {
359
+ if (this.cloudInitialized)
360
+ return true;
361
+ try {
362
+ const status = await this.cloudMemory.init();
363
+ this.cloudInitialized = status.tursoConnected || status.vectorConnected;
364
+ return this.cloudInitialized;
365
+ }
366
+ catch (error) {
367
+ console.warn('[router] Cloud init failed (will continue without cloud):', error);
368
+ return false;
369
+ }
370
+ }
371
+ async saveToCloud(item) {
372
+ if (!this.config.enableCloud)
373
+ return false;
374
+ try {
375
+ const initialized = await this.initCloudIfNeeded();
376
+ if (!initialized)
377
+ return false;
378
+ // Map source types: AI sources (gemini, claude) → 'auto'
379
+ const cloudSource = item.source === 'gemini' || item.source === 'claude' ? 'auto' : item.source;
380
+ const input = {
381
+ type: item.type,
382
+ system: this.config.system,
383
+ title: item.title,
384
+ content: item.content,
385
+ domain: item.domain,
386
+ tags: item.tags,
387
+ priority: item.priority,
388
+ source: cloudSource
389
+ };
390
+ const saved = await this.cloudMemory.save(input);
391
+ if (saved) {
392
+ this.syncedKeys.add(saved.id);
393
+ return true;
394
+ }
395
+ return false;
396
+ }
397
+ catch (error) {
398
+ console.error('[router] cloud save failed:', error);
399
+ return false;
400
+ }
401
+ }
402
+ async searchCloud(query) {
403
+ if (!this.config.enableCloud)
404
+ return [];
405
+ try {
406
+ const initialized = await this.initCloudIfNeeded();
407
+ if (!initialized)
408
+ return [];
409
+ const cloudResults = await this.cloudMemory.search({
410
+ query: query.text || '',
411
+ system: this.config.system,
412
+ type: Array.isArray(query.type) ? query.type[0] : query.type,
413
+ domain: query.domain,
414
+ limit: query.limit || 20,
415
+ minScore: 0.5
416
+ });
417
+ return cloudResults.map(cr => ({
418
+ item: {
419
+ id: cr.memory.id,
420
+ type: cr.memory.type,
421
+ title: cr.memory.title,
422
+ content: cr.memory.content,
423
+ domain: cr.memory.domain,
424
+ tags: cr.memory.tags,
425
+ priority: cr.memory.priority,
426
+ source: cr.memory.source
427
+ },
428
+ source: 'cloud',
429
+ score: cr.score
430
+ }));
431
+ }
432
+ catch (error) {
433
+ console.error('[router] cloud search failed:', error);
434
+ return [];
435
+ }
436
+ }
437
+ async getUnsyncedFromCloud() {
438
+ if (!this.config.enableCloud)
439
+ return [];
440
+ try {
441
+ const initialized = await this.initCloudIfNeeded();
442
+ if (!initialized)
443
+ return [];
444
+ // Get recent items from cloud
445
+ const cloudItems = await this.cloudMemory.getRecent({
446
+ system: this.config.system,
447
+ limit: 50
448
+ });
449
+ // Filter out already synced items
450
+ return cloudItems
451
+ .filter(ci => !this.syncedKeys.has(ci.id))
452
+ .map(ci => ({
453
+ id: ci.id,
454
+ type: ci.type,
455
+ title: ci.title,
456
+ content: ci.content,
457
+ domain: ci.domain,
458
+ tags: ci.tags,
459
+ priority: ci.priority,
460
+ source: 'sync'
461
+ }));
462
+ }
463
+ catch (error) {
464
+ console.error('[router] getUnsyncedFromCloud failed:', error);
465
+ return [];
466
+ }
467
+ }
468
+ // ===========================================================================
469
+ // Private: Skills Operations
470
+ // ===========================================================================
471
+ async searchSkills(query) {
472
+ const results = [];
473
+ if (!query.text)
474
+ return results;
475
+ const searchLower = query.text.toLowerCase();
476
+ const skillsDir = this.config.skillsDir;
477
+ // Search through skill learnings
478
+ const skillPaths = [
479
+ 'quality/type-safety-enforcer',
480
+ 'quality/useeffect-reducer',
481
+ 'quality/systematic-debugging',
482
+ 'architecture/domain-structure-guardian',
483
+ 'meta/skill-evolver'
484
+ ];
485
+ for (const skillPath of skillPaths) {
486
+ const learningsFile = join(skillsDir, skillPath, 'learnings.md');
487
+ if (!existsSync(learningsFile))
488
+ continue;
489
+ const content = readFileSync(learningsFile, 'utf-8');
490
+ const learningBlocks = content.match(/### Learning \d{4}-\d{2}-\d{2}[\s\S]*?(?=### Learning|\n## |$)/g) || [];
491
+ for (const block of learningBlocks) {
492
+ if (block.toLowerCase().includes(searchLower)) {
493
+ const problemMatch = block.match(/\*\*Problem:\*\* (.+)/);
494
+ const solutionMatch = block.match(/\*\*Solution:\*\* (.+)/);
495
+ results.push({
496
+ item: {
497
+ type: 'learning',
498
+ title: problemMatch?.[1] || 'Learning',
499
+ content: solutionMatch?.[1] || block,
500
+ domain: skillPath.split('/')[0],
501
+ source: 'auto'
502
+ },
503
+ source: 'skills',
504
+ score: 0.7 // Base score for text match
505
+ });
506
+ }
507
+ }
508
+ }
509
+ return results;
510
+ }
511
+ // ===========================================================================
512
+ // Private: Conversion
513
+ // ===========================================================================
514
+ itemToLearning(item) {
515
+ // Convert a MemoryItem to a Learning for the skill bridge
516
+ const typeMap = {
517
+ 'type-safety': 'type-safety',
518
+ 'pattern': 'pattern',
519
+ 'bugfix': 'bugfix',
520
+ 'architecture': 'architecture',
521
+ 'performance': 'performance'
522
+ };
523
+ const skillMap = {
524
+ 'type-safety': 'type-safety-enforcer',
525
+ 'bugfix': 'systematic-debugging',
526
+ 'performance': 'useeffect-reducer',
527
+ 'architecture': 'domain-structure-guardian'
528
+ };
529
+ const domain = item.domain || 'general';
530
+ const learningType = typeMap[domain] || 'general';
531
+ const skill = skillMap[domain] || 'systematic-debugging';
532
+ return {
533
+ type: learningType,
534
+ skill,
535
+ context: item.title,
536
+ problem: item.title,
537
+ solution: item.content,
538
+ confidence: 0.8,
539
+ timestamp: new Date().toISOString(),
540
+ source: item.source || 'manual'
541
+ };
542
+ }
543
+ }
544
+ // =============================================================================
545
+ // Factory & Export
546
+ // =============================================================================
547
+ let routerInstance = null;
548
+ export function getUnifiedMemoryRouter(config) {
549
+ if (!routerInstance || config) {
550
+ routerInstance = new UnifiedMemoryRouter(config);
551
+ }
552
+ return routerInstance;
553
+ }
554
+ export default UnifiedMemoryRouter;
555
+ //# sourceMappingURL=unified-memory-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unified-memory-router.js","sourceRoot":"","sources":["../../src/services/unified-memory-router.ts"],"names":[],"mappings":"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"}