@achieveai/azuredevops-mcp 1.3.16 → 1.3.18
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/dist/Interfaces/Common.js +10 -1
- package/dist/Interfaces/Common.js.map +1 -1
- package/dist/Services/AzureDevOpsService.js +234 -31
- package/dist/Services/AzureDevOpsService.js.map +1 -1
- package/dist/Services/BoardsSprintsService.js +105 -13
- package/dist/Services/BoardsSprintsService.js.map +1 -1
- package/dist/Services/BuildService.js +151 -24
- package/dist/Services/BuildService.js.map +1 -1
- package/dist/Services/GitService.js +26 -3
- package/dist/Services/GitService.js.map +1 -1
- package/dist/Services/ProjectService.js +47 -6
- package/dist/Services/ProjectService.js.map +1 -1
- package/dist/Services/WorkItemService.js +218 -97
- package/dist/Services/WorkItemService.js.map +1 -1
- package/dist/Tools/BoardsSprintsTools.js +2 -8
- package/dist/Tools/BoardsSprintsTools.js.map +1 -1
- package/dist/Tools/BuildTools.js +5 -8
- package/dist/Tools/BuildTools.js.map +1 -1
- package/dist/Tools/WorkItemTools.js +111 -74
- package/dist/Tools/WorkItemTools.js.map +1 -1
- package/dist/index.js +24 -12
- package/dist/index.js.map +1 -1
- package/dist/utils/formatHelpers.js +15 -0
- package/dist/utils/formatHelpers.js.map +1 -1
- package/package.json +2 -2
- package/dist/Services/BuildService.project.test.js +0 -91
- package/dist/Services/BuildService.project.test.js.map +0 -1
- package/dist/Services/GitService.project.test.js +0 -407
- package/dist/Services/GitService.project.test.js.map +0 -1
|
@@ -17,9 +17,13 @@ function formatMcpResponse(data, message, isError = false, includeStructuredCont
|
|
|
17
17
|
// When a message is provided, use it as the sole content (markdown-formatted tools)
|
|
18
18
|
// Only fall back to JSON dump when no message is provided at all
|
|
19
19
|
const hasMessage = message && message.length > 0;
|
|
20
|
+
const throttleInfo = data?.throttleInfo;
|
|
21
|
+
const throttleBanner = throttleInfo?.throttled
|
|
22
|
+
? `Warning: Azure DevOps throttled this operation. Waited ${(throttleInfo.totalWaitMs / 1000).toFixed(1)}s across ${throttleInfo.retryCount} retr${throttleInfo.retryCount === 1 ? 'y' : 'ies'} before continuing. This usually means too many requests are being sent in a short period.\n\n---\n\n`
|
|
23
|
+
: '';
|
|
20
24
|
const response = {
|
|
21
25
|
content: hasMessage
|
|
22
|
-
? [{ type: "text", text: message }]
|
|
26
|
+
? [{ type: "text", text: `${throttleBanner}${message}` }]
|
|
23
27
|
: [
|
|
24
28
|
{ type: "text", text: isError ? "Error occurred" : "Request successful" },
|
|
25
29
|
{ type: "text", text: typeof data === 'string' ? data : JSON.stringify(data, null, 2) }
|
|
@@ -81,7 +85,12 @@ function setErrorContext(context) {
|
|
|
81
85
|
function formatErrorResponse(error) {
|
|
82
86
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
83
87
|
let md = `Error: ${errorMessage}`;
|
|
88
|
+
const throttleInfo = error?.throttleInfo;
|
|
84
89
|
const lower = errorMessage.toLowerCase();
|
|
90
|
+
if (throttleInfo?.throttled || error?.statusCode === 429 || lower.includes('too many requests') || lower.includes('rate limit') || lower.includes('throttle')) {
|
|
91
|
+
const totalWait = throttleInfo?.totalWaitMs ? `${(throttleInfo.totalWaitMs / 1000).toFixed(1)}s` : 'a retry window';
|
|
92
|
+
md += `\n\n**Azure DevOps is throttling requests.** The server waited for ${totalWait} before giving up. This indicates too many requests are being sent in a short period.`;
|
|
93
|
+
}
|
|
85
94
|
// Auth error hints
|
|
86
95
|
const statusCode = error?.statusCode || error?.status;
|
|
87
96
|
if (statusCode === 401 || statusCode === 403 || lower.includes('unauthorized') || lower.includes('authentication failed')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Common.js","sourceRoot":"","sources":["../../src/Interfaces/Common.ts"],"names":[],"mappings":";;AA0BA,
|
|
1
|
+
{"version":3,"file":"Common.js","sourceRoot":"","sources":["../../src/Interfaces/Common.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,11 +35,26 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.AzureDevOpsService = void 0;
|
|
37
37
|
const azdev = __importStar(require("azure-devops-node-api"));
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const os = __importStar(require("os"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
38
41
|
const WebApi_1 = require("azure-devops-node-api/WebApi");
|
|
39
42
|
const EntraAuthHandler_1 = require("./EntraAuthHandler");
|
|
40
43
|
const repositoryResolver_1 = require("../utils/repositoryResolver");
|
|
44
|
+
const PACKAGE_VERSION = (() => {
|
|
45
|
+
try {
|
|
46
|
+
const packageJsonPath = path.resolve(__dirname, "../../package.json");
|
|
47
|
+
const packageJsonContent = fs.readFileSync(packageJsonPath, "utf8");
|
|
48
|
+
const packageJson = JSON.parse(packageJsonContent);
|
|
49
|
+
return packageJson.version || "0.0.0";
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return "0.0.0";
|
|
53
|
+
}
|
|
54
|
+
})();
|
|
41
55
|
class AzureDevOpsService {
|
|
42
56
|
constructor(config) {
|
|
57
|
+
this.throttleNotices = [];
|
|
43
58
|
this.config = config;
|
|
44
59
|
// Get the appropriate authentication handler
|
|
45
60
|
const tokenCredentialAuthTypes = ["entra", "azcli", "interactive"];
|
|
@@ -96,9 +111,22 @@ class AzureDevOpsService {
|
|
|
96
111
|
}
|
|
97
112
|
// Create options for the WebApi
|
|
98
113
|
const requestOptions = {};
|
|
114
|
+
const hostName = os.hostname().replace(/[^A-Za-z0-9._-]/g, '_');
|
|
115
|
+
let userName = 'unknown-user';
|
|
116
|
+
try {
|
|
117
|
+
userName = os.userInfo().username.replace(/[^A-Za-z0-9._-]/g, '_');
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// Best effort only; keep the client traceable even if user info is unavailable.
|
|
121
|
+
}
|
|
122
|
+
const userAgent = `azuredevops-mcp/${PACKAGE_VERSION} (${hostName}; ${userName})`;
|
|
123
|
+
requestOptions.headers = {
|
|
124
|
+
'User-Agent': userAgent,
|
|
125
|
+
};
|
|
99
126
|
// For on-premises with API version specification, we'll add it to request headers
|
|
100
127
|
if (config.isOnPremises && config.apiVersion) {
|
|
101
128
|
requestOptions.headers = {
|
|
129
|
+
...requestOptions.headers,
|
|
102
130
|
Accept: `application/json;api-version=${config.apiVersion}`,
|
|
103
131
|
};
|
|
104
132
|
}
|
|
@@ -117,45 +145,201 @@ class AzureDevOpsService {
|
|
|
117
145
|
* Catches auth errors (401/403) at the service layer even if the HTTP-level
|
|
118
146
|
* retry in TokenCredentialAuthHandler didn't fire (e.g. SDK swallowed it).
|
|
119
147
|
*/
|
|
120
|
-
async withAuthRetry(operation) {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
const isAuthError = statusCode === 401 || statusCode === 403
|
|
128
|
-
|| message.includes('unauthorized') || message.includes('authentication failed');
|
|
129
|
-
if (isAuthError && this.authHandler instanceof EntraAuthHandler_1.TokenCredentialAuthHandler) {
|
|
130
|
-
console.error(`[Auth] Service-layer auth retry: refreshing token...`);
|
|
131
|
-
await this.authHandler.forceRefresh();
|
|
148
|
+
async withAuthRetry(operation, context, throttleAccumulator) {
|
|
149
|
+
let authRetried = false;
|
|
150
|
+
let throttleRetried = 0;
|
|
151
|
+
const contextLabel = this.formatRetryContext(context);
|
|
152
|
+
const notices = throttleAccumulator ?? this.throttleNotices;
|
|
153
|
+
while (true) {
|
|
154
|
+
try {
|
|
132
155
|
return await operation();
|
|
133
156
|
}
|
|
134
|
-
|
|
157
|
+
catch (error) {
|
|
158
|
+
const statusCode = error?.statusCode || error?.status;
|
|
159
|
+
const message = (error?.message || '').toLowerCase();
|
|
160
|
+
const isAuthError = statusCode === 401 || statusCode === 403
|
|
161
|
+
|| message.includes('unauthorized') || message.includes('authentication failed');
|
|
162
|
+
if (isAuthError && !authRetried && this.authHandler instanceof EntraAuthHandler_1.TokenCredentialAuthHandler) {
|
|
163
|
+
authRetried = true;
|
|
164
|
+
console.error(`[Auth] Service-layer auth retry: refreshing token${contextLabel ? ` for ${contextLabel}` : ''}...`);
|
|
165
|
+
await this.authHandler.forceRefresh();
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
const throttleInfo = this.getThrottleInfo(error);
|
|
169
|
+
if (throttleInfo && throttleRetried < 2) {
|
|
170
|
+
throttleRetried += 1;
|
|
171
|
+
notices.push({
|
|
172
|
+
...throttleInfo,
|
|
173
|
+
observedAt: new Date().toISOString(),
|
|
174
|
+
});
|
|
175
|
+
console.error(`[Throttle] Azure DevOps throttled request${contextLabel ? ` for ${contextLabel}` : ''}. Waiting ${throttleInfo.waitMs}ms before retry ${throttleRetried}.`);
|
|
176
|
+
await this.sleep(throttleInfo.waitMs);
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
if (throttleInfo) {
|
|
180
|
+
error.throttleInfo = {
|
|
181
|
+
throttled: true,
|
|
182
|
+
retryCount: throttleRetried,
|
|
183
|
+
totalWaitMs: notices.reduce((sum, notice) => sum + notice.waitMs, 0),
|
|
184
|
+
notices: [...notices, { ...throttleInfo, observedAt: new Date().toISOString() }],
|
|
185
|
+
context,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
throw error;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
static buildThrottleInfo(notices) {
|
|
193
|
+
if (notices.length === 0) {
|
|
194
|
+
return undefined;
|
|
195
|
+
}
|
|
196
|
+
return {
|
|
197
|
+
throttled: true,
|
|
198
|
+
retryCount: notices.length,
|
|
199
|
+
totalWaitMs: notices.reduce((sum, notice) => sum + notice.waitMs, 0),
|
|
200
|
+
notices,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
drainThrottleInfo() {
|
|
204
|
+
if (this.throttleNotices.length === 0) {
|
|
205
|
+
return undefined;
|
|
135
206
|
}
|
|
207
|
+
const notices = [...this.throttleNotices];
|
|
208
|
+
this.throttleNotices = [];
|
|
209
|
+
return AzureDevOpsService.buildThrottleInfo(notices);
|
|
210
|
+
}
|
|
211
|
+
async sleep(waitMs) {
|
|
212
|
+
await new Promise((resolve) => setTimeout(resolve, waitMs));
|
|
213
|
+
}
|
|
214
|
+
getThrottleInfo(error) {
|
|
215
|
+
const statusCode = error?.statusCode || error?.status;
|
|
216
|
+
const message = String(error?.message || '').toLowerCase();
|
|
217
|
+
const isThrottle = statusCode === 429
|
|
218
|
+
|| message.includes('rate limit')
|
|
219
|
+
|| message.includes('too many requests')
|
|
220
|
+
|| message.includes('throttle');
|
|
221
|
+
if (!isThrottle) {
|
|
222
|
+
return undefined;
|
|
223
|
+
}
|
|
224
|
+
const headers = error?.response?.headers || error?.headers || error?.result?.headers || error?.response?.message?.headers;
|
|
225
|
+
const retryAfter = this.getHeaderValue(headers, 'retry-after');
|
|
226
|
+
const rateLimitDelay = this.getHeaderValue(headers, 'x-ratelimit-delay');
|
|
227
|
+
let waitMs = 15000;
|
|
228
|
+
let reason = 'Azure DevOps is throttling requests.';
|
|
229
|
+
if (retryAfter) {
|
|
230
|
+
const retryAfterSeconds = Number(retryAfter);
|
|
231
|
+
if (!Number.isNaN(retryAfterSeconds)) {
|
|
232
|
+
waitMs = Math.max(1, Math.ceil(retryAfterSeconds)) * 1000;
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
const retryDate = Date.parse(retryAfter);
|
|
236
|
+
if (!Number.isNaN(retryDate)) {
|
|
237
|
+
waitMs = Math.max(1000, retryDate - Date.now());
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
reason = `Azure DevOps requested a retry after ${retryAfter}.`;
|
|
241
|
+
}
|
|
242
|
+
else if (rateLimitDelay) {
|
|
243
|
+
const delaySeconds = Number(rateLimitDelay);
|
|
244
|
+
if (!Number.isNaN(delaySeconds)) {
|
|
245
|
+
waitMs = Math.max(1, Math.ceil(delaySeconds)) * 1000;
|
|
246
|
+
}
|
|
247
|
+
reason = `Azure DevOps returned X-RateLimit-Delay=${rateLimitDelay}.`;
|
|
248
|
+
}
|
|
249
|
+
return {
|
|
250
|
+
waitMs,
|
|
251
|
+
statusCode,
|
|
252
|
+
reason,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
getHeaderValue(headers, name) {
|
|
256
|
+
if (!headers) {
|
|
257
|
+
return undefined;
|
|
258
|
+
}
|
|
259
|
+
if (typeof headers.get === 'function') {
|
|
260
|
+
return headers.get(name) || headers.get(name.toLowerCase()) || undefined;
|
|
261
|
+
}
|
|
262
|
+
if (Array.isArray(headers)) {
|
|
263
|
+
const match = headers.find((entry) => Array.isArray(entry) && String(entry[0]).toLowerCase() === name.toLowerCase());
|
|
264
|
+
return match ? String(match[1]) : undefined;
|
|
265
|
+
}
|
|
266
|
+
if (typeof headers === 'object') {
|
|
267
|
+
const key = Object.keys(headers).find((headerName) => headerName.toLowerCase() === name.toLowerCase());
|
|
268
|
+
if (key) {
|
|
269
|
+
const value = headers[key];
|
|
270
|
+
return Array.isArray(value) ? String(value[0]) : String(value);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return undefined;
|
|
274
|
+
}
|
|
275
|
+
formatRetryContext(context) {
|
|
276
|
+
if (!context?.operationName) {
|
|
277
|
+
return '';
|
|
278
|
+
}
|
|
279
|
+
const details = context.details
|
|
280
|
+
? Object.entries(context.details)
|
|
281
|
+
.filter(([, value]) => value !== undefined)
|
|
282
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
283
|
+
.join(', ')
|
|
284
|
+
: '';
|
|
285
|
+
return details ? `${context.operationName} (${details})` : context.operationName;
|
|
286
|
+
}
|
|
287
|
+
getRequestedFields(fields, defaults) {
|
|
288
|
+
const selected = fields && fields.length > 0 ? fields : (defaults || AzureDevOpsService.BASE_SUMMARY_FIELDS);
|
|
289
|
+
return Array.from(new Set(selected));
|
|
290
|
+
}
|
|
291
|
+
transformSummaryWorkItem(workItem) {
|
|
292
|
+
const fields = workItem.fields || {};
|
|
293
|
+
return {
|
|
294
|
+
id: workItem.id,
|
|
295
|
+
url: workItem.url,
|
|
296
|
+
title: fields['System.Title'],
|
|
297
|
+
teamProject: fields['System.TeamProject'],
|
|
298
|
+
workItemType: fields['System.WorkItemType'],
|
|
299
|
+
state: fields['System.State'],
|
|
300
|
+
assignedTo: fields['System.AssignedTo'] ? {
|
|
301
|
+
displayName: fields['System.AssignedTo'].displayName,
|
|
302
|
+
uniqueName: fields['System.AssignedTo'].uniqueName,
|
|
303
|
+
} : null,
|
|
304
|
+
createdBy: fields['System.CreatedBy'] ? {
|
|
305
|
+
displayName: fields['System.CreatedBy'].displayName,
|
|
306
|
+
uniqueName: fields['System.CreatedBy'].uniqueName,
|
|
307
|
+
} : null,
|
|
308
|
+
createdDate: fields['System.CreatedDate'],
|
|
309
|
+
changedDate: fields['System.ChangedDate'],
|
|
310
|
+
areaPath: fields['System.AreaPath'],
|
|
311
|
+
iterationPath: fields['System.IterationPath'],
|
|
312
|
+
priority: fields['Microsoft.VSTS.Common.Priority'],
|
|
313
|
+
originalEstimate: fields['Microsoft.VSTS.Scheduling.OriginalEstimate'],
|
|
314
|
+
completedWork: fields['Microsoft.VSTS.Scheduling.CompletedWork'],
|
|
315
|
+
remainingWork: fields['Microsoft.VSTS.Scheduling.RemainingWork'],
|
|
316
|
+
fields,
|
|
317
|
+
};
|
|
136
318
|
}
|
|
137
319
|
/**
|
|
138
|
-
*
|
|
320
|
+
* Batch-fetch work item details for an array of refs (IDs or relation objects).
|
|
321
|
+
* Handles the ADO 200-ID-per-call limit automatically.
|
|
139
322
|
*/
|
|
140
|
-
async
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
// Return the work items
|
|
150
|
-
return {
|
|
151
|
-
workItems: queryResult.workItems || [],
|
|
152
|
-
count: queryResult.workItems?.length || 0,
|
|
153
|
-
};
|
|
323
|
+
async hydrateWorkItemRefs(refs, options) {
|
|
324
|
+
const extractId = options?.extractId ?? ((ref) => ref?.id);
|
|
325
|
+
const project = options?.project ?? this.config.project;
|
|
326
|
+
const operationName = options?.operationName ?? 'batchHydrate';
|
|
327
|
+
const ids = (refs || [])
|
|
328
|
+
.map(extractId)
|
|
329
|
+
.filter((id) => typeof id === 'number');
|
|
330
|
+
if (ids.length === 0) {
|
|
331
|
+
return [];
|
|
154
332
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
333
|
+
const witApi = await this.getWorkItemTrackingApi();
|
|
334
|
+
const requestedFields = this.getRequestedFields(options?.fields, options?.defaults);
|
|
335
|
+
const BATCH_SIZE = 200;
|
|
336
|
+
const allWorkItems = [];
|
|
337
|
+
for (let i = 0; i < ids.length; i += BATCH_SIZE) {
|
|
338
|
+
const batch = ids.slice(i, i + BATCH_SIZE);
|
|
339
|
+
const batchResult = await this.withAuthRetry(() => witApi.getWorkItems(batch, requestedFields, undefined, undefined, undefined, project), { operationName, details: { project, ids: batch.length, fields: requestedFields.length } }, options?.throttleAccumulator);
|
|
340
|
+
allWorkItems.push(...(batchResult || []));
|
|
158
341
|
}
|
|
342
|
+
return allWorkItems.map((workItem) => this.transformSummaryWorkItem(workItem));
|
|
159
343
|
}
|
|
160
344
|
/**
|
|
161
345
|
* Get the authenticated user's ID, cached after first resolution.
|
|
@@ -188,4 +372,23 @@ class AzureDevOpsService {
|
|
|
188
372
|
}
|
|
189
373
|
}
|
|
190
374
|
exports.AzureDevOpsService = AzureDevOpsService;
|
|
375
|
+
AzureDevOpsService.BASE_SUMMARY_FIELDS = [
|
|
376
|
+
'System.Id',
|
|
377
|
+
'System.Title',
|
|
378
|
+
'System.TeamProject',
|
|
379
|
+
'System.WorkItemType',
|
|
380
|
+
'System.State',
|
|
381
|
+
'System.AssignedTo',
|
|
382
|
+
'System.CreatedBy',
|
|
383
|
+
'System.CreatedDate',
|
|
384
|
+
'System.ChangedDate',
|
|
385
|
+
'System.AreaPath',
|
|
386
|
+
'System.IterationPath',
|
|
387
|
+
'Microsoft.VSTS.Common.Priority',
|
|
388
|
+
];
|
|
389
|
+
AzureDevOpsService.SCHEDULING_FIELDS = [
|
|
390
|
+
'Microsoft.VSTS.Scheduling.OriginalEstimate',
|
|
391
|
+
'Microsoft.VSTS.Scheduling.CompletedWork',
|
|
392
|
+
'Microsoft.VSTS.Scheduling.RemainingWork',
|
|
393
|
+
];
|
|
191
394
|
//# sourceMappingURL=AzureDevOpsService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AzureDevOpsService.js","sourceRoot":"","sources":["../../src/Services/AzureDevOpsService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AzureDevOpsService.js","sourceRoot":"","sources":["../../src/Services/AzureDevOpsService.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,7 +34,13 @@ class BoardsSprintsService extends AzureDevOpsService_1.AzureDevOpsService {
|
|
|
34
34
|
try {
|
|
35
35
|
const workApi = await this.getWorkApi();
|
|
36
36
|
const teamContext = this.getTeamContext(params.teamId);
|
|
37
|
-
const boards = await workApi.getBoards(teamContext)
|
|
37
|
+
const boards = await this.withAuthRetry(() => workApi.getBoards(teamContext), {
|
|
38
|
+
operationName: 'boards.list',
|
|
39
|
+
details: {
|
|
40
|
+
project: this.config.project,
|
|
41
|
+
teamId: params.teamId,
|
|
42
|
+
},
|
|
43
|
+
});
|
|
38
44
|
return boards;
|
|
39
45
|
}
|
|
40
46
|
catch (error) {
|
|
@@ -49,7 +55,14 @@ class BoardsSprintsService extends AzureDevOpsService_1.AzureDevOpsService {
|
|
|
49
55
|
try {
|
|
50
56
|
const workApi = await this.getWorkApi();
|
|
51
57
|
const teamContext = this.getTeamContext(params.teamId);
|
|
52
|
-
const columns = await workApi.getBoardColumns(teamContext, params.boardId)
|
|
58
|
+
const columns = await this.withAuthRetry(() => workApi.getBoardColumns(teamContext, params.boardId), {
|
|
59
|
+
operationName: 'boards.columns.list',
|
|
60
|
+
details: {
|
|
61
|
+
project: this.config.project,
|
|
62
|
+
teamId: params.teamId,
|
|
63
|
+
boardId: params.boardId,
|
|
64
|
+
},
|
|
65
|
+
});
|
|
53
66
|
return columns;
|
|
54
67
|
}
|
|
55
68
|
catch (error) {
|
|
@@ -66,9 +79,23 @@ class BoardsSprintsService extends AzureDevOpsService_1.AzureDevOpsService {
|
|
|
66
79
|
const teamContext = this.getTeamContext(params.teamId);
|
|
67
80
|
// Get board cards - use a different approach since getCardsBySettings doesn't exist
|
|
68
81
|
// First get the board
|
|
69
|
-
const board = await workApi.getBoard(teamContext, params.boardId)
|
|
82
|
+
const board = await this.withAuthRetry(() => workApi.getBoard(teamContext, params.boardId), {
|
|
83
|
+
operationName: 'boards.get',
|
|
84
|
+
details: {
|
|
85
|
+
project: this.config.project,
|
|
86
|
+
teamId: params.teamId,
|
|
87
|
+
boardId: params.boardId,
|
|
88
|
+
},
|
|
89
|
+
});
|
|
70
90
|
// Then get the board columns
|
|
71
|
-
const columns = await workApi.getBoardColumns(teamContext, params.boardId)
|
|
91
|
+
const columns = await this.withAuthRetry(() => workApi.getBoardColumns(teamContext, params.boardId), {
|
|
92
|
+
operationName: 'boards.items.columns',
|
|
93
|
+
details: {
|
|
94
|
+
project: this.config.project,
|
|
95
|
+
teamId: params.teamId,
|
|
96
|
+
boardId: params.boardId,
|
|
97
|
+
},
|
|
98
|
+
});
|
|
72
99
|
// Combine the data
|
|
73
100
|
return {
|
|
74
101
|
board,
|
|
@@ -112,7 +139,13 @@ class BoardsSprintsService extends AzureDevOpsService_1.AzureDevOpsService {
|
|
|
112
139
|
try {
|
|
113
140
|
const workApi = await this.getWorkApi();
|
|
114
141
|
const teamContext = this.getTeamContext(params.teamId);
|
|
115
|
-
const sprints = await workApi.getTeamIterations(teamContext)
|
|
142
|
+
const sprints = await this.withAuthRetry(() => workApi.getTeamIterations(teamContext), {
|
|
143
|
+
operationName: 'sprints.list',
|
|
144
|
+
details: {
|
|
145
|
+
project: this.config.project,
|
|
146
|
+
teamId: params.teamId,
|
|
147
|
+
},
|
|
148
|
+
});
|
|
116
149
|
return sprints;
|
|
117
150
|
}
|
|
118
151
|
catch (error) {
|
|
@@ -127,7 +160,13 @@ class BoardsSprintsService extends AzureDevOpsService_1.AzureDevOpsService {
|
|
|
127
160
|
try {
|
|
128
161
|
const workApi = await this.getWorkApi();
|
|
129
162
|
const teamContext = this.getTeamContext(params.teamId);
|
|
130
|
-
const currentIterations = await workApi.getTeamIterations(teamContext, "current")
|
|
163
|
+
const currentIterations = await this.withAuthRetry(() => workApi.getTeamIterations(teamContext, "current"), {
|
|
164
|
+
operationName: 'sprints.current',
|
|
165
|
+
details: {
|
|
166
|
+
project: this.config.project,
|
|
167
|
+
teamId: params.teamId,
|
|
168
|
+
},
|
|
169
|
+
});
|
|
131
170
|
return currentIterations && currentIterations.length > 0 ? currentIterations[0] : null;
|
|
132
171
|
}
|
|
133
172
|
catch (error) {
|
|
@@ -142,8 +181,29 @@ class BoardsSprintsService extends AzureDevOpsService_1.AzureDevOpsService {
|
|
|
142
181
|
try {
|
|
143
182
|
const workApi = await this.getWorkApi();
|
|
144
183
|
const teamContext = this.getTeamContext(params.teamId);
|
|
145
|
-
const
|
|
146
|
-
|
|
184
|
+
const throttleNotices = [];
|
|
185
|
+
const workItems = await this.withAuthRetry(() => workApi.getIterationWorkItems(teamContext, params.sprintId), {
|
|
186
|
+
operationName: 'boards.sprint.getIterationWorkItems',
|
|
187
|
+
details: {
|
|
188
|
+
project: this.config.project,
|
|
189
|
+
sprintId: params.sprintId,
|
|
190
|
+
teamId: params.teamId,
|
|
191
|
+
},
|
|
192
|
+
}, throttleNotices);
|
|
193
|
+
const sprintItems = workItems;
|
|
194
|
+
const itemRefs = sprintItems?.workItems || sprintItems?.workItemRelations || [];
|
|
195
|
+
const hydratedWorkItems = await this.hydrateWorkItemRefs(Array.isArray(itemRefs) ? itemRefs : [], {
|
|
196
|
+
fields: params.fields,
|
|
197
|
+
extractId: (item) => item?.target?.id || item?.id || item?.workItem?.id,
|
|
198
|
+
operationName: 'boards.sprint.batchHydrate',
|
|
199
|
+
throttleAccumulator: throttleNotices,
|
|
200
|
+
});
|
|
201
|
+
return {
|
|
202
|
+
...workItems,
|
|
203
|
+
workItems: hydratedWorkItems,
|
|
204
|
+
count: hydratedWorkItems.length,
|
|
205
|
+
throttleInfo: AzureDevOpsService_1.AzureDevOpsService.buildThrottleInfo(throttleNotices),
|
|
206
|
+
};
|
|
147
207
|
}
|
|
148
208
|
catch (error) {
|
|
149
209
|
console.error(`Error getting work items for sprint ${params.sprintId}:`, error);
|
|
@@ -158,7 +218,14 @@ class BoardsSprintsService extends AzureDevOpsService_1.AzureDevOpsService {
|
|
|
158
218
|
const workApi = await this.getWorkApi();
|
|
159
219
|
const teamContext = this.getTeamContext(params.teamId);
|
|
160
220
|
// Get board charts instead of cards since getBoardCards doesn't exist
|
|
161
|
-
const charts = await workApi.getBoardCharts(teamContext, params.boardId)
|
|
221
|
+
const charts = await this.withAuthRetry(() => workApi.getBoardCharts(teamContext, params.boardId), {
|
|
222
|
+
operationName: 'boards.charts.list',
|
|
223
|
+
details: {
|
|
224
|
+
project: this.config.project,
|
|
225
|
+
teamId: params.teamId,
|
|
226
|
+
boardId: params.boardId,
|
|
227
|
+
},
|
|
228
|
+
});
|
|
162
229
|
return charts;
|
|
163
230
|
}
|
|
164
231
|
catch (error) {
|
|
@@ -174,7 +241,14 @@ class BoardsSprintsService extends AzureDevOpsService_1.AzureDevOpsService {
|
|
|
174
241
|
const workApi = await this.getWorkApi();
|
|
175
242
|
const teamContext = this.getTeamContext(params.teamId);
|
|
176
243
|
// Get team settings instead of capacities since getCapacities doesn't exist
|
|
177
|
-
const teamSettings = await workApi.getTeamSettings(teamContext)
|
|
244
|
+
const teamSettings = await this.withAuthRetry(() => workApi.getTeamSettings(teamContext), {
|
|
245
|
+
operationName: 'sprints.capacity.teamSettings',
|
|
246
|
+
details: {
|
|
247
|
+
project: this.config.project,
|
|
248
|
+
teamId: params.teamId,
|
|
249
|
+
sprintId: params.sprintId,
|
|
250
|
+
},
|
|
251
|
+
});
|
|
178
252
|
// Return team settings as a workaround
|
|
179
253
|
return {
|
|
180
254
|
teamSettings,
|
|
@@ -195,7 +269,13 @@ class BoardsSprintsService extends AzureDevOpsService_1.AzureDevOpsService {
|
|
|
195
269
|
const coreApi = await this.getCoreApi();
|
|
196
270
|
const teamId = params.teamId || this.config.project;
|
|
197
271
|
// Get team members with extended properties
|
|
198
|
-
const members = await coreApi.getTeamMembersWithExtendedProperties(this.config.project, teamId)
|
|
272
|
+
const members = await this.withAuthRetry(() => coreApi.getTeamMembersWithExtendedProperties(this.config.project, teamId), {
|
|
273
|
+
operationName: 'teams.members.list',
|
|
274
|
+
details: {
|
|
275
|
+
project: this.config.project,
|
|
276
|
+
teamId,
|
|
277
|
+
},
|
|
278
|
+
});
|
|
199
279
|
// Transform to streamlined format for MCP tool consumption
|
|
200
280
|
if (members && Array.isArray(members)) {
|
|
201
281
|
const streamlined = members.map((member) => ({
|
|
@@ -218,7 +298,14 @@ class BoardsSprintsService extends AzureDevOpsService_1.AzureDevOpsService {
|
|
|
218
298
|
async getTeams(top, skip) {
|
|
219
299
|
try {
|
|
220
300
|
const coreApi = await this.getCoreApi();
|
|
221
|
-
const teams = await coreApi.getTeams(this.config.project, undefined, top ?? 100, skip)
|
|
301
|
+
const teams = await this.withAuthRetry(() => coreApi.getTeams(this.config.project, undefined, top ?? 100, skip), {
|
|
302
|
+
operationName: 'teams.list',
|
|
303
|
+
details: {
|
|
304
|
+
project: this.config.project,
|
|
305
|
+
top: top ?? 100,
|
|
306
|
+
skip,
|
|
307
|
+
},
|
|
308
|
+
});
|
|
222
309
|
return teams;
|
|
223
310
|
}
|
|
224
311
|
catch (error) {
|
|
@@ -232,7 +319,12 @@ class BoardsSprintsService extends AzureDevOpsService_1.AzureDevOpsService {
|
|
|
232
319
|
async getDefaultTeamId() {
|
|
233
320
|
try {
|
|
234
321
|
const coreApi = await this.getCoreApi();
|
|
235
|
-
const teams = await coreApi.getTeams(this.config.project)
|
|
322
|
+
const teams = await this.withAuthRetry(() => coreApi.getTeams(this.config.project), {
|
|
323
|
+
operationName: 'teams.default.lookup',
|
|
324
|
+
details: {
|
|
325
|
+
project: this.config.project,
|
|
326
|
+
},
|
|
327
|
+
});
|
|
236
328
|
// Find the default team, which often has the same name as the project
|
|
237
329
|
const defaultTeam = teams.find(team => team.name === this.config.project) || teams[0];
|
|
238
330
|
return defaultTeam.id;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BoardsSprintsService.js","sourceRoot":"","sources":["../../src/Services/BoardsSprintsService.ts"],"names":[],"mappings":";;;AAIA,
|
|
1
|
+
{"version":3,"file":"BoardsSprintsService.js","sourceRoot":"","sources":["../../src/Services/BoardsSprintsService.ts"],"names":[],"mappings":"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"}
|