@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 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/index.ts"],"names":[],"mappings":";AAUA,OAAO,EAAgB,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAgI1D,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;IACpC,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,gBAAgB,CAAa;gBAEzB,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE;YA0BzE,UAAU;IAYxB,OAAO,CAAC,iBAAiB;YA6DX,aAAa;IA6B3B,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,GAAG;IAML,GAAG;IAUT,OAAO,CAAC,mBAAmB;IAiBrB,OAAO,CAAC,IAAI,GAAE,MAAa;IA6F3B,aAAa,CAAC,SAAS,GAAE,MAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAiC9D,KAAK;CAWN;AAiDD,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,427 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Copyright (c) Siemens 2016 - 2025
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
7
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
8
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
9
+ import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
10
+ import { createServer } from 'http';
11
+ import * as path from 'path';
12
+ import { fileURLToPath } from 'url';
13
+ import { EmbeddingService } from './embeddings.js';
14
+ import { DatabaseHandler } from './db-handler.js';
15
+ import { loadConfig } from './config.js';
16
+ import { ObservabilityLogger } from './logger.js';
17
+ const __filename = fileURLToPath(import.meta.url);
18
+ const __dirname = path.dirname(__filename);
19
+ const config = loadConfig();
20
+ const buildSearchConfigs = () => {
21
+ const configs = {
22
+ [config.searchToolName]: {
23
+ type: 'documentation',
24
+ name: config.searchToolName,
25
+ description: `${config.documentedName} Documentation Search`,
26
+ instruction: config.texts.DOC_SEARCH_INSTRUCTION,
27
+ noResultsMessage: (query) => config.texts.DOC_NO_RESULTS.replace('{query}', query),
28
+ successMessage: (query, count) => config.texts.DOC_SUCCESS_HEADER.replace('{query}', query).replace('{count}', count.toString()),
29
+ resultNote: config.texts.DOC_RESULT_NOTE
30
+ }
31
+ };
32
+ // Only add icon search if enabled in config
33
+ if (config.iconSearch) {
34
+ if (!config.iconName) {
35
+ throw new Error('Icon search is enabled but iconName is not set in config');
36
+ }
37
+ if (!config.iconSearchToolName) {
38
+ throw new Error('Icon search is enabled but iconSearchToolName is not set in config');
39
+ }
40
+ const iconInstruction = config.texts.ICON_SEARCH_INSTRUCTION;
41
+ const iconToolDescription = config.texts.ICON_SEARCH_TOOL_DESCRIPTION;
42
+ const iconQueryDescription = config.texts.ICON_SEARCH_QUERY_DESCRIPTION;
43
+ const iconNoResults = config.texts.ICON_NO_RESULTS;
44
+ const iconSuccessHeader = config.texts.ICON_SUCCESS_HEADER;
45
+ const iconResultNote = config.texts.ICON_RESULT_NOTE;
46
+ if (!iconInstruction ||
47
+ !iconToolDescription ||
48
+ !iconQueryDescription ||
49
+ !iconNoResults ||
50
+ !iconSuccessHeader ||
51
+ !iconResultNote) {
52
+ throw new Error('Icon search is enabled but required icon text fields are missing in config');
53
+ }
54
+ configs[config.iconSearchToolName] = {
55
+ type: 'icon',
56
+ name: config.iconSearchToolName,
57
+ description: `${config.documentedName} Icon Search`,
58
+ instruction: iconInstruction,
59
+ noResultsMessage: (query) => iconNoResults.replace('{query}', query),
60
+ successMessage: (query, count) => iconSuccessHeader.replace('{query}', query).replace('{count}', count.toString()),
61
+ resultNote: iconResultNote
62
+ };
63
+ }
64
+ return configs;
65
+ };
66
+ const searchConfigs = buildSearchConfigs();
67
+ const createToolDefinition = (searchConfig) => ({
68
+ name: searchConfig.name,
69
+ description: `
70
+ ${searchConfig.description}
71
+
72
+ ${searchConfig.instruction}
73
+
74
+ ${searchConfig.type === 'documentation' ? config.texts.DOC_SEARCH_TOOL_DESCRIPTION : config.texts.ICON_SEARCH_TOOL_DESCRIPTION}
75
+ `.trim(),
76
+ inputSchema: {
77
+ type: 'object',
78
+ properties: {
79
+ query: {
80
+ type: 'string',
81
+ description: searchConfig.type === 'documentation'
82
+ ? config.texts.DOC_SEARCH_QUERY_DESCRIPTION
83
+ : config.texts.ICON_SEARCH_QUERY_DESCRIPTION
84
+ },
85
+ limit: {
86
+ type: 'number',
87
+ description: `Maximum number of ${searchConfig.type === 'documentation' ? 'documentation' : 'icon'} results to return (default: 5, max: 20)`,
88
+ default: 5,
89
+ minimum: 1,
90
+ maximum: 20
91
+ }
92
+ },
93
+ required: ['query']
94
+ }
95
+ });
96
+ const toolDefinitions = Object.values(searchConfigs).map(createToolDefinition);
97
+ const BODY_LIMIT_BYTES = 1 * 1024 * 1024; // 1 MB
98
+ class SDLMCPServer {
99
+ server;
100
+ db;
101
+ initialized = false;
102
+ embeddingService;
103
+ verbose = false;
104
+ debug = false;
105
+ logger;
106
+ httpServer;
107
+ inflightRequests = 0;
108
+ constructor(options) {
109
+ this.verbose = options?.verbose || false;
110
+ this.debug = options?.debug || process.env.SDL_MCP_DEBUG_LOG === 'true';
111
+ this.embeddingService = new EmbeddingService({ verbose: this.verbose, debug: this.debug });
112
+ this.logger = new ObservabilityLogger(this.debug, options?.overrideLogging);
113
+ this.server = new Server({
114
+ name: config.name,
115
+ version: '1.0.0',
116
+ description: config.description
117
+ }, {
118
+ capabilities: {
119
+ tools: Object.fromEntries(toolDefinitions.map(tool => [tool.name.replace('-', '_'), tool]))
120
+ }
121
+ });
122
+ // Initialize database handler
123
+ const dbPath = path.join(__dirname, '../../database/vectors.db');
124
+ this.db = new DatabaseHandler(dbPath, { verbose: this.verbose || this.debug });
125
+ this.initialize();
126
+ }
127
+ async initialize() {
128
+ try {
129
+ await this.db.initialize();
130
+ this.setupToolHandlers(this.server);
131
+ this.initialized = true;
132
+ this.log(`${config.displayName} MCP Server initialized successfully`);
133
+ }
134
+ catch (error) {
135
+ this.log('Failed to initialize SDLMCPServer:', error);
136
+ throw error;
137
+ }
138
+ }
139
+ setupToolHandlers(server) {
140
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
141
+ tools: toolDefinitions
142
+ }));
143
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
144
+ const { name, arguments: args } = request.params;
145
+ const searchConfig = searchConfigs[name];
146
+ if (!searchConfig) {
147
+ throw new Error(`Unknown tool: ${name}`);
148
+ }
149
+ const { query, limit = 5 } = args;
150
+ try {
151
+ const results = await this.performSearch(searchConfig, query, Math.min(limit, 20));
152
+ const formattedResults = this.formatSearchResults(searchConfig, query, results);
153
+ this.logger.logRetrieval(name, query, limit !== 5 ? { limit } : undefined, {
154
+ resultCount: results.length,
155
+ success: true
156
+ }, formattedResults);
157
+ return { content: [{ type: 'text', text: formattedResults }] };
158
+ }
159
+ catch (error) {
160
+ this.log(`Search error: ${error}`);
161
+ this.logger.logRetrieval(name, query, limit !== 5 ? { limit } : undefined, {
162
+ resultCount: 0,
163
+ success: false,
164
+ error: error instanceof Error ? error.message : 'Unknown error'
165
+ });
166
+ return {
167
+ content: [
168
+ {
169
+ type: 'text',
170
+ text: `
171
+ Search Error
172
+
173
+ Failed to search ${config.documentedName} documentation: ${error instanceof Error ? error.message : 'Unknown error'}
174
+
175
+ Possible Issues:
176
+ • API authentication problems
177
+ • Database connection issues
178
+ • Network connectivity problems
179
+
180
+ Try Again: The issue might be temporary. Please retry your search.`.trim()
181
+ }
182
+ ]
183
+ };
184
+ }
185
+ });
186
+ }
187
+ async performSearch(config, query, limit) {
188
+ if (!this.initialized) {
189
+ throw new Error('Server not yet initialized');
190
+ }
191
+ this.log('Generating query embedding...');
192
+ const queryEmbedding = await this.embeddingService.getEmbedding(query);
193
+ this.log('Performing vector search...');
194
+ const documents = await this.db.vectorSearch(queryEmbedding, limit, config.type);
195
+ this.log(`Found ${documents.length} results`);
196
+ const results = documents.map(doc => ({
197
+ id: doc.id,
198
+ content: doc.content,
199
+ metadata: {
200
+ chunk_index: doc.chunk_index,
201
+ header_path: doc.header_path || undefined,
202
+ header_level: doc.header_level || undefined,
203
+ category: doc.category || undefined,
204
+ terms: doc.terms || undefined
205
+ },
206
+ similarity: 1.0 // LanceDB returns results sorted by similarity
207
+ }));
208
+ this.log(`Returning ${results.length} results`);
209
+ return results;
210
+ }
211
+ formatSearchResults(config, query, results) {
212
+ if (results.length === 0) {
213
+ return config.noResultsMessage(query);
214
+ }
215
+ let response = config.successMessage(query, results.length);
216
+ results.forEach((result, index) => {
217
+ const percentage = (result.similarity * 100).toFixed(1);
218
+ response += `## Result ${index + 1}\n`;
219
+ response += `**Relevance:** ${percentage}% match\n`;
220
+ if (result.metadata.header_path) {
221
+ response += `**Section:** \`${result.metadata.header_path}\`\n`;
222
+ }
223
+ response += `**Chunk:** ${result.metadata.chunk_index}\n\n`;
224
+ response += `${result.content}\n\n`;
225
+ response += `---\n\n`;
226
+ });
227
+ response += config.resultNote;
228
+ return response;
229
+ }
230
+ log(...args) {
231
+ if (this.verbose || this.debug) {
232
+ console.error(...args);
233
+ }
234
+ }
235
+ async run() {
236
+ while (!this.initialized) {
237
+ await new Promise(resolve => setTimeout(resolve, 100));
238
+ }
239
+ const transport = new StdioServerTransport();
240
+ await this.server.connect(transport);
241
+ this.log(`${config.displayName} MCP Server running on stdio`);
242
+ }
243
+ createHttpMcpServer() {
244
+ const server = new Server({
245
+ name: config.name,
246
+ version: '1.0.0',
247
+ description: config.description
248
+ }, {
249
+ capabilities: {
250
+ tools: Object.fromEntries(toolDefinitions.map(tool => [tool.name.replace('-', '_'), tool]))
251
+ }
252
+ });
253
+ this.setupToolHandlers(server);
254
+ return server;
255
+ }
256
+ async runHttp(port = 3000) {
257
+ while (!this.initialized) {
258
+ await new Promise(resolve => setTimeout(resolve, 100));
259
+ }
260
+ this.httpServer = createServer((req, res) => {
261
+ if (req.method === 'GET' && req.url === '/health') {
262
+ res.writeHead(200, { 'Content-Type': 'application/json' });
263
+ res.end(JSON.stringify({ status: 'ok' }));
264
+ return;
265
+ }
266
+ if (req.url !== '/mcp') {
267
+ res.writeHead(404).end();
268
+ return;
269
+ }
270
+ this.inflightRequests++;
271
+ const done = () => {
272
+ this.inflightRequests = Math.max(0, this.inflightRequests - 1);
273
+ };
274
+ if (req.method === 'POST') {
275
+ const chunks = [];
276
+ let bodySize = 0;
277
+ req.on('data', (chunk) => {
278
+ bodySize += chunk.length;
279
+ if (bodySize > BODY_LIMIT_BYTES) {
280
+ res.writeHead(413, { 'Content-Type': 'application/json' });
281
+ res.end(JSON.stringify({ error: 'Request body too large' }));
282
+ done();
283
+ req.destroy();
284
+ return;
285
+ }
286
+ chunks.push(chunk);
287
+ });
288
+ req.on('end', () => {
289
+ let parsedBody;
290
+ try {
291
+ parsedBody = JSON.parse(Buffer.concat(chunks).toString());
292
+ }
293
+ catch {
294
+ // let transport handle malformed body
295
+ }
296
+ // The SDK's stateless transport cannot be reused across requests;
297
+ // create a fresh transport + server per request as the SDK requires.
298
+ const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined });
299
+ const reqServer = this.createHttpMcpServer();
300
+ reqServer
301
+ .connect(transport)
302
+ .then(() => transport.handleRequest(req, res, parsedBody))
303
+ .then(done)
304
+ .catch(err => {
305
+ done();
306
+ this.log('HTTP request error:', err);
307
+ if (!res.headersSent) {
308
+ res.writeHead(500).end();
309
+ }
310
+ });
311
+ });
312
+ }
313
+ else if (req.method === 'GET' || req.method === 'DELETE') {
314
+ const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined });
315
+ const reqServer = this.createHttpMcpServer();
316
+ reqServer
317
+ .connect(transport)
318
+ .then(() => transport.handleRequest(req, res))
319
+ .then(done)
320
+ .catch(err => {
321
+ done();
322
+ this.log('HTTP request error:', err);
323
+ if (!res.headersSent) {
324
+ res.writeHead(500).end();
325
+ }
326
+ });
327
+ }
328
+ else {
329
+ done();
330
+ res.writeHead(405).end();
331
+ }
332
+ });
333
+ await new Promise((resolve, reject) => {
334
+ this.httpServer?.once('error', reject);
335
+ this.httpServer?.listen(port, () => {
336
+ this.log(`${config.displayName} MCP Server running on HTTP port ${port}`);
337
+ console.error(`${config.displayName} MCP Server listening on http://localhost:${port}/mcp`);
338
+ resolve();
339
+ });
340
+ });
341
+ return this.httpServer;
342
+ }
343
+ async drainAndClose(timeoutMs = 10_000) {
344
+ this.log(`Shutting down ${config.displayName} MCP Server...`);
345
+ this.embeddingService.clearEmbeddingCache();
346
+ this.db.close();
347
+ if (!this.httpServer) {
348
+ this.log('Server shutdown complete');
349
+ return;
350
+ }
351
+ const httpServer = this.httpServer;
352
+ this.httpServer = undefined;
353
+ await new Promise(resolve => {
354
+ // Stop accepting new connections
355
+ httpServer.close(() => resolve());
356
+ const deadline = Date.now() + timeoutMs;
357
+ const checkDrained = () => {
358
+ if (this.inflightRequests <= 0 || Date.now() >= deadline) {
359
+ httpServer.closeAllConnections();
360
+ return;
361
+ }
362
+ setTimeout(checkDrained, 100);
363
+ };
364
+ checkDrained();
365
+ });
366
+ this.log('Server shutdown complete');
367
+ }
368
+ close() {
369
+ this.log(`Shutting down ${config.displayName} MCP Server...`);
370
+ this.embeddingService.clearEmbeddingCache();
371
+ this.db.close();
372
+ if (this.httpServer) {
373
+ this.httpServer.close();
374
+ this.httpServer.closeAllConnections();
375
+ this.httpServer = undefined;
376
+ }
377
+ this.log('Server shutdown complete');
378
+ }
379
+ }
380
+ // Main execution logic
381
+ if (import.meta.url === `file://${process.argv[1]}`) {
382
+ const args = process.argv.slice(2);
383
+ const verbose = args.includes('--verbose');
384
+ const debug = args.includes('--debug');
385
+ const log = args.includes('--log');
386
+ const test = args.includes('--test');
387
+ if (verbose)
388
+ console.error('Verbose mode enabled');
389
+ if (debug)
390
+ console.error('Debug mode enabled');
391
+ const server = new SDLMCPServer({ verbose, debug, overrideLogging: log });
392
+ if (test) {
393
+ if (verbose || debug)
394
+ console.log('Test mode - validating server setup...');
395
+ setTimeout(() => {
396
+ if (verbose || debug)
397
+ console.error('Server validation successful');
398
+ server.close();
399
+ process.exit(0);
400
+ }, 3000);
401
+ }
402
+ else {
403
+ const portArg = args.find(a => a.startsWith('--port='))?.split('=')[1] ?? args[args.indexOf('--port') + 1];
404
+ const port = portArg ? parseInt(portArg, 10) : undefined;
405
+ const startServer = port !== undefined ? server.runHttp(port) : server.run();
406
+ startServer.catch(error => {
407
+ if (verbose || debug)
408
+ console.error('Server startup failed:', error);
409
+ process.exit(1);
410
+ });
411
+ // Graceful shutdown handlers
412
+ const shutdown = (signal) => () => {
413
+ if (verbose || debug) {
414
+ console.error('');
415
+ console.error(`Received ${signal} signal...`);
416
+ }
417
+ server
418
+ .drainAndClose()
419
+ .then(() => process.exit(0))
420
+ .catch(() => process.exit(1));
421
+ };
422
+ process.on('SIGINT', shutdown('shutdown'));
423
+ process.on('SIGTERM', shutdown('termination'));
424
+ }
425
+ }
426
+ export { SDLMCPServer };
427
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const setPassword: (service: string, account: string, password: string) => Promise<void>;
2
+ export declare const getPassword: (service: string, account: string) => Promise<string | null>;
3
+ export declare const deletePassword: (service: string, account: string) => Promise<boolean>;
4
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/mcp/keys.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,WAAW,GAAU,SAAS,MAAM,EAAE,SAAS,MAAM,EAAE,UAAU,MAAM,kBAEnF,CAAC;AAEF,eAAO,MAAM,WAAW,GAAU,SAAS,MAAM,EAAE,SAAS,MAAM,2BAEjE,CAAC;AAEF,eAAO,MAAM,cAAc,GAAU,SAAS,MAAM,EAAE,SAAS,MAAM,qBAEpE,CAAC"}
@@ -0,0 +1,24 @@
1
+ let keytar;
2
+ try {
3
+ keytar = (await import('keytar')).default;
4
+ }
5
+ catch {
6
+ // Fallback for environments where keytar is not available (e.g., CI)
7
+ keytar = {
8
+ setPassword: async () => {
9
+ throw new Error('Keytar not available - credential storage disabled');
10
+ },
11
+ getPassword: async () => null,
12
+ deletePassword: async () => true
13
+ };
14
+ }
15
+ export const setPassword = async (service, account, password) => {
16
+ await keytar.setPassword(service, account, password);
17
+ };
18
+ export const getPassword = async (service, account) => {
19
+ return await keytar.getPassword(service, account);
20
+ };
21
+ export const deletePassword = async (service, account) => {
22
+ return await keytar.deletePassword(service, account);
23
+ };
24
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/mcp/keys.ts"],"names":[],"mappings":"AAUA,IAAI,MAAuB,CAAC;AAE5B,IAAI,CAAC;IACH,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AAC5C,CAAC;AAAC,MAAM,CAAC;IACP,qEAAqE;IACrE,MAAM,GAAG;QACP,WAAW,EAAE,KAAK,IAAI,EAAE;YACtB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;QAC7B,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,OAAe,EAAE,OAAe,EAAE,QAAgB,EAAE,EAAE;IACtF,MAAM,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,OAAe,EAAE,OAAe,EAAE,EAAE;IACpE,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,OAAe,EAAE,OAAe,EAAE,EAAE;IACvE,OAAO,MAAM,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ export declare class ObservabilityLogger {
2
+ private logDir;
3
+ private sessionLogPath;
4
+ private enabled;
5
+ private debug;
6
+ constructor(hasDebugFlag?: boolean, override?: boolean);
7
+ private generateSessionFileName;
8
+ private initializeLogFile;
9
+ logRetrieval(toolName: string, query: string, params: Record<string, unknown> | undefined, response: {
10
+ resultCount: number;
11
+ success: boolean;
12
+ error?: string;
13
+ }, results?: string): Promise<void>;
14
+ getLogDir(): string;
15
+ getSessionLogPath(): string;
16
+ isEnabled(): boolean;
17
+ static getLogDir(): string;
18
+ static listSessions(): string[];
19
+ static getSessionPath(fileName: string): string;
20
+ static readSessionLog(fileName: string): string;
21
+ static parseSessionFileName(fileName: string): Date | null;
22
+ static formatSessionDate(fileName: string): string;
23
+ }
24
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/mcp/logger.ts"],"names":[],"mappings":"AAWA,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,KAAK,CAAU;gBAEX,YAAY,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO;IAgCtD,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,iBAAiB;IAmBnB,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC3C,QAAQ,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EACnE,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAuChB,SAAS,IAAI,MAAM;IAInB,iBAAiB,IAAI,MAAM;IAI3B,SAAS,IAAI,OAAO;IAIpB,MAAM,CAAC,SAAS,IAAI,MAAM;IAa1B,MAAM,CAAC,YAAY,IAAI,MAAM,EAAE;IAkB/B,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAI/C,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAS/C,MAAM,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAe1D,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CA0BnD"}