@siemens/ix-mcp-angular 3.2.0-v.1.10.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 (48) hide show
  1. package/AGENTS.md +86 -0
  2. package/LICENSE.md +20 -0
  3. package/README.md +391 -0
  4. package/config.json +51 -0
  5. package/database/vectors.db/documents.lance/_transactions/109-667922df-dcb8-4400-846a-fcca46a3cfd8.txn +0 -0
  6. package/database/vectors.db/documents.lance/_versions/111.manifest +0 -0
  7. package/database/vectors.db/documents.lance/data/1001001000111000111110002d01c8449a9aa9f7ce9a04125c.lance +0 -0
  8. package/dist/src/cli.d.ts +3 -0
  9. package/dist/src/cli.d.ts.map +1 -0
  10. package/dist/src/cli.js +310 -0
  11. package/dist/src/cli.js.map +1 -0
  12. package/dist/src/config.d.ts +35 -0
  13. package/dist/src/config.d.ts.map +1 -0
  14. package/dist/src/config.js +33 -0
  15. package/dist/src/config.js.map +1 -0
  16. package/dist/src/db-handler.d.ts +50 -0
  17. package/dist/src/db-handler.d.ts.map +1 -0
  18. package/dist/src/db-handler.js +256 -0
  19. package/dist/src/db-handler.js.map +1 -0
  20. package/dist/src/embeddings.d.ts +77 -0
  21. package/dist/src/embeddings.d.ts.map +1 -0
  22. package/dist/src/embeddings.js +280 -0
  23. package/dist/src/embeddings.js.map +1 -0
  24. package/dist/src/index.d.ts +30 -0
  25. package/dist/src/index.d.ts.map +1 -0
  26. package/dist/src/index.js +427 -0
  27. package/dist/src/index.js.map +1 -0
  28. package/dist/src/keys.d.ts +4 -0
  29. package/dist/src/keys.d.ts.map +1 -0
  30. package/dist/src/keys.js +24 -0
  31. package/dist/src/keys.js.map +1 -0
  32. package/dist/src/logger.d.ts +24 -0
  33. package/dist/src/logger.d.ts.map +1 -0
  34. package/dist/src/logger.js +185 -0
  35. package/dist/src/logger.js.map +1 -0
  36. package/dist/src/prompt.d.ts +19 -0
  37. package/dist/src/prompt.d.ts.map +1 -0
  38. package/dist/src/prompt.js +94 -0
  39. package/dist/src/prompt.js.map +1 -0
  40. package/dist/src/setup.d.ts +29 -0
  41. package/dist/src/setup.d.ts.map +1 -0
  42. package/dist/src/setup.js +851 -0
  43. package/dist/src/setup.js.map +1 -0
  44. package/dist/src/token.d.ts +22 -0
  45. package/dist/src/token.d.ts.map +1 -0
  46. package/dist/src/token.js +76 -0
  47. package/dist/src/token.js.map +1 -0
  48. package/package.json +69 -0
@@ -0,0 +1,256 @@
1
+ /**
2
+ * Copyright (c) Siemens 2016 - 2025
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+ import * as lancedb from '@lancedb/lancedb';
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ export class DatabaseHandler {
9
+ db;
10
+ table;
11
+ verbose;
12
+ dbPath;
13
+ tableName = 'documents';
14
+ constructor(dbPath, options) {
15
+ this.verbose = options?.verbose || false;
16
+ this.dbPath = dbPath;
17
+ // Ensure database directory exists
18
+ const dbDir = path.dirname(dbPath);
19
+ if (!fs.existsSync(dbDir)) {
20
+ fs.mkdirSync(dbDir, { recursive: true });
21
+ }
22
+ }
23
+ async initialize() {
24
+ try {
25
+ this.db = await lancedb.connect(this.dbPath);
26
+ const tableNames = await this.db.tableNames();
27
+ if (tableNames.includes(this.tableName)) {
28
+ this.table = await this.db.openTable(this.tableName);
29
+ if (this.verbose) {
30
+ const count = await this.getDocumentCount();
31
+ console.log(`Database ready with ${count} documentation chunks`);
32
+ }
33
+ }
34
+ else {
35
+ if (this.verbose) {
36
+ console.log('Database ready (no tables yet)');
37
+ }
38
+ }
39
+ }
40
+ catch (error) {
41
+ throw new Error(`Failed to initialize LanceDB database: ${error}`);
42
+ }
43
+ }
44
+ async getDocumentCount() {
45
+ if (!this.table) {
46
+ return 0;
47
+ }
48
+ try {
49
+ const count = await this.table.countRows();
50
+ return count;
51
+ }
52
+ catch (error) {
53
+ console.warn('Error counting documents:', error);
54
+ return 0;
55
+ }
56
+ }
57
+ async getDocumentsByType(type) {
58
+ if (!this.table) {
59
+ return [];
60
+ }
61
+ try {
62
+ const results = await this.table.query().where(`type = '${type}'`).toArray();
63
+ return results.map(row => this.normalizeRow(row));
64
+ }
65
+ catch (error) {
66
+ console.warn(`Error getting documents by type ${type}:`, error);
67
+ return [];
68
+ }
69
+ }
70
+ async getAllDocuments() {
71
+ if (!this.table) {
72
+ return [];
73
+ }
74
+ try {
75
+ const results = await this.table.query().toArray();
76
+ return results.map(row => this.normalizeRow(row));
77
+ }
78
+ catch (error) {
79
+ console.warn('Error getting all documents:', error);
80
+ return [];
81
+ }
82
+ }
83
+ async insertDocument(chunk, embedding) {
84
+ if (!this.db) {
85
+ throw new Error('Database not initialized - call initialize() first');
86
+ }
87
+ const data = [
88
+ {
89
+ id: chunk.chunkId,
90
+ content: chunk.content,
91
+ vector: embedding,
92
+ chunk_index: chunk.chunkIndex,
93
+ type: chunk.type,
94
+ header_path: chunk.headerPath || '',
95
+ header_level: chunk.headerLevel || 0,
96
+ category: chunk.category || '',
97
+ terms: chunk.terms || '',
98
+ token_count: chunk.tokenCount
99
+ }
100
+ ];
101
+ if (!this.table) {
102
+ this.table = await this.db.createTable(this.tableName, data);
103
+ }
104
+ else {
105
+ await this.table.add(data);
106
+ }
107
+ }
108
+ async insertDocumentsBatch(chunks, embeddings) {
109
+ if (!this.db) {
110
+ throw new Error('Database not initialized - call initialize() first');
111
+ }
112
+ if (chunks.length !== embeddings.length) {
113
+ throw new Error('Chunks and embeddings arrays must have the same length');
114
+ }
115
+ const data = chunks.map((chunk, i) => ({
116
+ id: chunk.chunkId,
117
+ content: chunk.content,
118
+ vector: embeddings[i],
119
+ chunk_index: chunk.chunkIndex,
120
+ type: chunk.type,
121
+ header_path: chunk.headerPath || '',
122
+ header_level: chunk.headerLevel || 0,
123
+ category: chunk.category || '',
124
+ terms: chunk.terms || '',
125
+ token_count: chunk.tokenCount
126
+ }));
127
+ if (!this.table) {
128
+ this.table = await this.db.createTable(this.tableName, data);
129
+ }
130
+ else {
131
+ await this.table.add(data);
132
+ }
133
+ }
134
+ async clearAllDocuments() {
135
+ if (!this.db || !this.table) {
136
+ return 0;
137
+ }
138
+ try {
139
+ const count = await this.table.countRows();
140
+ await this.db.dropTable(this.tableName);
141
+ this.table = undefined;
142
+ return count;
143
+ }
144
+ catch (error) {
145
+ console.warn('Error clearing existing data:', error);
146
+ return 0;
147
+ }
148
+ }
149
+ async clearDocumentsByType(type) {
150
+ if (!this.table) {
151
+ return 0;
152
+ }
153
+ try {
154
+ const docs = await this.getDocumentsByType(type);
155
+ const count = docs.length;
156
+ if (count > 0) {
157
+ const deleteExpr = `type = '${type}'`;
158
+ await this.table.delete(deleteExpr);
159
+ }
160
+ return count;
161
+ }
162
+ catch (error) {
163
+ console.warn(`Error clearing ${type} data:`, error);
164
+ return 0;
165
+ }
166
+ }
167
+ async vectorSearch(queryVector, limit, type) {
168
+ if (!this.table) {
169
+ return [];
170
+ }
171
+ try {
172
+ let query = this.table.query().nearestTo(queryVector).limit(limit);
173
+ if (type) {
174
+ query = query.where(`type = '${type}'`);
175
+ }
176
+ const results = await query.toArray();
177
+ return results.map(row => this.normalizeRow(row));
178
+ }
179
+ catch (error) {
180
+ console.warn('Error performing vector search:', error);
181
+ return [];
182
+ }
183
+ }
184
+ close() {
185
+ if (this.db && this.verbose) {
186
+ console.log('Database connection closed');
187
+ }
188
+ this.db = undefined;
189
+ this.table = undefined;
190
+ }
191
+ async getStats() {
192
+ if (!this.table) {
193
+ return {
194
+ totalDocuments: 0,
195
+ documentsByType: {}
196
+ };
197
+ }
198
+ try {
199
+ const total = await this.getDocumentCount();
200
+ const allDocs = await this.getAllDocuments();
201
+ const documentsByType = {};
202
+ for (const doc of allDocs) {
203
+ documentsByType[doc.type] = (documentsByType[doc.type] || 0) + 1;
204
+ }
205
+ return {
206
+ totalDocuments: total,
207
+ documentsByType
208
+ };
209
+ }
210
+ catch (error) {
211
+ console.warn('Error getting stats:', error);
212
+ return {
213
+ totalDocuments: 0,
214
+ documentsByType: {}
215
+ };
216
+ }
217
+ }
218
+ async cleanupOldVersions() {
219
+ if (!this.table) {
220
+ if (this.verbose) {
221
+ console.log('No table to cleanup');
222
+ }
223
+ return;
224
+ }
225
+ try {
226
+ if (this.verbose) {
227
+ console.log('Cleaning up old table versions...');
228
+ }
229
+ await this.table.optimize({
230
+ cleanupOlderThan: new Date(),
231
+ deleteUnverified: false
232
+ });
233
+ if (this.verbose) {
234
+ console.log('Old versions cleaned up successfully');
235
+ }
236
+ }
237
+ catch (error) {
238
+ console.warn('Error cleaning up old versions:', error);
239
+ }
240
+ }
241
+ normalizeRow(row) {
242
+ return {
243
+ id: String(row.id || ''),
244
+ content: String(row.content || ''),
245
+ vector: Array.isArray(row.vector) ? row.vector : [],
246
+ chunk_index: typeof row.chunk_index === 'number' ? row.chunk_index : 0,
247
+ type: String(row.type || 'documentation'),
248
+ header_path: row.header_path ? String(row.header_path) : undefined,
249
+ header_level: typeof row.header_level === 'number' && row.header_level > 0 ? row.header_level : undefined,
250
+ category: row.category ? String(row.category) : undefined,
251
+ terms: row.terms ? String(row.terms) : undefined,
252
+ token_count: typeof row.token_count === 'number' ? row.token_count : 0
253
+ };
254
+ }
255
+ }
256
+ //# sourceMappingURL=db-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-handler.js","sourceRoot":"","sources":["../../../src/mcp/db-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ export declare class EmbeddingService {
2
+ private embeddingCache;
3
+ private persistentCachePath;
4
+ private persistentCache;
5
+ private verbose;
6
+ private debug;
7
+ constructor(options?: {
8
+ verbose?: boolean;
9
+ debug?: boolean;
10
+ persistentCachePath?: string;
11
+ });
12
+ /**
13
+ * Get embeddings for multiple texts in a single batch request
14
+ * @param texts Array of texts to get embeddings for
15
+ * @param retryCount Current retry attempt
16
+ * @returns Array of embedding vectors
17
+ */
18
+ getEmbeddingsBatch(texts: string[], retryCount?: number): Promise<number[][]>;
19
+ /**
20
+ * Get embedding for a single text
21
+ * @param text The text to get embedding for
22
+ * @param retryCount Current retry attempt
23
+ * @returns The embedding vector
24
+ */
25
+ getEmbedding(text: string, retryCount?: number): Promise<number[]>;
26
+ /**
27
+ * Normalize a vector to unit length
28
+ * @param vector The vector to normalize
29
+ * @returns The normalized vector
30
+ */
31
+ normalizeVector(vector: number[]): number[];
32
+ /**
33
+ * Clear the embedding cache
34
+ */
35
+ clearEmbeddingCache(): void;
36
+ /**
37
+ * Clear both in-memory and persistent caches
38
+ */
39
+ clearAllCaches(): void;
40
+ /**
41
+ * Get cached embedding for a text without generating a new one
42
+ * @param text Text to check in cache
43
+ * @returns Cached embedding or undefined if not in cache
44
+ */
45
+ getCachedEmbedding(text: string): number[] | undefined;
46
+ /**
47
+ * Get cache size
48
+ * @returns Number of cached embeddings
49
+ */
50
+ getCacheSize(): number;
51
+ /**
52
+ * Get total cache size including persistent cache
53
+ */
54
+ getTotalCacheSize(): number;
55
+ /**
56
+ * Get cache statistics
57
+ */
58
+ getCacheStats(): {
59
+ memorySize: number;
60
+ persistentSize: number;
61
+ totalSize: number;
62
+ cacheEnabled: boolean;
63
+ };
64
+ /**
65
+ * Load persistent cache from file
66
+ */
67
+ private loadPersistentCache;
68
+ /**
69
+ * Save persistent cache to file
70
+ */
71
+ private savePersistentCache;
72
+ /**
73
+ * Create a hash of the text content for cache validation
74
+ */
75
+ private hashText;
76
+ }
77
+ //# sourceMappingURL=embeddings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../../src/mcp/embeddings.ts"],"names":[],"mappings":"AA0BA,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,mBAAmB,CAAiC;IAC5D,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,KAAK,CAAkB;gBAEnB,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAE;IAY1F;;;;;OAKG;IACG,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,UAAU,SAAI,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IA0I9E;;;;;OAKG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKnE;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAK3C;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAI3B;;OAEG;IACH,cAAc,IAAI,IAAI;IAQtB;;;;OAIG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS;IAoBtD;;;OAGG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;OAEG;IACH,aAAa,IAAI;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,OAAO,CAAC;KACvB;IASD;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA0B3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;OAEG;IACH,OAAO,CAAC,QAAQ;CAGjB"}
@@ -0,0 +1,280 @@
1
+ /**
2
+ * Copyright (c) Siemens 2016 - 2025
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+ import fetch from 'node-fetch';
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ import * as crypto from 'crypto';
9
+ import { getToken } from './token.js';
10
+ export class EmbeddingService {
11
+ embeddingCache = new Map();
12
+ persistentCachePath = undefined;
13
+ persistentCache = {};
14
+ verbose = false;
15
+ debug = false;
16
+ constructor(options) {
17
+ this.verbose = options?.verbose || false;
18
+ this.debug = options?.debug || false;
19
+ // Enable persistent caching when cache path is provided via options or environment
20
+ const envCachePath = process.env.EMBEDDING_CACHE_PATH;
21
+ if (options?.persistentCachePath || envCachePath) {
22
+ this.persistentCachePath = options?.persistentCachePath || envCachePath || undefined;
23
+ this.loadPersistentCache();
24
+ }
25
+ }
26
+ /**
27
+ * Get embeddings for multiple texts in a single batch request
28
+ * @param texts Array of texts to get embeddings for
29
+ * @param retryCount Current retry attempt
30
+ * @returns Array of embedding vectors
31
+ */
32
+ async getEmbeddingsBatch(texts, retryCount = 0) {
33
+ const maxRetries = 5;
34
+ const baseDelay = 5000; // 5 seconds
35
+ let memoryHits = 0;
36
+ let persistentHits = 0;
37
+ // Check in-memory cache first, then persistent cache
38
+ const results = texts.map(text => {
39
+ if (this.embeddingCache.has(text)) {
40
+ memoryHits++;
41
+ return this.embeddingCache.get(text) || undefined;
42
+ }
43
+ // Check persistent cache if available
44
+ if (this.persistentCachePath) {
45
+ const hash = this.hashText(text);
46
+ const cached = this.persistentCache[text];
47
+ if (cached && cached.hash === hash) {
48
+ persistentHits++;
49
+ // Move to in-memory cache for faster subsequent access
50
+ this.embeddingCache.set(text, cached.embedding);
51
+ return cached.embedding;
52
+ }
53
+ }
54
+ return undefined;
55
+ });
56
+ // Find indices of texts that need embeddings
57
+ const uncachedIndices = [];
58
+ const uncachedTexts = [];
59
+ for (let i = 0; i < texts.length; i++) {
60
+ if (results[i] === undefined) {
61
+ uncachedIndices.push(i);
62
+ uncachedTexts.push(texts[i]);
63
+ }
64
+ }
65
+ // If all are cached, return cached results
66
+ if (uncachedTexts.length === 0) {
67
+ if (this.verbose || this.debug) {
68
+ console.log(`Cache hit: ${memoryHits} memory, ${persistentHits} persistent, no API call for ${texts.length} texts`);
69
+ }
70
+ return results;
71
+ }
72
+ if (this.verbose || this.debug) {
73
+ console.log(`Cache stats: ${memoryHits} memory hits, ${persistentHits} persistent hits, ${uncachedTexts.length} API call needed for ${texts.length} total texts`);
74
+ }
75
+ const token = await getToken();
76
+ try {
77
+ const response = await fetch('https://api.siemens.com/llm/v1/embeddings', {
78
+ method: 'POST',
79
+ headers: {
80
+ 'Content-Type': 'application/json',
81
+ Authorization: `Bearer ${token}`
82
+ },
83
+ body: JSON.stringify({
84
+ model: 'bge-m3',
85
+ input: uncachedTexts
86
+ })
87
+ });
88
+ if (response.status === 429) {
89
+ // Rate limited - wait and retry
90
+ if (retryCount < maxRetries) {
91
+ const delay = baseDelay * Math.pow(2, retryCount) + Math.random() * 1000; // Exponential backoff with jitter
92
+ if (this.verbose || this.debug) {
93
+ console.log(`Rate limited. Waiting ${Math.round(delay)}ms before retry ${retryCount + 1}/${maxRetries}...`);
94
+ }
95
+ await new Promise(resolve => setTimeout(resolve, delay));
96
+ return this.getEmbeddingsBatch(texts, retryCount + 1);
97
+ }
98
+ else {
99
+ throw new Error(`Rate limit exceeded after ${maxRetries} retries`);
100
+ }
101
+ }
102
+ if (!response.ok) {
103
+ throw new Error(`Embedding API error: ${response.status} ${response.statusText}`);
104
+ }
105
+ const data = (await response.json());
106
+ // Process and cache new embeddings
107
+ for (let i = 0; i < uncachedTexts.length; i++) {
108
+ const embedding = data.data[i].embedding;
109
+ const normalizedEmbedding = this.normalizeVector(embedding);
110
+ // Cache the result in memory
111
+ this.embeddingCache.set(uncachedTexts[i], normalizedEmbedding);
112
+ // Cache in persistent storage if available
113
+ if (this.persistentCachePath) {
114
+ const hash = this.hashText(uncachedTexts[i]);
115
+ this.persistentCache[uncachedTexts[i]] = {
116
+ embedding: normalizedEmbedding,
117
+ hash,
118
+ timestamp: Date.now()
119
+ };
120
+ }
121
+ // Update results array
122
+ const originalIndex = uncachedIndices[i];
123
+ results[originalIndex] = normalizedEmbedding;
124
+ }
125
+ // Save persistent cache after successful batch
126
+ if (this.persistentCachePath && uncachedTexts.length > 0) {
127
+ this.savePersistentCache();
128
+ }
129
+ // Add small delay between successful requests to avoid hitting rate limits
130
+ if (retryCount === 0) {
131
+ await new Promise(resolve => setTimeout(resolve, 200));
132
+ }
133
+ return results;
134
+ }
135
+ catch (error) {
136
+ if (error instanceof Error && error.message.includes('Rate limit') && retryCount < maxRetries) {
137
+ const delay = baseDelay * Math.pow(2, retryCount) + Math.random() * 1000;
138
+ if (this.verbose || this.debug) {
139
+ console.log(`Error occurred. Waiting ${Math.round(delay)}ms before retry ${retryCount + 1}/${maxRetries}...`);
140
+ }
141
+ await new Promise(resolve => setTimeout(resolve, delay));
142
+ return this.getEmbeddingsBatch(texts, retryCount + 1);
143
+ }
144
+ throw error;
145
+ }
146
+ }
147
+ /**
148
+ * Get embedding for a single text
149
+ * @param text The text to get embedding for
150
+ * @param retryCount Current retry attempt
151
+ * @returns The embedding vector
152
+ */
153
+ async getEmbedding(text, retryCount = 0) {
154
+ const results = await this.getEmbeddingsBatch([text], retryCount);
155
+ return results[0];
156
+ }
157
+ /**
158
+ * Normalize a vector to unit length
159
+ * @param vector The vector to normalize
160
+ * @returns The normalized vector
161
+ */
162
+ normalizeVector(vector) {
163
+ const magnitude = Math.sqrt(vector.reduce((sum, val) => sum + val * val, 0));
164
+ return vector.map(val => val / magnitude);
165
+ }
166
+ /**
167
+ * Clear the embedding cache
168
+ */
169
+ clearEmbeddingCache() {
170
+ this.embeddingCache.clear();
171
+ }
172
+ /**
173
+ * Clear both in-memory and persistent caches
174
+ */
175
+ clearAllCaches() {
176
+ this.embeddingCache.clear();
177
+ this.persistentCache = {};
178
+ if (this.persistentCachePath && fs.existsSync(this.persistentCachePath)) {
179
+ fs.unlinkSync(this.persistentCachePath);
180
+ }
181
+ }
182
+ /**
183
+ * Get cached embedding for a text without generating a new one
184
+ * @param text Text to check in cache
185
+ * @returns Cached embedding or undefined if not in cache
186
+ */
187
+ getCachedEmbedding(text) {
188
+ // Check in-memory cache first
189
+ if (this.embeddingCache.has(text)) {
190
+ return this.embeddingCache.get(text);
191
+ }
192
+ // Check persistent cache if available
193
+ if (this.persistentCachePath) {
194
+ const hash = this.hashText(text);
195
+ const cached = this.persistentCache[text];
196
+ if (cached && cached.hash === hash) {
197
+ // Move to in-memory cache for faster subsequent access
198
+ this.embeddingCache.set(text, cached.embedding);
199
+ return cached.embedding;
200
+ }
201
+ }
202
+ return undefined;
203
+ }
204
+ /**
205
+ * Get cache size
206
+ * @returns Number of cached embeddings
207
+ */
208
+ getCacheSize() {
209
+ return this.embeddingCache.size;
210
+ }
211
+ /**
212
+ * Get total cache size including persistent cache
213
+ */
214
+ getTotalCacheSize() {
215
+ return this.embeddingCache.size + Object.keys(this.persistentCache).length;
216
+ }
217
+ /**
218
+ * Get cache statistics
219
+ */
220
+ getCacheStats() {
221
+ return {
222
+ memorySize: this.embeddingCache.size,
223
+ persistentSize: Object.keys(this.persistentCache).length,
224
+ totalSize: this.getTotalCacheSize(),
225
+ cacheEnabled: this.persistentCachePath !== undefined
226
+ };
227
+ }
228
+ /**
229
+ * Load persistent cache from file
230
+ */
231
+ loadPersistentCache() {
232
+ if (!this.persistentCachePath)
233
+ return;
234
+ try {
235
+ // Ensure cache directory exists
236
+ const cacheDir = path.dirname(this.persistentCachePath);
237
+ if (!fs.existsSync(cacheDir)) {
238
+ fs.mkdirSync(cacheDir, { recursive: true });
239
+ }
240
+ if (fs.existsSync(this.persistentCachePath)) {
241
+ const data = fs.readFileSync(this.persistentCachePath, 'utf8');
242
+ this.persistentCache = JSON.parse(data);
243
+ if (this.verbose || this.debug) {
244
+ console.log(`✓ Loaded ${Object.keys(this.persistentCache).length} cached embeddings from ${this.persistentCachePath}`);
245
+ }
246
+ }
247
+ }
248
+ catch (error) {
249
+ console.warn(`Failed to load persistent cache: ${error}`);
250
+ this.persistentCache = {};
251
+ }
252
+ }
253
+ /**
254
+ * Save persistent cache to file
255
+ */
256
+ savePersistentCache() {
257
+ if (!this.persistentCachePath)
258
+ return;
259
+ try {
260
+ const cacheDir = path.dirname(this.persistentCachePath);
261
+ if (!fs.existsSync(cacheDir)) {
262
+ fs.mkdirSync(cacheDir, { recursive: true });
263
+ }
264
+ fs.writeFileSync(this.persistentCachePath, JSON.stringify(this.persistentCache, null, 2));
265
+ if (this.verbose || this.debug) {
266
+ console.log(`✓ Saved ${Object.keys(this.persistentCache).length} cached embeddings to ${this.persistentCachePath}`);
267
+ }
268
+ }
269
+ catch (error) {
270
+ console.warn(`Failed to save persistent cache: ${error}`);
271
+ }
272
+ }
273
+ /**
274
+ * Create a hash of the text content for cache validation
275
+ */
276
+ hashText(text) {
277
+ return crypto.createHash('sha256').update(text).digest('hex');
278
+ }
279
+ }
280
+ //# sourceMappingURL=embeddings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../../src/mcp/embeddings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ import { Server as HttpServer } from 'http';
3
+ declare class SDLMCPServer {
4
+ private server;
5
+ private db;
6
+ private initialized;
7
+ private embeddingService;
8
+ private verbose;
9
+ private debug;
10
+ private logger;
11
+ private httpServer?;
12
+ private inflightRequests;
13
+ constructor(options?: {
14
+ verbose?: boolean;
15
+ debug?: boolean;
16
+ overrideLogging?: boolean;
17
+ });
18
+ private initialize;
19
+ private setupToolHandlers;
20
+ private performSearch;
21
+ private formatSearchResults;
22
+ private log;
23
+ run(): Promise<void>;
24
+ private createHttpMcpServer;
25
+ runHttp(port?: number): Promise<HttpServer<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>>;
26
+ drainAndClose(timeoutMs?: number): Promise<void>;
27
+ close(): void;
28
+ }
29
+ export { SDLMCPServer };
30
+ //# sourceMappingURL=index.d.ts.map