@visual-layer/mcp-server 1.0.1 → 1.2.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/perceptual-diff.d.ts +35 -0
- package/dist/perceptual-diff.d.ts.map +1 -0
- package/dist/perceptual-diff.js +76 -0
- package/dist/perceptual-diff.js.map +1 -0
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +206 -22
- package/dist/server.js.map +1 -1
- package/dist/state.js +1 -1
- package/dist/state.js.map +1 -1
- package/package.json +5 -4
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Bbox } from '@visual-layer/core';
|
|
2
|
+
export interface DiffOptions {
|
|
3
|
+
/** Per-channel abs difference (0-255) above which a pixel counts as changed. Default 30. */
|
|
4
|
+
pixelTolerance?: number;
|
|
5
|
+
/** Fraction of scanned pixels changed above which `changed` is true. Default 0.005 (0.5%). */
|
|
6
|
+
changeThreshold?: number;
|
|
7
|
+
/** Viewport-space bbox to restrict the scan to (e.g. the clicked element). Omit = full image. */
|
|
8
|
+
region?: Bbox;
|
|
9
|
+
/** Viewport the region bbox is in. Required when region is set. */
|
|
10
|
+
viewport?: {
|
|
11
|
+
width: number;
|
|
12
|
+
height: number;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export interface DiffResult {
|
|
16
|
+
changed: boolean;
|
|
17
|
+
/** Fraction of scanned pixels that differ, in [0, 1]. */
|
|
18
|
+
changeRatio: number;
|
|
19
|
+
differingPixels: number;
|
|
20
|
+
totalPixels: number;
|
|
21
|
+
/** The screenshot-space region actually scanned, when a region was given. */
|
|
22
|
+
region?: {
|
|
23
|
+
x: number;
|
|
24
|
+
y: number;
|
|
25
|
+
width: number;
|
|
26
|
+
height: number;
|
|
27
|
+
scale: number;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Decode before/after to raw RGB, force after to before's dimensions, and count
|
|
32
|
+
* pixels differing beyond pixelTolerance within the scan window (region or full).
|
|
33
|
+
*/
|
|
34
|
+
export declare function diffScreenshots(before: Buffer, after: Buffer, opts?: DiffOptions): Promise<DiffResult>;
|
|
35
|
+
//# sourceMappingURL=perceptual-diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perceptual-diff.d.ts","sourceRoot":"","sources":["../src/perceptual-diff.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC1B,4FAA4F;IAC5F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8FAA8F;IAC9F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iGAAiG;IACjG,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,mEAAmE;IACnE,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9C;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,MAAM,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACjF;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,UAAU,CAAC,CA6DrB"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Perceptual screenshot diff — region-aware pixel comparison of two ingested
|
|
3
|
+
* screenshots. Replaces the coarse sha256-identity check in verify_action with
|
|
4
|
+
* an actual pixel diff, optionally scoped to the clicked element's bbox so a
|
|
5
|
+
* small visual change is not drowned out by an unrelated full-page animation.
|
|
6
|
+
*
|
|
7
|
+
* ponytail: per-pixel threshold scan over raw RGB. O(W*H) per call, fine for
|
|
8
|
+
* viewport-sized PNGs. Upgrade to block-hash / pHash if very large screenshots
|
|
9
|
+
* or repeated calls show measurable cost.
|
|
10
|
+
*/
|
|
11
|
+
import sharp from 'sharp';
|
|
12
|
+
/**
|
|
13
|
+
* Decode before/after to raw RGB, force after to before's dimensions, and count
|
|
14
|
+
* pixels differing beyond pixelTolerance within the scan window (region or full).
|
|
15
|
+
*/
|
|
16
|
+
export async function diffScreenshots(before, after, opts = {}) {
|
|
17
|
+
const pixelTol = opts.pixelTolerance ?? 30;
|
|
18
|
+
const changeThreshold = opts.changeThreshold ?? 0.005;
|
|
19
|
+
const beforeImg = await sharp(before).removeAlpha().raw().toBuffer({ resolveWithObject: true });
|
|
20
|
+
const W = beforeImg.info.width;
|
|
21
|
+
const H = beforeImg.info.height;
|
|
22
|
+
const ch = beforeImg.info.channels;
|
|
23
|
+
// Force after to identical dimensions/channels — before/after come from the
|
|
24
|
+
// same viewport, but JPEG re-encode or a 1px scroll can shift size by 1.
|
|
25
|
+
const afterImg = await sharp(after)
|
|
26
|
+
.removeAlpha()
|
|
27
|
+
.resize(W, H, { fit: 'fill' })
|
|
28
|
+
.raw()
|
|
29
|
+
.toBuffer({ resolveWithObject: true });
|
|
30
|
+
let x0 = 0;
|
|
31
|
+
let y0 = 0;
|
|
32
|
+
let x1 = W;
|
|
33
|
+
let y1 = H;
|
|
34
|
+
let region;
|
|
35
|
+
if (opts.region && opts.viewport && opts.viewport.width > 0 && opts.viewport.height > 0) {
|
|
36
|
+
const sx = W / opts.viewport.width;
|
|
37
|
+
const sy = H / opts.viewport.height;
|
|
38
|
+
const s = Math.min(sx, sy);
|
|
39
|
+
const [bx, by, bw, bh] = opts.region;
|
|
40
|
+
x0 = clamp(Math.floor(bx * s), 0, W);
|
|
41
|
+
y0 = clamp(Math.floor(by * s), 0, H);
|
|
42
|
+
x1 = clamp(Math.ceil((bx + bw) * s), 0, W);
|
|
43
|
+
y1 = clamp(Math.ceil((by + bh) * s), 0, H);
|
|
44
|
+
region = { x: x0, y: y0, width: x1 - x0, height: y1 - y0, scale: s };
|
|
45
|
+
}
|
|
46
|
+
const a = beforeImg.data;
|
|
47
|
+
const b = afterImg.data;
|
|
48
|
+
let differing = 0;
|
|
49
|
+
let total = 0;
|
|
50
|
+
for (let y = y0; y < y1; y++) {
|
|
51
|
+
for (let x = x0; x < x1; x++) {
|
|
52
|
+
const i = (y * W + x) * ch;
|
|
53
|
+
for (let c = 0; c < ch; c++) {
|
|
54
|
+
if (Math.abs(a[i + c] - b[i + c]) > pixelTol) {
|
|
55
|
+
differing++;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
total++;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (total === 0)
|
|
63
|
+
total = 1;
|
|
64
|
+
const changeRatio = differing / total;
|
|
65
|
+
return {
|
|
66
|
+
changed: changeRatio > changeThreshold,
|
|
67
|
+
changeRatio,
|
|
68
|
+
differingPixels: differing,
|
|
69
|
+
totalPixels: total,
|
|
70
|
+
region,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function clamp(v, min, max) {
|
|
74
|
+
return v < min ? min : v > max ? max : v;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=perceptual-diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perceptual-diff.js","sourceRoot":"","sources":["../src/perceptual-diff.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
2
|
import { ServerState } from './state.js';
|
|
3
|
-
export declare const MCP_SERVER_VERSION = "
|
|
3
|
+
export declare const MCP_SERVER_VERSION = "1.2.0";
|
|
4
4
|
export interface CreateServerOptions {
|
|
5
5
|
state?: ServerState;
|
|
6
6
|
/** Path to a mock Figma file; when set, capture_figma uses MockFigmaClient (no network). */
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsBpE,OAAO,EAAE,WAAW,EAAqB,MAAM,YAAY,CAAC;AAG5D,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,4FAA4F;IAC5F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,YAAY,CAAC,IAAI,GAAE,mBAAwB,GAAG;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAgatG"}
|
package/dist/server.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* MCP stdio server. Exposes
|
|
2
|
+
* MCP stdio server. Exposes 9 VisualLayer tools usable from Claude Code and Codex.
|
|
3
3
|
* Wraps core/figma-rest/grounding; contains no business logic of its own.
|
|
4
4
|
*
|
|
5
5
|
* Logs MUST go to stderr (§18.3) — stdout is the JSON-RPC transport.
|
|
@@ -9,10 +9,11 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
|
9
9
|
import { createHash } from 'node:crypto';
|
|
10
10
|
import { readFile as readFileBuffer } from 'node:fs/promises';
|
|
11
11
|
import { snapshotToScreenGraph, structuredError, ErrorCodes, } from '@visual-layer/core';
|
|
12
|
-
import { groundInstruction, compareGraphs, evalGrounding } from '@visual-layer/grounding';
|
|
12
|
+
import { groundInstruction, gateGrounding, buildConsensus, compareGraphs, evalGrounding, } from '@visual-layer/grounding';
|
|
13
13
|
import { HttpFigmaClient, MockFigmaClient, captureFigma } from '@visual-layer/figma-rest';
|
|
14
14
|
import { ServerState } from './state.js';
|
|
15
|
-
|
|
15
|
+
import { diffScreenshots } from './perceptual-diff.js';
|
|
16
|
+
export const MCP_SERVER_VERSION = '1.2.0';
|
|
16
17
|
export function createServer(opts = {}) {
|
|
17
18
|
const state = opts.state ?? new ServerState();
|
|
18
19
|
const server = new McpServer({ name: 'visual-layer', version: MCP_SERVER_VERSION });
|
|
@@ -20,8 +21,18 @@ export function createServer(opts = {}) {
|
|
|
20
21
|
error: structuredError(code, message, { tracePath: runId ? `.visual-layer/artifacts/${runId}/trace.json` : undefined }),
|
|
21
22
|
});
|
|
22
23
|
/* 1. capture_browser */
|
|
23
|
-
server.tool('capture_browser', 'Normalize a chrome-devtools-mcp take_snapshot payload into a persisted ScreenGraph.
|
|
24
|
-
snapshot: z.record(z.string(), z.unknown()),
|
|
24
|
+
server.tool('capture_browser', 'Normalize a chrome-devtools-mcp take_snapshot payload into a persisted ScreenGraph. Accepts structuredContent.snapshot, the snapshot tree itself, or text output. Pass bboxEnrichment records from evaluate_script to attach getBoundingClientRect geometry. Pass screenshotPath + screenshotArtifact metadata to ingest screenshot bytes.', {
|
|
25
|
+
snapshot: z.union([z.record(z.string(), z.unknown()), z.string()]),
|
|
26
|
+
bboxEnrichment: z
|
|
27
|
+
.array(z.object({
|
|
28
|
+
uid: z.string().min(1),
|
|
29
|
+
bbox: z.union([
|
|
30
|
+
z.tuple([z.number(), z.number(), z.number(), z.number()]),
|
|
31
|
+
z.object({ x: z.number(), y: z.number(), width: z.number(), height: z.number() }),
|
|
32
|
+
]),
|
|
33
|
+
}))
|
|
34
|
+
.optional()
|
|
35
|
+
.describe('Bounding boxes from evaluate_script, keyed by take_snapshot uid.'),
|
|
25
36
|
screenshotArtifact: z
|
|
26
37
|
.object({
|
|
27
38
|
artifactId: z.string(),
|
|
@@ -38,23 +49,32 @@ export function createServer(opts = {}) {
|
|
|
38
49
|
viewport: z.object({ width: z.number(), height: z.number(), dpr: z.number().optional(), url: z.string().optional() }).optional(),
|
|
39
50
|
}, async (args) => {
|
|
40
51
|
try {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
screenshot: args.screenshotArtifact,
|
|
44
|
-
});
|
|
45
|
-
const stored = await state.capture(graph);
|
|
46
|
-
// Ingest screenshot bytes so get_artifact can resolve the reference.
|
|
47
|
-
// Without this the screenshotArtifact is ref-only metadata and get_artifact 404s.
|
|
52
|
+
let screenshotBytes;
|
|
53
|
+
let screenshot = args.screenshotArtifact;
|
|
48
54
|
if (args.screenshotPath) {
|
|
49
55
|
if (!args.screenshotArtifact) {
|
|
50
56
|
return err(ErrorCodes.snapshot_missing_fields, 'screenshotPath requires screenshotArtifact metadata (artifactId + mimeType + width + height)');
|
|
51
57
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
sha256: createHash('sha256').update(
|
|
58
|
+
screenshotBytes = await readFileBuffer(args.screenshotPath);
|
|
59
|
+
screenshot = {
|
|
60
|
+
...args.screenshotArtifact,
|
|
61
|
+
sha256: createHash('sha256').update(screenshotBytes).digest('hex'),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const { graph } = snapshotToScreenGraph(typeof args.snapshot === 'string' ? { content: args.snapshot } : args.snapshot, {
|
|
65
|
+
viewport: args.viewport,
|
|
66
|
+
screenshot,
|
|
67
|
+
bboxEnrichment: args.bboxEnrichment,
|
|
68
|
+
});
|
|
69
|
+
const stored = await state.capture(graph);
|
|
70
|
+
// Ingest screenshot bytes so get_artifact can resolve the reference.
|
|
71
|
+
// Without screenshotPath the screenshot metadata remains reference-only.
|
|
72
|
+
if (screenshotBytes && screenshot) {
|
|
73
|
+
await state.store.write(stored.runId, screenshot.artifactId, 'screenshot', new Uint8Array(screenshotBytes), {
|
|
74
|
+
mimeType: screenshot.mimeType,
|
|
75
|
+
sha256: screenshot.sha256,
|
|
56
76
|
});
|
|
57
|
-
stored.trace.info('capture_browser', { screenshotIngested:
|
|
77
|
+
stored.trace.info('capture_browser', { screenshotIngested: screenshot.artifactId });
|
|
58
78
|
}
|
|
59
79
|
stored.trace.info('capture_browser', { interactables: graph.interactables.length });
|
|
60
80
|
await stored.trace.flush(state.store);
|
|
@@ -78,15 +98,28 @@ export function createServer(opts = {}) {
|
|
|
78
98
|
const client = opts.figmaMockPath
|
|
79
99
|
? new MockFigmaClient({ [args.fileKey]: JSON.parse(await readFile(opts.figmaMockPath)) })
|
|
80
100
|
: new HttpFigmaClient();
|
|
81
|
-
const { graph } = await captureFigma(client, {
|
|
101
|
+
const { graph, renderedImage } = await captureFigma(client, {
|
|
82
102
|
fileKey: args.fileKey,
|
|
83
103
|
nodeId: args.nodeId,
|
|
84
104
|
includeImage: args.includeImage === true,
|
|
85
105
|
});
|
|
86
106
|
const stored = await state.capture(graph);
|
|
107
|
+
if (renderedImage) {
|
|
108
|
+
await state.store.write(stored.runId, renderedImage.artifactId, 'figma-render', renderedImage.bytes, {
|
|
109
|
+
mimeType: renderedImage.mimeType,
|
|
110
|
+
sha256: renderedImage.sha256,
|
|
111
|
+
redactable: false,
|
|
112
|
+
});
|
|
113
|
+
stored.trace.info('capture_figma', {
|
|
114
|
+
renderArtifactId: renderedImage.artifactId,
|
|
115
|
+
renderBytes: renderedImage.bytes.byteLength,
|
|
116
|
+
});
|
|
117
|
+
await stored.trace.flush(state.store);
|
|
118
|
+
}
|
|
87
119
|
return state.respond({
|
|
88
120
|
screenGraphId: graph.id,
|
|
89
121
|
screenGraphPath: `.visual-layer/artifacts/${stored.runId}/${graph.id}/graph.json`,
|
|
122
|
+
renderArtifactId: renderedImage?.artifactId,
|
|
90
123
|
summary: { source: graph.source, figmaNodes: (graph.figmaNodes ?? []).length, interactables: graph.interactables.length, warnings: graph.warnings.length },
|
|
91
124
|
});
|
|
92
125
|
}
|
|
@@ -95,15 +128,145 @@ export function createServer(opts = {}) {
|
|
|
95
128
|
}
|
|
96
129
|
});
|
|
97
130
|
/* 3. ground_instruction */
|
|
98
|
-
server.tool('ground_instruction', 'Rank interactables in a ScreenGraph against a natural-language instruction. Returns top-K candidates
|
|
131
|
+
server.tool('ground_instruction', 'Rank interactables in a ScreenGraph against a natural-language instruction. Returns top-K candidates + a gate verdict. verdict.status: "accepted" (safe to act), "needs_visual_confirm" (structure ambiguous — look at the screenshot, then call confirm_grounding), "rejected" (no viable candidate). This gate is how accuracy approaches 100%: actions only fire when structure is confident or vision confirms it.', {
|
|
99
132
|
screenGraphId: z.string().min(1),
|
|
100
133
|
instruction: z.string().min(1),
|
|
101
134
|
topK: z.number().int().positive().max(50).optional(),
|
|
135
|
+
gate: z
|
|
136
|
+
.object({
|
|
137
|
+
acceptConfidence: z.number().min(0).max(1).optional(),
|
|
138
|
+
minGap: z.number().min(0).max(1).optional(),
|
|
139
|
+
rejectConfidence: z.number().min(0).max(1).optional(),
|
|
140
|
+
})
|
|
141
|
+
.optional()
|
|
142
|
+
.describe('Gate thresholds. Defaults: acceptConfidence 0.85, minGap 0.2, rejectConfidence 0.3.'),
|
|
102
143
|
}, async (args) => {
|
|
103
144
|
try {
|
|
104
|
-
const { graph
|
|
145
|
+
const { graph } = state.get(args.screenGraphId);
|
|
105
146
|
const result = groundInstruction(graph, args.instruction, { topK: args.topK ?? 5 });
|
|
106
|
-
|
|
147
|
+
const verdict = gateGrounding(result, graph, (args.gate ?? {}));
|
|
148
|
+
return state.respond({
|
|
149
|
+
candidates: result.candidates,
|
|
150
|
+
verdict,
|
|
151
|
+
screenshot: graph.screenshot ?? null,
|
|
152
|
+
}, result.warnings);
|
|
153
|
+
}
|
|
154
|
+
catch (e) {
|
|
155
|
+
return err(toCode(e), msg(e));
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
/* 3b. confirm_grounding — vision second-opinion (the agent IS the VLM) */
|
|
159
|
+
server.tool('confirm_grounding', 'Vision second-opinion on an ambiguous grounding verdict. Call ONLY after ground_instruction returned verdict.status "needs_visual_confirm". Re-runs the gate with the same instruction and applies your visual verdict. Pass confirmed=true + the interactableId you see is the right target (use the bbox from the candidates); confirmed=false to block. Returns consensus.status: "act" (proceed) or "blocked".', {
|
|
160
|
+
screenGraphId: z.string().min(1),
|
|
161
|
+
instruction: z.string().min(1),
|
|
162
|
+
confirmed: z.boolean(),
|
|
163
|
+
interactableId: z.string().optional().describe('The interactable id vision confirms. Required when confirmed=true.'),
|
|
164
|
+
reason: z.string().optional(),
|
|
165
|
+
gate: z
|
|
166
|
+
.object({
|
|
167
|
+
acceptConfidence: z.number().min(0).max(1).optional(),
|
|
168
|
+
minGap: z.number().min(0).max(1).optional(),
|
|
169
|
+
rejectConfidence: z.number().min(0).max(1).optional(),
|
|
170
|
+
})
|
|
171
|
+
.optional(),
|
|
172
|
+
}, async (args) => {
|
|
173
|
+
try {
|
|
174
|
+
const { graph, trace } = state.get(args.screenGraphId);
|
|
175
|
+
const result = groundInstruction(graph, args.instruction, { topK: 5 });
|
|
176
|
+
const verdict = gateGrounding(result, graph, (args.gate ?? {}));
|
|
177
|
+
if (verdict.status === 'accepted') {
|
|
178
|
+
// Structure already confident — vision not needed, but harmless.
|
|
179
|
+
trace.info('confirm_grounding', { note: 'structure already accepted, vision verdict ignored' });
|
|
180
|
+
}
|
|
181
|
+
if (args.confirmed && !args.interactableId) {
|
|
182
|
+
return err(ErrorCodes.snapshot_missing_fields, 'confirmed=true requires interactableId');
|
|
183
|
+
}
|
|
184
|
+
const visual = {
|
|
185
|
+
confirmed: args.confirmed,
|
|
186
|
+
interactableId: args.interactableId,
|
|
187
|
+
reason: args.reason,
|
|
188
|
+
};
|
|
189
|
+
const consensus = buildConsensus(verdict, visual);
|
|
190
|
+
trace.info('confirm_grounding', {
|
|
191
|
+
gateStatus: verdict.status,
|
|
192
|
+
visualConfirmed: args.confirmed,
|
|
193
|
+
consensus: consensus.status,
|
|
194
|
+
interactableId: consensus.interactableId,
|
|
195
|
+
});
|
|
196
|
+
await trace.flush(state.store);
|
|
197
|
+
return state.respond({
|
|
198
|
+
consensus,
|
|
199
|
+
verdict,
|
|
200
|
+
screenshot: graph.screenshot ?? null,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
catch (e) {
|
|
204
|
+
return err(toCode(e), msg(e));
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
/* 3c. verify_action — did the action take effect? (perceptual before/after diff) */
|
|
208
|
+
server.tool('verify_action', 'Confirm an action took visible effect via a perceptual pixel diff of before/after screenshots ingested through capture_browser. Pass interactableId to scope the diff to the clicked element bbox (recommended — isolates the change from page-wide noise). Returns changed=true iff the changed-pixel ratio exceeds threshold (default 0.5%). changed=false means no visible state change — the action likely missed or was a no-op.', {
|
|
209
|
+
screenGraphId: z.string().min(1),
|
|
210
|
+
afterScreenGraphId: z
|
|
211
|
+
.string()
|
|
212
|
+
.min(1)
|
|
213
|
+
.optional()
|
|
214
|
+
.describe('Graph captured after the action. Omit only when both artifacts are in the same run.'),
|
|
215
|
+
beforeArtifactId: z.string().min(1),
|
|
216
|
+
afterArtifactId: z.string().min(1),
|
|
217
|
+
interactableId: z
|
|
218
|
+
.string()
|
|
219
|
+
.optional()
|
|
220
|
+
.describe('The clicked interactable. When set, the diff scans only its bbox region.'),
|
|
221
|
+
pixelTolerance: z.number().min(0).max(255).optional().describe('Per-channel diff (0-255) to count as changed. Default 30.'),
|
|
222
|
+
changeThreshold: z.number().min(0).max(1).optional().describe('Changed-pixel fraction for changed=true. Default 0.005 (0.5%).'),
|
|
223
|
+
}, async (args) => {
|
|
224
|
+
try {
|
|
225
|
+
const beforeGraph = state.get(args.screenGraphId);
|
|
226
|
+
const afterGraph = args.afterScreenGraphId
|
|
227
|
+
? state.get(args.afterScreenGraphId)
|
|
228
|
+
: beforeGraph;
|
|
229
|
+
const { graph, trace } = beforeGraph;
|
|
230
|
+
const before = await state.store.lookup(beforeGraph.runId, args.beforeArtifactId);
|
|
231
|
+
const after = await state.store.lookup(afterGraph.runId, args.afterArtifactId);
|
|
232
|
+
if (!before)
|
|
233
|
+
return err('artifact_not_found', `before artifact ${args.beforeArtifactId} not in run ${beforeGraph.runId}`, beforeGraph.runId);
|
|
234
|
+
if (!after)
|
|
235
|
+
return err('artifact_not_found', `after artifact ${args.afterArtifactId} not in run ${afterGraph.runId}`, afterGraph.runId);
|
|
236
|
+
const beforeBuf = await state.store.read(beforeGraph.runId, args.beforeArtifactId, before.filename);
|
|
237
|
+
const afterBuf = await state.store.read(afterGraph.runId, args.afterArtifactId, after.filename);
|
|
238
|
+
let region = null;
|
|
239
|
+
if (args.interactableId) {
|
|
240
|
+
const inter = graph.interactables.find((i) => i.id === args.interactableId);
|
|
241
|
+
if (!inter)
|
|
242
|
+
return err('element_not_found', `interactable ${args.interactableId} not in graph`);
|
|
243
|
+
region = pickRegion(inter.bbox, graph.viewport);
|
|
244
|
+
}
|
|
245
|
+
const diff = await diffScreenshots(beforeBuf, afterBuf, {
|
|
246
|
+
pixelTolerance: args.pixelTolerance,
|
|
247
|
+
changeThreshold: args.changeThreshold,
|
|
248
|
+
region: region?.bbox,
|
|
249
|
+
viewport: region?.viewport,
|
|
250
|
+
});
|
|
251
|
+
trace.info('verify_action', {
|
|
252
|
+
changed: diff.changed,
|
|
253
|
+
changeRatio: Number(diff.changeRatio.toFixed(4)),
|
|
254
|
+
differingPixels: diff.differingPixels,
|
|
255
|
+
scoped: !!region,
|
|
256
|
+
});
|
|
257
|
+
await trace.flush(state.store);
|
|
258
|
+
return state.respond({
|
|
259
|
+
changed: diff.changed,
|
|
260
|
+
changeRatio: diff.changeRatio,
|
|
261
|
+
differingPixels: diff.differingPixels,
|
|
262
|
+
totalPixels: diff.totalPixels,
|
|
263
|
+
region: diff.region ?? null,
|
|
264
|
+
reason: diff.changed
|
|
265
|
+
? `pixel change ${(diff.changeRatio * 100).toFixed(2)}% of scanned region`
|
|
266
|
+
: 'no perceptible pixel change — action likely had no visible effect',
|
|
267
|
+
before: { sha256: before.sha256 ?? '', byteSize: before.byteSize, mimeType: before.mimeType },
|
|
268
|
+
after: { sha256: after.sha256 ?? '', byteSize: after.byteSize, mimeType: after.mimeType },
|
|
269
|
+
});
|
|
107
270
|
}
|
|
108
271
|
catch (e) {
|
|
109
272
|
return err(toCode(e), msg(e));
|
|
@@ -124,6 +287,7 @@ export function createServer(opts = {}) {
|
|
|
124
287
|
mimeType: meta.mimeType,
|
|
125
288
|
sha256: meta.sha256,
|
|
126
289
|
byteSize: meta.byteSize,
|
|
290
|
+
warning: meta.warning,
|
|
127
291
|
});
|
|
128
292
|
}
|
|
129
293
|
catch (e) {
|
|
@@ -169,11 +333,21 @@ export function createServer(opts = {}) {
|
|
|
169
333
|
expectedScreenGraphId: z.string().min(1),
|
|
170
334
|
actualScreenGraphId: z.string().min(1),
|
|
171
335
|
mode: z.literal('fixture-v0').optional(),
|
|
336
|
+
transform: z
|
|
337
|
+
.object({
|
|
338
|
+
from: z.enum(['viewport', 'screenshot', 'figma']),
|
|
339
|
+
to: z.enum(['viewport', 'screenshot', 'figma']),
|
|
340
|
+
factor: z.number().positive().finite(),
|
|
341
|
+
})
|
|
342
|
+
.optional(),
|
|
172
343
|
}, async (args) => {
|
|
173
344
|
try {
|
|
174
345
|
const expected = state.get(args.expectedScreenGraphId).graph;
|
|
175
346
|
const actual = state.get(args.actualScreenGraphId).graph;
|
|
176
|
-
const result = compareGraphs(expected, actual, {
|
|
347
|
+
const result = compareGraphs(expected, actual, {
|
|
348
|
+
mode: args.mode ?? 'fixture-v0',
|
|
349
|
+
transform: args.transform,
|
|
350
|
+
});
|
|
177
351
|
return state.respond(result);
|
|
178
352
|
}
|
|
179
353
|
catch (e) {
|
|
@@ -202,6 +376,16 @@ function toCode(e) {
|
|
|
202
376
|
function msg(e) {
|
|
203
377
|
return e instanceof Error ? e.message : String(e);
|
|
204
378
|
}
|
|
379
|
+
/**
|
|
380
|
+
* Map a viewport-space bbox to a screenshot-space scan region. Returns null
|
|
381
|
+
* when no viewport is set on the graph — caller then falls back to a full-image
|
|
382
|
+
* diff instead of a scoped one.
|
|
383
|
+
*/
|
|
384
|
+
function pickRegion(bbox, viewport) {
|
|
385
|
+
if (!viewport || !viewport.width || !viewport.height)
|
|
386
|
+
return null;
|
|
387
|
+
return { bbox, viewport: { width: viewport.width, height: viewport.height } };
|
|
388
|
+
}
|
|
205
389
|
async function readFile(p) {
|
|
206
390
|
const { readFile: rf } = await import('node:fs/promises');
|
|
207
391
|
return rf(p, 'utf8');
|
package/dist/server.js.map
CHANGED
|
@@ -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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"}
|
package/dist/state.js
CHANGED
|
@@ -42,8 +42,8 @@ export class ServerState {
|
|
|
42
42
|
const slim = { ...body };
|
|
43
43
|
delete slim['candidates'];
|
|
44
44
|
delete slim['bboxDeltas'];
|
|
45
|
-
json = JSON.stringify({ ...slim, warnings, truncated: true, originalBytes: bytes });
|
|
46
45
|
warnings = [...warnings, warn('response_truncated', `response ${bytes}B > ${this.responseMaxBytes}B cap; dropped candidates/bboxDeltas`, undefined)];
|
|
46
|
+
json = JSON.stringify({ ...slim, warnings, truncated: true, originalBytes: bytes });
|
|
47
47
|
}
|
|
48
48
|
else if (bytes > this.responseWarnBytes) {
|
|
49
49
|
warnings = [...warnings, warn('response_oversize', `response ${bytes}B > ${this.responseWarnBytes}B warn threshold`, undefined)];
|
package/dist/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,aAAa,EACb,KAAK,EACL,UAAU,EAGV,IAAI,EACJ,eAAe,GAEhB,MAAM,oBAAoB,CAAC;AAc5B,MAAM,OAAO,WAAW;IACb,KAAK,CAAgB;IACrB,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IACxC,iBAAiB,CAAS;IAC1B,gBAAgB,CAAS;IAElC,YAAY,OAA2B,EAAE;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,EAAE,GAAG,IAAI,CAAC;QAC7D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,EAAE,GAAG,IAAI,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAkB;QAC9B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YACtE,QAAQ,EAAE,kBAAkB;SAC7B,CAAC,CAAC;QACH,MAAM,KAAK,GAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAC,aAAqB;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,CAAC,CAAC;YAAE,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAC;QACtC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,0GAA0G;IAC1G,OAAO,CAAC,OAAgB,EAAE,gBAA2B,EAAE;QACrD,IAAI,IAAI,GAAG,OAAkC,CAAC;QAC9C,MAAM,WAAW,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,CAAE,IAAiC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/F,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAE9C,IAAI,QAAQ,GAAG,WAAW,CAAC;QAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAClC,8CAA8C;YAC9C,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1B,
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,aAAa,EACb,KAAK,EACL,UAAU,EAGV,IAAI,EACJ,eAAe,GAEhB,MAAM,oBAAoB,CAAC;AAc5B,MAAM,OAAO,WAAW;IACb,KAAK,CAAgB;IACrB,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IACxC,iBAAiB,CAAS;IAC1B,gBAAgB,CAAS;IAElC,YAAY,OAA2B,EAAE;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,EAAE,GAAG,IAAI,CAAC;QAC7D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,EAAE,GAAG,IAAI,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAkB;QAC9B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YACtE,QAAQ,EAAE,kBAAkB;SAC7B,CAAC,CAAC;QACH,MAAM,KAAK,GAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAC,aAAqB;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,CAAC,CAAC;YAAE,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAC;QACtC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,0GAA0G;IAC1G,OAAO,CAAC,OAAgB,EAAE,gBAA2B,EAAE;QACrD,IAAI,IAAI,GAAG,OAAkC,CAAC;QAC9C,MAAM,WAAW,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,CAAE,IAAiC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/F,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAE9C,IAAI,QAAQ,GAAG,WAAW,CAAC;QAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAClC,8CAA8C;YAC9C,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1B,QAAQ,GAAG,CAAC,GAAG,QAAQ,EAAE,IAAI,CAAC,oBAAoB,EAAE,YAAY,KAAK,OAAO,IAAI,CAAC,gBAAgB,sCAAsC,EAAE,SAAS,CAAC,CAAC,CAAC;YACrJ,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;QACtF,CAAC;aAAM,IAAI,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC1C,QAAQ,GAAG,CAAC,GAAG,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE,YAAY,KAAK,OAAO,IAAI,CAAC,iBAAiB,kBAAkB,EAAE,SAAS,CAAC,CAAC,CAAC;YACjI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,OAAO,GAAI,IAAoC,CAAC,KAAK,KAAK,SAAS,CAAC;QAC1E,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACvC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtC,CAAC;IACJ,CAAC;CACF;AAQD,MAAM,UAAU,QAAQ,CAAC,aAAqB;IAC5C,MAAM,CAAC,GAAG,IAAI,KAAK,CACjB,GAAG,UAAU,CAAC,eAAe,mBAAmB,aAAa,uEAAuE,CACxG,CAAC;IAC/B,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,eAAe,CAAC;IACpC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@visual-layer/mcp-server",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "MCP stdio server exposing VisualLayer tools (Claude Code + Codex)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -28,10 +28,11 @@
|
|
|
28
28
|
],
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@modelcontextprotocol/sdk": "^1.0.4",
|
|
31
|
+
"sharp": "^0.33.5",
|
|
31
32
|
"zod": "^3.23.8",
|
|
32
|
-
"@visual-layer/core": "1.0
|
|
33
|
-
"@visual-layer/
|
|
34
|
-
"@visual-layer/
|
|
33
|
+
"@visual-layer/core": "1.1.0",
|
|
34
|
+
"@visual-layer/grounding": "1.1.1",
|
|
35
|
+
"@visual-layer/figma-rest": "1.1.0"
|
|
35
36
|
},
|
|
36
37
|
"scripts": {
|
|
37
38
|
"build": "tsc -b",
|