@testivai/mcp 0.6.1 → 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 +11 -4
- package/dist/lib.d.ts +29 -3
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +181 -31
- package/dist/lib.js.map +1 -1
- package/dist/server.js +28 -18
- package/dist/server.js.map +1 -1
- package/dist/tool-meta.d.ts +45 -0
- package/dist/tool-meta.d.ts.map +1 -1
- package/dist/tool-meta.js +125 -3
- package/dist/tool-meta.js.map +1 -1
- package/package.json +2 -2
- package/server.json +2 -2
package/README.md
CHANGED
|
@@ -3,22 +3,29 @@
|
|
|
3
3
|
MCP (Model Context Protocol) server that gives AI coding agents eyes on your
|
|
4
4
|
visual regression results. The agent changes UI code, runs your test suite,
|
|
5
5
|
then uses these tools to find out **what actually changed on screen** — and
|
|
6
|
-
whether it
|
|
6
|
+
whether it is a real change, likely render noise, or a case the DOM and style
|
|
7
|
+
signals cannot settle.
|
|
7
8
|
|
|
8
9
|
## Tools
|
|
9
10
|
|
|
10
11
|
| Tool | What it does |
|
|
11
12
|
|---|---|
|
|
12
|
-
| `get_visual_results` | Reads `visual-report/results.json` and returns a one-line verdict per snapshot: passed / likely render noise (the DOM and computed styles both match) / style-only change (identical DOM, different computed styles: a real change) / structural change (with the DOM summary). Snapshots that share an identical signal (style-only change on the same elements, the same page shift,
|
|
13
|
-
| `explain_snapshot` | Layered evidence for one snapshot: pixel regions, element attribution (which selectors shifted vs changed, whole-page shift), the DOM/style signal, and interpretation guidance |
|
|
13
|
+
| `get_visual_results` | Reads `visual-report/results.json` and returns a one-line verdict per snapshot: passed (an auto-passed diff says which configured criterion passed it) / likely render noise (the DOM and computed styles both match and the diff is small and scattered; still not proof) / concentrated in one area or large (the DOM and computed styles match, but every diff region fits in a box covering at most a third of the page, or over 1% of pixels differ: a bad capture or a change the style check does not cover, such as size, overflow, transform or an image, so compare the images before approving) / style-only change (identical DOM, different computed styles: a real change) / structural change (with the DOM summary) / styles not compared (identical DOM, style check unavailable: could be render noise or a stylesheet-only change, so compare the images before approving). Snapshots that share an identical signal (style-only change on the same elements, the same page shift, identical DOM with styles not compared, a large spread-out diff, likely render noise) are grouped first; a diff concentrated in one area is never grouped. It ends with the paths to open the HTML report and each diff image |
|
|
14
|
+
| `explain_snapshot` | Layered evidence for one snapshot: pixel regions and the shape of the diff (`layers.pixel.shape`: scattered, concentrated or large), element attribution (which selectors shifted vs changed, whole-page shift), the DOM/style signal, and interpretation guidance |
|
|
14
15
|
| `get_report` | The raw `results.json` payload, for agents that parse structured data |
|
|
15
16
|
| `get_diff` (alias `get_snapshot_diff`) | Returns the baseline, current, and diff **images** for one snapshot, downscaled to fit model context, so the agent can see the change |
|
|
16
17
|
| `list_baselines` | Lists the committed baselines under `.testivai/baselines/` |
|
|
17
18
|
| `approve_snapshot` / `approve_all` | Promote reviewed captures to committed baselines (same as `testivai approve`), **only after a human confirms** |
|
|
18
19
|
|
|
19
|
-
The server also ships
|
|
20
|
+
The server also ships two prompts. `review-visual-changes` walks the agent
|
|
20
21
|
through a full review: summary, `explain_snapshot` per change, diff images when
|
|
21
22
|
the evidence is ambiguous, and a recommendation per snapshot.
|
|
23
|
+
`triage-visual-diff` (optional `snapshot` and `intent` arguments) sorts each
|
|
24
|
+
diff into glitch, intended change, bug or possible bug, with the evidence and
|
|
25
|
+
a next step; a changed DOM or changed computed styles is never a glitch. The
|
|
26
|
+
same rules run in CI with the
|
|
27
|
+
[`testivai/testivai-oss/review@v1`](https://github.com/testivai/testivai-oss/blob/main/docs/github-action.md#ai-triage-of-every-diff)
|
|
28
|
+
action.
|
|
22
29
|
|
|
23
30
|
### Approval is a human decision
|
|
24
31
|
|
package/dist/lib.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type DiffShape } from '@testivai/witness/report';
|
|
1
2
|
/** Subset of the semver-governed results.json contract this server reads. */
|
|
2
3
|
export interface DomInfo {
|
|
3
4
|
changed: boolean;
|
|
@@ -37,6 +38,8 @@ export interface SnapshotResult {
|
|
|
37
38
|
name: string;
|
|
38
39
|
status: 'passed' | 'changed' | 'new';
|
|
39
40
|
diffPercent?: number;
|
|
41
|
+
/** Pixels compared: the page area. With `regions`, it says whether a diff is spread out or in one area. */
|
|
42
|
+
totalPixels?: number;
|
|
40
43
|
baselinePath?: string;
|
|
41
44
|
currentPath?: string;
|
|
42
45
|
diffPath?: string;
|
|
@@ -106,6 +109,14 @@ export interface SnapshotExplanation {
|
|
|
106
109
|
regionCount: number;
|
|
107
110
|
/** Top regions by area, largest first (max 10). */
|
|
108
111
|
regions: RegionInfo[];
|
|
112
|
+
/**
|
|
113
|
+
* How the diff is laid out (diffShape in @testivai/witness): 'scattered'
|
|
114
|
+
* (small and spread out, the only shape render noise takes),
|
|
115
|
+
* 'concentrated' (every region in one box covering at most a third of
|
|
116
|
+
* the page) or 'large' (spread out, over 1% of pixels). Null for a new
|
|
117
|
+
* snapshot or a pass with no pixel diff.
|
|
118
|
+
*/
|
|
119
|
+
shape: DiffShape | null;
|
|
109
120
|
};
|
|
110
121
|
/** Element-level evidence: which elements, moved vs changed. */
|
|
111
122
|
element: {
|
|
@@ -163,7 +174,14 @@ export declare function downscalePng(buffer: Buffer, maxEdge?: number): {
|
|
|
163
174
|
export declare function resolveApprovalPrompt(argv: string[], configValue: boolean | undefined): boolean;
|
|
164
175
|
/** Snapshots listed together because their grouping signal is identical. */
|
|
165
176
|
export interface ChangeGroup {
|
|
166
|
-
|
|
177
|
+
/**
|
|
178
|
+
* 'styles-not-compared' is an identical DOM whose styles were not compared:
|
|
179
|
+
* unknown (render noise or a stylesheet-only change), never 'noise'.
|
|
180
|
+
* 'large-diff' is an identical DOM with matching styles whose diff is
|
|
181
|
+
* spread out but over 1% of pixels: more than render noise usually
|
|
182
|
+
* changes, never 'noise'. A diff concentrated in one area is never grouped.
|
|
183
|
+
*/
|
|
184
|
+
basis: 'style-only' | 'page-shift' | 'styles-not-compared' | 'large-diff' | 'noise';
|
|
167
185
|
/** What every member has in common, phrased for the reader. */
|
|
168
186
|
label: string;
|
|
169
187
|
/** Snapshot names, sorted. Always two or more. */
|
|
@@ -173,8 +191,8 @@ export interface ChangeGroup {
|
|
|
173
191
|
* Deterministic grouping of changed snapshots whose grouping signal is
|
|
174
192
|
* identical. Pure: no I/O, and the output does not depend on input order.
|
|
175
193
|
* Groups are ordered by size (largest first), then kind (style-only, page
|
|
176
|
-
* shift, noise), then signature; members by
|
|
177
|
-
* more members are returned.
|
|
194
|
+
* shift, styles not compared, large diff, noise), then signature; members by
|
|
195
|
+
* name. Only groups with two or more members are returned.
|
|
178
196
|
*/
|
|
179
197
|
export declare function groupChanges(snapshots: SnapshotResult[]): ChangeGroup[];
|
|
180
198
|
/**
|
|
@@ -183,4 +201,12 @@ export declare function groupChanges(snapshots: SnapshotResult[]): ChangeGroup[]
|
|
|
183
201
|
* more members.
|
|
184
202
|
*/
|
|
185
203
|
export declare function changeGroupLines(snapshots: SnapshotResult[]): string[];
|
|
204
|
+
/**
|
|
205
|
+
* MCP makes a prompts/get request's `arguments` optional, but the SDK
|
|
206
|
+
* validates a prompt's argument schema against the object itself and rejects
|
|
207
|
+
* a request without one, even when every argument is optional. Run on each
|
|
208
|
+
* incoming message, before the SDK sees it: a prompts/get with no arguments
|
|
209
|
+
* gets an empty object. Everything else is returned as it was.
|
|
210
|
+
*/
|
|
211
|
+
export declare function withPromptArguments<T>(message: T): T;
|
|
186
212
|
//# sourceMappingURL=lib.d.ts.map
|
package/dist/lib.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"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"}
|
package/dist/lib.js
CHANGED
|
@@ -47,10 +47,12 @@ exports.downscalePng = downscalePng;
|
|
|
47
47
|
exports.resolveApprovalPrompt = resolveApprovalPrompt;
|
|
48
48
|
exports.groupChanges = groupChanges;
|
|
49
49
|
exports.changeGroupLines = changeGroupLines;
|
|
50
|
+
exports.withPromptArguments = withPromptArguments;
|
|
50
51
|
const fs = __importStar(require("fs"));
|
|
51
52
|
const path = __importStar(require("path"));
|
|
52
53
|
const pngjs_1 = require("pngjs");
|
|
53
54
|
const baselines_1 = require("@testivai/witness/baselines");
|
|
55
|
+
const report_1 = require("@testivai/witness/report");
|
|
54
56
|
/** Resolve the report dir from .testivai/config.json (reportDir key), default visual-report/. */
|
|
55
57
|
function resolvePaths(root) {
|
|
56
58
|
let reportDir = 'visual-report';
|
|
@@ -74,22 +76,71 @@ function readResults(paths) {
|
|
|
74
76
|
return null;
|
|
75
77
|
return JSON.parse(fs.readFileSync(file, 'utf8'));
|
|
76
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Why the styles of an identical-DOM snapshot were not compared, or null when
|
|
81
|
+
* they were. noiseHint means the DOM is identical and no style mismatch was
|
|
82
|
+
* found, but only styleCheck 'match' proves the styles were compared:
|
|
83
|
+
* 'unavailable' (no comparable digests on both sides) and results written
|
|
84
|
+
* before the style check also carry the hint. Those are unknown, not noise:
|
|
85
|
+
* a stylesheet-only change is not ruled out.
|
|
86
|
+
*/
|
|
87
|
+
function stylesNotCompared(dom) {
|
|
88
|
+
if (!dom?.noiseHint || dom.styleCheck === 'match')
|
|
89
|
+
return null;
|
|
90
|
+
return dom.styleCheck === undefined ? 'absent' : 'unavailable';
|
|
91
|
+
}
|
|
92
|
+
/** The parenthetical naming why the styles were not compared. */
|
|
93
|
+
const NOT_COMPARED_REASON = {
|
|
94
|
+
unavailable: 'style check unavailable',
|
|
95
|
+
absent: 'no style check in these results',
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* The shape of an identical-DOM diff whose computed styles match, or null for
|
|
99
|
+
* any other snapshot. Render noise is small and scattered; a diff
|
|
100
|
+
* concentrated in one area or large is a bad capture or a change the style
|
|
101
|
+
* check does not cover (see diffShape in @testivai/witness).
|
|
102
|
+
*/
|
|
103
|
+
function matchedStylesShape(snapshot) {
|
|
104
|
+
if (!snapshot.dom?.noiseHint || snapshot.dom.styleCheck !== 'match')
|
|
105
|
+
return null;
|
|
106
|
+
return (0, report_1.diffShape)(snapshot);
|
|
107
|
+
}
|
|
77
108
|
/** One-line, agent-oriented verdict for a snapshot. */
|
|
78
109
|
function verdictFor(snapshot) {
|
|
79
|
-
|
|
80
|
-
|
|
110
|
+
const pct = snapshot.diffPercent !== undefined ? `${snapshot.diffPercent.toFixed(2)}% pixels differ` : 'pixels differ';
|
|
111
|
+
const notCompared = stylesNotCompared(snapshot.dom);
|
|
112
|
+
const shape = matchedStylesShape(snapshot);
|
|
113
|
+
if (snapshot.status === 'passed') {
|
|
114
|
+
if (!snapshot.autoPassed)
|
|
115
|
+
return 'passed — no visual change';
|
|
116
|
+
// An auto-pass is a configured tolerance: the pixel diff is still there.
|
|
117
|
+
const verdict = `passed — auto-passed by the configured '${snapshot.autoPassed}' criterion: ${pct}, within its tolerance`;
|
|
118
|
+
if (snapshot.autoPassed === 'noise' && notCompared) {
|
|
119
|
+
return `${verdict}; styles were not compared (${NOT_COMPARED_REASON[notCompared]}), so a stylesheet-only change is not ruled out — look at the diff`;
|
|
120
|
+
}
|
|
121
|
+
// A noise auto-pass from before noiseAutoPass refused concentrated diffs.
|
|
122
|
+
if (snapshot.autoPassed === 'noise' && shape?.kind === 'concentrated') {
|
|
123
|
+
return `${verdict}; but the diff is concentrated in one area (${(0, report_1.describeRegions)(shape)}), which render noise is not — look at the diff`;
|
|
124
|
+
}
|
|
125
|
+
return verdict;
|
|
126
|
+
}
|
|
81
127
|
if (snapshot.status === 'new')
|
|
82
128
|
return 'new snapshot — no baseline yet; a human should review and approve it';
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
129
|
+
if (notCompared) {
|
|
130
|
+
return (`changed (${pct}) but the DOM is structurally identical and styles were not compared (${NOT_COMPARED_REASON[notCompared]}) — ` +
|
|
131
|
+
'could be render noise or a stylesheet-only change; look at the diff before approving');
|
|
132
|
+
}
|
|
133
|
+
if (shape?.kind === 'concentrated') {
|
|
134
|
+
return (`changed (${pct}) — the DOM and computed styles both match, but the diff is concentrated in one area (${(0, report_1.describeRegions)(shape)}): ` +
|
|
135
|
+
`a bad capture, or a change the style check does not cover (${report_1.STYLE_CHECK_DOES_NOT_COVER}); compare the images (get_diff) before approving`);
|
|
136
|
+
}
|
|
137
|
+
if (shape?.kind === 'large') {
|
|
138
|
+
return (`changed (${pct}) — the DOM and computed styles both match, but the diff is large (over ${report_1.NOISE_MAX_DIFF_PERCENT}% of pixels, spread across the page), ` +
|
|
139
|
+
'more than render noise usually changes: often fonts or rendering that differ between machines, a bad capture, ' +
|
|
140
|
+
'or a change the style check does not cover; compare the images (get_diff) before approving');
|
|
141
|
+
}
|
|
88
142
|
if (snapshot.dom?.noiseHint) {
|
|
89
|
-
|
|
90
|
-
? 'the DOM and computed styles both match'
|
|
91
|
-
: 'DOM is structurally identical; styles were not compared (style check unavailable), so a style-only change is not ruled out';
|
|
92
|
-
return `changed (${pct}) but ${evidence} — likely render noise (font hinting, anti-aliasing); mention it, don't block`;
|
|
143
|
+
return `changed (${pct}) but the DOM and computed styles both match and the diff is small and scattered — likely render noise (font hinting, anti-aliasing); mention it, don't block`;
|
|
93
144
|
}
|
|
94
145
|
if (snapshot.dom?.changed) {
|
|
95
146
|
const s = snapshot.dom.summary;
|
|
@@ -185,6 +236,20 @@ function resolveImage(paths, relativePath) {
|
|
|
185
236
|
return null; // no traversal
|
|
186
237
|
return fs.existsSync(abs) ? abs : null;
|
|
187
238
|
}
|
|
239
|
+
/**
|
|
240
|
+
* The smallest element every region maps to, or null when they share none.
|
|
241
|
+
* Each region lists its elements smallest first, so the first shared one of
|
|
242
|
+
* the first region is the smallest.
|
|
243
|
+
*/
|
|
244
|
+
function sharedElement(regions) {
|
|
245
|
+
const [first, ...rest] = regions;
|
|
246
|
+
if (!first)
|
|
247
|
+
return null;
|
|
248
|
+
const shared = (first.elements ?? [])
|
|
249
|
+
.map((e) => e.selector)
|
|
250
|
+
.filter((selector) => rest.every((r) => (r.elements ?? []).some((e) => e.selector === selector)));
|
|
251
|
+
return shared[0] ?? null;
|
|
252
|
+
}
|
|
188
253
|
/** Build the layered explanation bundle for one snapshot, or null if absent. */
|
|
189
254
|
function explainSnapshot(root, name) {
|
|
190
255
|
const results = readResults(resolvePaths(root));
|
|
@@ -205,13 +270,49 @@ function explainSnapshot(root, name) {
|
|
|
205
270
|
if (snapshot.status === 'new') {
|
|
206
271
|
guidance.push('No baseline exists yet — this is a first capture, not a regression. A human should review and approve it.');
|
|
207
272
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
273
|
+
const notCompared = stylesNotCompared(snapshot.dom);
|
|
274
|
+
const shape = matchedStylesShape(snapshot);
|
|
275
|
+
// The DOM signal is computed before the pass criteria, so a passed snapshot
|
|
276
|
+
// can still carry noiseHint. The noise / styles-not-compared reading is for
|
|
277
|
+
// a diff pending review; a passed snapshot has nothing pending approval
|
|
278
|
+
// (an auto-pass gets its own line below), so the verdict and guidance agree.
|
|
279
|
+
const pending = snapshot.status === 'changed';
|
|
280
|
+
if (pending && notCompared) {
|
|
281
|
+
const why = notCompared === 'absent' ? 'these results have no style check' : 'no comparable style digests on both sides';
|
|
282
|
+
guidance.push('Styles not compared — could be render noise or a stylesheet-only change: pixels differ and the DOM is ' +
|
|
283
|
+
`structurally identical, but computed styles were not compared (${why}), so a stylesheet-only change is ` +
|
|
284
|
+
'not ruled out. Do not treat it as noise: compare the images (get_diff) before approving.');
|
|
213
285
|
}
|
|
214
|
-
if (
|
|
286
|
+
else if (pending && shape?.kind === 'concentrated' && shape.box) {
|
|
287
|
+
const regionList = snapshot.regions ?? [];
|
|
288
|
+
const element = sharedElement(regionList);
|
|
289
|
+
const mapsTo = element ? `, and ${regionList.length === 1 ? 'the region' : 'every region'} maps to \`${element}\`` : '';
|
|
290
|
+
guidance.push('Diff concentrated in one area, which render noise does not do: pixels differ and the DOM is structurally ' +
|
|
291
|
+
`identical with matching style digests, but ${(0, report_1.describeRegions)(shape)}, changed (box at x=${shape.box.x}, ` +
|
|
292
|
+
`y=${shape.box.y})${mapsTo}. Render noise is small and scattered (anti-aliasing and font hinting at glyph edges), ` +
|
|
293
|
+
'so this is a bad capture (a torn or partly blank render, a shifted band, a bad baseline) or a change the style ' +
|
|
294
|
+
`check does not cover (${report_1.STYLE_CHECK_DOES_NOT_COVER}). Do not treat it as noise: compare the images (get_diff) before approving.`);
|
|
295
|
+
}
|
|
296
|
+
else if (pending && shape?.kind === 'large') {
|
|
297
|
+
// diffShape treats an unknown size as not small; say so rather than claim a share.
|
|
298
|
+
const size = snapshot.diffPercent === undefined
|
|
299
|
+
? 'the share of pixels that differ is unknown'
|
|
300
|
+
: `${snapshot.diffPercent.toFixed(2)}% of pixels differ (over ${report_1.NOISE_MAX_DIFF_PERCENT}%)`;
|
|
301
|
+
guidance.push('Large diff, more than render noise usually changes: pixels differ and the DOM is structurally identical with ' +
|
|
302
|
+
`matching style digests, but ${size}, spread across the page. That is often fonts or rendering that differ between the ` +
|
|
303
|
+
'machines that captured the baseline and the current image; it can also be a bad capture or a change the style ' +
|
|
304
|
+
`check does not cover (${report_1.STYLE_CHECK_DOES_NOT_COVER}). Do not treat it as noise: compare the images (get_diff) before approving.`);
|
|
305
|
+
}
|
|
306
|
+
else if (pending && snapshot.dom?.noiseHint) {
|
|
307
|
+
guidance.push('Pixels differ but the DOM is structurally identical, style digests match, and the diff is small and scattered — likely render noise (anti-aliasing, font hinting). Mention it; do not block on it.');
|
|
308
|
+
}
|
|
309
|
+
if (snapshot.dom?.styleCheck === 'mismatch' && snapshot.dom.changed) {
|
|
310
|
+
// A class or style attribute change: the DOM changed AND elements were
|
|
311
|
+
// restyled. Never call the DOM identical here.
|
|
312
|
+
const els = snapshot.dom.styleChanges?.elements?.slice(0, 5).join(', ');
|
|
313
|
+
guidance.push(`Computed styles also changed on ${snapshot.dom.styleChanges?.count ?? 'some'} element(s)${els ? ` (${els})` : ''} along with the DOM change.`);
|
|
314
|
+
}
|
|
315
|
+
else if (snapshot.dom?.styleCheck === 'mismatch') {
|
|
215
316
|
const els = snapshot.dom.styleChanges?.elements?.slice(0, 5).join(', ');
|
|
216
317
|
guidance.push(`Computed styles changed on ${snapshot.dom.styleChanges?.count ?? 'some'} element(s)${els ? ` (${els})` : ''} while the DOM stayed identical — a stylesheet-only change. This is REAL, not noise.`);
|
|
217
318
|
}
|
|
@@ -225,7 +326,17 @@ function explainSnapshot(root, name) {
|
|
|
225
326
|
const s = snapshot.dom.summary;
|
|
226
327
|
guidance.push(`The DOM changed structurally (${s.added} added, ${s.removed} removed, ${s.attributeChanges} attribute changes${s.textChanges ? `, ${s.textChanges} text changes` : ''}) — confirm the change is intended before approving.`);
|
|
227
328
|
}
|
|
228
|
-
if (snapshot.autoPassed) {
|
|
329
|
+
if (snapshot.autoPassed === 'noise' && notCompared) {
|
|
330
|
+
// A noise auto-pass that did not require a style match (older results).
|
|
331
|
+
guidance.push("This diff auto-passed via the 'noise' criterion although its styles were not compared, so a " +
|
|
332
|
+
'stylesheet-only change was not ruled out — compare the images (get_diff) before relying on it.');
|
|
333
|
+
}
|
|
334
|
+
else if (snapshot.autoPassed === 'noise' && shape?.kind === 'concentrated') {
|
|
335
|
+
// A noise auto-pass from before noiseAutoPass refused concentrated diffs.
|
|
336
|
+
guidance.push(`This diff auto-passed via the 'noise' criterion although it is concentrated in one area (${(0, report_1.describeRegions)(shape)}), ` +
|
|
337
|
+
'which render noise is not — compare the images (get_diff) before relying on it.');
|
|
338
|
+
}
|
|
339
|
+
else if (snapshot.autoPassed) {
|
|
229
340
|
guidance.push(`This diff auto-passed via the '${snapshot.autoPassed}' criterion — reported for transparency, no action needed.`);
|
|
230
341
|
}
|
|
231
342
|
if (snapshot.maskWarnings?.length) {
|
|
@@ -241,6 +352,7 @@ function explainSnapshot(root, name) {
|
|
|
241
352
|
diffPercent: snapshot.diffPercent ?? null,
|
|
242
353
|
regionCount: snapshot.regions?.length ?? 0,
|
|
243
354
|
regions,
|
|
355
|
+
shape: snapshot.status === 'changed' || snapshot.autoPassed ? (0, report_1.diffShape)(snapshot) : null,
|
|
244
356
|
},
|
|
245
357
|
element: {
|
|
246
358
|
pageShift: snapshot.pageShift ?? null,
|
|
@@ -339,13 +451,14 @@ function resolveApprovalPrompt(argv, configValue) {
|
|
|
339
451
|
}
|
|
340
452
|
return configValue ?? true;
|
|
341
453
|
}
|
|
342
|
-
// Real changes before noise when groups are the same size.
|
|
343
|
-
const BASIS_ORDER = ['style-only', 'page-shift', 'noise'];
|
|
454
|
+
// Real changes, then unknowns, before likely noise when groups are the same size.
|
|
455
|
+
const BASIS_ORDER = ['style-only', 'page-shift', 'styles-not-compared', 'large-diff', 'noise'];
|
|
344
456
|
/**
|
|
345
457
|
* The one grouping signal a changed snapshot carries, or null when it must
|
|
346
458
|
* not be grouped. Precedence: structural (never grouped) > style-only >
|
|
347
|
-
* page shift >
|
|
348
|
-
*
|
|
459
|
+
* page shift > styles not compared > concentrated (never grouped) > large
|
|
460
|
+
* diff > noise. Every rule errs towards null: under-grouping is acceptable,
|
|
461
|
+
* over-grouping is a bug.
|
|
349
462
|
*/
|
|
350
463
|
function signatureOf(s) {
|
|
351
464
|
// Only changed snapshots; auto-passed ones are status 'passed'.
|
|
@@ -379,14 +492,38 @@ function signatureOf(s) {
|
|
|
379
492
|
'grouped on the displacement, not on its cause',
|
|
380
493
|
};
|
|
381
494
|
}
|
|
495
|
+
// Styles not compared is unknown, not noise: its own basis, so it is never
|
|
496
|
+
// grouped or labelled with noise. Unavailable and absent style checks are
|
|
497
|
+
// labelled differently, so they are keyed apart.
|
|
498
|
+
const notCompared = stylesNotCompared(s.dom);
|
|
499
|
+
if (notCompared) {
|
|
500
|
+
return {
|
|
501
|
+
basis: 'styles-not-compared',
|
|
502
|
+
key: `styles-not-compared:${notCompared}`,
|
|
503
|
+
label: `identical DOM, styles not compared (${NOT_COMPARED_REASON[notCompared]}): ` +
|
|
504
|
+
'render noise or a stylesheet-only change, not ruled out',
|
|
505
|
+
};
|
|
506
|
+
}
|
|
507
|
+
// Matching styles: likely noise only when the diff is small and scattered.
|
|
508
|
+
// A diff concentrated in one area sits in its own place on its own page,
|
|
509
|
+
// so grouping two would suggest one cause: never grouped, never as noise.
|
|
510
|
+
const shape = matchedStylesShape(s);
|
|
511
|
+
if (shape?.kind === 'concentrated')
|
|
512
|
+
return null;
|
|
513
|
+
if (shape?.kind === 'large') {
|
|
514
|
+
return {
|
|
515
|
+
basis: 'large-diff',
|
|
516
|
+
key: 'large-diff',
|
|
517
|
+
label: `identical DOM and computed styles, but over ${report_1.NOISE_MAX_DIFF_PERCENT}% of pixels differ, spread across the page: ` +
|
|
518
|
+
'more than render noise usually changes; grouped on that signal, not on its cause',
|
|
519
|
+
};
|
|
520
|
+
}
|
|
382
521
|
if (s.dom.noiseHint) {
|
|
383
|
-
return
|
|
384
|
-
|
|
385
|
-
:
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
label: 'likely render noise with identical DOM, but styles not compared (style check unavailable)',
|
|
389
|
-
};
|
|
522
|
+
return {
|
|
523
|
+
basis: 'noise',
|
|
524
|
+
key: 'noise:match',
|
|
525
|
+
label: 'likely render noise: the DOM and computed styles both match and the diff is small and scattered',
|
|
526
|
+
};
|
|
390
527
|
}
|
|
391
528
|
return null;
|
|
392
529
|
}
|
|
@@ -394,8 +531,8 @@ function signatureOf(s) {
|
|
|
394
531
|
* Deterministic grouping of changed snapshots whose grouping signal is
|
|
395
532
|
* identical. Pure: no I/O, and the output does not depend on input order.
|
|
396
533
|
* Groups are ordered by size (largest first), then kind (style-only, page
|
|
397
|
-
* shift, noise), then signature; members by
|
|
398
|
-
* more members are returned.
|
|
534
|
+
* shift, styles not compared, large diff, noise), then signature; members by
|
|
535
|
+
* name. Only groups with two or more members are returned.
|
|
399
536
|
*/
|
|
400
537
|
function groupChanges(snapshots) {
|
|
401
538
|
const byKey = new Map();
|
|
@@ -441,4 +578,17 @@ function changeGroupLines(snapshots) {
|
|
|
441
578
|
: []),
|
|
442
579
|
];
|
|
443
580
|
}
|
|
581
|
+
/**
|
|
582
|
+
* MCP makes a prompts/get request's `arguments` optional, but the SDK
|
|
583
|
+
* validates a prompt's argument schema against the object itself and rejects
|
|
584
|
+
* a request without one, even when every argument is optional. Run on each
|
|
585
|
+
* incoming message, before the SDK sees it: a prompts/get with no arguments
|
|
586
|
+
* gets an empty object. Everything else is returned as it was.
|
|
587
|
+
*/
|
|
588
|
+
function withPromptArguments(message) {
|
|
589
|
+
const m = message;
|
|
590
|
+
if (!m || typeof m !== 'object' || m.method !== 'prompts/get' || !m.params || m.params.arguments !== undefined)
|
|
591
|
+
return message;
|
|
592
|
+
return { ...m, params: { ...m.params, arguments: {} } };
|
|
593
|
+
}
|
|
444
594
|
//# sourceMappingURL=lib.js.map
|
package/dist/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDA,oCAcC;AAED,kCAIC;AAGD,gCAwCC;AAWD,wDA2CC;AAOD,kCAYC;AAED,oCAIC;AAmCD,0CAqEC;AAaD,0CAQC;AAGD,gCAaC;AAED,sCAWC;AAQD,oCA8BC;AAOD,sDAMC;AA2ED,oCAkBC;AAOD,4CAoBC;AA3gBD,uCAAyB;AACzB,2CAA6B;AAC7B,iCAA4B;AAC5B,2DAA4D;AAoD5D,iGAAiG;AACjG,SAAgB,YAAY,CAAC,IAAY;IACvC,IAAI,SAAS,GAAG,eAAe,CAAC;IAChC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IAC/D,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;YAC/D,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxE,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAC/B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;AACzD,CAAC;AAED,SAAgB,WAAW,CAAC,KAAmB;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACxD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAgB,CAAC;AAClE,CAAC;AAED,uDAAuD;AACvD,SAAgB,UAAU,CAAC,QAAwB;IACjD,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,2BAA2B,CAAC;IACrE,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK;QAAE,OAAO,sEAAsE,CAAC;IAC7G,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,eAAe,CAAC;IACvH,6EAA6E;IAC7E,wEAAwE;IACxE,yEAAyE;IACzE,oEAAoE;IACpE,IAAI,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC;QAC5B,MAAM,QAAQ,GACZ,QAAQ,CAAC,GAAG,CAAC,UAAU,KAAK,OAAO;YACjC,CAAC,CAAC,wCAAwC;YAC1C,CAAC,CAAC,4HAA4H,CAAC;QACnI,OAAO,YAAY,GAAG,SAAS,QAAQ,+EAA+E,CAAC;IACzH,CAAC;IACD,IAAI,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;QAC/B,MAAM,MAAM,GAAG,CAAC;YACd,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,OAAO,aAAa,CAAC,CAAC,gBAAgB,qBAAqB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,eAAe,CAAC,CAAC,CAAC,EAAE,GAAG;YAC/I,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,YAAY,GAAG,wBAAwB,MAAM,sEAAsE,CAAC;IAC7H,CAAC;IACD,8EAA8E;IAC9E,yEAAyE;IACzE,8EAA8E;IAC9E,+DAA+D;IAC/D,IAAI,QAAQ,CAAC,GAAG,EAAE,UAAU,KAAK,UAAU,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,IAAI,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,OAAO,YAAY,GAAG,0BAA0B,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,+BAA+B,MAAM,sEAAsE,CAAC;IAC5L,CAAC;IACD,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC;QACjB,MAAM,GAAG,GACP,QAAQ,CAAC,GAAG,CAAC,UAAU,KAAK,aAAa;YACvC,CAAC,CAAC,kFAAkF;YACpF,CAAC,CAAC,EAAE,CAAC;QACT,OAAO,YAAY,GAAG,6BAA6B,GAAG,kCAAkC,CAAC;IAC3F,CAAC;IACD,OAAO,YAAY,GAAG,gDAAgD,CAAC;AACzE,CAAC;AAED,yEAAyE;AACzE;;;;;;;GAOG;AACH,SAAgB,sBAAsB,CAAC,IAAY;IACjD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,SAAS,eAAe,CAAC;IAE9F,IAAI,OAAO,GAAgB,EAAE,CAAC;IAC9B,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CACL,uBAAuB,KAAK,8CAA8C;YAC1E,wDAAwD,CACzD,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAE3E,kFAAkF;IAClF,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3F,MAAM,GAAG,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC;QAChC,MAAM,GAAG,GAAG,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC;QAC9B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,CACL,uBAAuB,KAAK,uCAAuC,GAAG,IAAI,GAAG,IAAI;gBACjF,GAAG,QAAQ,CAAC,MAAM,mEAAmE;gBACrF,mFAAmF;gBACnF,6EAA6E,CAC9E,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;IAC9C,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CACL,uBAAuB,KAAK,SAAS,QAAQ,CAAC,MAAM,uBAAuB;YAC3E,gFAAgF;YAChF,8EAA8E,CAC/E,CAAC;IACJ,CAAC;IAED,OAAO,uBAAuB,KAAK,0DAA0D,CAAC;AAChG,CAAC;AAED;;;;GAIG;AACH,SAAgB,WAAW,CAAC,KAAmB,EAAE,OAAoB;IACnE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACjD,IAAI,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QAClC,MAAM,KAAK,GACT,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE;YAC/F,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE;gBAC1G,CAAC,CAAC,IAAI,CAAC;QACT,IAAI,KAAK,EAAE,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrE,CAAC;AAED,SAAgB,YAAY,CAAC,KAAmB,EAAE,YAAoB;IACpE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACxD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,eAAe;IAC3F,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACzC,CAAC;AAkCD,gFAAgF;AAChF,SAAgB,eAAe,CAAC,IAAY,EAAE,IAAY;IACxD,MAAM,OAAO,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACjE,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAEvC,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;SAC1C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;SACvD,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEhB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;QACvC,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YAClC,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,2GAA2G,CAAC,CAAC;IAC7H,CAAC;IACD,IAAI,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC;QAC5B,MAAM,QAAQ,GACZ,QAAQ,CAAC,GAAG,CAAC,UAAU,KAAK,OAAO;YACjC,CAAC,CAAC,2DAA2D;YAC7D,CAAC,CAAC,oIAAoI,CAAC;QAC3I,QAAQ,CAAC,IAAI,CAAC,qBAAqB,QAAQ,uFAAuF,CAAC,CAAC;IACtI,CAAC;IACD,IAAI,QAAQ,CAAC,GAAG,EAAE,UAAU,KAAK,UAAU,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxE,QAAQ,CAAC,IAAI,CAAC,8BAA8B,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,IAAI,MAAM,cAAc,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,sFAAsF,CAAC,CAAC;IACpN,CAAC;IACD,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,4BAA4B,QAAQ,CAAC,SAAS,CAAC,MAAM,UAAU,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,KAAK,+IAA+I,CAAC,CAAC;IAC9U,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAClE,QAAQ,CAAC,IAAI,CAAC,8IAA8I,CAAC,CAAC;IAChK,CAAC;IACD,IAAI,QAAQ,CAAC,GAAG,EAAE,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAClD,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,OAAO,aAAa,CAAC,CAAC,gBAAgB,qBAAqB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,eAAe,CAAC,CAAC,CAAC,EAAE,sDAAsD,CAAC,CAAC;IAC9O,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QACxB,QAAQ,CAAC,IAAI,CAAC,kCAAkC,QAAQ,CAAC,UAAU,4DAA4D,CAAC,CAAC;IACnI,CAAC;IACD,IAAI,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;QAClC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IACpH,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;IAEtF,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC;QAC7B,MAAM,EAAE;YACN,KAAK,EAAE;gBACL,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,IAAI;gBACzC,WAAW,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;gBAC1C,OAAO;aACR;YACD,OAAO,EAAE;gBACP,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,IAAI;gBACrC,gBAAgB,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC3C,gBAAgB,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;aAC5C;YACD,GAAG,EAAE,QAAQ,CAAC,GAAG,IAAI,IAAI;SAC1B;QACD,QAAQ;KACT,CAAC;AACJ,CAAC;AAQD;;;;GAIG;AACH,SAAgB,eAAe,CAAC,IAAY,EAAE,IAAY;IACxD,MAAM,KAAK,GAAG,IAAI,yBAAa,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC;QACH,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC1C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACjG,CAAC;AACH,CAAC;AAED,qFAAqF;AACrF,SAAgB,UAAU,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,IAAI,yBAAa,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,MAAM,GAA2C,EAAE,CAAC;IAC1D,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACpB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC;AAED,SAAgB,aAAa,CAAC,IAAY;IACxC,sEAAsE;IACtE,wEAAwE;IACxE,MAAM,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;IACvE,MAAM,GAAG,GAAW,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,OAAO,EAAE;SACN,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SACzC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;SACzD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,YAAY,CAC1B,MAAc,EACd,OAAO,GAAG,IAAI;IAEd,MAAM,QAAQ,GAAG,WAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC;IAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAErC,IAAI,WAAW,IAAI,OAAO,EAAE,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;IACxF,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC;IAChD,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;IAEjC,MAAM,GAAG,GAAG,IAAI,WAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAE7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACjD,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACjD,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,WAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;AACnG,CAAC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,IAAc,EAAE,WAAgC;IACpF,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,mBAAmB;YAAE,OAAO,IAAI,CAAC;QACjD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,sBAAsB;YAAE,OAAO,KAAK,CAAC;IACvD,CAAC;IACD,OAAO,WAAW,IAAI,IAAI,CAAC;AAC7B,CAAC;AAaD,2DAA2D;AAC3D,MAAM,WAAW,GAA2B,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;AAElF;;;;;GAKG;AACH,SAAS,WAAW,CAAC,CAAiB;IACpC,gEAAgE;IAChE,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACxC,6DAA6D;IAC7D,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAEzC,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;QACnC,qEAAqE;QACrE,+DAA+D;QAC/D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACtG,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrE,OAAO;YACL,KAAK,EAAE,YAAY;YACnB,GAAG,EAAE,cAAc,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACvC,KAAK,EACH,4CAA4C,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,wBAAwB,KAAK,KAAK;gBAC5G,sEAAsE;SACzE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;QAChB,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC;QACnC,OAAO;YACL,KAAK,EAAE,YAAY;YACnB,GAAG,EAAE,cAAc,EAAE,IAAI,MAAM,EAAE;YACjC,KAAK,EACH,iDAAiD,MAAM,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM;gBAC7G,+CAA+C;SAClD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,OAAO;YACjC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,6DAA6D,EAAE;YAC9G,CAAC,CAAC;gBACE,KAAK,EAAE,OAAO;gBACd,GAAG,EAAE,oBAAoB;gBACzB,KAAK,EAAE,2FAA2F;aACnG,CAAC;IACR,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,YAAY,CAAC,SAA2B;IACtD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuD,CAAC;IAC7E,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACrE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3B,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;SACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;SACpC,IAAI,CACH,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM;QACnC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;QAC/E,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACvF;SACA,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AACzH,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,SAA2B;IAC1D,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,SAAS;SACxB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACZ,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QAChI,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;IACxD,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClB,IAAI,EAAE,CAAC;IACV,OAAO;QACL,sJAAsJ;QACtJ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QACnF,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;YACtB,CAAC,CAAC;gBACE,gBAAgB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,mCAAmC;oBAChH,oEAAoE;aACvE;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -178,35 +178,45 @@ server.registerTool('explain_snapshot', {
|
|
|
178
178
|
}
|
|
179
179
|
return { content: [{ type: 'text', text: JSON.stringify(explanation, null, 2) }] };
|
|
180
180
|
});
|
|
181
|
-
// A reusable prompt that turns the evidence into a review narrative.
|
|
182
|
-
server.
|
|
183
|
-
|
|
184
|
-
|
|
181
|
+
// A reusable prompt that turns the evidence into a review narrative. Its text
|
|
182
|
+
// lives in tool-meta.ts so tests can read it without starting the server.
|
|
183
|
+
server.registerPrompt(tool_meta_1.REVIEW_PROMPT.name, {
|
|
184
|
+
title: tool_meta_1.REVIEW_PROMPT.title,
|
|
185
|
+
description: tool_meta_1.REVIEW_PROMPT.description,
|
|
185
186
|
}, async () => ({
|
|
186
187
|
messages: [
|
|
187
188
|
{
|
|
188
189
|
role: 'user',
|
|
189
190
|
content: {
|
|
190
191
|
type: 'text',
|
|
191
|
-
text:
|
|
192
|
-
'Review the latest TestivAI visual regression results in this project:',
|
|
193
|
-
'',
|
|
194
|
-
'1. Call get_report for the summary. If nothing changed and nothing is new, say so and stop.',
|
|
195
|
-
'2. For every changed snapshot, call explain_snapshot(name) and read its layers and guidance.',
|
|
196
|
-
' When the evidence is ambiguous, call get_diff(name) and inspect the images.',
|
|
197
|
-
'3. For each snapshot, explain in one short paragraph WHAT changed (name the selectors),',
|
|
198
|
-
' WHY it likely happened (use pageShift/shift classifications — e.g. content injected above),',
|
|
199
|
-
' and whether it is render noise, a style-only change, or a structural change.',
|
|
200
|
-
'4. End with a recommendation per snapshot: approve, investigate, or ignore-as-noise.',
|
|
201
|
-
' Never call approve_snapshot/approve_all yourself unless the human has explicitly',
|
|
202
|
-
' confirmed the changes are intended — baseline approval is a human decision.',
|
|
203
|
-
].join('\n'),
|
|
192
|
+
text: tool_meta_1.REVIEW_PROMPT.text,
|
|
204
193
|
},
|
|
205
194
|
},
|
|
206
195
|
],
|
|
207
196
|
}));
|
|
197
|
+
// Glitch, intended change, bug or possible bug for one snapshot or all of
|
|
198
|
+
// them. The arguments are optional; the text quotes them (tool-meta.ts).
|
|
199
|
+
server.registerPrompt(tool_meta_1.TRIAGE_PROMPT.name, {
|
|
200
|
+
title: tool_meta_1.TRIAGE_PROMPT.title,
|
|
201
|
+
description: tool_meta_1.TRIAGE_PROMPT.description,
|
|
202
|
+
argsSchema: {
|
|
203
|
+
snapshot: zod_1.z.string().optional().describe(tool_meta_1.TRIAGE_PROMPT.args.snapshot),
|
|
204
|
+
intent: zod_1.z.string().optional().describe(tool_meta_1.TRIAGE_PROMPT.args.intent),
|
|
205
|
+
},
|
|
206
|
+
}, async ({ snapshot, intent }) => ({
|
|
207
|
+
messages: [
|
|
208
|
+
{
|
|
209
|
+
role: 'user',
|
|
210
|
+
content: { type: 'text', text: tool_meta_1.TRIAGE_PROMPT.textFor({ snapshot, intent }) },
|
|
211
|
+
},
|
|
212
|
+
],
|
|
213
|
+
}));
|
|
208
214
|
async function main() {
|
|
209
|
-
|
|
215
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
216
|
+
await server.connect(transport);
|
|
217
|
+
// After connect, which installs the server's handler: see withPromptArguments.
|
|
218
|
+
const handle = transport.onmessage;
|
|
219
|
+
transport.onmessage = (message) => handle?.((0, lib_1.withPromptArguments)(message));
|
|
210
220
|
}
|
|
211
221
|
main().catch((err) => {
|
|
212
222
|
console.error('testivai-mcp failed to start:', err);
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,uCAAyB;AACzB,6BAAyB;AACzB,oEAAoE;AACpE,wEAAiF;AACjF,qDAA2D;AAC3D,+
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/tool-meta.d.ts
CHANGED
|
@@ -46,6 +46,51 @@ export declare const TOOL_META: {
|
|
|
46
46
|
description: string;
|
|
47
47
|
};
|
|
48
48
|
};
|
|
49
|
+
/**
|
|
50
|
+
* The `review-visual-changes` prompt. It tells the model how to sort each
|
|
51
|
+
* diff, so it uses the same cases as the verdicts in lib.ts: likely render
|
|
52
|
+
* noise only when the DOM and computed styles both match and the diff is
|
|
53
|
+
* small and scattered, a matching-styles diff concentrated in one area or
|
|
54
|
+
* large is a bad capture or a change the style check does not cover, and an
|
|
55
|
+
* identical DOM whose styles were not compared is unknown, not noise.
|
|
56
|
+
*/
|
|
57
|
+
export declare const REVIEW_PROMPT: {
|
|
58
|
+
name: string;
|
|
59
|
+
title: string;
|
|
60
|
+
description: string;
|
|
61
|
+
text: string;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Sorts a diff into glitch / intended change / bug / possible bug. Any MCP
|
|
65
|
+
* client's model follows this text, so it carries the rules that keep a real
|
|
66
|
+
* change from being waved through as a glitch: a changed DOM or changed
|
|
67
|
+
* computed styles is never a glitch, an uncompared style check is not one on
|
|
68
|
+
* the DOM alone, and a large or local DOM-identical diff is a bad capture to
|
|
69
|
+
* locate, not noise.
|
|
70
|
+
*/
|
|
71
|
+
export declare const TRIAGE_PROMPT: {
|
|
72
|
+
name: string;
|
|
73
|
+
title: string;
|
|
74
|
+
description: string;
|
|
75
|
+
args: {
|
|
76
|
+
snapshot: string;
|
|
77
|
+
intent: string;
|
|
78
|
+
};
|
|
79
|
+
/** What to recommend per verdict; shared with the CI review. */
|
|
80
|
+
nextSteps: string;
|
|
81
|
+
/** The last line of every triage prompt, this one and the CI review's. */
|
|
82
|
+
approvalRule: string;
|
|
83
|
+
/**
|
|
84
|
+
* The verdicts, how to read the evidence, and how to judge intent: shared
|
|
85
|
+
* with the CI review (action/src/review.ts), which asks for structured
|
|
86
|
+
* output instead of this prompt's markdown report.
|
|
87
|
+
*/
|
|
88
|
+
rubric(intent?: string, intentSource?: string): string;
|
|
89
|
+
textFor({ snapshot, intent }: {
|
|
90
|
+
snapshot?: string;
|
|
91
|
+
intent?: string;
|
|
92
|
+
}): string;
|
|
93
|
+
};
|
|
49
94
|
/** The tool metadata for this server run, given the approval-prompt setting. */
|
|
50
95
|
export type ToolName = keyof typeof TOOL_META;
|
|
51
96
|
export declare function toolMetaFor({ approvalPrompt }: {
|
package/dist/tool-meta.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-meta.d.ts","sourceRoot":"","sources":["../src/tool-meta.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAcD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"tool-meta.d.ts","sourceRoot":"","sources":["../src/tool-meta.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAcD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDc,CAAC;AAErC;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa;;;;;CA2BzB,CAAC;AAUF;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa;;;;;;;;IASxB,gEAAgE;;IAGhE,0EAA0E;;IAE1E;;;;OAIG;oBACa,MAAM,0BAA+D,MAAM;kCA8B7D;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;CAqB9E,CAAC;AAEF,gFAAgF;AAChF,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,SAAS,CAAC;AAE9C,wBAAgB,WAAW,CAAC,EAAE,cAAc,EAAE,EAAE;IAAE,cAAc,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAKvG"}
|
package/dist/tool-meta.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TOOL_META = void 0;
|
|
3
|
+
exports.TRIAGE_PROMPT = exports.REVIEW_PROMPT = exports.TOOL_META = void 0;
|
|
4
4
|
exports.toolMetaFor = toolMetaFor;
|
|
5
5
|
// Baseline approval must come from a person. Claude Code honours this key by
|
|
6
6
|
// showing the tool's permission prompt on every call, even in auto-approving
|
|
@@ -16,10 +16,13 @@ exports.TOOL_META = {
|
|
|
16
16
|
title: 'Get visual test results',
|
|
17
17
|
description: 'Read the latest TestivAI visual regression results (visual-report/results.json). ' +
|
|
18
18
|
'Returns a per-snapshot verdict combining the pixel diff with the DOM and computed-style signals. ' +
|
|
19
|
-
'A pixel diff is likely render noise when the DOM and the computed styles both match; ' +
|
|
19
|
+
'A pixel diff is likely render noise when the DOM and the computed styles both match and the diff is small and scattered; ' +
|
|
20
|
+
'a diff whose DOM and computed styles match but that is concentrated in one area or over 1% of pixels gets its own verdict, not noise: ' +
|
|
21
|
+
'it is a bad capture or a change the style check does not cover (size, overflow, transform, images…), so look at the diff (get_diff) before approving; ' +
|
|
20
22
|
'a style-only change (identical DOM, different computed styles) is a real change, not noise, ' +
|
|
21
23
|
'and so is any DOM change — both need human review. ' +
|
|
22
|
-
'When the styles
|
|
24
|
+
'When the styles were not compared (style check unavailable), the verdict says so and does not call the diff noise: ' +
|
|
25
|
+
'with an identical DOM it could be render noise or a stylesheet-only change, so look at the diff (get_diff) before approving. ' +
|
|
23
26
|
'Run the test suite first (e.g. `npx playwright test`) if results are stale or missing.',
|
|
24
27
|
},
|
|
25
28
|
// `get_diff` is the canonical name; `get_snapshot_diff` is kept as an alias.
|
|
@@ -53,6 +56,125 @@ exports.TOOL_META = {
|
|
|
53
56
|
'interpretation guidance. Use this to explain WHY a diff happened — pair with get_diff for the images.',
|
|
54
57
|
},
|
|
55
58
|
};
|
|
59
|
+
/**
|
|
60
|
+
* The `review-visual-changes` prompt. It tells the model how to sort each
|
|
61
|
+
* diff, so it uses the same cases as the verdicts in lib.ts: likely render
|
|
62
|
+
* noise only when the DOM and computed styles both match and the diff is
|
|
63
|
+
* small and scattered, a matching-styles diff concentrated in one area or
|
|
64
|
+
* large is a bad capture or a change the style check does not cover, and an
|
|
65
|
+
* identical DOM whose styles were not compared is unknown, not noise.
|
|
66
|
+
*/
|
|
67
|
+
exports.REVIEW_PROMPT = {
|
|
68
|
+
name: 'review-visual-changes',
|
|
69
|
+
title: 'Review visual changes',
|
|
70
|
+
description: 'Walk the latest visual results and produce a human-quality review: what changed, why, and what to do.',
|
|
71
|
+
text: [
|
|
72
|
+
'Review the latest TestivAI visual regression results in this project:',
|
|
73
|
+
'',
|
|
74
|
+
'1. Call get_report for the summary. If nothing changed and nothing is new, say so and stop.',
|
|
75
|
+
'2. For every changed snapshot, call explain_snapshot(name) and read its layers and guidance.',
|
|
76
|
+
' When the evidence is ambiguous, call get_diff(name) and inspect the images.',
|
|
77
|
+
'3. For each snapshot, explain in one short paragraph WHAT changed (name the selectors),',
|
|
78
|
+
' WHY it likely happened (use pageShift/shift classifications — e.g. content injected above),',
|
|
79
|
+
' and which case it is:',
|
|
80
|
+
' - likely render noise (identical DOM and computed styles match, and the diff is small and scattered; still not proof),',
|
|
81
|
+
' - concentrated in one area or large (identical DOM and computed styles match, but the diff sits in one area',
|
|
82
|
+
' or is over 1% of pixels): a bad capture or a change the style check does not cover, so call get_diff(name)',
|
|
83
|
+
' and compare the images; do not call it noise,',
|
|
84
|
+
' - a style-only change (identical DOM, computed styles differ: a real change),',
|
|
85
|
+
' - a structural change (the DOM changed), or',
|
|
86
|
+
' - styles not compared (identical DOM, style check unavailable):',
|
|
87
|
+
' could be render noise or a stylesheet-only change, so call get_diff(name)',
|
|
88
|
+
' and compare the images; do not call it noise.',
|
|
89
|
+
'4. End with a recommendation per snapshot: approve (once the human confirms), investigate,',
|
|
90
|
+
' or likely noise (mention it, do not block on it; only for the likely-render-noise case).',
|
|
91
|
+
' Never call approve_snapshot/approve_all yourself unless the human has explicitly',
|
|
92
|
+
' confirmed the changes are intended — baseline approval is a human decision.',
|
|
93
|
+
].join('\n'),
|
|
94
|
+
};
|
|
95
|
+
/** One line of prompt text per argument line, quoted, so an argument cannot read as instructions. */
|
|
96
|
+
const quoteLines = (value) => value
|
|
97
|
+
.trim()
|
|
98
|
+
.split(/\r?\n/)
|
|
99
|
+
.map((line) => (line.trim() ? `> ${line.trim()}` : '>'))
|
|
100
|
+
.join('\n');
|
|
101
|
+
/**
|
|
102
|
+
* Sorts a diff into glitch / intended change / bug / possible bug. Any MCP
|
|
103
|
+
* client's model follows this text, so it carries the rules that keep a real
|
|
104
|
+
* change from being waved through as a glitch: a changed DOM or changed
|
|
105
|
+
* computed styles is never a glitch, an uncompared style check is not one on
|
|
106
|
+
* the DOM alone, and a large or local DOM-identical diff is a bad capture to
|
|
107
|
+
* locate, not noise.
|
|
108
|
+
*/
|
|
109
|
+
exports.TRIAGE_PROMPT = {
|
|
110
|
+
name: 'triage-visual-diff',
|
|
111
|
+
title: 'Triage a visual diff: glitch, intended change, bug or possible bug',
|
|
112
|
+
description: 'Decide whether a visual diff is a glitch (the capture or environment, not the page), an intended change, a bug, or a possible bug, from the snapshot evidence, the images and what the change was meant to do.',
|
|
113
|
+
args: {
|
|
114
|
+
snapshot: 'Snapshot to triage. Leave empty to triage every changed snapshot.',
|
|
115
|
+
intent: 'What the change under test was meant to do, for example the pull request description. Leave empty to have the model look for it.',
|
|
116
|
+
},
|
|
117
|
+
/** What to recommend per verdict; shared with the CI review. */
|
|
118
|
+
nextSteps: 'for an intended change, approve it once the human agrees (`/testivai approve <name>` on the pull request, or `npx testivai approve <name>` locally); for a bug, what to fix; for a possible bug, what to check; for a glitch, re-run the tests or replace the baseline from a capture two runs agree on.',
|
|
119
|
+
/** The last line of every triage prompt, this one and the CI review's. */
|
|
120
|
+
approvalRule: "Do not call approve_snapshot or approve_all: approving is the human's decision, and this triage is the input to it.",
|
|
121
|
+
/**
|
|
122
|
+
* The verdicts, how to read the evidence, and how to judge intent: shared
|
|
123
|
+
* with the CI review (action/src/review.ts), which asks for structured
|
|
124
|
+
* output instead of this prompt's markdown report.
|
|
125
|
+
*/
|
|
126
|
+
rubric(intent, intentSource = 'The person who asked for this triage says') {
|
|
127
|
+
const intentText = intent?.trim()
|
|
128
|
+
? [`${intentSource} the change under test was meant to do this:`, quoteLines(intent)]
|
|
129
|
+
: [
|
|
130
|
+
'Find it in this conversation, the pull request description, or the code diff of the branch (for example `git diff` against the base branch) if you can read it. If there is no statement of intent anywhere, call a real change a possible bug rather than guess, and say what you could not confirm.',
|
|
131
|
+
];
|
|
132
|
+
return [
|
|
133
|
+
'Verdicts:',
|
|
134
|
+
'- **glitch**: the page did not change. The difference comes from the capture or the environment: render noise, a bad capture, or a font or other resource that failed to load.',
|
|
135
|
+
'- **intended change**: the page changed, and the change matches what the change under test was meant to do.',
|
|
136
|
+
'- **bug**: the page changed in a way the change under test was not meant to make: an element it did not touch changed, or the result looks broken (clipped, overlapping or missing content).',
|
|
137
|
+
'- **possible bug**: the page really changed but the evidence cannot settle whether that was meant, or the evidence is incomplete (styles not compared, no DOM data, images that disagree with the signals). Say exactly what a person should check.',
|
|
138
|
+
'',
|
|
139
|
+
'Evidence: start with get_visual_results, then call explain_snapshot for each snapshot you triage and get_diff to look at its baseline, current and diff images. The signals say whether the page changed; the images say whether it looks right and which capture is off. Weigh them together:',
|
|
140
|
+
'',
|
|
141
|
+
'| explain_snapshot shows | What it means |',
|
|
142
|
+
'|---|---|',
|
|
143
|
+
'| dom.changed true, or styleCheck "mismatch" | The page really changed, so this is never a glitch: decide between intended change, bug and possible bug. A DOM change can restyle elements too (a class change); judge the elements styleChanges lists. |',
|
|
144
|
+
'| pageShift | Content was inserted or removed above pageShift.belowY and the moved elements are unchanged: triage what was inserted or removed, not what moved. |',
|
|
145
|
+
'| DOM unchanged and styleCheck "match" | Usually render noise, but only when the diff is small and scattered. A larger diff, or one confined to one area, is either a bad capture or a change the style check cannot see: it compares colors, fonts, borders, spacing, display, opacity, visibility and shadows, and does not cover size, overflow, position, transform, text decoration, filters, pseudo-elements, or images and other assets. See "Bad captures" below. |',
|
|
146
|
+
'| DOM unchanged, styleCheck "unavailable" or missing | Styles not compared: it could be render noise or a stylesheet-only change, so it is not a glitch on the DOM evidence alone. Look at the images; a visible styling difference is a real change, and the signs of a bad capture listed below can also come from a stylesheet change here. |',
|
|
147
|
+
'| status "new" | There is no baseline to compare with: check the capture itself for obvious defects. |',
|
|
148
|
+
'',
|
|
149
|
+
'Bad captures: render noise is small and scattered (anti-aliasing and font hinting at the edges of glyphs). When the DOM is unchanged and styleCheck is "match" but the diff is larger or sits in one area, compare the two images. A block of content shifted with nothing inserted, text drawn at a different size in one place, content cut off, or background where content belongs can be a bad capture, or a change to something the style check does not cover. Look at what the change under test touched: if it changed CSS, an image, a font or another asset that could reach that area, judge it as a real change (intended change, bug or possible bug). Call it a glitch only when nothing in the change could have caused it, and say which image is wrong: if it is the baseline itself, it has to be replaced from a capture that two runs agree on; if it is the current capture, re-run the tests. If you cannot see what the change touched, say so, and call it a glitch only if the images clearly show a broken capture (a torn, half-drawn or partly blank render); otherwise a possible bug.',
|
|
150
|
+
'',
|
|
151
|
+
'Intent: judge intended change against bug by what the change under test was meant to do.',
|
|
152
|
+
...intentText,
|
|
153
|
+
'Compare the elements that changed (the selectors in regions and styleChanges) with what the change touched: an element it did not touch, or a result that looks broken, is a bug even when the intent mentions the page.',
|
|
154
|
+
].join('\n');
|
|
155
|
+
},
|
|
156
|
+
textFor({ snapshot, intent }) {
|
|
157
|
+
const name = snapshot?.replace(/[`\r\n]/g, '').trim();
|
|
158
|
+
const target = name ? `snapshot \`${name}\`` : 'every changed snapshot';
|
|
159
|
+
return [
|
|
160
|
+
`Triage ${target} in this project's latest TestivAI visual results: for each one, decide whether the diff is a glitch, an intended change, a bug or a possible bug, and say what to do next.${name ? ' If it is not in the results, or it passed without an auto-pass, say so and stop. If it auto-passed, say which criterion passed it, and triage it anyway when its verdict says the styles were not compared.' : ''}`,
|
|
161
|
+
'',
|
|
162
|
+
exports.TRIAGE_PROMPT.rubric(intent),
|
|
163
|
+
'',
|
|
164
|
+
'Report, for each snapshot:',
|
|
165
|
+
'',
|
|
166
|
+
'### <snapshot>: <verdict>',
|
|
167
|
+
'- Verdict: glitch, intended change, bug or possible bug',
|
|
168
|
+
'- Confidence: high, medium or low, and what would raise it',
|
|
169
|
+
'- Evidence: the signals and what you saw in the images that decided it',
|
|
170
|
+
`- Next step: ${exports.TRIAGE_PROMPT.nextSteps}`,
|
|
171
|
+
'',
|
|
172
|
+
'End with one line that counts each verdict.',
|
|
173
|
+
'',
|
|
174
|
+
exports.TRIAGE_PROMPT.approvalRule,
|
|
175
|
+
].join('\n');
|
|
176
|
+
},
|
|
177
|
+
};
|
|
56
178
|
function toolMetaFor({ approvalPrompt }) {
|
|
57
179
|
if (approvalPrompt)
|
|
58
180
|
return exports.TOOL_META;
|
package/dist/tool-meta.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-meta.js","sourceRoot":"","sources":["../src/tool-meta.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"tool-meta.js","sourceRoot":"","sources":["../src/tool-meta.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@testivai/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "MCP server exposing TestivAI visual regression results to AI coding agents",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
39
39
|
"pngjs": "^7.0.0",
|
|
40
40
|
"zod": "^3.25.0",
|
|
41
|
-
"@testivai/witness": "2.
|
|
41
|
+
"@testivai/witness": "2.2.0"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@types/jest": "^30.0.0",
|
package/server.json
CHANGED
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
"url": "https://github.com/testivai/testivai-oss",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.7.0",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
14
14
|
"identifier": "@testivai/mcp",
|
|
15
|
-
"version": "0.
|
|
15
|
+
"version": "0.7.0",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
18
18
|
}
|