@codesherlock/codesherlock-alpha-mcp-server 0.0.1

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 (71) hide show
  1. package/.env +9 -0
  2. package/README.md +185 -0
  3. package/build/handlers/analyzeCommitHandler.d.ts +55 -0
  4. package/build/handlers/analyzeCommitHandler.d.ts.map +1 -0
  5. package/build/handlers/analyzeCommitHandler.js +345 -0
  6. package/build/handlers/analyzeCommitHandler.js.map +1 -0
  7. package/build/handlers/events.d.ts +7 -0
  8. package/build/handlers/events.d.ts.map +1 -0
  9. package/build/handlers/events.js +15 -0
  10. package/build/handlers/events.js.map +1 -0
  11. package/build/handlers/resources.d.ts +10 -0
  12. package/build/handlers/resources.d.ts.map +1 -0
  13. package/build/handlers/resources.js +14 -0
  14. package/build/handlers/resources.js.map +1 -0
  15. package/build/handlers/tools.d.ts +6 -0
  16. package/build/handlers/tools.d.ts.map +1 -0
  17. package/build/handlers/tools.js +24 -0
  18. package/build/handlers/tools.js.map +1 -0
  19. package/build/index.d.ts +3 -0
  20. package/build/index.d.ts.map +1 -0
  21. package/build/index.js +82 -0
  22. package/build/index.js.map +1 -0
  23. package/build/schemas/toolSchemas.d.ts +40 -0
  24. package/build/schemas/toolSchemas.d.ts.map +1 -0
  25. package/build/schemas/toolSchemas.js +42 -0
  26. package/build/schemas/toolSchemas.js.map +1 -0
  27. package/build/services/backendApiService.d.ts +81 -0
  28. package/build/services/backendApiService.d.ts.map +1 -0
  29. package/build/services/backendApiService.js +211 -0
  30. package/build/services/backendApiService.js.map +1 -0
  31. package/build/services/commitReviewService.d.ts +61 -0
  32. package/build/services/commitReviewService.d.ts.map +1 -0
  33. package/build/services/commitReviewService.js +306 -0
  34. package/build/services/commitReviewService.js.map +1 -0
  35. package/build/services/gitService.d.ts +120 -0
  36. package/build/services/gitService.d.ts.map +1 -0
  37. package/build/services/gitService.js +360 -0
  38. package/build/services/gitService.js.map +1 -0
  39. package/build/services/loggingService.d.ts +64 -0
  40. package/build/services/loggingService.d.ts.map +1 -0
  41. package/build/services/loggingService.js +185 -0
  42. package/build/services/loggingService.js.map +1 -0
  43. package/build/services/zipService.d.ts +9 -0
  44. package/build/services/zipService.d.ts.map +1 -0
  45. package/build/services/zipService.js +47 -0
  46. package/build/services/zipService.js.map +1 -0
  47. package/build/tests/backendApiService.test.d.ts +2 -0
  48. package/build/tests/backendApiService.test.d.ts.map +1 -0
  49. package/build/tests/backendApiService.test.js +109 -0
  50. package/build/tests/backendApiService.test.js.map +1 -0
  51. package/build/tests/commitReviewService.test.d.ts +2 -0
  52. package/build/tests/commitReviewService.test.d.ts.map +1 -0
  53. package/build/tests/commitReviewService.test.js +118 -0
  54. package/build/tests/commitReviewService.test.js.map +1 -0
  55. package/build/tests/loggingService.test.d.ts +2 -0
  56. package/build/tests/loggingService.test.d.ts.map +1 -0
  57. package/build/tests/loggingService.test.js +156 -0
  58. package/build/tests/loggingService.test.js.map +1 -0
  59. package/build/tests/setup.test.d.ts +2 -0
  60. package/build/tests/setup.test.d.ts.map +1 -0
  61. package/build/tests/setup.test.js +7 -0
  62. package/build/tests/setup.test.js.map +1 -0
  63. package/build/utils/analysisFormatter.d.ts +40 -0
  64. package/build/utils/analysisFormatter.d.ts.map +1 -0
  65. package/build/utils/analysisFormatter.js +97 -0
  66. package/build/utils/analysisFormatter.js.map +1 -0
  67. package/build/utils/errorExtractor.d.ts +36 -0
  68. package/build/utils/errorExtractor.d.ts.map +1 -0
  69. package/build/utils/errorExtractor.js +178 -0
  70. package/build/utils/errorExtractor.js.map +1 -0
  71. package/package.json +53 -0
@@ -0,0 +1,360 @@
1
+ import { simpleGit } from 'simple-git';
2
+ import { logger } from './loggingService.js';
3
+ /**
4
+ * Git Service
5
+ * Handles all Git-related operations like getting diffs, file content, etc.
6
+ */
7
+ export class GitService {
8
+ getGitInstance(repoPath) {
9
+ return simpleGit(repoPath);
10
+ }
11
+ /**
12
+ * Get diff for a specific commit or PR
13
+ * @param repoPath - Path to the git repository
14
+ * @param commitHash - Commit hash or PR reference
15
+ * @returns Git diff content
16
+ */
17
+ async getDiff(repoPath, commitHash) {
18
+ try {
19
+ const git = this.getGitInstance(repoPath);
20
+ // If commitHash is empty or "HEAD", get unstaged changes
21
+ if (!commitHash || commitHash === 'HEAD') {
22
+ logger.logInfo('Fetching diff for HEAD (unstaged changes)', { repoPath });
23
+ return await git.diff();
24
+ }
25
+ // If commitHash contains '..' it's a range comparison
26
+ if (commitHash.includes('..')) {
27
+ logger.logInfo(`Fetching diff for range: ${commitHash}`, { repoPath });
28
+ return await git.diff([commitHash]);
29
+ }
30
+ // Otherwise, get diff for specific commit (comparing with parent)
31
+ logger.logInfo(`Fetching diff for commit: ${commitHash}`, { repoPath });
32
+ return await git.show([commitHash]);
33
+ }
34
+ catch (error) {
35
+ logger.logError('Error fetching diff', error, { repoPath, commitHash });
36
+ throw error;
37
+ }
38
+ }
39
+ /**
40
+ * Get diff for uncommitted changes
41
+ * @param repoPath - Path to the git repository
42
+ * @returns Git diff content for uncommitted changes
43
+ */
44
+ async getUncommittedDiff(repoPath) {
45
+ // TODO: Implement git diff for uncommitted changes
46
+ throw new Error("Not implemented");
47
+ }
48
+ /**
49
+ * Get file content from repository
50
+ * @param repoPath - Path to the git repository
51
+ * @param filePath - Path to the file within the repo
52
+ * @param ref - Git reference (branch, tag, commit hash)
53
+ * @returns File content as string
54
+ */
55
+ async getFileContent(repoPath, filePath, ref) {
56
+ try {
57
+ const git = this.getGitInstance(repoPath);
58
+ // If no ref is provided, get current working tree version
59
+ if (!ref) {
60
+ const { readFileSync } = await import('fs');
61
+ const { join } = await import('path');
62
+ return readFileSync(join(repoPath, filePath), 'utf-8');
63
+ }
64
+ // Get file content from specific commit/branch/tag
65
+ return await git.show([`${ref}:${filePath}`]);
66
+ }
67
+ catch (error) {
68
+ logger.logError('Error fetching file content', error, { repoPath, filePath, ref: ref || 'HEAD' });
69
+ throw error;
70
+ }
71
+ }
72
+ /**
73
+ * Get list of changed files in a commit or PR
74
+ * @param repoPath - Path to the git repository
75
+ * @param commitHash - Commit hash or PR reference
76
+ * @returns Array of changed file paths
77
+ */
78
+ async getChangedFiles(repoPath, commitHash) {
79
+ try {
80
+ const git = this.getGitInstance(repoPath);
81
+ // If commitHash is empty, get unstaged and staged files
82
+ if (!commitHash) {
83
+ const status = await git.status();
84
+ return [
85
+ ...status.modified,
86
+ ...status.created,
87
+ ...status.deleted,
88
+ ...status.renamed.map(r => r.to)
89
+ ];
90
+ }
91
+ // Get files changed in specific commit
92
+ const diffSummary = await git.diffSummary([`${commitHash}^`, commitHash]);
93
+ return diffSummary.files.map(file => file.file);
94
+ }
95
+ catch (error) {
96
+ logger.logError('Error fetching changed files', error, { repoPath, commitHash });
97
+ throw error;
98
+ }
99
+ }
100
+ /**
101
+ * Get commit information
102
+ * @param repoPath - Path to the git repository
103
+ * @param commitHash - Commit hash
104
+ * @returns Commit metadata
105
+ */
106
+ async getCommitInfo(repoPath, commitHash) {
107
+ try {
108
+ const git = this.getGitInstance(repoPath);
109
+ // Get commit log
110
+ const log = await git.log([commitHash, '-1']);
111
+ if (!log.latest) {
112
+ throw new Error(`Commit ${commitHash} not found`);
113
+ }
114
+ const commit = log.latest;
115
+ // Get changed files for this commit
116
+ const changedFiles = await this.getChangedFiles(repoPath, commitHash);
117
+ return {
118
+ hash: commit.hash,
119
+ author: commit.author_name,
120
+ email: commit.author_email,
121
+ date: commit.date,
122
+ message: commit.message,
123
+ files: changedFiles
124
+ };
125
+ }
126
+ catch (error) {
127
+ logger.logError('Error fetching commit info', error, { repoPath, commitHash });
128
+ throw error;
129
+ }
130
+ }
131
+ /**
132
+ * Get repository status
133
+ * @param repoPath - Path to the git repository
134
+ * @returns Repository status information
135
+ */
136
+ async getRepoStatus(repoPath) {
137
+ try {
138
+ const git = this.getGitInstance(repoPath);
139
+ const status = await git.status();
140
+ return {
141
+ branch: status.current || 'HEAD',
142
+ modified: status.modified,
143
+ staged: [...status.created, ...status.staged],
144
+ untracked: status.not_added
145
+ };
146
+ }
147
+ catch (error) {
148
+ logger.logError('Error fetching repo status', error, { repoPath });
149
+ throw error;
150
+ }
151
+ }
152
+ /**
153
+ * Get the hash of the current HEAD commit.
154
+ * Falls back to a placeholder when repository has no commits.
155
+ */
156
+ async getCurrentCommitHash(repoPath) {
157
+ try {
158
+ const git = this.getGitInstance(repoPath);
159
+ const hash = await git.revparse(["HEAD"]);
160
+ return hash.trim();
161
+ }
162
+ catch (error) {
163
+ // For repositories with no commits or when HEAD is unavailable
164
+ logger.logWarning("Unable to resolve current commit hash; using placeholder", {
165
+ repoPath,
166
+ error: String(error),
167
+ });
168
+ return "UNCOMMITTED";
169
+ }
170
+ }
171
+ /**
172
+ * Get diff for a specific file
173
+ * @param repoPath - Path to the git repository
174
+ * @param filePath - Path to the file
175
+ * @param commitHash - Commit hash (optional, if null/empty uses HEAD)
176
+ * @returns Diff content
177
+ */
178
+ async getFileDiff(repoPath, filePath, commitHash) {
179
+ try {
180
+ const git = this.getGitInstance(repoPath);
181
+ if (!commitHash) {
182
+ try {
183
+ // Try to diff against HEAD (staged + unstaged)
184
+ return await git.diff(['HEAD', '--', filePath]);
185
+ }
186
+ catch (e) {
187
+ logger.logWarning(`HEAD diff failed for ${filePath}, falling back to simple diff`, { error: String(e) });
188
+ // Fallback if HEAD doesn't exist (fresh repo)
189
+ return await git.diff(['--', filePath]);
190
+ }
191
+ }
192
+ // Diff for specific commit
193
+ return await git.diff([`${commitHash}^..${commitHash}`, '--', filePath]);
194
+ }
195
+ catch (error) {
196
+ logger.logError('Error fetching file diff', error, { repoPath, filePath, commitHash: commitHash || 'HEAD' });
197
+ throw error;
198
+ }
199
+ }
200
+ /**
201
+ * Get changed files with status
202
+ * @param repoPath - Path to the git repository
203
+ * @param commitHash - Commit hash (optional)
204
+ * @returns Array of objects with path and status
205
+ */
206
+ async getChangedFilesWithStatus(repoPath, commitHash) {
207
+ try {
208
+ const git = this.getGitInstance(repoPath);
209
+ if (!commitHash) {
210
+ const status = await git.status();
211
+ return status.files.map(file => {
212
+ let statusStr = 'modified';
213
+ if (file.index === '?' || file.working_dir === '?')
214
+ statusStr = 'untracked';
215
+ else if (file.index === 'A' || file.working_dir === 'A')
216
+ statusStr = 'added';
217
+ else if (file.index === 'D' || file.working_dir === 'D')
218
+ statusStr = 'deleted';
219
+ else if (file.index === 'R' || file.working_dir === 'R')
220
+ statusStr = 'renamed';
221
+ return {
222
+ path: file.path,
223
+ status: statusStr
224
+ };
225
+ });
226
+ }
227
+ // Get files changed in specific commit with status
228
+ const result = await git.raw(['show', '--name-status', '--format=', commitHash]);
229
+ return result.trim().split('\n').filter(Boolean).map(line => {
230
+ const parts = line.split('\t');
231
+ const code = parts[0][0];
232
+ let path = parts[1];
233
+ let statusStr = 'modified';
234
+ if (code === 'A')
235
+ statusStr = 'added';
236
+ else if (code === 'D')
237
+ statusStr = 'deleted';
238
+ else if (code === 'R') {
239
+ statusStr = 'renamed';
240
+ path = parts[2] || parts[1];
241
+ }
242
+ return { status: statusStr, path };
243
+ });
244
+ }
245
+ catch (error) {
246
+ logger.logError('Error fetching changed files with status', error, { repoPath, commitHash: commitHash || 'HEAD' });
247
+ throw error;
248
+ }
249
+ }
250
+ /**
251
+ * Analyze git changes for a commit or uncommitted changes
252
+ * @param uncommitted - If true, analyze uncommitted changes. If false, analyze HEAD.
253
+ * @param directory - Path to git repository
254
+ */
255
+ async analyzeGitChanges(uncommitted, directory) {
256
+ try {
257
+ logger.logInfo(`Analyzing git changes`, { directory, uncommitted: String(uncommitted) });
258
+ const targetHash = uncommitted ? undefined : 'HEAD';
259
+ const changes = await this.getChangedFilesWithStatus(directory, targetHash);
260
+ logger.logInfo(`Found ${changes.length} changed files`);
261
+ const results = [];
262
+ for (const change of changes) {
263
+ let new_content = '';
264
+ if (change.status !== 'deleted') {
265
+ try {
266
+ new_content = await this.getFileContent(directory, change.path, targetHash);
267
+ }
268
+ catch (error) {
269
+ logger.logWarning(`Failed to read content for ${change.path}`, { error: String(error) });
270
+ }
271
+ }
272
+ let patch = '';
273
+ try {
274
+ patch = await this.getFileDiff(directory, change.path, targetHash);
275
+ }
276
+ catch (error) {
277
+ logger.logWarning(`Failed to get diff for ${change.path}`, { error: String(error) });
278
+ }
279
+ results.push({
280
+ filename: change.path,
281
+ status: change.status,
282
+ new_content,
283
+ patch
284
+ });
285
+ }
286
+ return results;
287
+ }
288
+ catch (error) {
289
+ logger.logError('Error analyzing git changes', error, { directory });
290
+ throw error;
291
+ }
292
+ }
293
+ /**
294
+ * Get file changes for a commit or uncommitted changes
295
+ * @param uncommitted - true for unstaged changes, false for specific commit
296
+ * @param commitHash - Git commit hash (required when uncommitted=false)
297
+ * @param directory - Path to the Git repository root
298
+ * @returns Array of file changes with filename, status, new_content, and patch
299
+ */
300
+ async getFileChanges(uncommitted, commitHash, directory) {
301
+ try {
302
+ // Validate parameters
303
+ if (!uncommitted && !commitHash) {
304
+ throw new Error("commitHash is required when uncommitted is false");
305
+ }
306
+ logger.logInfo(`Getting file changes`, {
307
+ directory,
308
+ uncommitted: String(uncommitted),
309
+ commitHash: commitHash || 'none'
310
+ });
311
+ // Determine the target commit/ref
312
+ const targetHash = uncommitted ? undefined : commitHash;
313
+ // Get changed files with status
314
+ const changes = await this.getChangedFilesWithStatus(directory, targetHash);
315
+ logger.logInfo(`Found ${changes.length} changed files`);
316
+ const results = [];
317
+ for (const change of changes) {
318
+ let new_content = '';
319
+ // Get new content for non-deleted files
320
+ if (change.status !== 'deleted') {
321
+ try {
322
+ new_content = await this.getFileContent(directory, change.path, targetHash);
323
+ }
324
+ catch (error) {
325
+ logger.logWarning(`Failed to read content for ${change.path}`, {
326
+ error: String(error)
327
+ });
328
+ }
329
+ }
330
+ // Get diff/patch for the file
331
+ let patch = '';
332
+ try {
333
+ patch = await this.getFileDiff(directory, change.path, targetHash);
334
+ }
335
+ catch (error) {
336
+ logger.logWarning(`Failed to get diff for ${change.path}`, {
337
+ error: String(error)
338
+ });
339
+ }
340
+ results.push({
341
+ filename: change.path,
342
+ status: change.status,
343
+ new_content,
344
+ patch
345
+ });
346
+ }
347
+ logger.logInfo(`Successfully processed ${results.length} file changes`);
348
+ return results;
349
+ }
350
+ catch (error) {
351
+ logger.logError('Error in getFileChanges', error, {
352
+ directory,
353
+ uncommitted: String(uncommitted),
354
+ commitHash: commitHash || 'none'
355
+ });
356
+ throw error;
357
+ }
358
+ }
359
+ }
360
+ //# sourceMappingURL=gitService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitService.js","sourceRoot":"","sources":["../../src/services/gitService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Simple Logging Service using Azure Application Insights
3
+ * All logs are sent to Application Insights only (no console output)
4
+ */
5
+ export declare class LoggingService {
6
+ private static instance;
7
+ private client;
8
+ private isInitialized;
9
+ private constructor();
10
+ /**
11
+ * Get singleton instance of LoggingService
12
+ */
13
+ static getInstance(): LoggingService;
14
+ /**
15
+ * Initialize Application Insights with connection string
16
+ */
17
+ initialize(connectionString?: string): Promise<void>;
18
+ /**
19
+ * Log an informational message
20
+ */
21
+ logInfo(message: string, properties?: {
22
+ [key: string]: string;
23
+ }): void;
24
+ /**
25
+ * Log a warning message
26
+ */
27
+ logWarning(message: string, properties?: {
28
+ [key: string]: string;
29
+ }): void;
30
+ /**
31
+ * Log an error message
32
+ */
33
+ logError(message: string, error?: Error, properties?: {
34
+ [key: string]: string;
35
+ }): void;
36
+ /**
37
+ * Log a custom event
38
+ */
39
+ logEvent(name: string, properties?: {
40
+ [key: string]: string;
41
+ }, measurements?: {
42
+ [key: string]: number;
43
+ }): void;
44
+ /**
45
+ * Track a metric
46
+ */
47
+ trackMetric(name: string, value: number, properties?: {
48
+ [key: string]: string;
49
+ }): void;
50
+ /**
51
+ * Track a dependency call
52
+ */
53
+ trackDependency(name: string, commandName: string, duration: number, success: boolean, dependencyType?: string): void;
54
+ /**
55
+ * Flush telemetry before shutdown
56
+ */
57
+ flush(): Promise<void>;
58
+ /**
59
+ * Check if logging is enabled
60
+ */
61
+ isEnabled(): boolean;
62
+ }
63
+ export declare const logger: LoggingService;
64
+ //# sourceMappingURL=loggingService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loggingService.d.ts","sourceRoot":"","sources":["../../src/services/loggingService.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,qBAAa,cAAc;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;IACxC,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO;IAEP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,cAAc;IAOpC;;OAEG;IACG,UAAU,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2C1D;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,IAAI;IActE;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,IAAI;IAczE;;OAEG;IACH,QAAQ,CACJ,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,KAAK,EACb,UAAU,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GACvC,IAAI;IA6BP;;OAEG;IACH,QAAQ,CACJ,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EACtC,YAAY,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GACzC,IAAI;IAUP;;OAEG;IACH,WAAW,CACP,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GACvC,IAAI;IAUP;;OAEG;IACH,eAAe,CACX,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,cAAc,CAAC,EAAE,MAAM,GACxB,IAAI;IAYP;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B;;OAEG;IACH,SAAS,IAAI,OAAO;CAGvB;AAGD,eAAO,MAAM,MAAM,gBAA+B,CAAC"}
@@ -0,0 +1,185 @@
1
+ import * as appInsights from "applicationinsights";
2
+ /**
3
+ * Simple Logging Service using Azure Application Insights
4
+ * All logs are sent to Application Insights only (no console output)
5
+ */
6
+ export class LoggingService {
7
+ static instance;
8
+ client = null;
9
+ isInitialized = false;
10
+ constructor() { }
11
+ /**
12
+ * Get singleton instance of LoggingService
13
+ */
14
+ static getInstance() {
15
+ if (!LoggingService.instance) {
16
+ LoggingService.instance = new LoggingService();
17
+ }
18
+ return LoggingService.instance;
19
+ }
20
+ /**
21
+ * Initialize Application Insights with connection string
22
+ */
23
+ async initialize(connectionString) {
24
+ const debugLog = (message) => {
25
+ process.stderr.write(`[LoggingService] ${message}\n`);
26
+ };
27
+ if (this.isInitialized) {
28
+ return;
29
+ }
30
+ if (!connectionString) {
31
+ debugLog("Application Insights connection string missing; logging disabled.");
32
+ this.isInitialized = false;
33
+ this.client = null;
34
+ return;
35
+ }
36
+ try {
37
+ const client = new appInsights.TelemetryClient(connectionString);
38
+ appInsights.setup(connectionString)
39
+ .setAutoDependencyCorrelation(false)
40
+ .setAutoCollectRequests(false)
41
+ .setAutoCollectPerformance(false, false)
42
+ .setAutoCollectExceptions(true)
43
+ .setAutoCollectDependencies(false)
44
+ .setAutoCollectConsole(false)
45
+ .setSendLiveMetrics(false);
46
+ appInsights.start();
47
+ this.client = client;
48
+ this.isInitialized = true;
49
+ debugLog("Application Insights initialized.");
50
+ }
51
+ catch (error) {
52
+ if (error instanceof Error) {
53
+ debugLog(`Application Insights init error: ${error.message}`);
54
+ }
55
+ else {
56
+ debugLog(`Application Insights init error: ${String(error)}`);
57
+ }
58
+ this.isInitialized = false;
59
+ this.client = null;
60
+ }
61
+ }
62
+ /**
63
+ * Log an informational message
64
+ */
65
+ logInfo(message, properties) {
66
+ if (this.client) {
67
+ this.client.trackTrace({
68
+ message,
69
+ severity: 1,
70
+ properties,
71
+ });
72
+ }
73
+ else {
74
+ // Fallback to stderr if Application Insights is not available (MCP uses stdout for protocol)
75
+ const propsStr = properties ? ` ${JSON.stringify(properties)}` : '';
76
+ process.stderr.write(`[INFO] ${message}${propsStr}\n`);
77
+ }
78
+ }
79
+ /**
80
+ * Log a warning message
81
+ */
82
+ logWarning(message, properties) {
83
+ if (this.client) {
84
+ this.client.trackTrace({
85
+ message,
86
+ severity: 2,
87
+ properties,
88
+ });
89
+ }
90
+ else {
91
+ // Fallback to stderr if Application Insights is not available (MCP uses stdout for protocol)
92
+ const propsStr = properties ? ` ${JSON.stringify(properties)}` : '';
93
+ process.stderr.write(`[WARN] ${message}${propsStr}\n`);
94
+ }
95
+ }
96
+ /**
97
+ * Log an error message
98
+ */
99
+ logError(message, error, properties) {
100
+ if (this.client) {
101
+ if (error) {
102
+ this.client.trackException({
103
+ exception: error,
104
+ properties: { ...properties, customMessage: message },
105
+ });
106
+ }
107
+ else {
108
+ this.client.trackTrace({
109
+ message,
110
+ severity: 3,
111
+ properties,
112
+ });
113
+ }
114
+ }
115
+ else {
116
+ // Fallback to stderr if Application Insights is not available (MCP uses stdout for protocol)
117
+ const propsStr = properties ? ` ${JSON.stringify(properties)}` : '';
118
+ if (error) {
119
+ process.stderr.write(`[ERROR] ${message}${propsStr}\n`);
120
+ process.stderr.write(`[ERROR] ${error.message}\n`);
121
+ if (error.stack) {
122
+ process.stderr.write(`[ERROR] Stack: ${error.stack}\n`);
123
+ }
124
+ }
125
+ else {
126
+ process.stderr.write(`[ERROR] ${message}${propsStr}\n`);
127
+ }
128
+ }
129
+ }
130
+ /**
131
+ * Log a custom event
132
+ */
133
+ logEvent(name, properties, measurements) {
134
+ if (this.client) {
135
+ this.client.trackEvent({
136
+ name,
137
+ properties,
138
+ measurements,
139
+ });
140
+ }
141
+ }
142
+ /**
143
+ * Track a metric
144
+ */
145
+ trackMetric(name, value, properties) {
146
+ if (this.client) {
147
+ this.client.trackMetric({
148
+ name,
149
+ value,
150
+ properties,
151
+ });
152
+ }
153
+ }
154
+ /**
155
+ * Track a dependency call
156
+ */
157
+ trackDependency(name, commandName, duration, success, dependencyType) {
158
+ if (this.client) {
159
+ this.client.trackDependency({
160
+ name,
161
+ data: commandName,
162
+ duration,
163
+ success,
164
+ dependencyTypeName: dependencyType || "HTTP",
165
+ });
166
+ }
167
+ }
168
+ /**
169
+ * Flush telemetry before shutdown
170
+ */
171
+ async flush() {
172
+ if (this.client) {
173
+ this.client.flush();
174
+ }
175
+ }
176
+ /**
177
+ * Check if logging is enabled
178
+ */
179
+ isEnabled() {
180
+ return this.isInitialized && this.client !== null;
181
+ }
182
+ }
183
+ // Export singleton instance
184
+ export const logger = LoggingService.getInstance();
185
+ //# sourceMappingURL=loggingService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loggingService.js","sourceRoot":"","sources":["../../src/services/loggingService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare class ZipService {
2
+ /**
3
+ * Zips the provided data into a file named 'files.json' within the archive.
4
+ * @param data - The data to be zipped (will be stringified to JSON)
5
+ * @returns Buffer containing the zip file
6
+ */
7
+ createZip(data: any): Promise<Buffer>;
8
+ }
9
+ //# sourceMappingURL=zipService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zipService.d.ts","sourceRoot":"","sources":["../../src/services/zipService.ts"],"names":[],"mappings":"AAIA,qBAAa,UAAU;IACnB;;;;OAIG;IACG,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;CA0C9C"}