bruniai 0.1.13 → 0.1.14
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 +13 -9
- package/dist/compare-image-to-url.d.ts +16 -0
- package/dist/compare-image-to-url.d.ts.map +1 -0
- package/dist/compare-image-to-url.js +114 -0
- package/dist/compare-image-to-url.js.map +1 -0
- package/dist/compare-urls.d.ts.map +1 -1
- package/dist/compare-urls.js +17 -5
- package/dist/compare-urls.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/comparison/core.d.ts +6 -0
- package/dist/runtime/comparison/core.d.ts.map +1 -1
- package/dist/runtime/comparison/core.js.map +1 -1
- package/dist/runtime/comparison/image-core.d.ts +6 -4
- package/dist/runtime/comparison/image-core.d.ts.map +1 -1
- package/dist/runtime/comparison/image-core.js +37 -31
- package/dist/runtime/comparison/image-core.js.map +1 -1
- package/dist/runtime/comparison/image-image-core.d.ts +2 -0
- package/dist/runtime/comparison/image-image-core.d.ts.map +1 -1
- package/dist/runtime/comparison/image-image-core.js +34 -28
- package/dist/runtime/comparison/image-image-core.js.map +1 -1
- package/dist/runtime/comparison/section-explanation-mode.d.ts +3 -0
- package/dist/runtime/comparison/section-explanation-mode.d.ts.map +1 -0
- package/dist/runtime/comparison/section-explanation-mode.js +10 -0
- package/dist/runtime/comparison/section-explanation-mode.js.map +1 -0
- package/dist/runtime/image/report.d.ts +1 -1
- package/dist/runtime/image/report.d.ts.map +1 -1
- package/dist/runtime/image/report.js +2 -2
- package/dist/runtime/image/report.js.map +1 -1
- package/dist/runtime/vision/agents.d.ts.map +1 -1
- package/dist/runtime/vision/agents.js +129 -86
- package/dist/runtime/vision/agents.js.map +1 -1
- package/dist/types.d.ts +29 -8
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ npm install bruniai
|
|
|
13
13
|
## Usage
|
|
14
14
|
|
|
15
15
|
```typescript
|
|
16
|
-
import {
|
|
16
|
+
import { compareImageToUrl, compareUrls } from "bruniai";
|
|
17
17
|
|
|
18
18
|
const result = await compareUrls({
|
|
19
19
|
baseUrl: "https://example.com",
|
|
@@ -25,9 +25,10 @@ console.log(result.status); // "pass" | "fail" | "warning"
|
|
|
25
25
|
console.log(result.visual_analysis);
|
|
26
26
|
console.log(result.images.base_screenshot);
|
|
27
27
|
|
|
28
|
-
const imageResult = await
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
const imageResult = await compareImageToUrl({
|
|
29
|
+
baseImageSource: "https://example.com/design.png",
|
|
30
|
+
previewUrl: "https://preview.example.com",
|
|
31
|
+
page: "/contact",
|
|
31
32
|
});
|
|
32
33
|
|
|
33
34
|
console.log(imageResult.status);
|
|
@@ -54,21 +55,24 @@ Performs a visual comparison between two URLs.
|
|
|
54
55
|
- `sections_analysis`: Formatted sections analysis text
|
|
55
56
|
- `images`: Object containing paths to generated screenshots and diff images
|
|
56
57
|
|
|
57
|
-
### `
|
|
58
|
+
### `compareImageToUrl(input: CompareImageToUrlInput): Promise<CompareImageToUrlOutput>`
|
|
58
59
|
|
|
59
|
-
Performs a visual comparison between
|
|
60
|
+
Performs a visual comparison between a base image source and a preview URL.
|
|
60
61
|
|
|
61
62
|
**Parameters:**
|
|
62
63
|
|
|
63
|
-
- `
|
|
64
|
-
- `
|
|
64
|
+
- `baseImageSource` (string): Base/reference image source as an HTTP(S) image URL or `data:image/...`
|
|
65
|
+
- `previewUrl` (string): Preview/changed webpage URL to analyze
|
|
66
|
+
- `page` (string, optional): Page path to compare on the preview URL (default: "/")
|
|
67
|
+
- `prNumber` (string, optional): PR number for metadata
|
|
68
|
+
- `repository` (string, optional): Repository name for metadata
|
|
65
69
|
|
|
66
70
|
**Returns:**
|
|
67
71
|
|
|
68
72
|
- `status`: Overall comparison status ("pass" | "fail" | "warning" | "none")
|
|
69
73
|
- `visual_analysis`: Detailed visual analysis result from AI
|
|
70
74
|
- `sections_analysis`: Formatted sections analysis text
|
|
71
|
-
- `images`: Object containing paths to normalized
|
|
75
|
+
- `images`: Object containing paths to normalized screenshots and diff images
|
|
72
76
|
|
|
73
77
|
## Requirements
|
|
74
78
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { CompareImageToUrlInput, CompareImageToUrlOutput } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Compare a base image source against a preview URL and return analysis results.
|
|
4
|
+
*
|
|
5
|
+
* This function performs a complete image-to-URL comparison workflow:
|
|
6
|
+
* - Creates a temporary directory for images
|
|
7
|
+
* - Captures the preview webpage with Stagehand
|
|
8
|
+
* - Normalizes the design image and preview screenshot into comparable PNGs
|
|
9
|
+
* - Generates diff images and matched section crops
|
|
10
|
+
* - Produces structured analysis output
|
|
11
|
+
*
|
|
12
|
+
* @param input - Comparison input parameters
|
|
13
|
+
* @returns Complete analysis results with image paths
|
|
14
|
+
*/
|
|
15
|
+
export declare function compareImageToUrl(input: CompareImageToUrlInput): Promise<CompareImageToUrlOutput>;
|
|
16
|
+
//# sourceMappingURL=compare-image-to-url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare-image-to-url.d.ts","sourceRoot":"","sources":["../src/compare-image-to-url.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AA8DpB;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CAqElC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { Stagehand } from "@browserbasehq/stagehand";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { mkdirSync, existsSync } from "fs";
|
|
4
|
+
import { tmpdir } from "os";
|
|
5
|
+
async function importSourceModule(relativePath) {
|
|
6
|
+
return (await import(new URL(relativePath, import.meta.url).href));
|
|
7
|
+
}
|
|
8
|
+
async function loadImageToUrlComparisonModule() {
|
|
9
|
+
if (import.meta.url.includes("/packages/bruniai/src/")) {
|
|
10
|
+
try {
|
|
11
|
+
return await import("../../../dist/comparison/image-core.js");
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return await importSourceModule("../../../src/comparison/image-core.ts");
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return await import("./runtime/comparison/image-core.js");
|
|
18
|
+
}
|
|
19
|
+
function isSupportedImageSource(input) {
|
|
20
|
+
if (!input) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
if (input.startsWith("data:image/")) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const parsed = new URL(input);
|
|
28
|
+
return parsed.protocol === "http:" || parsed.protocol === "https:";
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function assertSupportedImageSource(input, fieldName) {
|
|
35
|
+
if (!isSupportedImageSource(input)) {
|
|
36
|
+
throw new Error(`${fieldName} must be an HTTP(S) image URL or data:image/... string`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function assertSupportedPreviewUrl(input, fieldName) {
|
|
40
|
+
try {
|
|
41
|
+
const parsed = new URL(input);
|
|
42
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
|
|
43
|
+
throw new Error("unsupported protocol");
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
throw new Error(`${fieldName} must be an HTTP(S) URL`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Compare a base image source against a preview URL and return analysis results.
|
|
52
|
+
*
|
|
53
|
+
* This function performs a complete image-to-URL comparison workflow:
|
|
54
|
+
* - Creates a temporary directory for images
|
|
55
|
+
* - Captures the preview webpage with Stagehand
|
|
56
|
+
* - Normalizes the design image and preview screenshot into comparable PNGs
|
|
57
|
+
* - Generates diff images and matched section crops
|
|
58
|
+
* - Produces structured analysis output
|
|
59
|
+
*
|
|
60
|
+
* @param input - Comparison input parameters
|
|
61
|
+
* @returns Complete analysis results with image paths
|
|
62
|
+
*/
|
|
63
|
+
export async function compareImageToUrl(input) {
|
|
64
|
+
const { baseImageSource, previewUrl, page = "/", sectionExplanationMode = "fast", prNumber, repository, } = input;
|
|
65
|
+
assertSupportedImageSource(baseImageSource, "baseImageSource");
|
|
66
|
+
assertSupportedPreviewUrl(previewUrl, "previewUrl");
|
|
67
|
+
const { performImageToUrlComparison } = await loadImageToUrlComparisonModule();
|
|
68
|
+
const imagesDir = join(tmpdir(), `bruniai-${Date.now()}`);
|
|
69
|
+
if (!existsSync(imagesDir)) {
|
|
70
|
+
mkdirSync(imagesDir, { recursive: true });
|
|
71
|
+
}
|
|
72
|
+
const stagehand = new Stagehand({
|
|
73
|
+
env: "LOCAL",
|
|
74
|
+
localBrowserLaunchOptions: {
|
|
75
|
+
headless: true,
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
try {
|
|
79
|
+
await stagehand.init();
|
|
80
|
+
const result = await performImageToUrlComparison({
|
|
81
|
+
stagehand,
|
|
82
|
+
baseImageSource,
|
|
83
|
+
previewUrl,
|
|
84
|
+
page,
|
|
85
|
+
sectionExplanationMode,
|
|
86
|
+
imagesDir,
|
|
87
|
+
prNumber,
|
|
88
|
+
repository,
|
|
89
|
+
});
|
|
90
|
+
const status = result.visual_analysis.status === "none"
|
|
91
|
+
? "pass"
|
|
92
|
+
: result.visual_analysis.status;
|
|
93
|
+
return {
|
|
94
|
+
status,
|
|
95
|
+
visual_analysis: result.visual_analysis,
|
|
96
|
+
sections_analysis: result.sections_analysis,
|
|
97
|
+
images: {
|
|
98
|
+
base_screenshot: result.base_screenshot,
|
|
99
|
+
preview_screenshot: result.preview_screenshot,
|
|
100
|
+
diff_image: result.diff_image,
|
|
101
|
+
section_screenshots: Object.keys(result.section_screenshots).length > 0
|
|
102
|
+
? Object.fromEntries(Object.entries(result.section_screenshots).map(([key, value]) => [
|
|
103
|
+
key,
|
|
104
|
+
{ base: value.base, preview: value.preview },
|
|
105
|
+
]))
|
|
106
|
+
: undefined,
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
await stagehand.close();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=compare-image-to-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare-image-to-url.js","sourceRoot":"","sources":["../src/compare-image-to-url.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compare-urls.d.ts","sourceRoot":"","sources":["../src/compare-urls.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"compare-urls.d.ts","sourceRoot":"","sources":["../src/compare-urls.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAyBtE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAuE5B"}
|
package/dist/compare-urls.js
CHANGED
|
@@ -2,9 +2,20 @@ import { Stagehand } from "@browserbasehq/stagehand";
|
|
|
2
2
|
import { join } from "path";
|
|
3
3
|
import { mkdirSync, existsSync } from "fs";
|
|
4
4
|
import { tmpdir } from "os";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
async function importSourceModule(relativePath) {
|
|
6
|
+
return (await import(new URL(relativePath, import.meta.url).href));
|
|
7
|
+
}
|
|
8
|
+
async function loadComparisonCoreModule() {
|
|
9
|
+
if (import.meta.url.includes("/packages/bruniai/src/")) {
|
|
10
|
+
try {
|
|
11
|
+
return await import("../../../dist/comparison/core.js");
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return await importSourceModule("../../../src/comparison/core.ts");
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return await import("./runtime/comparison/core.js");
|
|
18
|
+
}
|
|
8
19
|
/**
|
|
9
20
|
* Compare two URLs visually and return analysis results.
|
|
10
21
|
*
|
|
@@ -31,8 +42,8 @@ const comparisonCoreModulePromise = import.meta.url.includes("/packages/bruniai/
|
|
|
31
42
|
* ```
|
|
32
43
|
*/
|
|
33
44
|
export async function compareUrls(input) {
|
|
34
|
-
const { baseUrl, previewUrl, page = "/" } = input;
|
|
35
|
-
const { performComparison } = await
|
|
45
|
+
const { baseUrl, previewUrl, page = "/", sectionExplanationMode = "fast", } = input;
|
|
46
|
+
const { performComparison } = await loadComparisonCoreModule();
|
|
36
47
|
// Create temporary directory for images.
|
|
37
48
|
const imagesDir = join(tmpdir(), `bruniai-${Date.now()}`);
|
|
38
49
|
if (!existsSync(imagesDir)) {
|
|
@@ -53,6 +64,7 @@ export async function compareUrls(input) {
|
|
|
53
64
|
baseUrl,
|
|
54
65
|
previewUrl,
|
|
55
66
|
page,
|
|
67
|
+
sectionExplanationMode,
|
|
56
68
|
imagesDir,
|
|
57
69
|
prNumber: input.prNumber,
|
|
58
70
|
repository: input.repository,
|
package/dist/compare-urls.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compare-urls.js","sourceRoot":"","sources":["../src/compare-urls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAI5B,MAAM,
|
|
1
|
+
{"version":3,"file":"compare-urls.js","sourceRoot":"","sources":["../src/compare-urls.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
* Provides a simple API to compare two URLs and analyze visual differences.
|
|
6
6
|
*/
|
|
7
7
|
export { compareUrls } from "./compare-urls.js";
|
|
8
|
-
export {
|
|
9
|
-
export type {
|
|
8
|
+
export { compareImageToUrl } from "./compare-image-to-url.js";
|
|
9
|
+
export type { CompareImageToUrlInput, CompareImageToUrlOutput, CompareUrlsInput, CompareUrlsOutput, ComparisonImages, } from "./types.js";
|
|
10
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,YAAY,EACV,sBAAsB,EACtB,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
* Provides a simple API to compare two URLs and analyze visual differences.
|
|
6
6
|
*/
|
|
7
7
|
export { compareUrls } from "./compare-urls.js";
|
|
8
|
-
export {
|
|
8
|
+
export { compareImageToUrl } from "./compare-image-to-url.js";
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -13,6 +13,12 @@ export interface ComparisonOptions {
|
|
|
13
13
|
previewUrl: string;
|
|
14
14
|
/** Page path to compare (e.g., "/" or "/about"). */
|
|
15
15
|
page: string;
|
|
16
|
+
/**
|
|
17
|
+
* Reserved for deterministic section explanation flows.
|
|
18
|
+
* The current URL-to-URL path does not use it directly yet, but the option
|
|
19
|
+
* is threaded through for API consistency.
|
|
20
|
+
*/
|
|
21
|
+
sectionExplanationMode?: "fast" | "detailed" | "off";
|
|
16
22
|
/** Directory where images should be saved. */
|
|
17
23
|
imagesDir: string;
|
|
18
24
|
/** Optional PR number for metadata. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/comparison/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAS1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAIhE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wDAAwD;IACxD,SAAS,EAAE,SAAS,CAAC;IACrB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,eAAe,EAAE,oBAAoB,CAAC;IACtC,wCAAwC;IACxC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,kCAAkC;IAClC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvE,sDAAsD;IACtD,eAAe,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACzC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAqI3B"}
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/comparison/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAS1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAIhE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wDAAwD;IACxD,SAAS,EAAE,SAAS,CAAC;IACrB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC;IACrD,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,eAAe,EAAE,oBAAoB,CAAC;IACtC,wCAAwC;IACxC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,kCAAkC;IAClC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvE,sDAAsD;IACtD,eAAe,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACzC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAqI3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/comparison/core.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAGjF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/comparison/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,16 +7,18 @@
|
|
|
7
7
|
import type { Stagehand } from "@browserbasehq/stagehand";
|
|
8
8
|
import type { VisualAnalysisResult } from "../vision/types.js";
|
|
9
9
|
import type { SectionVisualResult } from "../reporter/types.js";
|
|
10
|
-
|
|
10
|
+
import { type SectionExplanationMode } from "./section-explanation-mode.js";
|
|
11
|
+
export interface ImageToUrlComparisonOptions {
|
|
11
12
|
stagehand: Stagehand;
|
|
12
|
-
|
|
13
|
+
baseImageSource: string;
|
|
13
14
|
previewUrl: string;
|
|
14
15
|
page: string;
|
|
16
|
+
sectionExplanationMode?: SectionExplanationMode;
|
|
15
17
|
imagesDir: string;
|
|
16
18
|
prNumber?: string;
|
|
17
19
|
repository?: string;
|
|
18
20
|
}
|
|
19
|
-
export interface
|
|
21
|
+
export interface ImageToUrlComparisonResult {
|
|
20
22
|
visual_analysis: VisualAnalysisResult;
|
|
21
23
|
sections_analysis: string;
|
|
22
24
|
base_screenshot: string;
|
|
@@ -29,5 +31,5 @@ export interface ImageComparisonResult {
|
|
|
29
31
|
section_results: SectionVisualResult[];
|
|
30
32
|
mode: "image-to-url";
|
|
31
33
|
}
|
|
32
|
-
export declare function
|
|
34
|
+
export declare function performImageToUrlComparison(options: ImageToUrlComparisonOptions): Promise<ImageToUrlComparisonResult>;
|
|
33
35
|
//# sourceMappingURL=image-core.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-core.d.ts","sourceRoot":"","sources":["../../src/comparison/image-core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAe1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"image-core.d.ts","sourceRoot":"","sources":["../../src/comparison/image-core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAe1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAIhE,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,+BAA+B,CAAC;AAEvC,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,0BAA0B;IACzC,eAAe,EAAE,oBAAoB,CAAC;IACtC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvE,eAAe,EAAE,mBAAmB,EAAE,CAAC;IACvC,IAAI,EAAE,cAAc,CAAC;CACtB;AAiDD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,0BAA0B,CAAC,CAkSrC"}
|
|
@@ -11,6 +11,7 @@ import { analyzeSectionDiffExplanationsAgent } from "../vision/index.js";
|
|
|
11
11
|
import { join } from "path";
|
|
12
12
|
import { writeFileSync } from "fs";
|
|
13
13
|
import sharp from "sharp";
|
|
14
|
+
import { shouldExplainSection, } from "./section-explanation-mode.js";
|
|
14
15
|
function buildLlmUnavailableExplanation(reason) {
|
|
15
16
|
return `${reason} Review the matched section crop and diff image directly for the exact visual change.`;
|
|
16
17
|
}
|
|
@@ -38,8 +39,8 @@ async function resizeImageToWidth(inputPath, outputPath, width) {
|
|
|
38
39
|
height: metadata.height || 1,
|
|
39
40
|
};
|
|
40
41
|
}
|
|
41
|
-
export async function
|
|
42
|
-
const { stagehand,
|
|
42
|
+
export async function performImageToUrlComparison(options) {
|
|
43
|
+
const { stagehand, baseImageSource, previewUrl, page, sectionExplanationMode = "fast", imagesDir, prNumber = "", repository = "", } = options;
|
|
43
44
|
let pageSuffix = page.replace(/\//g, "_");
|
|
44
45
|
pageSuffix = pageSuffix === "_" ? "home" : pageSuffix;
|
|
45
46
|
const baseOriginalPath = join(imagesDir, `base_original_${pageSuffix}.png`);
|
|
@@ -49,7 +50,7 @@ export async function performImageComparison(options) {
|
|
|
49
50
|
const diffImagePath = join(imagesDir, `diff_${pageSuffix}.png`);
|
|
50
51
|
console.log(`\n${"=".repeat(50)}\n🖼️ Starting deterministic image-to-URL comparison\n${"=".repeat(50)}`);
|
|
51
52
|
console.log("\n📥 Step 1: Downloading design image...");
|
|
52
|
-
await downloadImageToPng(
|
|
53
|
+
await downloadImageToPng(baseImageSource, baseOriginalPath);
|
|
53
54
|
console.log("\n✂️ Step 2: Trimming design image margins...");
|
|
54
55
|
const trimResult = await trimImageToContent(baseOriginalPath, baseScreenshotPath);
|
|
55
56
|
const baseWidth = trimResult.trimmedDimensions.width;
|
|
@@ -110,31 +111,34 @@ export async function performImageComparison(options) {
|
|
|
110
111
|
}
|
|
111
112
|
}
|
|
112
113
|
console.log("\n🧠 Step 9: Explaining matched sections with vision...");
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
114
|
+
const explainableSections = sectionMatches
|
|
115
|
+
.filter((match) => shouldExplainSection(match.status, sectionExplanationMode))
|
|
116
|
+
.map((match) => {
|
|
117
|
+
const artifacts = sectionArtifacts.get(match.sectionId);
|
|
118
|
+
if (!artifacts) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
section_id: match.sectionId,
|
|
123
|
+
name: match.name,
|
|
124
|
+
base_screenshot: artifacts.base,
|
|
125
|
+
preview_screenshot: artifacts.preview,
|
|
126
|
+
diff_image: artifacts.diff,
|
|
127
|
+
match_score: match.matchScore,
|
|
128
|
+
final_similarity_score: match.signals.finalSimilarityScore,
|
|
129
|
+
pixel_difference: match.signals.pixelDifference,
|
|
130
|
+
edge_difference: match.signals.edgeDifference,
|
|
131
|
+
structural_similarity: match.signals.structuralSimilarity,
|
|
132
|
+
};
|
|
133
|
+
})
|
|
134
|
+
.filter((section) => section !== null);
|
|
135
|
+
if (sectionExplanationMode === "off") {
|
|
136
|
+
console.log("Skipping section explanation agent because sectionExplanationMode is off.");
|
|
137
|
+
}
|
|
138
|
+
else if (process.env.OPENAI_API_KEY) {
|
|
135
139
|
if (explainableSections.length > 0) {
|
|
136
140
|
try {
|
|
137
|
-
const explanations = await analyzeSectionDiffExplanationsAgent(explainableSections,
|
|
141
|
+
const explanations = await analyzeSectionDiffExplanationsAgent(explainableSections, baseImageSource, previewUrl);
|
|
138
142
|
const explanationsById = new Map(explanations.map((explanation) => [explanation.section_id, explanation]));
|
|
139
143
|
let acceptedCount = 0;
|
|
140
144
|
for (const match of sectionMatches) {
|
|
@@ -165,8 +169,9 @@ export async function performImageComparison(options) {
|
|
|
165
169
|
}
|
|
166
170
|
catch (error) {
|
|
167
171
|
console.warn(`Section explanation agent failed: ${error}`);
|
|
168
|
-
for (const
|
|
169
|
-
|
|
172
|
+
for (const section of explainableSections) {
|
|
173
|
+
const match = sectionMatches.find((candidate) => candidate.sectionId === section.section_id);
|
|
174
|
+
if (!match) {
|
|
170
175
|
continue;
|
|
171
176
|
}
|
|
172
177
|
match.humanDescription = buildLlmUnavailableExplanation("The section was compared with the vision model, but the LLM explanation step failed.");
|
|
@@ -178,8 +183,9 @@ export async function performImageComparison(options) {
|
|
|
178
183
|
}
|
|
179
184
|
else {
|
|
180
185
|
console.log("Skipping section explanation agent because OPENAI_API_KEY is not set.");
|
|
181
|
-
for (const
|
|
182
|
-
|
|
186
|
+
for (const section of explainableSections) {
|
|
187
|
+
const match = sectionMatches.find((candidate) => candidate.sectionId === section.section_id);
|
|
188
|
+
if (!match) {
|
|
183
189
|
continue;
|
|
184
190
|
}
|
|
185
191
|
match.humanDescription = buildLlmUnavailableExplanation("The section was compared with the vision model, but OPENAI_API_KEY is not set so no LLM explanation was generated.");
|
|
@@ -226,7 +232,7 @@ export async function performImageComparison(options) {
|
|
|
226
232
|
});
|
|
227
233
|
console.log("\n🧠 Step 10: Building deterministic report...");
|
|
228
234
|
const visualAnalysis = buildImageModeVisualAnalysis({
|
|
229
|
-
|
|
235
|
+
baseImageSource,
|
|
230
236
|
previewUrl,
|
|
231
237
|
prNumber,
|
|
232
238
|
repository,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-core.js","sourceRoot":"","sources":["../../src/comparison/image-core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,+BAA+B,EAC/B,4BAA4B,GAC7B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mCAAmC,EAAE,MAAM,oBAAoB,CAAC;AAGzE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACnC,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"image-core.js","sourceRoot":"","sources":["../../src/comparison/image-core.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,9 +6,11 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import type { VisualAnalysisResult } from "../vision/types.js";
|
|
8
8
|
import type { SectionVisualResult } from "../reporter/types.js";
|
|
9
|
+
import { type SectionExplanationMode } from "./section-explanation-mode.js";
|
|
9
10
|
export interface ImageToImageComparisonOptions {
|
|
10
11
|
baseImageUrl: string;
|
|
11
12
|
previewImageUrl: string;
|
|
13
|
+
sectionExplanationMode?: SectionExplanationMode;
|
|
12
14
|
imagesDir: string;
|
|
13
15
|
prNumber?: string;
|
|
14
16
|
repository?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-image-core.d.ts","sourceRoot":"","sources":["../../src/comparison/image-image-core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"image-image-core.d.ts","sourceRoot":"","sources":["../../src/comparison/image-image-core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAGhE,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,+BAA+B,CAAC;AAEvC,MAAM,WAAW,6BAA6B;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,4BAA4B;IAC3C,eAAe,EAAE,oBAAoB,CAAC;IACtC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvE,eAAe,EAAE,mBAAmB,EAAE,CAAC;IACvC,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAiDD,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,4BAA4B,CAAC,CA4RvC"}
|
|
@@ -9,6 +9,7 @@ import { downloadImageToPng, trimImageToContent, extractVisualSections, matchVis
|
|
|
9
9
|
import { analyzeSectionDiffExplanationsAgent } from "../vision/index.js";
|
|
10
10
|
import { join } from "path";
|
|
11
11
|
import sharp from "sharp";
|
|
12
|
+
import { shouldExplainSection, } from "./section-explanation-mode.js";
|
|
12
13
|
function buildLlmUnavailableExplanation(reason) {
|
|
13
14
|
return `${reason} Review the matched section crop and diff image directly for the exact visual change.`;
|
|
14
15
|
}
|
|
@@ -37,7 +38,7 @@ async function resizeImageToWidth(inputPath, outputPath, width) {
|
|
|
37
38
|
};
|
|
38
39
|
}
|
|
39
40
|
export async function performImageToImageComparison(options) {
|
|
40
|
-
const { baseImageUrl, previewImageUrl, imagesDir, prNumber = "", repository = "", } = options;
|
|
41
|
+
const { baseImageUrl, previewImageUrl, sectionExplanationMode = "fast", imagesDir, prNumber = "", repository = "", } = options;
|
|
41
42
|
const pageSuffix = "image";
|
|
42
43
|
const baseOriginalPath = join(imagesDir, `base_original_${pageSuffix}.png`);
|
|
43
44
|
const baseScreenshotPath = join(imagesDir, `base_screenshot_${pageSuffix}.png`);
|
|
@@ -106,28 +107,31 @@ export async function performImageToImageComparison(options) {
|
|
|
106
107
|
}
|
|
107
108
|
}
|
|
108
109
|
console.log("\n🧠 Step 10: Explaining matched sections with vision...");
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
110
|
+
const explainableSections = sectionMatches
|
|
111
|
+
.filter((match) => shouldExplainSection(match.status, sectionExplanationMode))
|
|
112
|
+
.map((match) => {
|
|
113
|
+
const artifacts = sectionArtifacts.get(match.sectionId);
|
|
114
|
+
if (!artifacts) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
section_id: match.sectionId,
|
|
119
|
+
name: match.name,
|
|
120
|
+
base_screenshot: artifacts.base,
|
|
121
|
+
preview_screenshot: artifacts.preview,
|
|
122
|
+
diff_image: artifacts.diff,
|
|
123
|
+
match_score: match.matchScore,
|
|
124
|
+
final_similarity_score: match.signals.finalSimilarityScore,
|
|
125
|
+
pixel_difference: match.signals.pixelDifference,
|
|
126
|
+
edge_difference: match.signals.edgeDifference,
|
|
127
|
+
structural_similarity: match.signals.structuralSimilarity,
|
|
128
|
+
};
|
|
129
|
+
})
|
|
130
|
+
.filter((section) => section !== null);
|
|
131
|
+
if (sectionExplanationMode === "off") {
|
|
132
|
+
console.log("Skipping section explanation agent because sectionExplanationMode is off.");
|
|
133
|
+
}
|
|
134
|
+
else if (process.env.OPENAI_API_KEY) {
|
|
131
135
|
if (explainableSections.length > 0) {
|
|
132
136
|
try {
|
|
133
137
|
const explanations = await analyzeSectionDiffExplanationsAgent(explainableSections, baseImageUrl, previewImageUrl);
|
|
@@ -161,8 +165,9 @@ export async function performImageToImageComparison(options) {
|
|
|
161
165
|
}
|
|
162
166
|
catch (error) {
|
|
163
167
|
console.warn(`Section explanation agent failed: ${error}`);
|
|
164
|
-
for (const
|
|
165
|
-
|
|
168
|
+
for (const section of explainableSections) {
|
|
169
|
+
const match = sectionMatches.find((candidate) => candidate.sectionId === section.section_id);
|
|
170
|
+
if (!match) {
|
|
166
171
|
continue;
|
|
167
172
|
}
|
|
168
173
|
match.humanDescription = buildLlmUnavailableExplanation("The section was compared with the vision model, but the LLM explanation step failed.");
|
|
@@ -174,8 +179,9 @@ export async function performImageToImageComparison(options) {
|
|
|
174
179
|
}
|
|
175
180
|
else {
|
|
176
181
|
console.log("Skipping section explanation agent because OPENAI_API_KEY is not set.");
|
|
177
|
-
for (const
|
|
178
|
-
|
|
182
|
+
for (const section of explainableSections) {
|
|
183
|
+
const match = sectionMatches.find((candidate) => candidate.sectionId === section.section_id);
|
|
184
|
+
if (!match) {
|
|
179
185
|
continue;
|
|
180
186
|
}
|
|
181
187
|
match.humanDescription = buildLlmUnavailableExplanation("The section was compared with the vision model, but OPENAI_API_KEY is not set so no LLM explanation was generated.");
|
|
@@ -222,7 +228,7 @@ export async function performImageToImageComparison(options) {
|
|
|
222
228
|
});
|
|
223
229
|
console.log("\n🧠 Step 11: Building deterministic report...");
|
|
224
230
|
const visualAnalysis = buildImageModeVisualAnalysis({
|
|
225
|
-
|
|
231
|
+
baseImageSource: baseImageUrl,
|
|
226
232
|
previewUrl: previewImageUrl,
|
|
227
233
|
prNumber,
|
|
228
234
|
repository,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-image-core.js","sourceRoot":"","sources":["../../src/comparison/image-image-core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,+BAA+B,EAC/B,4BAA4B,GAC7B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mCAAmC,EAAE,MAAM,oBAAoB,CAAC;AAGzE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"image-image-core.js","sourceRoot":"","sources":["../../src/comparison/image-image-core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section-explanation-mode.d.ts","sourceRoot":"","sources":["../../src/comparison/section-explanation-mode.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC;AAEjE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,SAAS,EAC7C,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAUT"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section-explanation-mode.js","sourceRoot":"","sources":["../../src/comparison/section-explanation-mode.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAClC,MAA6C,EAC7C,IAA4B;IAE5B,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,OAAO,MAAM,KAAK,SAAS,CAAC;IAC9B,CAAC;IAED,OAAO,MAAM,KAAK,aAAa,CAAC;AAClC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { VisualSectionMatch } from "./visual-sections.js";
|
|
2
2
|
import type { VisualAnalysisResult } from "../vision/types.js";
|
|
3
3
|
export interface BuildImageModeVisualAnalysisInput {
|
|
4
|
-
|
|
4
|
+
baseImageSource: string;
|
|
5
5
|
previewUrl: string;
|
|
6
6
|
prNumber: string;
|
|
7
7
|
repository: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/image/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG/D,MAAM,WAAW,iCAAiC;IAChD,
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/image/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG/D,MAAM,WAAW,iCAAiC;IAChD,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,kBAAkB,EAAE,CAAC;CACtC;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,iCAAiC,GACvC,oBAAoB,CAoHtB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { generateMetadata, validateAndFixEnums } from "../vision/utils.js";
|
|
2
2
|
export function buildImageModeVisualAnalysis(input) {
|
|
3
|
-
const {
|
|
3
|
+
const { baseImageSource, previewUrl, prNumber, repository, sectionMatches, } = input;
|
|
4
4
|
const missingSections = sectionMatches.filter((section) => section.status === "missing");
|
|
5
5
|
const problematicSections = sectionMatches.filter((section) => section.status === "problematic");
|
|
6
6
|
const meanSimilarity = sectionMatches.length === 0
|
|
@@ -28,7 +28,7 @@ export function buildImageModeVisualAnalysis(input) {
|
|
|
28
28
|
.slice(0, 5);
|
|
29
29
|
return validateAndFixEnums({
|
|
30
30
|
id: metadata.id,
|
|
31
|
-
url:
|
|
31
|
+
url: baseImageSource,
|
|
32
32
|
preview_url: previewUrl,
|
|
33
33
|
repository,
|
|
34
34
|
pr_number: prNumber,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/image/report.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAU3E,MAAM,UAAU,4BAA4B,CAC1C,KAAwC;IAExC,MAAM,
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/image/report.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/vision/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAKL,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC5B,MAAM,YAAY,CAAC;AACpB,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,YAAY,CAAC;AAOpB,MAAM,WAAW,mCACf,SAAQ,qBAAqB;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/vision/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAKL,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC5B,MAAM,YAAY,CAAC;AACpB,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,YAAY,CAAC;AAOpB,MAAM,WAAW,mCACf,SAAQ,qBAAqB;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAiJD;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,CAAC,EAAE,MAAM,GACzB,OAAO,CAAC,qBAAqB,CAAC,CA4DhC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,qBAAqB,EACpC,iBAAiB,CAAC,EAAE,MAAM,GACzB,OAAO,CAAC,wBAAwB,CAAC,CA4EnC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,iBAAiB,CAAC,EAAE,MAAM,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAiK9B;AAED,wBAAsB,mCAAmC,CACvD,KAAK,EAAE,mCAAmC,EAAE,EAC5C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAiDnC"}
|
|
@@ -6,6 +6,7 @@ import { readFileSync, writeFileSync, unlinkSync } from "fs";
|
|
|
6
6
|
import { join } from "path";
|
|
7
7
|
import { v4 as uuidv4 } from "uuid";
|
|
8
8
|
import { tmpdir } from "os";
|
|
9
|
+
const DEFAULT_SECTION_EXPLANATION_CONCURRENCY = 4;
|
|
9
10
|
function isUnusableSectionExplanation(explanation) {
|
|
10
11
|
const normalized = explanation.trim().toLowerCase();
|
|
11
12
|
return (normalized.length < 24 ||
|
|
@@ -15,6 +16,116 @@ function isUnusableSectionExplanation(explanation) {
|
|
|
15
16
|
normalized === "visible differences are present." ||
|
|
16
17
|
normalized === "layout is different.");
|
|
17
18
|
}
|
|
19
|
+
async function mapWithConcurrency(items, concurrency, mapper) {
|
|
20
|
+
const results = new Array(items.length);
|
|
21
|
+
let nextIndex = 0;
|
|
22
|
+
async function worker() {
|
|
23
|
+
while (true) {
|
|
24
|
+
const currentIndex = nextIndex;
|
|
25
|
+
nextIndex += 1;
|
|
26
|
+
if (currentIndex >= items.length) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
results[currentIndex] = {
|
|
31
|
+
status: "fulfilled",
|
|
32
|
+
value: await mapper(items[currentIndex]),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
results[currentIndex] = {
|
|
37
|
+
status: "rejected",
|
|
38
|
+
reason: error,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const workerCount = Math.min(Math.max(1, concurrency), items.length);
|
|
44
|
+
await Promise.all(Array.from({ length: workerCount }, () => worker()));
|
|
45
|
+
return results;
|
|
46
|
+
}
|
|
47
|
+
async function requestSectionDiffExplanation(client, card, base_url, preview_url) {
|
|
48
|
+
const baseImage = readFileSync(card.base_screenshot).toString("base64");
|
|
49
|
+
const previewImage = readFileSync(card.preview_screenshot).toString("base64");
|
|
50
|
+
const diffImage = readFileSync(card.diff_image).toString("base64");
|
|
51
|
+
const response = await client.responses.create({
|
|
52
|
+
model: "gpt-5-mini",
|
|
53
|
+
input: [
|
|
54
|
+
{
|
|
55
|
+
role: "system",
|
|
56
|
+
content: [
|
|
57
|
+
{
|
|
58
|
+
type: "input_text",
|
|
59
|
+
text: "You are an expert visual UI reviewer. Compare one design crop, one webpage crop, and one diff image. Return valid JSON only.",
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
role: "user",
|
|
65
|
+
content: [
|
|
66
|
+
{
|
|
67
|
+
type: "input_text",
|
|
68
|
+
text: `Review this single section comparison from ${base_url} to ${preview_url}.
|
|
69
|
+
|
|
70
|
+
Section name: ${card.name}
|
|
71
|
+
Section id: ${card.section_id}
|
|
72
|
+
Match score: ${card.match_score.toFixed(3)}
|
|
73
|
+
Final similarity score: ${card.final_similarity_score.toFixed(3)}
|
|
74
|
+
Pixel difference: ${card.pixel_difference.toFixed(3)}
|
|
75
|
+
Edge difference: ${card.edge_difference.toFixed(3)}
|
|
76
|
+
Structural similarity: ${card.structural_similarity.toFixed(3)}
|
|
77
|
+
|
|
78
|
+
Write a human-readable explanation of what is visibly different in this section.
|
|
79
|
+
|
|
80
|
+
Rules:
|
|
81
|
+
- Do not decide whether the section matched; that was already determined.
|
|
82
|
+
- Mention at least one concrete visible element or property such as a heading, card, image, icon, button, text block, spacing, padding, alignment, border, background, column layout, or text wrapping.
|
|
83
|
+
- If the section looks visually close, say that and mention any minor visible deviation.
|
|
84
|
+
- If the crop looks ambiguous or weakly matched, say that clearly.
|
|
85
|
+
- Keep the explanation to 1 or 2 sentences.
|
|
86
|
+
- Do not use generic phrases like "overall layout structure differs", "a corresponding webpage region was found", or "the section differs materially from the design" unless you also name specific visible changes.
|
|
87
|
+
- explanation_confidence must be between 0 and 1.
|
|
88
|
+
|
|
89
|
+
Return ONLY JSON in this exact format:
|
|
90
|
+
{
|
|
91
|
+
"sections": [
|
|
92
|
+
{
|
|
93
|
+
"section_id": "${card.section_id}",
|
|
94
|
+
"explanation": "Concrete explanation of the visible difference.",
|
|
95
|
+
"explanation_confidence": 0.84
|
|
96
|
+
}
|
|
97
|
+
]
|
|
98
|
+
}`,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
type: "input_image",
|
|
102
|
+
image_url: `data:image/png;base64,${baseImage}`,
|
|
103
|
+
detail: "low",
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
type: "input_image",
|
|
107
|
+
image_url: `data:image/png;base64,${previewImage}`,
|
|
108
|
+
detail: "low",
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
type: "input_image",
|
|
112
|
+
image_url: `data:image/png;base64,${diffImage}`,
|
|
113
|
+
detail: "low",
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
});
|
|
119
|
+
const agentResponse = response.output_text || "";
|
|
120
|
+
const jsonString = extractJsonFromResponse(agentResponse) ?? agentResponse.trim();
|
|
121
|
+
const parsedJson = JSON.parse(jsonString);
|
|
122
|
+
const result = SectionDiffExplanationsSchema.parse(parsedJson);
|
|
123
|
+
const explanation = result.sections.find((section) => section.section_id === card.section_id);
|
|
124
|
+
if (!explanation || isUnusableSectionExplanation(explanation.explanation)) {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
return explanation;
|
|
128
|
+
}
|
|
18
129
|
/**
|
|
19
130
|
* Analyze base URL structure, sections, and layout.
|
|
20
131
|
*
|
|
@@ -315,93 +426,25 @@ export async function analyzeSectionDiffExplanationsAgent(cards, base_url, previ
|
|
|
315
426
|
apiKey: process.env.OPENAI_API_KEY,
|
|
316
427
|
});
|
|
317
428
|
const explanations = [];
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
role: "system",
|
|
328
|
-
content: [
|
|
329
|
-
{
|
|
330
|
-
type: "input_text",
|
|
331
|
-
text: "You are an expert visual UI reviewer. Compare one design crop, one webpage crop, and one diff image. Return valid JSON only.",
|
|
332
|
-
},
|
|
333
|
-
],
|
|
334
|
-
},
|
|
335
|
-
{
|
|
336
|
-
role: "user",
|
|
337
|
-
content: [
|
|
338
|
-
{
|
|
339
|
-
type: "input_text",
|
|
340
|
-
text: `Review this single section comparison from ${base_url} to ${preview_url}.
|
|
341
|
-
|
|
342
|
-
Section name: ${card.name}
|
|
343
|
-
Section id: ${card.section_id}
|
|
344
|
-
Match score: ${card.match_score.toFixed(3)}
|
|
345
|
-
Final similarity score: ${card.final_similarity_score.toFixed(3)}
|
|
346
|
-
Pixel difference: ${card.pixel_difference.toFixed(3)}
|
|
347
|
-
Edge difference: ${card.edge_difference.toFixed(3)}
|
|
348
|
-
Structural similarity: ${card.structural_similarity.toFixed(3)}
|
|
349
|
-
|
|
350
|
-
Write a human-readable explanation of what is visibly different in this section.
|
|
351
|
-
|
|
352
|
-
Rules:
|
|
353
|
-
- Do not decide whether the section matched; that was already determined.
|
|
354
|
-
- Mention at least one concrete visible element or property such as a heading, card, image, icon, button, text block, spacing, padding, alignment, border, background, column layout, or text wrapping.
|
|
355
|
-
- If the section looks visually close, say that and mention any minor visible deviation.
|
|
356
|
-
- If the crop looks ambiguous or weakly matched, say that clearly.
|
|
357
|
-
- Keep the explanation to 1 or 2 sentences.
|
|
358
|
-
- Do not use generic phrases like "overall layout structure differs", "a corresponding webpage region was found", or "the section differs materially from the design" unless you also name specific visible changes.
|
|
359
|
-
- explanation_confidence must be between 0 and 1.
|
|
360
|
-
|
|
361
|
-
Return ONLY JSON in this exact format:
|
|
362
|
-
{
|
|
363
|
-
"sections": [
|
|
364
|
-
{
|
|
365
|
-
"section_id": "${card.section_id}",
|
|
366
|
-
"explanation": "Concrete explanation of the visible difference.",
|
|
367
|
-
"explanation_confidence": 0.84
|
|
368
|
-
}
|
|
369
|
-
]
|
|
370
|
-
}`,
|
|
371
|
-
},
|
|
372
|
-
{
|
|
373
|
-
type: "input_image",
|
|
374
|
-
image_url: `data:image/png;base64,${baseImage}`,
|
|
375
|
-
detail: "high",
|
|
376
|
-
},
|
|
377
|
-
{
|
|
378
|
-
type: "input_image",
|
|
379
|
-
image_url: `data:image/png;base64,${previewImage}`,
|
|
380
|
-
detail: "high",
|
|
381
|
-
},
|
|
382
|
-
{
|
|
383
|
-
type: "input_image",
|
|
384
|
-
image_url: `data:image/png;base64,${diffImage}`,
|
|
385
|
-
detail: "high",
|
|
386
|
-
},
|
|
387
|
-
],
|
|
388
|
-
},
|
|
389
|
-
],
|
|
390
|
-
});
|
|
391
|
-
const agentResponse = response.output_text || "";
|
|
392
|
-
const jsonString = extractJsonFromResponse(agentResponse) ?? agentResponse.trim();
|
|
393
|
-
const parsedJson = JSON.parse(jsonString);
|
|
394
|
-
const result = SectionDiffExplanationsSchema.parse(parsedJson);
|
|
395
|
-
const explanation = result.sections.find((section) => section.section_id === card.section_id);
|
|
396
|
-
if (explanation && !isUnusableSectionExplanation(explanation.explanation)) {
|
|
397
|
-
explanations.push(explanation);
|
|
398
|
-
}
|
|
399
|
-
else {
|
|
400
|
-
console.warn(`Section explanation for ${card.section_id} was too generic or missing in model output.`);
|
|
401
|
-
}
|
|
429
|
+
const results = await mapWithConcurrency(cards, DEFAULT_SECTION_EXPLANATION_CONCURRENCY, (card) => requestSectionDiffExplanation(client, card, base_url, preview_url));
|
|
430
|
+
for (let index = 0; index < results.length; index++) {
|
|
431
|
+
const result = results[index];
|
|
432
|
+
const card = cards[index];
|
|
433
|
+
if (!card) {
|
|
434
|
+
continue;
|
|
435
|
+
}
|
|
436
|
+
if (!result) {
|
|
437
|
+
continue;
|
|
402
438
|
}
|
|
403
|
-
|
|
404
|
-
console.warn(`Section explanation request failed for ${card.section_id}: ${
|
|
439
|
+
if (result.status === "rejected") {
|
|
440
|
+
console.warn(`Section explanation request failed for ${card.section_id}: ${result.reason}`);
|
|
441
|
+
continue;
|
|
442
|
+
}
|
|
443
|
+
if (result.value) {
|
|
444
|
+
explanations.push(result.value);
|
|
445
|
+
}
|
|
446
|
+
else {
|
|
447
|
+
console.warn(`Section explanation for ${card.section_id} was too generic or missing in model output.`);
|
|
405
448
|
}
|
|
406
449
|
}
|
|
407
450
|
return explanations;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/vision/agents.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/vision/agents.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -10,19 +10,40 @@ export interface CompareUrlsInput {
|
|
|
10
10
|
previewUrl: string;
|
|
11
11
|
/** Page path to compare (e.g., "/" or "/about"). Defaults to "/". */
|
|
12
12
|
page?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Controls vision-based section explanations in deterministic section diffing.
|
|
15
|
+
* "fast" explains only problematic matched sections, "detailed" explains all
|
|
16
|
+
* matched sections, and "off" skips the LLM explanation step.
|
|
17
|
+
*/
|
|
18
|
+
sectionExplanationMode?: "fast" | "detailed" | "off";
|
|
13
19
|
/** Optional PR number for metadata. */
|
|
14
20
|
prNumber?: string;
|
|
15
21
|
/** Optional repository name for metadata. */
|
|
16
22
|
repository?: string;
|
|
17
23
|
}
|
|
18
24
|
/**
|
|
19
|
-
* Input parameters for
|
|
25
|
+
* Input parameters for compareImageToUrl function.
|
|
20
26
|
*/
|
|
21
|
-
export interface
|
|
22
|
-
/**
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
27
|
+
export interface CompareImageToUrlInput {
|
|
28
|
+
/**
|
|
29
|
+
* Base/reference image source to compare against.
|
|
30
|
+
* Accepts HTTP(S) image URLs or data:image/... URLs.
|
|
31
|
+
*/
|
|
32
|
+
baseImageSource: string;
|
|
33
|
+
/** Preview/changed webpage URL to analyze. */
|
|
34
|
+
previewUrl: string;
|
|
35
|
+
/** Page path to compare (e.g., "/" or "/about"). Defaults to "/". */
|
|
36
|
+
page?: string;
|
|
37
|
+
/**
|
|
38
|
+
* Controls vision-based section explanations in deterministic section diffing.
|
|
39
|
+
* "fast" explains only problematic matched sections, "detailed" explains all
|
|
40
|
+
* matched sections, and "off" skips the LLM explanation step.
|
|
41
|
+
*/
|
|
42
|
+
sectionExplanationMode?: "fast" | "detailed" | "off";
|
|
43
|
+
/** Optional PR number for metadata. */
|
|
44
|
+
prNumber?: string;
|
|
45
|
+
/** Optional repository name for metadata. */
|
|
46
|
+
repository?: string;
|
|
26
47
|
}
|
|
27
48
|
/**
|
|
28
49
|
* Image paths returned from comparison.
|
|
@@ -54,7 +75,7 @@ export interface CompareUrlsOutput {
|
|
|
54
75
|
images: ComparisonImages;
|
|
55
76
|
}
|
|
56
77
|
/**
|
|
57
|
-
* Output structure for
|
|
78
|
+
* Output structure for compareImageToUrl function.
|
|
58
79
|
*/
|
|
59
|
-
export type
|
|
80
|
+
export type CompareImageToUrlOutput = CompareUrlsOutput;
|
|
60
81
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC;IACrD,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAC;IACxB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC;IACrD,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,kCAAkC;IAClC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzE;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iCAAiC;IACjC,MAAM,EAAE,YAAY,CAAC;IACrB,sCAAsC;IACtC,eAAe,EAAE,oBAAoB,CAAC;IACtC,wCAAwC;IACxC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,iBAAiB,CAAC"}
|