ado-sync 0.1.46 → 0.1.48
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/.next-steps.md +179 -0
- package/README.md +22 -945
- package/dist/azure/test-cases.js +39 -6
- package/dist/azure/test-cases.js.map +1 -1
- package/dist/azure/work-items.d.ts +60 -0
- package/dist/azure/work-items.js +194 -0
- package/dist/azure/work-items.js.map +1 -0
- package/dist/cli.js +396 -28
- package/dist/cli.js.map +1 -1
- package/dist/config.js +50 -0
- package/dist/config.js.map +1 -1
- package/dist/issues/ado-bugs.d.ts +23 -0
- package/dist/issues/ado-bugs.js +59 -0
- package/dist/issues/ado-bugs.js.map +1 -0
- package/dist/issues/create-issues.d.ts +32 -0
- package/dist/issues/create-issues.js +236 -0
- package/dist/issues/create-issues.js.map +1 -0
- package/dist/issues/github.d.ts +22 -0
- package/dist/issues/github.js +95 -0
- package/dist/issues/github.js.map +1 -0
- package/dist/mcp-server.d.ts +35 -0
- package/dist/mcp-server.js +507 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/sync/cache.d.ts +7 -1
- package/dist/sync/cache.js.map +1 -1
- package/dist/sync/engine.js +105 -51
- package/dist/sync/engine.js.map +1 -1
- package/dist/sync/generate.d.ts +27 -0
- package/dist/sync/generate.js +184 -0
- package/dist/sync/generate.js.map +1 -0
- package/dist/sync/manifest.d.ts +69 -0
- package/dist/sync/manifest.js +197 -0
- package/dist/sync/manifest.js.map +1 -0
- package/dist/sync/publish-results.d.ts +8 -1
- package/dist/sync/publish-results.js +139 -2
- package/dist/sync/publish-results.js.map +1 -1
- package/dist/types.d.ts +55 -0
- package/docs/agent-setup.md +204 -0
- package/docs/cli.md +241 -0
- package/docs/mcp-server.md +275 -0
- package/docs/publish-test-results.md +136 -2
- package/docs/troubleshooting.md +101 -0
- package/docs/work-item-links.md +115 -0
- package/docs/workflows.md +381 -0
- package/llms.txt +164 -0
- package/package.json +4 -2
- package/.cucumber/.ado-sync-state.json +0 -282
- package/.cucumber/ado-sync.yaml +0 -21
- package/.cucumber/features/cart.feature +0 -62
- package/.cucumber/features/checkout.feature +0 -100
- package/.cucumber/features/homepage.feature +0 -7
- package/.cucumber/features/inventory.feature +0 -59
- package/.cucumber/features/login.feature +0 -74
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* ado-sync MCP Server
|
|
4
|
+
*
|
|
5
|
+
* Exposes ado-sync operations as MCP tools so AI agents (Claude Code,
|
|
6
|
+
* GitHub Copilot Agent Mode, Cursor) can call them directly during
|
|
7
|
+
* agentic workflows — no manual CLI invocation required.
|
|
8
|
+
*
|
|
9
|
+
* Tools exposed:
|
|
10
|
+
* validate_config — check config + Azure connectivity
|
|
11
|
+
* get_test_cases — list test cases in a suite
|
|
12
|
+
* get_test_case — fetch a single test case by ID
|
|
13
|
+
* create_test_case — create a test case from a spec description
|
|
14
|
+
* push_specs — push local spec files to Azure DevOps
|
|
15
|
+
* pull_specs — pull Azure DevOps changes to local files
|
|
16
|
+
* status — show diff between local and Azure
|
|
17
|
+
* generate_specs — generate local spec files from ADO User Stories
|
|
18
|
+
* get_work_items — fetch ADO User Stories by ID, WIQL query, or area path
|
|
19
|
+
* publish_test_results — publish test results to Azure DevOps
|
|
20
|
+
* create_issue — file a GitHub Issue or ADO Bug for a test failure
|
|
21
|
+
* get_story_context — planner-agent feed: AC items, suggested tags, linked TCs
|
|
22
|
+
* generate_manifest — write .ai-workflow-manifest-{id}.json for a story
|
|
23
|
+
*
|
|
24
|
+
* Usage (register in .claude/settings.json or .vscode/mcp.json):
|
|
25
|
+
*
|
|
26
|
+
* "ado-sync": {
|
|
27
|
+
* "command": "node",
|
|
28
|
+
* "args": ["./dist/mcp-server.js"],
|
|
29
|
+
* "env": { "AZURE_DEVOPS_TOKEN": "..." }
|
|
30
|
+
* }
|
|
31
|
+
*
|
|
32
|
+
* Config file: resolves ado-sync.json / ado-sync.yml from the working
|
|
33
|
+
* directory by default. Override with ADO_SYNC_CONFIG env var.
|
|
34
|
+
*/
|
|
35
|
+
import 'dotenv/config';
|
|
@@ -0,0 +1,507 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* ado-sync MCP Server
|
|
5
|
+
*
|
|
6
|
+
* Exposes ado-sync operations as MCP tools so AI agents (Claude Code,
|
|
7
|
+
* GitHub Copilot Agent Mode, Cursor) can call them directly during
|
|
8
|
+
* agentic workflows — no manual CLI invocation required.
|
|
9
|
+
*
|
|
10
|
+
* Tools exposed:
|
|
11
|
+
* validate_config — check config + Azure connectivity
|
|
12
|
+
* get_test_cases — list test cases in a suite
|
|
13
|
+
* get_test_case — fetch a single test case by ID
|
|
14
|
+
* create_test_case — create a test case from a spec description
|
|
15
|
+
* push_specs — push local spec files to Azure DevOps
|
|
16
|
+
* pull_specs — pull Azure DevOps changes to local files
|
|
17
|
+
* status — show diff between local and Azure
|
|
18
|
+
* generate_specs — generate local spec files from ADO User Stories
|
|
19
|
+
* get_work_items — fetch ADO User Stories by ID, WIQL query, or area path
|
|
20
|
+
* publish_test_results — publish test results to Azure DevOps
|
|
21
|
+
* create_issue — file a GitHub Issue or ADO Bug for a test failure
|
|
22
|
+
* get_story_context — planner-agent feed: AC items, suggested tags, linked TCs
|
|
23
|
+
* generate_manifest — write .ai-workflow-manifest-{id}.json for a story
|
|
24
|
+
*
|
|
25
|
+
* Usage (register in .claude/settings.json or .vscode/mcp.json):
|
|
26
|
+
*
|
|
27
|
+
* "ado-sync": {
|
|
28
|
+
* "command": "node",
|
|
29
|
+
* "args": ["./dist/mcp-server.js"],
|
|
30
|
+
* "env": { "AZURE_DEVOPS_TOKEN": "..." }
|
|
31
|
+
* }
|
|
32
|
+
*
|
|
33
|
+
* Config file: resolves ado-sync.json / ado-sync.yml from the working
|
|
34
|
+
* directory by default. Override with ADO_SYNC_CONFIG env var.
|
|
35
|
+
*/
|
|
36
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
37
|
+
if (k2 === undefined) k2 = k;
|
|
38
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
39
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
40
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
41
|
+
}
|
|
42
|
+
Object.defineProperty(o, k2, desc);
|
|
43
|
+
}) : (function(o, m, k, k2) {
|
|
44
|
+
if (k2 === undefined) k2 = k;
|
|
45
|
+
o[k2] = m[k];
|
|
46
|
+
}));
|
|
47
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
48
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
49
|
+
}) : function(o, v) {
|
|
50
|
+
o["default"] = v;
|
|
51
|
+
});
|
|
52
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
53
|
+
var ownKeys = function(o) {
|
|
54
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
55
|
+
var ar = [];
|
|
56
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
57
|
+
return ar;
|
|
58
|
+
};
|
|
59
|
+
return ownKeys(o);
|
|
60
|
+
};
|
|
61
|
+
return function (mod) {
|
|
62
|
+
if (mod && mod.__esModule) return mod;
|
|
63
|
+
var result = {};
|
|
64
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
65
|
+
__setModuleDefault(result, mod);
|
|
66
|
+
return result;
|
|
67
|
+
};
|
|
68
|
+
})();
|
|
69
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
70
|
+
// Suppress DEP0169 (url.parse) from azure-devops-node-api
|
|
71
|
+
const originalEmit = process.emit;
|
|
72
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
73
|
+
process.emit = function (event, ...args) {
|
|
74
|
+
if (event === 'warning' && args[0]?.code === 'DEP0169')
|
|
75
|
+
return false;
|
|
76
|
+
return originalEmit.apply(process, [event, ...args]);
|
|
77
|
+
};
|
|
78
|
+
require("dotenv/config");
|
|
79
|
+
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
80
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
81
|
+
const path = __importStar(require("path"));
|
|
82
|
+
const zod_1 = require("zod");
|
|
83
|
+
const client_1 = require("./azure/client");
|
|
84
|
+
const test_cases_1 = require("./azure/test-cases");
|
|
85
|
+
const work_items_1 = require("./azure/work-items");
|
|
86
|
+
const config_1 = require("./config");
|
|
87
|
+
const create_issues_1 = require("./issues/create-issues");
|
|
88
|
+
const engine_1 = require("./sync/engine");
|
|
89
|
+
const generate_1 = require("./sync/generate");
|
|
90
|
+
const manifest_1 = require("./sync/manifest");
|
|
91
|
+
const publish_results_1 = require("./sync/publish-results");
|
|
92
|
+
// ─── Config resolution ────────────────────────────────────────────────────────
|
|
93
|
+
function resolveConfig(configPath, overrides) {
|
|
94
|
+
const resolved = (0, config_1.resolveConfigPath)(configPath ?? process.env.ADO_SYNC_CONFIG);
|
|
95
|
+
const config = (0, config_1.loadConfig)(resolved);
|
|
96
|
+
if (overrides?.length)
|
|
97
|
+
(0, config_1.applyOverrides)(config, overrides);
|
|
98
|
+
return { config, configDir: path.dirname(resolved), configPath: resolved };
|
|
99
|
+
}
|
|
100
|
+
// ─── Server setup ─────────────────────────────────────────────────────────────
|
|
101
|
+
const server = new mcp_js_1.McpServer({
|
|
102
|
+
name: 'ado-sync',
|
|
103
|
+
version: '1.0.0',
|
|
104
|
+
}, {
|
|
105
|
+
instructions: 'Tools for bidirectional sync between local test specs and Azure DevOps Test Cases. ' +
|
|
106
|
+
'Most tools load config from ado-sync.json in the working directory (or ADO_SYNC_CONFIG env var). ' +
|
|
107
|
+
'Always call validate_config first to confirm connectivity before running other tools.',
|
|
108
|
+
});
|
|
109
|
+
// ─── Tool: validate_config ────────────────────────────────────────────────────
|
|
110
|
+
server.tool('validate_config', 'Validate the ado-sync config file and verify Azure DevOps connectivity. ' +
|
|
111
|
+
'Returns a checklist of passed/failed steps.', {
|
|
112
|
+
configPath: zod_1.z.string().optional().describe('Path to config file (default: ado-sync.json in cwd)'),
|
|
113
|
+
}, async ({ configPath }) => {
|
|
114
|
+
const checks = [];
|
|
115
|
+
let cfg;
|
|
116
|
+
// Step 1: load config
|
|
117
|
+
try {
|
|
118
|
+
cfg = resolveConfig(configPath);
|
|
119
|
+
checks.push({ label: 'Config loaded', ok: true, detail: cfg.configPath });
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
checks.push({ label: 'Config loaded', ok: false, detail: err.message });
|
|
123
|
+
return { content: [{ type: 'text', text: formatChecks(checks) }] };
|
|
124
|
+
}
|
|
125
|
+
const { config } = cfg;
|
|
126
|
+
// Step 2: Azure connection
|
|
127
|
+
let client;
|
|
128
|
+
try {
|
|
129
|
+
client = await client_1.AzureClient.create(config);
|
|
130
|
+
checks.push({ label: 'Azure connection', ok: true, detail: config.orgUrl });
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
checks.push({ label: 'Azure connection', ok: false, detail: err.message });
|
|
134
|
+
return { content: [{ type: 'text', text: formatChecks(checks) }] };
|
|
135
|
+
}
|
|
136
|
+
// Step 3: project
|
|
137
|
+
try {
|
|
138
|
+
const coreApi = await client.getCoreApi();
|
|
139
|
+
const proj = await coreApi.getProject(config.project);
|
|
140
|
+
checks.push({ label: `Project "${config.project}"`, ok: !!proj?.id, detail: proj?.id ? 'found' : 'not found' });
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
checks.push({ label: `Project "${config.project}"`, ok: false, detail: err.message });
|
|
144
|
+
}
|
|
145
|
+
// Step 4: test plans
|
|
146
|
+
const planApi = await client.getTestPlanApi();
|
|
147
|
+
const planIds = config.testPlans?.map(p => p.id) ?? [config.testPlan.id];
|
|
148
|
+
for (const id of planIds) {
|
|
149
|
+
try {
|
|
150
|
+
const plan = await planApi.getTestPlanById(config.project, id);
|
|
151
|
+
checks.push({ label: `Test Plan #${id}`, ok: !!plan?.id, detail: plan?.name ?? 'not found' });
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
checks.push({ label: `Test Plan #${id}`, ok: false, detail: err.message });
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return { content: [{ type: 'text', text: formatChecks(checks) }] };
|
|
158
|
+
});
|
|
159
|
+
function formatChecks(checks) {
|
|
160
|
+
const lines = checks.map(c => `${c.ok ? '✓' : '✗'} ${c.label}${c.detail ? ` — ${c.detail}` : ''}`);
|
|
161
|
+
const allOk = checks.every(c => c.ok);
|
|
162
|
+
lines.push('');
|
|
163
|
+
lines.push(allOk ? 'All checks passed.' : 'Some checks failed. See above for details.');
|
|
164
|
+
return lines.join('\n');
|
|
165
|
+
}
|
|
166
|
+
// ─── Tool: get_test_cases ─────────────────────────────────────────────────────
|
|
167
|
+
server.tool('get_test_cases', 'List all test cases in a Azure DevOps test suite. Returns id, title, tags, and step count.', {
|
|
168
|
+
suiteId: zod_1.z.number().optional().describe('Suite ID (defaults to plan root suite)'),
|
|
169
|
+
configPath: zod_1.z.string().optional().describe('Path to ado-sync config file'),
|
|
170
|
+
}, async ({ suiteId, configPath }) => {
|
|
171
|
+
const { config } = resolveConfig(configPath);
|
|
172
|
+
const client = await client_1.AzureClient.create(config);
|
|
173
|
+
const tcs = await (0, test_cases_1.getTestCasesInSuite)(client, config, suiteId);
|
|
174
|
+
const summary = tcs.map(tc => ({
|
|
175
|
+
id: tc.id,
|
|
176
|
+
title: tc.title,
|
|
177
|
+
tags: tc.tags,
|
|
178
|
+
stepCount: tc.steps.length,
|
|
179
|
+
changedDate: tc.changedDate,
|
|
180
|
+
}));
|
|
181
|
+
return {
|
|
182
|
+
content: [{
|
|
183
|
+
type: 'text',
|
|
184
|
+
text: `Found ${tcs.length} test case(s).\n\n${JSON.stringify(summary, null, 2)}`,
|
|
185
|
+
}],
|
|
186
|
+
};
|
|
187
|
+
});
|
|
188
|
+
// ─── Tool: get_test_case ──────────────────────────────────────────────────────
|
|
189
|
+
server.tool('get_test_case', 'Fetch a single Azure DevOps test case by ID. Returns full details including steps.', {
|
|
190
|
+
id: zod_1.z.number().describe('Azure DevOps Test Case work item ID'),
|
|
191
|
+
configPath: zod_1.z.string().optional().describe('Path to ado-sync config file'),
|
|
192
|
+
}, async ({ id, configPath }) => {
|
|
193
|
+
const { config } = resolveConfig(configPath);
|
|
194
|
+
const client = await client_1.AzureClient.create(config);
|
|
195
|
+
const tc = await (0, test_cases_1.getTestCase)(client, id, config.sync?.titleField ?? 'System.Title');
|
|
196
|
+
if (!tc) {
|
|
197
|
+
return { content: [{ type: 'text', text: `Test case #${id} not found.` }] };
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
content: [{
|
|
201
|
+
type: 'text',
|
|
202
|
+
text: JSON.stringify(tc, null, 2),
|
|
203
|
+
}],
|
|
204
|
+
};
|
|
205
|
+
});
|
|
206
|
+
// ─── Tool: push_specs ─────────────────────────────────────────────────────────
|
|
207
|
+
server.tool('push_specs', 'Push local test spec files to Azure DevOps — creates new test cases or updates existing ones. ' +
|
|
208
|
+
'Use dry_run=true to preview changes without modifying anything.', {
|
|
209
|
+
dryRun: zod_1.z.boolean().optional().default(false).describe('Preview changes without modifying Azure DevOps'),
|
|
210
|
+
tags: zod_1.z.string().optional().describe('Cucumber tag expression filter, e.g. "@smoke and not @wip"'),
|
|
211
|
+
configPath: zod_1.z.string().optional().describe('Path to ado-sync config file'),
|
|
212
|
+
configOverrides: zod_1.z.array(zod_1.z.string()).optional().describe('Config overrides, e.g. ["sync.tagPrefix=tc"]'),
|
|
213
|
+
}, async ({ dryRun, tags, configPath, configOverrides }) => {
|
|
214
|
+
const { config, configDir } = resolveConfig(configPath, configOverrides);
|
|
215
|
+
const results = await (0, engine_1.push)(config, configDir, { dryRun, tags });
|
|
216
|
+
return { content: [{ type: 'text', text: formatSyncResults(results, dryRun) }] };
|
|
217
|
+
});
|
|
218
|
+
// ─── Tool: pull_specs ─────────────────────────────────────────────────────────
|
|
219
|
+
server.tool('pull_specs', 'Pull Azure DevOps test case changes into local spec files. ' +
|
|
220
|
+
'Use dry_run=true to preview changes without writing files.', {
|
|
221
|
+
dryRun: zod_1.z.boolean().optional().default(false).describe('Preview changes without writing local files'),
|
|
222
|
+
tags: zod_1.z.string().optional().describe('Cucumber tag expression filter'),
|
|
223
|
+
configPath: zod_1.z.string().optional().describe('Path to ado-sync config file'),
|
|
224
|
+
configOverrides: zod_1.z.array(zod_1.z.string()).optional().describe('Config overrides'),
|
|
225
|
+
}, async ({ dryRun, tags, configPath, configOverrides }) => {
|
|
226
|
+
const { config, configDir } = resolveConfig(configPath, configOverrides);
|
|
227
|
+
const results = await (0, engine_1.pull)(config, configDir, { dryRun, tags });
|
|
228
|
+
return { content: [{ type: 'text', text: formatSyncResults(results, dryRun) }] };
|
|
229
|
+
});
|
|
230
|
+
// ─── Tool: status ─────────────────────────────────────────────────────────────
|
|
231
|
+
server.tool('status', 'Show the diff between local spec files and Azure DevOps test cases without making any changes. ' +
|
|
232
|
+
'Returns which tests would be created, updated, or skipped.', {
|
|
233
|
+
tags: zod_1.z.string().optional().describe('Cucumber tag expression filter'),
|
|
234
|
+
configPath: zod_1.z.string().optional().describe('Path to ado-sync config file'),
|
|
235
|
+
configOverrides: zod_1.z.array(zod_1.z.string()).optional().describe('Config overrides'),
|
|
236
|
+
}, async ({ tags, configPath, configOverrides }) => {
|
|
237
|
+
const { config, configDir } = resolveConfig(configPath, configOverrides);
|
|
238
|
+
const results = await (0, engine_1.status)(config, configDir, { tags });
|
|
239
|
+
return { content: [{ type: 'text', text: formatSyncResults(results, true) }] };
|
|
240
|
+
});
|
|
241
|
+
// ─── Tool: generate_specs ────────────────────────────────────────────────────
|
|
242
|
+
server.tool('generate_specs', 'Generate local spec files (.feature or .md) from Azure DevOps User Stories. ' +
|
|
243
|
+
'Pulls the story title, description, and acceptance criteria to scaffold the spec file. ' +
|
|
244
|
+
'Provide story_ids, a WIQL query, or an area_path.', {
|
|
245
|
+
storyIds: zod_1.z.array(zod_1.z.number()).optional().describe('ADO work item IDs to generate specs for'),
|
|
246
|
+
query: zod_1.z.string().optional().describe('WIQL query string to select stories'),
|
|
247
|
+
areaPath: zod_1.z.string().optional().describe('Area path — generates specs for all User Stories under it'),
|
|
248
|
+
format: zod_1.z.enum(['gherkin', 'markdown']).optional().describe('Output format (default: based on config local.type)'),
|
|
249
|
+
outputFolder: zod_1.z.string().optional().describe('Folder to write spec files (default: config pull.targetFolder or config dir)'),
|
|
250
|
+
force: zod_1.z.boolean().optional().default(false).describe('Overwrite existing spec files'),
|
|
251
|
+
dryRun: zod_1.z.boolean().optional().default(false).describe('Preview without writing files'),
|
|
252
|
+
configPath: zod_1.z.string().optional().describe('Path to ado-sync config file'),
|
|
253
|
+
configOverrides: zod_1.z.array(zod_1.z.string()).optional().describe('Config overrides'),
|
|
254
|
+
}, async ({ storyIds, query, areaPath, format, outputFolder, force, dryRun, configPath, configOverrides }) => {
|
|
255
|
+
const { config, configDir } = resolveConfig(configPath, configOverrides);
|
|
256
|
+
const results = await (0, generate_1.generateSpecs)(config, configDir, {
|
|
257
|
+
storyIds,
|
|
258
|
+
query,
|
|
259
|
+
areaPath,
|
|
260
|
+
format,
|
|
261
|
+
outputFolder,
|
|
262
|
+
force,
|
|
263
|
+
dryRun,
|
|
264
|
+
});
|
|
265
|
+
if (!results.length) {
|
|
266
|
+
return { content: [{ type: 'text', text: 'No stories found matching the provided criteria.' }] };
|
|
267
|
+
}
|
|
268
|
+
const created = results.filter(r => r.action === 'created');
|
|
269
|
+
const skipped = results.filter(r => r.action === 'skipped');
|
|
270
|
+
const lines = [
|
|
271
|
+
`${dryRun ? '[dry-run] ' : ''}Generated ${created.length} spec file(s), skipped ${skipped.length}.`,
|
|
272
|
+
'',
|
|
273
|
+
...created.map(r => `+ [#${r.storyId}] ${r.title}\n → ${r.filePath}`),
|
|
274
|
+
...skipped.map(r => `= [#${r.storyId}] ${r.title} (already exists)`),
|
|
275
|
+
];
|
|
276
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
277
|
+
});
|
|
278
|
+
// ─── Tool: get_work_items ─────────────────────────────────────────────────────
|
|
279
|
+
server.tool('get_work_items', 'Fetch Azure DevOps work items (User Stories, Bugs, etc.) with their title, description, ' +
|
|
280
|
+
'acceptance criteria, state, and tags. Useful for understanding what needs to be tested before generating specs.', {
|
|
281
|
+
ids: zod_1.z.array(zod_1.z.number()).optional().describe('Work item IDs to fetch'),
|
|
282
|
+
query: zod_1.z.string().optional().describe('WIQL query to select work items'),
|
|
283
|
+
areaPath: zod_1.z.string().optional().describe('Fetch all User Stories under this area path'),
|
|
284
|
+
workItemType: zod_1.z.string().optional().default('User Story').describe('Work item type for area path query (default: "User Story")'),
|
|
285
|
+
configPath: zod_1.z.string().optional().describe('Path to ado-sync config file'),
|
|
286
|
+
}, async ({ ids, query, areaPath, workItemType, configPath }) => {
|
|
287
|
+
const { config } = resolveConfig(configPath);
|
|
288
|
+
const client = await client_1.AzureClient.create(config);
|
|
289
|
+
let stories;
|
|
290
|
+
if (ids?.length) {
|
|
291
|
+
stories = await (0, work_items_1.getWorkItemsByIds)(client, config.project, ids);
|
|
292
|
+
}
|
|
293
|
+
else if (query) {
|
|
294
|
+
stories = await (0, work_items_1.getWorkItemsByQuery)(client, config.project, query);
|
|
295
|
+
}
|
|
296
|
+
else if (areaPath) {
|
|
297
|
+
stories = await (0, work_items_1.getWorkItemsByAreaPath)(client, config.project, areaPath, workItemType);
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
return { content: [{ type: 'text', text: 'Provide at least one of: ids, query, or areaPath.' }] };
|
|
301
|
+
}
|
|
302
|
+
if (!stories.length) {
|
|
303
|
+
return { content: [{ type: 'text', text: 'No work items found.' }] };
|
|
304
|
+
}
|
|
305
|
+
return {
|
|
306
|
+
content: [{
|
|
307
|
+
type: 'text',
|
|
308
|
+
text: `Found ${stories.length} work item(s).\n\n${JSON.stringify(stories, null, 2)}`,
|
|
309
|
+
}],
|
|
310
|
+
};
|
|
311
|
+
});
|
|
312
|
+
// ─── Tool: publish_test_results ───────────────────────────────────────────────
|
|
313
|
+
server.tool('publish_test_results', 'Publish test results from result files (TRX, JUnit XML, Cucumber JSON, Playwright JSON) to Azure DevOps. ' +
|
|
314
|
+
'Links results to existing test cases by ID or automated test name.', {
|
|
315
|
+
resultFiles: zod_1.z.array(zod_1.z.string()).optional().describe('Paths to result files'),
|
|
316
|
+
resultFormat: zod_1.z.string().optional().describe('Format: trx, junit, nunitXml, cucumberJson, playwrightJson, ctrfJson'),
|
|
317
|
+
runName: zod_1.z.string().optional().describe('Name for the test run in Azure DevOps'),
|
|
318
|
+
buildId: zod_1.z.number().optional().describe('Build ID to associate with the run'),
|
|
319
|
+
attachmentsFolder: zod_1.z.string().optional().describe('Folder with screenshots/videos to attach'),
|
|
320
|
+
dryRun: zod_1.z.boolean().optional().default(false).describe('Parse results without publishing'),
|
|
321
|
+
createIssuesOnFailure: zod_1.z.boolean().optional().describe('File GitHub Issues or ADO Bugs for failed tests'),
|
|
322
|
+
issueProvider: zod_1.z.enum(['github', 'ado']).optional().describe('Issue provider: github (default) or ado'),
|
|
323
|
+
githubRepo: zod_1.z.string().optional().describe('GitHub repository "owner/repo" to file issues in'),
|
|
324
|
+
githubToken: zod_1.z.string().optional().describe('GitHub token or $ENV_VAR reference'),
|
|
325
|
+
bugThreshold: zod_1.z.number().optional().describe('Failure % threshold for env-failure mode (default: 20)'),
|
|
326
|
+
maxIssues: zod_1.z.number().optional().describe('Hard cap on issues per run (default: 50)'),
|
|
327
|
+
configPath: zod_1.z.string().optional().describe('Path to ado-sync config file'),
|
|
328
|
+
configOverrides: zod_1.z.array(zod_1.z.string()).optional().describe('Config overrides'),
|
|
329
|
+
}, async ({ resultFiles, resultFormat, runName, buildId, attachmentsFolder, dryRun, createIssuesOnFailure, issueProvider, githubRepo, githubToken, bugThreshold, maxIssues, configPath, configOverrides }) => {
|
|
330
|
+
const { config, configDir } = resolveConfig(configPath, configOverrides);
|
|
331
|
+
const result = await (0, publish_results_1.publishTestResults)(config, configDir, {
|
|
332
|
+
dryRun,
|
|
333
|
+
resultFiles,
|
|
334
|
+
resultFormat,
|
|
335
|
+
runName,
|
|
336
|
+
buildId,
|
|
337
|
+
attachmentsFolder,
|
|
338
|
+
createIssuesOnFailure,
|
|
339
|
+
issueOverrides: {
|
|
340
|
+
...(issueProvider && { provider: issueProvider }),
|
|
341
|
+
...(githubRepo && { repo: githubRepo }),
|
|
342
|
+
...(githubToken && { token: githubToken }),
|
|
343
|
+
...(bugThreshold && { threshold: bugThreshold }),
|
|
344
|
+
...(maxIssues && { maxIssues }),
|
|
345
|
+
},
|
|
346
|
+
});
|
|
347
|
+
const lines = [
|
|
348
|
+
`${dryRun ? '[dry-run] ' : ''}Test results processed.`,
|
|
349
|
+
` Total: ${result.totalResults}`,
|
|
350
|
+
` Passed: ${result.passed}`,
|
|
351
|
+
` Failed: ${result.failed}`,
|
|
352
|
+
` Other: ${result.other}`,
|
|
353
|
+
];
|
|
354
|
+
if (result.runId) {
|
|
355
|
+
lines.push(` Run ID: ${result.runId}`);
|
|
356
|
+
lines.push(` URL: ${result.runUrl}`);
|
|
357
|
+
}
|
|
358
|
+
if (result.issuesSummary) {
|
|
359
|
+
const s = result.issuesSummary;
|
|
360
|
+
lines.push(` Issues mode: ${s.mode} | Filed: ${s.issued.filter((i) => i.action === 'created').length} | Suppressed: ${s.suppressed}`);
|
|
361
|
+
for (const issue of s.issued) {
|
|
362
|
+
lines.push(` ${issue.action === 'created' ? '+' : '='} ${issue.title}${issue.url ? ' → ' + issue.url : ''}`);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
366
|
+
});
|
|
367
|
+
// ─── Tool: create_issue ───────────────────────────────────────────────────────
|
|
368
|
+
server.tool('create_issue', 'File a GitHub Issue or ADO Bug for a test failure. ' +
|
|
369
|
+
'Intended for use by healer agents after publish_test_results — provides the issue URL to chain into a fix PR workflow.', {
|
|
370
|
+
title: zod_1.z.string().describe('Issue title (e.g. "[FAILED] Login with valid credentials")'),
|
|
371
|
+
body: zod_1.z.string().describe('Issue body in Markdown — include error message, stack trace, and ADO TC link'),
|
|
372
|
+
provider: zod_1.z.enum(['github', 'ado']).optional().default('github').describe('Issue provider'),
|
|
373
|
+
githubRepo: zod_1.z.string().optional().describe('GitHub repository "owner/repo"'),
|
|
374
|
+
githubToken: zod_1.z.string().optional().describe('GitHub token or $ENV_VAR reference'),
|
|
375
|
+
labels: zod_1.z.array(zod_1.z.string()).optional().describe('Labels to apply (GitHub only)'),
|
|
376
|
+
assignees: zod_1.z.array(zod_1.z.string()).optional().describe('GitHub assignees (logins)'),
|
|
377
|
+
testCaseId: zod_1.z.number().optional().describe('ADO Test Case ID to link the bug to (ADO provider)'),
|
|
378
|
+
areaPath: zod_1.z.string().optional().describe('ADO area path for the Bug work item'),
|
|
379
|
+
configPath: zod_1.z.string().optional().describe('Path to ado-sync config file'),
|
|
380
|
+
configOverrides: zod_1.z.array(zod_1.z.string()).optional().describe('Config overrides'),
|
|
381
|
+
}, async ({ title, body, provider, githubRepo, githubToken, labels, assignees, testCaseId, areaPath, configPath, configOverrides }) => {
|
|
382
|
+
const { config } = resolveConfig(configPath, configOverrides);
|
|
383
|
+
// Build a minimal CreateIssuesConfig and reuse createIssuesFromResults with a
|
|
384
|
+
// synthetic single-failure result list so all guard/dedup logic is bypassed (threshold=0).
|
|
385
|
+
const issueConfig = {
|
|
386
|
+
provider: provider ?? 'github',
|
|
387
|
+
repo: githubRepo,
|
|
388
|
+
token: githubToken,
|
|
389
|
+
labels: labels ?? ['test-failure'],
|
|
390
|
+
assignees,
|
|
391
|
+
areaPath,
|
|
392
|
+
threshold: 0, // bypass threshold guard for explicit single-issue creation
|
|
393
|
+
maxIssues: 1,
|
|
394
|
+
clusterByError: false,
|
|
395
|
+
dedupByTestCase: false,
|
|
396
|
+
};
|
|
397
|
+
const syntheticResult = {
|
|
398
|
+
testName: title,
|
|
399
|
+
outcome: 'Failed',
|
|
400
|
+
durationMs: 0,
|
|
401
|
+
errorMessage: body,
|
|
402
|
+
testCaseId,
|
|
403
|
+
};
|
|
404
|
+
const summary = await (0, create_issues_1.createIssuesFromResults)([syntheticResult], config, issueConfig, { totalResults: 1 });
|
|
405
|
+
const created = summary.issued.find((i) => i.action === 'created');
|
|
406
|
+
if (created?.url) {
|
|
407
|
+
return { content: [{ type: 'text', text: `Issue created: ${created.url}` }] };
|
|
408
|
+
}
|
|
409
|
+
const skipped = summary.issued.find((i) => i.action === 'skipped');
|
|
410
|
+
return { content: [{ type: 'text', text: `Issue skipped: ${skipped?.reason ?? 'unknown reason'}` }] };
|
|
411
|
+
});
|
|
412
|
+
// ─── Tool: get_story_context ──────────────────────────────────────────────────
|
|
413
|
+
server.tool('get_story_context', 'Return a planner-agent-optimised view of an ADO User Story: ' +
|
|
414
|
+
'AC items as a bullet list, inferred test tags (@smoke, @auth…), extracted actors, ' +
|
|
415
|
+
'and IDs of any Test Cases already linked via TestedBy relation. ' +
|
|
416
|
+
'Use this before generate_specs to give the spec writer full context.', {
|
|
417
|
+
storyId: zod_1.z.number().describe('ADO work item ID of the User Story'),
|
|
418
|
+
configPath: zod_1.z.string().optional().describe('Path to ado-sync config file'),
|
|
419
|
+
configOverrides: zod_1.z.array(zod_1.z.string()).optional().describe('Config overrides'),
|
|
420
|
+
}, async ({ storyId, configPath, configOverrides }) => {
|
|
421
|
+
const { config } = resolveConfig(configPath, configOverrides);
|
|
422
|
+
const client = await client_1.AzureClient.create(config);
|
|
423
|
+
const ctx = await (0, work_items_1.getStoryContext)(client, config.project, storyId, config.orgUrl);
|
|
424
|
+
const lines = [
|
|
425
|
+
`Story #${ctx.storyId}: ${ctx.title}`,
|
|
426
|
+
`State: ${ctx.state ?? 'unknown'}`,
|
|
427
|
+
`URL: ${ctx.url}`,
|
|
428
|
+
'',
|
|
429
|
+
];
|
|
430
|
+
if (ctx.acItems.length) {
|
|
431
|
+
lines.push('Acceptance Criteria:');
|
|
432
|
+
ctx.acItems.forEach((item, i) => lines.push(` ${i + 1}. ${item}`));
|
|
433
|
+
lines.push('');
|
|
434
|
+
}
|
|
435
|
+
lines.push(`Suggested tags: ${ctx.suggestedTags.join(' ') || '(none)'}`);
|
|
436
|
+
lines.push(`Actors: ${ctx.suggestedActors.join(', ') || '(none detected)'}`);
|
|
437
|
+
lines.push(`Linked TCs: ${ctx.relatedTestCases.length ? ctx.relatedTestCases.map((id) => `#${id}`).join(', ') : 'none yet'}`);
|
|
438
|
+
return {
|
|
439
|
+
content: [{ type: 'text', text: lines.join('\n') }],
|
|
440
|
+
// Also return structured JSON so agents can parse it without text parsing
|
|
441
|
+
_structured: ctx,
|
|
442
|
+
};
|
|
443
|
+
});
|
|
444
|
+
// ─── Tool: generate_manifest ──────────────────────────────────────────────────
|
|
445
|
+
server.tool('generate_manifest', 'Write a .ai-workflow-manifest-{id}.json file for one or more ADO User Stories. ' +
|
|
446
|
+
'The manifest contains the ordered workflow steps, AC items, suggested tags, ' +
|
|
447
|
+
'required documents checklist, and validation steps — giving any AI agent the ' +
|
|
448
|
+
'structured context needed to drive the full Planner → Generator → Push → CI → Publish cycle.', {
|
|
449
|
+
storyIds: zod_1.z.array(zod_1.z.number()).describe('ADO work item IDs to generate manifests for'),
|
|
450
|
+
outputFolder: zod_1.z.string().optional().describe('Where to write manifest files (default: config dir)'),
|
|
451
|
+
format: zod_1.z.enum(['gherkin', 'markdown']).optional().describe('Spec format to reference in the manifest'),
|
|
452
|
+
force: zod_1.z.boolean().optional().default(false).describe('Overwrite existing manifest files'),
|
|
453
|
+
dryRun: zod_1.z.boolean().optional().default(false).describe('Return manifest JSON without writing files'),
|
|
454
|
+
configPath: zod_1.z.string().optional().describe('Path to ado-sync config file'),
|
|
455
|
+
configOverrides: zod_1.z.array(zod_1.z.string()).optional().describe('Config overrides'),
|
|
456
|
+
}, async ({ storyIds, outputFolder, format, force, dryRun, configPath, configOverrides }) => {
|
|
457
|
+
const { config, configDir } = resolveConfig(configPath, configOverrides);
|
|
458
|
+
const results = await (0, manifest_1.generateManifests)(config, configDir, {
|
|
459
|
+
storyIds,
|
|
460
|
+
outputFolder,
|
|
461
|
+
format,
|
|
462
|
+
force: force ?? false,
|
|
463
|
+
dryRun: dryRun ?? false,
|
|
464
|
+
});
|
|
465
|
+
const lines = [`${dryRun ? '[dry-run] ' : ''}Manifests processed:`];
|
|
466
|
+
for (const r of results) {
|
|
467
|
+
lines.push(` ${r.action === 'created' ? '+' : '='} [#${r.storyId}] ${r.filePath} — ${r.title}`);
|
|
468
|
+
if (r.manifest) {
|
|
469
|
+
lines.push(` AC items: ${r.manifest.context.acceptanceCriteria.length}`);
|
|
470
|
+
lines.push(` Tags: ${r.manifest.context.suggestedTags.join(' ') || '(none)'}`);
|
|
471
|
+
lines.push(` Linked TCs: ${r.manifest.context.relatedTestCases.length ? r.manifest.context.relatedTestCases.join(', ') : 'none'}`);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
475
|
+
});
|
|
476
|
+
// ─── Shared output helpers ────────────────────────────────────────────────────
|
|
477
|
+
function formatSyncResults(results, dryRun) {
|
|
478
|
+
const counts = {};
|
|
479
|
+
const lines = [];
|
|
480
|
+
for (const r of results) {
|
|
481
|
+
counts[r.action] = (counts[r.action] ?? 0) + 1;
|
|
482
|
+
const id = r.azureId ? ` [#${r.azureId}]` : '';
|
|
483
|
+
const detail = r.detail ? ` — ${r.detail}` : '';
|
|
484
|
+
const fields = r.changedFields?.length ? ` (${r.changedFields.join(', ')})` : '';
|
|
485
|
+
const symbols = {
|
|
486
|
+
created: '+', updated: '~', pulled: '↓', skipped: '=',
|
|
487
|
+
conflict: '!', removed: '−', error: '✗',
|
|
488
|
+
};
|
|
489
|
+
lines.push(`${symbols[r.action] ?? '?'} ${r.title}${id}${fields}${detail}`);
|
|
490
|
+
}
|
|
491
|
+
lines.push('');
|
|
492
|
+
const summary = Object.entries(counts)
|
|
493
|
+
.map(([action, n]) => `${n} ${action}`)
|
|
494
|
+
.join(' ');
|
|
495
|
+
lines.push((dryRun ? '[dry-run] ' : '') + (summary || 'Nothing to sync.'));
|
|
496
|
+
return lines.join('\n');
|
|
497
|
+
}
|
|
498
|
+
// ─── Start server ─────────────────────────────────────────────────────────────
|
|
499
|
+
async function main() {
|
|
500
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
501
|
+
await server.connect(transport);
|
|
502
|
+
}
|
|
503
|
+
main().catch((err) => {
|
|
504
|
+
process.stderr.write(`[ado-sync mcp] fatal: ${err?.message ?? err}\n`);
|
|
505
|
+
process.exit(1);
|
|
506
|
+
});
|
|
507
|
+
//# sourceMappingURL=mcp-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/cache.d.ts
CHANGED
|
@@ -13,11 +13,17 @@ export interface CacheEntry {
|
|
|
13
13
|
title: string;
|
|
14
14
|
stepsHash: string;
|
|
15
15
|
descriptionHash: string;
|
|
16
|
+
/** SHA-256 hash of the remote description at last sync. Used to detect Azure-side changes. */
|
|
17
|
+
remoteDescriptionHash?: string;
|
|
16
18
|
/** ISO changedDate from Azure at time of last sync */
|
|
17
19
|
changedDate: string;
|
|
18
20
|
filePath: string;
|
|
19
21
|
}
|
|
20
|
-
export
|
|
22
|
+
export interface SyncCache {
|
|
23
|
+
[tcId: number]: CacheEntry;
|
|
24
|
+
/** Persisted suite name→id map. Key format: "{planId}:{suiteName}" */
|
|
25
|
+
_suites?: Record<string, number>;
|
|
26
|
+
}
|
|
21
27
|
export declare function loadCache(configDir: string): SyncCache;
|
|
22
28
|
export declare function saveCache(configDir: string, cache: SyncCache): void;
|
|
23
29
|
export declare function hashSteps(steps: ParsedStep[] | AzureStep[]): string;
|
package/dist/sync/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/sync/cache.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/sync/cache.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BH,8BAQC;AAED,8BAGC;AAED,8BAUC;AAED,gCAEC;AAtDD,+CAAiC;AACjC,uCAAyB;AACzB,2CAA6B;AAI7B,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAmB9C,SAAgB,SAAS,CAAC,SAAiB;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IACzC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAc,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAgB,SAAS,CAAC,SAAiB,EAAE,KAAgB;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACvD,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACtE,CAAC;AAED,SAAgB,SAAS,CAAC,KAAiC;IACzD,MAAM,IAAI,GAAG,KAAK;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QACtD,CAAC;QACD,OAAO,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;IACrC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,SAAgB,UAAU,CAAC,CAAqB;IAC9C,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC"}
|