cmp-standards 2.4.0 → 2.7.0

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 (97) hide show
  1. package/README.md +633 -611
  2. package/dist/cli/index.js +0 -0
  3. package/dist/db/drizzle-client.d.ts +3 -3
  4. package/dist/db/drizzle-client.d.ts.map +1 -1
  5. package/dist/db/drizzle-client.js +57 -58
  6. package/dist/db/drizzle-client.js.map +1 -1
  7. package/dist/db/turso-client.js +11 -11
  8. package/dist/eslint/rules/no-async-useeffect.js +6 -6
  9. package/dist/hooks/cloud-pre-tool-use.js +20 -20
  10. package/dist/hooks/cloud-session-start.d.ts +15 -3
  11. package/dist/hooks/cloud-session-start.d.ts.map +1 -1
  12. package/dist/hooks/cloud-session-start.js +135 -8
  13. package/dist/hooks/cloud-session-start.js.map +1 -1
  14. package/dist/hooks/session-start.d.ts +2 -1
  15. package/dist/hooks/session-start.d.ts.map +1 -1
  16. package/dist/hooks/session-start.js +99 -74
  17. package/dist/hooks/session-start.js.map +1 -1
  18. package/dist/index.d.ts +4 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +4 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/mcp/server.js +2 -2
  23. package/dist/mcp/server.js.map +1 -1
  24. package/dist/schema/plans.d.ts +194 -0
  25. package/dist/schema/plans.d.ts.map +1 -0
  26. package/dist/schema/plans.js +180 -0
  27. package/dist/schema/plans.js.map +1 -0
  28. package/dist/schema/tracking.d.ts +90 -90
  29. package/dist/services/ContextGenerator.d.ts +16 -0
  30. package/dist/services/ContextGenerator.d.ts.map +1 -0
  31. package/dist/services/ContextGenerator.js +62 -0
  32. package/dist/services/ContextGenerator.js.map +1 -0
  33. package/dist/services/PlanManager.d.ts +99 -0
  34. package/dist/services/PlanManager.d.ts.map +1 -0
  35. package/dist/services/PlanManager.js +372 -0
  36. package/dist/services/PlanManager.js.map +1 -0
  37. package/dist/services/ProjectScaffold.js +76 -76
  38. package/dist/services/context-injector.d.ts +111 -0
  39. package/dist/services/context-injector.d.ts.map +1 -0
  40. package/dist/services/context-injector.js +397 -0
  41. package/dist/services/context-injector.js.map +1 -0
  42. package/dist/services/index.d.ts +15 -15
  43. package/dist/services/index.d.ts.map +1 -1
  44. package/dist/services/index.js +18 -20
  45. package/dist/services/index.js.map +1 -1
  46. package/dist/services/memory-router.d.ts +122 -0
  47. package/dist/services/memory-router.d.ts.map +1 -0
  48. package/dist/services/memory-router.js +517 -0
  49. package/dist/services/memory-router.js.map +1 -0
  50. package/dist/services/pattern-tracker.d.ts +97 -0
  51. package/dist/services/pattern-tracker.d.ts.map +1 -0
  52. package/dist/services/pattern-tracker.js +425 -0
  53. package/dist/services/pattern-tracker.js.map +1 -0
  54. package/dist/services/semantic-search.d.ts +33 -35
  55. package/dist/services/semantic-search.d.ts.map +1 -1
  56. package/dist/services/semantic-search.js +207 -165
  57. package/dist/services/semantic-search.js.map +1 -1
  58. package/dist/types/index.d.ts +329 -4
  59. package/dist/types/index.d.ts.map +1 -1
  60. package/dist/types/index.js +186 -9
  61. package/dist/types/index.js.map +1 -1
  62. package/package.json +104 -100
  63. package/standards/README.md +50 -50
  64. package/standards/experts/expert-routing.md +215 -215
  65. package/standards/general/code-quality.md +86 -86
  66. package/standards/general/memory-usage.md +205 -205
  67. package/standards/general/sync-workflow.md +235 -235
  68. package/standards/general/workflow.md +82 -82
  69. package/standards/hooks/mandatory-tracking.md +446 -446
  70. package/standards/infrastructure/cloud-database.md +287 -287
  71. package/standards/mcp/server-design.md +243 -243
  72. package/standards/mcp/tool-patterns.md +354 -354
  73. package/standards/skills/skill-structure.md +286 -286
  74. package/standards/skills/workflow-design.md +323 -323
  75. package/standards/tools/tool-design.md +297 -297
  76. package/templates/agents/architecture-expert.md +61 -61
  77. package/templates/agents/database-expert.md +62 -62
  78. package/templates/agents/documentation-expert.md +57 -57
  79. package/templates/agents/memory-expert.md +88 -88
  80. package/templates/agents/performance-expert.md +61 -61
  81. package/templates/agents/security-expert.md +59 -59
  82. package/templates/agents/ux-expert.md +63 -63
  83. package/templates/agents/worker.md +75 -75
  84. package/templates/ai-skills/SKILL_TEMPLATE.md +55 -55
  85. package/templates/claude-settings.json +72 -72
  86. package/templates/commands/experts.md +138 -138
  87. package/templates/hooks/README.md +158 -158
  88. package/templates/hooks/project.config.json.template +77 -77
  89. package/templates/hooks/settings.local.json.template +57 -57
  90. package/templates/memory-config.json +56 -56
  91. package/templates/memory-config.schema.json +212 -212
  92. package/templates/settings.json +58 -58
  93. package/templates/skills/continue.md +205 -205
  94. package/templates/workflows/business-improvement.md +264 -264
  95. package/templates/workflows/expert-review.md +153 -153
  96. package/templates/workflows/internal-app.md +245 -245
  97. package/templates/workflows/sync-docs.md +187 -187
@@ -0,0 +1,425 @@
1
+ /**
2
+ * @file Pattern Tracker Service
3
+ * @description Tracks code patterns and triggers auto-improvement when threshold is reached
4
+ *
5
+ * Features:
6
+ * - Track pattern occurrences across sessions
7
+ * - Detect when patterns reach threshold (default: 3)
8
+ * - Generate ESLint rules automatically
9
+ * - Create memory entries for gotchas
10
+ */
11
+ import { turso } from '../db/turso-client.js';
12
+ import { memoryRouter } from './memory-router.js';
13
+ // =============================================================================
14
+ // Pattern Definitions
15
+ // =============================================================================
16
+ const KNOWN_PATTERNS = {
17
+ 'finance-no-ledger': {
18
+ severity: 'critical',
19
+ eslintRuleName: 'charter/finance-ledger-sync',
20
+ description: 'Finance table insert without LedgerService.createEntry()'
21
+ },
22
+ 'any-type': {
23
+ severity: 'high',
24
+ eslintRuleName: 'charter/no-any-type',
25
+ description: 'Using TypeScript any type'
26
+ },
27
+ 'eslint-disable': {
28
+ severity: 'high',
29
+ eslintRuleName: 'charter/no-eslint-disable',
30
+ description: 'ESLint disable comment'
31
+ },
32
+ 'raw-sql': {
33
+ severity: 'critical',
34
+ eslintRuleName: 'charter/no-raw-sql',
35
+ description: 'Raw SQL query instead of query builder'
36
+ },
37
+ 'missing-zod': {
38
+ severity: 'high',
39
+ eslintRuleName: 'charter/require-zod-validation',
40
+ description: 'TRPC endpoint without Zod input validation'
41
+ },
42
+ 'sequential-api-calls': {
43
+ severity: 'medium',
44
+ eslintRuleName: 'charter/no-sequential-api-calls',
45
+ description: 'Sequential API calls that could be parallelized'
46
+ },
47
+ 'async-useeffect': {
48
+ severity: 'medium',
49
+ eslintRuleName: 'charter/no-async-useeffect',
50
+ description: 'Async function directly in useEffect'
51
+ },
52
+ 'hardcoded-color': {
53
+ severity: 'low',
54
+ eslintRuleName: 'charter/use-semantic-tokens',
55
+ description: 'Hardcoded color value instead of semantic token'
56
+ }
57
+ };
58
+ // =============================================================================
59
+ // Pattern Tracker Implementation
60
+ // =============================================================================
61
+ class PatternTrackerService {
62
+ violationThreshold = 3;
63
+ /**
64
+ * Track a pattern occurrence
65
+ */
66
+ async track(patternId, context, system) {
67
+ const existing = await this.findPattern(patternId, system);
68
+ if (existing) {
69
+ // Increment count
70
+ existing.count++;
71
+ existing.lastSeen = new Date().toISOString();
72
+ existing.contexts.push(context);
73
+ // Keep only last 10 contexts
74
+ if (existing.contexts.length > 10) {
75
+ existing.contexts = existing.contexts.slice(-10);
76
+ }
77
+ await this.savePattern(existing, system);
78
+ // Check if threshold reached
79
+ if (existing.count >= this.violationThreshold && !existing.autoImproveTriggered) {
80
+ const rule = await this.triggerAutoImprovement(existing, system);
81
+ return { count: existing.count, triggered: true, rule };
82
+ }
83
+ return { count: existing.count, triggered: false };
84
+ }
85
+ else {
86
+ // Create new pattern tracking
87
+ const newPattern = {
88
+ id: `pattern_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
89
+ patternId,
90
+ description: KNOWN_PATTERNS[patternId]?.description || context.description,
91
+ count: 1,
92
+ severity: KNOWN_PATTERNS[patternId]?.severity || 'medium',
93
+ contexts: [context],
94
+ firstSeen: new Date().toISOString(),
95
+ lastSeen: new Date().toISOString(),
96
+ autoImproveTriggered: false
97
+ };
98
+ await this.createPattern(newPattern, system);
99
+ return { count: 1, triggered: false };
100
+ }
101
+ }
102
+ /**
103
+ * Check current count for a pattern
104
+ */
105
+ async getCount(patternId, system) {
106
+ const pattern = await this.findPattern(patternId, system);
107
+ return pattern?.count || 0;
108
+ }
109
+ /**
110
+ * Get all patterns near threshold
111
+ */
112
+ async getPendingPatterns(system) {
113
+ try {
114
+ const db = turso.getClient();
115
+ const result = await db.execute({
116
+ sql: `SELECT id, content FROM items
117
+ WHERE system = ? AND type = 'pattern'
118
+ AND status = 'active'`,
119
+ args: [system]
120
+ });
121
+ const patterns = result.rows
122
+ .map(row => {
123
+ try {
124
+ const content = typeof row.content === 'string'
125
+ ? JSON.parse(row.content)
126
+ : row.content;
127
+ return { ...content, id: row.id };
128
+ }
129
+ catch {
130
+ return null;
131
+ }
132
+ })
133
+ .filter((p) => p !== null);
134
+ // Return patterns with count >= 2 (close to threshold)
135
+ return patterns.filter(p => p.count >= 2 && !p.autoImproveTriggered);
136
+ }
137
+ catch {
138
+ return [];
139
+ }
140
+ }
141
+ /**
142
+ * Trigger auto-improvement for a pattern
143
+ */
144
+ async triggerAutoImprovement(pattern, system) {
145
+ console.log(`🔁 [PatternTracker] Auto-improvement triggered for: ${pattern.patternId}`);
146
+ console.log(` Occurrences: ${pattern.count} (threshold: ${this.violationThreshold})`);
147
+ // Mark as triggered
148
+ pattern.autoImproveTriggered = true;
149
+ await this.savePattern(pattern, system);
150
+ // Update status to 'triggered'
151
+ const db = turso.getClient();
152
+ await db.execute({
153
+ sql: `UPDATE items SET status = 'triggered', updated_at = datetime('now')
154
+ WHERE id = ?`,
155
+ args: [pattern.id]
156
+ });
157
+ // Generate ESLint rule if we have a template
158
+ const knownPattern = KNOWN_PATTERNS[pattern.patternId];
159
+ if (knownPattern?.eslintRuleName) {
160
+ const rule = this.generateEslintRule(pattern, knownPattern.eslintRuleName);
161
+ // Save auto-improvement record
162
+ await this.saveAutoImprovement({
163
+ patternId: pattern.patternId,
164
+ action: 'eslint_rule',
165
+ status: 'pending',
166
+ generatedCode: this.eslintRuleToCode(rule),
167
+ filePath: `src/eslint/rules/${rule.name}.ts`
168
+ }, system);
169
+ return rule;
170
+ }
171
+ // Create memory entry for the gotcha
172
+ await memoryRouter.write({
173
+ system,
174
+ title: `Gotcha: ${pattern.description}`,
175
+ body: this.formatGotchaBody(pattern),
176
+ domain: this.detectDomain(pattern.contexts),
177
+ tags: ['gotcha', 'auto-improvement', pattern.patternId],
178
+ source: 'system',
179
+ priority: pattern.severity
180
+ });
181
+ return undefined;
182
+ }
183
+ /**
184
+ * Generate ESLint rule from pattern
185
+ */
186
+ generateEslintRule(pattern, ruleName) {
187
+ return {
188
+ name: ruleName,
189
+ description: pattern.description,
190
+ meta: {
191
+ type: 'problem',
192
+ docs: {
193
+ description: pattern.description
194
+ },
195
+ messages: {
196
+ violation: pattern.description
197
+ }
198
+ },
199
+ pattern: this.patternToRegex(pattern.patternId),
200
+ fix: undefined
201
+ };
202
+ }
203
+ /**
204
+ * Convert ESLint rule spec to code with pattern-specific implementation
205
+ */
206
+ eslintRuleToCode(rule) {
207
+ const ruleBody = this.generateRuleBody(rule.name);
208
+ return `/**
209
+ * @file ${rule.name}
210
+ * @description ${rule.description}
211
+ * Auto-generated by cmp-standards pattern detection
212
+ * @version 1.0.0
213
+ */
214
+
215
+ module.exports = {
216
+ meta: {
217
+ type: '${rule.meta.type}',
218
+ docs: {
219
+ description: '${rule.description}',
220
+ category: 'Best Practices',
221
+ recommended: true
222
+ },
223
+ schema: [],
224
+ messages: ${JSON.stringify(rule.meta.messages, null, 2)}
225
+ },
226
+ create(context) {
227
+ ${ruleBody}
228
+ }
229
+ }
230
+ `;
231
+ }
232
+ /**
233
+ * Generate pattern-specific rule body based on rule name
234
+ */
235
+ generateRuleBody(ruleName) {
236
+ // Pattern-specific implementations using AST visitors
237
+ switch (ruleName) {
238
+ case 'charter/no-any-type':
239
+ return ` return {
240
+ TSAnyKeyword(node) {
241
+ context.report({ node, messageId: 'violation' });
242
+ }
243
+ };`;
244
+ case 'charter/no-eslint-disable':
245
+ return ` const sourceCode = context.getSourceCode();
246
+ return {
247
+ Program() {
248
+ const comments = sourceCode.getAllComments();
249
+ for (const comment of comments) {
250
+ if (comment.value.includes('eslint-disable')) {
251
+ context.report({ loc: comment.loc, messageId: 'violation' });
252
+ }
253
+ }
254
+ }
255
+ };`;
256
+ case 'charter/no-async-useeffect':
257
+ return ` return {
258
+ CallExpression(node) {
259
+ if (
260
+ node.callee.type === 'Identifier' &&
261
+ node.callee.name === 'useEffect' &&
262
+ node.arguments[0] &&
263
+ node.arguments[0].async
264
+ ) {
265
+ context.report({ node, messageId: 'violation' });
266
+ }
267
+ }
268
+ };`;
269
+ case 'charter/no-raw-sql':
270
+ return ` return {
271
+ CallExpression(node) {
272
+ if (
273
+ node.callee.type === 'MemberExpression' &&
274
+ node.callee.property.name === 'execute' &&
275
+ node.arguments[0]?.type === 'TemplateLiteral'
276
+ ) {
277
+ context.report({ node, messageId: 'violation' });
278
+ }
279
+ }
280
+ };`;
281
+ case 'charter/finance-ledger-sync':
282
+ return ` let hasFinanceInsert = false;
283
+ let hasLedgerCall = false;
284
+ return {
285
+ CallExpression(node) {
286
+ const callee = node.callee;
287
+ if (callee.property?.name === 'insert') hasFinanceInsert = true;
288
+ if (callee.object?.name === 'LedgerService') hasLedgerCall = true;
289
+ },
290
+ 'Program:exit'(node) {
291
+ if (hasFinanceInsert && !hasLedgerCall) {
292
+ context.report({ node, messageId: 'violation' });
293
+ }
294
+ }
295
+ };`;
296
+ case 'charter/use-semantic-tokens':
297
+ return ` return {
298
+ Literal(node) {
299
+ if (typeof node.value === 'string' && /#[0-9a-fA-F]{3,8}/.test(node.value)) {
300
+ context.report({ node, messageId: 'violation' });
301
+ }
302
+ }
303
+ };`;
304
+ default:
305
+ return ` // Auto-generated rule - implement based on pattern
306
+ return {
307
+ Program(node) {
308
+ // Pattern detection logic here
309
+ }
310
+ };`;
311
+ }
312
+ }
313
+ /**
314
+ * Format gotcha memory body
315
+ */
316
+ formatGotchaBody(pattern) {
317
+ const lines = [
318
+ `## Pattern: ${pattern.description}`,
319
+ '',
320
+ `**Severity**: ${pattern.severity}`,
321
+ `**Occurrences**: ${pattern.count}`,
322
+ `**First seen**: ${pattern.firstSeen}`,
323
+ `**Last seen**: ${pattern.lastSeen}`,
324
+ '',
325
+ '## Occurrences',
326
+ ''
327
+ ];
328
+ for (const ctx of pattern.contexts.slice(-5)) {
329
+ lines.push(`- \`${ctx.file}${ctx.line ? `:${ctx.line}` : ''}\`: ${ctx.description}`);
330
+ }
331
+ lines.push('');
332
+ lines.push('## Prevention');
333
+ lines.push('');
334
+ lines.push('This pattern has been automatically flagged for improvement.');
335
+ return lines.join('\n');
336
+ }
337
+ /**
338
+ * Convert pattern ID to regex
339
+ */
340
+ patternToRegex(patternId) {
341
+ const regexMap = {
342
+ 'finance-no-ledger': 'insert\\(finance\\)(?!.*LedgerService)',
343
+ 'any-type': ':\\s*any\\b',
344
+ 'eslint-disable': 'eslint-disable',
345
+ 'raw-sql': 'db\\.execute\\([\'"`]',
346
+ 'missing-zod': 'publicProcedure\\.mutation\\(async\\s*\\(\\{\\s*input',
347
+ 'sequential-api-calls': 'await.*\\nawait',
348
+ 'async-useeffect': 'useEffect\\(async',
349
+ 'hardcoded-color': '#[0-9a-fA-F]{3,6}'
350
+ };
351
+ return regexMap[patternId] || patternId;
352
+ }
353
+ /**
354
+ * Detect domain from contexts
355
+ */
356
+ detectDomain(contexts) {
357
+ const domains = ['finances', 'reserves', 'crew', 'boats', 'marketing'];
358
+ for (const ctx of contexts) {
359
+ for (const domain of domains) {
360
+ if (ctx.file.toLowerCase().includes(domain)) {
361
+ return domain;
362
+ }
363
+ }
364
+ }
365
+ return 'general';
366
+ }
367
+ // =============================================================================
368
+ // Database Operations
369
+ // =============================================================================
370
+ async findPattern(patternId, system) {
371
+ try {
372
+ const db = turso.getClient();
373
+ const result = await db.execute({
374
+ sql: `SELECT id, content FROM items
375
+ WHERE system = ? AND type = 'pattern'
376
+ AND json_extract(content, '$.patternId') = ?
377
+ LIMIT 1`,
378
+ args: [system, patternId]
379
+ });
380
+ if (result.rows.length === 0)
381
+ return null;
382
+ const row = result.rows[0];
383
+ const content = typeof row.content === 'string'
384
+ ? JSON.parse(row.content)
385
+ : row.content;
386
+ return { ...content, id: row.id };
387
+ }
388
+ catch {
389
+ return null;
390
+ }
391
+ }
392
+ async createPattern(pattern, system) {
393
+ const db = turso.getClient();
394
+ const now = new Date().toISOString();
395
+ await db.execute({
396
+ sql: `INSERT INTO items (id, system, type, status, content, created_at, updated_at)
397
+ VALUES (?, ?, 'pattern', 'active', ?, ?, ?)`,
398
+ args: [pattern.id, system, JSON.stringify(pattern), now, now]
399
+ });
400
+ }
401
+ async savePattern(pattern, _system) {
402
+ const db = turso.getClient();
403
+ await db.execute({
404
+ sql: `UPDATE items SET content = ?, updated_at = datetime('now')
405
+ WHERE id = ?`,
406
+ args: [JSON.stringify(pattern), pattern.id]
407
+ });
408
+ }
409
+ async saveAutoImprovement(improvement, system) {
410
+ const db = turso.getClient();
411
+ const id = `ai_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
412
+ const now = new Date().toISOString();
413
+ await db.execute({
414
+ sql: `INSERT INTO items (id, system, type, status, content, created_at, updated_at)
415
+ VALUES (?, ?, 'auto_improvement', 'pending', ?, ?, ?)`,
416
+ args: [id, system, JSON.stringify(improvement), now, now]
417
+ });
418
+ }
419
+ }
420
+ // =============================================================================
421
+ // Export Singleton
422
+ // =============================================================================
423
+ export const patternTracker = new PatternTrackerService();
424
+ export default patternTracker;
425
+ //# sourceMappingURL=pattern-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-tracker.js","sourceRoot":"","sources":["../../src/services/pattern-tracker.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,17 @@
1
1
  /**
2
2
  * Semantic Search Service
3
3
  *
4
- * Provides embedding-based semantic search for memories.
5
- * - Generates embeddings on memory creation
6
- * - Stores embeddings in the content JSON field
7
- * - Performs cosine similarity search
4
+ * Provides hybrid search for memories:
5
+ * 1. Vector Search (Upstash): Semantic understanding
6
+ * 2. Text Search (MySQL): Keyword matching
8
7
  */
9
- import type { DrizzleMemoryClient } from '../db/drizzle-client.js';
10
- import type { DevItem, MemoryContent } from '../types/index.js';
8
+ import type { DrizzleMemoryClient } from "../db/drizzle-client.js";
9
+ import type { DevItem, MemoryContent } from "../types/index.js";
11
10
  export interface SemanticSearchResult {
12
11
  item: DevItem;
13
12
  score: number;
14
13
  content: MemoryContent;
14
+ source: "vector" | "text";
15
15
  }
16
16
  export interface MemoryWithEmbedding extends MemoryContent {
17
17
  embedding?: number[];
@@ -21,10 +21,11 @@ export interface MemoryWithEmbedding extends MemoryContent {
21
21
  export declare class SemanticSearchService {
22
22
  private embeddingService;
23
23
  private client;
24
+ private vectorIndex?;
24
25
  private cache;
25
26
  constructor(client: DrizzleMemoryClient);
26
27
  /**
27
- * Search memories by semantic similarity
28
+ * Hybrid Search: Vector + Keyword
28
29
  */
29
30
  search(query: string, options?: {
30
31
  type?: string;
@@ -33,61 +34,58 @@ export declare class SemanticSearchService {
33
34
  domain?: string;
34
35
  }): Promise<SemanticSearchResult[]>;
35
36
  /**
36
- * Create memory with embedding
37
+ * Search via Upstash Vector
38
+ */
39
+ private searchVector;
40
+ /**
41
+ * Create memory with embedding and sync to Vector DB
37
42
  */
38
43
  createMemoryWithEmbedding(title: string, body: string, options?: {
39
44
  domain?: string;
40
- source?: 'claude' | 'gemini' | 'user' | 'system' | 'checkpoint' | 'dashboard';
45
+ source?: "claude" | "gemini" | "user" | "system" | "checkpoint" | "dashboard";
41
46
  tags?: string[];
42
47
  relatedFiles?: string[];
43
48
  }): Promise<{
44
49
  id: string;
45
50
  embedded: boolean;
51
+ synced: boolean;
46
52
  }>;
47
53
  /**
48
54
  * Find similar memories to a given memory
49
55
  */
50
56
  findSimilar(memoryId: string, limit?: number): Promise<SemanticSearchResult[]>;
51
57
  /**
52
- * Batch embed all memories without embeddings
58
+ * Get embedding with caching
53
59
  */
54
- batchEmbed(options?: {
55
- type?: string;
60
+ private getEmbedding;
61
+ /**
62
+ * Fallback to text search when embedding fails
63
+ */
64
+ private fallbackTextSearch;
65
+ /**
66
+ * Batch embed memories that don't have embeddings yet
67
+ */
68
+ batchEmbed(options: {
56
69
  limit?: number;
57
- force?: boolean;
58
70
  }): Promise<{
59
71
  processed: number;
60
- embedded: number;
72
+ succeeded: number;
61
73
  failed: number;
74
+ synced: number;
62
75
  }>;
63
76
  /**
64
77
  * Get embedding statistics
65
78
  */
66
79
  getEmbeddingStats(): Promise<{
67
- total: number;
68
- withEmbedding: number;
69
- withoutEmbedding: number;
70
- coverage: number;
80
+ totalMemories: number;
81
+ withEmbeddings: number;
82
+ withoutEmbeddings: number;
83
+ vectorIndexCount: number;
84
+ embeddingRate: string;
71
85
  }>;
72
- /**
73
- * Get embedding with caching
74
- */
75
- private getEmbedding;
76
- /**
77
- * Update memory with embedding
78
- */
79
- private updateWithEmbedding;
80
- /**
81
- * Calculate cosine similarity between two vectors
82
- */
83
- private cosineSimilarity;
84
- /**
85
- * Fallback to text search when embedding fails
86
- */
87
- private fallbackTextSearch;
88
86
  }
89
87
  /**
90
- * Create a semantic search service
88
+ * Factory
91
89
  */
92
90
  export declare function createSemanticSearchService(client: DrizzleMemoryClient): SemanticSearchService;
93
91
  //# sourceMappingURL=semantic-search.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"semantic-search.d.ts","sourceRoot":"","sources":["../../src/services/semantic-search.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAM/D,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,aAAa,CAAA;CACvB;AAED,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAMD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,KAAK,CAAmC;gBAEpC,MAAM,EAAE,mBAAmB;IASvC;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QACpC,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IA8DnC;;OAEG;IACG,yBAAyB,CAC7B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,CAAA;QAC7E,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;QACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KACxB,GACA,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IAiC7C;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAY/E;;OAEG;IACG,UAAU,CAAC,OAAO,CAAC,EAAE;QACzB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,KAAK,CAAC,EAAE,OAAO,CAAA;KAChB,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IA2CpE;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC;QACjC,KAAK,EAAE,MAAM,CAAA;QACb,aAAa,EAAE,MAAM,CAAA;QACrB,gBAAgB,EAAE,MAAM,CAAA;QACxB,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAC;IA8BF;;OAEG;YACW,YAAY;IAiB1B;;OAEG;YACW,mBAAmB;IAiBjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmBxB;;OAEG;YACW,kBAAkB;CAqBjC;AAMD;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,mBAAmB,GAC1B,qBAAqB,CAEvB"}
1
+ {"version":3,"file":"semantic-search.d.ts","sourceRoot":"","sources":["../../src/services/semantic-search.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAMhE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,WAAW,CAAC,CAAQ;IAC5B,OAAO,CAAC,KAAK,CAAoC;gBAErC,MAAM,EAAE,mBAAmB;IAgBvC;;OAEG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GACA,OAAO,CAAC,oBAAoB,EAAE,CAAC;IA6BlC;;OAEG;YACW,YAAY;IAsC1B;;OAEG;IACG,yBAAyB,CAC7B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EACH,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,YAAY,GACZ,WAAW,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,GACA,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAsD9D;;OAEG;IACG,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,KAAK,SAAI,GACR,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAclC;;OAEG;YACW,YAAY;IAgB1B;;OAEG;YACW,kBAAkB;IAuBhC;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QACrD,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAmEF;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC;QACjC,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,gBAAgB,EAAE,MAAM,CAAC;QACzB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CA+CH;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,mBAAmB,GAC1B,qBAAqB,CAEvB"}