cbrowser 18.30.0 → 18.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analysis/accessibility-empathy.d.ts.map +1 -1
- package/dist/analysis/accessibility-empathy.js +44 -0
- package/dist/analysis/accessibility-empathy.js.map +1 -1
- package/dist/cognitive/index.d.ts.map +1 -1
- package/dist/cognitive/index.js +65 -0
- package/dist/cognitive/index.js.map +1 -1
- package/dist/mcp-tools/base/audit-tools.d.ts.map +1 -1
- package/dist/mcp-tools/base/audit-tools.js +4 -0
- package/dist/mcp-tools/base/audit-tools.js.map +1 -1
- package/dist/mcp-tools/base/index.d.ts +1 -1
- package/dist/mcp-tools/base/index.js +1 -1
- package/dist/mcp-tools/base/visual-testing-tools.d.ts.map +1 -1
- package/dist/mcp-tools/base/visual-testing-tools.js +102 -0
- package/dist/mcp-tools/base/visual-testing-tools.js.map +1 -1
- package/dist/types.d.ts +28 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/visual/attention-transport.d.ts +93 -0
- package/dist/visual/attention-transport.d.ts.map +1 -0
- package/dist/visual/attention-transport.js +364 -0
- package/dist/visual/attention-transport.js.map +1 -0
- package/dist/visual/index.d.ts +1 -0
- package/dist/visual/index.d.ts.map +1 -1
- package/dist/visual/index.js +1 -0
- package/dist/visual/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attention Transport — Saliency modeling via optimal transport
|
|
3
|
+
*
|
|
4
|
+
* Generates persona-specific saliency maps showing WHERE each persona's
|
|
5
|
+
* attention goes on a page, using W₂ distance on CIE-Lab color distributions
|
|
6
|
+
* for center-surround contrast detection.
|
|
7
|
+
*
|
|
8
|
+
* Based on:
|
|
9
|
+
* - Klein & Frintrop (DAGM 2012): W₂ saliency on multivariate normals
|
|
10
|
+
* - Bylinskii et al. (IEEE TPAMI 2019): EMD for saliency evaluation
|
|
11
|
+
* - Mialon et al. (ICLR 2021): attention as optimal transport plan
|
|
12
|
+
* - Sun & Li (JEI 2018): multi-scale aggregated Wasserstein saliency
|
|
13
|
+
*
|
|
14
|
+
* The transport plan between persona's attention prior and page's
|
|
15
|
+
* saliency map reveals WHERE attention flows — richer than saliency
|
|
16
|
+
* alone because it shows the mapping, not just the destination.
|
|
17
|
+
*
|
|
18
|
+
* @version 1.0.0
|
|
19
|
+
* @since v18.28.0
|
|
20
|
+
* @see https://github.com/alexandriashai/cbrowser/issues/159
|
|
21
|
+
*/
|
|
22
|
+
import { getPerceptualProfile } from './perceptual-transport.js';
|
|
23
|
+
// ── CIE-Lab Color Space Conversion ──
|
|
24
|
+
function srgbToLab(r, g, b) {
|
|
25
|
+
// sRGB to linear
|
|
26
|
+
const toLinear = (c) => {
|
|
27
|
+
c /= 255;
|
|
28
|
+
return c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
|
|
29
|
+
};
|
|
30
|
+
const rl = toLinear(r), gl = toLinear(g), bl = toLinear(b);
|
|
31
|
+
// Linear RGB to XYZ (D65)
|
|
32
|
+
const x = 0.4124564 * rl + 0.3575761 * gl + 0.1804375 * bl;
|
|
33
|
+
const y = 0.2126729 * rl + 0.7151522 * gl + 0.0721750 * bl;
|
|
34
|
+
const z = 0.0193339 * rl + 0.1191920 * gl + 0.9503041 * bl;
|
|
35
|
+
// XYZ to Lab (D65 reference)
|
|
36
|
+
const xn = 0.95047, yn = 1.0, zn = 1.08883;
|
|
37
|
+
const f = (t) => t > 0.008856 ? Math.cbrt(t) : 7.787 * t + 16 / 116;
|
|
38
|
+
const fx = f(x / xn), fy = f(y / yn), fz = f(z / zn);
|
|
39
|
+
const L = 116 * fy - 16;
|
|
40
|
+
const a = 500 * (fx - fy);
|
|
41
|
+
const bLab = 200 * (fy - fz);
|
|
42
|
+
return [L, a, bLab];
|
|
43
|
+
}
|
|
44
|
+
// ── Core: Center-Surround Saliency via W₂ ──
|
|
45
|
+
/**
|
|
46
|
+
* Compute saliency map using Wasserstein-2 distance on CIE-Lab distributions.
|
|
47
|
+
*
|
|
48
|
+
* For each grid cell, computes the mean and variance of the Lab color distribution.
|
|
49
|
+
* Saliency = W₂ distance between the cell's distribution and its surround's
|
|
50
|
+
* distribution (center-surround contrast, Klein & Frintrop method).
|
|
51
|
+
*
|
|
52
|
+
* For Gaussian measures, W₂ has a closed-form solution:
|
|
53
|
+
* BW²(N(μ₁,σ₁²), N(μ₂,σ₂²)) = ||μ₁-μ₂||² + (σ₁-σ₂)²
|
|
54
|
+
*/
|
|
55
|
+
async function computeLabSaliency(imagePath, cellSize = 16, surroundRadius = 3) {
|
|
56
|
+
const sharpModule = await import('sharp');
|
|
57
|
+
const sharp = sharpModule.default ?? sharpModule;
|
|
58
|
+
// Load and downscale
|
|
59
|
+
const scale = 0.5;
|
|
60
|
+
const img = sharp(imagePath);
|
|
61
|
+
const metadata = await img.metadata();
|
|
62
|
+
const width = Math.round((metadata.width || 800) * scale);
|
|
63
|
+
const height = Math.round((metadata.height || 600) * scale);
|
|
64
|
+
const { data } = await img
|
|
65
|
+
.resize(width, height)
|
|
66
|
+
.ensureAlpha()
|
|
67
|
+
.raw()
|
|
68
|
+
.toBuffer({ resolveWithObject: true });
|
|
69
|
+
const pixels = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
70
|
+
const rows = Math.ceil(height / cellSize);
|
|
71
|
+
const cols = Math.ceil(width / cellSize);
|
|
72
|
+
const numCells = rows * cols;
|
|
73
|
+
// Compute per-cell Lab statistics (mean L, a, b and variance)
|
|
74
|
+
const cellStats = [];
|
|
75
|
+
for (let row = 0; row < rows; row++) {
|
|
76
|
+
for (let col = 0; col < cols; col++) {
|
|
77
|
+
let sumL = 0, sumA = 0, sumB = 0;
|
|
78
|
+
let sumL2 = 0, sumA2 = 0, sumB2 = 0;
|
|
79
|
+
let count = 0;
|
|
80
|
+
const yStart = row * cellSize;
|
|
81
|
+
const xStart = col * cellSize;
|
|
82
|
+
const yEnd = Math.min(yStart + cellSize, height);
|
|
83
|
+
const xEnd = Math.min(xStart + cellSize, width);
|
|
84
|
+
for (let y = yStart; y < yEnd; y++) {
|
|
85
|
+
for (let x = xStart; x < xEnd; x++) {
|
|
86
|
+
const idx = (y * width + x) * 4;
|
|
87
|
+
if (pixels[idx + 3] < 25)
|
|
88
|
+
continue; // Skip transparent
|
|
89
|
+
const [L, a, b] = srgbToLab(pixels[idx], pixels[idx + 1], pixels[idx + 2]);
|
|
90
|
+
sumL += L;
|
|
91
|
+
sumA += a;
|
|
92
|
+
sumB += b;
|
|
93
|
+
sumL2 += L * L;
|
|
94
|
+
sumA2 += a * a;
|
|
95
|
+
sumB2 += b * b;
|
|
96
|
+
count++;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (count > 0) {
|
|
100
|
+
const mL = sumL / count, mA = sumA / count, mB = sumB / count;
|
|
101
|
+
cellStats.push({
|
|
102
|
+
meanL: mL, meanA: mA, meanB: mB,
|
|
103
|
+
varL: Math.max(0.01, sumL2 / count - mL * mL),
|
|
104
|
+
varA: Math.max(0.01, sumA2 / count - mA * mA),
|
|
105
|
+
varB: Math.max(0.01, sumB2 / count - mB * mB),
|
|
106
|
+
count,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
cellStats.push({ meanL: 0, meanA: 0, meanB: 0, varL: 0.01, varA: 0.01, varB: 0.01, count: 0 });
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Compute center-surround W₂ saliency for each cell
|
|
115
|
+
const saliency = new Float64Array(numCells);
|
|
116
|
+
for (let row = 0; row < rows; row++) {
|
|
117
|
+
for (let col = 0; col < cols; col++) {
|
|
118
|
+
const idx = row * cols + col;
|
|
119
|
+
const center = cellStats[idx];
|
|
120
|
+
if (center.count === 0)
|
|
121
|
+
continue;
|
|
122
|
+
// Compute surround statistics (average of surrounding cells)
|
|
123
|
+
let sCount = 0;
|
|
124
|
+
let sMeanL = 0, sMeanA = 0, sMeanB = 0;
|
|
125
|
+
let sVarL = 0, sVarA = 0, sVarB = 0;
|
|
126
|
+
for (let dr = -surroundRadius; dr <= surroundRadius; dr++) {
|
|
127
|
+
for (let dc = -surroundRadius; dc <= surroundRadius; dc++) {
|
|
128
|
+
if (dr === 0 && dc === 0)
|
|
129
|
+
continue; // Skip center
|
|
130
|
+
const sr = row + dr, sc = col + dc;
|
|
131
|
+
if (sr < 0 || sr >= rows || sc < 0 || sc >= cols)
|
|
132
|
+
continue;
|
|
133
|
+
const si = sr * cols + sc;
|
|
134
|
+
const s = cellStats[si];
|
|
135
|
+
if (s.count === 0)
|
|
136
|
+
continue;
|
|
137
|
+
sMeanL += s.meanL;
|
|
138
|
+
sMeanA += s.meanA;
|
|
139
|
+
sMeanB += s.meanB;
|
|
140
|
+
sVarL += s.varL;
|
|
141
|
+
sVarA += s.varA;
|
|
142
|
+
sVarB += s.varB;
|
|
143
|
+
sCount++;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (sCount === 0)
|
|
147
|
+
continue;
|
|
148
|
+
sMeanL /= sCount;
|
|
149
|
+
sMeanA /= sCount;
|
|
150
|
+
sMeanB /= sCount;
|
|
151
|
+
sVarL /= sCount;
|
|
152
|
+
sVarA /= sCount;
|
|
153
|
+
sVarB /= sCount;
|
|
154
|
+
// Bures-Wasserstein distance for 3D Gaussians (diagonal covariance)
|
|
155
|
+
// BW² = ||μ_center - μ_surround||² + Σ(√σ_center_i - √σ_surround_i)²
|
|
156
|
+
const meanDist = (center.meanL - sMeanL) ** 2 + (center.meanA - sMeanA) ** 2 + (center.meanB - sMeanB) ** 2;
|
|
157
|
+
const varDist = (Math.sqrt(center.varL) - Math.sqrt(sVarL)) ** 2 +
|
|
158
|
+
(Math.sqrt(center.varA) - Math.sqrt(sVarA)) ** 2 +
|
|
159
|
+
(Math.sqrt(center.varB) - Math.sqrt(sVarB)) ** 2;
|
|
160
|
+
saliency[idx] = Math.sqrt(meanDist + varDist);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
// Normalize to 0-1
|
|
164
|
+
const maxSal = Math.max(...Array.from(saliency), 0.001);
|
|
165
|
+
for (let i = 0; i < numCells; i++)
|
|
166
|
+
saliency[i] /= maxSal;
|
|
167
|
+
return { cells: saliency, rows, cols, width: width / scale, height: height / scale };
|
|
168
|
+
}
|
|
169
|
+
// ── Persona-Filtered Saliency ──
|
|
170
|
+
/**
|
|
171
|
+
* Apply a persona's perceptual filter to the saliency map.
|
|
172
|
+
*
|
|
173
|
+
* Different personas have different attention modes:
|
|
174
|
+
* - uniform: all cells weighted equally (baseline)
|
|
175
|
+
* - center-heavy: center cells boosted, edges suppressed (motor impairment)
|
|
176
|
+
* - motion-attracted: high-variance cells boosted (ADHD)
|
|
177
|
+
* - text-focused: low-variance, high-L cells boosted (dyslexia, elderly)
|
|
178
|
+
* - large-elements: high-count cells boosted (low vision)
|
|
179
|
+
*/
|
|
180
|
+
function applyPersonaFilter(saliency, rows, cols, filter) {
|
|
181
|
+
const filtered = new Float64Array(saliency);
|
|
182
|
+
switch (filter.attentionMode) {
|
|
183
|
+
case 'center-heavy': {
|
|
184
|
+
// Boost center, suppress edges (motor: narrow attention to avoid accidents)
|
|
185
|
+
const centerRow = rows / 2, centerCol = cols / 2;
|
|
186
|
+
const maxDist = Math.sqrt(centerRow ** 2 + centerCol ** 2);
|
|
187
|
+
for (let r = 0; r < rows; r++) {
|
|
188
|
+
for (let c = 0; c < cols; c++) {
|
|
189
|
+
const dist = Math.sqrt((r - centerRow) ** 2 + (c - centerCol) ** 2) / maxDist;
|
|
190
|
+
filtered[r * cols + c] *= 1 - dist * 0.7; // Edges get 30% of center weight
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
case 'motion-attracted': {
|
|
196
|
+
// ADHD: boost high-saliency areas (already prominent things capture more)
|
|
197
|
+
// This models the "attention captured by novelty" pattern
|
|
198
|
+
for (let i = 0; i < filtered.length; i++) {
|
|
199
|
+
filtered[i] = Math.pow(filtered[i], 0.5); // Square root amplifies high values
|
|
200
|
+
}
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
case 'text-focused': {
|
|
204
|
+
// Dyslexia/elderly: suppress high-saliency distractors, focus on text areas
|
|
205
|
+
// Text areas typically have moderate, uniform saliency (not flashy)
|
|
206
|
+
for (let i = 0; i < filtered.length; i++) {
|
|
207
|
+
// Moderate saliency (0.2-0.6) boosted, extreme saliency suppressed
|
|
208
|
+
const s = filtered[i];
|
|
209
|
+
filtered[i] = s > 0.7 ? s * 0.5 : s * 1.3;
|
|
210
|
+
}
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
case 'large-elements': {
|
|
214
|
+
// Low vision: only high-saliency regions register
|
|
215
|
+
for (let i = 0; i < filtered.length; i++) {
|
|
216
|
+
filtered[i] = filtered[i] > 0.3 ? filtered[i] : filtered[i] * 0.2;
|
|
217
|
+
}
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
// 'uniform' — no modification
|
|
221
|
+
}
|
|
222
|
+
// Apply processing speed: slower processors → more focused (fewer things register)
|
|
223
|
+
if (filter.processingSpeed < 0.8) {
|
|
224
|
+
const threshold = 0.3 + (1 - filter.processingSpeed) * 0.3;
|
|
225
|
+
for (let i = 0; i < filtered.length; i++) {
|
|
226
|
+
if (filtered[i] < threshold)
|
|
227
|
+
filtered[i] *= filter.processingSpeed;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// Renormalize
|
|
231
|
+
const max = Math.max(...Array.from(filtered), 0.001);
|
|
232
|
+
for (let i = 0; i < filtered.length; i++)
|
|
233
|
+
filtered[i] /= max;
|
|
234
|
+
return filtered;
|
|
235
|
+
}
|
|
236
|
+
// ── Public API ──
|
|
237
|
+
/**
|
|
238
|
+
* Compute persona-specific attention analysis for a screenshot.
|
|
239
|
+
*
|
|
240
|
+
* Generates a saliency map using W₂ on CIE-Lab distributions,
|
|
241
|
+
* applies the persona's perceptual filter, and computes attention metrics.
|
|
242
|
+
*/
|
|
243
|
+
export async function analyzeAttention(screenshotPath, personaName, cellSize = 16) {
|
|
244
|
+
const startTime = performance.now();
|
|
245
|
+
const profile = getPerceptualProfile(personaName);
|
|
246
|
+
// Compute base saliency
|
|
247
|
+
const baseSaliency = await computeLabSaliency(screenshotPath, cellSize);
|
|
248
|
+
// Apply persona filter
|
|
249
|
+
const filtered = applyPersonaFilter(baseSaliency.cells, baseSaliency.rows, baseSaliency.cols, profile.visualFilter);
|
|
250
|
+
// Build saliency map with hotspots
|
|
251
|
+
const indexed = Array.from(filtered).map((s, i) => ({ s, i }));
|
|
252
|
+
indexed.sort((a, b) => b.s - a.s);
|
|
253
|
+
const hotspots = indexed.slice(0, 10).map(({ s, i }) => ({
|
|
254
|
+
row: Math.floor(i / baseSaliency.cols),
|
|
255
|
+
col: i % baseSaliency.cols,
|
|
256
|
+
x: (i % baseSaliency.cols) * cellSize * 2, // Scale back to original
|
|
257
|
+
y: Math.floor(i / baseSaliency.cols) * cellSize * 2,
|
|
258
|
+
saliency: s,
|
|
259
|
+
}));
|
|
260
|
+
const saliencyMap = {
|
|
261
|
+
cells: filtered,
|
|
262
|
+
rows: baseSaliency.rows,
|
|
263
|
+
cols: baseSaliency.cols,
|
|
264
|
+
width: baseSaliency.width,
|
|
265
|
+
height: baseSaliency.height,
|
|
266
|
+
cellSize: cellSize * 2, // Scaled
|
|
267
|
+
hotspots,
|
|
268
|
+
};
|
|
269
|
+
// Compute attention metrics
|
|
270
|
+
const totalSaliency = filtered.reduce((a, b) => a + b, 0) || 1;
|
|
271
|
+
// Entropy: -Σ p*log(p) where p = normalized saliency
|
|
272
|
+
let entropy = 0;
|
|
273
|
+
for (let i = 0; i < filtered.length; i++) {
|
|
274
|
+
const p = filtered[i] / totalSaliency;
|
|
275
|
+
if (p > 0)
|
|
276
|
+
entropy -= p * Math.log2(p + 1e-10);
|
|
277
|
+
}
|
|
278
|
+
const maxEntropy = Math.log2(filtered.length);
|
|
279
|
+
entropy = entropy / maxEntropy; // Normalize to 0-1
|
|
280
|
+
// Concentration: fraction of total saliency in top 20% of cells
|
|
281
|
+
const sorted = Array.from(filtered).sort((a, b) => b - a);
|
|
282
|
+
const top20Count = Math.ceil(filtered.length * 0.2);
|
|
283
|
+
const top20Sum = sorted.slice(0, top20Count).reduce((a, b) => a + b, 0);
|
|
284
|
+
const concentration = top20Sum / totalSaliency;
|
|
285
|
+
// Alignment: how well does the persona's saliency match the base (unfiltered) saliency?
|
|
286
|
+
// Computed as correlation between filtered and base saliency
|
|
287
|
+
let sumAB = 0, sumA2 = 0, sumB2 = 0;
|
|
288
|
+
const meanA = baseSaliency.cells.reduce((a, b) => a + b, 0) / baseSaliency.cells.length;
|
|
289
|
+
const meanB = filtered.reduce((a, b) => a + b, 0) / filtered.length;
|
|
290
|
+
for (let i = 0; i < filtered.length; i++) {
|
|
291
|
+
const da = baseSaliency.cells[i] - meanA;
|
|
292
|
+
const db = filtered[i] - meanB;
|
|
293
|
+
sumAB += da * db;
|
|
294
|
+
sumA2 += da * da;
|
|
295
|
+
sumB2 += db * db;
|
|
296
|
+
}
|
|
297
|
+
const alignmentScore = sumA2 > 0 && sumB2 > 0 ? sumAB / Math.sqrt(sumA2 * sumB2) : 1;
|
|
298
|
+
// Transport cost: W₁ between base and filtered saliency (how much attention moved)
|
|
299
|
+
let transportCost = 0;
|
|
300
|
+
for (let i = 0; i < filtered.length; i++) {
|
|
301
|
+
transportCost += Math.abs(baseSaliency.cells[i] / (totalSaliency || 1) - filtered[i] / (totalSaliency || 1));
|
|
302
|
+
}
|
|
303
|
+
// Attention competitors: group hotspots into regions
|
|
304
|
+
const attentionCompetitors = hotspots.slice(0, 5).map((h, i) => ({
|
|
305
|
+
region: `(${h.x}, ${h.y})`,
|
|
306
|
+
saliency: Math.round(h.saliency * 100) / 100,
|
|
307
|
+
}));
|
|
308
|
+
return {
|
|
309
|
+
persona: personaName,
|
|
310
|
+
saliencyMap,
|
|
311
|
+
alignmentScore: Math.round(alignmentScore * 1000) / 1000,
|
|
312
|
+
entropy: Math.round(entropy * 1000) / 1000,
|
|
313
|
+
concentration: Math.round(concentration * 1000) / 1000,
|
|
314
|
+
attentionCompetitors,
|
|
315
|
+
transportCost: Math.round(transportCost * 10000) / 10000,
|
|
316
|
+
computeTimeMs: performance.now() - startTime,
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Compare attention patterns between two personas on the same screenshot.
|
|
321
|
+
* Returns the Wasserstein divergence between their saliency maps and
|
|
322
|
+
* identifies regions where attention differs most.
|
|
323
|
+
*/
|
|
324
|
+
export async function compareAttention(screenshotPath, personaA, personaB, cellSize = 16) {
|
|
325
|
+
const [analysisA, analysisB] = await Promise.all([
|
|
326
|
+
analyzeAttention(screenshotPath, personaA, cellSize),
|
|
327
|
+
analyzeAttention(screenshotPath, personaB, cellSize),
|
|
328
|
+
]);
|
|
329
|
+
const salA = analysisA.saliencyMap.cells;
|
|
330
|
+
const salB = analysisB.saliencyMap.cells;
|
|
331
|
+
const n = Math.min(salA.length, salB.length);
|
|
332
|
+
// W₁ between the two saliency distributions
|
|
333
|
+
let divergence = 0;
|
|
334
|
+
const totalA = salA.reduce((a, b) => a + b, 0) || 1;
|
|
335
|
+
const totalB = salB.reduce((a, b) => a + b, 0) || 1;
|
|
336
|
+
for (let i = 0; i < n; i++) {
|
|
337
|
+
divergence += Math.abs(salA[i] / totalA - salB[i] / totalB);
|
|
338
|
+
}
|
|
339
|
+
// Find most divergent regions
|
|
340
|
+
const divergentRegions = [];
|
|
341
|
+
for (let i = 0; i < n; i++) {
|
|
342
|
+
const div = Math.abs(salA[i] - salB[i]);
|
|
343
|
+
if (div > 0.3) { // Only significant divergences
|
|
344
|
+
const row = Math.floor(i / analysisA.saliencyMap.cols);
|
|
345
|
+
const col = i % analysisA.saliencyMap.cols;
|
|
346
|
+
divergentRegions.push({
|
|
347
|
+
row, col,
|
|
348
|
+
x: col * analysisA.saliencyMap.cellSize,
|
|
349
|
+
y: row * analysisA.saliencyMap.cellSize,
|
|
350
|
+
saliencyA: Math.round(salA[i] * 100) / 100,
|
|
351
|
+
saliencyB: Math.round(salB[i] * 100) / 100,
|
|
352
|
+
divergence: Math.round(div * 100) / 100,
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
divergentRegions.sort((a, b) => b.divergence - a.divergence);
|
|
357
|
+
return {
|
|
358
|
+
personaA: analysisA,
|
|
359
|
+
personaB: analysisB,
|
|
360
|
+
attentionDivergence: Math.round(divergence * 10000) / 10000,
|
|
361
|
+
divergentRegions: divergentRegions.slice(0, 10),
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
//# sourceMappingURL=attention-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attention-transport.js","sourceRoot":"","sources":["../../src/visual/attention-transport.ts"],"names":[],"mappings":"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"}
|
package/dist/visual/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/visual/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH;;;;GAIG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/visual/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH;;;;GAIG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC"}
|
package/dist/visual/index.js
CHANGED
package/dist/visual/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/visual/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH;;;;GAIG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/visual/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH;;;;GAIG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cbrowser",
|
|
3
|
-
"version": "18.
|
|
3
|
+
"version": "18.32.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Cognitive browser automation that thinks like your users—and helps AI agents navigate too. Simulate real user cognition with abandonment detection, constitutional safety, chaos engineering, and UX friction discovery. Sites that pass CBrowser's cognitive tests are easier for both humans and AI agents to navigate.",
|
|
6
6
|
"main": "dist/index.js",
|