@siemens/ix-mcp-angular 3.2.0-v.1.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.
- package/LICENSE.md +20 -0
- package/README.md +330 -0
- package/config.json +48 -0
- package/database/vectors.db +0 -0
- package/dist/src/cli.d.ts +3 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +298 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/config.d.ts +34 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +33 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/db-handler.d.ts +47 -0
- package/dist/src/db-handler.d.ts.map +1 -0
- package/dist/src/db-handler.js +143 -0
- package/dist/src/db-handler.js.map +1 -0
- package/dist/src/embeddings.d.ts +84 -0
- package/dist/src/embeddings.d.ts.map +1 -0
- package/dist/src/embeddings.js +300 -0
- package/dist/src/embeddings.js.map +1 -0
- package/dist/src/index.d.ts +24 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +342 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/keys.d.ts +4 -0
- package/dist/src/keys.d.ts.map +1 -0
- package/dist/src/keys.js +25 -0
- package/dist/src/keys.js.map +1 -0
- package/dist/src/logger.d.ts +24 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +185 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/prompt.d.ts +19 -0
- package/dist/src/prompt.d.ts.map +1 -0
- package/dist/src/prompt.js +94 -0
- package/dist/src/prompt.js.map +1 -0
- package/dist/src/setup.d.ts +26 -0
- package/dist/src/setup.d.ts.map +1 -0
- package/dist/src/setup.js +718 -0
- package/dist/src/setup.js.map +1 -0
- package/dist/src/token.d.ts +22 -0
- package/dist/src/token.d.ts.map +1 -0
- package/dist/src/token.js +75 -0
- package/dist/src/token.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,84 @@
|
|
|
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
|
+
* Calculate cosine similarity between two vectors
|
|
34
|
+
* @param vecA First vector
|
|
35
|
+
* @param vecB Second vector
|
|
36
|
+
* @returns Cosine similarity score
|
|
37
|
+
*/
|
|
38
|
+
cosineSimilarity(vecA: number[], vecB: number[]): number;
|
|
39
|
+
/**
|
|
40
|
+
* Clear the embedding cache
|
|
41
|
+
*/
|
|
42
|
+
clearEmbeddingCache(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Clear both in-memory and persistent caches
|
|
45
|
+
*/
|
|
46
|
+
clearAllCaches(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Get cached embedding for a text without generating a new one
|
|
49
|
+
* @param text Text to check in cache
|
|
50
|
+
* @returns Cached embedding or undefined if not in cache
|
|
51
|
+
*/
|
|
52
|
+
getCachedEmbedding(text: string): number[] | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Get cache size
|
|
55
|
+
* @returns Number of cached embeddings
|
|
56
|
+
*/
|
|
57
|
+
getCacheSize(): number;
|
|
58
|
+
/**
|
|
59
|
+
* Get total cache size including persistent cache
|
|
60
|
+
*/
|
|
61
|
+
getTotalCacheSize(): number;
|
|
62
|
+
/**
|
|
63
|
+
* Get cache statistics
|
|
64
|
+
*/
|
|
65
|
+
getCacheStats(): {
|
|
66
|
+
memorySize: number;
|
|
67
|
+
persistentSize: number;
|
|
68
|
+
totalSize: number;
|
|
69
|
+
cacheEnabled: boolean;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Load persistent cache from file
|
|
73
|
+
*/
|
|
74
|
+
private loadPersistentCache;
|
|
75
|
+
/**
|
|
76
|
+
* Save persistent cache to file
|
|
77
|
+
*/
|
|
78
|
+
private savePersistentCache;
|
|
79
|
+
/**
|
|
80
|
+
* Create a hash of the text content for cache validation
|
|
81
|
+
*/
|
|
82
|
+
private hashText;
|
|
83
|
+
}
|
|
84
|
+
//# 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;;;;;OAKG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM;IAkBxD;;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,300 @@
|
|
|
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, 0 API calls 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 calls 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
|
+
* Calculate cosine similarity between two vectors
|
|
168
|
+
* @param vecA First vector
|
|
169
|
+
* @param vecB Second vector
|
|
170
|
+
* @returns Cosine similarity score
|
|
171
|
+
*/
|
|
172
|
+
cosineSimilarity(vecA, vecB) {
|
|
173
|
+
if (vecA.length !== vecB.length) {
|
|
174
|
+
throw new Error('Vectors must have the same length');
|
|
175
|
+
}
|
|
176
|
+
let dotProduct = 0;
|
|
177
|
+
let normA = 0;
|
|
178
|
+
let normB = 0;
|
|
179
|
+
for (let i = 0; i < vecA.length; i++) {
|
|
180
|
+
dotProduct += vecA[i] * vecB[i];
|
|
181
|
+
normA += vecA[i] * vecA[i];
|
|
182
|
+
normB += vecB[i] * vecB[i];
|
|
183
|
+
}
|
|
184
|
+
return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Clear the embedding cache
|
|
188
|
+
*/
|
|
189
|
+
clearEmbeddingCache() {
|
|
190
|
+
this.embeddingCache.clear();
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Clear both in-memory and persistent caches
|
|
194
|
+
*/
|
|
195
|
+
clearAllCaches() {
|
|
196
|
+
this.embeddingCache.clear();
|
|
197
|
+
this.persistentCache = {};
|
|
198
|
+
if (this.persistentCachePath && fs.existsSync(this.persistentCachePath)) {
|
|
199
|
+
fs.unlinkSync(this.persistentCachePath);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Get cached embedding for a text without generating a new one
|
|
204
|
+
* @param text Text to check in cache
|
|
205
|
+
* @returns Cached embedding or undefined if not in cache
|
|
206
|
+
*/
|
|
207
|
+
getCachedEmbedding(text) {
|
|
208
|
+
// Check in-memory cache first
|
|
209
|
+
if (this.embeddingCache.has(text)) {
|
|
210
|
+
return this.embeddingCache.get(text);
|
|
211
|
+
}
|
|
212
|
+
// Check persistent cache if available
|
|
213
|
+
if (this.persistentCachePath) {
|
|
214
|
+
const hash = this.hashText(text);
|
|
215
|
+
const cached = this.persistentCache[text];
|
|
216
|
+
if (cached && cached.hash === hash) {
|
|
217
|
+
// Move to in-memory cache for faster subsequent access
|
|
218
|
+
this.embeddingCache.set(text, cached.embedding);
|
|
219
|
+
return cached.embedding;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return undefined;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Get cache size
|
|
226
|
+
* @returns Number of cached embeddings
|
|
227
|
+
*/
|
|
228
|
+
getCacheSize() {
|
|
229
|
+
return this.embeddingCache.size;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Get total cache size including persistent cache
|
|
233
|
+
*/
|
|
234
|
+
getTotalCacheSize() {
|
|
235
|
+
return this.embeddingCache.size + Object.keys(this.persistentCache).length;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Get cache statistics
|
|
239
|
+
*/
|
|
240
|
+
getCacheStats() {
|
|
241
|
+
return {
|
|
242
|
+
memorySize: this.embeddingCache.size,
|
|
243
|
+
persistentSize: Object.keys(this.persistentCache).length,
|
|
244
|
+
totalSize: this.getTotalCacheSize(),
|
|
245
|
+
cacheEnabled: this.persistentCachePath !== undefined
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Load persistent cache from file
|
|
250
|
+
*/
|
|
251
|
+
loadPersistentCache() {
|
|
252
|
+
if (!this.persistentCachePath)
|
|
253
|
+
return;
|
|
254
|
+
try {
|
|
255
|
+
// Ensure cache directory exists
|
|
256
|
+
const cacheDir = path.dirname(this.persistentCachePath);
|
|
257
|
+
if (!fs.existsSync(cacheDir)) {
|
|
258
|
+
fs.mkdirSync(cacheDir, { recursive: true });
|
|
259
|
+
}
|
|
260
|
+
if (fs.existsSync(this.persistentCachePath)) {
|
|
261
|
+
const data = fs.readFileSync(this.persistentCachePath, 'utf8');
|
|
262
|
+
this.persistentCache = JSON.parse(data);
|
|
263
|
+
if (this.verbose || this.debug) {
|
|
264
|
+
console.log(`✓ Loaded ${Object.keys(this.persistentCache).length} cached embeddings from ${this.persistentCachePath}`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
console.warn(`Failed to load persistent cache: ${error}`);
|
|
270
|
+
this.persistentCache = {};
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Save persistent cache to file
|
|
275
|
+
*/
|
|
276
|
+
savePersistentCache() {
|
|
277
|
+
if (!this.persistentCachePath)
|
|
278
|
+
return;
|
|
279
|
+
try {
|
|
280
|
+
const cacheDir = path.dirname(this.persistentCachePath);
|
|
281
|
+
if (!fs.existsSync(cacheDir)) {
|
|
282
|
+
fs.mkdirSync(cacheDir, { recursive: true });
|
|
283
|
+
}
|
|
284
|
+
fs.writeFileSync(this.persistentCachePath, JSON.stringify(this.persistentCache, null, 2));
|
|
285
|
+
if (this.verbose || this.debug) {
|
|
286
|
+
console.log(`✓ Saved ${Object.keys(this.persistentCache).length} cached embeddings to ${this.persistentCachePath}`);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
console.warn(`Failed to save persistent cache: ${error}`);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Create a hash of the text content for cache validation
|
|
295
|
+
*/
|
|
296
|
+
hashText(text) {
|
|
297
|
+
return crypto.createHash('sha256').update(text).digest('hex');
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
//# 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,24 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
declare class SDLMCPServer {
|
|
3
|
+
private server;
|
|
4
|
+
private db;
|
|
5
|
+
private initialized;
|
|
6
|
+
private embeddingService;
|
|
7
|
+
private verbose;
|
|
8
|
+
private debug;
|
|
9
|
+
private logger;
|
|
10
|
+
constructor(options?: {
|
|
11
|
+
verbose?: boolean;
|
|
12
|
+
debug?: boolean;
|
|
13
|
+
overrideLogging?: boolean;
|
|
14
|
+
});
|
|
15
|
+
private initialize;
|
|
16
|
+
private setupToolHandlers;
|
|
17
|
+
private performSearch;
|
|
18
|
+
private formatSearchResults;
|
|
19
|
+
private log;
|
|
20
|
+
run(): Promise<void>;
|
|
21
|
+
close(): void;
|
|
22
|
+
}
|
|
23
|
+
export { SDLMCPServer };
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/index.ts"],"names":[],"mappings":";AAwLA,cAAM,YAAY;IAChB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,EAAE,CAAkB;IAC5B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,MAAM,CAAsB;gBAExB,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE;YA0BzE,UAAU;IAWxB,OAAO,CAAC,iBAAiB;YA6DX,aAAa;IAqC3B,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,GAAG;IAML,GAAG;IAUT,KAAK;CAMN;AA2CD,OAAO,EAAE,YAAY,EAAE,CAAC"}
|