@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.
- package/.env +9 -0
- package/README.md +185 -0
- package/build/handlers/analyzeCommitHandler.d.ts +55 -0
- package/build/handlers/analyzeCommitHandler.d.ts.map +1 -0
- package/build/handlers/analyzeCommitHandler.js +345 -0
- package/build/handlers/analyzeCommitHandler.js.map +1 -0
- package/build/handlers/events.d.ts +7 -0
- package/build/handlers/events.d.ts.map +1 -0
- package/build/handlers/events.js +15 -0
- package/build/handlers/events.js.map +1 -0
- package/build/handlers/resources.d.ts +10 -0
- package/build/handlers/resources.d.ts.map +1 -0
- package/build/handlers/resources.js +14 -0
- package/build/handlers/resources.js.map +1 -0
- package/build/handlers/tools.d.ts +6 -0
- package/build/handlers/tools.d.ts.map +1 -0
- package/build/handlers/tools.js +24 -0
- package/build/handlers/tools.js.map +1 -0
- package/build/index.d.ts +3 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +82 -0
- package/build/index.js.map +1 -0
- package/build/schemas/toolSchemas.d.ts +40 -0
- package/build/schemas/toolSchemas.d.ts.map +1 -0
- package/build/schemas/toolSchemas.js +42 -0
- package/build/schemas/toolSchemas.js.map +1 -0
- package/build/services/backendApiService.d.ts +81 -0
- package/build/services/backendApiService.d.ts.map +1 -0
- package/build/services/backendApiService.js +211 -0
- package/build/services/backendApiService.js.map +1 -0
- package/build/services/commitReviewService.d.ts +61 -0
- package/build/services/commitReviewService.d.ts.map +1 -0
- package/build/services/commitReviewService.js +306 -0
- package/build/services/commitReviewService.js.map +1 -0
- package/build/services/gitService.d.ts +120 -0
- package/build/services/gitService.d.ts.map +1 -0
- package/build/services/gitService.js +360 -0
- package/build/services/gitService.js.map +1 -0
- package/build/services/loggingService.d.ts +64 -0
- package/build/services/loggingService.d.ts.map +1 -0
- package/build/services/loggingService.js +185 -0
- package/build/services/loggingService.js.map +1 -0
- package/build/services/zipService.d.ts +9 -0
- package/build/services/zipService.d.ts.map +1 -0
- package/build/services/zipService.js +47 -0
- package/build/services/zipService.js.map +1 -0
- package/build/tests/backendApiService.test.d.ts +2 -0
- package/build/tests/backendApiService.test.d.ts.map +1 -0
- package/build/tests/backendApiService.test.js +109 -0
- package/build/tests/backendApiService.test.js.map +1 -0
- package/build/tests/commitReviewService.test.d.ts +2 -0
- package/build/tests/commitReviewService.test.d.ts.map +1 -0
- package/build/tests/commitReviewService.test.js +118 -0
- package/build/tests/commitReviewService.test.js.map +1 -0
- package/build/tests/loggingService.test.d.ts +2 -0
- package/build/tests/loggingService.test.d.ts.map +1 -0
- package/build/tests/loggingService.test.js +156 -0
- package/build/tests/loggingService.test.js.map +1 -0
- package/build/tests/setup.test.d.ts +2 -0
- package/build/tests/setup.test.d.ts.map +1 -0
- package/build/tests/setup.test.js +7 -0
- package/build/tests/setup.test.js.map +1 -0
- package/build/utils/analysisFormatter.d.ts +40 -0
- package/build/utils/analysisFormatter.d.ts.map +1 -0
- package/build/utils/analysisFormatter.js +97 -0
- package/build/utils/analysisFormatter.js.map +1 -0
- package/build/utils/errorExtractor.d.ts +36 -0
- package/build/utils/errorExtractor.d.ts.map +1 -0
- package/build/utils/errorExtractor.js +178 -0
- package/build/utils/errorExtractor.js.map +1 -0
- 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"}
|