common-qa-mcp 0.6.0 → 0.7.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/README.md +37 -79
- package/dist/adapters/remoteMcp/adapter.d.ts +3 -0
- package/dist/adapters/remoteMcp/adapter.d.ts.map +1 -1
- package/dist/adapters/remoteMcp/adapter.js +1 -1
- package/dist/adapters/remoteMcp/adapter.js.map +1 -1
- package/dist/adapters/simplifyqa/adapter.d.ts +19 -0
- package/dist/adapters/simplifyqa/adapter.d.ts.map +1 -1
- package/dist/adapters/simplifyqa/adapter.js +69 -6
- package/dist/adapters/simplifyqa/adapter.js.map +1 -1
- package/dist/adapters/simplifyqa/mapper.d.ts.map +1 -1
- package/dist/adapters/simplifyqa/mapper.js +10 -0
- package/dist/adapters/simplifyqa/mapper.js.map +1 -1
- package/dist/adapters/types.d.ts +8 -3
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/domain/types.d.ts +10 -0
- package/dist/domain/types.d.ts.map +1 -1
- package/dist/initAgents.d.ts.map +1 -1
- package/dist/initAgents.js +101 -15
- package/dist/initAgents.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +95 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/gapAnalysis.tools.d.ts +31 -0
- package/dist/tools/gapAnalysis.tools.d.ts.map +1 -0
- package/dist/tools/gapAnalysis.tools.js +287 -0
- package/dist/tools/gapAnalysis.tools.js.map +1 -0
- package/dist/tools/impactAnalysis.tools.d.ts +17 -0
- package/dist/tools/impactAnalysis.tools.d.ts.map +1 -0
- package/dist/tools/impactAnalysis.tools.js +352 -0
- package/dist/tools/impactAnalysis.tools.js.map +1 -0
- package/dist/tools/objects.tools.d.ts.map +1 -1
- package/dist/tools/objects.tools.js +63 -12
- package/dist/tools/objects.tools.js.map +1 -1
- package/dist/tools/testcase.tools.d.ts.map +1 -1
- package/dist/tools/testcase.tools.js +9 -3
- package/dist/tools/testcase.tools.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ok, err } from '../mcpResult.js';
|
|
3
|
+
import { analyzeOneStory } from './gapAnalysis.tools.js';
|
|
4
|
+
const NOT_CONNECTED = 'Not connected to a product. Use qa_connect first — impact_analysis needs a live backend.';
|
|
5
|
+
// ponytail: fixed concurrency; raise if a real release has hundreds of sprints/stories.
|
|
6
|
+
const CONCURRENCY = 8;
|
|
7
|
+
const DEFAULT_SCAN_LIMIT = 500;
|
|
8
|
+
async function parallelMap(items, limit, fn) {
|
|
9
|
+
const out = new Array(items.length);
|
|
10
|
+
let cursor = 0;
|
|
11
|
+
async function worker() {
|
|
12
|
+
while (cursor < items.length) {
|
|
13
|
+
const i = cursor++;
|
|
14
|
+
out[i] = await fn(items[i]);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const workers = Array.from({ length: Math.min(limit, items.length) }, () => worker());
|
|
18
|
+
await Promise.all(workers);
|
|
19
|
+
return out;
|
|
20
|
+
}
|
|
21
|
+
function verdictFrom(m) {
|
|
22
|
+
if (m.openCriticalDefects > 0)
|
|
23
|
+
return 'AT_RISK';
|
|
24
|
+
if (m.totalAcs > 0 && m.uncoveredAcs > 0.3 * m.totalAcs)
|
|
25
|
+
return 'AT_RISK';
|
|
26
|
+
if (m.openMajorDefects > 0 || m.storiesWithNoTests > 0)
|
|
27
|
+
return 'NEEDS_ATTENTION';
|
|
28
|
+
return 'READY';
|
|
29
|
+
}
|
|
30
|
+
function daysUntil(dateStr) {
|
|
31
|
+
if (!dateStr)
|
|
32
|
+
return undefined;
|
|
33
|
+
const t = Date.parse(dateStr);
|
|
34
|
+
if (Number.isNaN(t))
|
|
35
|
+
return undefined;
|
|
36
|
+
return Math.round((t - Date.now()) / (24 * 60 * 60 * 1000));
|
|
37
|
+
}
|
|
38
|
+
function isCritical(sev) {
|
|
39
|
+
const s = (sev ?? '').toLowerCase();
|
|
40
|
+
return s === 'critical' || s === 'blocker' || s === 'showstopper';
|
|
41
|
+
}
|
|
42
|
+
function isMajor(sev) {
|
|
43
|
+
const s = (sev ?? '').toLowerCase();
|
|
44
|
+
return s === 'major' || s === 'high';
|
|
45
|
+
}
|
|
46
|
+
function isOpen(state) {
|
|
47
|
+
const s = (state ?? '').toLowerCase();
|
|
48
|
+
// Anything not in a terminal bucket counts as open — SQA state vocab varies per project.
|
|
49
|
+
return !(s === 'closed' || s === 'resolved' || s === 'fixed' || s === 'done' || s === 'rejected' || s === 'duplicate');
|
|
50
|
+
}
|
|
51
|
+
async function findOneDefect(adapter, defectId) {
|
|
52
|
+
// Try `code` filter first (users usually pass DF_77); fall back to numeric `id`.
|
|
53
|
+
const byCode = await adapter.listDefects({ filters: [{ column: 'code', value: defectId }], limit: 1 });
|
|
54
|
+
if (byCode.length)
|
|
55
|
+
return byCode[0];
|
|
56
|
+
const byId = await adapter.listDefects({ filters: [{ column: 'id', value: defectId }], limit: 1 });
|
|
57
|
+
return byId[0] ?? null;
|
|
58
|
+
}
|
|
59
|
+
async function findOneSprint(adapter, sprintId) {
|
|
60
|
+
if (!adapter.listSprints)
|
|
61
|
+
return null;
|
|
62
|
+
const all = await adapter.listSprints({});
|
|
63
|
+
return all.find((s) => s.id === sprintId) ?? null;
|
|
64
|
+
}
|
|
65
|
+
async function findOneRelease(adapter, releaseId) {
|
|
66
|
+
if (!adapter.listReleases)
|
|
67
|
+
return null;
|
|
68
|
+
const all = await adapter.listReleases({ scope: 'project' });
|
|
69
|
+
return all.find((r) => r.id === releaseId) ?? null;
|
|
70
|
+
}
|
|
71
|
+
/** Roll up a set of stories into the metric bundle impact-analysis reports on. */
|
|
72
|
+
async function rollupStories(adapter, stories, sensitivity) {
|
|
73
|
+
const storyReports = await parallelMap(stories, CONCURRENCY, (s) => analyzeOneStory(adapter, s, sensitivity));
|
|
74
|
+
const defectBatches = await parallelMap(stories, CONCURRENCY, (s) => adapter.listDefects ? adapter.listDefects({ storyId: s.id, limit: 200 }) : Promise.resolve([]));
|
|
75
|
+
const defects = defectBatches.flat();
|
|
76
|
+
const openCritical = defects.filter((d) => isCritical(d.severity) && isOpen(d.state)).length;
|
|
77
|
+
const openMajor = defects.filter((d) => isMajor(d.severity) && isOpen(d.state)).length;
|
|
78
|
+
const openTotal = defects.filter((d) => isOpen(d.state)).length;
|
|
79
|
+
const uncoveredAcs = storyReports.reduce((n, r) => n + r.uncoveredAcs.length, 0);
|
|
80
|
+
const totalAcs = storyReports.reduce((n, r) => n + r.acCount, 0);
|
|
81
|
+
const storiesWithNoTests = storyReports.filter((r) => r.verdict === 'no_tests').length;
|
|
82
|
+
return {
|
|
83
|
+
metrics: {
|
|
84
|
+
openCriticalDefects: openCritical,
|
|
85
|
+
openMajorDefects: openMajor,
|
|
86
|
+
openDefectsTotal: openTotal,
|
|
87
|
+
uncoveredAcs,
|
|
88
|
+
totalAcs,
|
|
89
|
+
storiesWithNoTests,
|
|
90
|
+
},
|
|
91
|
+
storyReports,
|
|
92
|
+
defects,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function escCell(v) {
|
|
96
|
+
return String(v ?? '').replace(/\|/g, '\\|').replace(/\r?\n/g, ' ');
|
|
97
|
+
}
|
|
98
|
+
function renderChain(chain) {
|
|
99
|
+
return chain.map((n) => `${n.kind} ${escCell(n.id)}${n.name ? ` "${escCell(n.name)}"` : ''}`).join(' → ');
|
|
100
|
+
}
|
|
101
|
+
export function registerImpactAnalysisTools(server, deps) {
|
|
102
|
+
server.registerTool('impact_analysis', {
|
|
103
|
+
title: 'Blast-radius report from a single anchor (defect / testcase / story / sprint / release)',
|
|
104
|
+
description: 'BLAST-RADIUS report from ONE anchor — walks the graph both ways to answer "if this is broken / ' +
|
|
105
|
+
'unfinished, what does it affect?" READ-ONLY.\n\n' +
|
|
106
|
+
'PICK EXACTLY ONE ANCHOR:\n' +
|
|
107
|
+
' • `defectId` (DF_77) — walks defect → TC(s) → story → sprint → release, then sibling stories in the sprint.\n' +
|
|
108
|
+
' • `testCaseId` (TC_204) — walks TC → open defects on it → story → sprint → release.\n' +
|
|
109
|
+
' • `storyId` (US_103) — walks story → its TCs / defects / sprint / release / sibling stories.\n' +
|
|
110
|
+
' • `sprintId` — rolls up every story in the sprint: uncovered ACs, open critical / major defects, stories with no tests.\n' +
|
|
111
|
+
' • `releaseId` — per-sprint table with a rolled-up release verdict.\n\n' +
|
|
112
|
+
'VERDICT (traffic light, deliberately simple):\n' +
|
|
113
|
+
' · `AT_RISK` — any open critical defect, OR more than 30% of ACs uncovered.\n' +
|
|
114
|
+
' · `NEEDS_ATTENTION` — any open major defect, OR a story in scope has zero tests.\n' +
|
|
115
|
+
' · `READY` — otherwise.\n\n' +
|
|
116
|
+
'Reuses `gap_analysis`\'s per-story analyser to count uncovered ACs, so the AC↔step match rules ' +
|
|
117
|
+
'(Jaccard, sensitivity) are consistent between the two tools. Writes nothing — any triage the ' +
|
|
118
|
+
'user chooses (reassign, descope, add TC) goes through the existing write tools after they confirm.',
|
|
119
|
+
inputSchema: {
|
|
120
|
+
defectId: z.string().optional().describe('Defect id or code (DF_77).'),
|
|
121
|
+
testCaseId: z.string().optional().describe('Test case id or code (TC_204).'),
|
|
122
|
+
storyId: z.string().optional().describe('Story id or business key (US_103).'),
|
|
123
|
+
sprintId: z.string().optional().describe('Sprint id (from list_sprints).'),
|
|
124
|
+
releaseId: z.string().optional().describe('Release id (from list_releases).'),
|
|
125
|
+
sensitivity: z.enum(['strict', 'normal', 'loose']).optional().describe('AC↔step match strictness passed through to gap analysis. Default `normal`.'),
|
|
126
|
+
scanLimit: z.number().int().positive().optional().describe('Cap on the initial listStories fetch for sprint/release rollups. Default 500.'),
|
|
127
|
+
},
|
|
128
|
+
annotations: { readOnlyHint: true },
|
|
129
|
+
}, async (input) => {
|
|
130
|
+
const adapter = deps.getAdapter();
|
|
131
|
+
if (!adapter)
|
|
132
|
+
return err(NOT_CONNECTED);
|
|
133
|
+
if (!adapter.listStories || !adapter.getStory) {
|
|
134
|
+
return err('This product does not expose a user-story backlog — impact_analysis needs listStories + getStory.');
|
|
135
|
+
}
|
|
136
|
+
const anchors = [
|
|
137
|
+
input.defectId ? 'defectId' : null,
|
|
138
|
+
input.testCaseId ? 'testCaseId' : null,
|
|
139
|
+
input.storyId ? 'storyId' : null,
|
|
140
|
+
input.sprintId ? 'sprintId' : null,
|
|
141
|
+
input.releaseId ? 'releaseId' : null,
|
|
142
|
+
].filter(Boolean);
|
|
143
|
+
if (anchors.length === 0) {
|
|
144
|
+
return err('Pick an anchor: pass exactly one of `defectId`, `testCaseId`, `storyId`, `sprintId`, ' +
|
|
145
|
+
'`releaseId`. ASK the user which fits — do not guess.');
|
|
146
|
+
}
|
|
147
|
+
if (anchors.length > 1) {
|
|
148
|
+
return err(`Pick exactly one anchor — got ${anchors.length}: ${anchors.join(', ')}.`);
|
|
149
|
+
}
|
|
150
|
+
const sensitivity = input.sensitivity ?? 'normal';
|
|
151
|
+
const scanLimit = input.scanLimit ?? DEFAULT_SCAN_LIMIT;
|
|
152
|
+
try {
|
|
153
|
+
// -------- defect / testcase / story anchors: navigate up to sprint/release, then roll up that sprint.
|
|
154
|
+
if (input.defectId || input.testCaseId || input.storyId) {
|
|
155
|
+
let defect = null;
|
|
156
|
+
let tcIds = [];
|
|
157
|
+
let storyIds = [];
|
|
158
|
+
if (input.defectId) {
|
|
159
|
+
defect = await findOneDefect(adapter, input.defectId);
|
|
160
|
+
if (!defect)
|
|
161
|
+
return err(`No defect found matching \`${input.defectId}\`.`);
|
|
162
|
+
tcIds = defect.tcIds ?? [];
|
|
163
|
+
}
|
|
164
|
+
else if (input.testCaseId) {
|
|
165
|
+
tcIds = [input.testCaseId];
|
|
166
|
+
}
|
|
167
|
+
else if (input.storyId) {
|
|
168
|
+
storyIds = [input.storyId];
|
|
169
|
+
}
|
|
170
|
+
// Resolve TC → story links.
|
|
171
|
+
if (tcIds.length > 0 && storyIds.length === 0) {
|
|
172
|
+
const tcs = await parallelMap(tcIds, CONCURRENCY, (id) => adapter.getTestCase(id));
|
|
173
|
+
storyIds = Array.from(new Set(tcs.map((t) => t.storyRef).filter((s) => !!s)));
|
|
174
|
+
if (storyIds.length === 0) {
|
|
175
|
+
return ok(`${defect ? `Defect ${defect.code ?? defect.id} "${defect.title}"` : `Test case ${input.testCaseId}`} — ` +
|
|
176
|
+
`linked TCs have no story reference; walk stops at the TC. No sprint/release impact to report.`, { anchor: input, verdict: 'NEEDS_ATTENTION', chain: [], metrics: {} });
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// Story → sprint / release via the (freshly widened) Story fields.
|
|
180
|
+
const stories = await parallelMap(storyIds, CONCURRENCY, (id) => adapter.getStory(id));
|
|
181
|
+
const sprintIds = Array.from(new Set(stories.map((s) => s.sprintId).filter((x) => !!x)));
|
|
182
|
+
const releaseIds = Array.from(new Set(stories.map((s) => s.releaseId).filter((x) => !!x)));
|
|
183
|
+
const featureIds = Array.from(new Set(stories.map((s) => s.featureId).filter((x) => !!x)));
|
|
184
|
+
// Resolve first sprint / release for the chain header (a story usually belongs to one).
|
|
185
|
+
const sprint = sprintIds[0] ? await findOneSprint(adapter, sprintIds[0]) : null;
|
|
186
|
+
const release = releaseIds[0] ? await findOneRelease(adapter, releaseIds[0]) : sprint?.releaseId ? await findOneRelease(adapter, sprint.releaseId) : null;
|
|
187
|
+
// Sibling stories in the same sprint (sprint-wide rollup below uses this too).
|
|
188
|
+
let sprintStories = [];
|
|
189
|
+
if (sprintIds[0])
|
|
190
|
+
sprintStories = await adapter.listStories({ sprintId: sprintIds[0], limit: scanLimit });
|
|
191
|
+
// ponytail: `dependentStories` (siblings sharing a featureId) would need a per-sibling
|
|
192
|
+
// getStory to check featureId — skipped until a real user says the sprint-wide rollup
|
|
193
|
+
// isn't enough signal for the dependency question.
|
|
194
|
+
void featureIds;
|
|
195
|
+
// Roll up the SPRINT (not just the anchor's own story) so the verdict reflects the wider impact.
|
|
196
|
+
const rollupTarget = sprintStories.length > 0
|
|
197
|
+
? sprintStories
|
|
198
|
+
: stories.map((s) => ({ id: s.id, ...(s.key ? { key: s.key } : {}), title: s.title }));
|
|
199
|
+
const { metrics: base, storyReports, defects } = await rollupStories(adapter, rollupTarget, sensitivity);
|
|
200
|
+
const metrics = {
|
|
201
|
+
...base,
|
|
202
|
+
...(sprint?.plannedEndDate ? { daysToSprintEnd: daysUntil(sprint.plannedEndDate) } : {}),
|
|
203
|
+
...(release?.plannedEndDate ? { daysToReleaseEnd: daysUntil(release.plannedEndDate) } : {}),
|
|
204
|
+
};
|
|
205
|
+
const verdict = verdictFrom(metrics);
|
|
206
|
+
// Build the chain view (defect → tc → story → sprint → release).
|
|
207
|
+
const chain = [];
|
|
208
|
+
if (defect)
|
|
209
|
+
chain.push({ kind: 'defect', id: defect.code ?? defect.id, ...(defect.title ? { name: defect.title } : {}) });
|
|
210
|
+
for (const tcId of tcIds.slice(0, 3))
|
|
211
|
+
chain.push({ kind: 'testcase', id: tcId });
|
|
212
|
+
if (tcIds.length > 3)
|
|
213
|
+
chain.push({ kind: 'testcase', id: `+${tcIds.length - 3} more` });
|
|
214
|
+
for (const s of stories.slice(0, 3))
|
|
215
|
+
chain.push({ kind: 'story', id: s.key ?? s.id, name: s.title });
|
|
216
|
+
if (stories.length > 3)
|
|
217
|
+
chain.push({ kind: 'story', id: `+${stories.length - 3} more` });
|
|
218
|
+
if (sprint)
|
|
219
|
+
chain.push({ kind: 'sprint', id: sprint.id, name: sprint.name, ...(sprint.plannedEndDate ? { plannedEndDate: sprint.plannedEndDate } : {}) });
|
|
220
|
+
if (release)
|
|
221
|
+
chain.push({ kind: 'release', id: release.id, name: release.name, ...(release.plannedEndDate ? { plannedEndDate: release.plannedEndDate } : {}) });
|
|
222
|
+
const anchorLine = defect
|
|
223
|
+
? `**${defect.code ?? defect.id}** "${defect.title}" · ${defect.severity ?? '?'} · ${defect.state ?? '?'}`
|
|
224
|
+
: input.testCaseId
|
|
225
|
+
? `**Test case ${input.testCaseId}**`
|
|
226
|
+
: `**Story ${input.storyId}**`;
|
|
227
|
+
const sprintBlock = sprint
|
|
228
|
+
? `\n\nSprint **${sprint.name}** (${sprint.id}): ${verdict}\n` +
|
|
229
|
+
` · ${metrics.openCriticalDefects} critical, ${metrics.openMajorDefects} major open defects across ${rollupTarget.length} stor${rollupTarget.length === 1 ? 'y' : 'ies'}\n` +
|
|
230
|
+
` · ${metrics.uncoveredAcs}/${metrics.totalAcs} ACs uncovered · ${metrics.storiesWithNoTests} stor${metrics.storiesWithNoTests === 1 ? 'y' : 'ies'} without tests` +
|
|
231
|
+
(metrics.daysToSprintEnd !== undefined ? `\n · Sprint ends ${sprint.plannedEndDate ?? '—'} (${metrics.daysToSprintEnd} day${Math.abs(metrics.daysToSprintEnd) === 1 ? '' : 's'})` : '')
|
|
232
|
+
: '';
|
|
233
|
+
const releaseBlock = release
|
|
234
|
+
? `\n\nRelease **${release.name}** (${release.id})` +
|
|
235
|
+
(metrics.daysToReleaseEnd !== undefined ? ` — planned ${release.plannedEndDate ?? '—'} (${metrics.daysToReleaseEnd} day${Math.abs(metrics.daysToReleaseEnd) === 1 ? '' : 's'})` : '')
|
|
236
|
+
: '';
|
|
237
|
+
const text = `${anchorLine}\n\n` +
|
|
238
|
+
`Blast radius:\n ${renderChain(chain)}${sprintBlock}${releaseBlock}\n\n` +
|
|
239
|
+
`**Verdict: ${verdict}**`;
|
|
240
|
+
return ok(text, {
|
|
241
|
+
anchor: { kind: (input.defectId ? 'defect' : input.testCaseId ? 'testcase' : 'story'), id: input.defectId ?? input.testCaseId ?? input.storyId ?? '' },
|
|
242
|
+
verdict,
|
|
243
|
+
chain,
|
|
244
|
+
metrics,
|
|
245
|
+
siblings: {
|
|
246
|
+
storiesInSprint: sprintStories.map((s) => s.id),
|
|
247
|
+
},
|
|
248
|
+
storyReports,
|
|
249
|
+
defects,
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
// -------- sprint anchor
|
|
253
|
+
if (input.sprintId) {
|
|
254
|
+
const sprint = await findOneSprint(adapter, input.sprintId);
|
|
255
|
+
const stories = await adapter.listStories({ sprintId: input.sprintId, limit: scanLimit });
|
|
256
|
+
if (stories.length === 0) {
|
|
257
|
+
return ok(`Sprint ${input.sprintId} — no stories in scope. Verdict: READY.`, {
|
|
258
|
+
anchor: { kind: 'sprint', id: input.sprintId },
|
|
259
|
+
verdict: 'READY',
|
|
260
|
+
chain: [],
|
|
261
|
+
metrics: {},
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
const { metrics: base, storyReports, defects } = await rollupStories(adapter, stories, sensitivity);
|
|
265
|
+
const release = sprint?.releaseId ? await findOneRelease(adapter, sprint.releaseId) : null;
|
|
266
|
+
const metrics = {
|
|
267
|
+
...base,
|
|
268
|
+
...(sprint?.plannedEndDate ? { daysToSprintEnd: daysUntil(sprint.plannedEndDate) } : {}),
|
|
269
|
+
...(release?.plannedEndDate ? { daysToReleaseEnd: daysUntil(release.plannedEndDate) } : {}),
|
|
270
|
+
};
|
|
271
|
+
const verdict = verdictFrom(metrics);
|
|
272
|
+
const topBlockers = defects.filter((d) => isCritical(d.severity) && isOpen(d.state)).slice(0, 5)
|
|
273
|
+
.map((d) => ` · ${d.code ?? d.id} (critical) — "${d.title}"`);
|
|
274
|
+
const missingTests = storyReports.filter((s) => s.verdict === 'no_tests').slice(0, 5)
|
|
275
|
+
.map((s) => ` · ${s.key ?? s.id} has zero linked TCs`);
|
|
276
|
+
const text = `**Sprint ${sprint?.name ?? input.sprintId}** · ${stories.length} stor${stories.length === 1 ? 'y' : 'ies'} · READINESS: ${verdict}\n\n` +
|
|
277
|
+
`Uncovered ACs: ${metrics.uncoveredAcs}/${metrics.totalAcs} · Open critical: ${metrics.openCriticalDefects} · Open major: ${metrics.openMajorDefects} · Stories w/o tests: ${metrics.storiesWithNoTests}` +
|
|
278
|
+
(metrics.daysToSprintEnd !== undefined ? `\nSprint ends ${sprint?.plannedEndDate ?? '—'} (${metrics.daysToSprintEnd} day${Math.abs(metrics.daysToSprintEnd) === 1 ? '' : 's'})` : '') +
|
|
279
|
+
(topBlockers.length || missingTests.length ? '\n\nTop blockers:\n' + [...topBlockers, ...missingTests].join('\n') : '');
|
|
280
|
+
return ok(text, {
|
|
281
|
+
anchor: { kind: 'sprint', id: input.sprintId, ...(sprint?.name ? { name: sprint.name } : {}) },
|
|
282
|
+
verdict,
|
|
283
|
+
chain: sprint && release ? [{ kind: 'sprint', id: sprint.id, name: sprint.name }, { kind: 'release', id: release.id, name: release.name }] : [],
|
|
284
|
+
metrics,
|
|
285
|
+
storyReports,
|
|
286
|
+
defects,
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
// -------- release anchor
|
|
290
|
+
if (input.releaseId) {
|
|
291
|
+
const release = await findOneRelease(adapter, input.releaseId);
|
|
292
|
+
if (!adapter.listSprints)
|
|
293
|
+
return err('This product has no sprint model — cannot roll up a release.');
|
|
294
|
+
const sprints = await adapter.listSprints({ releaseId: input.releaseId });
|
|
295
|
+
if (sprints.length === 0) {
|
|
296
|
+
return ok(`Release ${release?.name ?? input.releaseId} — no sprints in scope. Verdict: READY.`, {
|
|
297
|
+
anchor: { kind: 'release', id: input.releaseId },
|
|
298
|
+
verdict: 'READY',
|
|
299
|
+
chain: [],
|
|
300
|
+
metrics: {},
|
|
301
|
+
perSprint: [],
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
const perSprint = await parallelMap(sprints, Math.min(CONCURRENCY, 4), async (sp) => {
|
|
305
|
+
const spStories = await adapter.listStories({ sprintId: sp.id, limit: scanLimit });
|
|
306
|
+
const { metrics: spMetrics } = await rollupStories(adapter, spStories, sensitivity);
|
|
307
|
+
const v = verdictFrom({ ...spMetrics });
|
|
308
|
+
return {
|
|
309
|
+
sprintId: sp.id,
|
|
310
|
+
name: sp.name,
|
|
311
|
+
storyCount: spStories.length,
|
|
312
|
+
uncoveredAcs: spMetrics.uncoveredAcs,
|
|
313
|
+
openCritical: spMetrics.openCriticalDefects,
|
|
314
|
+
openMajor: spMetrics.openMajorDefects,
|
|
315
|
+
storiesWithNoTests: spMetrics.storiesWithNoTests,
|
|
316
|
+
verdict: v,
|
|
317
|
+
plannedEndDate: sp.plannedEndDate,
|
|
318
|
+
};
|
|
319
|
+
});
|
|
320
|
+
const aggregate = {
|
|
321
|
+
openCriticalDefects: perSprint.reduce((n, p) => n + p.openCritical, 0),
|
|
322
|
+
openMajorDefects: perSprint.reduce((n, p) => n + p.openMajor, 0),
|
|
323
|
+
openDefectsTotal: 0,
|
|
324
|
+
uncoveredAcs: perSprint.reduce((n, p) => n + p.uncoveredAcs, 0),
|
|
325
|
+
totalAcs: 0,
|
|
326
|
+
storiesWithNoTests: perSprint.reduce((n, p) => n + p.storiesWithNoTests, 0),
|
|
327
|
+
...(release?.plannedEndDate ? { daysToReleaseEnd: daysUntil(release.plannedEndDate) } : {}),
|
|
328
|
+
};
|
|
329
|
+
const verdict = verdictFrom(aggregate);
|
|
330
|
+
const table = '| sprint | stories | uncovered ACs | open critical | open major | no-tests | verdict |\n|---|---|---|---|---|---|---|\n' +
|
|
331
|
+
perSprint
|
|
332
|
+
.map((p) => `| ${escCell(p.name ?? p.sprintId)} | ${p.storyCount} | ${p.uncoveredAcs} | ${p.openCritical} | ${p.openMajor} | ${p.storiesWithNoTests} | ${p.verdict} |`)
|
|
333
|
+
.join('\n');
|
|
334
|
+
const text = `**Release ${release?.name ?? input.releaseId}** · ${sprints.length} sprint${sprints.length === 1 ? '' : 's'} · READINESS: ${verdict}\n\n` +
|
|
335
|
+
(aggregate.daysToReleaseEnd !== undefined ? `Planned end ${release?.plannedEndDate ?? '—'} (${aggregate.daysToReleaseEnd} day${Math.abs(aggregate.daysToReleaseEnd) === 1 ? '' : 's'})\n\n` : '') +
|
|
336
|
+
table;
|
|
337
|
+
return ok(text, {
|
|
338
|
+
anchor: { kind: 'release', id: input.releaseId, ...(release?.name ? { name: release.name } : {}) },
|
|
339
|
+
verdict,
|
|
340
|
+
chain: release ? [{ kind: 'release', id: release.id, name: release.name }] : [],
|
|
341
|
+
metrics: aggregate,
|
|
342
|
+
perSprint,
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
return err('Unreachable: no anchor branch matched.');
|
|
346
|
+
}
|
|
347
|
+
catch (e) {
|
|
348
|
+
return err(e instanceof Error ? e.message : String(e));
|
|
349
|
+
}
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
//# sourceMappingURL=impactAnalysis.tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"impactAnalysis.tools.js","sourceRoot":"","sources":["../../src/tools/impactAnalysis.tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAG1C,OAAO,EAAE,eAAe,EAAsC,MAAM,wBAAwB,CAAC;AAgB7F,MAAM,aAAa,GACjB,0FAA0F,CAAC;AAE7F,wFAAwF;AACxF,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAkB/B,KAAK,UAAU,WAAW,CAAO,KAAU,EAAE,KAAa,EAAE,EAA2B;IACrF,MAAM,GAAG,GAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,UAAU,MAAM;QACnB,OAAO,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;YACnB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,CAAU;IAC7B,IAAI,CAAC,CAAC,mBAAmB,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAChD,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,YAAY,GAAG,GAAG,GAAG,CAAC,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC1E,IAAI,CAAC,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,CAAC,kBAAkB,GAAG,CAAC;QAAE,OAAO,iBAAiB,CAAC;IACjF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,SAAS,CAAC,OAA2B;IAC5C,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9B,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,UAAU,CAAC,GAAuB;IACzC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,OAAO,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,aAAa,CAAC;AACpE,CAAC;AACD,SAAS,OAAO,CAAC,GAAuB;IACtC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,OAAO,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,MAAM,CAAC;AACvC,CAAC;AACD,SAAS,MAAM,CAAC,KAAyB;IACvC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACtC,yFAAyF;IACzF,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,WAAW,CAAC,CAAC;AACzH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAAwB,EAAE,QAAgB;IACrE,iFAAiF;IACjF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAY,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACxG,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,CAAC,CAAE,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,WAAY,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACpG,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAAwB,EAAE,QAAgB;IACrE,IAAI,CAAC,OAAO,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC1C,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC;AACpD,CAAC;AACD,KAAK,UAAU,cAAc,CAAC,OAAwB,EAAE,SAAiB;IACvE,IAAI,CAAC,OAAO,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7D,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,IAAI,IAAI,CAAC;AACrD,CAAC;AAED,kFAAkF;AAClF,KAAK,UAAU,aAAa,CAC1B,OAAwB,EACxB,OAAuB,EACvB,WAAwB;IAExB,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;IAC9G,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAClE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAqB,CAAC,CAClH,CAAC;IACF,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7F,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACvF,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IAChE,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACjF,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACjE,MAAM,kBAAkB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;IACvF,OAAO;QACL,OAAO,EAAE;YACP,mBAAmB,EAAE,YAAY;YACjC,gBAAgB,EAAE,SAAS;YAC3B,gBAAgB,EAAE,SAAS;YAC3B,YAAY;YACZ,QAAQ;YACR,kBAAkB;SACnB;QACD,YAAY;QACZ,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,CAAU;IACzB,OAAO,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,WAAW,CAAC,KAAkB;IACrC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5G,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAiB,EAAE,IAA6B;IAC1F,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,yFAAyF;QAChG,WAAW,EACT,iGAAiG;YACjG,kDAAkD;YAClD,4BAA4B;YAC5B,mHAAmH;YACnH,yFAAyF;YACzF,qGAAqG;YACrG,+HAA+H;YAC/H,2EAA2E;YAC3E,iDAAiD;YACjD,wFAAwF;YACxF,sFAAsF;YACtF,wCAAwC;YACxC,iGAAiG;YACjG,+FAA+F;YAC/F,oGAAoG;QACtG,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YACtE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;YAC5E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YAC7E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;YAC1E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;YAC7E,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACpE,4EAA4E,CAC7E;YACD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACxD,+EAA+E,CAChF;SACF;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC9C,OAAO,GAAG,CAAC,mGAAmG,CAAC,CAAC;QAClH,CAAC;QAED,MAAM,OAAO,GAAG;YACd,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;YAClC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;YACtC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;YAChC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;YAClC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;SACrC,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC;QAC9B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,GAAG,CACR,uFAAuF;gBACvF,sDAAsD,CACvD,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,iCAAiC,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,WAAW,GAAgB,KAAK,CAAC,WAAW,IAAI,QAAQ,CAAC;QAC/D,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,kBAAkB,CAAC;QAExD,IAAI,CAAC;YACH,uGAAuG;YACvG,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACxD,IAAI,MAAM,GAAyB,IAAI,CAAC;gBACxC,IAAI,KAAK,GAAa,EAAE,CAAC;gBACzB,IAAI,QAAQ,GAAa,EAAE,CAAC;gBAE5B,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACnB,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACtD,IAAI,CAAC,MAAM;wBAAE,OAAO,GAAG,CAAC,8BAA8B,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC;oBAC3E,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC7B,CAAC;qBAAM,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;oBAC5B,KAAK,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC7B,CAAC;qBAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACzB,QAAQ,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC7B,CAAC;gBAED,4BAA4B;gBAC5B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC9C,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;oBACnF,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3F,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC1B,OAAO,EAAE,CACP,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,UAAU,EAAE,KAAK;4BACvG,+FAA+F,EACjG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAmC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CACxF,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,mEAAmE;gBACnE,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,QAAS,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxF,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtG,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxG,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAExG,wFAAwF;gBACxF,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAChF,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAE1J,+EAA+E;gBAC/E,IAAI,aAAa,GAAmB,EAAE,CAAC;gBACvC,IAAI,SAAS,CAAC,CAAC,CAAC;oBAAE,aAAa,GAAG,MAAM,OAAO,CAAC,WAAY,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC3G,uFAAuF;gBACvF,sFAAsF;gBACtF,mDAAmD;gBACnD,KAAK,UAAU,CAAC;gBAEhB,iGAAiG;gBACjG,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC;oBAC3C,CAAC,CAAC,aAAa;oBACf,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACvG,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;gBACzG,MAAM,OAAO,GAAY;oBACvB,GAAG,IAAI;oBACP,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxF,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC5F,CAAC;gBACF,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;gBAErC,iEAAiE;gBACjE,MAAM,KAAK,GAAgB,EAAE,CAAC;gBAC9B,IAAI,MAAM;oBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC1H,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACxF,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;gBACrG,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACzF,IAAI,MAAM;oBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC1J,IAAI,OAAO;oBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAEhK,MAAM,UAAU,GAAG,MAAM;oBACvB,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,OAAO,MAAM,CAAC,KAAK,OAAO,MAAM,CAAC,QAAQ,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,IAAI,GAAG,EAAE;oBAC1G,CAAC,CAAC,KAAK,CAAC,UAAU;wBAChB,CAAC,CAAC,eAAe,KAAK,CAAC,UAAU,IAAI;wBACrC,CAAC,CAAC,WAAW,KAAK,CAAC,OAAO,IAAI,CAAC;gBACnC,MAAM,WAAW,GAAG,MAAM;oBACxB,CAAC,CAAC,gBAAgB,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,EAAE,MAAM,OAAO,IAAI;wBAC5D,OAAO,OAAO,CAAC,mBAAmB,cAAc,OAAO,CAAC,gBAAgB,8BAA8B,YAAY,CAAC,MAAM,QAAQ,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI;wBAC5K,OAAO,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,QAAQ,oBAAoB,OAAO,CAAC,kBAAkB,QAAQ,OAAO,CAAC,kBAAkB,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,gBAAgB;wBACnK,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,qBAAqB,MAAM,CAAC,cAAc,IAAI,GAAG,KAAK,OAAO,CAAC,eAAe,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1L,CAAC,CAAC,EAAE,CAAC;gBACP,MAAM,YAAY,GAAG,OAAO;oBAC1B,CAAC,CAAC,iBAAiB,OAAO,CAAC,IAAI,OAAO,OAAO,CAAC,EAAE,GAAG;wBACjD,CAAC,OAAO,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,OAAO,CAAC,cAAc,IAAI,GAAG,KAAK,OAAO,CAAC,gBAAgB,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvL,CAAC,CAAC,EAAE,CAAC;gBAEP,MAAM,IAAI,GACR,GAAG,UAAU,MAAM;oBACnB,oBAAoB,WAAW,CAAC,KAAK,CAAC,GAAG,WAAW,GAAG,YAAY,MAAM;oBACzE,cAAc,OAAO,IAAI,CAAC;gBAE5B,OAAO,EAAE,CAAC,IAAI,EAAE;oBACd,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAe,EAAE,EAAE,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE;oBACpK,OAAO;oBACP,KAAK;oBACL,OAAO;oBACP,QAAQ,EAAE;wBACR,eAAe,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAChD;oBACD,YAAY;oBACZ,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;YAED,yBAAyB;YACzB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC5D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC3F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,EAAE,CAAC,UAAU,KAAK,CAAC,QAAQ,yCAAyC,EAAE;wBAC3E,MAAM,EAAE,EAAE,IAAI,EAAE,QAAsB,EAAE,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE;wBAC5D,OAAO,EAAE,OAAyB;wBAClC,KAAK,EAAE,EAAE;wBACT,OAAO,EAAE,EAAE;qBACZ,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;gBACpG,MAAM,OAAO,GAAG,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC3F,MAAM,OAAO,GAAY;oBACvB,GAAG,IAAI;oBACP,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxF,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC5F,CAAC;gBACF,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;gBACrC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;qBAC7F,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;gBACjE,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;qBAClF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;gBAC1D,MAAM,IAAI,GACR,YAAY,MAAM,EAAE,IAAI,IAAI,KAAK,CAAC,QAAQ,QAAQ,OAAO,CAAC,MAAM,QAAQ,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,iBAAiB,OAAO,MAAM;oBACxI,kBAAkB,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,QAAQ,qBAAqB,OAAO,CAAC,mBAAmB,kBAAkB,OAAO,CAAC,gBAAgB,yBAAyB,OAAO,CAAC,kBAAkB,EAAE;oBACzM,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,MAAM,EAAE,cAAc,IAAI,GAAG,KAAK,OAAO,CAAC,eAAe,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrL,CAAC,WAAW,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC1H,OAAO,EAAE,CAAC,IAAI,EAAE;oBACd,MAAM,EAAE,EAAE,IAAI,EAAE,QAAsB,EAAE,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;oBAC5G,OAAO;oBACP,KAAK,EAAE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC/I,OAAO;oBACP,YAAY;oBACZ,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;YAED,0BAA0B;YAC1B,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpB,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC/D,IAAI,CAAC,OAAO,CAAC,WAAW;oBAAE,OAAO,GAAG,CAAC,8DAA8D,CAAC,CAAC;gBACrG,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC1E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,EAAE,CAAC,WAAW,OAAO,EAAE,IAAI,IAAI,KAAK,CAAC,SAAS,yCAAyC,EAAE;wBAC9F,MAAM,EAAE,EAAE,IAAI,EAAE,SAAuB,EAAE,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE;wBAC9D,OAAO,EAAE,OAAyB;wBAClC,KAAK,EAAE,EAAE;wBACT,OAAO,EAAE,EAAE;wBACX,SAAS,EAAE,EAAE;qBACd,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;oBAClF,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,WAAY,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;oBACpF,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;oBACpF,MAAM,CAAC,GAAG,WAAW,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;oBACxC,OAAO;wBACL,QAAQ,EAAE,EAAE,CAAC,EAAE;wBACf,IAAI,EAAE,EAAE,CAAC,IAAI;wBACb,UAAU,EAAE,SAAS,CAAC,MAAM;wBAC5B,YAAY,EAAE,SAAS,CAAC,YAAY;wBACpC,YAAY,EAAE,SAAS,CAAC,mBAAmB;wBAC3C,SAAS,EAAE,SAAS,CAAC,gBAAgB;wBACrC,kBAAkB,EAAE,SAAS,CAAC,kBAAkB;wBAChD,OAAO,EAAE,CAAC;wBACV,cAAc,EAAE,EAAE,CAAC,cAAc;qBAClC,CAAC;gBACJ,CAAC,CAAC,CAAC;gBAEH,MAAM,SAAS,GAAY;oBACzB,mBAAmB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;oBACtE,gBAAgB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;oBAChE,gBAAgB,EAAE,CAAC;oBACnB,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;oBAC/D,QAAQ,EAAE,CAAC;oBACX,kBAAkB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC;oBAC3E,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC5F,CAAC;gBACF,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;gBAEvC,MAAM,KAAK,GACT,yHAAyH;oBACzH,SAAS;yBACN,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,YAAY,MAAM,CAAC,CAAC,YAAY,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,kBAAkB,MAAM,CAAC,CAAC,OAAO,IAAI,CAC7J;yBACA,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChB,MAAM,IAAI,GACR,aAAa,OAAO,EAAE,IAAI,IAAI,KAAK,CAAC,SAAS,QAAQ,OAAO,CAAC,MAAM,UAAU,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,iBAAiB,OAAO,MAAM;oBAC1I,CAAC,SAAS,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,OAAO,EAAE,cAAc,IAAI,GAAG,KAAK,SAAS,CAAC,gBAAgB,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjM,KAAK,CAAC;gBAER,OAAO,EAAE,CAAC,IAAI,EAAE;oBACd,MAAM,EAAE,EAAE,IAAI,EAAE,SAAuB,EAAE,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;oBAChH,OAAO;oBACP,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC/E,OAAO,EAAE,SAAS;oBAClB,SAAS;iBACV,CAAC,CAAC;YACL,CAAC;YAED,OAAO,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objects.tools.d.ts","sourceRoot":"","sources":["../../src/tools/objects.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI5D,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,MAAM,eAAe,GAAG,IAAI,CAAC;CAC1C,CAAC;AAqBF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"objects.tools.d.ts","sourceRoot":"","sources":["../../src/tools/objects.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI5D,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,MAAM,eAAe,GAAG,IAAI,CAAC;CAC1C,CAAC;AAqBF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,GAAG,IAAI,CAiWlF"}
|
|
@@ -115,8 +115,10 @@ export function registerObjectTools(server, deps) {
|
|
|
115
115
|
});
|
|
116
116
|
server.registerTool('object_get', {
|
|
117
117
|
title: 'Read one object (with all its locators)',
|
|
118
|
-
description: 'Read a single object from the shared Object Repository — its name, type,
|
|
119
|
-
'
|
|
118
|
+
description: 'Read a single object from the shared Object Repository — its name, type, FULL locator bag ' +
|
|
119
|
+
'(every captured strategy, e.g. playwright primary + xpath fallbacks), and how many test ' +
|
|
120
|
+
'cases/functions/workflows currently reference it (so usage is visible BEFORE editing or ' +
|
|
121
|
+
'deleting, not just discovered as a delete refusal after the fact). Requires a live ' +
|
|
120
122
|
'connection (qa_connect).',
|
|
121
123
|
inputSchema: {
|
|
122
124
|
id: z.string().describe('The object id to read.'),
|
|
@@ -131,11 +133,28 @@ export function registerObjectTools(server, deps) {
|
|
|
131
133
|
try {
|
|
132
134
|
const obj = await adapter.getObject(id);
|
|
133
135
|
const header = `**${obj.name}**${obj.id ? ` · ${obj.id}` : ''}${obj.objectType ? ` · ${obj.objectType}` : ''}`;
|
|
136
|
+
let usageNote = '';
|
|
137
|
+
if (adapter.checkObjectDependencies) {
|
|
138
|
+
try {
|
|
139
|
+
const { tcCount, fnCount, wfCount } = await adapter.checkObjectDependencies(id);
|
|
140
|
+
const parts = [];
|
|
141
|
+
if (tcCount)
|
|
142
|
+
parts.push(`${tcCount} test case${tcCount === 1 ? '' : 's'}`);
|
|
143
|
+
if (fnCount)
|
|
144
|
+
parts.push(`${fnCount} function${fnCount === 1 ? '' : 's'}`);
|
|
145
|
+
if (wfCount)
|
|
146
|
+
parts.push(`${wfCount} workflow${wfCount === 1 ? '' : 's'}`);
|
|
147
|
+
usageNote = `\n\nUsage: ${parts.length ? `referenced by ${parts.join(', ')}` : 'not referenced by any test case, function, or workflow'}.`;
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
// best-effort — omit the usage line rather than fail the whole read over it
|
|
151
|
+
}
|
|
152
|
+
}
|
|
134
153
|
const body = obj.locators.length
|
|
135
154
|
? '\n\n| strategy | value |\n|---|---|\n' +
|
|
136
155
|
obj.locators.map((l) => `| ${escCell(l.name)}${l.unique ? ' (unique)' : ''} | ${escCell(l.value)} |`).join('\n')
|
|
137
156
|
: '\n\n_No locators captured._';
|
|
138
|
-
return ok(`${header}${body}`, { object: obj });
|
|
157
|
+
return ok(`${header}${body}${usageNote}`, { object: obj });
|
|
139
158
|
}
|
|
140
159
|
catch (e) {
|
|
141
160
|
return err(describeError(e));
|
|
@@ -212,34 +231,66 @@ export function registerObjectTools(server, deps) {
|
|
|
212
231
|
}
|
|
213
232
|
});
|
|
214
233
|
server.registerTool('object_update', {
|
|
215
|
-
title: 'Update an object (
|
|
216
|
-
description: 'Update an object in the shared Object Repository — rename it,
|
|
217
|
-
'
|
|
234
|
+
title: 'Update an object (name, description, parameter, module, or locators)',
|
|
235
|
+
description: 'Update an object in the shared Object Repository — rename it, change its description, set ' +
|
|
236
|
+
'which parameter(s) it is bound to, move it to a different module, and/or fix locator values ' +
|
|
237
|
+
'directly (e.g. a stale `data-test` attribute). Any combination of these can be set in ONE ' +
|
|
238
|
+
'call when the user states them together. `locators` UPSERTS by strategy name: an entry ' +
|
|
218
239
|
'matching an EXISTING locator name updates its value/unique in place, everything else on the ' +
|
|
219
240
|
'object is untouched, and a name with no existing match is added as a NEW locator — you do not ' +
|
|
220
|
-
|
|
221
|
-
'
|
|
222
|
-
'
|
|
223
|
-
'
|
|
241
|
+
'need to resupply the full locator set.\n\n' +
|
|
242
|
+
'`parameterNames` REPLACES the object\'s full parameter binding with these (resolved by exact ' +
|
|
243
|
+
'name, case-insensitive) — pass the CURRENT set plus the new one if the user means "also bind" ' +
|
|
244
|
+
'rather than "replace"; read the object first (object_get) if you need to know the current ' +
|
|
245
|
+
'bindings. `moduleName` takes the module\'s NAME, never an id — it is resolved automatically. ' +
|
|
246
|
+
'Both REFUSE clearly (naming the bad value and the valid options) if the name doesn\'t match ' +
|
|
247
|
+
'anything, rather than silently saving nothing.\n\n' +
|
|
248
|
+
"The object's TYPE (technology) and TEMPLATE ID are NOT editable here — they are structural " +
|
|
249
|
+
'(they determine which attribute set is even valid) and stay whatever they already are; ' +
|
|
250
|
+
'changing either means creating a new object, not updating this one. Requires a live ' +
|
|
251
|
+
'connection (qa_connect).',
|
|
224
252
|
inputSchema: {
|
|
225
253
|
id: z.string().describe('The object id to update.'),
|
|
226
254
|
name: z.string().optional().describe('New display name for the object.'),
|
|
255
|
+
description: z.string().optional().describe('New description for the object.'),
|
|
256
|
+
parameterNames: z.array(z.string()).optional().describe('REPLACES the object\'s bound parameters with these, resolved by exact name (case-' +
|
|
257
|
+
'insensitive). Pass the full desired set, not just the one being added.'),
|
|
258
|
+
moduleName: z.string().optional().describe('Move the object to this module, by NAME (resolved automatically — never pass an id).'),
|
|
227
259
|
locators: z.array(zLocator).optional().describe('Locators to upsert by name, e.g. [{ name: "data-test", value: "123456" }] to fix one ' +
|
|
228
260
|
'attribute — every other locator on the object is left as-is.'),
|
|
229
261
|
},
|
|
230
262
|
annotations: { readOnlyHint: false },
|
|
231
|
-
}, async ({ id, name, locators }) => {
|
|
263
|
+
}, async ({ id, name, description, parameterNames, moduleName, locators }) => {
|
|
232
264
|
const adapter = deps.getAdapter();
|
|
233
265
|
if (!adapter)
|
|
234
266
|
return err(NOT_CONNECTED);
|
|
235
267
|
if (!adapter.updateObject)
|
|
236
268
|
return err('This product does not support updating objects directly.');
|
|
269
|
+
if (name === undefined && description === undefined && parameterNames === undefined
|
|
270
|
+
&& moduleName === undefined && locators === undefined) {
|
|
271
|
+
return err('Nothing to update — pass at least one of name, description, parameterNames, moduleName, or locators.');
|
|
272
|
+
}
|
|
237
273
|
try {
|
|
238
274
|
const obj = await adapter.updateObject(id, {
|
|
239
275
|
...(name !== undefined ? { name } : {}),
|
|
276
|
+
...(description !== undefined ? { description } : {}),
|
|
277
|
+
...(parameterNames !== undefined ? { parameterNames } : {}),
|
|
278
|
+
...(moduleName !== undefined ? { moduleName } : {}),
|
|
240
279
|
...(locators !== undefined ? { locators } : {}),
|
|
241
280
|
});
|
|
242
|
-
|
|
281
|
+
const changed = [];
|
|
282
|
+
if (name !== undefined)
|
|
283
|
+
changed.push(`name → "${name}"`);
|
|
284
|
+
if (description !== undefined)
|
|
285
|
+
changed.push(`description → "${description}"`);
|
|
286
|
+
if (parameterNames !== undefined)
|
|
287
|
+
changed.push(`parameters → [${parameterNames.join(', ')}]`);
|
|
288
|
+
if (moduleName !== undefined)
|
|
289
|
+
changed.push(`module → "${moduleName}"`);
|
|
290
|
+
if (locators !== undefined)
|
|
291
|
+
changed.push(`${locators.length} locator${locators.length === 1 ? '' : 's'} upserted`);
|
|
292
|
+
return ok(`Updated object ${obj.id ?? id} — "${obj.name}" (${obj.locators.length} locator${obj.locators.length === 1 ? '' : 's'} total). ` +
|
|
293
|
+
`Changed: ${changed.join('; ')}.`, { object: obj });
|
|
243
294
|
}
|
|
244
295
|
catch (e) {
|
|
245
296
|
return err(describeError(e));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objects.tools.js","sourceRoot":"","sources":["../../src/tools/objects.tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"objects.tools.js","sourceRoot":"","sources":["../../src/tools/objects.tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testcase.tools.d.ts","sourceRoot":"","sources":["../../src/tools/testcase.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,KAAK,EAAW,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAU5D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC;;;;sEAIkE;IAClE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAClF;0GACsG;IACtG,UAAU,CAAC,EAAE,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;CACzD,CAAC;AA+CF;;;;;uEAKuE;AACvE,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK;;;;;;EAKvC;AA6BD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"testcase.tools.d.ts","sourceRoot":"","sources":["../../src/tools/testcase.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,KAAK,EAAW,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAU5D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC;;;;sEAIkE;IAClE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAClF;0GACsG;IACtG,UAAU,CAAC,EAAE,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;CACzD,CAAC;AA+CF;;;;;uEAKuE;AACvE,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK;;;;;;EAKvC;AA6BD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAuatF"}
|
|
@@ -118,11 +118,17 @@ export function registerTestcaseTools(server, deps) {
|
|
|
118
118
|
"original tcId. Because the draft carries the id, a later `tc_save({ draftId })` UPDATES that " +
|
|
119
119
|
'SAME test case (preserving id, run history, parameters, testdata bindings, and suite ' +
|
|
120
120
|
'membership) instead of creating a sibling.\n\n' +
|
|
121
|
-
'
|
|
121
|
+
'THIS is the tool for "tag/retag this EXISTING test case with a user story or module" — ' +
|
|
122
|
+
'`journal_modify`\'s `set_meta` does NOT support that on SimplifyQA (journal-only ops there), ' +
|
|
123
|
+
'so this draft round-trip is the only path:\n' +
|
|
122
124
|
' 1. tc_draft_from_tc({ tcId })\n' +
|
|
123
|
-
' 2. tc_draft_update({ draftId, ops:
|
|
125
|
+
' 2. tc_draft_update({ draftId, ops: [{ op: "set_meta", patch: { storyRef?, folderOrModule?, ' +
|
|
126
|
+
'title?, priority?, ... } }] }) — resolve a story/module NAME to an id via story_list / ' +
|
|
127
|
+
'list_modules FIRST; never guess one.\n' +
|
|
124
128
|
' 3. tc_save({ draftId })\n' +
|
|
125
|
-
'
|
|
129
|
+
'Same three steps also apply to applying a `story_sync_testcases` drift report (pass the ' +
|
|
130
|
+
'filtered `proposedOps` at step 2 instead of a set_meta patch). Requires a live connection ' +
|
|
131
|
+
'(qa_connect).',
|
|
126
132
|
inputSchema: {
|
|
127
133
|
tcId: z.string().describe('The existing test-case id to load as a draft.'),
|
|
128
134
|
},
|