@testivai/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 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's real or just render noise.
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, the same kind of noise) are grouped first; it ends with the paths to open the HTML report and each diff image |
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 a prompt, `review-visual-changes`, that walks the agent
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
- basis: 'style-only' | 'page-shift' | 'noise';
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 name. Only groups with two or
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":"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"}
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
- if (snapshot.status === 'passed')
80
- return 'passed — no visual change';
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
- const pct = snapshot.diffPercent !== undefined ? `${snapshot.diffPercent.toFixed(2)}% pixels differ` : 'pixels differ';
84
- // noiseHint means the DOM is identical and no style mismatch was found. Only
85
- // styleCheck 'match' proves the styles were compared; 'unavailable' (no
86
- // comparable digests) and results from before the style check also carry
87
- // the hint, so the verdict must not claim the styles matched there.
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
- const evidence = snapshot.dom.styleCheck === 'match'
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
- if (snapshot.dom?.noiseHint) {
209
- const evidence = snapshot.dom.styleCheck === 'match'
210
- ? 'the DOM is structurally identical and style digests match'
211
- : 'the DOM is structurally identical; styles were not compared (no comparable style digests), so a style-only change is not ruled out';
212
- guidance.push(`Pixels differ but ${evidence} — likely render noise (anti-aliasing, font hinting). Mention it; do not block on it.`);
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 (snapshot.dom?.styleCheck === 'mismatch') {
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 > noise. Every rule errs towards null: under-grouping is
348
- * acceptable, over-grouping is a bug.
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 s.dom.styleCheck === 'match'
384
- ? { basis: 'noise', key: 'noise:match', label: 'likely render noise: the DOM and computed styles both match' }
385
- : {
386
- basis: 'noise',
387
- key: 'noise:not-compared',
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 name. Only groups with two or
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":"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"}
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.registerPrompt('review-visual-changes', {
183
- title: 'Review visual changes',
184
- description: 'Walk the latest visual results and produce a human-quality review: what changed, why, and what to do.',
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
- await server.connect(new stdio_js_1.StdioServerTransport());
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);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -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 }: {
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8Cc,CAAC;AAErC,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"}
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 could not be compared, the verdict says so. ' +
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;
@@ -1 +1 @@
1
- {"version":3,"file":"tool-meta.js","sourceRoot":"","sources":["../src/tool-meta.ts"],"names":[],"mappings":";;;AA8EA,kCAKC;AApED,6EAA6E;AAC7E,6EAA6E;AAC7E,6CAA6C;AAC7C,MAAM,uBAAuB,GAAG,EAAE,mCAAmC,EAAE,IAAI,EAAE,CAAC;AAE9E,MAAM,UAAU,GAAa;IAC3B,KAAK,EAAE,2BAA2B;IAClC,WAAW,EACT,+GAA+G;QAC/G,mEAAmE;CACtE,CAAC;AAEW,QAAA,SAAS,GAAG;IACvB,kBAAkB,EAAE;QAClB,KAAK,EAAE,yBAAyB;QAChC,WAAW,EACT,mFAAmF;YACnF,mGAAmG;YACnG,uFAAuF;YACvF,8FAA8F;YAC9F,qDAAqD;YACrD,8DAA8D;YAC9D,wFAAwF;KAC3F;IACD,6EAA6E;IAC7E,QAAQ,EAAE,UAAU;IACpB,iBAAiB,EAAE,UAAU;IAC7B,UAAU,EAAE;QACV,KAAK,EAAE,0CAA0C;QACjD,WAAW,EACT,oGAAoG;YACpG,0FAA0F;KAC7F;IACD,gBAAgB,EAAE;QAChB,KAAK,EAAE,0CAA0C;QACjD,WAAW,EACT,gGAAgG;YAChG,+FAA+F;QACjG,KAAK,EAAE,uBAAuB;KAC/B;IACD,WAAW,EAAE;QACX,KAAK,EAAE,4CAA4C;QACnD,WAAW,EACT,iHAAiH;YACjH,6FAA6F;QAC/F,KAAK,EAAE,uBAAuB;KAC/B;IACD,cAAc,EAAE;QACd,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,mEAAmE;KACjF;IACD,gBAAgB,EAAE;QAChB,KAAK,EAAE,sCAAsC;QAC7C,WAAW,EACT,4FAA4F;YAC5F,8FAA8F;YAC9F,uGAAuG;KAC1G;CACiC,CAAC;AAKrC,SAAgB,WAAW,CAAC,EAAE,cAAc,EAA+B;IACzE,IAAI,cAAc;QAAE,OAAO,iBAAS,CAAC;IACrC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,eAAe,EAAE,GAAG,iBAAS,CAAC,gBAAgB,CAAC;IAC5E,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,GAAG,iBAAS,CAAC,WAAW,CAAC;IAC7D,OAAO,EAAE,GAAG,iBAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AACtF,CAAC"}
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.6.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.1.0"
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.6.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.6.0",
15
+ "version": "0.7.0",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  }