@tugudush/bitbucket-mcp 1.4.13 → 1.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 (41) hide show
  1. package/build/api.d.ts +20 -0
  2. package/build/api.d.ts.map +1 -1
  3. package/build/api.js +108 -37
  4. package/build/api.js.map +1 -1
  5. package/build/handlers/index.d.ts +16 -0
  6. package/build/handlers/index.d.ts.map +1 -0
  7. package/build/handlers/index.js +50 -0
  8. package/build/handlers/index.js.map +1 -0
  9. package/build/handlers/issue.d.ts +13 -0
  10. package/build/handlers/issue.d.ts.map +1 -0
  11. package/build/handlers/issue.js +48 -0
  12. package/build/handlers/issue.js.map +1 -0
  13. package/build/handlers/pullrequest.d.ts +21 -0
  14. package/build/handlers/pullrequest.d.ts.map +1 -0
  15. package/build/handlers/pullrequest.js +103 -0
  16. package/build/handlers/pullrequest.js.map +1 -0
  17. package/build/handlers/repository.d.ts +29 -0
  18. package/build/handlers/repository.d.ts.map +1 -0
  19. package/build/handlers/repository.js +236 -0
  20. package/build/handlers/repository.js.map +1 -0
  21. package/build/handlers/search.d.ts +13 -0
  22. package/build/handlers/search.d.ts.map +1 -0
  23. package/build/handlers/search.js +78 -0
  24. package/build/handlers/search.js.map +1 -0
  25. package/build/handlers/types.d.ts +27 -0
  26. package/build/handlers/types.d.ts.map +1 -0
  27. package/build/handlers/types.js +21 -0
  28. package/build/handlers/types.js.map +1 -0
  29. package/build/handlers/workspace.d.ts +21 -0
  30. package/build/handlers/workspace.d.ts.map +1 -0
  31. package/build/handlers/workspace.js +71 -0
  32. package/build/handlers/workspace.js.map +1 -0
  33. package/build/index.d.ts +5 -1
  34. package/build/index.d.ts.map +1 -1
  35. package/build/index.js +3 -1
  36. package/build/index.js.map +1 -1
  37. package/build/tools.d.ts +13 -0
  38. package/build/tools.d.ts.map +1 -1
  39. package/build/tools.js +26 -595
  40. package/build/tools.js.map +1 -1
  41. package/package.json +1 -1
package/build/api.d.ts CHANGED
@@ -1,7 +1,27 @@
1
+ import { Config } from './config.js';
2
+ /**
3
+ * Bitbucket API configuration and request handling
4
+ */
5
+ export declare const VERSION = "1.5.0";
1
6
  export declare const BITBUCKET_API_BASE = "https://api.bitbucket.org/2.0";
7
+ /**
8
+ * Build authentication headers based on available credentials
9
+ * Priority: API Token (with email) > App Password (with username)
10
+ * @param config - Configuration object (optional, will load from env if not provided)
11
+ * @returns Headers object with Authorization if credentials available
12
+ */
13
+ export declare function buildAuthHeaders(config?: Config): Record<string, string>;
14
+ /**
15
+ * Build standard request headers for Bitbucket API
16
+ * @param accept - Accept header value (default: 'application/json')
17
+ * @param config - Configuration object (optional)
18
+ * @returns Complete headers object
19
+ */
20
+ export declare function buildRequestHeaders(accept?: string, config?: Config): Record<string, string>;
2
21
  /**
3
22
  * Helper function to make authenticated requests to Bitbucket API
4
23
  * Enforces read-only behavior by blocking non-GET requests
24
+ * Includes timeout and retry logic for improved reliability
5
25
  */
6
26
  export declare function makeRequest<T = unknown>(url: string, options?: RequestInit): Promise<T>;
7
27
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,kBAAkB,kCAAkC,CAAC;AAElE;;;GAGG;AACH,wBAAsB,WAAW,CAAC,CAAC,GAAG,OAAO,EAC3C,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,CAAC,CAAC,CA0DZ;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,eAAe,CAgBjB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAUR"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,EAAE,MAAM,aAAa,CAAC;AAIjD;;GAEG;AAGH,eAAO,MAAM,OAAO,UAAU,CAAC;AAQ/B,eAAO,MAAM,kBAAkB,kCAAkC,CAAC;AAElE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmBxE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,GAAE,MAA2B,EACnC,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMxB;AAiBD;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,CAAC,GAAG,OAAO,EAC3C,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,CAAC,CAAC,CAkGZ;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,eAAe,CAgBjB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAUR"}
package/build/api.js CHANGED
@@ -4,15 +4,65 @@ import { API_CONSTANTS } from './schemas.js';
4
4
  /**
5
5
  * Bitbucket API configuration and request handling
6
6
  */
7
+ // Package version - kept in sync with package.json
8
+ export const VERSION = '1.5.0';
7
9
  // Get config dynamically to handle environment changes
8
10
  function getConfig() {
9
11
  return loadConfig();
10
12
  }
11
13
  // Bitbucket API base URL
12
14
  export const BITBUCKET_API_BASE = 'https://api.bitbucket.org/2.0';
15
+ /**
16
+ * Build authentication headers based on available credentials
17
+ * Priority: API Token (with email) > App Password (with username)
18
+ * @param config - Configuration object (optional, will load from env if not provided)
19
+ * @returns Headers object with Authorization if credentials available
20
+ */
21
+ export function buildAuthHeaders(config) {
22
+ const cfg = config || getConfig();
23
+ const headers = {};
24
+ if (cfg.BITBUCKET_API_TOKEN && cfg.BITBUCKET_EMAIL) {
25
+ // Use API Token with Basic authentication (recommended)
26
+ const auth = Buffer.from(`${cfg.BITBUCKET_EMAIL}:${cfg.BITBUCKET_API_TOKEN}`).toString('base64');
27
+ headers.Authorization = `Basic ${auth}`;
28
+ }
29
+ else if (cfg.BITBUCKET_USERNAME && cfg.BITBUCKET_APP_PASSWORD) {
30
+ // Fallback to App Password with Basic authentication (legacy)
31
+ const auth = Buffer.from(`${cfg.BITBUCKET_USERNAME}:${cfg.BITBUCKET_APP_PASSWORD}`).toString('base64');
32
+ headers.Authorization = `Basic ${auth}`;
33
+ }
34
+ return headers;
35
+ }
36
+ /**
37
+ * Build standard request headers for Bitbucket API
38
+ * @param accept - Accept header value (default: 'application/json')
39
+ * @param config - Configuration object (optional)
40
+ * @returns Complete headers object
41
+ */
42
+ export function buildRequestHeaders(accept = 'application/json', config) {
43
+ return {
44
+ Accept: accept,
45
+ 'User-Agent': `bitbucket-mcp-server/${VERSION}`,
46
+ ...buildAuthHeaders(config),
47
+ };
48
+ }
49
+ /**
50
+ * Check if an error is retryable (transient failures)
51
+ */
52
+ function isRetryableError(status) {
53
+ // Retry on server errors (5xx) and rate limiting (429)
54
+ return status >= 500 || status === 429;
55
+ }
56
+ /**
57
+ * Sleep for a specified duration
58
+ */
59
+ function sleep(ms) {
60
+ return new Promise(resolve => setTimeout(resolve, ms));
61
+ }
13
62
  /**
14
63
  * Helper function to make authenticated requests to Bitbucket API
15
64
  * Enforces read-only behavior by blocking non-GET requests
65
+ * Includes timeout and retry logic for improved reliability
16
66
  */
17
67
  export async function makeRequest(url, options = {}) {
18
68
  // Enforce read-only behavior: block any non-GET methods at runtime
@@ -20,50 +70,71 @@ export async function makeRequest(url, options = {}) {
20
70
  if (requestedMethod !== 'GET') {
21
71
  throw new Error(`Only GET requests are allowed. Attempted: ${requestedMethod} ${url}`);
22
72
  }
73
+ const config = getConfig();
23
74
  const headers = {
24
- Accept: 'application/json',
25
- 'User-Agent': 'bitbucket-mcp-server/1.0.0',
75
+ ...buildRequestHeaders('application/json', config),
26
76
  ...(options.headers || {}),
27
77
  };
28
- // Add authentication if available
29
- // Priority: API Token (Basic auth with email) > App Password (Basic auth with username)
30
- const config = getConfig();
31
- const apiToken = config.BITBUCKET_API_TOKEN;
32
- const email = config.BITBUCKET_EMAIL;
33
- const username = config.BITBUCKET_USERNAME;
34
- const appPassword = config.BITBUCKET_APP_PASSWORD;
35
- if (apiToken && email) {
36
- // Use API Token with Basic authentication (recommended)
37
- // Username should be your Atlassian email, password is the API token
38
- const auth = Buffer.from(`${email}:${apiToken}`).toString('base64');
39
- headers.Authorization = `Basic ${auth}`;
40
- }
41
- else if (username && appPassword) {
42
- // Fallback to App Password with Basic authentication (legacy)
43
- const auth = Buffer.from(`${username}:${appPassword}`).toString('base64');
44
- headers.Authorization = `Basic ${auth}`;
45
- }
46
- const response = await fetch(url, {
47
- ...options,
48
- // Force GET to prevent accidental method overrides downstream
49
- method: 'GET',
50
- headers,
51
- });
52
- if (!response.ok) {
53
- const errorText = await response.text();
54
- // Try to parse error details
55
- let errorData;
78
+ const timeout = config.BITBUCKET_REQUEST_TIMEOUT;
79
+ let lastError = null;
80
+ // Retry loop for transient failures
81
+ for (let attempt = 1; attempt <= API_CONSTANTS.RETRY_ATTEMPTS; attempt++) {
82
+ // Create abort controller for timeout
83
+ const controller = new AbortController();
84
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
56
85
  try {
57
- errorData = JSON.parse(errorText);
86
+ const response = await fetch(url, {
87
+ ...options,
88
+ // Force GET to prevent accidental method overrides downstream
89
+ method: 'GET',
90
+ headers,
91
+ signal: controller.signal,
92
+ });
93
+ clearTimeout(timeoutId);
94
+ if (!response.ok) {
95
+ const errorText = await response.text();
96
+ // Try to parse error details
97
+ let errorData;
98
+ try {
99
+ errorData = JSON.parse(errorText);
100
+ }
101
+ catch {
102
+ // If JSON parsing fails, use raw error text
103
+ errorData = { message: errorText };
104
+ }
105
+ // Check if we should retry
106
+ if (isRetryableError(response.status) &&
107
+ attempt < API_CONSTANTS.RETRY_ATTEMPTS) {
108
+ // Exponential backoff: 1s, 2s, 4s...
109
+ const backoffMs = Math.pow(2, attempt - 1) * 1000;
110
+ await sleep(backoffMs);
111
+ lastError = createApiError(response.status, response.statusText, errorData, url);
112
+ continue;
113
+ }
114
+ // Create and throw appropriate error type
115
+ throw createApiError(response.status, response.statusText, errorData, url);
116
+ }
117
+ return await response.json();
58
118
  }
59
- catch {
60
- // If JSON parsing fails, use raw error text
61
- errorData = { message: errorText };
119
+ catch (error) {
120
+ clearTimeout(timeoutId);
121
+ // Handle abort/timeout errors
122
+ if (error instanceof Error && error.name === 'AbortError') {
123
+ lastError = new Error(`Request timeout after ${timeout}ms: ${url}`);
124
+ if (attempt < API_CONSTANTS.RETRY_ATTEMPTS) {
125
+ const backoffMs = Math.pow(2, attempt - 1) * 1000;
126
+ await sleep(backoffMs);
127
+ continue;
128
+ }
129
+ throw lastError;
130
+ }
131
+ // Re-throw non-retryable errors
132
+ throw error;
62
133
  }
63
- // Create and throw appropriate error type
64
- throw createApiError(response.status, response.statusText, errorData, url);
65
134
  }
66
- return await response.json();
135
+ // Should not reach here, but throw last error if we do
136
+ throw (lastError ||
137
+ new Error(`Request failed after ${API_CONSTANTS.RETRY_ATTEMPTS} attempts`));
67
138
  }
68
139
  /**
69
140
  * Build URL for Bitbucket API endpoints
package/build/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Handlers module - exports all tool handlers and registry
3
+ */
4
+ export * from './types.js';
5
+ export { handleGetRepository, handleListRepositories, handleGetBranches, handleGetCommits, handleBrowseRepository, handleGetFileContent, } from './repository.js';
6
+ export { handleGetPullRequests, handleGetPullRequest, handleGetPullRequestComments, handleGetPullRequestActivity, } from './pullrequest.js';
7
+ export { handleGetIssues, handleGetIssue } from './issue.js';
8
+ export { handleListWorkspaces, handleGetWorkspace, handleGetUser, handleGetCurrentUser, } from './workspace.js';
9
+ export { handleSearchRepositories, handleSearchCode } from './search.js';
10
+ import type { ToolHandler } from './types.js';
11
+ /**
12
+ * Registry mapping tool names to their handler functions
13
+ * This eliminates the need for a large switch statement
14
+ */
15
+ export declare const toolHandlers: Record<string, ToolHandler>;
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG7D,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAwB9C;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA4BpD,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Handlers module - exports all tool handlers and registry
3
+ */
4
+ // Re-export types
5
+ export * from './types.js';
6
+ // Repository handlers
7
+ export { handleGetRepository, handleListRepositories, handleGetBranches, handleGetCommits, handleBrowseRepository, handleGetFileContent, } from './repository.js';
8
+ // Pull request handlers
9
+ export { handleGetPullRequests, handleGetPullRequest, handleGetPullRequestComments, handleGetPullRequestActivity, } from './pullrequest.js';
10
+ // Issue handlers
11
+ export { handleGetIssues, handleGetIssue } from './issue.js';
12
+ // Workspace/user handlers
13
+ export { handleListWorkspaces, handleGetWorkspace, handleGetUser, handleGetCurrentUser, } from './workspace.js';
14
+ // Search handlers
15
+ export { handleSearchRepositories, handleSearchCode } from './search.js';
16
+ import { handleGetRepository, handleListRepositories, handleGetBranches, handleGetCommits, handleBrowseRepository, handleGetFileContent, } from './repository.js';
17
+ import { handleGetPullRequests, handleGetPullRequest, handleGetPullRequestComments, handleGetPullRequestActivity, } from './pullrequest.js';
18
+ import { handleGetIssues, handleGetIssue } from './issue.js';
19
+ import { handleListWorkspaces, handleGetWorkspace, handleGetUser, handleGetCurrentUser, } from './workspace.js';
20
+ import { handleSearchRepositories, handleSearchCode } from './search.js';
21
+ /**
22
+ * Registry mapping tool names to their handler functions
23
+ * This eliminates the need for a large switch statement
24
+ */
25
+ export const toolHandlers = {
26
+ // Repository tools
27
+ bb_get_repository: handleGetRepository,
28
+ bb_list_repositories: handleListRepositories,
29
+ bb_get_branches: handleGetBranches,
30
+ bb_get_commits: handleGetCommits,
31
+ bb_browse_repository: handleBrowseRepository,
32
+ bb_get_file_content: handleGetFileContent,
33
+ // Pull request tools
34
+ bb_get_pull_requests: handleGetPullRequests,
35
+ bb_get_pull_request: handleGetPullRequest,
36
+ bb_get_pull_request_comments: handleGetPullRequestComments,
37
+ bb_get_pull_request_activity: handleGetPullRequestActivity,
38
+ // Issue tools
39
+ bb_get_issues: handleGetIssues,
40
+ bb_get_issue: handleGetIssue,
41
+ // Workspace/user tools
42
+ bb_list_workspaces: handleListWorkspaces,
43
+ bb_get_workspace: handleGetWorkspace,
44
+ bb_get_user: handleGetUser,
45
+ bb_get_current_user: handleGetCurrentUser,
46
+ // Search tools
47
+ bb_search_repositories: handleSearchRepositories,
48
+ bb_search_code: handleSearchCode,
49
+ };
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,kBAAkB;AAClB,cAAc,YAAY,CAAC;AAE3B,sBAAsB;AACtB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAEzB,wBAAwB;AACxB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC;AAE1B,iBAAiB;AACjB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE7D,0BAA0B;AAC1B,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,kBAAkB;AAClB,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIzE,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEzE;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAgC;IACvD,mBAAmB;IACnB,iBAAiB,EAAE,mBAAmB;IACtC,oBAAoB,EAAE,sBAAsB;IAC5C,eAAe,EAAE,iBAAiB;IAClC,cAAc,EAAE,gBAAgB;IAChC,oBAAoB,EAAE,sBAAsB;IAC5C,mBAAmB,EAAE,oBAAoB;IAEzC,qBAAqB;IACrB,oBAAoB,EAAE,qBAAqB;IAC3C,mBAAmB,EAAE,oBAAoB;IACzC,4BAA4B,EAAE,4BAA4B;IAC1D,4BAA4B,EAAE,4BAA4B;IAE1D,cAAc;IACd,aAAa,EAAE,eAAe;IAC9B,YAAY,EAAE,cAAc;IAE5B,uBAAuB;IACvB,kBAAkB,EAAE,oBAAoB;IACxC,gBAAgB,EAAE,kBAAkB;IACpC,WAAW,EAAE,aAAa;IAC1B,mBAAmB,EAAE,oBAAoB;IAEzC,eAAe;IACf,sBAAsB,EAAE,wBAAwB;IAChD,cAAc,EAAE,gBAAgB;CACjC,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Issue-related tool handlers
3
+ */
4
+ import { ToolResponse } from './types.js';
5
+ /**
6
+ * Get issues for a repository
7
+ */
8
+ export declare function handleGetIssues(args: unknown): Promise<ToolResponse>;
9
+ /**
10
+ * Get detailed information about a specific issue
11
+ */
12
+ export declare function handleGetIssue(args: unknown): Promise<ToolResponse>;
13
+ //# sourceMappingURL=issue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../src/handlers/issue.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAkB,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1D;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CA8B1E;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAkBzE"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Issue-related tool handlers
3
+ */
4
+ import { GetIssuesSchema, GetIssueSchema } from '../schemas.js';
5
+ import { makeRequest, buildApiUrl, addQueryParams } from '../api.js';
6
+ import { createResponse } from './types.js';
7
+ /**
8
+ * Get issues for a repository
9
+ */
10
+ export async function handleGetIssues(args) {
11
+ const parsed = GetIssuesSchema.parse(args);
12
+ const params = {
13
+ state: parsed.state,
14
+ kind: parsed.kind,
15
+ page: parsed.page,
16
+ pagelen: parsed.pagelen,
17
+ };
18
+ const url = addQueryParams(buildApiUrl(`/repositories/${parsed.workspace}/${parsed.repo_slug}/issues`), params);
19
+ const data = await makeRequest(url);
20
+ const issueList = data.values
21
+ .map((issue) => `- #${issue.id}: ${issue.title}\n` +
22
+ ` State: ${issue.state}\n` +
23
+ ` Kind: ${issue.kind}\n` +
24
+ ` Priority: ${issue.priority}\n` +
25
+ ` Reporter: ${issue.reporter.display_name}\n` +
26
+ ` Assignee: ${issue.assignee?.display_name || 'Unassigned'}\n` +
27
+ ` Created: ${issue.created_on}`)
28
+ .join('\n\n');
29
+ return createResponse(`Issues for ${parsed.workspace}/${parsed.repo_slug} (${data.size} total):\n\n${issueList}`);
30
+ }
31
+ /**
32
+ * Get detailed information about a specific issue
33
+ */
34
+ export async function handleGetIssue(args) {
35
+ const parsed = GetIssueSchema.parse(args);
36
+ const url = buildApiUrl(`/repositories/${parsed.workspace}/${parsed.repo_slug}/issues/${parsed.issue_id}`);
37
+ const data = await makeRequest(url);
38
+ return createResponse(`Issue #${data.id}: ${data.title}\n` +
39
+ `State: ${data.state}\n` +
40
+ `Kind: ${data.kind}\n` +
41
+ `Priority: ${data.priority}\n` +
42
+ `Reporter: ${data.reporter.display_name}\n` +
43
+ `Assignee: ${data.assignee?.display_name || 'Unassigned'}\n` +
44
+ `Created: ${data.created_on}\n` +
45
+ `Updated: ${data.updated_on}\n` +
46
+ `Content:\n${data.content?.raw || 'No content'}`);
47
+ }
48
+ //# sourceMappingURL=issue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue.js","sourceRoot":"","sources":["../../src/handlers/issue.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAErE,OAAO,EAAE,cAAc,EAAgB,MAAM,YAAY,CAAC;AAE1D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAa;IACjD,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC;IACF,MAAM,GAAG,GAAG,cAAc,CACxB,WAAW,CAAC,iBAAiB,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,SAAS,CAAC,EAC3E,MAAM,CACP,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,WAAW,CAAuC,GAAG,CAAC,CAAC;IAE1E,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM;SAC1B,GAAG,CACF,CAAC,KAAqB,EAAE,EAAE,CACxB,MAAM,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,KAAK,IAAI;QAClC,YAAY,KAAK,CAAC,KAAK,IAAI;QAC3B,WAAW,KAAK,CAAC,IAAI,IAAI;QACzB,eAAe,KAAK,CAAC,QAAQ,IAAI;QACjC,eAAe,KAAK,CAAC,QAAQ,CAAC,YAAY,IAAI;QAC9C,eAAe,KAAK,CAAC,QAAQ,EAAE,YAAY,IAAI,YAAY,IAAI;QAC/D,cAAc,KAAK,CAAC,UAAU,EAAE,CACnC;SACA,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,OAAO,cAAc,CACnB,cAAc,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,eAAe,SAAS,EAAE,CAC3F,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAa;IAChD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,WAAW,CACrB,iBAAiB,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,WAAW,MAAM,CAAC,QAAQ,EAAE,CAClF,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,WAAW,CAAiB,GAAG,CAAC,CAAC;IAEpD,OAAO,cAAc,CACnB,UAAU,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK,IAAI;QAClC,UAAU,IAAI,CAAC,KAAK,IAAI;QACxB,SAAS,IAAI,CAAC,IAAI,IAAI;QACtB,aAAa,IAAI,CAAC,QAAQ,IAAI;QAC9B,aAAa,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI;QAC3C,aAAa,IAAI,CAAC,QAAQ,EAAE,YAAY,IAAI,YAAY,IAAI;QAC5D,YAAY,IAAI,CAAC,UAAU,IAAI;QAC/B,YAAY,IAAI,CAAC,UAAU,IAAI;QAC/B,aAAa,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,YAAY,EAAE,CACnD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Pull request-related tool handlers
3
+ */
4
+ import { ToolResponse } from './types.js';
5
+ /**
6
+ * Get pull requests for a repository
7
+ */
8
+ export declare function handleGetPullRequests(args: unknown): Promise<ToolResponse>;
9
+ /**
10
+ * Get detailed information about a specific pull request
11
+ */
12
+ export declare function handleGetPullRequest(args: unknown): Promise<ToolResponse>;
13
+ /**
14
+ * Get comments for a specific pull request
15
+ */
16
+ export declare function handleGetPullRequestComments(args: unknown): Promise<ToolResponse>;
17
+ /**
18
+ * Get activity for a specific pull request
19
+ */
20
+ export declare function handleGetPullRequestActivity(args: unknown): Promise<ToolResponse>;
21
+ //# sourceMappingURL=pullrequest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pullrequest.d.ts","sourceRoot":"","sources":["../../src/handlers/pullrequest.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,OAAO,EAAkB,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1D;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,YAAY,CAAC,CA8BvB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,YAAY,CAAC,CAiBvB;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,YAAY,CAAC,CA4BvB;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,YAAY,CAAC,CAmDvB"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Pull request-related tool handlers
3
+ */
4
+ import { GetPullRequestsSchema, GetPullRequestSchema, GetPullRequestCommentsSchema, GetPullRequestActivitySchema, } from '../schemas.js';
5
+ import { makeRequest, buildApiUrl, addQueryParams } from '../api.js';
6
+ import { createResponse } from './types.js';
7
+ /**
8
+ * Get pull requests for a repository
9
+ */
10
+ export async function handleGetPullRequests(args) {
11
+ const parsed = GetPullRequestsSchema.parse(args);
12
+ const params = {
13
+ state: parsed.state,
14
+ page: parsed.page,
15
+ pagelen: parsed.pagelen,
16
+ };
17
+ const url = addQueryParams(buildApiUrl(`/repositories/${parsed.workspace}/${parsed.repo_slug}/pullrequests`), params);
18
+ const data = await makeRequest(url);
19
+ const prList = data.values
20
+ .map((pr) => `- #${pr.id}: ${pr.title}\n` +
21
+ ` Author: ${pr.author.display_name}\n` +
22
+ ` State: ${pr.state}\n` +
23
+ ` Created: ${pr.created_on}\n` +
24
+ ` Source: ${pr.source.branch.name} → ${pr.destination.branch.name}`)
25
+ .join('\n\n');
26
+ return createResponse(`Pull requests for ${parsed.workspace}/${parsed.repo_slug} (${data.size} total):\n\n${prList}`);
27
+ }
28
+ /**
29
+ * Get detailed information about a specific pull request
30
+ */
31
+ export async function handleGetPullRequest(args) {
32
+ const parsed = GetPullRequestSchema.parse(args);
33
+ const url = buildApiUrl(`/repositories/${parsed.workspace}/${parsed.repo_slug}/pullrequests/${parsed.pull_request_id}`);
34
+ const data = await makeRequest(url);
35
+ return createResponse(`Pull Request #${data.id}: ${data.title}\n` +
36
+ `Author: ${data.author.display_name}\n` +
37
+ `State: ${data.state}\n` +
38
+ `Created: ${data.created_on}\n` +
39
+ `Updated: ${data.updated_on}\n` +
40
+ `Source: ${data.source.branch.name} → ${data.destination.branch.name}\n` +
41
+ `Description:\n${data.description || 'No description'}\n` +
42
+ `Reviewers: ${data.reviewers?.map(r => r.display_name).join(', ') || 'None'}`);
43
+ }
44
+ /**
45
+ * Get comments for a specific pull request
46
+ */
47
+ export async function handleGetPullRequestComments(args) {
48
+ const parsed = GetPullRequestCommentsSchema.parse(args);
49
+ const params = {
50
+ page: parsed.page,
51
+ pagelen: parsed.pagelen,
52
+ };
53
+ const url = addQueryParams(buildApiUrl(`/repositories/${parsed.workspace}/${parsed.repo_slug}/pullrequests/${parsed.pull_request_id}/comments`), params);
54
+ const data = await makeRequest(url);
55
+ const commentList = data.values
56
+ .map((comment) => `- ${comment.user.display_name} (${comment.created_on}):\n` +
57
+ ` ${comment.content?.raw || 'No content'}\n` +
58
+ (comment.inline
59
+ ? ` File: ${comment.inline.path}, Line: ${comment.inline.to || comment.inline.from}`
60
+ : ''))
61
+ .join('\n\n');
62
+ return createResponse(`Comments for PR #${parsed.pull_request_id} (${data.size} total):\n\n${commentList}`);
63
+ }
64
+ /**
65
+ * Get activity for a specific pull request
66
+ */
67
+ export async function handleGetPullRequestActivity(args) {
68
+ const parsed = GetPullRequestActivitySchema.parse(args);
69
+ const params = {
70
+ page: parsed.page,
71
+ pagelen: parsed.pagelen,
72
+ };
73
+ const url = addQueryParams(buildApiUrl(`/repositories/${parsed.workspace}/${parsed.repo_slug}/pullrequests/${parsed.pull_request_id}/activity`), params);
74
+ const data = await makeRequest(url);
75
+ const activityList = data.values
76
+ .map((activity) => {
77
+ // Handle cases where user might be undefined/null (system activities)
78
+ const userName = activity.user?.display_name || 'System';
79
+ const actionDate = activity.created_on || activity.update?.date || 'Unknown date';
80
+ const action = activity.action || 'Activity';
81
+ let activityText = `- ${userName} (${actionDate}):\n` + ` Action: ${action}`;
82
+ // Add comment if present
83
+ if (activity.comment) {
84
+ activityText += `\n Comment: ${activity.comment.content?.raw || 'No content'}`;
85
+ }
86
+ // Add approval if present
87
+ if (activity.approval) {
88
+ activityText += `\n Approval: ${activity.approval.state || 'Unknown state'}`;
89
+ }
90
+ // Add update if present
91
+ if (activity.update) {
92
+ const updateAuthor = activity.update.author?.display_name || 'Unknown';
93
+ activityText += `\n Update: ${activity.update.state || 'Updated'} by ${updateAuthor}`;
94
+ if (activity.update.title) {
95
+ activityText += `\n Title changed to: ${activity.update.title}`;
96
+ }
97
+ }
98
+ return activityText;
99
+ })
100
+ .join('\n\n');
101
+ return createResponse(`Activity for PR #${parsed.pull_request_id} (${data.size} total):\n\n${activityList}`);
102
+ }
103
+ //# sourceMappingURL=pullrequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pullrequest.js","sourceRoot":"","sources":["../../src/handlers/pullrequest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Repository-related tool handlers
3
+ */
4
+ import { ToolResponse } from './types.js';
5
+ /**
6
+ * Get detailed information about a specific repository
7
+ */
8
+ export declare function handleGetRepository(args: unknown): Promise<ToolResponse>;
9
+ /**
10
+ * List repositories in a workspace
11
+ */
12
+ export declare function handleListRepositories(args: unknown): Promise<ToolResponse>;
13
+ /**
14
+ * Get branches for a repository
15
+ */
16
+ export declare function handleGetBranches(args: unknown): Promise<ToolResponse>;
17
+ /**
18
+ * Get commits for a repository branch
19
+ */
20
+ export declare function handleGetCommits(args: unknown): Promise<ToolResponse>;
21
+ /**
22
+ * Browse files and directories in a repository
23
+ */
24
+ export declare function handleBrowseRepository(args: unknown): Promise<ToolResponse>;
25
+ /**
26
+ * Get the content of a file from a repository
27
+ */
28
+ export declare function handleGetFileContent(args: unknown): Promise<ToolResponse>;
29
+ //# sourceMappingURL=repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/handlers/repository.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyBH,OAAO,EAAkB,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1D;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,YAAY,CAAC,CAmBvB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,YAAY,CAAC,CAyBvB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CA2B5E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CA2B3E;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,YAAY,CAAC,CA2GvB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,YAAY,CAAC,CA+EvB"}