@mcp-consultant-tools/azure-devops 30.0.0-beta.9 → 30.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/build/azure-devops-client.d.ts.map +1 -1
- package/build/azure-devops-client.js +23 -3
- package/build/azure-devops-client.js.map +1 -1
- package/build/cli/commands/index.d.ts +1 -0
- package/build/cli/commands/index.d.ts.map +1 -1
- package/build/cli/commands/index.js +3 -0
- package/build/cli/commands/index.js.map +1 -1
- package/build/cli/commands/test-commands.d.ts +7 -0
- package/build/cli/commands/test-commands.d.ts.map +1 -0
- package/build/cli/commands/test-commands.js +131 -0
- package/build/cli/commands/test-commands.js.map +1 -0
- package/build/cli/commands/work-item-commands.d.ts.map +1 -1
- package/build/cli/commands/work-item-commands.js +34 -0
- package/build/cli/commands/work-item-commands.js.map +1 -1
- package/build/context-factory.d.ts.map +1 -1
- package/build/context-factory.js +3 -1
- package/build/context-factory.js.map +1 -1
- package/build/schemas.d.ts +13 -0
- package/build/schemas.d.ts.map +1 -0
- package/build/schemas.js +47 -0
- package/build/schemas.js.map +1 -0
- package/build/services/checklist-service.d.ts.map +1 -1
- package/build/services/checklist-service.js +3 -0
- package/build/services/checklist-service.js.map +1 -1
- package/build/services/index.d.ts +1 -0
- package/build/services/index.d.ts.map +1 -1
- package/build/services/index.js +1 -0
- package/build/services/index.js.map +1 -1
- package/build/services/sync-service.d.ts.map +1 -1
- package/build/services/sync-service.js +75 -14
- package/build/services/sync-service.js.map +1 -1
- package/build/services/test-service.d.ts +106 -0
- package/build/services/test-service.d.ts.map +1 -0
- package/build/services/test-service.js +245 -0
- package/build/services/test-service.js.map +1 -0
- package/build/services/work-item-service.d.ts +25 -0
- package/build/services/work-item-service.d.ts.map +1 -1
- package/build/services/work-item-service.js +51 -3
- package/build/services/work-item-service.js.map +1 -1
- package/build/sync/annotation-parser.d.ts +52 -0
- package/build/sync/annotation-parser.d.ts.map +1 -0
- package/build/sync/annotation-parser.js +83 -0
- package/build/sync/annotation-parser.js.map +1 -0
- package/build/sync/field-aliases.d.ts +35 -0
- package/build/sync/field-aliases.d.ts.map +1 -0
- package/build/sync/field-aliases.js +76 -0
- package/build/sync/field-aliases.js.map +1 -0
- package/build/sync/html-converter.d.ts.map +1 -1
- package/build/sync/html-converter.js +12 -2
- package/build/sync/html-converter.js.map +1 -1
- package/build/sync/html-detection.d.ts +18 -65
- package/build/sync/html-detection.d.ts.map +1 -1
- package/build/sync/html-detection.js +72 -113
- package/build/sync/html-detection.js.map +1 -1
- package/build/sync/image-handler.d.ts +66 -0
- package/build/sync/image-handler.d.ts.map +1 -0
- package/build/sync/image-handler.js +135 -0
- package/build/sync/image-handler.js.map +1 -0
- package/build/sync/image-manifest.d.ts +66 -0
- package/build/sync/image-manifest.d.ts.map +1 -0
- package/build/sync/image-manifest.js +96 -0
- package/build/sync/image-manifest.js.map +1 -0
- package/build/sync/image-sync.d.ts +88 -0
- package/build/sync/image-sync.d.ts.map +1 -0
- package/build/sync/image-sync.js +274 -0
- package/build/sync/image-sync.js.map +1 -0
- package/build/sync/index.d.ts +7 -0
- package/build/sync/index.d.ts.map +1 -1
- package/build/sync/index.js +7 -0
- package/build/sync/index.js.map +1 -1
- package/build/sync/legacy-mappings.d.ts +37 -0
- package/build/sync/legacy-mappings.d.ts.map +1 -0
- package/build/sync/legacy-mappings.js +75 -0
- package/build/sync/legacy-mappings.js.map +1 -0
- package/build/sync/markdown-serializer.d.ts +54 -60
- package/build/sync/markdown-serializer.d.ts.map +1 -1
- package/build/sync/markdown-serializer.js +607 -545
- package/build/sync/markdown-serializer.js.map +1 -1
- package/build/sync/task-serializer.d.ts.map +1 -1
- package/build/sync/task-serializer.js +46 -8
- package/build/sync/task-serializer.js.map +1 -1
- package/build/sync/template-loader.d.ts +56 -0
- package/build/sync/template-loader.d.ts.map +1 -0
- package/build/sync/template-loader.js +138 -0
- package/build/sync/template-loader.js.map +1 -0
- package/build/sync/templates/bug.md +25 -0
- package/build/sync/templates/epic.md +23 -0
- package/build/sync/templates/feature.md +23 -0
- package/build/sync/templates/task.md +14 -0
- package/build/sync/templates/user-story.md +26 -0
- package/build/tool-examples.d.ts +20 -0
- package/build/tool-examples.d.ts.map +1 -1
- package/build/tool-examples.js +41 -0
- package/build/tool-examples.js.map +1 -1
- package/build/tools/build-tools.d.ts.map +1 -1
- package/build/tools/build-tools.js +7 -6
- package/build/tools/build-tools.js.map +1 -1
- package/build/tools/checklist-tools.d.ts.map +1 -1
- package/build/tools/checklist-tools.js +6 -5
- package/build/tools/checklist-tools.js.map +1 -1
- package/build/tools/index.d.ts +1 -0
- package/build/tools/index.d.ts.map +1 -1
- package/build/tools/index.js +5 -2
- package/build/tools/index.js.map +1 -1
- package/build/tools/pull-request-tools.d.ts.map +1 -1
- package/build/tools/pull-request-tools.js +15 -14
- package/build/tools/pull-request-tools.js.map +1 -1
- package/build/tools/sync-tools.d.ts.map +1 -1
- package/build/tools/sync-tools.js +9 -8
- package/build/tools/sync-tools.js.map +1 -1
- package/build/tools/test-tools.d.ts +3 -0
- package/build/tools/test-tools.d.ts.map +1 -0
- package/build/tools/test-tools.js +184 -0
- package/build/tools/test-tools.js.map +1 -0
- package/build/tools/variable-group-tools.d.ts.map +1 -1
- package/build/tools/variable-group-tools.js +2 -1
- package/build/tools/variable-group-tools.js.map +1 -1
- package/build/tools/visualize-tools.d.ts.map +1 -1
- package/build/tools/visualize-tools.js +2 -1
- package/build/tools/visualize-tools.js.map +1 -1
- package/build/tools/wiki-tools.d.ts.map +1 -1
- package/build/tools/wiki-tools.js +4 -3
- package/build/tools/wiki-tools.js.map +1 -1
- package/build/tools/work-item-tools.d.ts.map +1 -1
- package/build/tools/work-item-tools.js +42 -11
- package/build/tools/work-item-tools.js.map +1 -1
- package/build/types.d.ts +2 -0
- package/build/types.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Service - ADO Test Management API
|
|
3
|
+
*
|
|
4
|
+
* Uses _apis/test/ (not _apis/testplan/) to avoid Azure Test Plans license requirement.
|
|
5
|
+
* All runs are created with isAutomated: true to bypass the Test Plan requirement.
|
|
6
|
+
*/
|
|
7
|
+
export class TestService {
|
|
8
|
+
client;
|
|
9
|
+
workItem;
|
|
10
|
+
constructor(client, workItem) {
|
|
11
|
+
this.client = client;
|
|
12
|
+
this.workItem = workItem;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Create a test run. Always sets isAutomated: true (no Test Plan needed).
|
|
16
|
+
* Optionally links test cases to the run via hyperlinks.
|
|
17
|
+
*/
|
|
18
|
+
async createTestRun(project, name, options) {
|
|
19
|
+
this.client.validateProject(project);
|
|
20
|
+
const body = {
|
|
21
|
+
name,
|
|
22
|
+
isAutomated: true,
|
|
23
|
+
};
|
|
24
|
+
if (options?.comment)
|
|
25
|
+
body.comment = options.comment;
|
|
26
|
+
if (options?.buildId)
|
|
27
|
+
body.build = { id: options.buildId };
|
|
28
|
+
const response = await this.client.post(`${project}/_apis/test/runs?api-version=7.0`, body);
|
|
29
|
+
const runId = response.id;
|
|
30
|
+
const webAccessUrl = response.webAccessUrl ||
|
|
31
|
+
`https://dev.azure.com/${this.client.organization}/${encodeURIComponent(project)}/_testManagement/runs?runId=${runId}&_a=runCharts`;
|
|
32
|
+
// Link test cases to run via hyperlinks (workaround for missing artifact link support)
|
|
33
|
+
if (options?.testCaseIds && options.testCaseIds.length > 0) {
|
|
34
|
+
const dateStr = new Date().toISOString().split('T')[0];
|
|
35
|
+
for (const testCaseId of options.testCaseIds) {
|
|
36
|
+
try {
|
|
37
|
+
await this.workItem.updateWorkItem(project, testCaseId, [
|
|
38
|
+
{
|
|
39
|
+
op: 'add',
|
|
40
|
+
path: '/relations/-',
|
|
41
|
+
value: {
|
|
42
|
+
rel: 'Hyperlink',
|
|
43
|
+
url: webAccessUrl,
|
|
44
|
+
attributes: { comment: `Test Run #${runId} — ${name} (${dateStr})` },
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
]);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
// Non-fatal: log but don't fail the run creation
|
|
51
|
+
console.error(`Warning: failed to link test case #${testCaseId} to run #${runId}: ${err.message}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
runId,
|
|
57
|
+
name: response.name,
|
|
58
|
+
url: response.url,
|
|
59
|
+
webAccessUrl,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Add test results to an existing run.
|
|
64
|
+
*/
|
|
65
|
+
async addTestResults(project, runId, results) {
|
|
66
|
+
this.client.validateProject(project);
|
|
67
|
+
const body = results.map(r => {
|
|
68
|
+
const result = {
|
|
69
|
+
testCaseTitle: r.title,
|
|
70
|
+
outcome: r.outcome,
|
|
71
|
+
automatedTestName: r.automatedTestName || r.title,
|
|
72
|
+
automatedTestStorage: 'mcp-test',
|
|
73
|
+
};
|
|
74
|
+
if (r.comment)
|
|
75
|
+
result.comment = r.comment;
|
|
76
|
+
if (r.testCaseId)
|
|
77
|
+
result.testCase = { id: r.testCaseId };
|
|
78
|
+
return result;
|
|
79
|
+
});
|
|
80
|
+
const response = await this.client.post(`${project}/_apis/test/runs/${runId}/results?api-version=7.0`, body);
|
|
81
|
+
const resultItems = Array.isArray(response) ? response :
|
|
82
|
+
(response.value || response.results || [response]);
|
|
83
|
+
return {
|
|
84
|
+
count: resultItems.length,
|
|
85
|
+
results: resultItems.map((r) => ({
|
|
86
|
+
id: r.id,
|
|
87
|
+
title: r.testCaseTitle || r.title,
|
|
88
|
+
outcome: r.outcome,
|
|
89
|
+
})),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Mark a test run as completed.
|
|
94
|
+
*/
|
|
95
|
+
async completeTestRun(project, runId, comment) {
|
|
96
|
+
this.client.validateProject(project);
|
|
97
|
+
const body = { state: 'Completed' };
|
|
98
|
+
if (comment)
|
|
99
|
+
body.comment = comment;
|
|
100
|
+
const response = await this.client.patch(`${project}/_apis/test/runs/${runId}?api-version=7.0`, body);
|
|
101
|
+
return {
|
|
102
|
+
runId: response.id,
|
|
103
|
+
state: response.state,
|
|
104
|
+
totalTests: response.totalTests ?? 0,
|
|
105
|
+
passedTests: response.passedTests ?? 0,
|
|
106
|
+
failedTests: response.unanalyzedTests ?? response.failedTests ?? 0,
|
|
107
|
+
url: response.webAccessUrl || response.url,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* List test runs, optionally filtered by state and date.
|
|
112
|
+
*/
|
|
113
|
+
async getTestRuns(project, options) {
|
|
114
|
+
this.client.validateProject(project);
|
|
115
|
+
const params = ['api-version=7.0'];
|
|
116
|
+
const maxRuns = options?.maxRuns ?? 25;
|
|
117
|
+
params.push(`$top=${maxRuns}`);
|
|
118
|
+
if (options?.state)
|
|
119
|
+
params.push(`state=${options.state}`);
|
|
120
|
+
if (options?.fromDate)
|
|
121
|
+
params.push(`minLastUpdatedDate=${options.fromDate}`);
|
|
122
|
+
const response = await this.client.get(`${project}/_apis/test/runs?${params.join('&')}`);
|
|
123
|
+
return (response.value || []).map((r) => ({
|
|
124
|
+
runId: r.id,
|
|
125
|
+
name: r.name,
|
|
126
|
+
state: r.state,
|
|
127
|
+
totalTests: r.totalTests ?? 0,
|
|
128
|
+
passedTests: r.passedTests ?? 0,
|
|
129
|
+
failedTests: r.unanalyzedTests ?? 0,
|
|
130
|
+
completedDate: r.completedDate || '',
|
|
131
|
+
url: r.webAccessUrl || r.url,
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get results for a specific test run.
|
|
136
|
+
*/
|
|
137
|
+
async getTestRunResults(project, runId, outcome) {
|
|
138
|
+
this.client.validateProject(project);
|
|
139
|
+
let endpoint = `${project}/_apis/test/runs/${runId}/results?api-version=7.0`;
|
|
140
|
+
if (outcome)
|
|
141
|
+
endpoint += `&outcomes=${outcome}`;
|
|
142
|
+
const response = await this.client.get(endpoint);
|
|
143
|
+
return (response.value || []).map((r) => ({
|
|
144
|
+
resultId: r.id,
|
|
145
|
+
title: r.testCaseTitle || r.automatedTestName || '',
|
|
146
|
+
outcome: r.outcome,
|
|
147
|
+
comment: r.comment || '',
|
|
148
|
+
testCaseId: r.testCase?.id || null,
|
|
149
|
+
duration: r.durationInMs ?? 0,
|
|
150
|
+
}));
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get test run history for a specific test case.
|
|
154
|
+
* Queries recent runs and filters results by testCase.id.
|
|
155
|
+
*/
|
|
156
|
+
async getTestCaseHistory(project, testCaseId) {
|
|
157
|
+
this.client.validateProject(project);
|
|
158
|
+
// Get recent completed runs (last 100)
|
|
159
|
+
const runsResponse = await this.client.get(`${project}/_apis/test/runs?api-version=7.0&state=Completed&$top=100`);
|
|
160
|
+
const runs = runsResponse.value || [];
|
|
161
|
+
const history = [];
|
|
162
|
+
// Check each run for results referencing this test case
|
|
163
|
+
for (const run of runs) {
|
|
164
|
+
try {
|
|
165
|
+
const resultsResponse = await this.client.get(`${project}/_apis/test/runs/${run.id}/results?api-version=7.0`);
|
|
166
|
+
const results = resultsResponse.value || [];
|
|
167
|
+
const match = results.find((r) => r.testCase?.id === testCaseId);
|
|
168
|
+
if (match) {
|
|
169
|
+
history.push({
|
|
170
|
+
runId: run.id,
|
|
171
|
+
runName: run.name,
|
|
172
|
+
outcome: match.outcome,
|
|
173
|
+
completedDate: run.completedDate || '',
|
|
174
|
+
url: run.webAccessUrl || run.url,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
// Skip runs we can't read results for
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Sort by completedDate descending
|
|
183
|
+
history.sort((a, b) => (b.completedDate || '').localeCompare(a.completedDate || ''));
|
|
184
|
+
return history;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Link a test case to a user story (TestedBy) and/or a test run (Hyperlink).
|
|
188
|
+
* Idempotent — checks existing relations before adding.
|
|
189
|
+
*/
|
|
190
|
+
async linkTestCase(project, testCaseId, options) {
|
|
191
|
+
this.client.validateProject(project);
|
|
192
|
+
const linked = [];
|
|
193
|
+
// Get existing relations to check for duplicates
|
|
194
|
+
const workItemResponse = await this.client.get(`${project}/_apis/wit/workitems/${testCaseId}?$expand=relations&api-version=${this.client.apiVersion}`);
|
|
195
|
+
const existingRelations = workItemResponse.relations || [];
|
|
196
|
+
// Link to story via TestedBy-Reverse (test case → story)
|
|
197
|
+
if (options.storyId) {
|
|
198
|
+
const storyUrl = `${this.client.baseUrl}/${encodeURIComponent(project)}/_apis/wit/workItems/${options.storyId}`;
|
|
199
|
+
const alreadyLinked = existingRelations.some((r) => r.rel === 'Microsoft.VSTS.Common.TestedBy-Reverse' && r.url?.includes(`/${options.storyId}`));
|
|
200
|
+
if (!alreadyLinked) {
|
|
201
|
+
await this.workItem.updateWorkItem(project, testCaseId, [
|
|
202
|
+
{
|
|
203
|
+
op: 'add',
|
|
204
|
+
path: '/relations/-',
|
|
205
|
+
value: {
|
|
206
|
+
rel: 'Microsoft.VSTS.Common.TestedBy-Reverse',
|
|
207
|
+
url: storyUrl,
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
]);
|
|
211
|
+
linked.push(`TestedBy → Story #${options.storyId}`);
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
linked.push(`TestedBy → Story #${options.storyId} (already exists)`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Link to run via Hyperlink (no artifact link support for test runs)
|
|
218
|
+
if (options.runId) {
|
|
219
|
+
const runUrl = `https://dev.azure.com/${this.client.organization}/${encodeURIComponent(project)}/_testManagement/runs?runId=${options.runId}&_a=runCharts`;
|
|
220
|
+
const alreadyLinked = existingRelations.some((r) => r.rel === 'Hyperlink' && r.url === runUrl);
|
|
221
|
+
if (!alreadyLinked) {
|
|
222
|
+
const comment = options.runSummary
|
|
223
|
+
? `Test Run #${options.runId} — ${options.runSummary}`
|
|
224
|
+
: `Test Run #${options.runId}`;
|
|
225
|
+
await this.workItem.updateWorkItem(project, testCaseId, [
|
|
226
|
+
{
|
|
227
|
+
op: 'add',
|
|
228
|
+
path: '/relations/-',
|
|
229
|
+
value: {
|
|
230
|
+
rel: 'Hyperlink',
|
|
231
|
+
url: runUrl,
|
|
232
|
+
attributes: { comment },
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
]);
|
|
236
|
+
linked.push(`Hyperlink → Run #${options.runId}`);
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
linked.push(`Hyperlink → Run #${options.runId} (already exists)`);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return { linked };
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=test-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-service.js","sourceRoot":"","sources":["../../src/services/test-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,31 @@ export declare class WorkItemService {
|
|
|
17
17
|
url: string;
|
|
18
18
|
attributes?: Record<string, any>;
|
|
19
19
|
}>): Promise<any>;
|
|
20
|
+
/**
|
|
21
|
+
* Download a work item attachment by its GUID and write it to disk.
|
|
22
|
+
*
|
|
23
|
+
* The endpoint `_apis/wit/attachments/{guid}?download=true` returns the raw
|
|
24
|
+
* binary content. We write it to `{outputDir}/{filename}`.
|
|
25
|
+
*/
|
|
26
|
+
downloadAttachment(project: string, attachmentGuid: string, urlFileName: string, outputDir: string, outputFileName?: string): Promise<{
|
|
27
|
+
filePath: string;
|
|
28
|
+
fileName: string;
|
|
29
|
+
size: number;
|
|
30
|
+
guid: string;
|
|
31
|
+
}>;
|
|
32
|
+
/**
|
|
33
|
+
* Upload a local file as a work item attachment.
|
|
34
|
+
*
|
|
35
|
+
* The endpoint `_apis/wit/attachments?fileName={name}&uploadType=simple`
|
|
36
|
+
* accepts the raw file bytes (octet-stream) and returns the attachment URL
|
|
37
|
+
* which can be embedded in HTML fields as `<img src="...">`.
|
|
38
|
+
*/
|
|
39
|
+
uploadAttachment(project: string, filePath: string, fileName?: string): Promise<{
|
|
40
|
+
id: string;
|
|
41
|
+
url: string;
|
|
42
|
+
fileName: string;
|
|
43
|
+
size: number;
|
|
44
|
+
}>;
|
|
20
45
|
deleteWorkItem(project: string, workItemId: number): Promise<any>;
|
|
21
46
|
}
|
|
22
47
|
//# sourceMappingURL=work-item-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-item-service.d.ts","sourceRoot":"","sources":["../../src/services/work-item-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"work-item-service.d.ts","sourceRoot":"","sources":["../../src/services/work-item-service.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGnE,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,iBAAiB;IAEtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAWpC;IAEI,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAmB9D,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,GAAE,MAAY,GAAG,OAAO,CAAC,GAAG,CAAC;IAqCrF,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,MAAW,EACvB,MAAM,GAAE,SAAS,GAAG,MAAkB,EACtC,MAAM,CAAC,EAAE,MAAM,EAAE,EACjB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,GAAG,CAAC;IAmFT,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAQ7D,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAyBtE,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IA6B1F,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IA8BhH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAoBzF,yBAAyB,CAC7B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,IAAI,CAAC;IAcV,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,GAAG,EACX,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAClC,CAAC,GACD,OAAO,CAAC,GAAG,CAAC;IAoEf;;;;;OAKG;IACG,kBAAkB,CACtB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAwB9E;;;;;;OAMG;IACG,gBAAgB,CACpB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IA6BjE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;CAiBxE"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Work Item Service - Azure DevOps work item operations
|
|
3
3
|
*/
|
|
4
|
+
import * as fs from 'node:fs';
|
|
5
|
+
import * as path from 'node:path';
|
|
4
6
|
import { marked } from 'marked';
|
|
5
7
|
import { getAllLargeTextFields } from '../sync/html-detection.js';
|
|
6
8
|
export class WorkItemService {
|
|
@@ -27,7 +29,7 @@ export class WorkItemService {
|
|
|
27
29
|
id: response.id,
|
|
28
30
|
rev: response.rev,
|
|
29
31
|
url: response.url,
|
|
30
|
-
fields: response.fields,
|
|
32
|
+
fields: response.fields || {},
|
|
31
33
|
relations: response.relations || [],
|
|
32
34
|
_links: response._links,
|
|
33
35
|
commentVersionRef: response.commentVersionRef,
|
|
@@ -200,7 +202,7 @@ export class WorkItemService {
|
|
|
200
202
|
return {
|
|
201
203
|
id: response.id,
|
|
202
204
|
rev: response.rev,
|
|
203
|
-
fields: response.fields,
|
|
205
|
+
fields: response.fields || {},
|
|
204
206
|
project
|
|
205
207
|
};
|
|
206
208
|
}
|
|
@@ -263,12 +265,58 @@ export class WorkItemService {
|
|
|
263
265
|
return {
|
|
264
266
|
id: response.id,
|
|
265
267
|
rev: response.rev,
|
|
266
|
-
fields: response.fields,
|
|
268
|
+
fields: response.fields || {},
|
|
267
269
|
relations: response.relations || [],
|
|
268
270
|
url: response._links?.html?.href,
|
|
269
271
|
project
|
|
270
272
|
};
|
|
271
273
|
}
|
|
274
|
+
// ==================== WORK ITEM ATTACHMENT OPERATIONS ====================
|
|
275
|
+
/**
|
|
276
|
+
* Download a work item attachment by its GUID and write it to disk.
|
|
277
|
+
*
|
|
278
|
+
* The endpoint `_apis/wit/attachments/{guid}?download=true` returns the raw
|
|
279
|
+
* binary content. We write it to `{outputDir}/{filename}`.
|
|
280
|
+
*/
|
|
281
|
+
async downloadAttachment(project, attachmentGuid, urlFileName, outputDir, outputFileName) {
|
|
282
|
+
this.client.validateProject(project);
|
|
283
|
+
const response = await this.client.requestRaw(`${project}/_apis/wit/attachments/${attachmentGuid}?fileName=${encodeURIComponent(urlFileName)}&download=true&api-version=${this.client.apiVersion}`, 'GET', undefined, undefined, 'arraybuffer');
|
|
284
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
285
|
+
const localName = outputFileName ?? urlFileName;
|
|
286
|
+
const filePath = path.join(outputDir, localName);
|
|
287
|
+
fs.writeFileSync(filePath, Buffer.from(response.data));
|
|
288
|
+
return {
|
|
289
|
+
filePath,
|
|
290
|
+
fileName: localName,
|
|
291
|
+
size: response.data.byteLength,
|
|
292
|
+
guid: attachmentGuid,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Upload a local file as a work item attachment.
|
|
297
|
+
*
|
|
298
|
+
* The endpoint `_apis/wit/attachments?fileName={name}&uploadType=simple`
|
|
299
|
+
* accepts the raw file bytes (octet-stream) and returns the attachment URL
|
|
300
|
+
* which can be embedded in HTML fields as `<img src="...">`.
|
|
301
|
+
*/
|
|
302
|
+
async uploadAttachment(project, filePath, fileName) {
|
|
303
|
+
this.client.validateProject(project);
|
|
304
|
+
if (!this.client.config.enableWorkItemWrite) {
|
|
305
|
+
throw new Error('Work item write operations are disabled. Set AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE=true to enable.');
|
|
306
|
+
}
|
|
307
|
+
if (!fs.existsSync(filePath)) {
|
|
308
|
+
throw new Error(`Attachment file not found: ${filePath}`);
|
|
309
|
+
}
|
|
310
|
+
const data = fs.readFileSync(filePath);
|
|
311
|
+
const finalName = fileName || path.basename(filePath);
|
|
312
|
+
const response = await this.client.requestRaw(`${project}/_apis/wit/attachments?fileName=${encodeURIComponent(finalName)}&uploadType=simple&api-version=${this.client.apiVersion}`, 'POST', data, { 'Content-Type': 'application/octet-stream' });
|
|
313
|
+
return {
|
|
314
|
+
id: response.data.id,
|
|
315
|
+
url: response.data.url,
|
|
316
|
+
fileName: finalName,
|
|
317
|
+
size: data.byteLength,
|
|
318
|
+
};
|
|
319
|
+
}
|
|
272
320
|
async deleteWorkItem(project, workItemId) {
|
|
273
321
|
this.client.validateProject(project);
|
|
274
322
|
if (!this.client.config.enableWorkItemDelete) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-item-service.js","sourceRoot":"","sources":["../../src/services/work-item-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"work-item-service.js","sourceRoot":"","sources":["../../src/services/work-item-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse annotated body sections from a synced markdown file.
|
|
3
|
+
*
|
|
4
|
+
* A `##` line is a section boundary ONLY when the first non-empty line that
|
|
5
|
+
* follows it is `<!-- ado-field: REFNAME -->`. Any other `##` line is treated
|
|
6
|
+
* as part of the surrounding annotated section's content — this prevents
|
|
7
|
+
* silent truncation of fields (e.g. Repro Steps) when the field body legitimately
|
|
8
|
+
* contains `##` text.
|
|
9
|
+
*
|
|
10
|
+
* Anything before the first annotated section is the prose preamble.
|
|
11
|
+
*/
|
|
12
|
+
export interface AnnotatedSection {
|
|
13
|
+
/** ADO reference name this section maps to. */
|
|
14
|
+
refname: string;
|
|
15
|
+
/** Body content (everything between the annotation and the next `##` heading). */
|
|
16
|
+
content: string;
|
|
17
|
+
/** Heading text as it appears in the file (for error reporting). */
|
|
18
|
+
heading: string;
|
|
19
|
+
/** Index of the heading line in the source (0-based). */
|
|
20
|
+
lineIndex: number;
|
|
21
|
+
}
|
|
22
|
+
export interface LocalOnlySection {
|
|
23
|
+
/** Heading text as it appears in the file. */
|
|
24
|
+
heading: string;
|
|
25
|
+
/** Body content. */
|
|
26
|
+
content: string;
|
|
27
|
+
/** Index of the heading line in the source (0-based). */
|
|
28
|
+
lineIndex: number;
|
|
29
|
+
}
|
|
30
|
+
export interface ParseAnnotationsResult {
|
|
31
|
+
/** Sections that sync to ADO fields. */
|
|
32
|
+
annotated: AnnotatedSection[];
|
|
33
|
+
/** Sections preserved in the file but not synced. */
|
|
34
|
+
localOnly: LocalOnlySection[];
|
|
35
|
+
/** Any content before the first `##` heading (prose preamble). Trimmed. */
|
|
36
|
+
preamble: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Parse the body of a markdown file (everything after frontmatter) into
|
|
40
|
+
* annotated and local-only sections.
|
|
41
|
+
*/
|
|
42
|
+
export declare function parseAnnotations(body: string): ParseAnnotationsResult;
|
|
43
|
+
/**
|
|
44
|
+
* Build an annotated `##` section as a string.
|
|
45
|
+
*/
|
|
46
|
+
export declare function serializeAnnotatedSection(heading: string, refname: string, content: string): string;
|
|
47
|
+
/**
|
|
48
|
+
* Check whether a body has any `<!-- ado-field: ... -->` annotations.
|
|
49
|
+
* Used to decide between annotated parsing and legacy fallback.
|
|
50
|
+
*/
|
|
51
|
+
export declare function hasAnnotations(body: string): boolean;
|
|
52
|
+
//# sourceMappingURL=annotation-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"annotation-parser.d.ts","sourceRoot":"","sources":["../../src/sync/annotation-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,wCAAwC;IACxC,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,qDAAqD;IACrD,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;CAClB;AAKD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,CAsDrE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,MAAM,CAGR;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse annotated body sections from a synced markdown file.
|
|
3
|
+
*
|
|
4
|
+
* A `##` line is a section boundary ONLY when the first non-empty line that
|
|
5
|
+
* follows it is `<!-- ado-field: REFNAME -->`. Any other `##` line is treated
|
|
6
|
+
* as part of the surrounding annotated section's content — this prevents
|
|
7
|
+
* silent truncation of fields (e.g. Repro Steps) when the field body legitimately
|
|
8
|
+
* contains `##` text.
|
|
9
|
+
*
|
|
10
|
+
* Anything before the first annotated section is the prose preamble.
|
|
11
|
+
*/
|
|
12
|
+
const SECTION_HEADING_RE = /^##\s+(.+?)\s*$/;
|
|
13
|
+
const ANNOTATION_RE = /^<!--\s*ado-field:\s*([A-Za-z0-9_.\-]+)\s*-->$/;
|
|
14
|
+
/**
|
|
15
|
+
* Parse the body of a markdown file (everything after frontmatter) into
|
|
16
|
+
* annotated and local-only sections.
|
|
17
|
+
*/
|
|
18
|
+
export function parseAnnotations(body) {
|
|
19
|
+
const lines = body.split('\n');
|
|
20
|
+
const annotated = [];
|
|
21
|
+
// Section boundaries: only `##` headings whose next non-empty line is an
|
|
22
|
+
// `<!-- ado-field: REFNAME -->` annotation. All other `##` lines are
|
|
23
|
+
// treated as content of whatever annotated section currently encloses them.
|
|
24
|
+
const sections = [];
|
|
25
|
+
for (let i = 0; i < lines.length; i++) {
|
|
26
|
+
const headingMatch = lines[i].match(SECTION_HEADING_RE);
|
|
27
|
+
if (!headingMatch)
|
|
28
|
+
continue;
|
|
29
|
+
let probe = i + 1;
|
|
30
|
+
while (probe < lines.length && lines[probe].trim() === '')
|
|
31
|
+
probe++;
|
|
32
|
+
if (probe >= lines.length)
|
|
33
|
+
continue;
|
|
34
|
+
const annotationMatch = lines[probe].trim().match(ANNOTATION_RE);
|
|
35
|
+
if (!annotationMatch)
|
|
36
|
+
continue;
|
|
37
|
+
sections.push({
|
|
38
|
+
headingLine: i,
|
|
39
|
+
annotationLine: probe,
|
|
40
|
+
heading: headingMatch[1].trim(),
|
|
41
|
+
refname: annotationMatch[1],
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
// Preamble = everything before the first annotated `##` heading.
|
|
45
|
+
const preambleEnd = sections.length > 0 ? sections[0].headingLine : lines.length;
|
|
46
|
+
const preamble = lines.slice(0, preambleEnd).join('\n').trim();
|
|
47
|
+
for (let idx = 0; idx < sections.length; idx++) {
|
|
48
|
+
const current = sections[idx];
|
|
49
|
+
const next = sections[idx + 1];
|
|
50
|
+
const bodyStart = current.annotationLine + 1;
|
|
51
|
+
const bodyEnd = next ? next.headingLine : lines.length;
|
|
52
|
+
const content = lines.slice(bodyStart, bodyEnd).join('\n');
|
|
53
|
+
annotated.push({
|
|
54
|
+
refname: current.refname,
|
|
55
|
+
content: stripTrailingSeparators(content).trim(),
|
|
56
|
+
heading: current.heading,
|
|
57
|
+
lineIndex: current.headingLine,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
// Local-only sections no longer exist under the annotation-strict model.
|
|
61
|
+
// The field is kept on the result for backward compatibility with callers
|
|
62
|
+
// that destructure it.
|
|
63
|
+
return { annotated, localOnly: [], preamble };
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Build an annotated `##` section as a string.
|
|
67
|
+
*/
|
|
68
|
+
export function serializeAnnotatedSection(heading, refname, content) {
|
|
69
|
+
const body = content.trim() || '';
|
|
70
|
+
return `## ${heading}\n<!-- ado-field: ${refname} -->\n\n${body}\n`;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check whether a body has any `<!-- ado-field: ... -->` annotations.
|
|
74
|
+
* Used to decide between annotated parsing and legacy fallback.
|
|
75
|
+
*/
|
|
76
|
+
export function hasAnnotations(body) {
|
|
77
|
+
return /<!--\s*ado-field:\s*[A-Za-z0-9_.\-]+\s*-->/.test(body);
|
|
78
|
+
}
|
|
79
|
+
function stripTrailingSeparators(content) {
|
|
80
|
+
// Strip trailing `---` horizontal rules used as visual separators between sections.
|
|
81
|
+
return content.replace(/(\n\s*---\s*)+\s*$/, '');
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=annotation-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"annotation-parser.js","sourceRoot":"","sources":["../../src/sync/annotation-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frontmatter key → ADO reference name resolver.
|
|
3
|
+
*
|
|
4
|
+
* Frontmatter in synced markdown files uses raw ADO refnames as keys
|
|
5
|
+
* (e.g. `System.Title`, `Custom.ConsultancyProcess`). A small alias table
|
|
6
|
+
* provides friendly shortcuts for the most common fields so human-written
|
|
7
|
+
* files stay readable.
|
|
8
|
+
*
|
|
9
|
+
* Resolution rules:
|
|
10
|
+
* 1. Reserved keys (sync metadata) are returned as-is with a null refname.
|
|
11
|
+
* 2. Alias → refname lookup (case-sensitive).
|
|
12
|
+
* 3. Unknown keys are passed through unchanged (treated as refnames).
|
|
13
|
+
*/
|
|
14
|
+
/** Keys that are sync metadata, never sent to ADO as field updates. */
|
|
15
|
+
export declare const RESERVED_FRONTMATTER_KEYS: Set<string>;
|
|
16
|
+
/**
|
|
17
|
+
* Friendly aliases → ADO reference names. Add entries here when a field is
|
|
18
|
+
* common enough across clients to deserve a short key.
|
|
19
|
+
*/
|
|
20
|
+
export declare const FIELD_ALIASES: Record<string, string>;
|
|
21
|
+
/**
|
|
22
|
+
* Resolve a frontmatter key to its ADO refname, or null if the key is reserved
|
|
23
|
+
* sync metadata.
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveRefname(key: string): string | null;
|
|
26
|
+
/**
|
|
27
|
+
* When writing frontmatter from ADO data, pick the friendliest key for a given
|
|
28
|
+
* refname (alias if one exists, else the refname itself).
|
|
29
|
+
*/
|
|
30
|
+
export declare function preferredKey(refname: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* True when a frontmatter key is reserved sync metadata (not an ADO field).
|
|
33
|
+
*/
|
|
34
|
+
export declare function isReservedKey(key: string): boolean;
|
|
35
|
+
//# sourceMappingURL=field-aliases.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-aliases.d.ts","sourceRoot":"","sources":["../../src/sync/field-aliases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,uEAAuE;AACvE,eAAO,MAAM,yBAAyB,aASpC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAehD,CAAC;AAWF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGzD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAElD"}
|