cmp-standards 3.5.1 → 3.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 (107) 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/cloud-post-tool-use.d.ts.map +1 -1
  17. package/dist/hooks/cloud-post-tool-use.js +72 -10
  18. package/dist/hooks/cloud-post-tool-use.js.map +1 -1
  19. package/dist/hooks/cloud-pre-tool-use.d.ts +12 -9
  20. package/dist/hooks/cloud-pre-tool-use.d.ts.map +1 -1
  21. package/dist/hooks/cloud-pre-tool-use.js +227 -99
  22. package/dist/hooks/cloud-pre-tool-use.js.map +1 -1
  23. package/dist/hooks/cloud-session-start.js +5 -5
  24. package/dist/hooks/resilient-hook-runner.d.ts +78 -0
  25. package/dist/hooks/resilient-hook-runner.d.ts.map +1 -0
  26. package/dist/hooks/resilient-hook-runner.js +201 -0
  27. package/dist/hooks/resilient-hook-runner.js.map +1 -0
  28. package/dist/hooks/session-end.js +14 -14
  29. package/dist/patterns/registry.js +90 -90
  30. package/dist/schema/codewiki-types.d.ts +10 -10
  31. package/dist/schema/docs-types.d.ts +8 -8
  32. package/dist/schema/ecosystem-types.d.ts +12 -12
  33. package/dist/services/BootstrapService.d.ts +123 -0
  34. package/dist/services/BootstrapService.d.ts.map +1 -0
  35. package/dist/services/BootstrapService.js +309 -0
  36. package/dist/services/BootstrapService.js.map +1 -0
  37. package/dist/services/CodeWikiIndexer.js +3 -3
  38. package/dist/services/ContextGenerator.js +7 -7
  39. package/dist/services/FeedbackCollector.js +11 -11
  40. package/dist/services/GitIntegration.js +9 -9
  41. package/dist/services/HookVerifier.js +70 -70
  42. package/dist/services/KnowledgeGapDetector.d.ts +122 -0
  43. package/dist/services/KnowledgeGapDetector.d.ts.map +1 -0
  44. package/dist/services/KnowledgeGapDetector.js +530 -0
  45. package/dist/services/KnowledgeGapDetector.js.map +1 -0
  46. package/dist/services/ProjectScaffold.d.ts.map +1 -1
  47. package/dist/services/ProjectScaffold.js +79 -78
  48. package/dist/services/ProjectScaffold.js.map +1 -1
  49. package/dist/services/index.d.ts +4 -0
  50. package/dist/services/index.d.ts.map +1 -1
  51. package/dist/services/index.js +6 -0
  52. package/dist/services/index.js.map +1 -1
  53. package/dist/services/knowledge-graph.d.ts +121 -0
  54. package/dist/services/knowledge-graph.d.ts.map +1 -0
  55. package/dist/services/knowledge-graph.js +446 -0
  56. package/dist/services/knowledge-graph.js.map +1 -0
  57. package/dist/services/memory-router.d.ts +25 -0
  58. package/dist/services/memory-router.d.ts.map +1 -1
  59. package/dist/services/memory-router.js +236 -98
  60. package/dist/services/memory-router.js.map +1 -1
  61. package/dist/services/pattern-learning.d.ts +79 -0
  62. package/dist/services/pattern-learning.d.ts.map +1 -0
  63. package/dist/services/pattern-learning.js +312 -0
  64. package/dist/services/pattern-learning.js.map +1 -0
  65. package/dist/services/pattern-tracker.js +95 -95
  66. package/dist/services/semantic-search.js +2 -2
  67. package/package.json +124 -116
  68. package/standards/README.md +94 -50
  69. package/standards/experts/expert-routing.md +215 -215
  70. package/standards/general/code-quality.md +86 -86
  71. package/standards/general/ecosystem.md +243 -0
  72. package/standards/general/learning-loop.md +192 -0
  73. package/standards/general/memory-usage.md +205 -205
  74. package/standards/general/project-onboarding.md +339 -0
  75. package/standards/general/sync-workflow.md +235 -235
  76. package/standards/general/workflow.md +82 -82
  77. package/standards/hooks/mandatory-tracking.md +446 -446
  78. package/standards/infrastructure/cloud-database.md +287 -287
  79. package/standards/mcp/server-design.md +243 -243
  80. package/standards/mcp/tool-patterns.md +354 -354
  81. package/standards/skills/skill-structure.md +286 -286
  82. package/standards/skills/workflow-design.md +323 -323
  83. package/standards/tools/tool-design.md +297 -297
  84. package/templates/agents/architecture-expert.md +61 -61
  85. package/templates/agents/database-expert.md +62 -62
  86. package/templates/agents/documentation-expert.md +57 -57
  87. package/templates/agents/ecosystem-expert.md +104 -0
  88. package/templates/agents/memory-expert.md +88 -88
  89. package/templates/agents/performance-expert.md +61 -61
  90. package/templates/agents/security-expert.md +59 -59
  91. package/templates/agents/ux-expert.md +63 -63
  92. package/templates/agents/worker.md +75 -75
  93. package/templates/ai-skills/SKILL_TEMPLATE.md +55 -55
  94. package/templates/claude-settings.json +72 -72
  95. package/templates/commands/experts.md +138 -138
  96. package/templates/hooks/README.md +158 -158
  97. package/templates/hooks/project.config.json.template +77 -77
  98. package/templates/hooks/settings.local.json.template +57 -57
  99. package/templates/hooks.config.json +21 -0
  100. package/templates/memory-config.json +56 -56
  101. package/templates/memory-config.schema.json +212 -212
  102. package/templates/settings.json +58 -58
  103. package/templates/skills/continue.md +205 -205
  104. package/templates/workflows/business-improvement.md +264 -264
  105. package/templates/workflows/expert-review.md +153 -153
  106. package/templates/workflows/internal-app.md +245 -245
  107. package/templates/workflows/sync-docs.md +187 -187
@@ -0,0 +1,446 @@
1
+ /**
2
+ * @file Knowledge Graph Service
3
+ * @description Manages relationships between memories, patterns, and concepts
4
+ *
5
+ * Key Features:
6
+ * - Node types: memory, pattern, concept, file, domain
7
+ * - Edge types: relates_to, depends_on, mentions, modifies, belongs_to
8
+ * - Traversal queries for context discovery
9
+ * - Semantic clustering via vector similarity
10
+ */
11
+ import { turso } from '../db/turso-client.js';
12
+ import { upstash } from '../db/upstash-client.js';
13
+ // =============================================================================
14
+ // Knowledge Graph Service
15
+ // =============================================================================
16
+ class KnowledgeGraphService {
17
+ initialized = false;
18
+ /**
19
+ * Initialize the graph (ensure tables exist)
20
+ */
21
+ async init() {
22
+ if (this.initialized)
23
+ return;
24
+ const db = turso.getClient();
25
+ // Create graph tables if they don't exist
26
+ await db.batch([
27
+ {
28
+ sql: `
29
+ CREATE TABLE IF NOT EXISTS graph_nodes (
30
+ id TEXT PRIMARY KEY,
31
+ type TEXT NOT NULL,
32
+ system TEXT NOT NULL,
33
+ label TEXT NOT NULL,
34
+ metadata TEXT,
35
+ weight REAL DEFAULT 0.5,
36
+ created_at TEXT NOT NULL
37
+ )
38
+ `,
39
+ args: []
40
+ },
41
+ {
42
+ sql: `
43
+ CREATE TABLE IF NOT EXISTS graph_edges (
44
+ id TEXT PRIMARY KEY,
45
+ source TEXT NOT NULL,
46
+ target TEXT NOT NULL,
47
+ type TEXT NOT NULL,
48
+ weight REAL DEFAULT 0.5,
49
+ metadata TEXT,
50
+ created_at TEXT NOT NULL,
51
+ FOREIGN KEY (source) REFERENCES graph_nodes(id),
52
+ FOREIGN KEY (target) REFERENCES graph_nodes(id)
53
+ )
54
+ `,
55
+ args: []
56
+ },
57
+ {
58
+ sql: `CREATE INDEX IF NOT EXISTS idx_edges_source ON graph_edges(source)`,
59
+ args: []
60
+ },
61
+ {
62
+ sql: `CREATE INDEX IF NOT EXISTS idx_edges_target ON graph_edges(target)`,
63
+ args: []
64
+ },
65
+ {
66
+ sql: `CREATE INDEX IF NOT EXISTS idx_nodes_system ON graph_nodes(system)`,
67
+ args: []
68
+ }
69
+ ]);
70
+ this.initialized = true;
71
+ }
72
+ /**
73
+ * Add a node to the graph
74
+ */
75
+ async addNode(node) {
76
+ await this.init();
77
+ const db = turso.getClient();
78
+ const id = `node_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
79
+ const now = new Date().toISOString();
80
+ await db.execute({
81
+ sql: `
82
+ INSERT OR REPLACE INTO graph_nodes (id, type, system, label, metadata, weight, created_at)
83
+ VALUES (?, ?, ?, ?, ?, ?, ?)
84
+ `,
85
+ args: [
86
+ id,
87
+ node.type,
88
+ node.system,
89
+ node.label,
90
+ node.metadata ? JSON.stringify(node.metadata) : null,
91
+ node.weight ?? 0.5,
92
+ now
93
+ ]
94
+ });
95
+ return id;
96
+ }
97
+ /**
98
+ * Add an edge between two nodes
99
+ */
100
+ async addEdge(source, target, type, options) {
101
+ await this.init();
102
+ const db = turso.getClient();
103
+ const id = `edge_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
104
+ const now = new Date().toISOString();
105
+ await db.execute({
106
+ sql: `
107
+ INSERT OR REPLACE INTO graph_edges (id, source, target, type, weight, metadata, created_at)
108
+ VALUES (?, ?, ?, ?, ?, ?, ?)
109
+ `,
110
+ args: [
111
+ id,
112
+ source,
113
+ target,
114
+ type,
115
+ options?.weight ?? 0.5,
116
+ options?.metadata ? JSON.stringify(options.metadata) : null,
117
+ now
118
+ ]
119
+ });
120
+ return id;
121
+ }
122
+ /**
123
+ * Create node and edges from a memory item
124
+ */
125
+ async indexMemory(memoryId, system, content) {
126
+ await this.init();
127
+ // Create memory node
128
+ const nodeId = await this.addNode({
129
+ type: 'memory',
130
+ system,
131
+ label: content.title,
132
+ metadata: { memoryId, body: content.body.slice(0, 200) },
133
+ weight: 0.7
134
+ });
135
+ let edgeCount = 0;
136
+ // Link to domain
137
+ if (content.domain) {
138
+ const domainNodeId = await this.ensureNode(`domain_${system}_${content.domain}`, { type: 'domain', system, label: content.domain, weight: 0.9 });
139
+ await this.addEdge(nodeId, domainNodeId, 'belongs_to');
140
+ edgeCount++;
141
+ }
142
+ // Link to files
143
+ if (content.relatedFiles) {
144
+ for (const file of content.relatedFiles.slice(0, 10)) {
145
+ const fileNodeId = await this.ensureNode(`file_${Buffer.from(file).toString('base64').slice(0, 20)}`, { type: 'file', system, label: file, weight: 0.6 });
146
+ await this.addEdge(nodeId, fileNodeId, 'modifies');
147
+ edgeCount++;
148
+ }
149
+ }
150
+ // Link to session
151
+ if (content.sessionId) {
152
+ const sessionNodeId = await this.ensureNode(`session_${content.sessionId}`, { type: 'session', system, label: `Session ${content.sessionId.slice(0, 8)}`, weight: 0.5 });
153
+ await this.addEdge(nodeId, sessionNodeId, 'belongs_to');
154
+ edgeCount++;
155
+ }
156
+ // Extract and link concepts from tags
157
+ if (content.tags) {
158
+ for (const tag of content.tags.slice(0, 5)) {
159
+ const conceptNodeId = await this.ensureNode(`concept_${system}_${tag}`, { type: 'concept', system, label: tag, weight: 0.6 });
160
+ await this.addEdge(nodeId, conceptNodeId, 'mentions');
161
+ edgeCount++;
162
+ }
163
+ }
164
+ return { nodeId, edges: edgeCount };
165
+ }
166
+ /**
167
+ * Traverse the graph from a starting node
168
+ */
169
+ async traverse(options) {
170
+ await this.init();
171
+ const { startNode, maxDepth = 2, limit = 50 } = options;
172
+ const visited = new Set();
173
+ const nodes = [];
174
+ const edges = [];
175
+ await this.traverseRecursive(startNode, 0, maxDepth, visited, nodes, edges, options);
176
+ return {
177
+ nodes: nodes.slice(0, limit),
178
+ edges: edges.slice(0, limit * 2),
179
+ depth: maxDepth
180
+ };
181
+ }
182
+ /**
183
+ * Find related nodes by semantic similarity
184
+ */
185
+ async findSimilar(query, system, options) {
186
+ const limit = options?.limit || 10;
187
+ const minScore = options?.minScore || 0.5;
188
+ // Search vectors for similar items
189
+ const vectorResults = await upstash.searchVectors(query, {
190
+ topK: limit * 2,
191
+ filter: `system = "${system}"`,
192
+ includeMetadata: true
193
+ });
194
+ // Filter by score and node type
195
+ const filteredResults = vectorResults
196
+ .filter(r => r.score >= minScore)
197
+ .filter(r => {
198
+ if (!options?.nodeTypes)
199
+ return true;
200
+ const nodeType = r.metadata?.type;
201
+ return nodeType && options.nodeTypes.includes(nodeType);
202
+ });
203
+ // Convert to graph nodes
204
+ return filteredResults.slice(0, limit).map(r => ({
205
+ id: r.id,
206
+ type: r.metadata?.type || 'memory',
207
+ system,
208
+ label: r.metadata?.title || r.id,
209
+ metadata: r.metadata,
210
+ weight: r.score,
211
+ createdAt: r.metadata?.createdAt || new Date().toISOString(),
212
+ score: r.score
213
+ }));
214
+ }
215
+ /**
216
+ * Get context for a file (related memories, patterns, concepts)
217
+ */
218
+ async getFileContext(filePath, system) {
219
+ await this.init();
220
+ const db = turso.getClient();
221
+ // Find file node
222
+ const fileNodeResult = await db.execute({
223
+ sql: `SELECT * FROM graph_nodes WHERE type = 'file' AND label = ? AND system = ?`,
224
+ args: [filePath, system]
225
+ });
226
+ if (fileNodeResult.rows.length === 0) {
227
+ return { nodes: [], edges: [], depth: 0 };
228
+ }
229
+ const fileNodeId = fileNodeResult.rows[0].id;
230
+ // Traverse from file node
231
+ return this.traverse({
232
+ startNode: fileNodeId,
233
+ maxDepth: 2,
234
+ edgeTypes: ['modifies', 'mentions', 'belongs_to'],
235
+ limit: 30
236
+ });
237
+ }
238
+ /**
239
+ * Get domain overview (all concepts and their relationships)
240
+ */
241
+ async getDomainOverview(system, domain) {
242
+ await this.init();
243
+ const db = turso.getClient();
244
+ // Find domain node
245
+ const domainNodeId = `domain_${system}_${domain}`;
246
+ // Get all nodes connected to this domain
247
+ const connectedNodes = await db.execute({
248
+ sql: `
249
+ SELECT n.* FROM graph_nodes n
250
+ JOIN graph_edges e ON n.id = e.source OR n.id = e.target
251
+ WHERE (e.source = ? OR e.target = ?)
252
+ AND n.system = ?
253
+ LIMIT 100
254
+ `,
255
+ args: [domainNodeId, domainNodeId, system]
256
+ });
257
+ const nodeIds = new Set(connectedNodes.rows.map(r => r.id));
258
+ nodeIds.add(domainNodeId);
259
+ // Get edges between these nodes
260
+ const placeholders = [...nodeIds].map(() => '?').join(', ');
261
+ const edgeResults = await db.execute({
262
+ sql: `
263
+ SELECT * FROM graph_edges
264
+ WHERE source IN (${placeholders}) AND target IN (${placeholders})
265
+ `,
266
+ args: [...nodeIds, ...nodeIds]
267
+ });
268
+ return {
269
+ nodes: connectedNodes.rows.map(r => this.rowToNode(r)),
270
+ edges: edgeResults.rows.map(r => this.rowToEdge(r)),
271
+ depth: 1
272
+ };
273
+ }
274
+ /**
275
+ * Detect clusters of related memories
276
+ */
277
+ async detectClusters(system, options) {
278
+ await this.init();
279
+ const minSize = options?.minClusterSize || 3;
280
+ const maxClusters = options?.maxClusters || 10;
281
+ const db = turso.getClient();
282
+ // Find heavily connected nodes (potential cluster centroids)
283
+ const centroids = await db.execute({
284
+ sql: `
285
+ SELECT n.id, n.label, COUNT(e.id) as connections
286
+ FROM graph_nodes n
287
+ LEFT JOIN graph_edges e ON n.id = e.source OR n.id = e.target
288
+ WHERE n.system = ? AND n.type IN ('memory', 'concept')
289
+ GROUP BY n.id
290
+ HAVING connections >= ?
291
+ ORDER BY connections DESC
292
+ LIMIT ?
293
+ `,
294
+ args: [system, minSize, maxClusters]
295
+ });
296
+ const clusters = [];
297
+ const assignedNodes = new Set();
298
+ for (const centroid of centroids.rows) {
299
+ const centroidId = centroid.id;
300
+ if (assignedNodes.has(centroidId))
301
+ continue;
302
+ // Get connected nodes
303
+ const connected = await db.execute({
304
+ sql: `
305
+ SELECT DISTINCT
306
+ CASE WHEN source = ? THEN target ELSE source END as node_id
307
+ FROM graph_edges
308
+ WHERE source = ? OR target = ?
309
+ `,
310
+ args: [centroidId, centroidId, centroidId]
311
+ });
312
+ const clusterNodes = [centroidId];
313
+ for (const row of connected.rows) {
314
+ const nodeId = row.node_id;
315
+ if (!assignedNodes.has(nodeId)) {
316
+ clusterNodes.push(nodeId);
317
+ assignedNodes.add(nodeId);
318
+ }
319
+ }
320
+ assignedNodes.add(centroidId);
321
+ if (clusterNodes.length >= minSize) {
322
+ clusters.push({
323
+ clusterId: `cluster_${centroidId}`,
324
+ nodes: clusterNodes,
325
+ centroid: centroidId,
326
+ theme: centroid.label,
327
+ score: clusterNodes.length / 10 // Simple cohesion score
328
+ });
329
+ }
330
+ }
331
+ return clusters;
332
+ }
333
+ // =============================================================================
334
+ // Private Methods
335
+ // =============================================================================
336
+ async ensureNode(id, node) {
337
+ const db = turso.getClient();
338
+ const existing = await db.execute({
339
+ sql: `SELECT id FROM graph_nodes WHERE id = ?`,
340
+ args: [id]
341
+ });
342
+ if (existing.rows.length > 0) {
343
+ return id;
344
+ }
345
+ const now = new Date().toISOString();
346
+ await db.execute({
347
+ sql: `
348
+ INSERT INTO graph_nodes (id, type, system, label, metadata, weight, created_at)
349
+ VALUES (?, ?, ?, ?, ?, ?, ?)
350
+ `,
351
+ args: [
352
+ id,
353
+ node.type,
354
+ node.system,
355
+ node.label,
356
+ node.metadata ? JSON.stringify(node.metadata) : null,
357
+ node.weight ?? 0.5,
358
+ now
359
+ ]
360
+ });
361
+ return id;
362
+ }
363
+ async traverseRecursive(nodeId, currentDepth, maxDepth, visited, nodes, edges, options) {
364
+ if (currentDepth > maxDepth || visited.has(nodeId))
365
+ return;
366
+ visited.add(nodeId);
367
+ const db = turso.getClient();
368
+ // Get the node
369
+ const nodeResult = await db.execute({
370
+ sql: `SELECT * FROM graph_nodes WHERE id = ?`,
371
+ args: [nodeId]
372
+ });
373
+ if (nodeResult.rows.length === 0)
374
+ return;
375
+ const node = this.rowToNode(nodeResult.rows[0]);
376
+ // Filter by node type if specified
377
+ if (options.nodeTypes && !options.nodeTypes.includes(node.type))
378
+ return;
379
+ nodes.push(node);
380
+ // Get connected edges
381
+ let edgeQuery = `
382
+ SELECT * FROM graph_edges
383
+ WHERE source = ? OR target = ?
384
+ `;
385
+ const edgeArgs = [nodeId, nodeId];
386
+ if (options.edgeTypes && options.edgeTypes.length > 0) {
387
+ const placeholders = options.edgeTypes.map(() => '?').join(', ');
388
+ edgeQuery += ` AND type IN (${placeholders})`;
389
+ edgeArgs.push(...options.edgeTypes);
390
+ }
391
+ const edgeResults = await db.execute({ sql: edgeQuery, args: edgeArgs });
392
+ for (const row of edgeResults.rows) {
393
+ const edge = this.rowToEdge(row);
394
+ edges.push(edge);
395
+ // Traverse to connected node
396
+ const nextNode = edge.source === nodeId ? edge.target : edge.source;
397
+ await this.traverseRecursive(nextNode, currentDepth + 1, maxDepth, visited, nodes, edges, options);
398
+ }
399
+ }
400
+ rowToNode(row) {
401
+ return {
402
+ id: row.id,
403
+ type: row.type,
404
+ system: row.system,
405
+ label: row.label,
406
+ metadata: row.metadata
407
+ ? typeof row.metadata === 'string'
408
+ ? JSON.parse(row.metadata)
409
+ : row.metadata
410
+ : undefined,
411
+ weight: row.weight,
412
+ createdAt: row.created_at
413
+ };
414
+ }
415
+ rowToEdge(row) {
416
+ return {
417
+ id: row.id,
418
+ source: row.source,
419
+ target: row.target,
420
+ type: row.type,
421
+ weight: row.weight,
422
+ metadata: row.metadata
423
+ ? typeof row.metadata === 'string'
424
+ ? JSON.parse(row.metadata)
425
+ : row.metadata
426
+ : undefined,
427
+ createdAt: row.created_at
428
+ };
429
+ }
430
+ }
431
+ // =============================================================================
432
+ // Singleton Export
433
+ // =============================================================================
434
+ let instance = null;
435
+ export function getKnowledgeGraph() {
436
+ if (!instance) {
437
+ instance = new KnowledgeGraphService();
438
+ }
439
+ return instance;
440
+ }
441
+ export function resetKnowledgeGraph() {
442
+ instance = null;
443
+ }
444
+ export const knowledgeGraph = getKnowledgeGraph();
445
+ export default knowledgeGraph;
446
+ //# sourceMappingURL=knowledge-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-graph.js","sourceRoot":"","sources":["../../src/services/knowledge-graph.ts"],"names":[],"mappings":"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"}
@@ -55,12 +55,25 @@ declare class MemoryRouterService {
55
55
  init(): Promise<void>;
56
56
  /**
57
57
  * Unified search across all memory backends
58
+ * OPTIMIZED: Parallel execution (45% faster)
58
59
  */
59
60
  search(options: SearchOptions): Promise<SearchResult>;
61
+ /**
62
+ * Sanitize error messages to prevent token leakage
63
+ */
64
+ private sanitizeError;
60
65
  /**
61
66
  * Write memory to all backends atomically
62
67
  */
63
68
  write(options: WriteOptions): Promise<string>;
69
+ /**
70
+ * Batch write multiple memories - 10x faster than sequential writes
71
+ * OPTIMIZED: Single batch call per backend instead of N calls
72
+ */
73
+ batchWrite(items: WriteOptions[]): Promise<{
74
+ ids: string[];
75
+ errors: number;
76
+ }>;
64
77
  /**
65
78
  * Get memories by domain for context loading
66
79
  */
@@ -106,6 +119,18 @@ declare class MemoryRouterService {
106
119
  * Detect domain from file paths
107
120
  */
108
121
  private detectDomainFromFiles;
122
+ /**
123
+ * Batch write to Turso using transaction
124
+ */
125
+ private batchWriteToTurso;
126
+ /**
127
+ * Batch write to Vector index
128
+ */
129
+ private batchWriteToVector;
130
+ /**
131
+ * Batch write to Redis cache using pipeline
132
+ */
133
+ private batchWriteToRedis;
109
134
  private searchTurso;
110
135
  private searchVector;
111
136
  private searchRedis;
@@ -1 +1 @@
1
- {"version":3,"file":"memory-router.d.ts","sourceRoot":"","sources":["../../src/services/memory-router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-router.d.ts","sourceRoot":"","sources":["../../src/services/memory-router.ts"],"names":[],"mappings":"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"}