mcp-bitbucket-server 1.7.0 → 1.8.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.
- package/CLAUDE.md +120 -179
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/services/bitbucket.d.ts +3 -3
- package/dist/services/bitbucket.d.ts.map +1 -1
- package/dist/services/bitbucket.js +3 -3
- package/dist/services/bitbucket.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/pull-requests/add_pr_comment_reaction.js +3 -3
- package/dist/tools/pull-requests/add_pr_comment_reaction.js.map +1 -1
- package/dist/tools/pull-requests/create_pull_request.d.ts +3 -0
- package/dist/tools/pull-requests/create_pull_request.d.ts.map +1 -0
- package/dist/tools/pull-requests/create_pull_request.js +37 -0
- package/dist/tools/pull-requests/create_pull_request.js.map +1 -0
- package/dist/tools/pull-requests/get_pr_activities.js.map +1 -1
- package/dist/tools/pull-requests/index.d.ts +1 -0
- package/dist/tools/pull-requests/index.d.ts.map +1 -1
- package/dist/tools/pull-requests/index.js +1 -0
- package/dist/tools/pull-requests/index.js.map +1 -1
- package/dist/tools/pull-requests/remove_pr_comment_reaction.js +3 -3
- package/dist/tools/pull-requests/remove_pr_comment_reaction.js.map +1 -1
- package/dist/tools/tools.types.d.ts +1 -1
- package/package.json +2 -1
- package/dist/client/bitbucket.client.d.ts +0 -79
- package/dist/client/bitbucket.client.d.ts.map +0 -1
- package/dist/client/bitbucket.client.js +0 -176
- package/dist/client/bitbucket.client.js.map +0 -1
- package/dist/client/bitbucket.types.d.ts +0 -823
- package/dist/client/bitbucket.types.d.ts.map +0 -1
- package/dist/client/bitbucket.types.js +0 -5
- package/dist/client/bitbucket.types.js.map +0 -1
- package/dist/client/index.d.ts +0 -3
- package/dist/client/index.d.ts.map +0 -1
- package/dist/client/index.js +0 -4
- package/dist/client/index.js.map +0 -1
package/CLAUDE.md
CHANGED
|
@@ -8,21 +8,22 @@ This is an MCP (Model Context Protocol) server for Bitbucket Server/Data Center
|
|
|
8
8
|
- **User management**: Get user profile, list all users
|
|
9
9
|
- **Project operations**: List projects with filtering
|
|
10
10
|
- **Repository operations**: List repositories in a project
|
|
11
|
-
- **Pull request operations**:
|
|
11
|
+
- **Pull request operations**: Create PR, get PR details, get inbox PRs, get changed files, get full/file diffs (text and structured), add comments (three separate tools: general, file-level, and line-level), delete comments, add/remove emoticon reactions, get activities, update review status (approve/request changes)
|
|
12
12
|
|
|
13
13
|
## Architecture
|
|
14
14
|
|
|
15
|
-
This is a **simple, straightforward implementation**
|
|
15
|
+
This is a **simple, straightforward implementation** using the `bitbucket-data-center-client` library:
|
|
16
16
|
|
|
17
17
|
```
|
|
18
|
-
Tool →
|
|
18
|
+
Tool → bitbucketService (BitbucketClient) → Bitbucket Server REST API
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
**Key principles:**
|
|
22
|
-
-
|
|
22
|
+
- Use the `bitbucket-data-center-client` library for all API calls
|
|
23
|
+
- Type-safe client methods (no manual endpoint construction)
|
|
23
24
|
- Minimal error handling (let errors bubble up)
|
|
24
25
|
- Simple, readable code
|
|
25
|
-
- Verify
|
|
26
|
+
- Verify endpoint capabilities against Swagger documentation when needed
|
|
26
27
|
|
|
27
28
|
## Bitbucket Server API Documentation
|
|
28
29
|
|
|
@@ -40,23 +41,15 @@ grep -n '"/api/latest/users"' BitbucketServerSwagger.json
|
|
|
40
41
|
# Use the line number from grep, then read ~80 lines
|
|
41
42
|
```
|
|
42
43
|
|
|
43
|
-
### API Base URL
|
|
44
|
-
|
|
45
|
-
All endpoints use: `${BITBUCKET_URL}/rest/api/latest`
|
|
46
|
-
|
|
47
|
-
Example: `https://your-bitbucket-server.com/rest/api/latest/users`
|
|
48
|
-
|
|
49
44
|
### Authentication
|
|
50
45
|
|
|
51
|
-
|
|
46
|
+
The `bitbucket-data-center-client` library handles authentication automatically using Bearer tokens.
|
|
52
47
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
```
|
|
48
|
+
Configuration is done via environment variables in `.env`:
|
|
49
|
+
- `BITBUCKET_URL`: Your Bitbucket Server base URL
|
|
50
|
+
- `BITBUCKET_TOKEN`: Personal Access Token from Bitbucket Server
|
|
58
51
|
|
|
59
|
-
The
|
|
52
|
+
The library automatically adds the `Authorization: Bearer ${token}` header to all requests.
|
|
60
53
|
|
|
61
54
|
## Project Structure
|
|
62
55
|
|
|
@@ -65,134 +58,71 @@ src/
|
|
|
65
58
|
├── config.ts # Environment validation (BITBUCKET_URL, BITBUCKET_TOKEN)
|
|
66
59
|
├── index.ts # Main entry point, MCP server setup
|
|
67
60
|
├── services/
|
|
68
|
-
│ └── bitbucket.ts #
|
|
69
|
-
├── types/
|
|
70
|
-
│ ├── index.ts # Barrel export for all types
|
|
71
|
-
│ ├── common.ts # Shared types (PaginatedResponse)
|
|
72
|
-
│ ├── pull-request.ts # Pull request types (RestComment, RestPullRequest, etc.)
|
|
73
|
-
│ └── repository.ts # Repository-specific types
|
|
61
|
+
│ └── bitbucket.ts # BitbucketClient singleton (export const bitbucketService)
|
|
74
62
|
└── tools/
|
|
75
63
|
├── index.ts # Tool registration
|
|
76
64
|
├── users/
|
|
77
65
|
│ ├── index.ts # Barrel export
|
|
78
|
-
│ ├── get_user_profile.ts #
|
|
79
|
-
│ └── get_all_users.ts #
|
|
66
|
+
│ ├── get_user_profile.ts # User profile operations
|
|
67
|
+
│ └── get_all_users.ts # List all users
|
|
80
68
|
├── projects/
|
|
81
69
|
│ ├── index.ts # Barrel export
|
|
82
|
-
│ └── list_projects.ts #
|
|
70
|
+
│ └── list_projects.ts # List projects with filtering
|
|
83
71
|
├── repositories/
|
|
84
72
|
│ ├── index.ts # Barrel export
|
|
85
|
-
│ └── list_repositories.ts #
|
|
73
|
+
│ └── list_repositories.ts # List repositories in a project
|
|
86
74
|
└── pull-requests/
|
|
87
|
-
├── index.ts
|
|
88
|
-
├── get_inbox_pull_requests.ts
|
|
89
|
-
├──
|
|
90
|
-
├──
|
|
91
|
-
├──
|
|
92
|
-
├──
|
|
93
|
-
|
|
75
|
+
├── index.ts # Barrel export
|
|
76
|
+
├── get_inbox_pull_requests.ts # Get PRs in reviewer's inbox
|
|
77
|
+
├── get_pr_details.ts # Get full PR details
|
|
78
|
+
├── get_pr_diff.ts # Get PR diff (text or JSON)
|
|
79
|
+
├── add_pr_comment.ts # Add general/reply comment
|
|
80
|
+
├── add_pr_file_comment.ts # Add file-level comment
|
|
81
|
+
├── add_pr_line_comment.ts # Add line-specific comment
|
|
82
|
+
├── delete_pr_comment.ts # Delete comment
|
|
83
|
+
├── add_pr_comment_reaction.ts # Add emoticon reaction
|
|
84
|
+
├── remove_pr_comment_reaction.ts # Remove emoticon reaction
|
|
85
|
+
├── get_pr_changes.ts # Get changed files list
|
|
86
|
+
├── get_pr_file_diff.ts # Get structured file diff
|
|
87
|
+
├── get_pr_activities.ts # Get PR activities/comments
|
|
88
|
+
└── update_review_status.ts # Approve/request changes
|
|
94
89
|
```
|
|
95
90
|
|
|
96
91
|
## TypeScript Types
|
|
97
92
|
|
|
98
|
-
TypeScript
|
|
99
|
-
|
|
100
|
-
```
|
|
101
|
-
src/types/
|
|
102
|
-
├── index.ts # Barrel export (import from here)
|
|
103
|
-
├── common.ts # Shared types (PaginatedResponse)
|
|
104
|
-
├── pull-request.ts # Pull request types (RestComment, RestPullRequest, RestPullRequestParticipant, etc.)
|
|
105
|
-
└── repository.ts # Repository-specific types
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### Type Naming Conventions
|
|
109
|
-
|
|
110
|
-
- **Match Swagger schema names exactly**: `RestRepository`, `RestProject`, `RestPullRequest`
|
|
111
|
-
- **Use interfaces for objects**: `interface RestRepository { ... }`
|
|
112
|
-
- **Use union types for enums**: `type RepositoryState = "AVAILABLE" | "OFFLINE"`
|
|
113
|
-
- **Generic wrapper types**: `PaginatedResponse<T>` for paginated endpoints
|
|
114
|
-
- **Response type aliases**: `RepositoriesResponse = PaginatedResponse<RestRepository>`
|
|
115
|
-
|
|
116
|
-
### Adding New Types
|
|
117
|
-
|
|
118
|
-
1. **Find the schema in Swagger**:
|
|
119
|
-
```bash
|
|
120
|
-
grep -n '"RestTypeName"' BitbucketServerSwagger.json
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
2. **Create/update type file** (e.g., `src/types/domain.ts`):
|
|
124
|
-
```typescript
|
|
125
|
-
// Focus on readonly properties (what API returns)
|
|
126
|
-
export interface RestTypeName {
|
|
127
|
-
id: number;
|
|
128
|
-
name: string;
|
|
129
|
-
// ... other fields
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
export type DomainResponse = PaginatedResponse<RestTypeName>;
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
3. **Export from barrel file** (`src/types/index.ts`):
|
|
136
|
-
```typescript
|
|
137
|
-
export type { RestTypeName, DomainResponse } from "./domain.js";
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
4. **Use in tool**:
|
|
141
|
-
```typescript
|
|
142
|
-
import type { DomainResponse } from "../../types/index.js";
|
|
143
|
-
|
|
144
|
-
const response = await bitbucketClient.get<DomainResponse>("/endpoint");
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
### Type Design Principles
|
|
148
|
-
|
|
149
|
-
Following the project's simplicity philosophy:
|
|
150
|
-
|
|
151
|
-
**✅ DO:**
|
|
152
|
-
- Map types directly from Swagger schemas
|
|
153
|
-
- Focus on readonly properties (API responses)
|
|
154
|
-
- Keep types simple and minimal
|
|
155
|
-
- Use generic `PaginatedResponse<T>` for all paginated endpoints
|
|
156
|
-
|
|
157
|
-
**❌ DON'T:**
|
|
158
|
-
- Over-engineer with complex utility types
|
|
159
|
-
- Include writeOnly properties (used for requests)
|
|
160
|
-
- Add properties that aren't useful
|
|
161
|
-
- Create unnecessary type abstractions
|
|
162
|
-
|
|
163
|
-
## Tool Development Workflow
|
|
93
|
+
All TypeScript types are provided by the `bitbucket-data-center-client` library. You don't need to define or maintain types manually.
|
|
164
94
|
|
|
165
|
-
|
|
95
|
+
The library exports comprehensive types for:
|
|
96
|
+
- Users, projects, repositories
|
|
97
|
+
- Pull requests, comments, activities
|
|
98
|
+
- Diffs, changes, and review statuses
|
|
99
|
+
- Paginated responses
|
|
166
100
|
|
|
167
|
-
|
|
168
|
-
# Search for the endpoint
|
|
169
|
-
grep -n '"/api/latest/your-endpoint"' BitbucketServerSwagger.json
|
|
101
|
+
Simply import types from the library when needed:
|
|
170
102
|
|
|
171
|
-
|
|
172
|
-
|
|
103
|
+
```typescript
|
|
104
|
+
import type { RestPullRequest, RestComment } from 'bitbucket-data-center-client';
|
|
173
105
|
```
|
|
174
106
|
|
|
175
|
-
|
|
107
|
+
## Tool Development Workflow
|
|
176
108
|
|
|
177
|
-
|
|
178
|
-
- Path parameters (required in the URL)
|
|
179
|
-
- Query parameters (optional filters, pagination)
|
|
180
|
-
- Request body (for POST/PUT)
|
|
109
|
+
### 1. Check the Library Documentation
|
|
181
110
|
|
|
182
|
-
|
|
111
|
+
The `bitbucket-data-center-client` library provides all necessary methods. Check:
|
|
112
|
+
- Library README: https://github.com/evrimalacan/bitbucket-data-center-client
|
|
113
|
+
- Existing tools in `src/tools/` for examples
|
|
183
114
|
|
|
184
|
-
###
|
|
115
|
+
### 2. Implement the Tool
|
|
185
116
|
|
|
186
|
-
Follow this simple pattern:
|
|
117
|
+
Follow this simple pattern using the client library:
|
|
187
118
|
|
|
188
119
|
```typescript
|
|
189
120
|
import { z } from "zod";
|
|
190
121
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
191
|
-
import {
|
|
192
|
-
import type { YourResponseType } from "../../types/index.js";
|
|
122
|
+
import { bitbucketService } from "../../services/bitbucket.js";
|
|
193
123
|
|
|
194
124
|
const schema = z.object({
|
|
195
|
-
requiredParam: z.string().describe("Description
|
|
125
|
+
requiredParam: z.string().describe("Description of parameter"),
|
|
196
126
|
optionalParam: z.string().optional().describe("Optional parameter"),
|
|
197
127
|
});
|
|
198
128
|
|
|
@@ -201,21 +131,21 @@ export const toolNameTool = (server: McpServer) => {
|
|
|
201
131
|
"bitbucket_tool_name",
|
|
202
132
|
{
|
|
203
133
|
title: "Human Readable Title",
|
|
204
|
-
description: "
|
|
134
|
+
description: "Clear description of what this tool does",
|
|
205
135
|
inputSchema: schema.shape,
|
|
206
136
|
},
|
|
207
|
-
async (
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
137
|
+
async ({ requiredParam, optionalParam }) => {
|
|
138
|
+
// Call the appropriate library method
|
|
139
|
+
const result = await bitbucketService.someMethod({
|
|
140
|
+
requiredParam,
|
|
141
|
+
optionalParam,
|
|
212
142
|
});
|
|
213
143
|
|
|
214
144
|
return {
|
|
215
145
|
content: [
|
|
216
146
|
{
|
|
217
147
|
type: "text",
|
|
218
|
-
text: JSON.stringify(
|
|
148
|
+
text: JSON.stringify(result, null, 2),
|
|
219
149
|
},
|
|
220
150
|
],
|
|
221
151
|
};
|
|
@@ -224,7 +154,7 @@ export const toolNameTool = (server: McpServer) => {
|
|
|
224
154
|
};
|
|
225
155
|
```
|
|
226
156
|
|
|
227
|
-
###
|
|
157
|
+
### 3. Register the Tool
|
|
228
158
|
|
|
229
159
|
```typescript
|
|
230
160
|
// 1. Export from domain barrel file (e.g., src/tools/users/index.ts)
|
|
@@ -239,7 +169,7 @@ export function registerTools(server: McpServer) {
|
|
|
239
169
|
}
|
|
240
170
|
```
|
|
241
171
|
|
|
242
|
-
###
|
|
172
|
+
### 4. Run the Linter
|
|
243
173
|
|
|
244
174
|
Always run the linter after implementing a new tool:
|
|
245
175
|
|
|
@@ -254,48 +184,51 @@ The linter will auto-fix formatting, catch unused variables, and ensure code qua
|
|
|
254
184
|
### Keep It Simple
|
|
255
185
|
|
|
256
186
|
**✅ DO:**
|
|
257
|
-
- Use
|
|
258
|
-
- Minimal error handling (
|
|
187
|
+
- Use `bitbucketService` client methods: `bitbucketService.getUserProfile(...)`
|
|
188
|
+
- Minimal error handling (let errors bubble up)
|
|
259
189
|
- Short, focused functions
|
|
260
190
|
- Clear parameter names
|
|
191
|
+
- Destructure parameters directly in async handler
|
|
261
192
|
|
|
262
193
|
**❌ DON'T:**
|
|
263
|
-
- Add wrapper
|
|
194
|
+
- Add wrapper functions around the library
|
|
264
195
|
- Over-engineer error handling
|
|
265
196
|
- Add unnecessary abstractions
|
|
266
|
-
- Use try-catch unless required
|
|
197
|
+
- Use try-catch unless absolutely required
|
|
267
198
|
|
|
268
199
|
### Example: Simple Tool
|
|
269
200
|
|
|
270
201
|
```typescript
|
|
271
|
-
// ✅ Good - simple and direct
|
|
272
|
-
export const
|
|
273
|
-
server.registerTool(
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
202
|
+
// ✅ Good - simple and direct using the library
|
|
203
|
+
export const getUserProfileTool = (server: McpServer) => {
|
|
204
|
+
server.registerTool(
|
|
205
|
+
"bitbucket_get_user_profile",
|
|
206
|
+
{
|
|
207
|
+
title: "Get Bitbucket User Profile",
|
|
208
|
+
description: "Gets Bitbucket Server user profile details by username",
|
|
209
|
+
inputSchema: schema.shape,
|
|
210
|
+
},
|
|
211
|
+
async ({ username }) => {
|
|
212
|
+
const user = await bitbucketService.getUserProfile({ username });
|
|
213
|
+
|
|
214
|
+
return {
|
|
215
|
+
content: [{ type: "text", text: JSON.stringify(user, null, 2) }],
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
);
|
|
284
219
|
};
|
|
285
220
|
```
|
|
286
221
|
|
|
287
222
|
```typescript
|
|
288
223
|
// ❌ Bad - over-engineered
|
|
289
|
-
export const
|
|
290
|
-
server.registerTool("
|
|
224
|
+
export const getUserProfileTool = (server: McpServer) => {
|
|
225
|
+
server.registerTool("bitbucket_get_user_profile", { ... }, async (params) => {
|
|
291
226
|
try {
|
|
292
|
-
const
|
|
293
|
-
|
|
294
|
-
const
|
|
295
|
-
const client = getClient(); // Unnecessary wrapper
|
|
296
|
-
const response = await client.get("/users", queryParams);
|
|
227
|
+
const validated = validateParams(params); // Unnecessary - zod handles this
|
|
228
|
+
const client = getClient(); // Unnecessary - use bitbucketService directly
|
|
229
|
+
const response = await client.getUser(validated.username);
|
|
297
230
|
|
|
298
|
-
return
|
|
231
|
+
return formatResponse(response); // Over-abstracted
|
|
299
232
|
} catch (error) {
|
|
300
233
|
return handleError(error); // Let errors bubble
|
|
301
234
|
}
|
|
@@ -364,6 +297,28 @@ export const getAllUsersTool = (server: McpServer) => {
|
|
|
364
297
|
|
|
365
298
|
**Purpose**: Discover all PRs across all projects and repositories that need your review in one call. Much more efficient than querying project by project. Use the `id`, `projectKey`, and `repositorySlug` from the response to review specific PRs with other tools.
|
|
366
299
|
|
|
300
|
+
### bitbucket_create_pull_request
|
|
301
|
+
**File**: `src/tools/pull-requests/create_pull_request.ts`
|
|
302
|
+
**Endpoint**: `POST /projects/{projectKey}/repos/{repositorySlug}/pull-requests`
|
|
303
|
+
**Parameters**:
|
|
304
|
+
- `projectKey` (required): The Bitbucket Server project key
|
|
305
|
+
- `repositorySlug` (required): The repository slug
|
|
306
|
+
- `fromBranch` (required): Source branch name (e.g., "feature-x")
|
|
307
|
+
- `toBranch` (required): Target branch name (e.g., "main")
|
|
308
|
+
- `title` (required): PR title
|
|
309
|
+
- `description` (optional): PR description in markdown format
|
|
310
|
+
- `reviewers` (optional): Array of reviewer usernames to add
|
|
311
|
+
|
|
312
|
+
**Returns**: Created pull request object including `id`, `title`, `state`, `fromRef`, `toRef`, `author`, and web URL.
|
|
313
|
+
|
|
314
|
+
**Purpose**: Create a new pull request from a source branch to a target branch. Accepts simple branch names - they are automatically converted to full refs (e.g., "main" → "refs/heads/main").
|
|
315
|
+
|
|
316
|
+
**Error Cases**:
|
|
317
|
+
- 400: Malformed request
|
|
318
|
+
- 401: Insufficient permissions
|
|
319
|
+
- 404: Repository or branches don't exist
|
|
320
|
+
- 409: Branches are the same, PR already exists, or target repo is archived
|
|
321
|
+
|
|
367
322
|
### bitbucket_get_pull_request
|
|
368
323
|
**File**: `src/tools/pull-requests/get_pr_details.ts`
|
|
369
324
|
**Endpoint**: `GET /projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}`
|
|
@@ -568,7 +523,7 @@ export const getAllUsersTool = (server: McpServer) => {
|
|
|
568
523
|
- `repositorySlug` (required): The repository slug
|
|
569
524
|
- `pullRequestId` (required): The pull request ID
|
|
570
525
|
- `commentId` (required): The comment ID
|
|
571
|
-
- `emoticon` (required): The emoticon identifier - one of: `thumbsup`, `thumbsdown`, `heart`, `thinking_face`, `
|
|
526
|
+
- `emoticon` (required): The emoticon identifier - one of: `thumbsup`, `thumbsdown`, `heart`, `thinking_face`, `laughing`
|
|
572
527
|
|
|
573
528
|
**Returns**: RestUserReaction object with comment, emoticon details (shortcut, url), and user who reacted.
|
|
574
529
|
|
|
@@ -579,7 +534,7 @@ export const getAllUsersTool = (server: McpServer) => {
|
|
|
579
534
|
- `thumbsdown` - Thumbs down 👎
|
|
580
535
|
- `heart` - Heart ❤️
|
|
581
536
|
- `thinking_face` - Thinking face 🤔
|
|
582
|
-
- `
|
|
537
|
+
- `laughing` - Laughing face 😄
|
|
583
538
|
|
|
584
539
|
**Note**: Uses the Bitbucket Server comment-likes plugin API (`/rest/comment-likes/latest/`), not the core API.
|
|
585
540
|
|
|
@@ -591,7 +546,7 @@ export const getAllUsersTool = (server: McpServer) => {
|
|
|
591
546
|
- `repositorySlug` (required): The repository slug
|
|
592
547
|
- `pullRequestId` (required): The pull request ID
|
|
593
548
|
- `commentId` (required): The comment ID
|
|
594
|
-
- `emoticon` (required): The emoticon identifier to remove - one of: `thumbsup`, `thumbsdown`, `heart`, `thinking_face`, `
|
|
549
|
+
- `emoticon` (required): The emoticon identifier to remove - one of: `thumbsup`, `thumbsdown`, `heart`, `thinking_face`, `laughing`
|
|
595
550
|
|
|
596
551
|
**Returns**: Simple success message (204 No Content).
|
|
597
552
|
|
|
@@ -709,42 +664,28 @@ See `.env.example` for template.
|
|
|
709
664
|
|
|
710
665
|
### Pagination
|
|
711
666
|
|
|
712
|
-
|
|
667
|
+
The `bitbucket-data-center-client` library handles pagination automatically. Just pass the pagination parameters:
|
|
713
668
|
|
|
714
669
|
```typescript
|
|
715
|
-
const
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
limit: 25,
|
|
719
|
-
},
|
|
670
|
+
const result = await bitbucketService.listProjects({
|
|
671
|
+
start: 0,
|
|
672
|
+
limit: 25,
|
|
720
673
|
});
|
|
721
674
|
```
|
|
722
675
|
|
|
723
|
-
|
|
676
|
+
Paginated responses include:
|
|
724
677
|
- `values`: Array of results
|
|
725
678
|
- `size`: Number of results in this page
|
|
726
679
|
- `limit`: Page size
|
|
727
680
|
- `isLastPage`: Boolean
|
|
728
681
|
- `nextPageStart`: Start value for next page
|
|
729
682
|
|
|
730
|
-
### Error
|
|
683
|
+
### Error Handling
|
|
731
684
|
|
|
732
|
-
Bitbucket Server
|
|
733
|
-
|
|
734
|
-
```json
|
|
735
|
-
{
|
|
736
|
-
"errors": [
|
|
737
|
-
{
|
|
738
|
-
"context": "field_name",
|
|
739
|
-
"message": "Error description",
|
|
740
|
-
"exceptionName": "ExceptionType"
|
|
741
|
-
}
|
|
742
|
-
]
|
|
743
|
-
}
|
|
744
|
-
```
|
|
685
|
+
The library throws errors with Bitbucket Server's error format. Let them bubble up - the MCP SDK will handle them appropriately.
|
|
745
686
|
|
|
746
687
|
## Resources
|
|
747
688
|
|
|
748
|
-
- **
|
|
749
|
-
- **
|
|
750
|
-
- **
|
|
689
|
+
- **Library Documentation**: https://github.com/evrimalacan/bitbucket-data-center-client
|
|
690
|
+
- **Swagger Documentation**: `BitbucketServerSwagger.json` in project root (for reference)
|
|
691
|
+
- **Bitbucket Server REST API Docs**: Available via Bitbucket Server UI (triple dot menu)
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAIA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAIA,cAAc,8BAA8B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// ============ Library Exports ============
|
|
3
|
-
// Re-export
|
|
4
|
-
export * from '
|
|
3
|
+
// Re-export the Bitbucket client library (use bitbucket-data-center-client directly for library usage)
|
|
4
|
+
export * from 'bitbucket-data-center-client';
|
|
5
5
|
// ============ MCP Server Setup ============
|
|
6
6
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
7
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,4CAA4C;AAC5C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,4CAA4C;AAC5C,uGAAuG;AACvG,cAAc,8BAA8B,CAAC;AAE7C,6CAA6C;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,KAAK,UAAU,cAAc;IAC3B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,aAAa,CAAC,MAAM,CAAC,CAAC;IAEtB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,cAAc,EAAE,CAAC;AACzB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BitbucketClient } from 'bitbucket-data-center-client';
|
|
2
2
|
/**
|
|
3
|
-
* Singleton
|
|
3
|
+
* Singleton BitbucketClient instance for MCP tools.
|
|
4
4
|
* Created from environment configuration.
|
|
5
5
|
*/
|
|
6
|
-
export declare const bitbucketService:
|
|
6
|
+
export declare const bitbucketService: BitbucketClient;
|
|
7
7
|
//# sourceMappingURL=bitbucket.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitbucket.d.ts","sourceRoot":"","sources":["../../src/services/bitbucket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"bitbucket.d.ts","sourceRoot":"","sources":["../../src/services/bitbucket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAG/D;;;GAGG;AACH,eAAO,MAAM,gBAAgB,iBAG3B,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BitbucketClient } from 'bitbucket-data-center-client';
|
|
2
2
|
import { bitbucketConfig } from '../config.js';
|
|
3
3
|
/**
|
|
4
|
-
* Singleton
|
|
4
|
+
* Singleton BitbucketClient instance for MCP tools.
|
|
5
5
|
* Created from environment configuration.
|
|
6
6
|
*/
|
|
7
|
-
export const bitbucketService = new
|
|
7
|
+
export const bitbucketService = new BitbucketClient({
|
|
8
8
|
baseUrl: bitbucketConfig.baseUrl,
|
|
9
9
|
token: bitbucketConfig.token,
|
|
10
10
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitbucket.js","sourceRoot":"","sources":["../../src/services/bitbucket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"bitbucket.js","sourceRoot":"","sources":["../../src/services/bitbucket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,eAAe,CAAC;IAClD,OAAO,EAAE,eAAe,CAAC,OAAO;IAChC,KAAK,EAAE,eAAe,CAAC,KAAK;CAC7B,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAqBzE,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,QA0B9C"}
|
package/dist/tools/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { listProjectsTool } from './projects/index.js';
|
|
2
|
-
import { addPrCommentReactionTool, addPrCommentTool, addPrFileCommentTool, addPrLineCommentTool, deletePrCommentTool, getInboxPullRequestsTool, getPrActivitiesTool, getPrChangesTool, getPrFileDiffTool, getPullRequestDetailsTool, getPullRequestDiffTool, removePrCommentReactionTool, updateReviewStatusTool, } from './pull-requests/index.js';
|
|
2
|
+
import { addPrCommentReactionTool, addPrCommentTool, addPrFileCommentTool, addPrLineCommentTool, createPullRequestTool, deletePrCommentTool, getInboxPullRequestsTool, getPrActivitiesTool, getPrChangesTool, getPrFileDiffTool, getPullRequestDetailsTool, getPullRequestDiffTool, removePrCommentReactionTool, updateReviewStatusTool, } from './pull-requests/index.js';
|
|
3
3
|
import { listRepositoriesTool } from './repositories/index.js';
|
|
4
4
|
import { getAllUsersTool, getUserProfileTool } from './users/index.js';
|
|
5
5
|
export function registerTools(server) {
|
|
@@ -11,6 +11,7 @@ export function registerTools(server) {
|
|
|
11
11
|
// Repository tools
|
|
12
12
|
listRepositoriesTool(server);
|
|
13
13
|
// Pull request tools
|
|
14
|
+
createPullRequestTool(server);
|
|
14
15
|
getInboxPullRequestsTool(server);
|
|
15
16
|
getPullRequestDetailsTool(server);
|
|
16
17
|
addPrCommentTool(server);
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEvE,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC7C,aAAa;IACb,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,eAAe,CAAC,MAAM,CAAC,CAAC;IAExB,gBAAgB;IAChB,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEzB,mBAAmB;IACnB,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAE7B,qBAAqB;IACrB,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACpC,sBAAsB,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEvE,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC7C,aAAa;IACb,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,eAAe,CAAC,MAAM,CAAC,CAAC;IAExB,gBAAgB;IAChB,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEzB,mBAAmB;IACnB,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAE7B,qBAAqB;IACrB,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACpC,sBAAsB,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -6,13 +6,13 @@ const schema = z.object({
|
|
|
6
6
|
pullRequestId: z.number().describe('The pull request ID'),
|
|
7
7
|
commentId: z.number().describe('The comment ID'),
|
|
8
8
|
emoticon: z
|
|
9
|
-
.enum(['thumbsup', 'thumbsdown', 'heart', 'thinking_face', '
|
|
10
|
-
.describe('The emoticon to add (thumbsup, thumbsdown, heart, thinking_face,
|
|
9
|
+
.enum(['thumbsup', 'thumbsdown', 'heart', 'thinking_face', 'laughing'])
|
|
10
|
+
.describe('The emoticon to add (thumbsup, thumbsdown, heart, thinking_face, laughing)'),
|
|
11
11
|
});
|
|
12
12
|
export const addPrCommentReactionTool = (server) => {
|
|
13
13
|
server.registerTool('bitbucket_add_pr_comment_reaction', {
|
|
14
14
|
title: 'Add Emoticon Reaction to PR Comment',
|
|
15
|
-
description: 'Add an emoticon reaction to a pull request comment. Supported emoticons: thumbsup, thumbsdown, heart, thinking_face,
|
|
15
|
+
description: 'Add an emoticon reaction to a pull request comment. Supported emoticons: thumbsup, thumbsdown, heart, thinking_face, laughing. The operation is idempotent - adding the same reaction twice will succeed.',
|
|
16
16
|
inputSchema: schema.shape,
|
|
17
17
|
}, async ({ projectKey, repositorySlug, pullRequestId, commentId, emoticon }) => {
|
|
18
18
|
const result = await bitbucketService.addPullRequestCommentReaction({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add_pr_comment_reaction.js","sourceRoot":"","sources":["../../../src/tools/pull-requests/add_pr_comment_reaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC5D,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC1D,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACzD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAChD,QAAQ,EAAE,CAAC;SACR,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"add_pr_comment_reaction.js","sourceRoot":"","sources":["../../../src/tools/pull-requests/add_pr_comment_reaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC5D,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC1D,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACzD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAChD,QAAQ,EAAE,CAAC;SACR,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;SACtE,QAAQ,CAAC,4EAA4E,CAAC;CAC1F,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,MAAiB,EAAE,EAAE;IAC5D,MAAM,CAAC,YAAY,CACjB,mCAAmC,EACnC;QACE,KAAK,EAAE,qCAAqC;QAC5C,WAAW,EACT,2MAA2M;QAC7M,WAAW,EAAE,MAAM,CAAC,KAAK;KAC1B,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC3E,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,6BAA6B,CAAC;YAClE,UAAU;YACV,cAAc;YACd,aAAa;YACb,SAAS;YACT,QAAQ;SACT,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,aAAa,MAAM,CAAC,QAAQ,CAAC,QAAQ,mCAAmC,SAAS,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG;iBACzH;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_pull_request.d.ts","sourceRoot":"","sources":["../../../src/tools/pull-requests/create_pull_request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAczE,eAAO,MAAM,qBAAqB,GAAI,QAAQ,SAAS,SA8BtD,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { bitbucketService } from '../../services/bitbucket.js';
|
|
3
|
+
const schema = z.object({
|
|
4
|
+
projectKey: z.string().describe('The Bitbucket project key'),
|
|
5
|
+
repositorySlug: z.string().describe('The repository slug'),
|
|
6
|
+
fromBranch: z.string().describe('Source branch name (e.g., "feature-x")'),
|
|
7
|
+
toBranch: z.string().describe('Target branch name (e.g., "main")'),
|
|
8
|
+
title: z.string().describe('PR title'),
|
|
9
|
+
description: z.string().optional().describe('PR description in markdown format'),
|
|
10
|
+
reviewers: z.array(z.string()).optional().describe('Array of reviewer usernames to add'),
|
|
11
|
+
});
|
|
12
|
+
export const createPullRequestTool = (server) => {
|
|
13
|
+
server.registerTool('bitbucket_create_pull_request', {
|
|
14
|
+
title: 'Create Pull Request',
|
|
15
|
+
description: 'Create a new pull request from a source branch to a target branch. Accepts simple branch names (e.g., "feature-x", "main") - they are automatically converted to full refs. Returns the created PR details including ID, title, state, and web URL.',
|
|
16
|
+
inputSchema: schema.shape,
|
|
17
|
+
}, async ({ projectKey, repositorySlug, fromBranch, toBranch, title, description, reviewers }) => {
|
|
18
|
+
const result = await bitbucketService.createPullRequest({
|
|
19
|
+
projectKey,
|
|
20
|
+
repositorySlug,
|
|
21
|
+
title,
|
|
22
|
+
description,
|
|
23
|
+
fromBranch,
|
|
24
|
+
toBranch,
|
|
25
|
+
reviewers,
|
|
26
|
+
});
|
|
27
|
+
return {
|
|
28
|
+
content: [
|
|
29
|
+
{
|
|
30
|
+
type: 'text',
|
|
31
|
+
text: JSON.stringify(result, null, 2),
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=create_pull_request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_pull_request.js","sourceRoot":"","sources":["../../../src/tools/pull-requests/create_pull_request.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC5D,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC1D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IACzE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAClE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;IACtC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAChF,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;CACzF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,MAAiB,EAAE,EAAE;IACzD,MAAM,CAAC,YAAY,CACjB,+BAA+B,EAC/B;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,qPAAqP;QACvP,WAAW,EAAE,MAAM,CAAC,KAAK;KAC1B,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE;QAC5F,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,iBAAiB,CAAC;YACtD,UAAU;YACV,cAAc;YACd,KAAK;YACL,WAAW;YACX,UAAU;YACV,QAAQ;YACR,SAAS;SACV,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;iBACtC;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC,CAAC"}
|