cbrowser 18.73.2 → 18.74.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/analysis/accessibility-empathy.d.ts.map +1 -1
  2. package/dist/analysis/accessibility-empathy.js +113 -8
  3. package/dist/analysis/accessibility-empathy.js.map +1 -1
  4. package/dist/analysis/agent-ready-audit.d.ts.map +1 -1
  5. package/dist/analysis/agent-ready-audit.js +66 -5
  6. package/dist/analysis/agent-ready-audit.js.map +1 -1
  7. package/dist/analysis/natural-language.d.ts.map +1 -1
  8. package/dist/analysis/natural-language.js +9 -8
  9. package/dist/analysis/natural-language.js.map +1 -1
  10. package/dist/analysis/page-understanding.d.ts.map +1 -1
  11. package/dist/analysis/page-understanding.js +115 -14
  12. package/dist/analysis/page-understanding.js.map +1 -1
  13. package/dist/analysis/webmcp-readiness.d.ts.map +1 -1
  14. package/dist/analysis/webmcp-readiness.js +18 -7
  15. package/dist/analysis/webmcp-readiness.js.map +1 -1
  16. package/dist/artifact-store.d.ts +55 -0
  17. package/dist/artifact-store.d.ts.map +1 -0
  18. package/dist/artifact-store.js +63 -0
  19. package/dist/artifact-store.js.map +1 -0
  20. package/dist/browser.d.ts +8 -0
  21. package/dist/browser.d.ts.map +1 -1
  22. package/dist/browser.js +157 -41
  23. package/dist/browser.js.map +1 -1
  24. package/dist/cli.js +12 -0
  25. package/dist/cli.js.map +1 -1
  26. package/dist/config.d.ts.map +1 -1
  27. package/dist/config.js +28 -1
  28. package/dist/config.js.map +1 -1
  29. package/dist/mcp-server-remote.d.ts +17 -1
  30. package/dist/mcp-server-remote.d.ts.map +1 -1
  31. package/dist/mcp-server-remote.js +22 -3
  32. package/dist/mcp-server-remote.js.map +1 -1
  33. package/dist/mcp-server.d.ts.map +1 -1
  34. package/dist/mcp-server.js +20 -0
  35. package/dist/mcp-server.js.map +1 -1
  36. package/dist/mcp-tools/base/analysis-tools.d.ts +1 -1
  37. package/dist/mcp-tools/base/analysis-tools.d.ts.map +1 -1
  38. package/dist/mcp-tools/base/analysis-tools.js +83 -10
  39. package/dist/mcp-tools/base/analysis-tools.js.map +1 -1
  40. package/dist/mcp-tools/base/assertion-tools.d.ts +1 -1
  41. package/dist/mcp-tools/base/assertion-tools.d.ts.map +1 -1
  42. package/dist/mcp-tools/base/assertion-tools.js +26 -3
  43. package/dist/mcp-tools/base/assertion-tools.js.map +1 -1
  44. package/dist/mcp-tools/base/audit-tools.d.ts.map +1 -1
  45. package/dist/mcp-tools/base/audit-tools.js +189 -28
  46. package/dist/mcp-tools/base/audit-tools.js.map +1 -1
  47. package/dist/mcp-tools/base/browser-management-tools.d.ts +1 -1
  48. package/dist/mcp-tools/base/browser-management-tools.d.ts.map +1 -1
  49. package/dist/mcp-tools/base/browser-management-tools.js +66 -15
  50. package/dist/mcp-tools/base/browser-management-tools.js.map +1 -1
  51. package/dist/mcp-tools/base/browser-state-tools.d.ts.map +1 -1
  52. package/dist/mcp-tools/base/browser-state-tools.js +6 -1
  53. package/dist/mcp-tools/base/browser-state-tools.js.map +1 -1
  54. package/dist/mcp-tools/base/cognitive-tools.d.ts.map +1 -1
  55. package/dist/mcp-tools/base/cognitive-tools.js +103 -30
  56. package/dist/mcp-tools/base/cognitive-tools.js.map +1 -1
  57. package/dist/mcp-tools/base/extraction-tools.d.ts.map +1 -1
  58. package/dist/mcp-tools/base/extraction-tools.js +6 -0
  59. package/dist/mcp-tools/base/extraction-tools.js.map +1 -1
  60. package/dist/mcp-tools/base/gif-tools.d.ts.map +1 -1
  61. package/dist/mcp-tools/base/gif-tools.js +7 -7
  62. package/dist/mcp-tools/base/gif-tools.js.map +1 -1
  63. package/dist/mcp-tools/base/interaction-tools.d.ts.map +1 -1
  64. package/dist/mcp-tools/base/interaction-tools.js +76 -11
  65. package/dist/mcp-tools/base/interaction-tools.js.map +1 -1
  66. package/dist/mcp-tools/base/persona-comparison-tools.d.ts.map +1 -1
  67. package/dist/mcp-tools/base/persona-comparison-tools.js +78 -10
  68. package/dist/mcp-tools/base/persona-comparison-tools.js.map +1 -1
  69. package/dist/mcp-tools/base/session-tools.d.ts +1 -1
  70. package/dist/mcp-tools/base/session-tools.d.ts.map +1 -1
  71. package/dist/mcp-tools/base/session-tools.js +64 -7
  72. package/dist/mcp-tools/base/session-tools.js.map +1 -1
  73. package/dist/mcp-tools/base/site-knowledge-tools.d.ts.map +1 -1
  74. package/dist/mcp-tools/base/site-knowledge-tools.js +47 -1
  75. package/dist/mcp-tools/base/site-knowledge-tools.js.map +1 -1
  76. package/dist/mcp-tools/base/testing-tools.d.ts.map +1 -1
  77. package/dist/mcp-tools/base/testing-tools.js +20 -0
  78. package/dist/mcp-tools/base/testing-tools.js.map +1 -1
  79. package/dist/mcp-tools/base/visual-testing-tools.d.ts.map +1 -1
  80. package/dist/mcp-tools/base/visual-testing-tools.js +71 -46
  81. package/dist/mcp-tools/base/visual-testing-tools.js.map +1 -1
  82. package/dist/mcp-tools/persona-creation-tools.d.ts.map +1 -1
  83. package/dist/mcp-tools/persona-creation-tools.js +40 -10
  84. package/dist/mcp-tools/persona-creation-tools.js.map +1 -1
  85. package/dist/mcp-tools/session-policy.d.ts +43 -0
  86. package/dist/mcp-tools/session-policy.d.ts.map +1 -0
  87. package/dist/mcp-tools/session-policy.js +54 -0
  88. package/dist/mcp-tools/session-policy.js.map +1 -0
  89. package/dist/mcp-ui-resources.d.ts +83 -0
  90. package/dist/mcp-ui-resources.d.ts.map +1 -0
  91. package/dist/mcp-ui-resources.js +128 -0
  92. package/dist/mcp-ui-resources.js.map +1 -0
  93. package/dist/performance/metrics.d.ts +0 -3
  94. package/dist/performance/metrics.d.ts.map +1 -1
  95. package/dist/performance/metrics.js +45 -1
  96. package/dist/performance/metrics.js.map +1 -1
  97. package/dist/personas.d.ts.map +1 -1
  98. package/dist/personas.js +38 -4
  99. package/dist/personas.js.map +1 -1
  100. package/dist/remediation/patch-generator.d.ts.map +1 -1
  101. package/dist/remediation/patch-generator.js +36 -2
  102. package/dist/remediation/patch-generator.js.map +1 -1
  103. package/dist/selector-escape.d.ts +37 -0
  104. package/dist/selector-escape.d.ts.map +1 -0
  105. package/dist/selector-escape.js +83 -0
  106. package/dist/selector-escape.js.map +1 -0
  107. package/dist/testing/coverage.d.ts +8 -0
  108. package/dist/testing/coverage.d.ts.map +1 -1
  109. package/dist/testing/coverage.js +12 -0
  110. package/dist/testing/coverage.js.map +1 -1
  111. package/dist/types.d.ts +42 -0
  112. package/dist/types.d.ts.map +1 -1
  113. package/dist/types.js.map +1 -1
  114. package/dist/visual/attention-quality.d.ts +0 -9
  115. package/dist/visual/attention-quality.d.ts.map +1 -1
  116. package/dist/visual/attention-quality.js +28 -1
  117. package/dist/visual/attention-quality.js.map +1 -1
  118. package/dist/visual/barrier-overlay-html.d.ts +88 -0
  119. package/dist/visual/barrier-overlay-html.d.ts.map +1 -0
  120. package/dist/visual/barrier-overlay-html.js +142 -0
  121. package/dist/visual/barrier-overlay-html.js.map +1 -0
  122. package/dist/visual/cognitive-transport.d.ts +15 -8
  123. package/dist/visual/cognitive-transport.d.ts.map +1 -1
  124. package/dist/visual/cognitive-transport.js +113 -34
  125. package/dist/visual/cognitive-transport.js.map +1 -1
  126. package/dist/visual/cross-browser.d.ts +13 -0
  127. package/dist/visual/cross-browser.d.ts.map +1 -1
  128. package/dist/visual/cross-browser.js +29 -3
  129. package/dist/visual/cross-browser.js.map +1 -1
  130. package/dist/visual/perceptual-transport.d.ts +8 -0
  131. package/dist/visual/perceptual-transport.d.ts.map +1 -1
  132. package/dist/visual/perceptual-transport.js +19 -0
  133. package/dist/visual/perceptual-transport.js.map +1 -1
  134. package/dist/visual/regression.d.ts.map +1 -1
  135. package/dist/visual/regression.js +76 -3
  136. package/dist/visual/regression.js.map +1 -1
  137. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"attention-quality.js","sourceRoot":"","sources":["../../src/visual/attention-quality.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attention-quality.js","sourceRoot":"","sources":["../../src/visual/attention-quality.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Barrier overlay HTML.
3
+ *
4
+ * `empathy_audit` reports a barrier as a type, a severity, a WCAG criterion and
5
+ * a rectangle. That is everything needed to draw it, and drawing it is the point
6
+ * — an empathy score stated in prose has to be taken on faith, while the same
7
+ * score with the barriers marked on the page is something a reader can look at
8
+ * and disagree with. Falsifiable by eye.
9
+ *
10
+ * Two decisions worth stating, because both are places this is easy to get
11
+ * wrong:
12
+ *
13
+ * **Percentages, not pixels.** Rects arrive in document CSS pixels against a
14
+ * capture of known width and height. Positioning them in pixels would need the
15
+ * rendered image size, which depends on the host's iframe width and is not
16
+ * knowable here — so any fixed scale factor is wrong at every width but one.
17
+ * Expressing each rect as a percentage of the same capture box makes the image
18
+ * and its rects share one scale *by construction*: the browser rescales both
19
+ * together and there is no factor to compute, or to get wrong. That is what
20
+ * ISC-75 asks for, obtained structurally rather than arithmetically.
21
+ *
22
+ * **Out-of-bounds rects are listed, not drawn.** A `scope: "full_page"` audit
23
+ * scrolls, so a rect can legitimately fall outside the captured image. Clamping
24
+ * it would put a box on innocent content and assert something false about the
25
+ * page; dropping it silently would hide a real barrier. Both are worse than
26
+ * saying where it went.
27
+ *
28
+ * @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
29
+ * @license MIT
30
+ */
31
+ /** Severity -> colour. Fixed, because the legend has to mean one thing. */
32
+ export declare const SEVERITY_COLORS: Record<string, string>;
33
+ export interface OverlayRect {
34
+ type?: string;
35
+ severity?: string;
36
+ element?: string;
37
+ description?: string;
38
+ wcag?: string[];
39
+ rect?: {
40
+ x: number;
41
+ y: number;
42
+ width: number;
43
+ height: number;
44
+ };
45
+ outsideScreenshot?: boolean;
46
+ }
47
+ export interface BarrierOverlayInput {
48
+ /** Publicly fetchable URL of the capture. Without it there is nothing to draw on. */
49
+ imageUrl: string;
50
+ /** Width of the capture in CSS px (viewportSize.width). */
51
+ imageWidth: number;
52
+ /** Height of the capture in CSS px — viewport height, or document height for full_page. */
53
+ captureHeight: number;
54
+ barrierRects: OverlayRect[];
55
+ persona: string;
56
+ pageUrl: string;
57
+ score?: number;
58
+ }
59
+ /** Escape for HTML text and double-quoted attribute contexts. */
60
+ export declare function esc(value: unknown): string;
61
+ /** A rect's box as percentages of the capture, so it scales with the image. */
62
+ export declare function rectToPercent(rect: {
63
+ x: number;
64
+ y: number;
65
+ width: number;
66
+ height: number;
67
+ }, imageWidth: number, captureHeight: number): {
68
+ left: number;
69
+ top: number;
70
+ width: number;
71
+ height: number;
72
+ };
73
+ /** True when the rect lies wholly or partly within the captured image. */
74
+ export declare function isInBounds(rect: {
75
+ x: number;
76
+ y: number;
77
+ width: number;
78
+ height: number;
79
+ }, imageWidth: number, captureHeight: number): boolean;
80
+ /**
81
+ * Build a self-contained overlay document.
82
+ *
83
+ * Returns `null` when there is no image to draw on — a legend floating above
84
+ * nothing is not a report, and emitting one would be the "advertise what wasn't
85
+ * produced" failure the artifact store exists to prevent.
86
+ */
87
+ export declare function buildBarrierOverlayHtml(input: BarrierOverlayInput): string | null;
88
+ //# sourceMappingURL=barrier-overlay-html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"barrier-overlay-html.d.ts","sourceRoot":"","sources":["../../src/visual/barrier-overlay-html.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,2EAA2E;AAC3E,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKlD,CAAC;AAIF,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,qFAAqF;IACrF,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,2FAA2F;IAC3F,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,iEAAiE;AACjE,wBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAO1C;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAC3B,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC7D,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAS9D;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,CACxB,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC7D,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,OAAO,CAOT;AAMD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,GAAG,IAAI,CAmFjF"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Barrier overlay HTML.
3
+ *
4
+ * `empathy_audit` reports a barrier as a type, a severity, a WCAG criterion and
5
+ * a rectangle. That is everything needed to draw it, and drawing it is the point
6
+ * — an empathy score stated in prose has to be taken on faith, while the same
7
+ * score with the barriers marked on the page is something a reader can look at
8
+ * and disagree with. Falsifiable by eye.
9
+ *
10
+ * Two decisions worth stating, because both are places this is easy to get
11
+ * wrong:
12
+ *
13
+ * **Percentages, not pixels.** Rects arrive in document CSS pixels against a
14
+ * capture of known width and height. Positioning them in pixels would need the
15
+ * rendered image size, which depends on the host's iframe width and is not
16
+ * knowable here — so any fixed scale factor is wrong at every width but one.
17
+ * Expressing each rect as a percentage of the same capture box makes the image
18
+ * and its rects share one scale *by construction*: the browser rescales both
19
+ * together and there is no factor to compute, or to get wrong. That is what
20
+ * ISC-75 asks for, obtained structurally rather than arithmetically.
21
+ *
22
+ * **Out-of-bounds rects are listed, not drawn.** A `scope: "full_page"` audit
23
+ * scrolls, so a rect can legitimately fall outside the captured image. Clamping
24
+ * it would put a box on innocent content and assert something false about the
25
+ * page; dropping it silently would hide a real barrier. Both are worse than
26
+ * saying where it went.
27
+ *
28
+ * @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
29
+ * @license MIT
30
+ */
31
+ /** Severity -> colour. Fixed, because the legend has to mean one thing. */
32
+ export const SEVERITY_COLORS = {
33
+ critical: "#ef4444",
34
+ major: "#f59e0b",
35
+ moderate: "#eab308",
36
+ minor: "#38bdf8",
37
+ };
38
+ const DEFAULT_COLOR = "#94a3b8";
39
+ /** Escape for HTML text and double-quoted attribute contexts. */
40
+ export function esc(value) {
41
+ return String(value ?? "")
42
+ .replace(/&/g, "&amp;")
43
+ .replace(/</g, "&lt;")
44
+ .replace(/>/g, "&gt;")
45
+ .replace(/"/g, "&quot;")
46
+ .replace(/'/g, "&#39;");
47
+ }
48
+ /** A rect's box as percentages of the capture, so it scales with the image. */
49
+ export function rectToPercent(rect, imageWidth, captureHeight) {
50
+ const w = imageWidth > 0 ? imageWidth : 1;
51
+ const h = captureHeight > 0 ? captureHeight : 1;
52
+ return {
53
+ left: (rect.x / w) * 100,
54
+ top: (rect.y / h) * 100,
55
+ width: (rect.width / w) * 100,
56
+ height: (rect.height / h) * 100,
57
+ };
58
+ }
59
+ /** True when the rect lies wholly or partly within the captured image. */
60
+ export function isInBounds(rect, imageWidth, captureHeight) {
61
+ return (rect.x + rect.width > 0 &&
62
+ rect.y + rect.height > 0 &&
63
+ rect.x < imageWidth &&
64
+ rect.y < captureHeight);
65
+ }
66
+ function colorFor(severity) {
67
+ return SEVERITY_COLORS[String(severity ?? "").toLowerCase()] ?? DEFAULT_COLOR;
68
+ }
69
+ /**
70
+ * Build a self-contained overlay document.
71
+ *
72
+ * Returns `null` when there is no image to draw on — a legend floating above
73
+ * nothing is not a report, and emitting one would be the "advertise what wasn't
74
+ * produced" failure the artifact store exists to prevent.
75
+ */
76
+ export function buildBarrierOverlayHtml(input) {
77
+ const { imageUrl, imageWidth, captureHeight, barrierRects, persona, pageUrl, score } = input;
78
+ if (!imageUrl || !imageWidth || !captureHeight)
79
+ return null;
80
+ const withRects = (barrierRects ?? []).filter((b) => b.rect);
81
+ const drawn = withRects.filter((b) => !b.outsideScreenshot && isInBounds(b.rect, imageWidth, captureHeight));
82
+ const offscreen = withRects.filter((b) => b.outsideScreenshot || !isInBounds(b.rect, imageWidth, captureHeight));
83
+ const boxes = drawn
84
+ .map((b) => {
85
+ const p = rectToPercent(b.rect, imageWidth, captureHeight);
86
+ const color = colorFor(b.severity);
87
+ const wcag = (b.wcag ?? []).join(", ");
88
+ // The label is the accessible name: colour alone must never be the only
89
+ // carrier of meaning (WCAG 1.4.1), least of all in an accessibility tool.
90
+ const label = `${b.severity ?? "barrier"}: ${b.type ?? "issue"}${wcag ? ` (WCAG ${wcag})` : ""} — ${b.element ?? ""} ${b.description ?? ""}`.trim();
91
+ return (`<div class="bx" style="left:${p.left.toFixed(3)}%;top:${p.top.toFixed(3)}%;` +
92
+ `width:${p.width.toFixed(3)}%;height:${p.height.toFixed(3)}%;` +
93
+ `border-color:${color};box-shadow:0 0 0 1px ${color}55" ` +
94
+ `title="${esc(label)}" aria-label="${esc(label)}" role="img"></div>`);
95
+ })
96
+ .join("\n");
97
+ const severitiesPresent = Array.from(new Set(drawn.map((b) => String(b.severity ?? "").toLowerCase()).filter(Boolean)));
98
+ const legend = severitiesPresent
99
+ .map((sev) => `<li><span class="sw" style="background:${SEVERITY_COLORS[sev] ?? DEFAULT_COLOR}"></span>${esc(sev)} (${drawn.filter((b) => String(b.severity).toLowerCase() === sev).length})</li>`)
100
+ .join("");
101
+ const offscreenList = offscreen.length
102
+ ? `<section class="off"><h2>Outside the capture (${offscreen.length})</h2><p>These barriers are real but fall outside the captured image, so they are listed rather than drawn.</p><ul>${offscreen
103
+ .map((b) => `<li><b>${esc(b.severity ?? "barrier")}</b> ${esc(b.type ?? "")} — ${esc(b.element ?? "")} <span class="at">at y=${esc(Math.round(b.rect.y))}</span></li>`)
104
+ .join("")}</ul></section>`
105
+ : "";
106
+ return `<!doctype html>
107
+ <html lang="en"><head><meta charset="utf-8">
108
+ <meta name="viewport" content="width=device-width, initial-scale=1">
109
+ <title>Barrier overlay — ${esc(persona)}</title>
110
+ <style>
111
+ :root{color-scheme:dark}
112
+ *{box-sizing:border-box}
113
+ body{margin:0;padding:16px;background:#0f172a;color:#e2e8f0;
114
+ font:14px/1.5 system-ui,-apple-system,Segoe UI,sans-serif}
115
+ h1{font-size:18px;margin:0 0 4px}
116
+ .meta{color:#94a3b8;font-size:13px;margin-bottom:12px;word-break:break-word}
117
+ .wrap{position:relative;display:block;max-width:100%;margin:0 auto;
118
+ border:1px solid #1e293b;border-radius:8px;overflow:hidden;background:#1e293b}
119
+ .wrap img{display:block;width:100%;height:auto}
120
+ .bx{position:absolute;border:2px solid;border-radius:2px;pointer-events:auto}
121
+ ul.lg{list-style:none;display:flex;flex-wrap:wrap;gap:12px;padding:0;margin:12px 0 0;font-size:13px}
122
+ ul.lg li{display:flex;align-items:center;gap:6px}
123
+ .sw{width:12px;height:12px;border-radius:2px;display:inline-block}
124
+ .off{margin-top:16px;padding:12px;background:#1e293b;border-radius:8px}
125
+ .off h2{font-size:14px;margin:0 0 6px}
126
+ .off p{color:#94a3b8;font-size:12px;margin:0 0 8px}
127
+ .off ul{margin:0;padding-left:18px}
128
+ .at{color:#94a3b8}
129
+ .none{color:#94a3b8;font-style:italic;margin-top:12px}
130
+ </style></head>
131
+ <body>
132
+ <h1>Accessibility barriers — ${esc(persona)}</h1>
133
+ <div class="meta">${esc(pageUrl)}${score !== undefined ? ` · empathy score ${esc(score)}` : ""} · ${drawn.length} drawn${offscreen.length ? `, ${offscreen.length} outside capture` : ""}</div>
134
+ <div class="wrap">
135
+ <img src="${esc(imageUrl)}" alt="Screenshot of ${esc(pageUrl)} with detected accessibility barriers outlined">
136
+ ${boxes}
137
+ </div>
138
+ ${severitiesPresent.length ? `<ul class="lg">${legend}</ul>` : `<p class="none">No barriers fell within the captured image.</p>`}
139
+ ${offscreenList}
140
+ </body></html>`;
141
+ }
142
+ //# sourceMappingURL=barrier-overlay-html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"barrier-overlay-html.js","sourceRoot":"","sources":["../../src/visual/barrier-overlay-html.ts"],"names":[],"mappings":"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"}
@@ -77,7 +77,7 @@ export interface AdversarialPersona {
77
77
  delta: number;
78
78
  }>;
79
79
  }
80
- export declare const COGNITIVE_TRAITS: readonly ["patience", "riskTolerance", "comprehension", "frustrationResponse", "resilience", "confidenceLevel", "decisionStyle", "satisficing", "impulsivity", "goalPersistence", "taskSwitching", "planningHorizon", "attentionPattern", "visualProcessing", "informationFiltering", "trustCalibration", "socialProofSensitivity", "authorityResponse", "motorPrecision", "reactionTime", "workingMemory", "processingSpeed", "contrastSensitivity", "colorPerception", "textProcessing"];
80
+ export declare const COGNITIVE_TRAITS: readonly ["patience", "riskTolerance", "comprehension", "persistence", "resilience", "selfEfficacy", "emotionalContagion", "attributionStyle", "satisficing", "anchoringBias", "timeHorizon", "fearOfMissingOut", "interruptRecovery", "metacognitivePlanning", "proceduralFluency", "transferLearning", "informationForaging", "changeBlindness", "mentalModelRigidity", "trustCalibration", "socialProofSensitivity", "authoritySensitivity", "workingMemory", "readingTendency", "curiosity", "siteFamiliarity"];
81
81
  export type CognitiveTrait = typeof COGNITIVE_TRAITS[number];
82
82
  /**
83
83
  * Normalize trait values to a probability measure (simplex).
@@ -92,12 +92,6 @@ export declare function distributionToTraits(dist: Float64Array): Record<string,
92
92
  * Build a OTCognitiveProfile from raw trait values.
93
93
  */
94
94
  export declare function buildOTCognitiveProfile(name: string, traits: Record<string, number>): OTCognitiveProfile;
95
- /**
96
- * Compute the Wasserstein-1 distance between two cognitive profiles.
97
- * Uses the ground metric between traits to weight the transport.
98
- *
99
- * This is the "true cognitive distance" — how different two minds are.
100
- */
101
95
  export declare function cognitiveDistance(profileA: OTCognitiveProfile, profileB: OTCognitiveProfile): CognitiveDistance;
102
96
  /**
103
97
  * Compute the Wasserstein barycenter of multiple cognitive profiles.
@@ -172,7 +166,20 @@ export declare function estimateCognitiveLoad(persona: OTCognitiveProfile, pageM
172
166
  };
173
167
  /**
174
168
  * Given a set of personas, find the N most different ones for maximum
175
- * test coverage. Uses greedy farthest-point sampling in Wasserstein space.
169
+ * test coverage. Uses greedy farthest-point sampling in Wasserstein space,
170
+ * seeded with the two farthest-apart profiles.
171
+ *
172
+ * The seed used to be `profiles[0]` — whichever persona happened to be first in
173
+ * the caller's array. Farthest-point traversal is seed-sensitive, so the same
174
+ * persona set in a different order produced a different "maximum coverage"
175
+ * answer. Seeding with the diameter pair removes that order dependence and buys
176
+ * a property worth having: because the selected set contains the two most
177
+ * distant profiles, no unselected pair can be farther apart than the selected
178
+ * set's own maximum.
179
+ *
180
+ * Honest about what this is NOT: exact max-diversity selection is NP-hard, and
181
+ * greedy k-center remains a 2-approximation for the general objective. This
182
+ * fixes determinism and the diameter property, not optimality. (2026-07-28)
176
183
  */
177
184
  export declare function selectMaxCoveragePersonas(profiles: OTCognitiveProfile[], n: number): OTCognitiveProfile[];
178
185
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"cognitive-transport.d.ts","sourceRoot":"","sources":["../../src/visual/cognitive-transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cognitive-transport.d.ts","sourceRoot":"","sources":["../../src/visual/cognitive-transport.ts"],"names":[],"mappings":"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"}
@@ -22,26 +22,38 @@
22
22
  * @since v18.27.0
23
23
  * @see https://github.com/alexandriashai/cbrowser/issues/159
24
24
  */
25
- // ── Standard 25 Cognitive Traits ──
25
+ // ── The 26 Cognitive Traits ──
26
+ //
27
+ // These names MUST match the `CognitiveTraits` interface in ../types.ts, because
28
+ // `traitsToDistribution` reads them off the object produced by
29
+ // `getCognitiveProfile()`. A name absent from that schema silently resolves to
30
+ // the `?? 0.5` default on line ~168 and still takes a full share of the
31
+ // normalized distribution.
32
+ //
33
+ // The previous list was hand-written and had drifted badly: 17 of its 25 names
34
+ // (frustrationResponse, decisionStyle, impulsivity, motorPrecision,
35
+ // processingSpeed, contrastSensitivity, …) exist in no schema in either repo, so
36
+ // they were constant 0.5 for every persona — pure dilution carrying no signal —
37
+ // while 18 of the 26 real traits were never looked at at all. Two personas
38
+ // differing only in curiosity, selfEfficacy or siteFamiliarity measured as
39
+ // identical on those axes. Only 8 of 25 names were real. (2026-07-28)
26
40
  export const COGNITIVE_TRAITS = [
27
- // Core (3)
28
- 'patience', 'riskTolerance', 'comprehension',
29
- // Emotional (3)
30
- 'frustrationResponse', 'resilience', 'confidenceLevel',
31
- // Decision (3)
32
- 'decisionStyle', 'satisficing', 'impulsivity',
33
- // Planning (3)
34
- 'goalPersistence', 'taskSwitching', 'planningHorizon',
41
+ // Core (4) — the required traits in the schema
42
+ 'patience', 'riskTolerance', 'comprehension', 'persistence',
43
+ // Emotional (4)
44
+ 'resilience', 'selfEfficacy', 'emotionalContagion', 'attributionStyle',
45
+ // Decision (4)
46
+ 'satisficing', 'anchoringBias', 'timeHorizon', 'fearOfMissingOut',
47
+ // Planning (4)
48
+ 'interruptRecovery', 'metacognitivePlanning', 'proceduralFluency', 'transferLearning',
35
49
  // Perception (3)
36
- 'attentionPattern', 'visualProcessing', 'informationFiltering',
50
+ 'informationForaging', 'changeBlindness', 'mentalModelRigidity',
37
51
  // Social (3)
38
- 'trustCalibration', 'socialProofSensitivity', 'authorityResponse',
39
- // Motor (2)
40
- 'motorPrecision', 'reactionTime',
41
- // Cognitive (2)
42
- 'workingMemory', 'processingSpeed',
43
- // Accessibility (3)
44
- 'contrastSensitivity', 'colorPerception', 'textProcessing',
52
+ 'trustCalibration', 'socialProofSensitivity', 'authoritySensitivity',
53
+ // Cognitive (3)
54
+ 'workingMemory', 'readingTendency', 'curiosity',
55
+ // Experience (1)
56
+ 'siteFamiliarity',
45
57
  ];
46
58
  // ── Ground Metric Between Traits ──
47
59
  /**
@@ -58,27 +70,33 @@ export const COGNITIVE_TRAITS = [
58
70
  function traitGroundDistance(a, b) {
59
71
  if (a === b)
60
72
  return 0;
73
+ // Partitions COGNITIVE_TRAITS above; every one of the 26 appears exactly once.
74
+ // The old map described the old phantom vocabulary, and its `motor` and
75
+ // `accessibility` domains named traits that exist in no schema. (2026-07-28)
61
76
  const domains = {
62
- core: ['patience', 'riskTolerance', 'comprehension'],
63
- emotional: ['frustrationResponse', 'resilience', 'confidenceLevel'],
64
- decision: ['decisionStyle', 'satisficing', 'impulsivity'],
65
- planning: ['goalPersistence', 'taskSwitching', 'planningHorizon'],
66
- perception: ['attentionPattern', 'visualProcessing', 'informationFiltering'],
67
- social: ['trustCalibration', 'socialProofSensitivity', 'authorityResponse'],
68
- motor: ['motorPrecision', 'reactionTime'],
69
- cognitive: ['workingMemory', 'processingSpeed'],
70
- accessibility: ['contrastSensitivity', 'colorPerception', 'textProcessing'],
77
+ core: ['patience', 'riskTolerance', 'comprehension', 'persistence'],
78
+ emotional: ['resilience', 'selfEfficacy', 'emotionalContagion', 'attributionStyle'],
79
+ decision: ['satisficing', 'anchoringBias', 'timeHorizon', 'fearOfMissingOut'],
80
+ planning: ['interruptRecovery', 'metacognitivePlanning', 'proceduralFluency', 'transferLearning'],
81
+ perception: ['informationForaging', 'changeBlindness', 'mentalModelRigidity'],
82
+ social: ['trustCalibration', 'socialProofSensitivity', 'authoritySensitivity'],
83
+ cognitive: ['workingMemory', 'readingTendency', 'curiosity'],
84
+ // Deliberately a singleton: prior familiarity with a site is not a facet of
85
+ // any other trait group. It therefore never earns the 0.2 same-domain
86
+ // distance, which is correct rather than an oversight.
87
+ experience: ['siteFamiliarity'],
71
88
  };
72
89
  // Related domain pairs (closer than unrelated)
73
90
  const related = new Set([
74
91
  'core-emotional', 'emotional-core',
75
92
  'core-decision', 'decision-core',
76
93
  'emotional-decision', 'decision-emotional',
77
- 'perception-accessibility', 'accessibility-perception',
78
94
  'perception-cognitive', 'cognitive-perception',
79
- 'motor-accessibility', 'accessibility-motor',
80
95
  'planning-decision', 'decision-planning',
81
96
  'cognitive-planning', 'planning-cognitive',
97
+ // Familiarity is built from memory and shapes how a page is foraged.
98
+ 'experience-cognitive', 'cognitive-experience',
99
+ 'experience-perception', 'perception-experience',
82
100
  ]);
83
101
  let domainA = '', domainB = '';
84
102
  for (const [domain, traits] of Object.entries(domains)) {
@@ -87,6 +105,13 @@ function traitGroundDistance(a, b) {
87
105
  if (traits.includes(b))
88
106
  domainB = domain;
89
107
  }
108
+ // An unrecognized trait leaves its domain as "", and two unrecognized traits
109
+ // would then satisfy domainA === domainB and be scored 0.2, i.e. "same
110
+ // subdomain" — the closest possible relationship, awarded for being unknown.
111
+ // That is how the phantom vocabulary above stayed invisible for so long.
112
+ // Treat unknown as maximally distant instead. (2026-07-28)
113
+ if (!domainA || !domainB)
114
+ return 0.8;
90
115
  if (domainA === domainB)
91
116
  return 0.2; // Same subdomain
92
117
  if (related.has(`${domainA}-${domainB}`))
@@ -138,6 +163,23 @@ export function buildOTCognitiveProfile(name, traits) {
138
163
  *
139
164
  * This is the "true cognitive distance" — how different two minds are.
140
165
  */
166
+ /**
167
+ * Fixed seed for the sliced-Wasserstein projection set. Any constant works; what
168
+ * matters is that it never changes, so the same pair of profiles always yields
169
+ * the same sliced distance across processes and releases.
170
+ */
171
+ const SLICED_PROJECTION_SEED = 0x5f3759df;
172
+ /** mulberry32 — small, fast, well-distributed 32-bit PRNG. */
173
+ function seededRandom(seed) {
174
+ let a = seed >>> 0;
175
+ return () => {
176
+ a = (a + 0x6d2b79f5) >>> 0;
177
+ let t = a;
178
+ t = Math.imul(t ^ (t >>> 15), t | 1);
179
+ t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
180
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
181
+ };
182
+ }
141
183
  export function cognitiveDistance(profileA, profileB) {
142
184
  const d = COGNITIVE_TRAITS.length;
143
185
  const a = profileA.distribution;
@@ -171,15 +213,23 @@ export function cognitiveDistance(profileA, profileB) {
171
213
  w2sq += meanDiff * meanDiff + (sigA - sigB) * (sigA - sigB);
172
214
  }
173
215
  const w2 = Math.sqrt(Math.max(0, w2sq));
174
- // Sliced Wasserstein (fast approximation for validation)
216
+ // Sliced Wasserstein (fast approximation for validation).
217
+ //
218
+ // The projections are drawn from a SEEDED generator, not Math.random(). Two
219
+ // identical calls used to return different sliced values (measured: 0.031568
220
+ // vs 0.029943 for the same persona pair, a ~5% swing) while the MCP tool that
221
+ // exposes this declares idempotentHint: true. A metric a caller cannot
222
+ // reproduce is not a metric they can act on or diff against a baseline, so the
223
+ // projection set is now fixed. (2026-07-29)
175
224
  const numProjections = 100;
176
225
  let slicedSum = 0;
226
+ const rand = seededRandom(SLICED_PROJECTION_SEED);
177
227
  for (let p = 0; p < numProjections; p++) {
178
- // Random projection
228
+ // Deterministic pseudo-random projection
179
229
  const dir = new Float64Array(d);
180
230
  let norm = 0;
181
231
  for (let i = 0; i < d; i++) {
182
- dir[i] = Math.random() * 2 - 1;
232
+ dir[i] = rand() * 2 - 1;
183
233
  norm += dir[i] * dir[i];
184
234
  }
185
235
  norm = Math.sqrt(norm);
@@ -435,13 +485,42 @@ export function estimateCognitiveLoad(persona, pageMetrics) {
435
485
  // ── Coverage Optimization ──
436
486
  /**
437
487
  * Given a set of personas, find the N most different ones for maximum
438
- * test coverage. Uses greedy farthest-point sampling in Wasserstein space.
488
+ * test coverage. Uses greedy farthest-point sampling in Wasserstein space,
489
+ * seeded with the two farthest-apart profiles.
490
+ *
491
+ * The seed used to be `profiles[0]` — whichever persona happened to be first in
492
+ * the caller's array. Farthest-point traversal is seed-sensitive, so the same
493
+ * persona set in a different order produced a different "maximum coverage"
494
+ * answer. Seeding with the diameter pair removes that order dependence and buys
495
+ * a property worth having: because the selected set contains the two most
496
+ * distant profiles, no unselected pair can be farther apart than the selected
497
+ * set's own maximum.
498
+ *
499
+ * Honest about what this is NOT: exact max-diversity selection is NP-hard, and
500
+ * greedy k-center remains a 2-approximation for the general objective. This
501
+ * fixes determinism and the diameter property, not optimality. (2026-07-28)
439
502
  */
440
503
  export function selectMaxCoveragePersonas(profiles, n) {
441
504
  if (profiles.length <= n)
442
505
  return profiles;
443
- const selected = [profiles[0]];
444
- const remaining = new Set(profiles.slice(1));
506
+ if (n <= 0)
507
+ return [];
508
+ // Diameter pair: the two profiles with the greatest pairwise distance.
509
+ let seedA = 0, seedB = 1, diameter = -1;
510
+ for (let i = 0; i < profiles.length; i++) {
511
+ for (let j = i + 1; j < profiles.length; j++) {
512
+ const d = cognitiveDistance(profiles[i], profiles[j]).w1;
513
+ if (d > diameter) {
514
+ diameter = d;
515
+ seedA = i;
516
+ seedB = j;
517
+ }
518
+ }
519
+ }
520
+ if (n === 1)
521
+ return [profiles[seedA]];
522
+ const selected = [profiles[seedA], profiles[seedB]];
523
+ const remaining = new Set(profiles.filter((_, i) => i !== seedA && i !== seedB));
445
524
  while (selected.length < n && remaining.size > 0) {
446
525
  // Find the remaining profile farthest from all selected
447
526
  let farthest = null;