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.
Files changed (37) hide show
  1. package/README.md +13 -9
  2. package/dist/compare-image-to-url.d.ts +16 -0
  3. package/dist/compare-image-to-url.d.ts.map +1 -0
  4. package/dist/compare-image-to-url.js +114 -0
  5. package/dist/compare-image-to-url.js.map +1 -0
  6. package/dist/compare-urls.d.ts.map +1 -1
  7. package/dist/compare-urls.js +17 -5
  8. package/dist/compare-urls.js.map +1 -1
  9. package/dist/index.d.ts +2 -2
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/runtime/comparison/core.d.ts +6 -0
  14. package/dist/runtime/comparison/core.d.ts.map +1 -1
  15. package/dist/runtime/comparison/core.js.map +1 -1
  16. package/dist/runtime/comparison/image-core.d.ts +6 -4
  17. package/dist/runtime/comparison/image-core.d.ts.map +1 -1
  18. package/dist/runtime/comparison/image-core.js +37 -31
  19. package/dist/runtime/comparison/image-core.js.map +1 -1
  20. package/dist/runtime/comparison/image-image-core.d.ts +2 -0
  21. package/dist/runtime/comparison/image-image-core.d.ts.map +1 -1
  22. package/dist/runtime/comparison/image-image-core.js +34 -28
  23. package/dist/runtime/comparison/image-image-core.js.map +1 -1
  24. package/dist/runtime/comparison/section-explanation-mode.d.ts +3 -0
  25. package/dist/runtime/comparison/section-explanation-mode.d.ts.map +1 -0
  26. package/dist/runtime/comparison/section-explanation-mode.js +10 -0
  27. package/dist/runtime/comparison/section-explanation-mode.js.map +1 -0
  28. package/dist/runtime/image/report.d.ts +1 -1
  29. package/dist/runtime/image/report.d.ts.map +1 -1
  30. package/dist/runtime/image/report.js +2 -2
  31. package/dist/runtime/image/report.js.map +1 -1
  32. package/dist/runtime/vision/agents.d.ts.map +1 -1
  33. package/dist/runtime/vision/agents.js +129 -86
  34. package/dist/runtime/vision/agents.js.map +1 -1
  35. package/dist/types.d.ts +29 -8
  36. package/dist/types.d.ts.map +1 -1
  37. 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 { compareImages, compareUrls } from "bruniai";
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 compareImages({
29
- baseImage: "https://example.com/design.png",
30
- previewImage: "data:image/png;base64,...",
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
- ### `compareImages(input: CompareImagesInput): Promise<CompareImagesOutput>`
58
+ ### `compareImageToUrl(input: CompareImageToUrlInput): Promise<CompareImageToUrlOutput>`
58
59
 
59
- Performs a visual comparison between two images.
60
+ Performs a visual comparison between a base image source and a preview URL.
60
61
 
61
62
  **Parameters:**
62
63
 
63
- - `baseImage` (string): Base/reference image as an HTTP(S) URL or `data:image/...`
64
- - `previewImage` (string): Preview/changed image as an HTTP(S) URL or `data:image/...`
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 images and diff images
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;AAYtE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAiE5B"}
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"}
@@ -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
- const comparisonCoreModulePromise = import.meta.url.includes("/packages/bruniai/src/")
6
- ? import("../../../dist/comparison/core.js")
7
- : import("./runtime/comparison/core.js");
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 comparisonCoreModulePromise;
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,
@@ -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,2BAA2B,GAC/B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAChD,CAAC,CAAC,MAAM,CAAC,kCAAkC,CAAC;IAC5C,CAAC,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,KAAuB;IAEvB,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,KAAK,CAAC;IAClD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,2BAA2B,CAAC;IAEhE,yCAAyC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,wBAAwB;IACxB,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC;QAC9B,GAAG,EAAE,OAAO;QACZ,yBAAyB,EAAE;YACzB,QAAQ,EAAE,IAAI;SACf;KACF,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;QAEvB,+BAA+B;QAC/B,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;YACrC,SAAS;YACT,OAAO;YACP,UAAU;YACV,IAAI;YACJ,SAAS;YACT,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC,CAAC;QAEH,0BAA0B;QAC1B,kFAAkF;QAClF,MAAM,MAAM,GACV,MAAM,CAAC,eAAe,CAAC,MAAM,KAAK,MAAM;YACtC,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC;QAEpC,MAAM,MAAM,GAAsB;YAChC,MAAM;YACN,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,MAAM,EAAE;gBACN,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;gBAC7C,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,mBAAmB,EACjB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,MAAM,GAAG,CAAC;oBAChD,CAAC,CAAC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAC5C,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;wBAChB,GAAG;wBACH,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;qBAC7C,CACF,CACF;oBACH,CAAC,CAAC,SAAS;aAChB;SACF,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC"}
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 { compareImages } from "./compare-images.js";
9
- export type { CompareImagesInput, CompareImagesOutput, CompareUrlsInput, CompareUrlsOutput, ComparisonImages, } from "./types.js";
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
@@ -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,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
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 { compareImages } from "./compare-images.js";
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,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
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":"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"}
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
- export interface ImageComparisonOptions {
10
+ import { type SectionExplanationMode } from "./section-explanation-mode.js";
11
+ export interface ImageToUrlComparisonOptions {
11
12
  stagehand: Stagehand;
12
- baseImageUrl: string;
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 ImageComparisonResult {
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 performImageComparison(options: ImageComparisonOptions): Promise<ImageComparisonResult>;
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;AAKhE,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,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,sBAAsB,CAC1C,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAuRhC"}
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 performImageComparison(options) {
42
- const { stagehand, baseImageUrl, previewUrl, page, imagesDir, prNumber = "", repository = "", } = options;
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(baseImageUrl, baseOriginalPath);
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
- if (process.env.OPENAI_API_KEY) {
114
- const explainableSections = sectionMatches
115
- .filter((match) => match.status !== "missing")
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);
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, baseImageUrl, previewUrl);
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 match of sectionMatches) {
169
- if (match.status === "missing") {
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 match of sectionMatches) {
182
- if (match.status === "missing") {
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
- baseUrl: baseImageUrl,
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":"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"}
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;AAIhE,MAAM,WAAW,6BAA6B;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,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,CAiRvC"}
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
- if (process.env.OPENAI_API_KEY) {
110
- const explainableSections = sectionMatches
111
- .filter((match) => match.status !== "missing")
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);
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 match of sectionMatches) {
165
- if (match.status === "missing") {
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 match of sectionMatches) {
178
- if (match.status === "missing") {
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
- baseUrl: baseImageUrl,
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":"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"}
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,3 @@
1
+ export type SectionExplanationMode = "fast" | "detailed" | "off";
2
+ export declare function shouldExplainSection(status: "missing" | "problematic" | "matched", mode: SectionExplanationMode): boolean;
3
+ //# sourceMappingURL=section-explanation-mode.d.ts.map
@@ -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,10 @@
1
+ export function shouldExplainSection(status, mode) {
2
+ if (mode === "off") {
3
+ return false;
4
+ }
5
+ if (mode === "detailed") {
6
+ return status !== "missing";
7
+ }
8
+ return status === "problematic";
9
+ }
10
+ //# sourceMappingURL=section-explanation-mode.js.map
@@ -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
- baseUrl: string;
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,OAAO,EAAE,MAAM,CAAC;IAChB,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,CA8GtB"}
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 { baseUrl, previewUrl, prNumber, repository, sectionMatches } = input;
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: baseUrl,
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":"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"}
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;AAcD;;;;;;;;;;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,CA6GnC"}
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
- for (const card of cards) {
319
- try {
320
- const baseImage = readFileSync(card.base_screenshot).toString("base64");
321
- const previewImage = readFileSync(card.preview_screenshot).toString("base64");
322
- const diffImage = readFileSync(card.diff_image).toString("base64");
323
- const response = await client.responses.create({
324
- model: "gpt-5-mini",
325
- input: [
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
- catch (error) {
404
- console.warn(`Section explanation request failed for ${card.section_id}: ${error}`);
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 compareImages function.
25
+ * Input parameters for compareImageToUrl function.
20
26
  */
21
- export interface CompareImagesInput {
22
- /** Base/reference image to compare against. Accepts HTTP(S) URLs or data URLs. */
23
- baseImage: string;
24
- /** Preview/changed image to analyze. Accepts HTTP(S) URLs or data URLs. */
25
- previewImage: string;
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 compareImages function.
78
+ * Output structure for compareImageToUrl function.
58
79
  */
59
- export type CompareImagesOutput = CompareUrlsOutput;
80
+ export type CompareImageToUrlOutput = CompareUrlsOutput;
60
81
  //# sourceMappingURL=types.d.ts.map
@@ -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,kBAAkB;IACjC,kFAAkF;IAClF,SAAS,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,YAAY,EAAE,MAAM,CAAC;CACtB;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,mBAAmB,GAAG,iBAAiB,CAAC"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bruniai",
3
- "version": "0.1.13",
3
+ "version": "0.1.14",
4
4
  "type": "module",
5
5
  "description": "AI-powered visual regression testing tool - core comparison library",
6
6
  "author": "Joao Garin",