@testivai/mcp 0.3.0 → 0.5.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/dist/lib.d.ts CHANGED
@@ -8,6 +8,30 @@ export interface DomInfo {
8
8
  attributeChanges: number;
9
9
  textChanges?: number;
10
10
  } | null;
11
+ /** Style-fingerprint verdict: 'mismatch' = styles changed with identical DOM (a REAL change). */
12
+ styleCheck?: 'match' | 'mismatch' | 'unavailable';
13
+ styleChanges?: {
14
+ count: number;
15
+ elements: string[];
16
+ };
17
+ }
18
+ export interface RegionInfo {
19
+ x: number;
20
+ y: number;
21
+ width: number;
22
+ height: number;
23
+ diffPercent?: number;
24
+ /** Elements this region maps to, smallest first. */
25
+ elements?: Array<{
26
+ selector: string;
27
+ role: 'shifted' | 'changed';
28
+ }>;
29
+ /** 'shift' = pure translation of the primary element; else 'change'. */
30
+ classification?: 'shift' | 'change';
31
+ shift?: {
32
+ dx: number;
33
+ dy: number;
34
+ };
11
35
  }
12
36
  export interface SnapshotResult {
13
37
  name: string;
@@ -17,6 +41,15 @@ export interface SnapshotResult {
17
41
  currentPath?: string;
18
42
  diffPath?: string;
19
43
  dom?: DomInfo;
44
+ regions?: RegionInfo[];
45
+ /** Whole-page uniform displacement — the injected-banner signature. */
46
+ pageShift?: {
47
+ dy: number;
48
+ belowY: number;
49
+ count: number;
50
+ };
51
+ autoPassed?: 'threshold' | 'noise';
52
+ maskWarnings?: string[];
20
53
  }
21
54
  export interface ResultsFile {
22
55
  version: string;
@@ -40,6 +73,59 @@ export declare function readResults(paths: ProjectPaths): ResultsFile | null;
40
73
  export declare function verdictFor(snapshot: SnapshotResult): string;
41
74
  /** Resolve a report-relative image path safely inside the report dir. */
42
75
  export declare function resolveImage(paths: ProjectPaths, relativePath: string): string | null;
76
+ /**
77
+ * Layered evidence bundle for one snapshot — the input a client LLM turns
78
+ * into a REVEAL-style narrative ("card #2 shifted +24px — likely the banner
79
+ * injected above it"). Assembled entirely from signals already computed by
80
+ * the local diff pipeline; the server ships evidence, the client's model is
81
+ * the analysis layer.
82
+ */
83
+ export interface SnapshotExplanation {
84
+ name: string;
85
+ status: 'passed' | 'changed' | 'new';
86
+ verdict: string;
87
+ layers: {
88
+ /** Raw pixel evidence: how much changed and where. */
89
+ pixel: {
90
+ diffPercent: number | null;
91
+ regionCount: number;
92
+ /** Top regions by area, largest first (max 10). */
93
+ regions: RegionInfo[];
94
+ };
95
+ /** Element-level evidence: which elements, moved vs changed. */
96
+ element: {
97
+ pageShift: {
98
+ dy: number;
99
+ belowY: number;
100
+ count: number;
101
+ } | null;
102
+ shiftedSelectors: string[];
103
+ changedSelectors: string[];
104
+ };
105
+ /** Structural evidence from the DOM pair. */
106
+ dom: DomInfo | null;
107
+ };
108
+ /** Interpretation rules the evidence supports, phrased for the model. */
109
+ guidance: string[];
110
+ }
111
+ /** Build the layered explanation bundle for one snapshot, or null if absent. */
112
+ export declare function explainSnapshot(root: string, name: string): SnapshotExplanation | null;
113
+ /** Result of an approve operation — machine-readable for agents. */
114
+ export interface ApproveResult {
115
+ approved: string[];
116
+ failed: Array<{
117
+ name: string;
118
+ error: string;
119
+ }>;
120
+ }
121
+ /**
122
+ * Approve one snapshot: promote its current capture in `.testivai/temp/<name>/`
123
+ * to the committed baseline. Reuses the same BaselineStore the CLI uses, so
124
+ * semantics (and undo) match `testivai approve <name>` exactly.
125
+ */
126
+ export declare function approveSnapshot(root: string, name: string): ApproveResult;
127
+ /** Approve every pending snapshot under `.testivai/temp/` (like `approve --all`). */
128
+ export declare function approveAll(root: string): ApproveResult;
43
129
  export declare function listBaselines(root: string): string[];
44
130
  /**
45
131
  * Downscale a PNG buffer using integer-stride nearest-neighbour sampling.
package/dist/lib.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAIA,6EAA6E;AAC7E,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACpG;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAClF,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,iGAAiG;AACjG,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAcvD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,IAAI,CAInE;AAED,uDAAuD;AACvD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAe3D;AAED,yEAAyE;AACzE,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIrF;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAQpD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,OAAO,SAAO,GACb;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CA2BhG"}
1
+ {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"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"}
package/dist/lib.js CHANGED
@@ -37,11 +37,15 @@ exports.resolvePaths = resolvePaths;
37
37
  exports.readResults = readResults;
38
38
  exports.verdictFor = verdictFor;
39
39
  exports.resolveImage = resolveImage;
40
+ exports.explainSnapshot = explainSnapshot;
41
+ exports.approveSnapshot = approveSnapshot;
42
+ exports.approveAll = approveAll;
40
43
  exports.listBaselines = listBaselines;
41
44
  exports.downscalePng = downscalePng;
42
45
  const fs = __importStar(require("fs"));
43
46
  const path = __importStar(require("path"));
44
47
  const pngjs_1 = require("pngjs");
48
+ const baselines_1 = require("@testivai/witness/baselines");
45
49
  /** Resolve the report dir from .testivai/config.json (reportDir key), default visual-report/. */
46
50
  function resolvePaths(root) {
47
51
  let reportDir = 'visual-report';
@@ -91,6 +95,101 @@ function resolveImage(paths, relativePath) {
91
95
  return null; // no traversal
92
96
  return fs.existsSync(abs) ? abs : null;
93
97
  }
98
+ /** Build the layered explanation bundle for one snapshot, or null if absent. */
99
+ function explainSnapshot(root, name) {
100
+ const results = readResults(resolvePaths(root));
101
+ const snapshot = results?.snapshots.find((s) => s.name === name);
102
+ if (!results || !snapshot)
103
+ return null;
104
+ const regions = [...(snapshot.regions ?? [])]
105
+ .sort((a, b) => b.width * b.height - a.width * a.height)
106
+ .slice(0, 10);
107
+ const shifted = new Set();
108
+ const changed = new Set();
109
+ for (const r of snapshot.regions ?? []) {
110
+ for (const el of r.elements ?? []) {
111
+ (el.role === 'shifted' ? shifted : changed).add(el.selector);
112
+ }
113
+ }
114
+ const guidance = [];
115
+ if (snapshot.status === 'new') {
116
+ guidance.push('No baseline exists yet — this is a first capture, not a regression. A human should review and approve it.');
117
+ }
118
+ if (snapshot.dom?.noiseHint) {
119
+ guidance.push('Pixels differ but the DOM is structurally identical and style digests match — likely render noise (anti-aliasing, font hinting). Mention it; do not block on it.');
120
+ }
121
+ if (snapshot.dom?.styleCheck === 'mismatch') {
122
+ const els = snapshot.dom.styleChanges?.elements?.slice(0, 5).join(', ');
123
+ 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.`);
124
+ }
125
+ if (snapshot.pageShift) {
126
+ guidance.push(`Everything at or below y=${snapshot.pageShift.belowY} moved ${snapshot.pageShift.dy > 0 ? 'down' : 'up'} by ${Math.abs(snapshot.pageShift.dy)}px (${snapshot.pageShift.count} elements together) — the signature of content inserted or removed above that line. Look there for the root cause, not at the moved elements.`);
127
+ }
128
+ if (shifted.size > 0 && changed.size === 0 && !snapshot.pageShift) {
129
+ guidance.push('All attributed regions are pure shifts (elements moved, content unchanged) — usually a layout/spacing change upstream, not a content change.');
130
+ }
131
+ if (snapshot.dom?.changed && snapshot.dom.summary) {
132
+ const s = snapshot.dom.summary;
133
+ 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.`);
134
+ }
135
+ if (snapshot.autoPassed) {
136
+ guidance.push(`This diff auto-passed via the '${snapshot.autoPassed}' criterion — reported for transparency, no action needed.`);
137
+ }
138
+ if (snapshot.maskWarnings?.length) {
139
+ guidance.push(`Mask warnings: ${snapshot.maskWarnings.join('; ')} — some configured masks could not be applied.`);
140
+ }
141
+ guidance.push('Baseline approval is a human decision: propose, do not auto-approve.');
142
+ return {
143
+ name: snapshot.name,
144
+ status: snapshot.status,
145
+ verdict: verdictFor(snapshot),
146
+ layers: {
147
+ pixel: {
148
+ diffPercent: snapshot.diffPercent ?? null,
149
+ regionCount: snapshot.regions?.length ?? 0,
150
+ regions,
151
+ },
152
+ element: {
153
+ pageShift: snapshot.pageShift ?? null,
154
+ shiftedSelectors: [...shifted].slice(0, 10),
155
+ changedSelectors: [...changed].slice(0, 10),
156
+ },
157
+ dom: snapshot.dom ?? null,
158
+ },
159
+ guidance,
160
+ };
161
+ }
162
+ /**
163
+ * Approve one snapshot: promote its current capture in `.testivai/temp/<name>/`
164
+ * to the committed baseline. Reuses the same BaselineStore the CLI uses, so
165
+ * semantics (and undo) match `testivai approve <name>` exactly.
166
+ */
167
+ function approveSnapshot(root, name) {
168
+ const store = new baselines_1.BaselineStore(root);
169
+ try {
170
+ store.approve(name);
171
+ return { approved: [name], failed: [] };
172
+ }
173
+ catch (e) {
174
+ return { approved: [], failed: [{ name, error: e instanceof Error ? e.message : String(e) }] };
175
+ }
176
+ }
177
+ /** Approve every pending snapshot under `.testivai/temp/` (like `approve --all`). */
178
+ function approveAll(root) {
179
+ const store = new baselines_1.BaselineStore(root);
180
+ const approved = [];
181
+ const failed = [];
182
+ for (const name of store.listTemp()) {
183
+ try {
184
+ store.approve(name);
185
+ approved.push(name);
186
+ }
187
+ catch (e) {
188
+ failed.push({ name, error: e instanceof Error ? e.message : String(e) });
189
+ }
190
+ }
191
+ return { approved, failed };
192
+ }
94
193
  function listBaselines(root) {
95
194
  const dir = path.join(root, '.testivai', 'baselines');
96
195
  if (!fs.existsSync(dir))
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
@@ -73,15 +73,8 @@ server.registerTool('get_visual_results', {
73
73
  ];
74
74
  return { content: [{ type: 'text', text: lines.join('\n') }] };
75
75
  });
76
- // registerTool is called through an untyped alias: zod@3.25 + TS 6 blow the
77
- // type-depth limit (TS2589) when inferring the schema generics. Runtime
78
- // validation of the input schema is unaffected.
79
- server.registerTool('get_snapshot_diff', {
80
- title: 'View snapshot diff images',
81
- description: 'Return the baseline, current, and diff images for one changed snapshot so you can see what changed visually. ' +
82
- 'Use get_visual_results first to find snapshot names.',
83
- inputSchema: { name: zod_1.z.string().describe('Snapshot name from get_visual_results') },
84
- }, (async ({ name }) => {
76
+ // Shared handler for the diff-image tools (registered under two names).
77
+ const snapshotDiffHandler = async ({ name }) => {
85
78
  const paths = (0, lib_1.resolvePaths)(projectRoot);
86
79
  const results = (0, lib_1.readResults)(paths);
87
80
  const snapshot = results?.snapshots.find((s) => s.name === name);
@@ -110,7 +103,54 @@ server.registerTool('get_snapshot_diff', {
110
103
  }
111
104
  }
112
105
  return { content };
113
- }));
106
+ };
107
+ const diffToolMeta = {
108
+ title: 'View snapshot diff images',
109
+ description: 'Return the baseline, current, and diff images for one changed snapshot so you can see what changed visually. ' +
110
+ 'Use get_report / get_visual_results first to find snapshot names.',
111
+ inputSchema: { name: zod_1.z.string().describe('Snapshot name from the results') },
112
+ };
113
+ // registerTool is called through an untyped alias: zod@3.25 + TS 6 blow the
114
+ // type-depth limit (TS2589) when inferring the schema generics. Runtime
115
+ // validation of the input schema is unaffected.
116
+ // `get_diff` is the canonical name; `get_snapshot_diff` is kept as an alias.
117
+ server.registerTool('get_diff', diffToolMeta, snapshotDiffHandler);
118
+ server.registerTool('get_snapshot_diff', diffToolMeta, snapshotDiffHandler);
119
+ // get_report — the raw results.json payload (the public schema) for agents
120
+ // that want to parse structured data rather than the human summary.
121
+ server.registerTool('get_report', {
122
+ title: 'Get the raw visual report (results.json)',
123
+ description: 'Return the machine-readable results.json payload verbatim (summary + per-snapshot status, diff %, ' +
124
+ 'DOM signal, and region→selector attribution). Parse this instead of scraping CLI output.',
125
+ inputSchema: {},
126
+ }, async () => {
127
+ const results = (0, lib_1.readResults)((0, lib_1.resolvePaths)(projectRoot));
128
+ if (!results) {
129
+ return { content: [{ type: 'text', text: 'No results found. Run the visual tests first (e.g. npx playwright test).' }] };
130
+ }
131
+ return { content: [{ type: 'text', text: JSON.stringify(results, null, 2) }] };
132
+ });
133
+ // approve_snapshot / approve_all — promote current captures to committed
134
+ // baselines. Approval accepts a new visual truth, so only call these once a
135
+ // reviewer has confirmed the change is intended (not a regression).
136
+ server.registerTool('approve_snapshot', {
137
+ title: 'Approve one snapshot as the new baseline',
138
+ description: 'Promote .testivai/temp/<name>/ to the committed baseline (same as `testivai approve <name>`). ' +
139
+ 'Only approve changes a reviewer has confirmed are intended; then commit .testivai/baselines/.',
140
+ inputSchema: { name: zod_1.z.string().describe('Snapshot name to approve') },
141
+ }, async ({ name }) => {
142
+ const result = (0, lib_1.approveSnapshot)(projectRoot, name);
143
+ return { content: [{ type: 'text', text: JSON.stringify(result) }] };
144
+ });
145
+ server.registerTool('approve_all', {
146
+ title: 'Approve all pending snapshots as baselines',
147
+ description: 'Promote every pending capture under .testivai/temp/ to committed baselines (same as `testivai approve --all`). ' +
148
+ 'Only run this after a reviewer has confirmed the changes; then commit .testivai/baselines/.',
149
+ inputSchema: {},
150
+ }, async () => {
151
+ const result = (0, lib_1.approveAll)(projectRoot);
152
+ return { content: [{ type: 'text', text: JSON.stringify(result) }] };
153
+ });
114
154
  server.registerTool('list_baselines', {
115
155
  title: 'List committed baselines',
116
156
  description: 'List the snapshot baselines committed under .testivai/baselines/.',
@@ -126,6 +166,49 @@ server.registerTool('list_baselines', {
126
166
  ],
127
167
  };
128
168
  });
169
+ // explain_snapshot — the layered evidence bundle (pixel regions → element
170
+ // attribution → DOM/style signals → guidance). The client's own model turns
171
+ // this into the narrative; the server ships evidence, not an LLM.
172
+ server.registerTool('explain_snapshot', {
173
+ title: 'Explain what changed in one snapshot',
174
+ description: 'Layered evidence for one snapshot: pixel regions with bounding boxes, element attribution ' +
175
+ '(which selectors shifted vs changed, whole-page shift detection), the DOM/style signal, and ' +
176
+ 'interpretation guidance. Use this to explain WHY a diff happened — pair with get_diff for the images.',
177
+ inputSchema: { name: zod_1.z.string().describe('Snapshot name from the results') },
178
+ }, async ({ name }) => {
179
+ const explanation = (0, lib_1.explainSnapshot)(projectRoot, name);
180
+ if (!explanation) {
181
+ return { content: [{ type: 'text', text: `No snapshot named "${name}" in the latest results. Run the visual tests first.` }] };
182
+ }
183
+ return { content: [{ type: 'text', text: JSON.stringify(explanation, null, 2) }] };
184
+ });
185
+ // A reusable prompt that turns the evidence into a review narrative.
186
+ server.registerPrompt('review-visual-changes', {
187
+ title: 'Review visual changes',
188
+ description: 'Walk the latest visual results and produce a human-quality review: what changed, why, and what to do.',
189
+ }, async () => ({
190
+ messages: [
191
+ {
192
+ role: 'user',
193
+ content: {
194
+ type: 'text',
195
+ text: [
196
+ 'Review the latest TestivAI visual regression results in this project:',
197
+ '',
198
+ '1. Call get_report for the summary. If nothing changed and nothing is new, say so and stop.',
199
+ '2. For every changed snapshot, call explain_snapshot(name) and read its layers and guidance.',
200
+ ' When the evidence is ambiguous, call get_diff(name) and inspect the images.',
201
+ '3. For each snapshot, explain in one short paragraph WHAT changed (name the selectors),',
202
+ ' WHY it likely happened (use pageShift/shift classifications — e.g. content injected above),',
203
+ ' and whether it is render noise, a style-only change, or a structural change.',
204
+ '4. End with a recommendation per snapshot: approve, investigate, or ignore-as-noise.',
205
+ ' Never call approve_snapshot/approve_all yourself unless the human has explicitly',
206
+ ' confirmed the changes are intended — baseline approval is a human decision.',
207
+ ].join('\n'),
208
+ },
209
+ },
210
+ ],
211
+ }));
129
212
  async function main() {
130
213
  await server.connect(new stdio_js_1.StdioServerTransport());
131
214
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,uCAAyB;AACzB,6BAA0C;AAC1C,oEAAoE;AACpE,wEAAiF;AACjF,+BAAyG;AAEzG,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE/C,kFAAkF;AAClF,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAChD,MAAM,WAAW,GAAG,QAAQ,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AAE/G,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;AAEjF,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;IACE,KAAK,EAAE,yBAAyB;IAChC,WAAW,EACT,mFAAmF;QACnF,8EAA8E;QAC9E,2FAA2F;QAC3F,wFAAwF;IAC1F,WAAW,EAAE,EAAE;CAChB,EACD,KAAK,IAAI,EAAE;IACT,MAAM,KAAK,GAAG,IAAA,kBAAY,EAAC,WAAW,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAA,iBAAW,EAAC,KAAK,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,uBAAuB,KAAK,CAAC,SAAS,uEAAuE;iBACpH;aACF;SACF,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG;QACZ,QAAQ,OAAO,CAAC,SAAS,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,eAAe,OAAO,CAAC,OAAO,CAAC,MAAM,YAAY,OAAO,CAAC,OAAO,CAAC,OAAO,aAAa,OAAO,CAAC,OAAO,CAAC,YAAY,OAAO;QAC5K,EAAE;QACF,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAA,gBAAU,EAAC,CAAC,CAAC,EAAE,CAAC;QAChE,EAAE;QACF,uJAAuJ;KACxJ,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACjE,CAAC,CACF,CAAC;AAEF,4EAA4E;AAC5E,wEAAwE;AACxE,gDAAgD;AAC/C,MAAM,CAAC,YAAyB,CAC/B,mBAAmB,EACnB;IACE,KAAK,EAAE,2BAA2B;IAClC,WAAW,EACT,+GAA+G;QAC/G,sDAAsD;IACxD,WAAW,EAAE,EAAE,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC,EAAE;CACpF,EACD,CAAC,KAAK,EAAE,EAAE,IAAI,EAAoB,EAAE,EAAE;IACpC,MAAM,KAAK,GAAG,IAAA,kBAAY,EAAC,WAAW,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAA,iBAAW,EAAC,KAAK,CAAC,CAAC;IACnC,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,EAAE,CAAC;QAC1B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,IAAI,0BAA0B,EAAE,CAAC,EAAE,CAAC;IACrG,CAAC;IACD,MAAM,OAAO,GAA8F;QACzG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,KAAK,IAAA,gBAAU,EAAC,QAAQ,CAAC,EAAE,EAAE;KACpE,CAAC;IACF,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI;QACzB,CAAC,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC;QACnC,CAAC,SAAS,EAAE,QAAQ,CAAC,WAAW,CAAC;QACjC,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC;KACnB,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAA,kBAAY,EAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClD,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,UAAU,GAAG,IAAA,kBAAY,EAAC,GAAG,CAAC,CAAC;YACrC,MAAM,aAAa,GACjB,UAAU,CAAC,aAAa,KAAK,UAAU,CAAC,KAAK;gBAC7C,UAAU,CAAC,cAAc,KAAK,UAAU,CAAC,MAAM,CAAC;YAClD,MAAM,SAAS,GAAG,aAAa;gBAC7B,CAAC,CAAC,GAAG,KAAK,qBAAqB,UAAU,CAAC,aAAa,IAAI,UAAU,CAAC,cAAc,IAAI;gBACxF,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;QACnG,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;IACE,KAAK,EAAE,0BAA0B;IACjC,WAAW,EAAE,mEAAmE;IAChF,WAAW,EAAE,EAAE;CAChB,EACD,KAAK,IAAI,EAAE;IACT,MAAM,KAAK,GAAG,IAAA,mBAAa,EAAC,WAAW,CAAC,CAAC;IACzC,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,qDAAqD;aACtJ;SACF;KACF,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,+BAAoB,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;IACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.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.0",
3
+ "version": "0.5.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",
@@ -37,7 +37,8 @@
37
37
  "dependencies": {
38
38
  "@modelcontextprotocol/sdk": "^1.17.0",
39
39
  "pngjs": "^7.0.0",
40
- "zod": "^3.25.0"
40
+ "zod": "^3.25.0",
41
+ "@testivai/witness": "1.7.1"
41
42
  },
42
43
  "devDependencies": {
43
44
  "@types/jest": "^30.0.0",