@zhanglc77/bitbucket-mcp-server 1.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/CHANGELOG.md +280 -0
- package/LICENSE +21 -0
- package/README.md +1090 -0
- package/build/handlers/branch-handlers.d.ts +55 -0
- package/build/handlers/branch-handlers.d.ts.map +1 -0
- package/build/handlers/branch-handlers.js +522 -0
- package/build/handlers/branch-handlers.js.map +1 -0
- package/build/handlers/file-handlers.d.ts +33 -0
- package/build/handlers/file-handlers.d.ts.map +1 -0
- package/build/handlers/file-handlers.js +308 -0
- package/build/handlers/file-handlers.js.map +1 -0
- package/build/handlers/pull-request-handlers.d.ts +101 -0
- package/build/handlers/pull-request-handlers.d.ts.map +1 -0
- package/build/handlers/pull-request-handlers.js +955 -0
- package/build/handlers/pull-request-handlers.js.map +1 -0
- package/build/handlers/review-handlers.d.ts +67 -0
- package/build/handlers/review-handlers.d.ts.map +1 -0
- package/build/handlers/review-handlers.js +252 -0
- package/build/handlers/review-handlers.js.map +1 -0
- package/build/handlers/search-handlers.d.ts +20 -0
- package/build/handlers/search-handlers.d.ts.map +1 -0
- package/build/handlers/search-handlers.js +151 -0
- package/build/handlers/search-handlers.js.map +1 -0
- package/build/index.d.ts +3 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +120 -0
- package/build/index.js.map +1 -0
- package/build/tools/definitions.d.ts +1191 -0
- package/build/tools/definitions.d.ts.map +1 -0
- package/build/tools/definitions.js +655 -0
- package/build/tools/definitions.js.map +1 -0
- package/build/types/bitbucket.d.ts +483 -0
- package/build/types/bitbucket.d.ts.map +1 -0
- package/build/types/bitbucket.js +2 -0
- package/build/types/bitbucket.js.map +1 -0
- package/build/types/guards.d.ts +140 -0
- package/build/types/guards.d.ts.map +1 -0
- package/build/types/guards.js +140 -0
- package/build/types/guards.js.map +1 -0
- package/build/utils/api-client.d.ts +22 -0
- package/build/utils/api-client.d.ts.map +1 -0
- package/build/utils/api-client.js +111 -0
- package/build/utils/api-client.js.map +1 -0
- package/build/utils/diff-parser.d.ts +42 -0
- package/build/utils/diff-parser.d.ts.map +1 -0
- package/build/utils/diff-parser.js +165 -0
- package/build/utils/diff-parser.js.map +1 -0
- package/build/utils/formatters.d.ts +8 -0
- package/build/utils/formatters.d.ts.map +1 -0
- package/build/utils/formatters.js +207 -0
- package/build/utils/formatters.js.map +1 -0
- package/build/utils/suggestion-formatter.d.ts +6 -0
- package/build/utils/suggestion-formatter.d.ts.map +1 -0
- package/build/utils/suggestion-formatter.js +17 -0
- package/build/utils/suggestion-formatter.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import { isListDirectoryContentArgs, isGetFileContentArgs } from '../types/guards.js';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
export class FileHandlers {
|
|
5
|
+
apiClient;
|
|
6
|
+
baseUrl;
|
|
7
|
+
// Default lines by file extension
|
|
8
|
+
DEFAULT_LINES_BY_EXT = {
|
|
9
|
+
'.yml': 200, '.yaml': 200, '.json': 200, // Config files
|
|
10
|
+
'.md': 300, '.txt': 300, // Docs
|
|
11
|
+
'.ts': 500, '.js': 500, '.py': 500, // Code
|
|
12
|
+
'.tsx': 500, '.jsx': 500, '.java': 500, // More code
|
|
13
|
+
'.log': -100 // Last 100 lines for logs
|
|
14
|
+
};
|
|
15
|
+
constructor(apiClient, baseUrl) {
|
|
16
|
+
this.apiClient = apiClient;
|
|
17
|
+
this.baseUrl = baseUrl;
|
|
18
|
+
}
|
|
19
|
+
async handleListDirectoryContent(args) {
|
|
20
|
+
if (!isListDirectoryContentArgs(args)) {
|
|
21
|
+
throw new McpError(ErrorCode.InvalidParams, 'Invalid arguments for list_directory_content');
|
|
22
|
+
}
|
|
23
|
+
const { workspace, repository, path: dirPath = '', branch } = args;
|
|
24
|
+
try {
|
|
25
|
+
let apiPath;
|
|
26
|
+
let params = {};
|
|
27
|
+
let response;
|
|
28
|
+
if (this.apiClient.getIsServer()) {
|
|
29
|
+
// Bitbucket Server API
|
|
30
|
+
apiPath = `/rest/api/1.0/projects/${workspace}/repos/${repository}/browse`;
|
|
31
|
+
if (dirPath) {
|
|
32
|
+
apiPath += `/${dirPath}`;
|
|
33
|
+
}
|
|
34
|
+
if (branch) {
|
|
35
|
+
params.at = `refs/heads/${branch}`;
|
|
36
|
+
}
|
|
37
|
+
response = await this.apiClient.makeRequest('get', apiPath, undefined, { params });
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// Bitbucket Cloud API
|
|
41
|
+
const branchOrDefault = branch || 'HEAD';
|
|
42
|
+
apiPath = `/repositories/${workspace}/${repository}/src/${branchOrDefault}`;
|
|
43
|
+
if (dirPath) {
|
|
44
|
+
apiPath += `/${dirPath}`;
|
|
45
|
+
}
|
|
46
|
+
response = await this.apiClient.makeRequest('get', apiPath);
|
|
47
|
+
}
|
|
48
|
+
// Format the response
|
|
49
|
+
let contents = [];
|
|
50
|
+
let actualBranch = branch;
|
|
51
|
+
if (this.apiClient.getIsServer()) {
|
|
52
|
+
// Bitbucket Server response
|
|
53
|
+
const entries = response.children?.values || [];
|
|
54
|
+
contents = entries.map((entry) => ({
|
|
55
|
+
name: entry.path.name,
|
|
56
|
+
type: entry.type === 'FILE' ? 'file' : 'directory',
|
|
57
|
+
size: entry.size,
|
|
58
|
+
path: dirPath ? `${dirPath}/${entry.path.name}` : entry.path.name
|
|
59
|
+
}));
|
|
60
|
+
// Get the actual branch from the response if available
|
|
61
|
+
if (!branch && response.path?.components) {
|
|
62
|
+
// Server returns default branch info in the response
|
|
63
|
+
actualBranch = 'default';
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
// Bitbucket Cloud response
|
|
68
|
+
const entries = response.values || [];
|
|
69
|
+
contents = entries.map((entry) => ({
|
|
70
|
+
name: entry.path.split('/').pop() || entry.path,
|
|
71
|
+
type: entry.type === 'commit_file' ? 'file' : 'directory',
|
|
72
|
+
size: entry.size,
|
|
73
|
+
path: entry.path
|
|
74
|
+
}));
|
|
75
|
+
// Cloud returns the branch in the response
|
|
76
|
+
actualBranch = branch || response.commit?.branch || 'main';
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
content: [
|
|
80
|
+
{
|
|
81
|
+
type: 'text',
|
|
82
|
+
text: JSON.stringify({
|
|
83
|
+
path: dirPath || '/',
|
|
84
|
+
branch: actualBranch,
|
|
85
|
+
contents,
|
|
86
|
+
total_items: contents.length
|
|
87
|
+
}, null, 2),
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
return this.apiClient.handleApiError(error, `listing directory '${dirPath}' in ${workspace}/${repository}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async handleGetFileContent(args) {
|
|
97
|
+
if (!isGetFileContentArgs(args)) {
|
|
98
|
+
throw new McpError(ErrorCode.InvalidParams, 'Invalid arguments for get_file_content');
|
|
99
|
+
}
|
|
100
|
+
const { workspace, repository, file_path, branch, start_line, line_count, full_content = false } = args;
|
|
101
|
+
try {
|
|
102
|
+
let fileContent;
|
|
103
|
+
let fileMetadata = {};
|
|
104
|
+
const fileSizeLimit = 1024 * 1024; // 1MB default limit
|
|
105
|
+
if (this.apiClient.getIsServer()) {
|
|
106
|
+
// Bitbucket Server - get file metadata first to check size
|
|
107
|
+
const browsePath = `/rest/api/1.0/projects/${workspace}/repos/${repository}/browse/${file_path}`;
|
|
108
|
+
const browseParams = {};
|
|
109
|
+
if (branch) {
|
|
110
|
+
browseParams.at = `refs/heads/${branch}`;
|
|
111
|
+
}
|
|
112
|
+
try {
|
|
113
|
+
const metadataResponse = await this.apiClient.makeRequest('get', browsePath, undefined, { params: browseParams });
|
|
114
|
+
fileMetadata = {
|
|
115
|
+
size: metadataResponse.size || 0,
|
|
116
|
+
path: file_path
|
|
117
|
+
};
|
|
118
|
+
// Check file size
|
|
119
|
+
if (!full_content && fileMetadata.size > fileSizeLimit) {
|
|
120
|
+
return {
|
|
121
|
+
content: [
|
|
122
|
+
{
|
|
123
|
+
type: 'text',
|
|
124
|
+
text: JSON.stringify({
|
|
125
|
+
error: 'File too large',
|
|
126
|
+
file_path,
|
|
127
|
+
size: fileMetadata.size,
|
|
128
|
+
size_mb: (fileMetadata.size / (1024 * 1024)).toFixed(2),
|
|
129
|
+
message: `File exceeds size limit. Use full_content: true to force retrieval or use start_line/line_count for partial content.`
|
|
130
|
+
}, null, 2),
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
isError: true,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (e) {
|
|
138
|
+
// If browse fails, continue to try raw endpoint
|
|
139
|
+
}
|
|
140
|
+
// Get raw content
|
|
141
|
+
const rawPath = `/rest/api/1.0/projects/${workspace}/repos/${repository}/raw/${file_path}`;
|
|
142
|
+
const rawParams = {};
|
|
143
|
+
if (branch) {
|
|
144
|
+
rawParams.at = `refs/heads/${branch}`;
|
|
145
|
+
}
|
|
146
|
+
const response = await this.apiClient.makeRequest('get', rawPath, undefined, {
|
|
147
|
+
params: rawParams,
|
|
148
|
+
responseType: 'text',
|
|
149
|
+
headers: { 'Accept': 'text/plain' }
|
|
150
|
+
});
|
|
151
|
+
fileContent = response;
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
// Bitbucket Cloud - first get metadata
|
|
155
|
+
const branchOrDefault = branch || 'HEAD';
|
|
156
|
+
const metaPath = `/repositories/${workspace}/${repository}/src/${branchOrDefault}/${file_path}`;
|
|
157
|
+
const metadataResponse = await this.apiClient.makeRequest('get', metaPath);
|
|
158
|
+
fileMetadata = {
|
|
159
|
+
size: metadataResponse.size,
|
|
160
|
+
encoding: metadataResponse.encoding,
|
|
161
|
+
path: metadataResponse.path,
|
|
162
|
+
commit: metadataResponse.commit
|
|
163
|
+
};
|
|
164
|
+
// Check file size
|
|
165
|
+
if (!full_content && fileMetadata.size > fileSizeLimit) {
|
|
166
|
+
return {
|
|
167
|
+
content: [
|
|
168
|
+
{
|
|
169
|
+
type: 'text',
|
|
170
|
+
text: JSON.stringify({
|
|
171
|
+
error: 'File too large',
|
|
172
|
+
file_path,
|
|
173
|
+
size: fileMetadata.size,
|
|
174
|
+
size_mb: (fileMetadata.size / (1024 * 1024)).toFixed(2),
|
|
175
|
+
message: `File exceeds size limit. Use full_content: true to force retrieval or use start_line/line_count for partial content.`
|
|
176
|
+
}, null, 2),
|
|
177
|
+
},
|
|
178
|
+
],
|
|
179
|
+
isError: true,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
// Follow the download link to get actual content
|
|
183
|
+
const downloadUrl = metadataResponse.links.download.href;
|
|
184
|
+
const downloadResponse = await this.apiClient.makeRequest('get', downloadUrl, undefined, {
|
|
185
|
+
baseURL: '', // Use full URL
|
|
186
|
+
responseType: 'text',
|
|
187
|
+
headers: { 'Accept': 'text/plain' }
|
|
188
|
+
});
|
|
189
|
+
fileContent = downloadResponse;
|
|
190
|
+
}
|
|
191
|
+
// Apply line filtering if requested
|
|
192
|
+
let processedContent = fileContent;
|
|
193
|
+
let lineInfo = null;
|
|
194
|
+
if (!full_content || start_line !== undefined || line_count !== undefined) {
|
|
195
|
+
const lines = fileContent.split('\n');
|
|
196
|
+
const totalLines = lines.length;
|
|
197
|
+
// Determine default line count based on file extension
|
|
198
|
+
const ext = path.extname(file_path).toLowerCase();
|
|
199
|
+
const defaultLineCount = this.DEFAULT_LINES_BY_EXT[ext] || 500;
|
|
200
|
+
const shouldUseTail = defaultLineCount < 0;
|
|
201
|
+
// Calculate start and end indices
|
|
202
|
+
let startIdx;
|
|
203
|
+
let endIdx;
|
|
204
|
+
if (start_line !== undefined) {
|
|
205
|
+
if (start_line < 0) {
|
|
206
|
+
// Negative start_line means from end
|
|
207
|
+
startIdx = Math.max(0, totalLines + start_line);
|
|
208
|
+
endIdx = totalLines;
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
// 1-based to 0-based index
|
|
212
|
+
startIdx = Math.max(0, start_line - 1);
|
|
213
|
+
endIdx = startIdx + (line_count || Math.abs(defaultLineCount));
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
else if (!full_content && fileMetadata.size > 50 * 1024) {
|
|
217
|
+
// Auto-truncate large files
|
|
218
|
+
if (shouldUseTail) {
|
|
219
|
+
startIdx = Math.max(0, totalLines + defaultLineCount);
|
|
220
|
+
endIdx = totalLines;
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
startIdx = 0;
|
|
224
|
+
endIdx = Math.abs(defaultLineCount);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
// Return full content for small files
|
|
229
|
+
startIdx = 0;
|
|
230
|
+
endIdx = totalLines;
|
|
231
|
+
}
|
|
232
|
+
// Ensure indices are within bounds
|
|
233
|
+
startIdx = Math.max(0, Math.min(startIdx, totalLines));
|
|
234
|
+
endIdx = Math.max(startIdx, Math.min(endIdx, totalLines));
|
|
235
|
+
// Extract the requested lines
|
|
236
|
+
const selectedLines = lines.slice(startIdx, endIdx);
|
|
237
|
+
processedContent = selectedLines.join('\n');
|
|
238
|
+
lineInfo = {
|
|
239
|
+
total_lines: totalLines,
|
|
240
|
+
returned_lines: {
|
|
241
|
+
start: startIdx + 1,
|
|
242
|
+
end: endIdx
|
|
243
|
+
},
|
|
244
|
+
truncated: startIdx > 0 || endIdx < totalLines,
|
|
245
|
+
message: endIdx < totalLines
|
|
246
|
+
? `Showing lines ${startIdx + 1}-${endIdx} of ${totalLines}. File size: ${(fileMetadata.size / 1024).toFixed(1)}KB`
|
|
247
|
+
: null
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
// Build response
|
|
251
|
+
const response = {
|
|
252
|
+
file_path,
|
|
253
|
+
branch: branch || (this.apiClient.getIsServer() ? 'default' : 'main'),
|
|
254
|
+
size: fileMetadata.size || fileContent.length,
|
|
255
|
+
encoding: fileMetadata.encoding || 'utf-8',
|
|
256
|
+
content: processedContent
|
|
257
|
+
};
|
|
258
|
+
if (lineInfo) {
|
|
259
|
+
response.line_info = lineInfo;
|
|
260
|
+
}
|
|
261
|
+
if (fileMetadata.commit) {
|
|
262
|
+
response.last_modified = {
|
|
263
|
+
commit_id: fileMetadata.commit.hash,
|
|
264
|
+
author: fileMetadata.commit.author?.user?.display_name || fileMetadata.commit.author?.raw,
|
|
265
|
+
date: fileMetadata.commit.date,
|
|
266
|
+
message: fileMetadata.commit.message
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
return {
|
|
270
|
+
content: [
|
|
271
|
+
{
|
|
272
|
+
type: 'text',
|
|
273
|
+
text: JSON.stringify(response, null, 2),
|
|
274
|
+
},
|
|
275
|
+
],
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
// Handle specific not found error
|
|
280
|
+
if (error.status === 404) {
|
|
281
|
+
return {
|
|
282
|
+
content: [
|
|
283
|
+
{
|
|
284
|
+
type: 'text',
|
|
285
|
+
text: `File '${file_path}' not found in ${workspace}/${repository}${branch ? ` on branch '${branch}'` : ''}`,
|
|
286
|
+
},
|
|
287
|
+
],
|
|
288
|
+
isError: true,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
return this.apiClient.handleApiError(error, `getting file content for '${file_path}' in ${workspace}/${repository}`);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// Helper method to get default line count based on file extension
|
|
295
|
+
getDefaultLines(filePath, fileSize) {
|
|
296
|
+
// Small files: return full content
|
|
297
|
+
if (fileSize < 50 * 1024) { // 50KB
|
|
298
|
+
return { full: true };
|
|
299
|
+
}
|
|
300
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
301
|
+
const defaultLines = this.DEFAULT_LINES_BY_EXT[ext] || 500;
|
|
302
|
+
return {
|
|
303
|
+
start: defaultLines < 0 ? defaultLines : 1,
|
|
304
|
+
count: Math.abs(defaultLines)
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=file-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-handlers.js","sourceRoot":"","sources":["../../src/handlers/file-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { BitbucketApiClient } from '../utils/api-client.js';
|
|
2
|
+
export declare class PullRequestHandlers {
|
|
3
|
+
private apiClient;
|
|
4
|
+
private baseUrl;
|
|
5
|
+
private username;
|
|
6
|
+
constructor(apiClient: BitbucketApiClient, baseUrl: string, username: string);
|
|
7
|
+
private getFilteredPullRequestDiff;
|
|
8
|
+
handleGetPullRequest(args: any): Promise<{
|
|
9
|
+
content: {
|
|
10
|
+
type: string;
|
|
11
|
+
text: string;
|
|
12
|
+
}[];
|
|
13
|
+
isError: boolean;
|
|
14
|
+
} | {
|
|
15
|
+
content: {
|
|
16
|
+
type: string;
|
|
17
|
+
text: string;
|
|
18
|
+
}[];
|
|
19
|
+
}>;
|
|
20
|
+
handleListPullRequests(args: any): Promise<{
|
|
21
|
+
content: {
|
|
22
|
+
type: string;
|
|
23
|
+
text: string;
|
|
24
|
+
}[];
|
|
25
|
+
isError: boolean;
|
|
26
|
+
} | {
|
|
27
|
+
content: {
|
|
28
|
+
type: string;
|
|
29
|
+
text: string;
|
|
30
|
+
}[];
|
|
31
|
+
}>;
|
|
32
|
+
handleCreatePullRequest(args: any): Promise<{
|
|
33
|
+
content: {
|
|
34
|
+
type: string;
|
|
35
|
+
text: string;
|
|
36
|
+
}[];
|
|
37
|
+
isError: boolean;
|
|
38
|
+
} | {
|
|
39
|
+
content: {
|
|
40
|
+
type: string;
|
|
41
|
+
text: string;
|
|
42
|
+
}[];
|
|
43
|
+
}>;
|
|
44
|
+
handleUpdatePullRequest(args: any): Promise<{
|
|
45
|
+
content: {
|
|
46
|
+
type: string;
|
|
47
|
+
text: string;
|
|
48
|
+
}[];
|
|
49
|
+
isError: boolean;
|
|
50
|
+
} | {
|
|
51
|
+
content: {
|
|
52
|
+
type: string;
|
|
53
|
+
text: string;
|
|
54
|
+
}[];
|
|
55
|
+
}>;
|
|
56
|
+
handleAddComment(args: any): Promise<{
|
|
57
|
+
content: {
|
|
58
|
+
type: string;
|
|
59
|
+
text: string;
|
|
60
|
+
}[];
|
|
61
|
+
isError: boolean;
|
|
62
|
+
} | {
|
|
63
|
+
content: {
|
|
64
|
+
type: string;
|
|
65
|
+
text: string;
|
|
66
|
+
}[];
|
|
67
|
+
}>;
|
|
68
|
+
handleMergePullRequest(args: any): Promise<{
|
|
69
|
+
content: {
|
|
70
|
+
type: string;
|
|
71
|
+
text: string;
|
|
72
|
+
}[];
|
|
73
|
+
isError: boolean;
|
|
74
|
+
} | {
|
|
75
|
+
content: {
|
|
76
|
+
type: string;
|
|
77
|
+
text: string;
|
|
78
|
+
}[];
|
|
79
|
+
}>;
|
|
80
|
+
private fetchPullRequestComments;
|
|
81
|
+
private fetchPullRequestFileChanges;
|
|
82
|
+
private resolveLineFromCode;
|
|
83
|
+
private findCodeMatches;
|
|
84
|
+
private calculateConfidence;
|
|
85
|
+
private getPreview;
|
|
86
|
+
private extractContext;
|
|
87
|
+
private selectBestMatch;
|
|
88
|
+
handleListPrCommits(args: any): Promise<{
|
|
89
|
+
content: {
|
|
90
|
+
type: string;
|
|
91
|
+
text: string;
|
|
92
|
+
}[];
|
|
93
|
+
isError: boolean;
|
|
94
|
+
} | {
|
|
95
|
+
content: {
|
|
96
|
+
type: string;
|
|
97
|
+
text: string;
|
|
98
|
+
}[];
|
|
99
|
+
}>;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=pull-request-handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull-request-handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/pull-request-handlers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AA6B5D,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;gBAFR,SAAS,EAAE,kBAAkB,EAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM;YAGZ,0BAA0B;IAqClC,oBAAoB,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;IAgG9B,sBAAsB,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;IAmFhC,uBAAuB,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;IAmFjC,uBAAuB,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;IAkGjC,gBAAgB,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;IA8I1B,sBAAsB,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;YA4DxB,wBAAwB;YA2HxB,2BAA2B;YAkE3B,mBAAmB;IAsGjC,OAAO,CAAC,eAAe;IAyGvB,OAAO,CAAC,mBAAmB;IAiD3B,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,eAAe;IAIjB,mBAAmB,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;CAwFpC"}
|