extension.js · part 3
Full reference60 text occurrences from desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, part 3. Every entry preserves the shipped literal and its saved verdict or selection reason.
File contents and all parts · All files
Shipped text
${n} children:
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 67528–67545, SHA-256 de5b1e2071f3ea9f.
Jev judged not model-facing (confidence 0.08; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: ${n} children:
${n} children:
snapshot-${(new Date).toISOString().replace(/ :. /g,"-")}-${Math.random().toStri
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 67671–67775, SHA-256 083aced105004b30.
Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: snapshot-${(new Date).toISOString().replace(/[:.]/g,"-")}-${Math.random().toString(36).slice(2,8)}.log
snapshot-${(new Date).toISOString().replace(/[:.]/g,"-")}-${Math.random().toString(36).slice(2,8)}.log
Large snapshot redirected to: ${n} (${o} lines, ${s.length} preview lines)
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 67889–67965, SHA-256 e84cc0d1d9aed970.
Jev judged not model-facing (confidence 0.07; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: Large snapshot redirected to: ${n} (${o} lines, ${s.length} preview lines)
Large snapshot redirected to: ${n} (${o} lines, ${s.length} preview lines)
Failed to execute JavaScript in browser:
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 68187–68229, SHA-256 cf603e8f05a0808a.
Jev judged not model-facing (confidence 0.05; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: Failed to execute JavaScript in browser:
Failed to execute JavaScript in browser:
Browser execution returned null or undefined
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 68280–68326, SHA-256 9fd42f9c430ae327.
Jev judged not model-facing (confidence 0.04; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: Browser execution returned null or undefined
Browser execution returned null or undefined
Browser execution returned non-object:
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 68366–68407, SHA-256 c70c9dad1aa6dcc3.
Jev judged not model-facing (confidence 0.05; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: Browser execution returned non-object:
Browser execution returned non-object:
Browser result missing required "success" field
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 68475–68524, SHA-256 afae44bf5ca26e25.
Jev judged not model-facing (confidence 0.05; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: Browser result missing required "success" field
Browser result missing required "success" field
Browser result missing required field: ${String(t)}
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 68572–68625, SHA-256 0a0cf5b6810ed881.
Jev judged not model-facing (confidence 0.04; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: Browser result missing required field: ${String(t)}
Browser result missing required field: ${String(t)}
Action: ${e}
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 69262–69280, SHA-256 84534c77c1bb2a4b.
Jev judged not model-facing (confidence 0.56; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: ### Action: ${e}
### Action: ${e}
- Browser View ID: ${o}
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 69320–69345, SHA-256 d67e2b6d82d5c7ef.
Jev judged not model-facing (confidence 0.51; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: - Browser View ID: ${o}
- Browser View ID: ${o}
Page state
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 69354–69372, SHA-256 0508b0a90826c7b2.
Jev judged not model-facing (confidence 0.63; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: ### Page state
### Page state
- Page URL: ${c}
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 69373–69391, SHA-256 3a5d91d702502e02.
Jev judged not model-facing (confidence 0.67; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: - Page URL: ${c}
- Page URL: ${c}
- Page Title: ${d}
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 69392–69412, SHA-256 49717f4c543321e8.
Jev judged not model-facing (confidence 0.6; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: - Page Title: ${d}
- Page Title: ${d}
- Page Snapshot: Large snapshot (${w} bytes, ${i} lines) written to file
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 69413–69487, SHA-256 43c1175d937c9ca6.
Jev judged not model-facing (confidence 0.28; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: - Page Snapshot: Large snapshot (${w} bytes, ${i} lines) written to file
- Page Snapshot: Large snapshot (${w} bytes, ${i} lines) written to file
- Snapshot File: ${r} (file://${r})
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 69488–69526, SHA-256 beb9f8af00e0b3b0.
Jev judged not model-facing (confidence 0.45; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: - Snapshot File: [${r}](file://${r})
- Snapshot File: [${r}](file://${r})
- Preview (first ${s.length} lines):
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 69527–69565, SHA-256 03bab3d6417c8f12.
Jev judged not model-facing (confidence 0.48; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: - Preview (first ${s.length} lines):
- Preview (first ${s.length} lines):
... (${i-s.length} more lines in file)
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 69595–69637, SHA-256 1e29710ddf698e10.
Jev judged not model-facing (confidence 0.24; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: ... (${i-s.length} more lines in file)
... (${i-s.length} more lines in file)
Snapshot diff (previous vs current)
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 69651–69694, SHA-256 7148a229621498e1.
Jev judged not model-facing (confidence 0.15; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: ### Snapshot diff (previous vs current)
### Snapshot diff (previous vs current)
Snapshot diff (previous vs current) · byte 69729
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 69729–69772, SHA-256 7148a229621498e1.
Jev judged not model-facing (confidence 0.16; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: ### Snapshot diff (previous vs current)
### Snapshot diff (previous vs current)
- Diff too large to include inline (${h} bytes).
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 69773–69823, SHA-256 de4b43640c68d642.
Jev judged not model-facing (confidence 0.17; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: - Diff too large to include inline (${h} bytes).
- Diff too large to include inline (${h} bytes).
Failed to write snapshot to file, returning inline:
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 69963–70016, SHA-256 aec4e1b913777471.
Jev judged not model-facing (confidence 0.12; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: Failed to write snapshot to file, returning inline:
Failed to write snapshot to file, returning inline:
Action: ${e} · byte 70038
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 70038–70056, SHA-256 84534c77c1bb2a4b.
Jev judged not model-facing (confidence 0.57; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: ### Action: ${e}
### Action: ${e}
- Browser View ID: ${o} · byte 70096
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 70096–70121, SHA-256 d67e2b6d82d5c7ef.
Jev judged not model-facing (confidence 0.53; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: - Browser View ID: ${o}
- Browser View ID: ${o}
Page state · byte 70130
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 70130–70148, SHA-256 0508b0a90826c7b2.
Jev judged not model-facing (confidence 0.58; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: ### Page state
### Page state
- Page URL: ${c} · byte 70149
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 70149–70167, SHA-256 3a5d91d702502e02.
Jev judged not model-facing (confidence 0.5; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: - Page URL: ${c}
- Page URL: ${c}
- Page Title: ${d} · byte 70168
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 70168–70188, SHA-256 49717f4c543321e8.
Jev judged not model-facing (confidence 0.43; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: - Page Title: ${d}
- Page Title: ${d}
- Page Snapshot:
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 70189–70207, SHA-256 a88e5c1b2789768c.
Jev judged not model-facing (confidence 0.49; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: - Page Snapshot:
- Page Snapshot:
Snapshot diff (previous vs current) · byte 70239
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 70239–70282, SHA-256 7148a229621498e1.
Jev judged not model-facing (confidence 0.3; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: ### Snapshot diff (previous vs current)
### Snapshot diff (previous vs current)
Snapshot diff (previous vs current) · byte 70317
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 70317–70360, SHA-256 7148a229621498e1.
Jev judged not model-facing (confidence 0.28; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: ### Snapshot diff (previous vs current)
### Snapshot diff (previous vs current)
- Diff too large to include inline (${h} bytes). · byte 70361
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 70361–70411, SHA-256 de4b43640c68d642.
Jev judged not model-facing (confidence 0.26; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: - Diff too large to include inline (${h} bytes).
- Diff too large to include inline (${h} bytes).
Auto-snapshotting view ${t} (stale or missing)
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 70956–71004, SHA-256 96301ff6c58c372b.
Jev judged not model-facing (confidence 0.06; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: Auto-snapshotting view ${t} (stale or missing)
Auto-snapshotting view ${t} (stale or missing)
browserUtils must be provided for ensureFreshSnapshot
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 71025–71080, SHA-256 42675eac8c9f15d4.
Jev judged not model-facing (confidence 0.08; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: browserUtils must be provided for ensureFreshSnapshot
browserUtils must be provided for ensureFreshSnapshot
${n} buildPageSnapshot();
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 71090–71117, SHA-256 43c14c35553f1041.
Jev judged not model-facing (confidence 0.05; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: ${n} buildPageSnapshot();
${n} buildPageSnapshot();
Failed to update screenshot service: ${t}
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 71322–71365, SHA-256 f99179270f6e2656.
Jev judged not model-facing (confidence 0.04; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: Failed to update screenshot service: ${t}
Failed to update screenshot service: ${t}
(() = ({ viewportCssWidth: window.innerWidth, viewportCssHeight: window.innerHe
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 71462–71607, SHA-256 38f1093167d2d138.
Jev judged not model-facing (confidence 0.04; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: (() => ({ viewportCssWidth: window.innerWidth, viewportCssHeight: window.innerHeight, url: window.location.href, }))();
(() => ({
viewportCssWidth: window.innerWidth,
viewportCssHeight: window.innerHeight,
url: window.location.href,
}))();
Viewport screenshot metrics were incomplete
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 71799–71844, SHA-256 c46deabe6eb705d1.
Jev judged not model-facing (confidence 0.05; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: Viewport screenshot metrics were incomplete
Viewport screenshot metrics were incomplete
Viewport screenshot could not be normalized
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 71958–72003, SHA-256 4a9c6fdf7fb381d3.
Jev judged not model-facing (confidence 0.04; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: Viewport screenshot could not be normalized
Viewport screenshot could not be normalized
Failed to normalize viewport screenshot: ${t}
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 72090–72137, SHA-256 5bbf31b27882c980.
Jev judged not model-facing (confidence 0.05; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: Failed to normalize viewport screenshot: ${t}
Failed to normalize viewport screenshot: ${t}
getScreenshot viewId=${t}, taking screenshot
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 72433–72481, SHA-256 09798f6ea912f660.
Jev judged not model-facing (confidence 0.18; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: [getScreenshot] viewId=${t}, taking screenshot
[getScreenshot] viewId=${t}, taking screenshot
Failed to take screenshot: ${n.error}
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 72742–72781, SHA-256 030a4e36ac3cc11f.
Jev judged not model-facing (confidence 0.05; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: Failed to take screenshot: ${n.error}
Failed to take screenshot: ${n.error}
Error taking screenshot: ${t}
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 72811–72842, SHA-256 586e12581744b514.
Jev judged not model-facing (confidence 0.04; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: Error taking screenshot: ${t}
Error taking screenshot: ${t}
function setNativeValue(el, val) { const elTagName = el.tagName.toUpperCase(); l
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 72890–73387, SHA-256 545fb7fb6ae71c5e.
Jev judged not model-facing (confidence 0.02; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: function setNativeValue(el, val) { const elTagName = el.tagName.toUpperCase(); let valueSetter = null; if (elTagName === 'INPUT') { valueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value')?.set; } el…
function setNativeValue(el, val) {
const elTagName = el.tagName.toUpperCase();
let valueSetter = null;
if (elTagName === 'INPUT') {
valueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value')?.set;
} else if (elTagName === 'TEXTAREA') {
valueSetter = Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, 'value')?.set;
}
if (valueSetter) {
valueSetter.call(el, val);
} else {
el.value = val;
}
}
async function dispatchMouseClickSequenceInBrowser(element, options) { const glo
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 73397–77303, SHA-256 b73aa8deee282b9b.
Jev judged not model-facing (confidence 0.02; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: async function dispatchMouseClickSequenceInBrowser(element, options) { const globals = globalThis; const browserDocument = globals.document; const button = options.button ?? 'left'; const modifiers = options.modifiers ?? []; let butt…
async function dispatchMouseClickSequenceInBrowser(element, options) {
const globals = globalThis;
const browserDocument = globals.document;
const button = options.button ?? 'left';
const modifiers = options.modifiers ?? [];
let buttonValue = 0;
let buttonsValue = 1;
let clickEventType = 'click';
if (button === 'right') {
buttonValue = 2;
buttonsValue = 2;
clickEventType = 'contextmenu';
} else if (button === 'middle') {
buttonValue = 1;
buttonsValue = 4;
clickEventType = 'auxclick';
}
const pointerEventOptions = {
bubbles: true,
cancelable: true,
view: globals.window,
button: buttonValue,
buttons: buttonsValue,
ctrlKey: modifiers.includes('Control') || modifiers.includes('ControlOrMeta'),
shiftKey: modifiers.includes('Shift'),
altKey: modifiers.includes('Alt'),
metaKey: modifiers.includes('Meta') || modifiers.includes('ControlOrMeta'),
clientX: options.x,
clientY: options.y,
pointerId: 1,
pointerType: 'mouse',
isPrimary: true,
};
const mouseEventOptions = {
bubbles: true,
cancelable: true,
view: globals.window,
button: buttonValue,
buttons: buttonsValue,
ctrlKey: modifiers.includes('Control') || modifiers.includes('ControlOrMeta'),
shiftKey: modifiers.includes('Shift'),
altKey: modifiers.includes('Alt'),
metaKey: modifiers.includes('Meta') || modifiers.includes('ControlOrMeta'),
clientX: options.x,
clientY: options.y,
};
const previousActiveElement = browserDocument?.activeElement;
if (previousActiveElement && previousActiveElement !== element && previousActiveElement !== browserDocument?.body) {
if (typeof previousActiveElement.blur === 'function') {
previousActiveElement.blur();
}
}
if (typeof element.focus === 'function') {
element.focus();
}
await new Promise((resolve) => {
globals.setTimeout(resolve, 0);
});
element.dispatchEvent(new globals.PointerEvent('pointerover', pointerEventOptions));
element.dispatchEvent(new globals.PointerEvent('pointerenter', { ...pointerEventOptions, bubbles: false }));
element.dispatchEvent(new globals.MouseEvent('mouseover', mouseEventOptions));
element.dispatchEvent(new globals.MouseEvent('mouseenter', { ...mouseEventOptions, bubbles: false }));
element.dispatchEvent(new globals.PointerEvent('pointermove', pointerEventOptions));
element.dispatchEvent(new globals.MouseEvent('mousemove', mouseEventOptions));
element.dispatchEvent(new globals.PointerEvent('pointerdown', pointerEventOptions));
element.dispatchEvent(new globals.MouseEvent('mousedown', mouseEventOptions));
if (typeof element.focus === 'function') {
element.focus();
}
if ((options.holdDurationMs ?? 0) > 0) {
await new Promise((resolve) => {
globals.setTimeout(resolve, options.holdDurationMs);
});
}
element.dispatchEvent(new globals.PointerEvent('pointerup', pointerEventOptions));
element.dispatchEvent(new globals.MouseEvent('mouseup', mouseEventOptions));
element.dispatchEvent(new globals.MouseEvent(clickEventType, mouseEventOptions));
if (options.doubleClick) {
element.dispatchEvent(new globals.PointerEvent('pointerdown', pointerEventOptions));
element.dispatchEvent(new globals.MouseEvent('mousedown', mouseEventOptions));
element.dispatchEvent(new globals.PointerEvent('pointerup', pointerEventOptions));
element.dispatchEvent(new globals.MouseEvent('mouseup', mouseEventOptions));
element.dispatchEvent(new globals.MouseEvent(clickEventType, mouseEventOptions));
if (clickEventType === 'click') {
element.dispatchEvent(new globals.MouseEvent('dblclick', mouseEventOptions));
}
}
await new Promise((resolve) => {
globals.setTimeout(resolve, 0);
});
}
function getScrollableAncestors(el) { const ancestors = ; let current = el.par
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 77307–84515, SHA-256 44fbb4f117eee233.
Jev judged not model-facing (confidence 0.02; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: function getScrollableAncestors(el) { const ancestors = []; let current = el.parentElement; while (current && current !== document.body && current !== document.documentElement) { const style = window.getComputedStyle(current); const…
function getScrollableAncestors(el) {
const ancestors = [];
let current = el.parentElement;
while (current && current !== document.body && current !== document.documentElement) {
const style = window.getComputedStyle(current);
const overflowY = style.overflowY;
const overflowX = style.overflowX;
const isScrollable = (
(overflowY === 'auto' || overflowY === 'scroll' || overflowX === 'auto' || overflowX === 'scroll') &&
(current.scrollHeight > current.clientHeight || current.scrollWidth > current.clientWidth)
);
if (isScrollable) {
ancestors.push(current);
}
current = current.parentElement;
}
if (document.scrollingElement && (document.scrollingElement.scrollHeight > window.innerHeight || document.scrollingElement.scrollWidth > window.innerWidth)) {
ancestors.push(document.scrollingElement);
}
return ancestors;
}
function safeRound(val) {
if (typeof val !== 'number' || !Number.isFinite(val)) return 0;
return Math.round(val);
}
function getScrollContainerInfo(container) {
const rect = container.getBoundingClientRect();
const ref = container.getAttribute ? (container.getAttribute('data-cursor-ref') || null) : null;
const tag = container.tagName?.toLowerCase() || '';
const id = container.id || null;
const classes = container.className && typeof container.className === 'string'
? container.className.trim().split(/\s+/).slice(0, 2).join(' ')
: '';
return {
ref,
tag,
id,
classes,
scrollTop: safeRound(container.scrollTop),
scrollLeft: safeRound(container.scrollLeft),
scrollHeight: safeRound(container.scrollHeight),
scrollWidth: safeRound(container.scrollWidth),
clientHeight: safeRound(container.clientHeight),
clientWidth: safeRound(container.clientWidth),
canScrollDown: container.scrollTop + container.clientHeight < container.scrollHeight - 5,
canScrollUp: container.scrollTop > 5,
canScrollRight: container.scrollLeft + container.clientWidth < container.scrollWidth - 5,
canScrollLeft: container.scrollLeft > 5,
boundingBox: {
top: safeRound(rect.top),
left: safeRound(rect.left),
width: safeRound(rect.width),
height: safeRound(rect.height)
}
};
}
function isElementVisibleInContainer(el, container) {
const elRect = el.getBoundingClientRect();
const containerRect = container === document.scrollingElement
? { top: 0, left: 0, bottom: window.innerHeight, right: window.innerWidth }
: container.getBoundingClientRect();
const padding = 10;
return (
elRect.top >= containerRect.top - padding &&
elRect.bottom <= containerRect.bottom + padding &&
elRect.left >= containerRect.left - padding &&
elRect.right <= containerRect.right + padding
);
}
function scrollElementIntoContainer(el, container) {
const elRect = el.getBoundingClientRect();
const containerRect = container === document.scrollingElement
? { top: 0, left: 0, bottom: window.innerHeight, right: window.innerWidth, width: window.innerWidth, height: window.innerHeight }
: container.getBoundingClientRect();
let scrollTopDelta = 0;
let scrollLeftDelta = 0;
if (elRect.bottom > containerRect.bottom) {
scrollTopDelta = elRect.bottom - containerRect.bottom + 20;
} else if (elRect.top < containerRect.top) {
scrollTopDelta = elRect.top - containerRect.top - 20;
}
if (elRect.right > containerRect.right) {
scrollLeftDelta = elRect.right - containerRect.right + 20;
} else if (elRect.left < containerRect.left) {
scrollLeftDelta = elRect.left - containerRect.left - 20;
}
if (Math.abs(scrollTopDelta) > 5 || Math.abs(scrollLeftDelta) > 5) {
container.scrollBy({ top: scrollTopDelta, left: scrollLeftDelta, behavior: 'instant' });
return { scrolled: true, deltaY: safeRound(scrollTopDelta), deltaX: safeRound(scrollLeftDelta) };
}
return { scrolled: false, deltaY: 0, deltaX: 0 };
}
function isInViewport(rect) {
if (!rect || !Number.isFinite(rect.top) || !Number.isFinite(rect.bottom)) return false;
const padding = 10;
return (
rect.top >= -padding &&
rect.left >= -padding &&
rect.bottom <= window.innerHeight + padding &&
rect.right <= window.innerWidth + padding
);
}
function getSafeRect(element) {
const rect = element.getBoundingClientRect();
return {
top: safeRound(rect.top),
left: safeRound(rect.left),
bottom: safeRound(rect.bottom),
right: safeRound(rect.right),
width: safeRound(rect.width),
height: safeRound(rect.height)
};
}
async function ensureElementInView(element, maxAttempts) {
const attempts = maxAttempts || 5;
const scrollableAncestors = getScrollableAncestors(element);
let totalScrolledContainers = 0;
for (let attempt = 0; attempt < attempts; attempt++) {
const rect = getSafeRect(element);
if (isInViewport(rect)) {
return {
success: true,
attempts: attempt + 1,
scrolledContainers: totalScrolledContainers,
containerCount: scrollableAncestors.length
};
}
let didScroll = false;
for (let i = 0; i < scrollableAncestors.length; i++) {
const container = scrollableAncestors[i];
if (!isElementVisibleInContainer(element, container)) {
const scrollResult = scrollElementIntoContainer(element, container);
if (scrollResult.scrolled) {
totalScrolledContainers++;
didScroll = true;
await new Promise(r => setTimeout(r, 100));
}
}
}
if (didScroll) {
await new Promise(r => setTimeout(r, 50));
continue;
}
const newRect = getSafeRect(element);
if (!isInViewport(newRect)) {
try {
element.scrollIntoView({ block: 'center', inline: 'center', behavior: 'instant' });
await new Promise(r => setTimeout(r, 100));
} catch (e) {
element.scrollIntoView(true);
await new Promise(r => setTimeout(r, 100));
}
}
const finalRect = getSafeRect(element);
if (isInViewport(finalRect)) {
return {
success: true,
attempts: attempt + 1,
scrolledContainers: totalScrolledContainers,
containerCount: scrollableAncestors.length
};
}
for (let i = scrollableAncestors.length - 1; i >= 0; i--) {
const container = scrollableAncestors[i];
const scrollResult = scrollElementIntoContainer(element, container);
if (scrollResult.scrolled) {
totalScrolledContainers++;
await new Promise(r => setTimeout(r, 100));
}
}
}
const finalRect = getSafeRect(element);
const finalContainerInfos = scrollableAncestors.map(c => getScrollContainerInfo(c));
return {
success: false,
attempts: attempts,
rect: finalRect,
viewportSize: { width: window.innerWidth, height: window.innerHeight },
scrollContainers: finalContainerInfos,
scrolledContainers: totalScrolledContainers,
containerCount: scrollableAncestors.length
};
}
(attempt ${t.attempts})
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 84691–84717, SHA-256 7a5272ddb7abcbe7.
Jev judged not model-facing (confidence 0.06; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: (attempt ${t.attempts})
(attempt ${t.attempts})
${e} ${t.actionType}: ${t.targetDescription}${n}
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 84723–84773, SHA-256 199c1af1927edba4.
Jev judged not model-facing (confidence 0.07; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: ${e} ${t.actionType}: ${t.targetDescription}${n}
${e} ${t.actionType}: ${t.targetDescription}${n}
- ${t.error}
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 84814–84829, SHA-256 745fcdb2ea462bbc.
Jev judged not model-facing (confidence 0.06; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: - ${t.error}
- ${t.error}
No browser tab available
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 85016–85042, SHA-256 892e5421fa441a8f.
Jev judged not model-facing (confidence 0.04; role human). This is a classifier judgment, not proof of delivery.
Readable text: No browser tab available
No browser tab available
No browser tab available. Please navigate to a page first.
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 85073–85133, SHA-256 16f1b030dc2ec6f3.
Jev judged not model-facing (confidence 0.06; role human). This is a classifier judgment, not proof of delivery.
Readable text: No browser tab available. Please navigate to a page first.
No browser tab available. Please navigate to a page first.
${q} ${c} ${pt} function isDropdownElement(el) { if ( el) return false; const ta
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 85332–103038, SHA-256 415bcd9b9f34f936.
Jev judged not model-facing (confidence 0.05; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: ${q} ${c} ${pt} function isDropdownElement(el) { if (!el) return false; const tag = el.tagName?.toLowerCase() || ''; const role = el.getAttribute?.('role') || ''; const dropdownRoles = ['listbox', 'menu', 'combobox', 'tre…
${q}
${c}
${pt}
function isDropdownElement(el) {
if (!el) return false;
const tag = el.tagName?.toLowerCase() || '';
const role = el.getAttribute?.('role') || '';
const dropdownRoles = ['listbox', 'menu', 'combobox', 'tree', 'grid'];
const dropdownClasses = ['dropdown', 'select-options', 'autocomplete', 'suggestions', 'popover', 'menu-list', 'option-list'];
if (dropdownRoles.includes(role)) return true;
if (tag === 'select' || tag === 'datalist') return true;
const ariaHaspopup = el.getAttribute?.('aria-haspopup');
const ariaExpanded = el.getAttribute?.('aria-expanded');
if (ariaHaspopup && ariaHaspopup !== 'false') return true;
if (ariaExpanded === 'true') return true;
const classList = el.className && typeof el.className === 'string' ? el.className.toLowerCase() : '';
if (dropdownClasses.some(cls => classList.includes(cls))) return true;
const style = window.getComputedStyle(el);
const isAbsoluteOrFixed = style.position === 'absolute' || style.position === 'fixed';
const hasHighZIndex = parseInt(style.zIndex, 10) > 10;
const hasOptions = el.querySelectorAll('[role="option"], [role="menuitem"], option, li').length > 0;
if (isAbsoluteOrFixed && hasHighZIndex && hasOptions) return true;
return false;
}
function findDropdownAncestor(el) {
let current = el;
while (current && current !== document.body) {
if (isDropdownElement(current)) {
return current;
}
current = current.parentElement;
}
return null;
}
async function attemptDropdownClose(dropdownEl) {
const result = {
attempted: true,
method: null,
success: false
};
document.body.dispatchEvent(new MouseEvent('click', {
bubbles: true,
cancelable: true,
view: window,
clientX: 0,
clientY: 0
}));
result.method = 'click-body';
await new Promise(r => setTimeout(r, 100));
const style = window.getComputedStyle(dropdownEl);
if (style.display === 'none' || style.visibility === 'hidden' || parseFloat(style.opacity) === 0) {
result.success = true;
return result;
}
document.dispatchEvent(new KeyboardEvent('keydown', {
key: 'Escape',
code: 'Escape',
keyCode: 27,
bubbles: true,
cancelable: true
}));
result.method = 'press-escape';
await new Promise(r => setTimeout(r, 100));
const styleAfterEsc = window.getComputedStyle(dropdownEl);
if (styleAfterEsc.display === 'none' || styleAfterEsc.visibility === 'hidden' || parseFloat(styleAfterEsc.opacity) === 0) {
result.success = true;
}
return result;
}
function getBlockingElementInfo(hitElement, targetElement) {
if (!hitElement) {
return null;
}
const tag = hitElement.tagName?.toLowerCase() || '';
const id = hitElement.id || null;
const classes = hitElement.className && typeof hitElement.className === 'string'
? hitElement.className.trim().split(/\s+/).filter(Boolean)
: [];
const role = hitElement.getAttribute?.('role') || null;
const rect = hitElement.getBoundingClientRect();
const ref = hitElement.getAttribute?.('data-cursor-ref') || null;
const nonInteractiveTags = ['p', 'span', 'div', 'label', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'li', 'td', 'th', 'caption', 'figcaption', 'legend', 'small', 'strong', 'em', 'b', 'i', 'u', 'mark', 'del', 'ins', 'sub', 'sup', 'code', 'pre', 'blockquote', 'cite', 'q', 'abbr', 'address', 'time'];
const interactiveRoles = ['button', 'link', 'checkbox', 'radio', 'textbox', 'combobox', 'listbox', 'menuitem', 'tab', 'switch', 'slider', 'spinbutton', 'option'];
const dropdownRoles = ['listbox', 'menu', 'combobox', 'tree', 'grid'];
const isNonInteractive = (
nonInteractiveTags.includes(tag) &&
!role &&
!hitElement.onclick &&
!hitElement.hasAttribute('tabindex') &&
hitElement.getAttribute('contenteditable') !== 'true'
);
const isInteractiveByRole = role && interactiveRoles.includes(role);
const isInteractiveByTag = ['a', 'button', 'input', 'select', 'textarea', 'summary'].includes(tag);
const dropdownAncestor = findDropdownAncestor ? findDropdownAncestor(hitElement) : null;
const isDropdownOption = role === 'option' || role === 'menuitem' || tag === 'option' ||
(dropdownAncestor && dropdownAncestor !== hitElement);
const info = {
tag,
id,
classes,
role,
ref,
isNonInteractiveText: isNonInteractive && !isInteractiveByRole && !isInteractiveByTag,
isDropdownOption: isDropdownOption,
dropdownAncestorRef: dropdownAncestor ? (dropdownAncestor.getAttribute?.('data-cursor-ref') || null) : null,
boundingBox: {
top: Math.round(rect.top),
left: Math.round(rect.left),
width: Math.round(rect.width),
height: Math.round(rect.height),
bottom: Math.round(rect.bottom),
right: Math.round(rect.right)
}
};
if (tag === 'iframe') {
info.iframe = getIframeInfo(hitElement);
}
if (isNonInteractive && targetElement) {
const targetRect = targetElement.getBoundingClientRect();
const hitRect = rect;
info.clickOffsetSuggestion = null;
if (hitRect.bottom <= targetRect.bottom && hitRect.top >= targetRect.top) {
if (hitRect.right < targetRect.right - 10) {
info.clickOffsetSuggestion = { offsetX: Math.round(targetRect.width - 5), description: 'right edge' };
} else if (hitRect.left > targetRect.left + 10) {
info.clickOffsetSuggestion = { offsetX: 5, description: 'left edge' };
}
}
if (!info.clickOffsetSuggestion) {
if (hitRect.bottom < targetRect.bottom - 10) {
info.clickOffsetSuggestion = { offsetY: Math.round(targetRect.height - 5), description: 'bottom edge' };
} else if (hitRect.top > targetRect.top + 10) {
info.clickOffsetSuggestion = { offsetY: 5, description: 'top edge' };
}
}
}
return info;
}
function getIframeInfo(iframe) {
if (!iframe || iframe.tagName?.toLowerCase() !== 'iframe') {
return null;
}
const src = iframe.getAttribute('src') || null;
const sandbox = iframe.getAttribute('sandbox') || null;
const title = iframe.getAttribute('title') || null;
const name = iframe.getAttribute('name') || null;
const allow = iframe.getAttribute('allow') || null;
let isSameOrigin = false;
try {
if (src) {
const iframeUrl = new URL(src, window.location.href);
isSameOrigin = iframeUrl.origin === window.location.origin;
}
} catch (e) {
isSameOrigin = false;
}
return {
src,
sandbox,
title,
name,
allow,
isSameOrigin
};
}
function attemptRefRecovery(ref, expectedRole, expectedName) {
const allElements = querySelectorAllIncludingOpenShadowRoots('[data-cursor-ref]');
let bestMatch = null;
let bestScore = 0;
for (const el of allElements) {
const elRole = el.getAttribute('role') || getImplicitRole(el);
const elName = computeAccessibleName(el, elRole);
let score = 0;
if (expectedRole && elRole === expectedRole) {
score += 50;
}
if (expectedName && elName) {
const expectedLower = expectedName.toLowerCase();
const actualLower = elName.toLowerCase();
if (actualLower === expectedLower) {
score += 50;
} else if (actualLower.includes(expectedLower) || expectedLower.includes(actualLower)) {
score += 25;
}
}
if (score > bestScore) {
bestScore = score;
bestMatch = el;
}
}
if (bestMatch && bestScore >= 50) {
return {
success: true,
element: bestMatch,
newRef: bestMatch.getAttribute('data-cursor-ref'),
matchScore: bestScore
};
}
return { success: false };
}
function parseExpectedDescription(description) {
if (!description) return { role: null, name: null };
const desc = description.toLowerCase();
let role = null;
let name = null;
const rolePatterns = [
/role=["']?([^"',)]+)/,
/^(button|link|textbox|checkbox|radio|combobox|listbox|menuitem|option|slider|switch|tab)/
];
for (const pattern of rolePatterns) {
const match = desc.match(pattern);
if (match) {
role = match[1].trim();
break;
}
}
const namePatterns = [
/(?:aria-label|text|name)=["']?([^"']+)["']?/,
/["']([^"']+)["']/
];
for (const pattern of namePatterns) {
const match = description.match(pattern);
if (match) {
name = match[1].trim();
break;
}
}
if (!name && description) {
name = description.replace(/(.*)/, '').trim();
}
return { role, name };
}
${ut}
(async function() {
const ref = ${JSON.stringify(s)};
const expectedDescription = ${JSON.stringify(i)};
const maxScrollAttempts = ${a};
const retryOnStaleRef = ${l};
const autoCloseDropdowns = ${d};
const retryWithOffset = ${u};
let offsetX = ${t.offsetX??"null"};
let offsetY = ${t.offsetY??"null"};
const holdDurationMs = ${t.holdDurationMs??0};
let element = null;
let usedRef = ref;
let recoveryAttempted = false;
let dropdownRecovery = null;
let offsetRetry = null;
const findResult = findElementByRef(ref);
element = findResult.element;
if (!element && retryOnStaleRef && expectedDescription) {
const { role: expectedRole, name: expectedName } = parseExpectedDescription(expectedDescription);
const recovery = attemptRefRecovery(ref, expectedRole, expectedName);
if (recovery.success) {
element = recovery.element;
usedRef = recovery.newRef;
recoveryAttempted = true;
}
}
if (!element) {
return {
success: false,
error: 'Element not found: ' + ref + '. Take a snapshot to get updated refs.',
staleRef: true,
recoveryAttempted: recoveryAttempted
};
}
try {
validateElementForInteraction(element, usedRef, 'click', expectedDescription);
} catch (validationError) {
return {
success: false,
error: validationError.message,
validationFailed: true
};
}
const scrollResult = await ensureElementInView(element, maxScrollAttempts);
if (!scrollResult.success) {
let errorMsg = 'Could not scroll element into view after ' + scrollResult.attempts + ' attempts.';
if (scrollResult.containerCount > 0) {
errorMsg += ' Found ' + scrollResult.containerCount + ' scroll container(s).';
}
if (scrollResult.rect) {
const r = scrollResult.rect;
const vp = scrollResult.viewportSize;
const belowBy = r.bottom - vp.height;
const aboveBy = -r.top;
if (Number.isFinite(belowBy) && belowBy > 0) {
errorMsg += ' Element is ' + Math.round(belowBy) + 'px below viewport.';
} else if (Number.isFinite(aboveBy) && aboveBy > 0) {
errorMsg += ' Element is ' + Math.round(aboveBy) + 'px above viewport.';
}
}
return {
success: false,
error: errorMsg,
scrollFailed: true,
elementRect: scrollResult.rect,
viewportSize: scrollResult.viewportSize,
scrollContainers: scrollResult.scrollContainers,
scrolledContainers: scrollResult.scrolledContainers,
containerCount: scrollResult.containerCount
};
}
const rect = element.getBoundingClientRect();
let cx, cy;
function computeClickCoords(oX, oY) {
let x, y;
if (oX !== null && oY !== null) {
x = Math.round(rect.left + oX);
y = Math.round(rect.top + oY);
} else if (oX !== null) {
x = Math.round(rect.left + oX);
y = Math.round(rect.top + rect.height / 2);
} else if (oY !== null) {
x = Math.round(rect.left + rect.width / 2);
y = Math.round(rect.top + oY);
} else {
x = Math.round(rect.left + rect.width / 2);
y = Math.round(rect.top + rect.height / 2);
}
return { x, y };
}
const coords = computeClickCoords(offsetX, offsetY);
cx = coords.x;
cy = coords.y;
let hitCheck = expectHitTarget({ x: cx, y: cy }, element, usedRef);
if (!hitCheck.hit) {
const doc = document;
const hitElement = getDeepElementFromPoint(doc, cx, cy);
const blockingInfo = getBlockingElementInfo(hitElement, element);
if (autoCloseDropdowns && blockingInfo && (blockingInfo.isDropdownOption || blockingInfo.dropdownAncestorRef)) {
const dropdownEl = blockingInfo.dropdownAncestorRef
? findElementByRef(blockingInfo.dropdownAncestorRef).element
: findDropdownAncestor(hitElement);
if (dropdownEl) {
dropdownRecovery = {
detected: true,
dropdownRef: dropdownEl.getAttribute('data-cursor-ref') || null,
dropdownTag: dropdownEl.tagName?.toLowerCase() || '',
dropdownRole: dropdownEl.getAttribute('role') || null,
recoveryAttempted: true,
recoverySucceeded: false
};
const closeResult = await attemptDropdownClose(dropdownEl);
dropdownRecovery.recoveryAction = closeResult.method;
dropdownRecovery.recoverySucceeded = closeResult.success;
if (closeResult.success) {
await new Promise(r => setTimeout(r, 50));
hitCheck = expectHitTarget({ x: cx, y: cy }, element, usedRef);
}
}
}
if (!hitCheck.hit && retryWithOffset && blockingInfo && blockingInfo.isNonInteractiveText && blockingInfo.clickOffsetSuggestion) {
const suggestion = blockingInfo.clickOffsetSuggestion;
offsetRetry = {
attempted: true,
suggestedOffset: { x: suggestion.offsetX, y: suggestion.offsetY },
retrySucceeded: false
};
const newOffsetX = suggestion.offsetX !== undefined ? suggestion.offsetX : offsetX;
const newOffsetY = suggestion.offsetY !== undefined ? suggestion.offsetY : offsetY;
const newCoords = computeClickCoords(newOffsetX, newOffsetY);
const retryHitCheck = expectHitTarget({ x: newCoords.x, y: newCoords.y }, element, usedRef);
if (retryHitCheck.hit) {
cx = newCoords.x;
cy = newCoords.y;
offsetX = newOffsetX;
offsetY = newOffsetY;
hitCheck = retryHitCheck;
offsetRetry.retrySucceeded = true;
}
}
}
if (!hitCheck.hit) {
const doc = document;
const hitElement = getDeepElementFromPoint(doc, cx, cy);
const blockingInfo = getBlockingElementInfo(hitElement, element);
let blockingType = hitCheck.blockingType;
if (blockingInfo && (blockingInfo.isDropdownOption || blockingInfo.dropdownAncestorRef)) {
blockingType = 'dropdown';
}
return {
success: false,
hitTargetFailed: true,
error: hitCheck.error || 'Click would not reach the intended element.',
interceptedBy: hitCheck.interceptedBy,
interceptedRef: hitCheck.interceptedRef,
blockingType: blockingType,
blockingElementInfo: blockingInfo,
suggestion: hitCheck.suggestion,
targetRef: usedRef,
targetPreview: previewNode(element),
scrollAttempts: scrollResult.attempts,
dropdownRecovery: dropdownRecovery,
offsetRetry: offsetRetry,
pageState: {
url: window.location.href,
title: document.title,
snapshot: buildPageSnapshot().tree
}
};
}
await dispatchMouseClickSequenceInBrowser(element, {
x: cx,
y: cy,
button: ${JSON.stringify(t.button??"left")},
modifiers: ${JSON.stringify(t.modifiers||[])},
doubleClick: ${JSON.stringify(t.doubleClick??!1)},
holdDurationMs: holdDurationMs
});
const snapshotResult = buildPageSnapshot();
return {
success: true,
usedRef: usedRef,
refRecovered: recoveryAttempted,
scrollAttempts: scrollResult.attempts,
scrolledContainers: scrollResult.scrolledContainers || 0,
doubleClick: ${JSON.stringify(t.doubleClick)} || false,
button: ${JSON.stringify(t.button)} || 'left',
offsetUsed: offsetX !== null || offsetY !== null,
holdDuration: holdDurationMs,
dropdownRecovery: dropdownRecovery,
offsetRetry: offsetRetry,
pageState: {
url: window.location.href,
title: document.title,
snapshot: snapshotResult.tree
}
};
})();
Error: Click target intercepted
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 103151–103184, SHA-256 e48d84e477a64e1f.
Jev judged not model-facing (confidence 0.04; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: Error: Click target intercepted
Error: Click target intercepted
Click intercepted by non-interactive text element: ${t.tag}
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 103257–103320, SHA-256 cc3c5951a91a98f6.
Jev judged not model-facing (confidence 0.06; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: Click intercepted by non-interactive text element: <${t.tag}>
Click intercepted by non-interactive text element: <${t.tag}>
Click intercepted by: ${t.tag}
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 103330–103363, SHA-256 3f288f9c84fb1c68.
Jev judged not model-facing (confidence 0.05; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: Click intercepted by: <${t.tag}
Click intercepted by: <${t.tag}
id="${t.id}"
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 103387–103402, SHA-256 a961de8594ec6d06.
Jev judged not model-facing (confidence 0.05; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: id="${t.id}"
id="${t.id}"
class="${t.classes.slice(0,3).join(" ")}"
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 103451–103495, SHA-256 5fa8f84d1ec03c04.
Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: class="${t.classes.slice(0,3).join(" ")}"
class="${t.classes.slice(0,3).join(" ")}"
role="${t.role}"
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 103521–103540, SHA-256 fcfbb0ed06d033ac.
Jev judged not model-facing (confidence 0.13; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: role="${t.role}"
role="${t.role}"
Position: top=${t.boundingBox.top}, left=${t.boundingBox.left}, ${t.boundingBox.
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 103584–103696, SHA-256 ae261244297eee2c.
Jev judged not model-facing (confidence 0.21; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: Position: top=${t.boundingBox.top}, left=${t.boundingBox.left}, ${t.boundingBox.width}x${t.boundingBox.height}
Position: top=${t.boundingBox.top}, left=${t.boundingBox.left}, ${t.boundingBox.width}x${t.boundingBox.height}
Blocking element ref: ${t.ref}
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 103712–103744, SHA-256 1732c39448990f64.
Jev judged not model-facing (confidence 0.31; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: Blocking element ref: ${t.ref}
Blocking element ref: ${t.ref}
Suggestion: Use offsetX=${n.offsetX} to click the ${n.description} of the target
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 103867–103958, SHA-256 c1da5d4f239f631e.
Jev judged not model-facing (confidence 0.42; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: Suggestion: Use offsetX=${n.offsetX} to click the ${n.description} of the target element.
Suggestion: Use offsetX=${n.offsetX} to click the ${n.description} of the target element.
Suggestion: Use offsetY=${n.offsetY} to click the ${n.description} of the target
Source: desktop/Cursor.app/Contents/Resources/app/extensions/cursor-browser-automation/dist/extension.js, bytes 103987–104078, SHA-256 85a2f69b85ed6beb.
Jev judged not model-facing (confidence 0.34; role code_data). This is a classifier judgment, not proof of delivery.
Readable text: Suggestion: Use offsetY=${n.offsetY} to click the ${n.description} of the target element.
Suggestion: Use offsetY=${n.offsetY} to click the ${n.description} of the target element.