@qodo/sdk 0.4.0 → 0.5.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 (43) hide show
  1. package/.claude/skills/qodo-agent/SKILL.md +658 -0
  2. package/.claude/skills/qodo-agent/assets/programmatic-agent.ts +317 -0
  3. package/.claude/skills/qodo-agent/references/builtin-tools.md +342 -0
  4. package/.claude/skills/qodo-agent/references/common-issues.md +430 -0
  5. package/dist/api/agent.d.ts +0 -1
  6. package/dist/api/agent.d.ts.map +1 -1
  7. package/dist/api/agent.js +5 -127
  8. package/dist/api/agent.js.map +1 -1
  9. package/dist/bin/install-skill.d.ts +14 -0
  10. package/dist/bin/install-skill.d.ts.map +1 -0
  11. package/dist/bin/install-skill.js +125 -0
  12. package/dist/bin/install-skill.js.map +1 -0
  13. package/dist/mcp/MCPManager.d.ts +0 -16
  14. package/dist/mcp/MCPManager.d.ts.map +1 -1
  15. package/dist/mcp/MCPManager.js +0 -41
  16. package/dist/mcp/MCPManager.js.map +1 -1
  17. package/dist/mcp/builtinServers.d.ts.map +1 -1
  18. package/dist/mcp/builtinServers.js +0 -12
  19. package/dist/mcp/builtinServers.js.map +1 -1
  20. package/dist/mcp/index.d.ts +0 -1
  21. package/dist/mcp/index.d.ts.map +1 -1
  22. package/dist/mcp/index.js +0 -1
  23. package/dist/mcp/index.js.map +1 -1
  24. package/dist/mcp/servers/filesystem.d.ts +0 -31
  25. package/dist/mcp/servers/filesystem.d.ts.map +1 -1
  26. package/dist/mcp/servers/filesystem.js +0 -222
  27. package/dist/mcp/servers/filesystem.js.map +1 -1
  28. package/dist/mcp/servers/shell.d.ts.map +1 -1
  29. package/dist/mcp/servers/shell.js +21 -105
  30. package/dist/mcp/servers/shell.js.map +1 -1
  31. package/dist/mcp/serversRegistry.js +2 -2
  32. package/dist/mcp/serversRegistry.js.map +1 -1
  33. package/dist/mcp/toolProcessor.d.ts.map +1 -1
  34. package/dist/mcp/toolProcessor.js +0 -43
  35. package/dist/mcp/toolProcessor.js.map +1 -1
  36. package/dist/sdk/QodoSDK.d.ts.map +1 -1
  37. package/dist/sdk/QodoSDK.js +0 -9
  38. package/dist/sdk/QodoSDK.js.map +1 -1
  39. package/package.json +5 -1
  40. package/dist/mcp/servers/gerrit.d.ts +0 -19
  41. package/dist/mcp/servers/gerrit.d.ts.map +0 -1
  42. package/dist/mcp/servers/gerrit.js +0 -515
  43. package/dist/mcp/servers/gerrit.js.map +0 -1
@@ -1,515 +0,0 @@
1
- /**
2
- * Makes an HTTP request to Gerrit REST API with authentication
3
- */
4
- async function makeGerritRequest(url, username, password) {
5
- console.debug(`[GerritServer] makeGerritRequest starting for URL: ${url}`);
6
- try {
7
- console.debug(`[GerritServer] Sending fetch request...`);
8
- const response = await fetch(url, {
9
- method: 'GET',
10
- headers: {
11
- 'Authorization': `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}`,
12
- 'Accept': 'application/json',
13
- },
14
- });
15
- console.debug(`[GerritServer] Response received - status: ${response.status}, statusText: ${response.statusText}`);
16
- if (!response.ok) {
17
- console.debug(`[GerritServer] Request failed with status: ${response.status}`);
18
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
19
- }
20
- console.debug(`[GerritServer] Reading response text...`);
21
- const text = await response.text();
22
- console.debug(`[GerritServer] Response text length: ${text.length}, starts with: ${text.substring(0, 50)}...`);
23
- // Gerrit returns JSON with a security prefix ")]}'" - remove it
24
- const jsonText = text.startsWith(")]}'") ? text.substring(4) : text;
25
- console.debug(`[GerritServer] Parsing JSON response...`);
26
- const result = JSON.parse(jsonText);
27
- console.debug(`[GerritServer] JSON parsed successfully`);
28
- return result;
29
- }
30
- catch (error) {
31
- console.debug(`[GerritServer] makeGerritRequest error: ${error}`);
32
- if (error instanceof Error) {
33
- throw new Error(`Gerrit API request failed: ${error.message}`);
34
- }
35
- throw new Error(`Gerrit API request failed: ${String(error)}`);
36
- }
37
- }
38
- /**
39
- * Gets file content from Gerrit for a specific revision
40
- */
41
- async function getGerritFileContent(baseUrl, changeId, fileName, revision, username, password) {
42
- try {
43
- // Handle null revision (for initial commits with no parent)
44
- if (revision === null) {
45
- return ''; // No parent revision, so "before" content is empty
46
- }
47
- const url = `${baseUrl}/a/changes/${changeId}/revisions/${revision}/files/${encodeURIComponent(fileName)}/content`;
48
- const response = await fetch(url, {
49
- method: 'GET',
50
- headers: {
51
- 'Authorization': `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}`,
52
- },
53
- });
54
- if (!response.ok) {
55
- if (response.status === 404) {
56
- return ''; // File doesn't exist in this revision
57
- }
58
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
59
- }
60
- const content = await response.text();
61
- // Gerrit returns base64-encoded content, decode it
62
- return Buffer.from(content, 'base64').toString('utf-8');
63
- }
64
- catch (error) {
65
- if (error instanceof Error && error.message.includes('404')) {
66
- return ''; // File doesn't exist
67
- }
68
- throw error;
69
- }
70
- }
71
- /**
72
- * Parses a Gerrit change URL to extract base URL and change ID
73
- * Supports URLs like: https://gerrit.example.com/c/project/+/12345
74
- */
75
- function parseGerritChangeUrl(changeUrl) {
76
- try {
77
- const url = new URL(changeUrl);
78
- const baseUrl = `${url.protocol}//${url.host}`;
79
- // Extract change ID from URL path
80
- // Gerrit URLs can be in formats like:
81
- // - https://gerrit.example.com/c/project/+/12345
82
- // - https://gerrit.example.com/#/c/12345/
83
- // - https://gerrit.example.com/12345
84
- const pathMatch = url.pathname.match(/\/(?:c\/[^\/]+\/\+\/|#\/c\/)?(\d+)/);
85
- if (!pathMatch) {
86
- throw new Error('Could not extract change ID from URL path');
87
- }
88
- const changeId = pathMatch[1];
89
- return { baseUrl, changeId };
90
- }
91
- catch (error) {
92
- if (error instanceof Error) {
93
- throw new Error(`Invalid Gerrit change URL: ${error.message}`);
94
- }
95
- throw new Error(`Invalid Gerrit change URL: ${String(error)}`);
96
- }
97
- }
98
- /**
99
- * Validates and filters line comments to ensure they have valid parameters
100
- */
101
- function validateAndFilterComments(comments) {
102
- const validatedComments = {};
103
- for (const [fileName, fileComments] of Object.entries(comments)) {
104
- // Skip if fileName is empty or invalid
105
- if (!fileName || typeof fileName !== 'string' || fileName.trim() === '') {
106
- console.warn(`[GerritServer] Skipping comments for invalid file name: "${fileName}"`);
107
- continue;
108
- }
109
- const validFileComments = [];
110
- for (const comment of fileComments) {
111
- // Validate comment structure
112
- if (!comment || typeof comment !== 'object') {
113
- console.warn(`[GerritServer] Skipping invalid comment object for file ${fileName}`);
114
- continue;
115
- }
116
- // Validate message
117
- if (!comment.message || typeof comment.message !== 'string' || comment.message.trim() === '') {
118
- console.warn(`[GerritServer] Skipping comment with invalid message for file ${fileName}`);
119
- continue;
120
- }
121
- // Validate line number if provided
122
- if (comment.line !== undefined) {
123
- if (typeof comment.line !== 'number' || comment.line < 1 || !Number.isInteger(comment.line)) {
124
- console.warn(`[GerritServer] Skipping comment with invalid line number ${comment.line} for file ${fileName}`);
125
- continue;
126
- }
127
- }
128
- // Validate range if provided
129
- if (comment.range !== undefined) {
130
- const { range } = comment;
131
- if (!range || typeof range !== 'object' ||
132
- typeof range.start_line !== 'number' || range.start_line < 1 || !Number.isInteger(range.start_line) ||
133
- typeof range.start_character !== 'number' || range.start_character < 0 || !Number.isInteger(range.start_character) ||
134
- typeof range.end_line !== 'number' || range.end_line < 1 || !Number.isInteger(range.end_line) ||
135
- typeof range.end_character !== 'number' || range.end_character < 0 || !Number.isInteger(range.end_character) ||
136
- range.end_line < range.start_line ||
137
- (range.end_line === range.start_line && range.end_character < range.start_character)) {
138
- console.warn(`[GerritServer] Skipping comment with invalid range for file ${fileName}:`, range);
139
- continue;
140
- }
141
- }
142
- // If we have neither line nor range, skip the comment
143
- if (comment.line === undefined && comment.range === undefined) {
144
- console.warn(`[GerritServer] Skipping comment without line number or range for file ${fileName}`);
145
- continue;
146
- }
147
- validFileComments.push(comment);
148
- }
149
- // Only add file to result if it has valid comments
150
- if (validFileComments.length > 0) {
151
- validatedComments[fileName] = validFileComments;
152
- }
153
- }
154
- return validatedComments;
155
- }
156
- /**
157
- * Posts a review comment to a Gerrit change using the HTTP API
158
- */
159
- async function gerrit_comment(params) {
160
- const { gerrit_change_url, message, tag, comments } = params;
161
- if (!gerrit_change_url) {
162
- throw new Error('gerrit_change_url parameter is required');
163
- }
164
- if (!message || message.trim() === '') {
165
- throw new Error('message parameter is required and cannot be empty');
166
- }
167
- // Parse the change URL to extract base URL and change ID
168
- const { baseUrl: gerritBaseUrl, changeId: change_id } = parseGerritChangeUrl(gerrit_change_url);
169
- // Get configuration from environment variables
170
- const gerritUser = process.env.GERRIT_USER;
171
- const gerritPassword = process.env.GERRIT_PASSWORD;
172
- if (!gerritUser) {
173
- throw new Error('GERRIT_USER environment variable is required');
174
- }
175
- if (!gerritPassword) {
176
- throw new Error('GERRIT_PASSWORD environment variable is required');
177
- }
178
- try {
179
- // Get the current revision to post the comment on
180
- const changeUrl = `${gerritBaseUrl}/a/changes/${change_id}?o=CURRENT_REVISION`;
181
- const changeData = await makeGerritRequest(changeUrl, gerritUser, gerritPassword);
182
- if (!changeData.current_revision) {
183
- throw new Error(`No current revision found for change ${change_id}`);
184
- }
185
- const currentRevision = changeData.current_revision;
186
- // Validate and filter line comments if provided
187
- let validatedComments;
188
- if (comments && Object.keys(comments).length > 0) {
189
- validatedComments = validateAndFilterComments(comments);
190
- if (Object.keys(validatedComments).length === 0) {
191
- console.warn('[GerritServer] All provided comments were invalid and filtered out');
192
- validatedComments = undefined;
193
- }
194
- }
195
- // Prepare the review input
196
- const reviewInput = {
197
- message: message.trim(),
198
- ...(tag && { tag: tag.trim() }),
199
- ...(validatedComments && { comments: validatedComments })
200
- };
201
- // Post the review comment
202
- const reviewUrl = `${gerritBaseUrl}/a/changes/${change_id}/revisions/${currentRevision}/review`;
203
- const response = await fetch(reviewUrl, {
204
- method: 'POST',
205
- headers: {
206
- 'Authorization': `Basic ${Buffer.from(`${gerritUser}:${gerritPassword}`).toString('base64')}`,
207
- 'Content-Type': 'application/json',
208
- },
209
- body: JSON.stringify(reviewInput),
210
- });
211
- if (!response.ok) {
212
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
213
- }
214
- const responseText = await response.text();
215
- // Gerrit returns JSON with a security prefix ")]}'" - remove it
216
- const jsonText = responseText.startsWith(")]}' ") ? responseText.substring(4) : responseText;
217
- // For successful review posting, Gerrit typically returns an empty response or minimal data
218
- const lineCommentsCount = validatedComments ?
219
- Object.values(validatedComments).reduce((total, comments) => total + comments.length, 0) : 0;
220
- const successMessage = lineCommentsCount > 0 ?
221
- `Review comment posted successfully to change ${change_id} with ${lineCommentsCount} line comment(s) across ${Object.keys(validatedComments).length} file(s)` :
222
- `Review comment posted successfully to change ${change_id}`;
223
- return {
224
- success: true,
225
- message: successMessage
226
- };
227
- }
228
- catch (error) {
229
- if (error instanceof Error) {
230
- throw new Error(`Failed to post comment to Gerrit: ${error.message}`);
231
- }
232
- throw new Error(`Failed to post comment to Gerrit: ${String(error)}`);
233
- }
234
- }
235
- /**
236
- * Implements the gerrit_diff_files tool that fetches file changes from Gerrit
237
- */
238
- async function gerrit_diff_files(params) {
239
- console.debug(`[GerritServer] gerrit_diff_files started with params: ${JSON.stringify(params)}`);
240
- const { gerrit_change_url, files } = params;
241
- if (!gerrit_change_url) {
242
- console.debug(`[GerritServer] Error: gerrit_change_url parameter is required`);
243
- throw new Error('gerrit_change_url parameter is required');
244
- }
245
- console.debug(`[GerritServer] Parsing change URL: ${gerrit_change_url}`);
246
- // Parse the change URL to extract base URL and change ID
247
- const { baseUrl: gerritBaseUrl, changeId: change_id } = parseGerritChangeUrl(gerrit_change_url);
248
- console.debug(`[GerritServer] Parsed URL - baseUrl: ${gerritBaseUrl}, changeId: ${change_id}`);
249
- // Get configuration from environment variables
250
- const gerritUser = process.env.GERRIT_USER;
251
- const gerritPassword = process.env.GERRIT_PASSWORD;
252
- if (!gerritUser) {
253
- console.debug(`[GerritServer] Error: GERRIT_USER environment variable is required`);
254
- throw new Error('GERRIT_USER environment variable is required');
255
- }
256
- if (!gerritPassword) {
257
- console.debug(`[GerritServer] Error: GERRIT_PASSWORD environment variable is required`);
258
- throw new Error('GERRIT_PASSWORD environment variable is required');
259
- }
260
- console.debug(`[GerritServer] Environment variables validated for user: ${gerritUser}`);
261
- try {
262
- // Get change details including revisions with commit information
263
- const changeUrl = `${gerritBaseUrl}/a/changes/${change_id}?o=CURRENT_REVISION&o=ALL_REVISIONS&o=ALL_FILES&o=ALL_COMMITS`;
264
- console.debug(`[GerritServer] Making request to: ${changeUrl}`);
265
- const changeData = await makeGerritRequest(changeUrl, gerritUser, gerritPassword);
266
- console.debug(`[GerritServer] Change data received, keys: ${Object.keys(changeData).join(', ')}`);
267
- if (!changeData.revisions) {
268
- throw new Error(`No revisions found for change ${change_id}`);
269
- }
270
- // Get the current revision (latest patchset)
271
- const currentRevision = changeData.current_revision;
272
- const revisionData = changeData.revisions[currentRevision];
273
- if (!revisionData) {
274
- throw new Error(`Current revision ${currentRevision} not found in change data`);
275
- }
276
- // Get parent revision for comparison (base)
277
- console.debug(`[GerritServer] Revision data keys: ${Object.keys(revisionData).join(', ')}`);
278
- // With ALL_COMMITS option, parent information should be in revisionData.commit.parents
279
- if (!revisionData.commit) {
280
- console.debug(`[GerritServer] No commit data found in revision. Full revision data: ${JSON.stringify(revisionData, null, 2)}`);
281
- throw new Error(`No commit data found for revision ${currentRevision}. This may indicate the ALL_COMMITS option didn't work.`);
282
- }
283
- console.debug(`[GerritServer] Commit data keys: ${Object.keys(revisionData.commit).join(', ')}`);
284
- const parents = revisionData.commit.parents || [];
285
- console.debug(`[GerritServer] Found ${parents.length} parents: ${JSON.stringify(parents)}`);
286
- let parentRevision = null;
287
- if (parents.length === 0) {
288
- console.debug(`[GerritServer] No parents found. This might be the initial commit or root commit.`);
289
- console.debug(`[GerritServer] Using null parent for initial commit comparison`);
290
- parentRevision = null;
291
- }
292
- else {
293
- parentRevision = parents[0].commit || parents[0];
294
- console.debug(`[GerritServer] Using parent revision: ${parentRevision}`);
295
- }
296
- // Get the list of files to process
297
- const filesToProcess = files && files.length > 0
298
- ? files
299
- : Object.keys(revisionData.files || {});
300
- if (filesToProcess.length === 0) {
301
- throw new Error(`No files found for change ${change_id}`);
302
- }
303
- const result = {};
304
- console.debug(`[GerritServer] Processing ${filesToProcess.length} files: ${filesToProcess.slice(0, 5).join(', ')}${filesToProcess.length > 5 ? '...' : ''}`);
305
- // Fetch content for each file
306
- for (const fileName of filesToProcess) {
307
- try {
308
- console.debug(`[GerritServer] Processing file: ${fileName}`);
309
- // Get file content from parent revision (before)
310
- const beforeContent = await getGerritFileContent(gerritBaseUrl, change_id, fileName, parentRevision, gerritUser, gerritPassword);
311
- // Get file content from current revision (after)
312
- const afterContent = await getGerritFileContent(gerritBaseUrl, change_id, fileName, currentRevision, gerritUser, gerritPassword);
313
- result[fileName] = [beforeContent, afterContent];
314
- console.debug(`[GerritServer] File ${fileName} processed successfully (before: ${beforeContent.length} chars, after: ${afterContent.length} chars)`);
315
- }
316
- catch (error) {
317
- console.warn(`[GerritServer] Failed to fetch content for file ${fileName}: ${error}`);
318
- result[fileName] = ['', ''];
319
- }
320
- }
321
- console.debug(`[GerritServer] All files processed, returning result with ${Object.keys(result).length} files`);
322
- return result;
323
- }
324
- catch (error) {
325
- if (error instanceof Error) {
326
- throw new Error(`Failed to fetch diff files from Gerrit: ${error.message}`);
327
- }
328
- throw new Error(`Failed to fetch diff files from Gerrit: ${String(error)}`);
329
- }
330
- }
331
- export class GerritServerEnhanced {
332
- name = 'gerrit';
333
- version = '1.0.0';
334
- initialized = false;
335
- initializationError = null;
336
- async initialize() {
337
- try {
338
- // Check for required environment variables
339
- const gerritUser = process.env.GERRIT_USER;
340
- const gerritPassword = process.env.GERRIT_PASSWORD;
341
- if (!gerritUser) {
342
- this.initializationError = 'GERRIT_USER environment variable is required';
343
- console.error(`[GerritServer] ${this.initializationError}`);
344
- return false;
345
- }
346
- if (!gerritPassword) {
347
- this.initializationError = 'GERRIT_PASSWORD environment variable is required';
348
- console.error(`[GerritServer] ${this.initializationError}`);
349
- return false;
350
- }
351
- // Since base URL is now provided via gerrit_change_url parameter,
352
- // we can't test connection during initialization.
353
- // Connection will be tested when the tool is actually used.
354
- this.initialized = true;
355
- console.log(`[GerritServer] Gerrit server initialized (connection will be tested when used)`);
356
- return true;
357
- }
358
- catch (error) {
359
- this.initializationError = `Initialization failed: ${error}`;
360
- console.error(`[GerritServer] ${this.initializationError}`);
361
- return false;
362
- }
363
- }
364
- async listTools() {
365
- const tools = !this.initialized ? [] : [
366
- {
367
- name: 'gerrit_diff_files',
368
- description: 'Get file changes (before/after content) from a Gerrit change',
369
- inputSchema: {
370
- type: 'object',
371
- properties: {
372
- gerrit_change_url: {
373
- type: 'string',
374
- description: 'Full Gerrit change URL (e.g., "https://gerrit.example.com/c/project/+/12345")'
375
- },
376
- files: {
377
- type: 'array',
378
- items: { type: 'string' },
379
- description: 'Optional list of specific files to get. If not provided, all changed files will be returned'
380
- }
381
- },
382
- required: ['gerrit_change_url']
383
- }
384
- },
385
- {
386
- name: 'gerrit_comment',
387
- description: 'Post a review comment to a Gerrit change with optional line-specific comments',
388
- inputSchema: {
389
- type: 'object',
390
- properties: {
391
- gerrit_change_url: {
392
- type: 'string',
393
- description: 'Full Gerrit change URL (e.g., "https://gerrit.example.com/c/project/+/12345")'
394
- },
395
- message: {
396
- type: 'string',
397
- description: 'The review comment message to post'
398
- },
399
- tag: {
400
- type: 'string',
401
- description: 'Optional tag for the review comment (e.g., "autoreview", "bot")'
402
- },
403
- comments: {
404
- type: 'object',
405
- description: 'Optional line-specific comments mapped by file path (relative paths)',
406
- additionalProperties: {
407
- type: 'array',
408
- items: {
409
- type: 'object',
410
- properties: {
411
- line: {
412
- type: 'number',
413
- description: 'Line number for the comment (1-based, required if range is not provided)'
414
- },
415
- message: {
416
- type: 'string',
417
- description: 'The comment message'
418
- },
419
- range: {
420
- type: 'object',
421
- description: 'Range for multi-line comments (alternative to line)',
422
- properties: {
423
- start_line: {
424
- type: 'number',
425
- description: 'Starting line number (1-based)'
426
- },
427
- start_character: {
428
- type: 'number',
429
- description: 'Starting character position (0-based)'
430
- },
431
- end_line: {
432
- type: 'number',
433
- description: 'Ending line number (1-based)'
434
- },
435
- end_character: {
436
- type: 'number',
437
- description: 'Ending character position (0-based)'
438
- }
439
- },
440
- required: ['start_line', 'start_character', 'end_line', 'end_character']
441
- }
442
- },
443
- required: ['message']
444
- }
445
- }
446
- }
447
- },
448
- required: ['gerrit_change_url', 'message']
449
- }
450
- }
451
- ];
452
- return { tools };
453
- }
454
- async callTool(request, _extra) {
455
- console.debug(`[GerritServer] callTool called with: ${JSON.stringify(request)}`);
456
- if (!this.initialized) {
457
- console.debug(`[GerritServer] Server not initialized: ${this.initializationError}`);
458
- return {
459
- content: [{
460
- type: 'text',
461
- text: `GerritServer not initialized: ${this.initializationError || 'Unknown error'}`
462
- }],
463
- isError: true
464
- };
465
- }
466
- const { name, arguments: args } = request;
467
- console.debug(`[GerritServer] Executing tool: ${name} with args: ${JSON.stringify(args)}`);
468
- try {
469
- switch (name) {
470
- case 'gerrit_diff_files': {
471
- console.debug(`[GerritServer] Starting gerrit_diff_files execution`);
472
- const result = await gerrit_diff_files(args);
473
- console.debug(`[GerritServer] gerrit_diff_files completed successfully, files: ${Object.keys(result).length}`);
474
- const response = {
475
- content: [{
476
- type: 'text',
477
- text: JSON.stringify(result, null, 2)
478
- }],
479
- isError: false
480
- };
481
- console.debug(`[GerritServer] Returning response to MCP client`);
482
- return response;
483
- }
484
- case 'gerrit_comment': {
485
- const result = await gerrit_comment(args);
486
- return {
487
- content: [{
488
- type: 'text',
489
- text: JSON.stringify(result, null, 2)
490
- }],
491
- isError: false
492
- };
493
- }
494
- default:
495
- return {
496
- content: [{
497
- type: 'text',
498
- text: `Unknown tool: ${name}`
499
- }],
500
- isError: true
501
- };
502
- }
503
- }
504
- catch (error) {
505
- return {
506
- content: [{
507
- type: 'text',
508
- text: error instanceof Error ? error.message : String(error)
509
- }],
510
- isError: true
511
- };
512
- }
513
- }
514
- }
515
- //# sourceMappingURL=gerrit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gerrit.js","sourceRoot":"","sources":["../../../src/mcp/servers/gerrit.ts"],"names":[],"mappings":"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"}