@achieveai/azuredevops-mcp 1.0.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/LICENSE +21 -0
- package/README.md +478 -0
- package/dist/Interfaces/AIAssisted.js +3 -0
- package/dist/Interfaces/AIAssisted.js.map +1 -0
- package/dist/Interfaces/ArtifactManagement.js +3 -0
- package/dist/Interfaces/ArtifactManagement.js.map +1 -0
- package/dist/Interfaces/AzureDevOps.js +3 -0
- package/dist/Interfaces/AzureDevOps.js.map +1 -0
- package/dist/Interfaces/BoardsAndSprints.js +3 -0
- package/dist/Interfaces/BoardsAndSprints.js.map +1 -0
- package/dist/Interfaces/CodeAndRepositories.js +3 -0
- package/dist/Interfaces/CodeAndRepositories.js.map +1 -0
- package/dist/Interfaces/Common.js +67 -0
- package/dist/Interfaces/Common.js.map +1 -0
- package/dist/Interfaces/CostResourceManagement.js +3 -0
- package/dist/Interfaces/CostResourceManagement.js.map +1 -0
- package/dist/Interfaces/DevSecOps.js +3 -0
- package/dist/Interfaces/DevSecOps.js.map +1 -0
- package/dist/Interfaces/ExternalIntegrations.js +3 -0
- package/dist/Interfaces/ExternalIntegrations.js.map +1 -0
- package/dist/Interfaces/HybridCrossPlatform.js +3 -0
- package/dist/Interfaces/HybridCrossPlatform.js.map +1 -0
- package/dist/Interfaces/ProjectManagement.js +3 -0
- package/dist/Interfaces/ProjectManagement.js.map +1 -0
- package/dist/Interfaces/TestingCapabilities.js +3 -0
- package/dist/Interfaces/TestingCapabilities.js.map +1 -0
- package/dist/Interfaces/WorkItems.js +3 -0
- package/dist/Interfaces/WorkItems.js.map +1 -0
- package/dist/Services/AIAssistedDevelopmentService.js +195 -0
- package/dist/Services/AIAssistedDevelopmentService.js.map +1 -0
- package/dist/Services/ArtifactManagementService.js +346 -0
- package/dist/Services/ArtifactManagementService.js.map +1 -0
- package/dist/Services/AzureDevOpsService.js +137 -0
- package/dist/Services/AzureDevOpsService.js.map +1 -0
- package/dist/Services/BoardsSprintsService.js +247 -0
- package/dist/Services/BoardsSprintsService.js.map +1 -0
- package/dist/Services/DevSecOpsService.js +307 -0
- package/dist/Services/DevSecOpsService.js.map +1 -0
- package/dist/Services/EntraAuthHandler.js +85 -0
- package/dist/Services/EntraAuthHandler.js.map +1 -0
- package/dist/Services/GitService.js +1331 -0
- package/dist/Services/GitService.js.map +1 -0
- package/dist/Services/ProjectService.js +233 -0
- package/dist/Services/ProjectService.js.map +1 -0
- package/dist/Services/TestingCapabilitiesService.js +149 -0
- package/dist/Services/TestingCapabilitiesService.js.map +1 -0
- package/dist/Services/WorkItemService.js +522 -0
- package/dist/Services/WorkItemService.js.map +1 -0
- package/dist/Tools/AIAssistedDevelopmentTools.js +137 -0
- package/dist/Tools/AIAssistedDevelopmentTools.js.map +1 -0
- package/dist/Tools/ArtifactManagementTools.js +140 -0
- package/dist/Tools/ArtifactManagementTools.js.map +1 -0
- package/dist/Tools/BoardsSprintsTools.js +149 -0
- package/dist/Tools/BoardsSprintsTools.js.map +1 -0
- package/dist/Tools/DevSecOpsTools.js +147 -0
- package/dist/Tools/DevSecOpsTools.js.map +1 -0
- package/dist/Tools/GitTools.js +1102 -0
- package/dist/Tools/GitTools.js.map +1 -0
- package/dist/Tools/ProjectTools.js +147 -0
- package/dist/Tools/ProjectTools.js.map +1 -0
- package/dist/Tools/TestingCapabilitiesTools.js +157 -0
- package/dist/Tools/TestingCapabilitiesTools.js.map +1 -0
- package/dist/Tools/WorkItemTools.js +532 -0
- package/dist/Tools/WorkItemTools.js.map +1 -0
- package/dist/config.js +149 -0
- package/dist/config.js.map +1 -0
- package/dist/index.js +1333 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/getClassMethods.js +8 -0
- package/dist/utils/getClassMethods.js.map +1 -0
- package/dist/utils/repositoryResolver.js +40 -0
- package/dist/utils/repositoryResolver.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,522 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WorkItemService = void 0;
|
|
4
|
+
const VSSInterfaces_1 = require("azure-devops-node-api/interfaces/common/VSSInterfaces");
|
|
5
|
+
const AzureDevOpsService_1 = require("./AzureDevOpsService");
|
|
6
|
+
class WorkItemService extends AzureDevOpsService_1.AzureDevOpsService {
|
|
7
|
+
constructor(config) {
|
|
8
|
+
super(config);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Query work items using WIQL
|
|
12
|
+
*/
|
|
13
|
+
async listWorkItems(wiqlQuery) {
|
|
14
|
+
try {
|
|
15
|
+
const witApi = await this.getWorkItemTrackingApi();
|
|
16
|
+
// Execute the WIQL query
|
|
17
|
+
const queryResult = await witApi.queryByWiql({
|
|
18
|
+
query: wiqlQuery
|
|
19
|
+
}, {
|
|
20
|
+
project: this.config.project
|
|
21
|
+
});
|
|
22
|
+
return queryResult;
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
console.error('Error listing work items:', error);
|
|
26
|
+
throw error;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get a work item by ID
|
|
31
|
+
*/
|
|
32
|
+
async getWorkItemById(params) {
|
|
33
|
+
try {
|
|
34
|
+
const witApi = await this.getWorkItemTrackingApi();
|
|
35
|
+
const workItem = await witApi.getWorkItem(params.id, undefined, undefined, undefined, this.config.project);
|
|
36
|
+
// Transform to streamlined format for MCP tool consumption
|
|
37
|
+
if (workItem && workItem.fields) {
|
|
38
|
+
const streamlined = {
|
|
39
|
+
id: workItem.id,
|
|
40
|
+
rev: workItem.rev,
|
|
41
|
+
title: workItem.fields['System.Title'],
|
|
42
|
+
workItemType: workItem.fields['System.WorkItemType'],
|
|
43
|
+
state: workItem.fields['System.State'],
|
|
44
|
+
areaPath: workItem.fields['System.AreaPath'],
|
|
45
|
+
iterationPath: workItem.fields['System.IterationPath'],
|
|
46
|
+
assignedTo: workItem.fields['System.AssignedTo'] ? {
|
|
47
|
+
displayName: workItem.fields['System.AssignedTo'].displayName,
|
|
48
|
+
uniqueName: workItem.fields['System.AssignedTo'].uniqueName
|
|
49
|
+
} : null,
|
|
50
|
+
createdBy: workItem.fields['System.CreatedBy'] ? {
|
|
51
|
+
displayName: workItem.fields['System.CreatedBy'].displayName,
|
|
52
|
+
uniqueName: workItem.fields['System.CreatedBy'].uniqueName
|
|
53
|
+
} : null,
|
|
54
|
+
createdDate: workItem.fields['System.CreatedDate'],
|
|
55
|
+
changedDate: workItem.fields['System.ChangedDate'],
|
|
56
|
+
description: workItem.fields['System.Description'],
|
|
57
|
+
priority: workItem.fields['Microsoft.VSTS.Common.Priority'],
|
|
58
|
+
originalEstimate: workItem.fields['Microsoft.VSTS.Scheduling.OriginalEstimate'],
|
|
59
|
+
completedWork: workItem.fields['Microsoft.VSTS.Scheduling.CompletedWork'],
|
|
60
|
+
remainingWork: workItem.fields['Microsoft.VSTS.Scheduling.RemainingWork']
|
|
61
|
+
};
|
|
62
|
+
// Add work item relations/dependencies
|
|
63
|
+
if (workItem.relations && workItem.relations.length > 0) {
|
|
64
|
+
streamlined.relations = workItem.relations.map((relation) => {
|
|
65
|
+
// Extract work item ID from URL (e.g., ".../_apis/wit/workItems/12345" -> 12345)
|
|
66
|
+
const urlParts = relation.url.split('/');
|
|
67
|
+
const relatedId = parseInt(urlParts[urlParts.length - 1]);
|
|
68
|
+
return {
|
|
69
|
+
relationshipType: relation.rel,
|
|
70
|
+
relatedWorkItemId: relatedId,
|
|
71
|
+
comment: relation.attributes?.comment || null
|
|
72
|
+
};
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
// Remove undefined fields to keep response clean
|
|
76
|
+
Object.keys(streamlined).forEach(key => {
|
|
77
|
+
if (streamlined[key] === undefined) {
|
|
78
|
+
delete streamlined[key];
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
return streamlined;
|
|
82
|
+
}
|
|
83
|
+
return workItem;
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
console.error(`Error getting work item ${params.id}:`, error);
|
|
87
|
+
throw error;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get work item with child effort roll-up
|
|
92
|
+
*/
|
|
93
|
+
async getWorkItemWithEffortRollup(params) {
|
|
94
|
+
try {
|
|
95
|
+
const workItem = await this.getWorkItemById(params);
|
|
96
|
+
// If this work item has child relationships, get effort roll-up
|
|
97
|
+
if (workItem.relations) {
|
|
98
|
+
const childRelations = workItem.relations.filter((rel) => rel.relationshipType === 'System.LinkTypes.Hierarchy-Forward');
|
|
99
|
+
if (childRelations.length > 0) {
|
|
100
|
+
// Fetch child work items to calculate effort roll-up
|
|
101
|
+
const childEffort = await this.calculateChildEffort(childRelations);
|
|
102
|
+
// Add roll-up information to the work item
|
|
103
|
+
workItem.childEffortRollup = {
|
|
104
|
+
childCount: childRelations.length,
|
|
105
|
+
totalOriginalEstimate: childEffort.totalOriginal,
|
|
106
|
+
totalCompletedWork: childEffort.totalCompleted,
|
|
107
|
+
totalRemainingWork: childEffort.totalRemaining,
|
|
108
|
+
childWorkItems: childEffort.childDetails
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return workItem;
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
console.error(`Error getting work item with effort rollup ${params.id}:`, error);
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Calculate effort roll-up from child work items
|
|
121
|
+
*/
|
|
122
|
+
async calculateChildEffort(childRelations) {
|
|
123
|
+
const witApi = await this.getWorkItemTrackingApi();
|
|
124
|
+
let totalOriginal = 0;
|
|
125
|
+
let totalCompleted = 0;
|
|
126
|
+
let totalRemaining = 0;
|
|
127
|
+
const childDetails = [];
|
|
128
|
+
// Fetch child work items in batch
|
|
129
|
+
const childIds = childRelations.map((rel) => rel.relatedWorkItemId);
|
|
130
|
+
try {
|
|
131
|
+
const childWorkItems = await witApi.getWorkItems(childIds, ['System.Id', 'System.Title', 'System.WorkItemType', 'System.State',
|
|
132
|
+
'Microsoft.VSTS.Scheduling.OriginalEstimate',
|
|
133
|
+
'Microsoft.VSTS.Scheduling.CompletedWork',
|
|
134
|
+
'Microsoft.VSTS.Scheduling.RemainingWork'], undefined, undefined, undefined, this.config.project);
|
|
135
|
+
childWorkItems.forEach((child) => {
|
|
136
|
+
const original = child.fields['Microsoft.VSTS.Scheduling.OriginalEstimate'] || 0;
|
|
137
|
+
const completed = child.fields['Microsoft.VSTS.Scheduling.CompletedWork'] || 0;
|
|
138
|
+
const remaining = child.fields['Microsoft.VSTS.Scheduling.RemainingWork'] || 0;
|
|
139
|
+
totalOriginal += original;
|
|
140
|
+
totalCompleted += completed;
|
|
141
|
+
totalRemaining += remaining;
|
|
142
|
+
childDetails.push({
|
|
143
|
+
id: child.id,
|
|
144
|
+
title: child.fields['System.Title'],
|
|
145
|
+
workItemType: child.fields['System.WorkItemType'],
|
|
146
|
+
state: child.fields['System.State'],
|
|
147
|
+
originalEstimate: original,
|
|
148
|
+
completedWork: completed,
|
|
149
|
+
remainingWork: remaining
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
console.error('Error fetching child work items for effort calculation:', error);
|
|
155
|
+
}
|
|
156
|
+
return {
|
|
157
|
+
totalOriginal,
|
|
158
|
+
totalCompleted,
|
|
159
|
+
totalRemaining,
|
|
160
|
+
childDetails
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Search work items using text
|
|
165
|
+
*/
|
|
166
|
+
async searchWorkItems(params) {
|
|
167
|
+
try {
|
|
168
|
+
const witApi = await this.getWorkItemTrackingApi();
|
|
169
|
+
const query = `SELECT [System.Id], [System.Title], [System.State], [System.CreatedDate]
|
|
170
|
+
FROM WorkItems
|
|
171
|
+
WHERE [System.TeamProject] = @project
|
|
172
|
+
AND (
|
|
173
|
+
[System.Title] CONTAINS '${params.searchText}'
|
|
174
|
+
OR [System.Description] CONTAINS '${params.searchText}'
|
|
175
|
+
)
|
|
176
|
+
ORDER BY [System.CreatedDate] DESC`;
|
|
177
|
+
const queryResult = await witApi.queryByWiql({
|
|
178
|
+
query
|
|
179
|
+
}, {
|
|
180
|
+
project: this.config.project
|
|
181
|
+
});
|
|
182
|
+
// Get full work item details if we have results
|
|
183
|
+
if (queryResult.workItems && queryResult.workItems.length > 0) {
|
|
184
|
+
const workItemIds = queryResult.workItems
|
|
185
|
+
.slice(0, params.top || 50) // Limit results to avoid too many API calls
|
|
186
|
+
.map((wi) => wi.id);
|
|
187
|
+
// Fetch detailed work item information
|
|
188
|
+
const detailedWorkItems = await witApi.getWorkItems(workItemIds, [
|
|
189
|
+
'System.Id',
|
|
190
|
+
'System.Title',
|
|
191
|
+
'System.WorkItemType',
|
|
192
|
+
'System.State',
|
|
193
|
+
'System.AssignedTo',
|
|
194
|
+
'System.CreatedBy',
|
|
195
|
+
'System.CreatedDate',
|
|
196
|
+
'System.ChangedDate',
|
|
197
|
+
'System.AreaPath',
|
|
198
|
+
'System.IterationPath',
|
|
199
|
+
'Microsoft.VSTS.Common.Priority',
|
|
200
|
+
'Microsoft.VSTS.Scheduling.OriginalEstimate',
|
|
201
|
+
'Microsoft.VSTS.Scheduling.CompletedWork',
|
|
202
|
+
'Microsoft.VSTS.Scheduling.RemainingWork'
|
|
203
|
+
], undefined, undefined, undefined, this.config.project);
|
|
204
|
+
// Transform to consistent format
|
|
205
|
+
const transformedWorkItems = detailedWorkItems.map((workItem) => ({
|
|
206
|
+
id: workItem.id,
|
|
207
|
+
title: workItem.fields['System.Title'],
|
|
208
|
+
workItemType: workItem.fields['System.WorkItemType'],
|
|
209
|
+
state: workItem.fields['System.State'],
|
|
210
|
+
assignedTo: workItem.fields['System.AssignedTo'] ? {
|
|
211
|
+
displayName: workItem.fields['System.AssignedTo'].displayName,
|
|
212
|
+
uniqueName: workItem.fields['System.AssignedTo'].uniqueName
|
|
213
|
+
} : null,
|
|
214
|
+
createdBy: workItem.fields['System.CreatedBy'] ? {
|
|
215
|
+
displayName: workItem.fields['System.CreatedBy'].displayName,
|
|
216
|
+
uniqueName: workItem.fields['System.CreatedBy'].uniqueName
|
|
217
|
+
} : null,
|
|
218
|
+
createdDate: workItem.fields['System.CreatedDate'],
|
|
219
|
+
changedDate: workItem.fields['System.ChangedDate'],
|
|
220
|
+
areaPath: workItem.fields['System.AreaPath'],
|
|
221
|
+
iterationPath: workItem.fields['System.IterationPath'],
|
|
222
|
+
priority: workItem.fields['Microsoft.VSTS.Common.Priority'],
|
|
223
|
+
originalEstimate: workItem.fields['Microsoft.VSTS.Scheduling.OriginalEstimate'],
|
|
224
|
+
completedWork: workItem.fields['Microsoft.VSTS.Scheduling.CompletedWork'],
|
|
225
|
+
remainingWork: workItem.fields['Microsoft.VSTS.Scheduling.RemainingWork']
|
|
226
|
+
}));
|
|
227
|
+
return {
|
|
228
|
+
searchQuery: params.searchText,
|
|
229
|
+
totalResults: queryResult.workItems.length,
|
|
230
|
+
returnedResults: transformedWorkItems.length,
|
|
231
|
+
workItems: transformedWorkItems
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
return {
|
|
235
|
+
searchQuery: params.searchText,
|
|
236
|
+
totalResults: 0,
|
|
237
|
+
returnedResults: 0,
|
|
238
|
+
workItems: []
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
catch (error) {
|
|
242
|
+
console.error('Error searching work items:', error);
|
|
243
|
+
throw error;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Get recently updated work items
|
|
248
|
+
*/
|
|
249
|
+
async getRecentWorkItems(params) {
|
|
250
|
+
try {
|
|
251
|
+
const witApi = await this.getWorkItemTrackingApi();
|
|
252
|
+
const query = `SELECT [System.Id], [System.Title], [System.State], [System.ChangedDate]
|
|
253
|
+
FROM WorkItems
|
|
254
|
+
WHERE [System.TeamProject] = @project
|
|
255
|
+
ORDER BY [System.ChangedDate] DESC`;
|
|
256
|
+
const queryResult = await witApi.queryByWiql({
|
|
257
|
+
query
|
|
258
|
+
}, {
|
|
259
|
+
project: this.config.project
|
|
260
|
+
});
|
|
261
|
+
const top = params.top || 10;
|
|
262
|
+
const skip = params.skip || 0;
|
|
263
|
+
if (queryResult.workItems) {
|
|
264
|
+
queryResult.workItems = queryResult.workItems.slice(skip, skip + top);
|
|
265
|
+
}
|
|
266
|
+
return queryResult;
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
console.error('Error getting recent work items:', error);
|
|
270
|
+
throw error;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Get work items assigned to current user
|
|
275
|
+
*/
|
|
276
|
+
async getMyWorkItems(params) {
|
|
277
|
+
try {
|
|
278
|
+
const witApi = await this.getWorkItemTrackingApi();
|
|
279
|
+
let stateCondition = '';
|
|
280
|
+
if (params.state) {
|
|
281
|
+
stateCondition = `AND [System.State] = '${params.state}'`;
|
|
282
|
+
}
|
|
283
|
+
const query = `SELECT [System.Id], [System.Title], [System.State], [System.CreatedDate]
|
|
284
|
+
FROM WorkItems
|
|
285
|
+
WHERE [System.TeamProject] = @project
|
|
286
|
+
AND [System.AssignedTo] = @me
|
|
287
|
+
${stateCondition}
|
|
288
|
+
ORDER BY [System.CreatedDate] DESC`;
|
|
289
|
+
const queryResult = await witApi.queryByWiql({
|
|
290
|
+
query
|
|
291
|
+
}, {
|
|
292
|
+
project: this.config.project
|
|
293
|
+
});
|
|
294
|
+
const top = params.top || 100;
|
|
295
|
+
if (queryResult.workItems) {
|
|
296
|
+
queryResult.workItems = queryResult.workItems.slice(0, top);
|
|
297
|
+
}
|
|
298
|
+
return queryResult;
|
|
299
|
+
}
|
|
300
|
+
catch (error) {
|
|
301
|
+
console.error('Error getting my work items:', error);
|
|
302
|
+
throw error;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Create a work item
|
|
307
|
+
*/
|
|
308
|
+
async createWorkItem(params) {
|
|
309
|
+
try {
|
|
310
|
+
const witApi = await this.getWorkItemTrackingApi();
|
|
311
|
+
const patchDocument = [];
|
|
312
|
+
// Add title
|
|
313
|
+
patchDocument.push({
|
|
314
|
+
op: VSSInterfaces_1.Operation.Add,
|
|
315
|
+
path: "/fields/System.Title",
|
|
316
|
+
value: params.title
|
|
317
|
+
});
|
|
318
|
+
// Add description if provided
|
|
319
|
+
if (params.description) {
|
|
320
|
+
patchDocument.push({
|
|
321
|
+
op: VSSInterfaces_1.Operation.Add,
|
|
322
|
+
path: "/fields/System.Description",
|
|
323
|
+
value: params.description
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
// Add assigned to if provided
|
|
327
|
+
if (params.assignedTo) {
|
|
328
|
+
patchDocument.push({
|
|
329
|
+
op: VSSInterfaces_1.Operation.Add,
|
|
330
|
+
path: "/fields/System.AssignedTo",
|
|
331
|
+
value: params.assignedTo
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
// Add state if provided
|
|
335
|
+
if (params.state) {
|
|
336
|
+
patchDocument.push({
|
|
337
|
+
op: VSSInterfaces_1.Operation.Add,
|
|
338
|
+
path: "/fields/System.State",
|
|
339
|
+
value: params.state
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
// Add area path if provided
|
|
343
|
+
if (params.areaPath) {
|
|
344
|
+
patchDocument.push({
|
|
345
|
+
op: VSSInterfaces_1.Operation.Add,
|
|
346
|
+
path: "/fields/System.AreaPath",
|
|
347
|
+
value: params.areaPath
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
// Add iteration path if provided
|
|
351
|
+
if (params.iterationPath) {
|
|
352
|
+
patchDocument.push({
|
|
353
|
+
op: VSSInterfaces_1.Operation.Add,
|
|
354
|
+
path: "/fields/System.IterationPath",
|
|
355
|
+
value: params.iterationPath
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
// Add additional fields if provided
|
|
359
|
+
if (params.additionalFields) {
|
|
360
|
+
for (const [key, value] of Object.entries(params.additionalFields)) {
|
|
361
|
+
patchDocument.push({
|
|
362
|
+
op: VSSInterfaces_1.Operation.Add,
|
|
363
|
+
path: `/fields/${key}`,
|
|
364
|
+
value: value
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
const workItem = await witApi.createWorkItem(undefined, patchDocument, this.config.project, params.workItemType);
|
|
369
|
+
return workItem;
|
|
370
|
+
}
|
|
371
|
+
catch (error) {
|
|
372
|
+
console.error('Error creating work item:', error);
|
|
373
|
+
throw error;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Update a work item
|
|
378
|
+
*/
|
|
379
|
+
async updateWorkItem(params) {
|
|
380
|
+
try {
|
|
381
|
+
const witApi = await this.getWorkItemTrackingApi();
|
|
382
|
+
const patchDocument = [];
|
|
383
|
+
// Add fields from the params
|
|
384
|
+
for (const [key, value] of Object.entries(params.fields)) {
|
|
385
|
+
patchDocument.push({
|
|
386
|
+
op: VSSInterfaces_1.Operation.Add,
|
|
387
|
+
path: `/fields/${key}`,
|
|
388
|
+
value: value
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
const workItem = await witApi.updateWorkItem(undefined, patchDocument, params.id, this.config.project);
|
|
392
|
+
return workItem;
|
|
393
|
+
}
|
|
394
|
+
catch (error) {
|
|
395
|
+
console.error(`Error updating work item ${params.id}:`, error);
|
|
396
|
+
throw error;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Add a comment to a work item
|
|
401
|
+
*/
|
|
402
|
+
async addWorkItemComment(params) {
|
|
403
|
+
try {
|
|
404
|
+
const witApi = await this.getWorkItemTrackingApi();
|
|
405
|
+
const comment = await witApi.addComment({
|
|
406
|
+
text: params.text
|
|
407
|
+
}, this.config.project, params.id);
|
|
408
|
+
return comment;
|
|
409
|
+
}
|
|
410
|
+
catch (error) {
|
|
411
|
+
console.error(`Error adding comment to work item ${params.id}:`, error);
|
|
412
|
+
throw error;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Update work item state
|
|
417
|
+
*/
|
|
418
|
+
async updateWorkItemState(params) {
|
|
419
|
+
try {
|
|
420
|
+
const witApi = await this.getWorkItemTrackingApi();
|
|
421
|
+
const patchDocument = [
|
|
422
|
+
{
|
|
423
|
+
op: VSSInterfaces_1.Operation.Add,
|
|
424
|
+
path: "/fields/System.State",
|
|
425
|
+
value: params.state
|
|
426
|
+
}
|
|
427
|
+
];
|
|
428
|
+
// Add comment if provided
|
|
429
|
+
if (params.comment) {
|
|
430
|
+
patchDocument.push({
|
|
431
|
+
op: VSSInterfaces_1.Operation.Add,
|
|
432
|
+
path: "/fields/System.History",
|
|
433
|
+
value: params.comment
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
const workItem = await witApi.updateWorkItem(undefined, patchDocument, params.id, this.config.project);
|
|
437
|
+
return workItem;
|
|
438
|
+
}
|
|
439
|
+
catch (error) {
|
|
440
|
+
console.error(`Error updating state for work item ${params.id}:`, error);
|
|
441
|
+
throw error;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Assign work item to a user
|
|
446
|
+
*/
|
|
447
|
+
async assignWorkItem(params) {
|
|
448
|
+
try {
|
|
449
|
+
const witApi = await this.getWorkItemTrackingApi();
|
|
450
|
+
const patchDocument = [
|
|
451
|
+
{
|
|
452
|
+
op: VSSInterfaces_1.Operation.Add,
|
|
453
|
+
path: "/fields/System.AssignedTo",
|
|
454
|
+
value: params.assignedTo
|
|
455
|
+
}
|
|
456
|
+
];
|
|
457
|
+
const workItem = await witApi.updateWorkItem(undefined, patchDocument, params.id, this.config.project);
|
|
458
|
+
return workItem;
|
|
459
|
+
}
|
|
460
|
+
catch (error) {
|
|
461
|
+
console.error(`Error assigning work item ${params.id}:`, error);
|
|
462
|
+
throw error;
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Create a link between work items
|
|
467
|
+
*/
|
|
468
|
+
async createLink(params) {
|
|
469
|
+
try {
|
|
470
|
+
const witApi = await this.getWorkItemTrackingApi();
|
|
471
|
+
const patchDocument = [
|
|
472
|
+
{
|
|
473
|
+
op: VSSInterfaces_1.Operation.Add,
|
|
474
|
+
path: "/relations/-",
|
|
475
|
+
value: {
|
|
476
|
+
rel: params.linkType,
|
|
477
|
+
url: `${this.config.orgUrl}/_apis/wit/workItems/${params.targetId}`,
|
|
478
|
+
attributes: {
|
|
479
|
+
comment: params.comment || ""
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
];
|
|
484
|
+
const workItem = await witApi.updateWorkItem(undefined, patchDocument, params.sourceId, this.config.project);
|
|
485
|
+
return workItem;
|
|
486
|
+
}
|
|
487
|
+
catch (error) {
|
|
488
|
+
console.error(`Error creating link between work items:`, error);
|
|
489
|
+
throw error;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Bulk create or update work items
|
|
494
|
+
*/
|
|
495
|
+
async bulkUpdateWorkItems(params) {
|
|
496
|
+
try {
|
|
497
|
+
const results = [];
|
|
498
|
+
for (const workItemParams of params.workItems) {
|
|
499
|
+
if ('id' in workItemParams) {
|
|
500
|
+
// It's an update
|
|
501
|
+
const result = await this.updateWorkItem(workItemParams);
|
|
502
|
+
results.push(result);
|
|
503
|
+
}
|
|
504
|
+
else {
|
|
505
|
+
// It's a create
|
|
506
|
+
const result = await this.createWorkItem(workItemParams);
|
|
507
|
+
results.push(result);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
return {
|
|
511
|
+
count: results.length,
|
|
512
|
+
workItems: results
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
catch (error) {
|
|
516
|
+
console.error('Error in bulk work item operation:', error);
|
|
517
|
+
throw error;
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
exports.WorkItemService = WorkItemService;
|
|
522
|
+
//# sourceMappingURL=WorkItemService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkItemService.js","sourceRoot":"","sources":["../../src/Services/WorkItemService.ts"],"names":[],"mappings":"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"}
|