@mcp-consultant-tools/azure-devops 27.0.0 → 28.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/azure-devops-client.d.ts +42 -0
- package/build/azure-devops-client.d.ts.map +1 -0
- package/build/azure-devops-client.js +144 -0
- package/build/azure-devops-client.js.map +1 -0
- package/build/index.d.ts +8 -11
- package/build/index.d.ts.map +1 -1
- package/build/index.js +40 -1878
- package/build/index.js.map +1 -1
- package/build/models/api-types.d.ts +159 -0
- package/build/models/api-types.d.ts.map +1 -0
- package/build/models/api-types.js +5 -0
- package/build/models/api-types.js.map +1 -0
- package/build/models/index.d.ts +5 -0
- package/build/models/index.d.ts.map +1 -0
- package/build/models/index.js +5 -0
- package/build/models/index.js.map +1 -0
- package/build/prompts/index.d.ts +3 -0
- package/build/prompts/index.d.ts.map +1 -0
- package/build/prompts/index.js +83 -0
- package/build/prompts/index.js.map +1 -0
- package/build/prompts/templates.d.ts +8 -0
- package/build/prompts/templates.d.ts.map +1 -0
- package/build/prompts/templates.js +126 -0
- package/build/prompts/templates.js.map +1 -0
- package/build/services/build-service.d.ts +16 -0
- package/build/services/build-service.d.ts.map +1 -0
- package/build/services/build-service.js +195 -0
- package/build/services/build-service.js.map +1 -0
- package/build/services/configuration-service.d.ts +7 -0
- package/build/services/configuration-service.d.ts.map +1 -0
- package/build/services/configuration-service.js +24 -0
- package/build/services/configuration-service.js.map +1 -0
- package/build/services/index.d.ts +11 -0
- package/build/services/index.d.ts.map +1 -0
- package/build/services/index.js +11 -0
- package/build/services/index.js.map +1 -0
- package/build/services/pull-request-service.d.ts +29 -0
- package/build/services/pull-request-service.d.ts.map +1 -0
- package/build/services/pull-request-service.js +390 -0
- package/build/services/pull-request-service.js.map +1 -0
- package/build/services/sync-service.d.ts +19 -0
- package/build/services/sync-service.d.ts.map +1 -0
- package/build/services/sync-service.js +439 -0
- package/build/services/sync-service.js.map +1 -0
- package/build/services/variable-group-service.d.ts +11 -0
- package/build/services/variable-group-service.d.ts.map +1 -0
- package/build/services/variable-group-service.js +62 -0
- package/build/services/variable-group-service.js.map +1 -0
- package/build/services/wiki-service.d.ts +41 -0
- package/build/services/wiki-service.d.ts.map +1 -0
- package/build/services/wiki-service.js +346 -0
- package/build/services/wiki-service.js.map +1 -0
- package/build/services/work-item-service.d.ts +22 -0
- package/build/services/work-item-service.d.ts.map +1 -0
- package/build/services/work-item-service.js +284 -0
- package/build/services/work-item-service.js.map +1 -0
- package/build/sync/file-utils.d.ts +7 -5
- package/build/sync/file-utils.d.ts.map +1 -1
- package/build/sync/file-utils.js +17 -8
- package/build/sync/file-utils.js.map +1 -1
- package/build/sync/markdown-serializer.d.ts +5 -4
- package/build/sync/markdown-serializer.d.ts.map +1 -1
- package/build/sync/markdown-serializer.js +21 -9
- package/build/sync/markdown-serializer.js.map +1 -1
- package/build/tool-examples.d.ts +8 -0
- package/build/tool-examples.d.ts.map +1 -1
- package/build/tool-examples.js +28 -0
- package/build/tool-examples.js.map +1 -1
- package/build/tools/build-tools.d.ts +3 -0
- package/build/tools/build-tools.d.ts.map +1 -0
- package/build/tools/build-tools.js +56 -0
- package/build/tools/build-tools.js.map +1 -0
- package/build/tools/configuration-tools.d.ts +6 -0
- package/build/tools/configuration-tools.d.ts.map +1 -0
- package/build/tools/configuration-tools.js +30 -0
- package/build/tools/configuration-tools.js.map +1 -0
- package/build/tools/index.d.ts +13 -0
- package/build/tools/index.d.ts.map +1 -0
- package/build/tools/index.js +30 -0
- package/build/tools/index.js.map +1 -0
- package/build/tools/pull-request-tools.d.ts +5 -0
- package/build/tools/pull-request-tools.d.ts.map +1 -0
- package/build/tools/pull-request-tools.js +227 -0
- package/build/tools/pull-request-tools.js.map +1 -0
- package/build/tools/sync-tools.d.ts +3 -0
- package/build/tools/sync-tools.d.ts.map +1 -0
- package/build/tools/sync-tools.js +146 -0
- package/build/tools/sync-tools.js.map +1 -0
- package/build/tools/variable-group-tools.d.ts +3 -0
- package/build/tools/variable-group-tools.d.ts.map +1 -0
- package/build/tools/variable-group-tools.js +32 -0
- package/build/tools/variable-group-tools.js.map +1 -0
- package/build/tools/wiki-tools.d.ts +3 -0
- package/build/tools/wiki-tools.d.ts.map +1 -0
- package/build/tools/wiki-tools.js +151 -0
- package/build/tools/wiki-tools.js.map +1 -0
- package/build/tools/work-item-tools.d.ts +3 -0
- package/build/tools/work-item-tools.d.ts.map +1 -0
- package/build/tools/work-item-tools.js +188 -0
- package/build/tools/work-item-tools.js.map +1 -0
- package/build/types.d.ts +23 -0
- package/build/types.d.ts.map +1 -0
- package/build/types.js +2 -0
- package/build/types.js.map +1 -0
- package/package.json +2 -2
- package/build/AzureDevOpsService.d.ts +0 -489
- package/build/AzureDevOpsService.d.ts.map +0 -1
- package/build/AzureDevOpsService.js +0 -1558
- package/build/AzureDevOpsService.js.map +0 -1
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Work Item Service - Azure DevOps work item operations
|
|
3
|
+
*/
|
|
4
|
+
import { marked } from 'marked';
|
|
5
|
+
import { getAllLargeTextFields } from '../sync/html-detection.js';
|
|
6
|
+
export class WorkItemService {
|
|
7
|
+
client;
|
|
8
|
+
constructor(client) {
|
|
9
|
+
this.client = client;
|
|
10
|
+
}
|
|
11
|
+
static SUMMARY_FIELDS = [
|
|
12
|
+
'System.Id',
|
|
13
|
+
'System.Title',
|
|
14
|
+
'System.AssignedTo',
|
|
15
|
+
'System.State',
|
|
16
|
+
'Microsoft.VSTS.Common.Severity',
|
|
17
|
+
'Microsoft.VSTS.Common.Priority',
|
|
18
|
+
'System.Tags',
|
|
19
|
+
'Microsoft.VSTS.Scheduling.StoryPoints',
|
|
20
|
+
'Microsoft.VSTS.Common.ResolvedReason',
|
|
21
|
+
'System.WorkItemType',
|
|
22
|
+
];
|
|
23
|
+
async getWorkItem(project, workItemId) {
|
|
24
|
+
this.client.validateProject(project);
|
|
25
|
+
const response = await this.client.get(`${project}/_apis/wit/workitems/${workItemId}?$expand=all&api-version=${this.client.apiVersion}`);
|
|
26
|
+
return {
|
|
27
|
+
id: response.id,
|
|
28
|
+
rev: response.rev,
|
|
29
|
+
url: response.url,
|
|
30
|
+
fields: response.fields,
|
|
31
|
+
relations: response.relations || [],
|
|
32
|
+
_links: response._links,
|
|
33
|
+
commentVersionRef: response.commentVersionRef,
|
|
34
|
+
project
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
async queryWorkItems(project, wiql, maxResults = 200) {
|
|
38
|
+
this.client.validateProject(project);
|
|
39
|
+
const queryResult = await this.client.post(`${project}/_apis/wit/wiql?api-version=${this.client.apiVersion}`, { query: wiql });
|
|
40
|
+
if (!queryResult.workItems || queryResult.workItems.length === 0) {
|
|
41
|
+
return {
|
|
42
|
+
query: wiql,
|
|
43
|
+
project,
|
|
44
|
+
totalCount: 0,
|
|
45
|
+
workItems: []
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const workItemIds = queryResult.workItems
|
|
49
|
+
.slice(0, maxResults)
|
|
50
|
+
.map((wi) => wi.id);
|
|
51
|
+
const workItems = await this.client.post(`${project}/_apis/wit/workitemsbatch?api-version=${this.client.apiVersion}`, {
|
|
52
|
+
ids: workItemIds,
|
|
53
|
+
$expand: 'all'
|
|
54
|
+
});
|
|
55
|
+
return {
|
|
56
|
+
query: wiql,
|
|
57
|
+
project,
|
|
58
|
+
totalCount: workItems.value.length,
|
|
59
|
+
workItems: workItems.value
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
async runSavedQuery(project, queryId, maxResults = 50, detail = 'summary', fields, groupBy) {
|
|
63
|
+
this.client.validateProject(project);
|
|
64
|
+
const queryResult = await this.client.get(`${project}/_apis/wit/wiql/${queryId}?api-version=${this.client.apiVersion}`);
|
|
65
|
+
if (!queryResult.workItems || queryResult.workItems.length === 0) {
|
|
66
|
+
return {
|
|
67
|
+
queryId,
|
|
68
|
+
project,
|
|
69
|
+
totalCount: 0,
|
|
70
|
+
queriedCount: queryResult.workItems?.length ?? 0,
|
|
71
|
+
workItems: [],
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const totalAvailable = queryResult.workItems.length;
|
|
75
|
+
const workItemIds = queryResult.workItems
|
|
76
|
+
.slice(0, maxResults)
|
|
77
|
+
.map((wi) => wi.id);
|
|
78
|
+
const isFull = detail === 'full';
|
|
79
|
+
const requestedFields = fields ?? (isFull ? undefined : WorkItemService.SUMMARY_FIELDS);
|
|
80
|
+
const body = { ids: workItemIds };
|
|
81
|
+
if (requestedFields) {
|
|
82
|
+
body.fields = requestedFields;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
body.$expand = 'all';
|
|
86
|
+
}
|
|
87
|
+
const workItems = await this.client.post(`${project}/_apis/wit/workitemsbatch?api-version=${this.client.apiVersion}`, body);
|
|
88
|
+
const items = workItems.value.map((wi) => {
|
|
89
|
+
if (isFull && !fields)
|
|
90
|
+
return wi;
|
|
91
|
+
const f = wi.fields || {};
|
|
92
|
+
return {
|
|
93
|
+
id: wi.id,
|
|
94
|
+
type: f['System.WorkItemType'],
|
|
95
|
+
title: f['System.Title'],
|
|
96
|
+
assignedTo: f['System.AssignedTo']?.displayName ?? f['System.AssignedTo'] ?? null,
|
|
97
|
+
state: f['System.State'],
|
|
98
|
+
severity: f['Microsoft.VSTS.Common.Severity'] ?? null,
|
|
99
|
+
priority: f['Microsoft.VSTS.Common.Priority'] ?? null,
|
|
100
|
+
tags: f['System.Tags'] ?? null,
|
|
101
|
+
storyPoints: f['Microsoft.VSTS.Scheduling.StoryPoints'] ?? null,
|
|
102
|
+
resolvedReason: f['Microsoft.VSTS.Common.ResolvedReason'] ?? null,
|
|
103
|
+
...(fields ? Object.fromEntries(Object.entries(f).filter(([k]) => !WorkItemService.SUMMARY_FIELDS.includes(k))) : {}),
|
|
104
|
+
};
|
|
105
|
+
});
|
|
106
|
+
const result = {
|
|
107
|
+
queryId,
|
|
108
|
+
project,
|
|
109
|
+
totalAvailable,
|
|
110
|
+
returnedCount: items.length,
|
|
111
|
+
detail,
|
|
112
|
+
};
|
|
113
|
+
if (groupBy) {
|
|
114
|
+
const groups = {};
|
|
115
|
+
for (const item of items) {
|
|
116
|
+
const key = item[groupBy] ?? item.state ?? 'Unknown';
|
|
117
|
+
if (!groups[key])
|
|
118
|
+
groups[key] = [];
|
|
119
|
+
groups[key].push(item);
|
|
120
|
+
}
|
|
121
|
+
result.groupedBy = groupBy;
|
|
122
|
+
result.groups = Object.fromEntries(Object.entries(groups).map(([k, v]) => [k, { count: v.length, items: v }]));
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
result.workItems = items;
|
|
126
|
+
}
|
|
127
|
+
return result;
|
|
128
|
+
}
|
|
129
|
+
async getSavedQuery(project, queryId) {
|
|
130
|
+
this.client.validateProject(project);
|
|
131
|
+
return this.client.get(`${project}/_apis/wit/queries/${queryId}?api-version=${this.client.apiVersion}`);
|
|
132
|
+
}
|
|
133
|
+
async getWorkItemComments(project, workItemId) {
|
|
134
|
+
this.client.validateProject(project);
|
|
135
|
+
const response = await this.client.get(`${project}/_apis/wit/workItems/${workItemId}/comments?api-version=7.1-preview`);
|
|
136
|
+
const comments = response.comments || response.value || [];
|
|
137
|
+
return {
|
|
138
|
+
workItemId,
|
|
139
|
+
project,
|
|
140
|
+
totalCount: response.totalCount ?? comments.length,
|
|
141
|
+
comments: comments.map((comment) => ({
|
|
142
|
+
id: comment.id,
|
|
143
|
+
text: comment.text,
|
|
144
|
+
createdBy: comment.createdBy?.displayName,
|
|
145
|
+
createdDate: comment.createdDate,
|
|
146
|
+
modifiedBy: comment.modifiedBy?.displayName,
|
|
147
|
+
modifiedDate: comment.modifiedDate,
|
|
148
|
+
url: comment.url
|
|
149
|
+
}))
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
async addWorkItemComment(project, workItemId, commentText) {
|
|
153
|
+
this.client.validateProject(project);
|
|
154
|
+
if (!this.client.config.enableWorkItemWrite) {
|
|
155
|
+
throw new Error('Work item write operations are disabled. Set AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE=true to enable.');
|
|
156
|
+
}
|
|
157
|
+
let finalText = commentText;
|
|
158
|
+
const format = this.client.config.commentFormat || 'markdown';
|
|
159
|
+
if (format === 'html') {
|
|
160
|
+
finalText = await marked.parse(commentText);
|
|
161
|
+
}
|
|
162
|
+
const response = await this.client.post(`${project}/_apis/wit/workItems/${workItemId}/comments?api-version=7.1-preview`, { text: finalText });
|
|
163
|
+
return {
|
|
164
|
+
id: response.id,
|
|
165
|
+
workItemId,
|
|
166
|
+
project,
|
|
167
|
+
text: response.text,
|
|
168
|
+
format: format,
|
|
169
|
+
createdBy: response.createdBy?.displayName,
|
|
170
|
+
createdDate: response.createdDate
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
async updateWorkItemComment(project, workItemId, commentId, commentText) {
|
|
174
|
+
this.client.validateProject(project);
|
|
175
|
+
if (!this.client.config.enableWorkItemWrite) {
|
|
176
|
+
throw new Error('Work item write operations are disabled. Set AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE=true to enable.');
|
|
177
|
+
}
|
|
178
|
+
let finalText = commentText;
|
|
179
|
+
const format = this.client.config.commentFormat || 'markdown';
|
|
180
|
+
if (format === 'html') {
|
|
181
|
+
finalText = await marked.parse(commentText);
|
|
182
|
+
}
|
|
183
|
+
const response = await this.client.patch(`${project}/_apis/wit/workItems/${workItemId}/comments/${commentId}?api-version=7.1-preview`, { text: finalText });
|
|
184
|
+
return {
|
|
185
|
+
id: response.id,
|
|
186
|
+
workItemId,
|
|
187
|
+
project,
|
|
188
|
+
text: response.text,
|
|
189
|
+
format: format,
|
|
190
|
+
modifiedBy: response.modifiedBy?.displayName,
|
|
191
|
+
modifiedDate: response.modifiedDate
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
async updateWorkItem(project, workItemId, patchOperations) {
|
|
195
|
+
this.client.validateProject(project);
|
|
196
|
+
if (!this.client.config.enableWorkItemWrite) {
|
|
197
|
+
throw new Error('Work item write operations are disabled. Set AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE=true to enable.');
|
|
198
|
+
}
|
|
199
|
+
const response = await this.client.patch(`${project}/_apis/wit/workitems/${workItemId}?api-version=${this.client.apiVersion}`, patchOperations);
|
|
200
|
+
return {
|
|
201
|
+
id: response.id,
|
|
202
|
+
rev: response.rev,
|
|
203
|
+
fields: response.fields,
|
|
204
|
+
project
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
async setFieldsToMarkdownFormat(project, workItemId, fields) {
|
|
208
|
+
if (!this.client.config.enableWorkItemWrite) {
|
|
209
|
+
throw new Error('Work item write operations are disabled. Set AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE=true to enable.');
|
|
210
|
+
}
|
|
211
|
+
const patchOperations = fields.map(field => ({
|
|
212
|
+
op: 'add',
|
|
213
|
+
path: `/multilineFieldsFormat/${field}`,
|
|
214
|
+
value: 'Markdown'
|
|
215
|
+
}));
|
|
216
|
+
await this.updateWorkItem(project, workItemId, patchOperations);
|
|
217
|
+
}
|
|
218
|
+
async createWorkItem(project, workItemType, fields, parentId, relations) {
|
|
219
|
+
this.client.validateProject(project);
|
|
220
|
+
if (!this.client.config.enableWorkItemWrite) {
|
|
221
|
+
throw new Error('Work item write operations are disabled. Set AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE=true to enable.');
|
|
222
|
+
}
|
|
223
|
+
const patchOperations = [];
|
|
224
|
+
Object.keys(fields).forEach(field => {
|
|
225
|
+
patchOperations.push({
|
|
226
|
+
op: 'add',
|
|
227
|
+
path: `/fields/${field}`,
|
|
228
|
+
value: fields[field]
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
const allLargeTextFields = getAllLargeTextFields();
|
|
232
|
+
for (const field of allLargeTextFields) {
|
|
233
|
+
if (fields[field] !== undefined) {
|
|
234
|
+
patchOperations.push({
|
|
235
|
+
op: 'add',
|
|
236
|
+
path: `/multilineFieldsFormat/${field}`,
|
|
237
|
+
value: 'Markdown'
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
if (parentId !== undefined) {
|
|
242
|
+
const parentUrl = `${this.client.baseUrl}/${encodeURIComponent(project)}/_apis/wit/workItems/${parentId}`;
|
|
243
|
+
patchOperations.push({
|
|
244
|
+
op: 'add',
|
|
245
|
+
path: '/relations/-',
|
|
246
|
+
value: {
|
|
247
|
+
rel: 'System.LinkTypes.Hierarchy-Reverse',
|
|
248
|
+
url: parentUrl
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
if (relations && relations.length > 0) {
|
|
253
|
+
relations.forEach(relation => {
|
|
254
|
+
patchOperations.push({
|
|
255
|
+
op: 'add',
|
|
256
|
+
path: '/relations/-',
|
|
257
|
+
value: relation
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
const response = await this.client.patch(`${project}/_apis/wit/workitems/$${workItemType}?api-version=${this.client.apiVersion}`, patchOperations);
|
|
262
|
+
return {
|
|
263
|
+
id: response.id,
|
|
264
|
+
rev: response.rev,
|
|
265
|
+
fields: response.fields,
|
|
266
|
+
relations: response.relations || [],
|
|
267
|
+
url: response._links?.html?.href,
|
|
268
|
+
project
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
async deleteWorkItem(project, workItemId) {
|
|
272
|
+
this.client.validateProject(project);
|
|
273
|
+
if (!this.client.config.enableWorkItemDelete) {
|
|
274
|
+
throw new Error('Work item delete operations are disabled. Set AZUREDEVOPS_ENABLE_WORK_ITEM_DELETE=true to enable.');
|
|
275
|
+
}
|
|
276
|
+
await this.client.del(`${project}/_apis/wit/workitems/${workItemId}?api-version=${this.client.apiVersion}`);
|
|
277
|
+
return {
|
|
278
|
+
workItemId,
|
|
279
|
+
project,
|
|
280
|
+
deleted: true
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=work-item-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-item-service.js","sourceRoot":"","sources":["../../src/services/work-item-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -61,14 +61,15 @@ export declare function listSyncedWorkItems(folder: string): Promise<{
|
|
|
61
61
|
export declare function validateFolderPath(folderPath: string): void;
|
|
62
62
|
/**
|
|
63
63
|
* Get the file path for a new work item file
|
|
64
|
-
* Format: new_{parentId}_{index}.md
|
|
64
|
+
* Format: new_{parentId}_{index}.md (with parent) or new_{index}.md (standalone)
|
|
65
65
|
*/
|
|
66
|
-
export declare function getNewWorkItemFilePath(folder: string, parentId: number, index: number): string;
|
|
66
|
+
export declare function getNewWorkItemFilePath(folder: string, parentId: number | undefined, index: number): string;
|
|
67
67
|
/**
|
|
68
|
-
* Find the next available index for a new work item file
|
|
69
|
-
*
|
|
68
|
+
* Find the next available index for a new work item file
|
|
69
|
+
* When parentId is provided, scans for new_{parentId}_*.md files
|
|
70
|
+
* When parentId is undefined, scans for new_*.md (standalone) files
|
|
70
71
|
*/
|
|
71
|
-
export declare function findNextNewFileIndex(folder: string, parentId
|
|
72
|
+
export declare function findNextNewFileIndex(folder: string, parentId?: number): Promise<number>;
|
|
72
73
|
/**
|
|
73
74
|
* Find all new work item files in a folder
|
|
74
75
|
* Returns paths to all new_*.md files
|
|
@@ -81,6 +82,7 @@ export declare function renameFile(oldPath: string, newPath: string): Promise<vo
|
|
|
81
82
|
/**
|
|
82
83
|
* Extract parent ID from a new work item filename
|
|
83
84
|
* e.g., "new_12345_1.md" -> 12345
|
|
85
|
+
* e.g., "new_1.md" -> null (standalone, no parent)
|
|
84
86
|
*/
|
|
85
87
|
export declare function extractParentIdFromNewFilename(filename: string): number | null;
|
|
86
88
|
//# sourceMappingURL=file-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-utils.d.ts","sourceRoot":"","sources":["../../src/sync/file-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAyB,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAKrF;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,UAAU,CAejE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIxF;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAGpF;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEvE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACjE,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB,EAAE,CAAC,CAwDH;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAiB3D;AAOD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"file-utils.d.ts","sourceRoot":"","sources":["../../src/sync/file-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAyB,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAKrF;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,UAAU,CAejE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIxF;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAGpF;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEvE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACjE,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB,EAAE,CAAC,CAwDH;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAiB3D;AAOD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAK1G;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4B7F;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAyB5E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhF;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG9E"}
|
package/build/sync/file-utils.js
CHANGED
|
@@ -153,14 +153,18 @@ export function validateFolderPath(folderPath) {
|
|
|
153
153
|
// ===========================================================================
|
|
154
154
|
/**
|
|
155
155
|
* Get the file path for a new work item file
|
|
156
|
-
* Format: new_{parentId}_{index}.md
|
|
156
|
+
* Format: new_{parentId}_{index}.md (with parent) or new_{index}.md (standalone)
|
|
157
157
|
*/
|
|
158
158
|
export function getNewWorkItemFilePath(folder, parentId, index) {
|
|
159
|
-
|
|
159
|
+
if (parentId !== undefined) {
|
|
160
|
+
return path.join(folder, `new_${parentId}_${index}.md`);
|
|
161
|
+
}
|
|
162
|
+
return path.join(folder, `new_${index}.md`);
|
|
160
163
|
}
|
|
161
164
|
/**
|
|
162
|
-
* Find the next available index for a new work item file
|
|
163
|
-
*
|
|
165
|
+
* Find the next available index for a new work item file
|
|
166
|
+
* When parentId is provided, scans for new_{parentId}_*.md files
|
|
167
|
+
* When parentId is undefined, scans for new_*.md (standalone) files
|
|
164
168
|
*/
|
|
165
169
|
export async function findNextNewFileIndex(folder, parentId) {
|
|
166
170
|
const config = getSyncConfig(folder);
|
|
@@ -170,8 +174,10 @@ export async function findNextNewFileIndex(folder, parentId) {
|
|
|
170
174
|
}
|
|
171
175
|
// List all .md files
|
|
172
176
|
const files = await fs.readdir(config.folder);
|
|
173
|
-
//
|
|
174
|
-
const pattern =
|
|
177
|
+
// Match pattern based on whether we have a parent
|
|
178
|
+
const pattern = parentId !== undefined
|
|
179
|
+
? new RegExp(`^new_${parentId}_(\\d+)\\.md$`)
|
|
180
|
+
: /^new_(\d+)\.md$/;
|
|
175
181
|
let maxIndex = 0;
|
|
176
182
|
for (const file of files) {
|
|
177
183
|
const match = file.match(pattern);
|
|
@@ -197,10 +203,12 @@ export async function findNewWorkItemFiles(folder) {
|
|
|
197
203
|
// List all .md files
|
|
198
204
|
const files = await fs.readdir(config.folder);
|
|
199
205
|
// Find new_*.md files (excluding task files)
|
|
206
|
+
// Two patterns: new_{parentId}_{seq}.md (with parent) and new_{seq}.md (standalone)
|
|
200
207
|
const newFiles = [];
|
|
201
|
-
const
|
|
208
|
+
const withParentPattern = /^new_\d+_\d+\.md$/;
|
|
209
|
+
const standalonePattern = /^new_\d+\.md$/;
|
|
202
210
|
for (const file of files) {
|
|
203
|
-
if (
|
|
211
|
+
if (withParentPattern.test(file) || standalonePattern.test(file)) {
|
|
204
212
|
newFiles.push(path.join(config.folder, file));
|
|
205
213
|
}
|
|
206
214
|
}
|
|
@@ -216,6 +224,7 @@ export async function renameFile(oldPath, newPath) {
|
|
|
216
224
|
/**
|
|
217
225
|
* Extract parent ID from a new work item filename
|
|
218
226
|
* e.g., "new_12345_1.md" -> 12345
|
|
227
|
+
* e.g., "new_1.md" -> null (standalone, no parent)
|
|
219
228
|
*/
|
|
220
229
|
export function extractParentIdFromNewFilename(filename) {
|
|
221
230
|
const match = filename.match(/^new_(\d+)_\d+\.md$/);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-utils.js","sourceRoot":"","sources":["../../src/sync/file-utils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"file-utils.js","sourceRoot":"","sources":["../../src/sync/file-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -92,7 +92,7 @@ export interface NewWorkItemFrontmatter {
|
|
|
92
92
|
title: string;
|
|
93
93
|
type: string;
|
|
94
94
|
state: string;
|
|
95
|
-
parent
|
|
95
|
+
parent?: number;
|
|
96
96
|
assignedTo?: string;
|
|
97
97
|
storyPoints?: number;
|
|
98
98
|
moscow?: string;
|
|
@@ -121,13 +121,14 @@ export declare function isNewWorkItem(frontmatter: Record<string, any>): boolean
|
|
|
121
121
|
export declare function parseNewWorkItemMarkdown(content: string): ParsedNewWorkItemFile;
|
|
122
122
|
/**
|
|
123
123
|
* Build ADO fields object for creating a new work item
|
|
124
|
-
* Inherits areaPath and iterationPath from parent work item
|
|
124
|
+
* Inherits areaPath and iterationPath from parent work item when available
|
|
125
125
|
*/
|
|
126
|
-
export declare function buildNewWorkItemFields(parsed: ParsedNewWorkItemFile, parentWorkItem
|
|
126
|
+
export declare function buildNewWorkItemFields(parsed: ParsedNewWorkItemFile, parentWorkItem?: any): Record<string, any>;
|
|
127
127
|
/**
|
|
128
128
|
* Generate a new work item template markdown file
|
|
129
|
+
* When parentId is undefined, creates a standalone work item template
|
|
129
130
|
*/
|
|
130
|
-
export declare function generateNewWorkItemTemplate(parentId: number, parentTitle: string, project: string, workItemType?: string): string;
|
|
131
|
+
export declare function generateNewWorkItemTemplate(parentId: number | undefined, parentTitle: string, project: string, workItemType?: string): string;
|
|
131
132
|
/**
|
|
132
133
|
* Update a new work item file after creation with the assigned ID
|
|
133
134
|
* Converts it from a "new" file to a synced file with proper frontmatter
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-serializer.d.ts","sourceRoot":"","sources":["../../src/sync/markdown-serializer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAGD,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,mBAAmB,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AA+GD;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,wBAAwB,CAgF5F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,CAuFzE;AASD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,CAkCzE;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,kBAAkB,EAC1B,eAAe,EAAE,GAAG,EACpB,eAAe,GAAE,OAAe,GAC/B;IAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAA;CAAE,CAiI3E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAY/E;AAOD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"markdown-serializer.d.ts","sourceRoot":"","sources":["../../src/sync/markdown-serializer.ts"],"names":[],"mappings":"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"}
|
|
@@ -439,17 +439,18 @@ export function parseNewWorkItemMarkdown(content) {
|
|
|
439
439
|
const frontmatterRaw = frontmatterMatch[1];
|
|
440
440
|
const frontmatterData = parseFrontmatter(frontmatterRaw);
|
|
441
441
|
// Validate required fields for new work items
|
|
442
|
-
if (!frontmatterData.parent || typeof frontmatterData.parent !== 'number') {
|
|
443
|
-
throw new Error('New work item files require a "parent" field with the parent work item ID');
|
|
444
|
-
}
|
|
445
442
|
if (!frontmatterData.title || typeof frontmatterData.title !== 'string') {
|
|
446
443
|
throw new Error('New work item files require a "title" field');
|
|
447
444
|
}
|
|
445
|
+
// Validate parent is a number if present
|
|
446
|
+
if (frontmatterData.parent !== undefined && frontmatterData.parent !== null && typeof frontmatterData.parent !== 'number') {
|
|
447
|
+
throw new Error('The "parent" field must be a number (work item ID)');
|
|
448
|
+
}
|
|
448
449
|
const frontmatter = {
|
|
449
450
|
title: frontmatterData.title,
|
|
450
451
|
type: frontmatterData.type || 'User Story',
|
|
451
452
|
state: frontmatterData.state || 'New',
|
|
452
|
-
parent: frontmatterData.parent,
|
|
453
|
+
parent: frontmatterData.parent ?? undefined,
|
|
453
454
|
assignedTo: frontmatterData.assignedTo,
|
|
454
455
|
storyPoints: frontmatterData.storyPoints,
|
|
455
456
|
moscow: frontmatterData.moscow,
|
|
@@ -504,10 +505,10 @@ export function parseNewWorkItemMarkdown(content) {
|
|
|
504
505
|
}
|
|
505
506
|
/**
|
|
506
507
|
* Build ADO fields object for creating a new work item
|
|
507
|
-
* Inherits areaPath and iterationPath from parent work item
|
|
508
|
+
* Inherits areaPath and iterationPath from parent work item when available
|
|
508
509
|
*/
|
|
509
510
|
export function buildNewWorkItemFields(parsed, parentWorkItem) {
|
|
510
|
-
const parentFields = parentWorkItem
|
|
511
|
+
const parentFields = parentWorkItem?.fields || {};
|
|
511
512
|
const fieldConfig = getAdditionalFieldConfig();
|
|
512
513
|
const fields = {
|
|
513
514
|
'System.Title': parsed.frontmatter.title,
|
|
@@ -571,25 +572,36 @@ export function buildNewWorkItemFields(parsed, parentWorkItem) {
|
|
|
571
572
|
}
|
|
572
573
|
/**
|
|
573
574
|
* Generate a new work item template markdown file
|
|
575
|
+
* When parentId is undefined, creates a standalone work item template
|
|
574
576
|
*/
|
|
575
577
|
export function generateNewWorkItemTemplate(parentId, parentTitle, project, workItemType = 'User Story') {
|
|
576
578
|
// Only include required fields - optional fields omitted to avoid empty value issues
|
|
577
579
|
const frontmatter = {
|
|
578
|
-
title:
|
|
580
|
+
title: `New ${workItemType} Title`,
|
|
579
581
|
type: workItemType,
|
|
580
582
|
state: 'New',
|
|
581
|
-
parent: parentId,
|
|
582
583
|
};
|
|
584
|
+
// Only include parent in frontmatter when provided
|
|
585
|
+
if (parentId !== undefined) {
|
|
586
|
+
frontmatter.parent = parentId;
|
|
587
|
+
}
|
|
583
588
|
let content = serializeFrontmatter(frontmatter);
|
|
584
589
|
content += '\n';
|
|
585
590
|
content += `<!-- Optional frontmatter fields (add to YAML above if needed):\n`;
|
|
591
|
+
if (parentId === undefined) {
|
|
592
|
+
content += `parent: 12345\n`;
|
|
593
|
+
}
|
|
586
594
|
content += `storyPoints: 3\n`;
|
|
587
595
|
content += `moscow: Should Have\n`;
|
|
596
|
+
content += `areaPath: Project\\Area\n`;
|
|
597
|
+
content += `iterationPath: Project\\Sprint 1\n`;
|
|
588
598
|
content += `tags:\n`;
|
|
589
599
|
content += `- tag1\n`;
|
|
590
600
|
content += `- tag2\n`;
|
|
591
601
|
content += `-->\n\n`;
|
|
592
|
-
|
|
602
|
+
if (parentId !== undefined) {
|
|
603
|
+
content += `> Parent: **#${parentId}** - ${parentTitle}\n`;
|
|
604
|
+
}
|
|
593
605
|
content += `> Project: ${project}\n`;
|
|
594
606
|
content += '\n# Description\n\n';
|
|
595
607
|
content += '[Your description here]\n\n';
|