Evidence and archive

workbench.glass.main.js · part 506

Full reference
Topics
Status
Showing all 60

60 text occurrences from desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, part 506. Every entry preserves the shipped literal and its saved verdict or selection reason.

File contents and all parts · All files

Shipped text

(function() { 'use strict'; if (window. cursorElementPickerInjected) return; wi

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28796407–28854677, SHA-256 57e751445e1cf4b7.

Not classified: Complete source exceeds the request budget; needs a larger budget or local review.

Readable text: (function() { 'use strict'; if (window.__cursorElementPickerInjected) return; window.__cursorElementPickerInjected = true; if (window !== window.top) return; // Element identity is tracked off-DOM via WeakMap to avoid leaking // '…


(function() {
	'use strict';

	if (window.__cursorElementPickerInjected) return;
	window.__cursorElementPickerInjected = true;

	if (window !== window.top) return;

	// Element identity is tracked off-DOM via WeakMap to avoid leaking
	// 'data-cursor-element-id' attributes onto the host page. The attribute
	// previously broke Next.js fast-refresh / HMR on customer apps because
	// React reconciliation saw foreign attributes on tracked nodes.
	const elementIdPrefix = 'cursor-el-' + Math.random().toString(36).slice(2, 7) + '-';
	let elementIdCounter = 0;
	const cursorElementIdMap = new WeakMap();
	let selectionMode = false;
	// The element under a region still being noted, so the host can follow it
	// when a resize reflows the page. Held weakly: nothing clears it when the
	// draft ends.
	let trackedRegionAnchor = null;
	let frozen = false;
	// Default true so the first hover shows the hint even if the overlay's
	// initial 'set-show-hint' arrives before this script is injected.
	let hintMode = true;
	let hoverIdentity = true;
	let cursorStyleOverride = null;
	let highlightBox = null;
	let identityPill = null;
	let hoverPreviewBox = null;
	// Identity-pill content cache, keyed on (element, hintMode). The pill
	// also renders mutable state (innerText suffix, id/class), so this
	// deliberately accepts a stale label while the cursor stays within one
	// element: re-reading innerText is a forced layout on every hover RAF
	// tick, which is the cost this cache exists to remove.
	let pillContentElement = null;
	let pillContentHintMode = null;
	let lastHoveredElement = null;
	let lastSentHoveredUid = null;
	let rafPending = false;
	let listeners = null;
	let lastMouseX = 0;
	let lastMouseY = 0;
	let altHeld = false;
	let hoverSuppressed = false;
	// True between hide-picker-highlight and restore-picker-highlight. All
	// deferred visual updates (hover RAFs, geometry-refresh RAFs) must
	// no-op while set, or a callback armed before the hide re-shows picker
	// chrome and it gets captured into the submitted screenshot.
	let hiddenForScreenshot = false;
	let frozenSelectionHueIndex = 0;

	const multiSelectBoxes = new Map();
	const multiSelectElements = new Map();
	const multiSelectHueIndices = new Map();
	// Fingerprint (tag/id/class/innerText) captured at pick time, keyed by
	// element. After an in-place DOM swap (hot-module replacement) it
	// re-attaches the pick to the equivalent fresh element. WeakMap keys let
	// replaced elements be collected.
	const selectionFingerprints = new WeakMap();
	// Tracked elements whose subtree mutated in place; their fingerprints
	// re-capture on the next reconcile while still rendered.
	const dirtyFingerprintElements = new Set();
	// uid -> deadline (ms epoch) for a disconnected pick waiting to
	// re-resolve before it is pruned.
	const pendingReconnects = new Map();
	const RECONNECT_GRACE_MS = ${t.reconnectGraceMs??400};
	let reconcileRetryTimer = 0;
	// True when a mutation batch added nodes since the last resolution
	// attempt: only then can a pending disconnect resolve differently.
	let reconcileHasNewCandidates = false;
	// A rebind or prune happened but the settle notification is still owed
	// (deferred while other disconnects are mid-grace).
	let selectionSettleDirty = false;
	let domMutationObserver = null;
	let domMutationObserverActive = false;

	function sendToHost(channel, data) {
		const bridge = ${e};
		if (bridge) bridge.send(channel, data);
	}

	// Build-time seam: extension builds substitute a predicate that recognizes
	// their own isolated-world UI host. See BrowserElementPickerScriptOptions.
	const isInjectedUiEvent = ${n};

	const HUE_COLORS = ${Pqf};
	function getHueColor(idx) {
		return HUE_COLORS[((idx % HUE_COLORS.length) + HUE_COLORS.length) % HUE_COLORS.length];
	}

	const scrollByAt = ${w6w.toString()};

	const APPEND_HUE_INDICES = ${Mqf};
	function currentPickedCount() {
		if (multiSelectElements.size > 0) {
			return multiSelectElements.size;
		}
		if (frozen && lastHoveredElement) {
			return 1;
		}
		return 0;
	}
	function nextPickHueIndex() {
		const count = currentPickedCount();
		if (count <= 0) return 0;
		return APPEND_HUE_INDICES[(count - 1) % APPEND_HUE_INDICES.length];
	}

	function hueIndexForElement(el) {
		const uid = getOrAssignElementId(el);
		if (uid && multiSelectHueIndices.has(uid)) {
			return multiSelectHueIndices.get(uid);
		}
		return frozenSelectionHueIndex;
	}

	function getHoverHueIndex() {
		return altHeld ? nextPickHueIndex() : 0;
	}

	function refreshHoverHues() {
		if (hoverPreviewBox && hoverPreviewBox.style.display !== 'none') {
			const c = getHueColor(getHoverHueIndex());
			hoverPreviewBox.style.border = '2px solid ' + c.hoverBorder;
			hoverPreviewBox.style.background = c.hoverBg;
		}
		if (!frozen && highlightBox && highlightBox.style.display !== 'none') {
			const c = getHueColor(getHoverHueIndex());
			highlightBox.style.border = '2px solid ' + c.hoverBorder;
			highlightBox.style.background = c.hoverBg;
		}
	}

	const SVG_SKIP = new Set([
		'svg', 'path', 'circle', 'rect', 'line', 'polyline',
		'polygon', 'g', 'use', 'defs', 'clippath', 'mask',
	]);

	const INLINE_SKIP = new Set([
		'span', 'em', 'strong', 'b', 'i', 'u', 'small',
		'sub', 'sup', 'br', 'wbr',
	]);

	const STRUCTURAL_SKIP = new Set([
		'html', 'head', 'script', 'style', 'link', 'meta',
		'title', 'base', 'noscript', 'template',
	]);

	const INTERACTIVE_TAGS = new Set([
		'button', 'a', 'input', 'select', 'textarea', 'label',
	]);

	const INTERACTIVE_ROLES = new Set([
		'button', 'link', 'tab', 'menuitem',
		'checkbox', 'radio', 'switch',
	]);

	const IDENTITY_INTERACTIVE_TAGS = new Set([
		'button', 'a', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'label', 'th', 'td',
	]);

	${kVf}

	function getOrAssignElementId(element) {
		if (!element || element.nodeType !== Node.ELEMENT_NODE) return null;
		let id = cursorElementIdMap.get(element);
		if (!id) {
			id = elementIdPrefix + (++elementIdCounter);
			cursorElementIdMap.set(element, id);
		}
		return id;
	}

	const getElementPathBase = ${y6w.toString()};
	function getElementPath(element) {
		return getElementPathBase(element, isPickerOverlayNode);
	}

	const resolveRestoreItemsBase = ${S6w.toString()};
	function resolveRestoreItems(items, isReserved) {
		return resolveRestoreItemsBase(
			document,
			items,
			isReserved
				? (el) => isPickerOverlayNode(el) || isReserved(el)
				: isPickerOverlayNode
		);
	}

	function isInteractiveOverride(el, tag) {
		if (INTERACTIVE_TAGS.has(tag)) return true;
		const role = el.getAttribute && el.getAttribute('role');
		if (role && INTERACTIVE_ROLES.has(role)) return true;
		if (el.hasAttribute && el.hasAttribute('onclick')) return true;
		if (el.id) return true;
		if (hasComponentBoundary(el)) return true;
		return false;
	}

	function bubbleToMeaningfulElement(raw) {
		let el = raw;
		let depth = 0;
		while (el && depth < 5) {
			const tag = el.tagName.toLowerCase();
			if (isInteractiveOverride(el, tag)) return el;
			if (!SVG_SKIP.has(tag) && !INLINE_SKIP.has(tag)) return el;
			el = el.parentElement;
			depth++;
		}
		return raw;
	}

	function isPickerOverlayNode(node) {
		if (node === highlightBox || node === identityPill || node === hoverPreviewBox) return true;
		if (node && node.getAttribute && node.getAttribute('data-cursor-picker-multiselect') === 'true') return true;
		if (node && node.getAttribute && node.getAttribute('data-cursor-picker-shimmer') === 'true') return true;
		if (node && node.getAttribute && node.getAttribute('data-cursor-picker-shimmer-sweep') === 'true') return true;
		if (node && node.getAttribute && node.getAttribute('data-cursor-picker-shimmer-styles') === 'true') return true;
		return false;
	}

	function isMeaningfulCandidate(el) {
		if (!el || el.nodeType !== Node.ELEMENT_NODE) return false;
		if (isPickerOverlayNode(el)) return false;
		const tag = el.tagName.toLowerCase();
		if (STRUCTURAL_SKIP.has(tag)) return false;
		if (isInteractiveOverride(el, tag)) return true;
		if (SVG_SKIP.has(tag)) return false;
		if (INLINE_SKIP.has(tag)) return false;
		return true;
	}

	function findMeaningfulAncestor(el) {
		if (!el || el === document.body) return null;
		let parent = el.parentElement;
		let depth = 0;
		while (parent && parent !== document.body && depth < 32) {
			if (isPickerOverlayNode(parent)) {
				parent = parent.parentElement;
				depth++;
				continue;
			}
			const tag = parent.tagName.toLowerCase();
			if (STRUCTURAL_SKIP.has(tag)) {
				parent = parent.parentElement;
				depth++;
				continue;
			}
			if (isInteractiveOverride(parent, tag)) return parent;
			if (!SVG_SKIP.has(tag) && !INLINE_SKIP.has(tag)) return parent;
			parent = parent.parentElement;
			depth++;
		}
		if (parent === document.body) return parent;
		return null;
	}

	function findFirstMeaningfulChild(el) {
		if (!el || !el.children || el.children.length === 0) return null;
		for (let i = 0; i < el.children.length; i++) {
			const child = el.children[i];
			if (isPickerOverlayNode(child)) continue;
			if (isMeaningfulCandidate(child)) return child;
			const deeper = findFirstMeaningfulChild(child);
			if (deeper) return deeper;
		}
		return null;
	}

	function findMeaningfulSibling(el, direction) {
		if (!el || !el.parentElement) return null;
		const siblings = [];
		let currentIndex = -1;
		const children = el.parentElement.children;
		for (let i = 0; i < children.length; i++) {
			const child = children[i];
			if (isPickerOverlayNode(child)) continue;
			if (!isMeaningfulCandidate(child)) continue;
			if (child === el) {
				currentIndex = siblings.length;
			}
			siblings.push(child);
		}
		if (siblings.length === 0 || currentIndex === -1) return null;
		if (siblings.length === 1) return null;
		const offset = direction === 'next' ? 1 : -1;
		const nextIndex =
			(currentIndex + offset + siblings.length) % siblings.length;
		return siblings[nextIndex];
	}

	function buildIdentityParts(element) {
		const tag = element.tagName.toLowerCase();
		const fwInfo = detectFrameworkInfoCached(element);
		let boldPart = '';
		let lightPart = '';
		if (fwInfo && fwInfo.name) {
			boldPart = fwInfo.name + ' \u00B7 ';
			lightPart = tag;
		} else if (element.id) {
			lightPart = tag;
			boldPart = '#' + element.id;
		} else if (element.className && typeof element.className === 'string') {
			const first = element.className.trim().split(/\s+/)[0];
			if (first) {
				lightPart = tag;
				boldPart = '.' + first;
			} else {
				lightPart = tag;
			}
		} else {
			lightPart = tag;
		}

		let suffix = '';
		if (IDENTITY_INTERACTIVE_TAGS.has(tag) || (element.getAttribute && element.getAttribute('role') === 'button')) {
			const innerText = (element.innerText || '').trim();
			if (innerText.length > 0 && innerText.length <= 30) {
				suffix = ' "' + innerText + '"';
			} else if (innerText.length > 30) {
				suffix = ' "' + innerText.substring(0, 27) + '..."';
			}
		}
		return { boldPart, lightPart, suffix };
	}

	// Write-only: callers pass precomputed identity parts so the layout
	// reads in buildIdentityParts stay ahead of any style writes.
	function renderPillContent(parts, showHint) {
		while (identityPill.firstChild) identityPill.firstChild.remove();

		const line = document.createElement('div');
		line.style.cssText = 'white-space:nowrap;overflow:hidden;text-overflow:ellipsis;';
		if (parts.boldPart) {
			const b = document.createElement('span');
			b.style.fontWeight = '500';
			b.textContent = parts.boldPart;
			line.appendChild(b);
		}
		if (parts.lightPart) {
			const l = document.createElement('span');
			l.style.fontWeight = '400';
			l.textContent = parts.lightPart;
			line.appendChild(l);
		}
		if (parts.suffix) {
			const s = document.createElement('span');
			s.style.fontWeight = '400';
			s.textContent = parts.suffix;
			line.appendChild(s);
		}
		identityPill.appendChild(line);

		if (showHint) {
			const hint = document.createElement('div');
			hint.style.cssText = 'font-weight:400;margin-top:4px;opacity:0.85;white-space:nowrap;';
			hint.textContent = 'Click to select, drag to draw';
			identityPill.appendChild(hint);
		}
	}

	function buildPayload(element, hueIndex) {
		const rect = element.getBoundingClientRect();
		const cs = window.getComputedStyle(element);
		const className = typeof element.className === 'string'
			? element.className
			: (element.className && element.className.baseVal) || '';
		const fwInfo = detectFrameworkInfoCached(element);
		const payload = {
			tagName: String(element.tagName).substring(0, ${Lhs}),
			id: String(element.id || '').substring(0, ${Ohs}),
			uniqueId: String(getOrAssignElementId(element) || '').substring(0, ${RAi}),
			className: String(className).substring(0, ${Fhs}),
			innerText: element.innerText ? element.innerText.substring(0, 200) : '',
			path: getElementPath(element).substring(0, ${ISl}),
			// Keep page payloads within the host validator's ceilings.
			attributes: Array.from(element.attributes || [])
				.slice(0, ${ESl})
				.map(a => ({
					name: String(a.name).substring(0, ${CSl}),
					value: String(a.value).substring(0, ${TSl}),
				})),
			rect: {
				top: rect.top, left: rect.left,
				width: rect.width, height: rect.height
			},
			styles: {
				color: String(cs.color).substring(0, ${P9e}),
				backgroundColor: String(cs.backgroundColor).substring(0, ${P9e}),
				fontSize: String(cs.fontSize).substring(0, ${P9e}),
				fontFamily: String(cs.fontFamily).substring(0, ${xSl}),
				display: String(cs.display).substring(0, ${P9e}),
				position: String(cs.position).substring(0, ${P9e})
			},
			component: fwInfo ? String(fwInfo.name).substring(0, ${PAi}) : undefined,
			componentStack: fwInfo && fwInfo.stack.length > 0
				? fwInfo.stack.map(name => String(name).substring(0, ${PAi}))
				: undefined,
			framework: fwInfo ? fwInfo.framework : undefined,
			componentPropsJson: undefined,
		};
		if (typeof hueIndex === 'number') {
			payload.hueIndex = hueIndex;
		}
		if (element.isConnected) {
			selectionFingerprints.set(element, {
				tagName: payload.tagName,
				id: payload.id,
				className: payload.className,
				innerText: payload.innerText,
			});
		}
		return payload;
	}

	// Lighter-weight capture than buildPayload for fingerprint refreshes:
	// only the identity fields the matcher compares.
	function captureSelectionFingerprint(element) {
		if (!element.isConnected) return;
		const className = typeof element.className === 'string'
			? element.className
			: (element.className && element.className.baseVal) || '';
		selectionFingerprints.set(element, {
			tagName: String(element.tagName).substring(0, ${Lhs}),
			id: String(element.id || '').substring(0, ${Ohs}),
			className: String(className).substring(0, ${Fhs}),
			innerText: element.innerText ? element.innerText.substring(0, 200) : '',
		});
	}

	const PILL_MAX_WIDTH = 320;
	const PILL_HEIGHT = 28;
	const PILL_PADDING_X = 24;
	const HOVER_BORDER_DEFAULT = '2px solid rgba(58,150,221,0.5)';
	const HOVER_BG_DEFAULT = 'transparent';
	const SELECTED_BORDER_DEFAULT = '2px solid #3a96dd';
	const SELECTED_BG_DEFAULT = 'rgba(58,150,221,0.08)';
	const HIGHLIGHT_GEOMETRY_TRANSITION = 'left 0.08s ease,top 0.08s ease,width 0.08s ease,height 0.08s ease';

	function createHighlightElements() {
		if (highlightBox) return;
		highlightBox = document.createElement('div');
		highlightBox.setAttribute('data-cursor-picker-highlight', 'true');
		highlightBox.style.cssText =
			'position:fixed;border:' + HOVER_BORDER_DEFAULT + ';background:' + HOVER_BG_DEFAULT + ';' +
			'border-radius:${F2n}px;pointer-events:none;z-index:2147483647;transition:' + HIGHLIGHT_GEOMETRY_TRANSITION + ';display:none;';
		document.body.appendChild(highlightBox);

		identityPill = document.createElement('div');
		identityPill.setAttribute('data-cursor-picker-pill', 'true');
		identityPill.style.cssText =
			'position:fixed;background:rgba(58,150,221,0.9);color:#fff;' +
			'padding:6px 12px;border-radius:8px;font:500 13px system-ui,-apple-system,sans-serif;' +
			'pointer-events:none;white-space:nowrap;z-index:2147483647;' +
			'max-width:' + PILL_MAX_WIDTH + 'px;overflow:hidden;text-overflow:ellipsis;display:none;' +
			'box-shadow:0 4px 12px rgba(0,0,0,0.15);';
		document.body.appendChild(identityPill);

		hoverPreviewBox = document.createElement('div');
		hoverPreviewBox.setAttribute('data-cursor-picker-hover-preview', 'true');
		hoverPreviewBox.style.cssText =
			'position:fixed;border:' + HOVER_BORDER_DEFAULT + ';background:' + HOVER_BG_DEFAULT + ';' +
			'border-radius:${F2n}px;pointer-events:none;z-index:2147483645;transition:' + HIGHLIGHT_GEOMETRY_TRANSITION + ';display:none;';
		document.body.appendChild(hoverPreviewBox);
	}

	function removeHighlightElements() {
		if (highlightBox) { highlightBox.remove(); highlightBox = null; }
		if (identityPill) { identityPill.remove(); identityPill = null; }
		if (hoverPreviewBox) { hoverPreviewBox.remove(); hoverPreviewBox = null; }
		pillContentElement = null;
	}

	function createMultiSelectBox(hueIndex) {
		const color = getHueColor(hueIndex || 0);
		const box = document.createElement('div');
		box.setAttribute('data-cursor-picker-multiselect', 'true');
		box.style.cssText =
			'position:fixed;border:2px solid ' + color.border + ';background:' + color.bg + ';' +
			'border-radius:${F2n}px;pointer-events:none;z-index:2147483646;display:none;';
		document.body.appendChild(box);
		return box;
	}

	function applyBoxRect(box, rect) {
		box.style.display = '';
		box.style.left = rect.left + 'px';
		box.style.top = rect.top + 'px';
		box.style.width = rect.width + 'px';
		box.style.height = rect.height + 'px';
	}

	function updateMultiSelectBox(box, element) {
		applyBoxRect(box, element.getBoundingClientRect());
	}

	function refreshAllMultiSelectBoxes() {
		// Read every rect before writing any box style: the boxes live in the
		// same layout tree, so interleaved read/write would force one reflow
		// per selected element. Disconnected elements are skipped: their rect
		// is all zeros and their box is hidden while reconciliation waits for
		// the element to come back.
		const updates = [];
		for (const [uid, box] of multiSelectBoxes) {
			const el = multiSelectElements.get(uid);
			if (el && el.isConnected) updates.push([box, el.getBoundingClientRect()]);
		}
		for (const [box, rect] of updates) {
			applyBoxRect(box, rect);
		}
	}

	function currentSelectionEntries() {
		const entries = [];
		const seenUids = new Set();
		if (frozen && lastHoveredElement) {
			const uid = getOrAssignElementId(lastHoveredElement);
			if (uid) {
				seenUids.add(uid);
				entries.push({ uid, el: lastHoveredElement });
			}
		}
		for (const [uid, el] of multiSelectElements.entries()) {
			if (!seenUids.has(uid)) entries.push({ uid, el });
		}
		return entries;
	}

	// Reconciliation is keyed by logical uid, not by visual owner. A selection
	// box and a launch shimmer may intentionally own the same uid at once; HMR
	// must rebind both to the same replacement rather than making them compete
	// for it as independent restore items.
	function trackedSelectionEntries() {
		const byUid = new Map(
			currentSelectionEntries().map(entry => [entry.uid, entry.el])
		);
		for (const [uid, membership] of launchMemberships) {
			const existing = byUid.get(uid);
			if (!existing || (!existing.isConnected && membership.element.isConnected)) {
				byUid.set(uid, membership.element);
			}
		}
		mergeAnchorTrackedEntries(byUid);
		return Array.from(byUid, ([uid, el]) => ({ uid, el }));
	}

	function ownsSelectionUid(uid) {
		return multiSelectElements.has(uid) || !!(
			frozen &&
			lastHoveredElement &&
			cursorElementIdMap.get(lastHoveredElement) === uid
		);
	}

	function rebindTrackedUid(uid, replacement, fingerprint) {
		cursorElementIdMap.set(replacement, uid);
		if (fingerprint) selectionFingerprints.set(replacement, fingerprint);
		if (multiSelectElements.has(uid)) {
			multiSelectElements.set(uid, replacement);
		}
		if (
			frozen &&
			lastHoveredElement &&
			cursorElementIdMap.get(lastHoveredElement) === uid
		) {
			lastHoveredElement = replacement;
		}
		const membership = launchMemberships.get(uid);
		if (membership) membership.element = replacement;
		const displaced = launchDisplacedStacks.get(uid);
		if (displaced) {
			for (const snapshot of displaced) snapshot.element = replacement;
		}
		rebindAnchorMembers(uid, replacement, fingerprint);
	}

${SVf}

	function removeSelectionForUid(uid) {
		const box = multiSelectBoxes.get(uid);
		if (box) box.remove();
		multiSelectBoxes.delete(uid);
		multiSelectElements.delete(uid);
		multiSelectHueIndices.delete(uid);
		if (
			frozen &&
			lastHoveredElement &&
			cursorElementIdMap.get(lastHoveredElement) === uid
		) {
			frozen = false;
			lastHoveredElement = null;
			updateHighlight(null);
		}
	}

	function scheduleReconcileRetry() {
		clearTimeout(reconcileRetryTimer);
		reconcileRetryTimer = 0;
		if (pendingReconnects.size === 0) return;
		const delay = Math.max(
			0,
			Math.min(...pendingReconnects.values()) - Date.now()
		);
		reconcileRetryTimer = setTimeout(function () {
			reconcileRetryTimer = 0;
			// A capture in progress defers visual work; restore-picker-highlight
			// re-runs refreshSelectionGeometry and picks the pending work up.
			if (!selectionMode || hiddenForScreenshot) return;
			refreshSelectionGeometry();
			refreshLaunchGroupBoxes();
		}, delay);
	}

	// A settle replaces the host's payloads wholesale through the same
	// element-picked/isNavigation shape the resize resend already uses, so
	// path/attributes/rects stay truthful for whichever elements the picks
	// are now bound to. Only a fully emptied selection goes out as a bare
	// resync: retaining nothing is what moves the open draft to the composer.
	function notifySelectionSettled() {
		const connected = currentSelectionEntries().filter(entry => entry.el.isConnected);
		if (connected.length === 0) {
			sendToHost('selection-resynced', { multiSelectPayloads: [] });
			return;
		}
		const payloads = connected.map(entry =>
			buildPayload(entry.el, hueIndexForElement(entry.el))
		);
		if (payloads.length === 1) {
			sendToHost('element-picked', {
				element: payloads[0],
				altKey: false,
				isNavigation: true,
			});
			return;
		}
		sendToHost('element-picked', {
			element: payloads[payloads.length - 1],
			altKey: false,
			isNavigation: true,
			shiftKey: true,
			multiSelectPayloads: payloads,
		});
	}

	// HMR frameworks (Vite, Next.js fast refresh) replace DOM subtrees in
	// place without a navigation, so the tracked element objects disconnect
	// while their logical elements re-render. Re-attach each disconnected
	// pick to the unique element matching its fingerprint captured at pick
	// time, keeping the host-visible uid stable so chips, mentions, and the
	// open draft survive. Unresolved picks get a short grace window (a React
	// remount settles within a frame or two); only after it do they prune.
	// The host hears one settle notification once every disconnect has
	// settled — notifying earlier would evict a pick about to re-resolve.
	function reconcileDisconnectedSelections() {
		retryMissingAnchors();
		const entries = trackedSelectionEntries();
		if (dirtyFingerprintElements.size > 0) {
			// In-place text/class edits mutate identity fields without a
			// disconnect; refresh those fingerprints while the elements are
			// still rendered so a later swap can still match.
			for (const entry of entries) {
				if (entry.el.isConnected && dirtyFingerprintElements.has(entry.el)) {
					captureSelectionFingerprint(entry.el);
				}
			}
			dirtyFingerprintElements.clear();
		}
		const disconnected = entries.filter(entry => !entry.el.isConnected);
		const disconnectedUids = new Set(disconnected.map(entry => entry.uid));
		for (const uid of Array.from(pendingReconnects.keys())) {
			if (!disconnectedUids.has(uid)) pendingReconnects.delete(uid);
		}
		if (disconnected.length === 0) {
			if (pendingReconnects.size === 0 && selectionSettleDirty) {
				selectionSettleDirty = false;
				notifySelectionSettled();
			}
			return;
		}
		const now = Date.now();
		const hasNewDisconnects = disconnected.some(
			entry => !pendingReconnects.has(entry.uid)
		);
		const deadlineReached = disconnected.some(entry => {
			const deadline = pendingReconnects.get(entry.uid);
			return deadline !== undefined && now >= deadline;
		});
		// Resolution scans same-tag elements and reads innerText on prefix
		// matches, so run it only when its answer can have changed: a fresh
		// disconnect, new nodes since the last attempt, or a due deadline.
		const attemptResolve =
			hasNewDisconnects || reconcileHasNewCandidates || deadlineReached;
		reconcileHasNewCandidates = false;
		// One element can sit under several tracked uids (a pin re-attached by
		// fingerprint keeps its own uid on an element the draft owns), so
		// resolve each element once and give its replacement to every uid on
		// it; the replacement keeps the uid the element itself carried.
		let replacementFor = null;
		if (attemptResolve) {
			const disconnectedEls = Array.from(new Set(disconnected.map(entry => entry.el)));
			const items = disconnectedEls.map(el => selectionFingerprints.get(el) || null);
			// An element already backing a connected tracked pick or shimmer
			// is spoken for: it neither counts toward ambiguity nor can be
			// stolen by a disconnected pick with the same fingerprint.
			const reserved = new Set();
			for (const entry of entries) {
				if (entry.el.isConnected) reserved.add(entry.el);
			}
			const resolvedEls = resolveRestoreItems(items, el => reserved.has(el));
			replacementFor = new Map(disconnectedEls.map((el, i) => [el, resolvedEls[i]]));
		}
		for (const entry of disconnected) {
			const replacement = replacementFor ? replacementFor.get(entry.el) : null;
			if (replacement) {
				pendingReconnects.delete(entry.uid);
				const fingerprint = selectionFingerprints.get(entry.el);
				rebindTrackedUid(entry.uid, replacement, fingerprint);
				const ownerUid = cursorElementIdMap.get(entry.el);
				if (ownerUid && ownerUid !== entry.uid && disconnectedUids.has(ownerUid)) {
					cursorElementIdMap.set(replacement, ownerUid);
				}
				if (ownsSelectionUid(entry.uid)) selectionSettleDirty = true;
				continue;
			}
			const deadline = pendingReconnects.get(entry.uid);
			if (deadline === undefined) {
				pendingReconnects.set(entry.uid, now + RECONNECT_GRACE_MS);
				// Hide the stale box while the pick waits: a box floating at
				// the pre-swap rect points at nothing either way. (The frozen
				// highlight hides through updateHighlight's disconnect guard.)
				const selectionBox = multiSelectBoxes.get(entry.uid);
				if (selectionBox) selectionBox.style.display = 'none';
				const membership = launchMemberships.get(entry.uid);
				if (membership) membership.box.style.display = 'none';
				continue;
			}
			if (now < deadline) continue;
			// Grace expired: the element is really gone.
			pendingReconnects.delete(entry.uid);
			if (ownsSelectionUid(entry.uid)) {
				removeSelectionForUid(entry.uid);
				selectionSettleDirty = true;
			}
			if (launchMemberships.has(entry.uid)) {
				removeLaunchMembership(entry.uid);
			}
			detachAnnotationAnchorUid(entry.uid);
		}
		if (pendingReconnects.size > 0) {
			scheduleReconcileRetry();
			return;
		}
		refreshDomMutationObserver();
		if (selectionSettleDirty) {
			selectionSettleDirty = false;
			notifySelectionSettled();
		}
	}

	// Geometry refresh plus DOM-disconnect reconciliation. Rebinds and
	// evictions are reported to the host once settled, as fresh payloads or
	// an empty resync.
	// Pin rects go out only from the once-per-frame refresh, so a timer, a
	// resize or a host set never adds a second annotation-anchors in a frame.
	function refreshSelectionGeometry(isFrame) {
		reconcileDisconnectedSelections();
		const anchorRects = isFrame ? measureAnnotationAnchors() : null;
		refreshAllMultiSelectBoxes();
		if (frozen && lastHoveredElement) {
			updateHighlight(lastHoveredElement);
		}
		if (isFrame) {
			sendAnnotationAnchors(anchorRects);
		} else if (hasAnnotationAnchors()) {
			scheduleGeometryRefresh();
		}
	}

	function toggleMultiSelect(element, hueIndex) {
		const uid = getOrAssignElementId(element);
		if (!uid) return false;
		if (multiSelectElements.has(uid)) {
			multiSelectElements.delete(uid);
			const box = multiSelectBoxes.get(uid);
			if (box) box.remove();
			multiSelectBoxes.delete(uid);
			multiSelectHueIndices.delete(uid);
			refreshHoverHues();
			return false;
		}
		multiSelectElements.set(uid, element);
		const idx = typeof hueIndex === 'number'
			? hueIndex
			: multiSelectElements.size - 1;
		multiSelectHueIndices.set(uid, idx);
		const box = createMultiSelectBox(idx);
		updateMultiSelectBox(box, element);
		multiSelectBoxes.set(uid, box);
		refreshHoverHues();
		return true;
	}

	function clearAllMultiSelect() {
		for (const box of multiSelectBoxes.values()) box.remove();
		multiSelectBoxes.clear();
		multiSelectElements.clear();
		multiSelectHueIndices.clear();
		refreshHoverHues();
	}

	function getMultiSelectPayloads() {
		const payloads = [];
		for (const [uid, el] of multiSelectElements.entries()) {
			payloads.push(buildPayload(el, multiSelectHueIndices.get(uid)));
		}
		return payloads;
	}

${wVf}

	function sendHoveredRect(meaningful) {
		if (!meaningful) {
			if (lastSentHoveredUid === null) return;
			lastSentHoveredUid = null;
			sendToHost('element-hovered', { rect: null });
			return;
		}
		const uid = getOrAssignElementId(meaningful);
		if (uid === lastSentHoveredUid) return;
		lastSentHoveredUid = uid;
		const rect = meaningful.getBoundingClientRect();
		sendToHost('element-hovered', {
			rect: {
				top: rect.top,
				left: rect.left,
				width: rect.width,
				height: rect.height,
			},
		});
	}

	function updateHighlight(element) {
		if (!highlightBox || !identityPill) return;
		// A disconnected element has an all-zero rect; hide rather than paint
		// a collapsed box at the origin while reconciliation waits for its
		// replacement.
		if (!element || !element.isConnected) {
			highlightBox.style.display = 'none';
			identityPill.style.display = 'none';
			pillContentElement = null;
			return;
		}
		// Layout reads (rect, identity text, viewport) happen before any style
		// write below so the browser resolves layout at most once per update.
		const rect = element.getBoundingClientRect();
		// Quiet mode (hoverIdentity false) anchors the identity pill to the
		// frozen selection instead of the cursor.
		const pillAnchor = frozen
			? (hoverIdentity ? null : 'selection')
			: (hoverIdentity ? 'cursor' : null);
		const pillHint = hintMode && !frozen;
		const needsPillContent =
			pillAnchor !== null &&
			(pillContentElement !== element || pillContentHintMode !== pillHint);
		const pillParts = needsPillContent ? buildIdentityParts(element) : null;
		// The selection pill clears classic scrollbars. The scrolling element
		// reports the visible area: the root in standards mode, body in quirks
		// mode. Without one, the root may report only its own box, so fall back
		// to the inner size.
		const visibleBox = document.scrollingElement;
		const viewportWidth = pillAnchor === 'selection'
			? Math.min(window.innerWidth, (visibleBox ? visibleBox.clientWidth : 0) || window.innerWidth)
			: window.innerWidth;
		const viewportHeight = pillAnchor === 'selection'
			? Math.min(window.innerHeight, (visibleBox ? visibleBox.clientHeight : 0) || window.innerHeight)
			: window.innerHeight;

		highlightBox.style.display = '';
		highlightBox.style.left = rect.left + 'px';
		highlightBox.style.top = rect.top + 'px';
		highlightBox.style.width = rect.width + 'px';
		highlightBox.style.height = rect.height + 'px';
		if (frozen) {
			const selColor = getHueColor(frozenSelectionHueIndex);
			highlightBox.style.border = '2px solid ' + selColor.border;
			highlightBox.style.background = selColor.bg;
		} else {
			const hoverColor = getHueColor(getHoverHueIndex());
			highlightBox.style.border = '2px solid ' + hoverColor.hoverBorder;
			highlightBox.style.background = hoverColor.hoverBg;
		}

		if (pillAnchor === null) {
			identityPill.style.display = 'none';
			pillContentElement = null;
			return;
		}
		identityPill.style.display = '';
		if (pillParts) {
			renderPillContent(pillParts, pillHint);
			pillContentElement = element;
			pillContentHintMode = pillHint;
		}

		if (pillAnchor === 'selection') {
			if (rect.bottom <= 0 || rect.top >= viewportHeight) {
				identityPill.style.display = 'none';
				return;
			}
			// Outer width: max-width sizes the content box inside the padding.
			const pillMaxWidth = Math.max(PILL_PADDING_X, Math.min(PILL_MAX_WIDTH, viewportWidth - 8));
			identityPill.style.maxWidth = pillMaxWidth - PILL_PADDING_X + 'px';
			// Right-align to the selection unless a full-width pill would cross the
			// viewport's left edge; then left-align, clamped to the right edge.
			if (rect.right >= pillMaxWidth + 4) {
				identityPill.style.left = '';
				identityPill.style.right = Math.max(4, viewportWidth - rect.right) + 'px';
			} else {
				identityPill.style.right = '';
				identityPill.style.left =
					Math.max(4, Math.min(rect.left, viewportWidth - pillMaxWidth - 4)) + 'px';
			}
			const anchorTop = Math.max(0, rect.top);
			if (anchorTop >= 36) {
				identityPill.style.top = anchorTop - 6 + 'px';
				identityPill.style.transform = 'translateY(-100%)';
			} else {
				identityPill.style.top =
					Math.max(0, Math.min(anchorTop + 6, viewportHeight - PILL_HEIGHT)) + 'px';
				identityPill.style.transform = '';
			}
			return;
		}

		identityPill.style.maxWidth = PILL_MAX_WIDTH + 'px';
		identityPill.style.transform = '';
		const pillLeft = lastMouseX + 12;
		const pillTop = lastMouseY + 20;
		identityPill.style.right = '';
		if (pillLeft + PILL_MAX_WIDTH > viewportWidth) {
			identityPill.style.left = '';
			identityPill.style.right = '4px';
		} else {
			identityPill.style.left = pillLeft + 'px';
		}
		identityPill.style.top = Math.min(pillTop, viewportHeight - PILL_HEIGHT) + 'px';
	}

	function updateHoverPreview(element) {
		if (!hoverPreviewBox) return;
		if (!element) {
			hoverPreviewBox.style.display = 'none';
			return;
		}
		const uid = cursorElementIdMap.get(element);
		if (uid && multiSelectElements.has(uid)) {
			hoverPreviewBox.style.display = 'none';
			return;
		}
		if (!frozen && multiSelectElements.size === 0) {
			hoverPreviewBox.style.display = 'none';
			return;
		}
		const rect = element.getBoundingClientRect();
		const color = getHueColor(getHoverHueIndex());
		hoverPreviewBox.style.display = '';
		hoverPreviewBox.style.left = rect.left + 'px';
		hoverPreviewBox.style.top = rect.top + 'px';
		hoverPreviewBox.style.width = rect.width + 'px';
		hoverPreviewBox.style.height = rect.height + 'px';
		hoverPreviewBox.style.border = '2px solid ' + color.hoverBorder;
		hoverPreviewBox.style.background = color.hoverBg;
	}

	function hideHighlightForScreenshot() {
		hiddenForScreenshot = true;
		if (identityPill) identityPill.style.display = 'none';
		if (hoverPreviewBox) hoverPreviewBox.style.display = 'none';
		for (const box of multiSelectBoxes.values()) box.style.display = 'none';
		for (const membership of launchMemberships.values()) membership.box.style.display = 'none';
	}

	function restoreHighlight() {
		hiddenForScreenshot = false;
		refreshSelectionGeometry();
		refreshLaunchGroupBoxes();
	}

	function updateHoverAt(x, y) {
		if (!selectionMode || hoverSuppressed || hiddenForScreenshot) return;
		const el = document.elementFromPoint(x, y);
		if (el && !isPickerOverlayNode(el)) {
			const meaningful = bubbleToMeaningfulElement(el);
			sendHoveredRect(meaningful);
			if (!frozen && multiSelectElements.size === 0) {
				lastHoveredElement = meaningful;
				updateHighlight(meaningful);
				updateHoverPreview(null);
			} else {
				updateHoverPreview(meaningful);
			}
		}
	}

	function onMouseMove(e) {
		if (!selectionMode || hoverSuppressed || isInjectedUiEvent(e)) return;
		scheduleHoverUpdateAt(e.clientX, e.clientY);
	}

	function scheduleHoverUpdateAt(x, y) {
		lastMouseX = x;
		lastMouseY = y;
		if (rafPending) return;
		rafPending = true;
		requestAnimationFrame(() => {
			rafPending = false;
			updateHoverAt(lastMouseX, lastMouseY);
		});
	}

	function seedMultiSelectFromFrozen() {
		if (frozen && lastHoveredElement && multiSelectElements.size === 0) {
			toggleMultiSelect(lastHoveredElement);
			frozen = false;
		}
	}

	function onClick(e) {
		if (!selectionMode || isInjectedUiEvent(e)) return;
		if (!e.isTrusted) {
			blockEvent(e);
			return;
		}
		if (e.shiftKey !== true) {
			const groupId = hitTestReadyLaunchGroup(e.clientX, e.clientY);
			if (groupId) {
				e.preventDefault();
				e.stopPropagation();
				e.stopImmediatePropagation();
				sendToHost('group-activated', {
					groupId,
					clientX: e.clientX,
					clientY: e.clientY,
				});
				return;
			}
		}
		e.preventDefault();
		e.stopPropagation();
		e.stopImmediatePropagation();

		const el = document.elementFromPoint(e.clientX, e.clientY);
		if (!el || isPickerOverlayNode(el)) return;
		const meaningful = bubbleToMeaningfulElement(el);

		if (e.shiftKey === true) {
			seedMultiSelectFromFrozen();
			toggleMultiSelect(meaningful);
			if (multiSelectElements.size === 0) {
				frozen = true;
				frozenSelectionHueIndex = 0;
				lastHoveredElement = meaningful;
				updateHighlight(meaningful);
				updateHoverPreview(null);
				refreshDomMutationObserver();
				return;
			}
			lastHoveredElement = meaningful;
			updateHighlight(null);
			updateHoverPreview(null);
			refreshDomMutationObserver();
			sendToHost('element-picked', {
				element: buildPayload(meaningful, hueIndexForElement(meaningful)),
				altKey: e.altKey === true,
				shiftKey: true,
				multiSelectPayloads: getMultiSelectPayloads(),
			});
			return;
		}

		clearAllMultiSelect();
		lastHoveredElement = meaningful;
		frozen = true;
		frozenSelectionHueIndex = 0;
		updateHighlight(meaningful);
		updateHoverPreview(null);
		refreshDomMutationObserver();

		sendToHost('element-picked', {
			element: buildPayload(meaningful, hueIndexForElement(meaningful)),
			altKey: e.altKey === true,
		});
	}

	function blockEvent(e) {
		if (!selectionMode || isInjectedUiEvent(e)) return;
		e.preventDefault();
		e.stopPropagation();
		e.stopImmediatePropagation();
	}

	let resizeTimer = 0;
	// Scroll fires per scrolled element (capture listener) and mutations can
	// arrive several times per frame. One geometry refresh per frame is
	// enough, and it still lands before that frame's paint because scroll
	// handlers and mutation callbacks run ahead of rAF callbacks.
	let geometryRefreshRafPending = false;
	function scheduleGeometryRefresh() {
		if (geometryRefreshRafPending) return;
		geometryRefreshRafPending = true;
		requestAnimationFrame(() => {
			geometryRefreshRafPending = false;
			// Applying box rects sets display:'' and would undo an
			// intervening hide-picker-highlight mid-capture.
			if (!selectionMode || hiddenForScreenshot) return;
			refreshSelectionGeometry(true);
			refreshLaunchGroupBoxes();
		});
	}
	function onScrollGeometryChanged() {
		if (!selectionMode) return;
		scheduleGeometryRefresh();
	}

	const PICKER_CHROME_SELECTOR =
		'[data-cursor-picker-highlight],[data-cursor-picker-pill],' +
		'[data-cursor-picker-hover-preview],[data-cursor-picker-multiselect],' +
		'[data-cursor-picker-shimmer],[data-cursor-picker-shimmer-sweep],' +
		'[data-cursor-picker-shimmer-styles]';
	function isPickerChromeNode(node) {
		return !!node
			&& node.nodeType === Node.ELEMENT_NODE
			&& typeof node.matches === 'function'
			&& node.matches(PICKER_CHROME_SELECTOR);
	}
	// The observer must ignore the picker's own DOM writes (box styles, pill
	// content, box mount/unmount) or every geometry refresh would schedule
	// the next one forever.
	function isPickerChromeMutation(record) {
		const target = record.target;
		const scope = target.nodeType === Node.ELEMENT_NODE
			? target
			: target.parentElement;
		if (scope && typeof scope.closest === 'function' && scope.closest(PICKER_CHROME_SELECTOR)) {
			return true;
		}
		if (record.type !== 'childList') return false;
		const added = record.addedNodes;
		const removed = record.removedNodes;
		if (added.length === 0 && removed.length === 0) return false;
		for (let i = 0; i < added.length; i++) {
			if (!isPickerChromeNode(added[i])) return false;
		}
		for (let i = 0; i < removed.length; i++) {
			if (!isPickerChromeNode(removed[i])) return false;
		}
		return true;
	}
	// Page DOM churn (hot-module replacement swaps, streaming agent edits,
	// text updates) moves or replaces selected elements without any scroll
	// or resize. Watch for it so selection boxes track layout and
	// reconciliation notices disconnected picks promptly.
	function onDomMutations(records) {
		if (!selectionMode) return;
		const tracked = trackedSelectionEntries();
		if (tracked.length === 0 && !hasAnnotationAnchors()) return;
		const connectedTrackedElements = new Set(
			tracked.filter(entry => entry.el.isConnected).map(entry => entry.el)
		);
		let sawPageMutation = false;
		const addedNodeLists = [];
		for (let i = 0; i < records.length; i++) {
			const record = records[i];
			if (isPickerChromeMutation(record)) continue;
			sawPageMutation = true;
			if (record.type === 'childList' && record.addedNodes.length > 0) {
				reconcileHasNewCandidates = true;
				addedNodeLists.push(record.addedNodes);
			}
			// An in-place edit inside a tracked element changes the identity
			// fields its fingerprint records.
			const target = record.target.nodeType === Node.ELEMENT_NODE
				? record.target
				: record.target.parentElement;
			let ancestor = target;
			while (ancestor) {
				if (connectedTrackedElements.has(ancestor)) {
					dirtyFingerprintElements.add(ancestor);
				}
				ancestor = ancestor.parentElement;
			}
		}
		noteAddedAnchorCandidates(addedNodeLists);
		if (sawPageMutation) scheduleGeometryRefresh();
	}

	function refreshDomMutationObserver() {
		const shouldObserve =
			selectionMode && (
				multiSelectElements.size > 0 ||
				launchMemberships.size > 0 ||
				hasAnnotationAnchors() ||
				(frozen && !!lastHoveredElement)
			);
		if (shouldObserve === domMutationObserverActive) return;
		if (shouldObserve) {
			domMutationObserver ||= new MutationObserver(onDomMutations);
			domMutationObserver.observe(document.documentElement, {
				childList: true,
				subtree: true,
				attributes: true,
				characterData: true,
			});
		} else {
			domMutationObserver.disconnect();
		}
		domMutationObserverActive = shouldObserve;
	}

	function onViewportGeometryChanged() {
		if (!selectionMode || hiddenForScreenshot) return;
		var isMulti = multiSelectElements.size > 0;
		var hasSelection = (frozen && lastHoveredElement) || isMulti;
		refreshSelectionGeometry();
		refreshLaunchGroupBoxes();
		if (!hasSelection) return;
		clearTimeout(resizeTimer);
		resizeTimer = setTimeout(function() {
			if (!selectionMode || hiddenForScreenshot) return;
			refreshSelectionGeometry();
			refreshLaunchGroupBoxes();
			if (lastHoveredElement) {
				var isM = multiSelectElements.size > 0;
				sendToHost('element-picked', {
					element: buildPayload(lastHoveredElement, hueIndexForElement(lastHoveredElement)),
					altKey: false,
					isNavigation: true,
					shiftKey: isM,
					multiSelectPayloads: isM ? getMultiSelectPayloads() : undefined,
				});
			}
		}, 150);
	}

	function enableSelection() {
		if (selectionMode) return;
		selectionMode = true;
		frozen = false;
		createHighlightElements();

		if (!cursorStyleOverride) {
			cursorStyleOverride = document.createElement('style');
			cursorStyleOverride.textContent = ${JSON.stringify(i)};
			document.head.appendChild(cursorStyleOverride);
		}

		const moveHandler = onMouseMove;
		const clickHandler = onClick;
		const keyDownHandler = (ev) => {
			if (ev.key === 'Alt' && !altHeld) {
				altHeld = true;
				refreshHoverHues();
			}
		};
		const keyUpHandler = (ev) => {
			if (ev.key === 'Alt' && altHeld) {
				altHeld = false;
				refreshHoverHues();
			}
		};
		const blurHandler = () => {
			if (altHeld) {
				altHeld = false;
				refreshHoverHues();
			}
		};

		document.addEventListener('mousemove', moveHandler);
		document.addEventListener('click', clickHandler, true);
		document.addEventListener('mousedown', blockEvent, true);
		document.addEventListener('mouseup', blockEvent, true);
		document.addEventListener('pointerdown', blockEvent, true);
		document.addEventListener('pointerup', blockEvent, true);
		document.addEventListener('keydown', keyDownHandler, true);
		document.addEventListener('keyup', keyUpHandler, true);
		window.addEventListener('blur', blurHandler);
		window.addEventListener('resize', onViewportGeometryChanged);
		document.addEventListener('scroll', onScrollGeometryChanged, true);
		listeners = { moveHandler, clickHandler, keyDownHandler, keyUpHandler, blurHandler };
		if (hasAnnotationAnchors()) {
			// A set that arrived while selection was off has not been
			// measured against the live page yet.
			markAnchorsForRetry();
			refreshDomMutationObserver();
			scheduleGeometryRefresh();
		}
	}

	function disableSelection() {
		clearTimeout(resizeTimer);
		clearTimeout(reconcileRetryTimer);
		reconcileRetryTimer = 0;
		pendingReconnects.clear();
		dirtyFingerprintElements.clear();
		reconcileHasNewCandidates = false;
		selectionSettleDirty = false;
		clearAnnotationAnchors();
		trackedRegionAnchor = null;
		if (domMutationObserver) domMutationObserver.disconnect();
		domMutationObserverActive = false;
		selectionMode = false;
		frozen = false;
		frozenSelectionHueIndex = 0;
		altHeld = false;
		hoverSuppressed = false;
		hoverIdentity = true;
		hiddenForScreenshot = false;
		lastHoveredElement = null;
		sendHoveredRect(null);
		clearAllMultiSelect();
		clearLaunchGroups();

		if (cursorStyleOverride) {
			cursorStyleOverride.remove();
			cursorStyleOverride = null;
		}

		removeHighlightElements();

		if (listeners) {
			document.removeEventListener('mousemove', listeners.moveHandler);
			document.removeEventListener('click', listeners.clickHandler, true);
			document.removeEventListener('mousedown', blockEvent, true);
			document.removeEventListener('mouseup', blockEvent, true);
			document.removeEventListener('pointerdown', blockEvent, true);
			document.removeEventListener('pointerup', blockEvent, true);
			document.removeEventListener('keydown', listeners.keyDownHandler, true);
			document.removeEventListener('keyup', listeners.keyUpHandler, true);
			window.removeEventListener('blur', listeners.blurHandler);
			listeners = null;
		}
		window.removeEventListener('resize', onViewportGeometryChanged);
		document.removeEventListener('scroll', onScrollGeometryChanged, true);
	}

	function unfreezeSelection() {
		frozen = false;
		refreshSelectionGeometry();
		refreshDomMutationObserver();
	}

	// Null when the point hits nothing more specific than the document.
	function regionAnchorElementAt(x, y) {
		const hit = document.elementFromPoint(x, y);
		const el = hit && !isPickerOverlayNode(hit) ? bubbleToMeaningfulElement(hit) : null;
		return !el || el === document.body || el === document.documentElement ? null : el;
	}

	function regionAnchorAt(x, y) {
		return buildPayload(regionAnchorElementAt(x, y) || document.documentElement, 0);
	}

	function trackRegionAnchorAt(x, y) {
		const anchor = regionAnchorElementAt(x, y);
		trackedRegionAnchor = anchor ? new WeakRef(anchor) : null;
		return trackedRegionAnchorRect();
	}

	function trackedRegionAnchorRect() {
		const anchor = trackedRegionAnchor?.deref();
		if (!anchor || !anchor.isConnected) return null;
		const rect = anchor.getBoundingClientRect();
		return { top: rect.top, left: rect.left, width: rect.width, height: rect.height };
	}

	window.__cursorPicker = {
		bubbleToMeaningfulElement,
		getElementPath,
		buildPayload,
		regionAnchorAt,
		trackRegionAnchorAt,
		trackedRegionAnchorRect,
	};

	function repaintHoverHighlight() {
		pillContentElement = null;
		// A multi-select leaves lastHoveredElement set with no hover box;
		// repainting it would strand a hover box over that pick. A frozen pick
		// keeps its box even after alt-appended picks.
		if (!hiddenForScreenshot && lastHoveredElement && (frozen || multiSelectElements.size === 0)) {
			updateHighlight(lastHoveredElement);
		}
	}

	function onPickerCommand(data) {
		if (!data || typeof data !== 'object') return;
		if (data.type === 'enable-element-selection') {
			enableSelection();
		} else if (data.type === 'disable-element-selection') {
			disableSelection();
		} else if (data.type === 'unfreeze-element-selection') {
			unfreezeSelection();
		} else if (data.type === 'hide-picker-highlight') {
			hideHighlightForScreenshot();
		} else if (data.type === 'restore-picker-highlight') {
			restoreHighlight();
		} else if (data.type === 'set-show-hint') {
			hintMode = !!data.value;
			repaintHoverHighlight();
		} else if (data.type === 'set-hover-identity') {
			hoverIdentity = !!data.value;
			repaintHoverHighlight();
		} else if (data.type === 'clear-hover') {
			lastHoveredElement = null;
			updateHighlight(null);
			updateHoverPreview(null);
			sendHoveredRect(null);
			refreshDomMutationObserver();
		} else if (data.type === 'set-picker-hover-suppressed') {
			hoverSuppressed = !!data.value;
			if (hoverSuppressed) {
				updateHoverPreview(null);
				sendHoveredRect(null);
				if (!frozen && multiSelectElements.size === 0) {
					lastHoveredElement = null;
					updateHighlight(null);
				}
			} else if (!hiddenForScreenshot) {
				// Only restore-picker-highlight may clear the screenshot
				// hide; an unsuppress mid-capture (pointer leaving the
				// comment input during submit) must not redraw the boxes
				// into the capture.
				restoreHighlight();
			}
		} else if (data.type === 'clear-multi-select') {
			clearAllMultiSelect();
			updateHoverPreview(null);
			refreshDomMutationObserver();
		} else if (data.type === 'promote-selection-to-group') {
			promoteSelectionToGroup(data.groupId, data.uids);
		} else if (data.type === 'mark-group-ready') {
			markLaunchGroupReady(data.groupId);
		} else if (data.type === 'demote-group-to-selection') {
			demoteGroupToSelection(
				data.groupId,
				data.restoreSelection === true
			);
		} else if (data.type === 'remove-picked-element') {
			const uid = typeof data.uid === 'string' ? data.uid : null;
			if (!uid) return;
			removeSelectionForUid(uid);
			updateHoverPreview(null);
			refreshDomMutationObserver();
		} else if (data.type === 'hover-at') {
			if (!selectionMode || hoverSuppressed) return;
			lastMouseX = data.x;
			lastMouseY = data.y;
			// The host already sends at most one hover per frame. Apply it
			// immediately instead of waiting for a second renderer's RAF.
			if (!rafPending) updateHoverAt(data.x, data.y);
		} else if (data.type === 'scroll-by-at') {
			// Scrolling mid-capture would shift the content out from under
			// the element crop computed at pick time.
			if (!selectionMode || hiddenForScreenshot) return;
			scrollByAt(document, data.x, data.y, data.deltaX, data.deltaY);
			if (!hoverSuppressed) {
				// The content under the cursor moved. Clearing the dedupe uid
				// forces a rect resend to the host even when the same element
				// stays under the cursor (its viewport rect changed).
				lastSentHoveredUid = null;
				scheduleHoverUpdateAt(data.x, data.y);
			}
		} else if (data.type === 'cancel-design-overlay') {
			clearAllMultiSelect();
			frozen = false;
			frozenSelectionHueIndex = 0;
			hoverSuppressed = false;
			hiddenForScreenshot = false;
			lastHoveredElement = null;
			updateHighlight(null);
			updateHoverPreview(null);
			sendHoveredRect(null);
			// Cancel ends the current selection protocol. Keep reconnects that
			// belong to persistent launch shimmers and annotation anchors, but
			// discard every deferred selection settle so it cannot publish
			// into the next draft.
			for (const uid of Array.from(pendingReconnects.keys())) {
				if (!outlivesDraft(uid)) {
					pendingReconnects.delete(uid);
				}
			}
			for (const element of Array.from(dirtyFingerprintElements)) {
				const uid = cursorElementIdMap.get(element);
				if (!uid || !outlivesDraft(uid)) {
					dirtyFingerprintElements.delete(element);
				}
			}
			selectionSettleDirty = false;
			reconcileHasNewCandidates =
				reconcileHasNewCandidates && pendingReconnects.size > 0;
			scheduleReconcileRetry();
			refreshDomMutationObserver();
		} else if (data.type === 'restore-selection') {
			if (!selectionMode) {
				sendToHost('selection-restored', {
					requestId: data.requestId,
					multiSelectPayloads: [],
				});
				return;
			}
			const items = Array.isArray(data.elements)
				? data.elements.slice(0, ${slt})
				: [];
			const resolvedEls = resolveRestoreItems(items);
			clearAllMultiSelect();
			frozen = false;
			frozenSelectionHueIndex = 0;
			lastHoveredElement = null;
			updateHighlight(null);
			updateHoverPreview(null);
			const resolved = [];
			for (let i = 0; i < items.length; i++) {
				const el = resolvedEls[i];
				if (!el) continue;
				const item = items[i];
				const hueIdx = typeof item.hueIndex === 'number'
					? item.hueIndex
					: resolved.length;
				resolved.push({ el, hueIdx });
			}
			const payloads = resolved.map(({ el, hueIdx }) => buildPayload(el, hueIdx));
			if (resolved.length === 1) {
				const { el, hueIdx } = resolved[0];
				frozen = true;
				frozenSelectionHueIndex = hueIdx;
				lastHoveredElement = el;
				updateHighlight(el);
			} else if (resolved.length > 1) {
				for (const { el, hueIdx } of resolved) {
					const uid = getOrAssignElementId(el);
					if (!uid) continue;
					multiSelectElements.set(uid, el);
					multiSelectHueIndices.set(uid, hueIdx);
					const box = createMultiSelectBox(hueIdx);
					updateMultiSelectBox(box, el);
					multiSelectBoxes.set(uid, box);
				}
				lastHoveredElement = resolved[resolved.length - 1].el;
				frozen = false;
				updateHighlight(null);
			}
			refreshDomMutationObserver();
			sendToHost('selection-restored', {
				requestId: data.requestId,
				multiSelectPayloads: payloads,
			});
		} else if (data.type === 'set-annotation-anchors') {
			setAnnotationAnchors(Array.isArray(data.anchors) ? data.anchors : []);
		} else if (data.type === 'scroll-annotation-into-view') {
			if (typeof data.id === 'string') scrollAnnotationIntoView(data.id, data.behavior, data.regionOffset);
		} else if (data.type === 'pick-element-at') {
			if (!selectionMode) return;
			const el = document.elementFromPoint(data.x, data.y);
			if (!el || isPickerOverlayNode(el)) return;
			const meaningful = bubbleToMeaningfulElement(el);

			if (data.appendToOverlay === true) {
				const uid = getOrAssignElementId(meaningful);
				const hueIdx = typeof data.hueIndex === 'number'
					? data.hueIndex
					: multiSelectElements.size;
				if (uid && !multiSelectElements.has(uid)) {
					multiSelectElements.set(uid, meaningful);
					multiSelectHueIndices.set(uid, hueIdx);
					const box = createMultiSelectBox(hueIdx);
					updateMultiSelectBox(box, meaningful);
					multiSelectBoxes.set(uid, box);
				}
				refreshDomMutationObserver();
				updateHoverPreview(null);
				sendToHost('element-picked', {
					element: buildPayload(meaningful, hueIdx),
					altKey: true,
					appendToOverlay: true,
					requestId: data.requestId,
				});
				return;
			}

			if (data.shiftKey === true) {
				seedMultiSelectFromFrozen();
				const startHueIdx = typeof data.hueIndex === 'number'
					? data.hueIndex
					: 0;
				toggleMultiSelect(meaningful, startHueIdx + Math.max(0, multiSelectElements.size));
				if (multiSelectElements.size === 0) {
					// Shift-deselected the last element. Reply as a plain
					// single-pick so the host's pending request gate clears;
					// otherwise submit stays disabled.
					frozen = true;
					frozenSelectionHueIndex = startHueIdx;
					lastHoveredElement = meaningful;
					updateHighlight(meaningful);
					refreshDomMutationObserver();
					sendToHost('element-picked', {
						element: buildPayload(meaningful),
						altKey: data.altKey === true,
						requestId: data.requestId,
					});
					return;
				}
				lastHoveredElement = meaningful;
				updateHighlight(null);
				refreshDomMutationObserver();
				sendToHost('element-picked', {
					element: buildPayload(meaningful, hueIndexForElement(meaningful)),
					altKey: data.altKey === true,
					requestId: data.requestId,
					shiftKey: true,
					multiSelectPayloads: getMultiSelectPayloads(),
				});
				return;
			}

			clearAllMultiSelect();
			lastHoveredElement = meaningful;
			frozen = true;
			frozenSelectionHueIndex = typeof data.hueIndex === 'number'
				? data.hueIndex
				: 0;
			updateHighlight(meaningful);
			updateHoverPreview(null);
			refreshDomMutationObserver();
			sendToHost('element-picked', {
				element: buildPayload(meaningful, hueIndexForElement(meaningful)),
				altKey: data.altKey === true,
				requestId: data.requestId,
			});
		} else if (
			data.type === 'cursor-design-select-parent' ||
			data.type === 'cursor-design-select-first-child' ||
			data.type === 'cursor-design-select-next-sibling' ||
			data.type === 'cursor-design-select-previous-sibling'
		) {
			if (!selectionMode || !lastHoveredElement) return;
			clearAllMultiSelect();
			let target = null;
			if (data.type === 'cursor-design-select-parent') {
				target = findMeaningfulAncestor(lastHoveredElement);
			} else if (data.type === 'cursor-design-select-first-child') {
				target = findFirstMeaningfulChild(lastHoveredElement);
			} else if (data.type === 'cursor-design-select-next-sibling') {
				target = findMeaningfulSibling(lastHoveredElement, 'next');
			} else {
				target = findMeaningfulSibling(lastHoveredElement, 'previous');
			}
			if (!target) return;
			lastHoveredElement = target;
			frozen = true;
			updateHighlight(target);
			refreshDomMutationObserver();
			sendToHost('element-picked', {
				element: buildPayload(target, frozenSelectionHueIndex),
				altKey: false,
				isNavigation: true,
			});
		}
	}

	${r}
})();

use strict

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28854734–28854746, SHA-256 4ee188e1744c1981.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: use strict

use strict

window.addEventListener('message', (e) = { if (e.source == window) return; onP

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28854793–28854905, SHA-256 905ed25dfaebd507.

Jev judged not model-facing (confidence 0.02; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: window.addEventListener('message', (e) => { if (e.source !== window) return; onPickerCommand(e.data); });

window.addEventListener('message', (e) => {
		if (e.source !== window) return;
		onPickerCommand(e.data);
	});

window. cursorPickerCommand = onPickerCommand;

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28854941–28854990, SHA-256 5a3de18060630fea.

Jev judged not model-facing (confidence 0.04; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: window.__cursorPickerCommand = onPickerCommand;

window.__cursorPickerCommand = onPickerCommand;

${f} Failed to disable element picker:

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28856495–28856537, SHA-256 08fa9f9dcd10b78b.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: [${f}] Failed to disable element picker:

[${f}] Failed to disable element picker:

${f} Failed to enable element picker:

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28856768–28856809, SHA-256 613b9de8b5f799b7.

Jev judged not model-facing (confidence 0.04; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: [${f}] Failed to enable element picker:

[${f}] Failed to enable element picker:

use strict · byte 28857083

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28857083–28857095, SHA-256 4ee188e1744c1981.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: use strict

use strict

use strict · byte 28857347

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28857347–28857359, SHA-256 4ee188e1744c1981.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: use strict

use strict

Can't connect to server

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28861320–28861345, SHA-256 d9b2d4c0f124607b.

Jev judged not model-facing (confidence 0.03; role human). This is a classifier judgment, not proof of delivery.

Readable text: Can't connect to server

Can't connect to server

BrowserTabContent Failed to accept certificate:

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28869250–28869301, SHA-256 1a766935a4f30e03.

Jev judged not model-facing (confidence 0.03; role human). This is a classifier judgment, not proof of delivery.

Readable text: [BrowserTabContent] Failed to accept certificate:

[BrowserTabContent] Failed to accept certificate:

BrowserTabContent Failed to reject certificate:

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28869447–28869498, SHA-256 d24e65be2d3cee8f.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: [BrowserTabContent] Failed to reject certificate:

[BrowserTabContent] Failed to reject certificate:

HTTP ERROR

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28869616–28869628, SHA-256 1e030bca65e14c52.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: HTTP ERROR

HTTP ERROR

Copied error details to clipboard

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28870237–28870272, SHA-256 645a1245aa38575d.

Jev judged not model-facing (confidence 0.03; role human). This is a classifier judgment, not proof of delivery.

Readable text: Copied error details to clipboard

Copied error details to clipboard

Copied URL to clipboard

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28871080–28871105, SHA-256 7bae152c808bae3b.

Jev judged not model-facing (confidence 0.03; role human). This is a classifier judgment, not proof of delivery.

Readable text: Copied URL to clipboard

Copied URL to clipboard

Failed to capture screenshot${jr?.error? : ${jr.error} :""}

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28871602–28871663, SHA-256 2c722addc28d823e.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: Failed to capture screenshot${jr?.error?': ${jr.error}':""}

Failed to capture screenshot${jr?.error?`: ${jr.error}`:""}

: ${jr.error}

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28871643–28871658, SHA-256 5a18377d9005fe76.

Jev judged not model-facing (confidence 0.04; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: : ${jr.error}

: ${jr.error}

Failed to capture screenshot:

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28871870–28871902, SHA-256 c6156bc2d1264795.

Jev judged not model-facing (confidence 0.03; role human). This is a classifier judgment, not proof of delivery.

Readable text: Failed to capture screenshot:

Failed to capture screenshot: 

Hide Favorites History

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28872251–28872277, SHA-256 bda7f44a715ecf6d.

Jev judged not model-facing (confidence 0.02; role human). This is a classifier judgment, not proof of delivery.

Readable text: Hide Favorites & History

Hide Favorites & History

Show Favorites History

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28872278–28872304, SHA-256 839a4ba66dbeee0b.

Jev judged not model-facing (confidence 0.03; role human). This is a classifier judgment, not proof of delivery.

Readable text: Show Favorites & History

Show Favorites & History

Hide favorites and history

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28872377–28872405, SHA-256 dfdf17b0f9272c1c.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: Hide favorites and history

Hide favorites and history

Show favorites and history

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28872406–28872434, SHA-256 e9f580e579fac4ff.

Jev judged not model-facing (confidence 0.03; role human). This is a classifier judgment, not proof of delivery.

Readable text: Show favorites and history

Show favorites and history

glass-78zum5 glass-dt5ytf glass-euugli glass-2lah0s glass-1n2onr6 glass-jbqb8w g

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28872568–28872715, SHA-256 554ffb19db6f1903.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-78zum5 glass-dt5ytf glass-euugli glass-2lah0s glass-1n2onr6 glass-jbqb8w glass-e0pwq glass-19ypqd9 glass-1arpupx glass-6ikm8r glass-10wlt62

glass-78zum5 glass-dt5ytf glass-euugli glass-2lah0s glass-1n2onr6 glass-jbqb8w glass-e0pwq glass-19ypqd9 glass-1arpupx glass-6ikm8r glass-10wlt62

Resize browser sidebar

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28872999–28873023, SHA-256 86169f70650166eb.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: Resize browser sidebar

Resize browser sidebar

glass-1n2onr6 glass-78zum5 glass-dt5ytf glass-1iyjqo2 glass-s83m0k glass-1t1x2f9

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28873101–28873209, SHA-256 329eda9d1363de86.

Jev judged not model-facing (confidence 0.02; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-1n2onr6 glass-78zum5 glass-dt5ytf glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-euugli glass-5yr21d

glass-1n2onr6 glass-78zum5 glass-dt5ytf glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-euugli glass-5yr21d

glass-78zum5 glass-1iyjqo2 glass-euugli glass-kh2ocl glass-6s0dn4

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28873372–28873439, SHA-256 645c12277e462456.

Jev judged not model-facing (confidence 0.02; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-78zum5 glass-1iyjqo2 glass-euugli glass-kh2ocl glass-6s0dn4

glass-78zum5 glass-1iyjqo2 glass-euugli glass-kh2ocl glass-6s0dn4

glass-78zum5 glass-6s0dn4 glass-5cdhqx glass-2lah0s

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28873480–28873533, SHA-256 8f2f688da4629db7.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-78zum5 glass-6s0dn4 glass-5cdhqx glass-2lah0s

glass-78zum5 glass-6s0dn4 glass-5cdhqx glass-2lah0s

glass--default-marker glass-3nfvp2 glass-6s0dn4 glass-l56j7k glass-2lah0s

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28873973–28874048, SHA-256 1f0f1e0a3f95226e.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass--default-marker glass-3nfvp2 glass-6s0dn4 glass-l56j7k glass-2lah0s

glass--default-marker glass-3nfvp2 glass-6s0dn4 glass-l56j7k glass-2lah0s

glass--default-marker glass-3nfvp2 glass-6s0dn4 glass-l56j7k glass-2lah0s glass-

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28874063–28874179, SHA-256 2e1bd5d85b9ed692.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass--default-marker glass-3nfvp2 glass-6s0dn4 glass-l56j7k glass-2lah0s glass-1n2onr6 glass-6anfts glass-1m1144u

glass--default-marker glass-3nfvp2 glass-6s0dn4 glass-l56j7k glass-2lah0s glass-1n2onr6 glass-6anfts glass-1m1144u

glass-10l6tqk glass-13vifvy glass-3m8u43 glass-1ey2m1c glass-u96u03 glass-7ve9fu

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28874267–28874497, SHA-256 1c3aeda0a56844e0.

Jev judged not model-facing (confidence 0.02; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-10l6tqk glass-13vifvy glass-3m8u43 glass-1ey2m1c glass-u96u03 glass-7ve9fu glass-78zum5 glass-6s0dn4 glass-l56j7k glass-67bb7w glass-6o6s4a glass-1lbmi28 glass-1hc1fzr glass-1vcc2rl glass-19991ni glass-12s1jxh glass-6ekqhr

glass-10l6tqk glass-13vifvy glass-3m8u43 glass-1ey2m1c glass-u96u03 glass-7ve9fu glass-78zum5 glass-6s0dn4 glass-l56j7k glass-67bb7w glass-6o6s4a glass-1lbmi28 glass-1hc1fzr glass-1vcc2rl glass-19991ni glass-12s1jxh glass-6ekqhr

Remove Bookmark

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28874729–28874746, SHA-256 bec7f5ce6a14481a.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: Remove Bookmark

Remove Bookmark

Bookmark This Page

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28874747–28874767, SHA-256 0bf6525dbfc0c600.

Jev judged not model-facing (confidence 0.02; role human). This is a classifier judgment, not proof of delivery.

Readable text: Bookmark This Page

Bookmark This Page

Remove Bookmark · byte 28874821

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28874821–28874838, SHA-256 bec7f5ce6a14481a.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: Remove Bookmark

Remove Bookmark

Bookmark This Page · byte 28874839

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28874839–28874859, SHA-256 0bf6525dbfc0c600.

Jev judged not model-facing (confidence 0.03; role human). This is a classifier judgment, not proof of delivery.

Readable text: Bookmark This Page

Bookmark This Page

glass-78zum5 glass-6s0dn4 glass-5cdhqx glass-2lah0s · byte 28875042

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28875042–28875095, SHA-256 8f2f688da4629db7.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-78zum5 glass-6s0dn4 glass-5cdhqx glass-2lah0s

glass-78zum5 glass-6s0dn4 glass-5cdhqx glass-2lah0s

Hide Console

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28875315–28875329, SHA-256 ad4c2ed91cca2937.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: Hide Console

Hide Console

Show Console

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28875330–28875344, SHA-256 a67df858d71d0093.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: Show Console

Show Console

Hide Console · byte 28875398

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28875398–28875412, SHA-256 ad4c2ed91cca2937.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: Hide Console

Hide Console

Show Console · byte 28875413

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28875413–28875427, SHA-256 a67df858d71d0093.

Jev judged not model-facing (confidence 0.03; role human). This is a classifier judgment, not proof of delivery.

Readable text: Show Console

Show Console

glass-78zum5 glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-euugli glass-2lwn1j

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28876027–28876108, SHA-256 39bbaf1b453add23.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-78zum5 glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-euugli glass-2lwn1j

glass-78zum5 glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-euugli glass-2lwn1j

glass-1n2onr6 glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-2lwn1j glass-euugli

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28876146–28876254, SHA-256 fb3e4e8b0a0ad050.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-1n2onr6 glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-2lwn1j glass-euugli glass-78zum5 glass-dt5ytf

glass-1n2onr6 glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-2lwn1j glass-euugli glass-78zum5 glass-dt5ytf

glass-1n2onr6 glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-2lwn1j glass-euugli · byte 28876269

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28876269–28876391, SHA-256 b365128cf73ce5e1.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-1n2onr6 glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-2lwn1j glass-euugli glass-78zum5 glass-dt5ytf glass-12peec7

glass-1n2onr6 glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-2lwn1j glass-euugli glass-78zum5 glass-dt5ytf glass-12peec7

glass-1n2onr6 glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-2lwn1j glass-6ikm8r

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28876606–28876702, SHA-256 695a821abfd00bad.

Jev judged not model-facing (confidence 0.02; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-1n2onr6 glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-2lwn1j glass-6ikm8r glass-10wlt62

glass-1n2onr6 glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-2lwn1j glass-6ikm8r glass-10wlt62

glass-1n2onr6 glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-2lwn1j glass-6ikm8r · byte 28876717

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28876717–28876854, SHA-256 b8e3aff9147ed32a.

Jev judged not model-facing (confidence 0.02; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-1n2onr6 glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-2lwn1j glass-6ikm8r glass-10wlt62 glass-78zum5 glass-1q0g3np glass-1ys0zz1

glass-1n2onr6 glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-2lwn1j glass-6ikm8r glass-10wlt62 glass-78zum5 glass-1q0g3np glass-1ys0zz1

glass-1n2onr6 glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-2lwn1j glass-6ikm8r · byte 28876869

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28876869–28876979, SHA-256 a102f76b490ee560.

Jev judged not model-facing (confidence 0.02; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-1n2onr6 glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-2lwn1j glass-6ikm8r glass-10wlt62 glass-1s85apg

glass-1n2onr6 glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-2lwn1j glass-6ikm8r glass-10wlt62 glass-1s85apg

glass-1n2onr6 glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-2lwn1j glass-6ikm8r · byte 28876994

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28876994–28877132, SHA-256 15af752bf6e0207a.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-1n2onr6 glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-2lwn1j glass-6ikm8r glass-10wlt62 glass-1q0g3np glass-1ys0zz1 glass-1s85apg

glass-1n2onr6 glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-2lwn1j glass-6ikm8r glass-10wlt62 glass-1q0g3np glass-1ys0zz1 glass-1s85apg

glass-10l6tqk glass-13vifvy glass-3m8u43 glass-1ey2m1c glass-u96u03 glass-52sccv

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28877592–28877753, SHA-256 dd446408e468e49e.

Jev judged not model-facing (confidence 0.02; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-10l6tqk glass-13vifvy glass-3m8u43 glass-1ey2m1c glass-u96u03 glass-52sccv glass-jbqb8w glass-hds75k glass-4wkmsb glass-gdialr glass-12w9bfk glass-6ekqhr

glass-10l6tqk glass-13vifvy glass-3m8u43 glass-1ey2m1c glass-u96u03 glass-52sccv glass-jbqb8w glass-hds75k glass-4wkmsb glass-gdialr glass-12w9bfk glass-6ekqhr

glass-10l6tqk glass-13vifvy glass-3m8u43 glass-1ey2m1c glass-u96u03 glass-52sccv · byte 28877768

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28877768–28877929, SHA-256 c817156fd2a314cf.

Jev judged not model-facing (confidence 0.02; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-10l6tqk glass-13vifvy glass-3m8u43 glass-1ey2m1c glass-u96u03 glass-52sccv glass-hds75k glass-4wkmsb glass-gdialr glass-12w9bfk glass-6ekqhr glass-9sb9an

glass-10l6tqk glass-13vifvy glass-3m8u43 glass-1ey2m1c glass-u96u03 glass-52sccv glass-hds75k glass-4wkmsb glass-gdialr glass-12w9bfk glass-6ekqhr glass-9sb9an

glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-2lwn1j glass-78zum5 glass-6s0dn4

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28878069–28878191, SHA-256 26468951f293a3b2.

Jev judged not model-facing (confidence 0.02; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-2lwn1j glass-78zum5 glass-6s0dn4 glass-l56j7k glass-1odjw0f glass-1krxdfg

glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 glass-2lwn1j glass-78zum5 glass-6s0dn4 glass-l56j7k glass-1odjw0f glass-1krxdfg

glass-78zum5 glass-dt5ytf glass-1cy8zhl glass-dpxx8g glass-ehausa glass-1gfrnbc

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28878221–28878315, SHA-256 3a1983ec366fd150.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-78zum5 glass-dt5ytf glass-1cy8zhl glass-dpxx8g glass-ehausa glass-1gfrnbc glass-m6i5cn

glass-78zum5 glass-dt5ytf glass-1cy8zhl glass-dpxx8g glass-ehausa glass-1gfrnbc glass-m6i5cn

glass-1j61zf2 glass-1wd3ewq glass-dj266r glass-1yf7rl7 glass-at24cr glass-j3b58b

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28878346–28878428, SHA-256 c502cab7f2537ef3.

Jev judged not model-facing (confidence 0.02; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-1j61zf2 glass-1wd3ewq glass-dj266r glass-1yf7rl7 glass-at24cr glass-j3b58b

glass-1j61zf2 glass-1wd3ewq glass-dj266r glass-1yf7rl7 glass-at24cr glass-j3b58b

Certificate Error

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28878438–28878457, SHA-256 fec111d6a45c6f77.

Jev judged not model-facing (confidence 0.02; role human). This is a classifier judgment, not proof of delivery.

Readable text: Certificate Error

Certificate Error

glass-11wthnw glass-1dbl2gt glass-19aaqeu glass-1dt7z5j glass-dj266r glass-1yf7r

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28878480–28878603, SHA-256 cb909c964f6731f3.

Jev judged not model-facing (confidence 0.02; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-11wthnw glass-1dbl2gt glass-19aaqeu glass-1dt7z5j glass-dj266r glass-1yf7rl7 glass-at24cr glass-j3b58b glass-j0a0fe

glass-11wthnw glass-1dbl2gt glass-19aaqeu glass-1dt7z5j glass-dj266r glass-1yf7rl7 glass-at24cr glass-j3b58b glass-j0a0fe

The certificate for this site is not trusted

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28878613–28878659, SHA-256 ef3015553da46d42.

Jev judged not model-facing (confidence 0.02; role human). This is a classifier judgment, not proof of delivery.

Readable text: The certificate for this site is not trusted

The certificate for this site is not trusted

glass-78zum5 glass-dt5ytf glass-ehausa glass-h8yej3 glass-19snzy6 glass-1t8xvyj

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28878682–28879044, SHA-256 3c3d1bc88d050a6e.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-78zum5 glass-dt5ytf glass-ehausa glass-h8yej3 glass-19snzy6 glass-1t8xvyj glass-1jkygx glass-usxwy5 glass-1o7kk3e glass-gxpns3 glass-161eota glass-1ot9j5z glass-1s4tksr glass-kphxji glass-178xt8z glass-s1s249 glass-so031l glass-e0pwq …

glass-78zum5 glass-dt5ytf glass-ehausa glass-h8yej3 glass-19snzy6 glass-1t8xvyj glass-1jkygx glass-usxwy5 glass-1o7kk3e glass-gxpns3 glass-161eota glass-1ot9j5z glass-1s4tksr glass-kphxji glass-178xt8z glass-s1s249 glass-so031l glass-e0pwq glass-13fuv20 glass-32b0ac glass-1q0q8m5 glass-19ypqd9 glass-1njmyyh glass-y7i79c glass-1talola glass-famn59 glass-9f619

glass-78zum5 glass-ehausa glass-1wm8ruf glass-37zpob

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28879075–28879129, SHA-256 8919d90b80f5d205.

Jev judged not model-facing (confidence 0.02; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-78zum5 glass-ehausa glass-1wm8ruf glass-37zpob

glass-78zum5 glass-ehausa glass-1wm8ruf glass-37zpob

glass-1s688f glass-19aaqeu glass-18advcn glass-2lah0s

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28879161–28879216, SHA-256 0b5d4ffbdaa7b586.

Jev judged not model-facing (confidence 0.02; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-1s688f glass-19aaqeu glass-18advcn glass-2lah0s

glass-1s688f glass-19aaqeu glass-18advcn glass-2lah0s

glass-19aaqeu glass-13faqbe glass-1iyjqo2 glass-s83m0k glass-1t1x2f9

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28879258–28879328, SHA-256 afcbf8508480bc53.

Jev judged not model-facing (confidence 0.02; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-19aaqeu glass-13faqbe glass-1iyjqo2 glass-s83m0k glass-1t1x2f9

glass-19aaqeu glass-13faqbe glass-1iyjqo2 glass-s83m0k glass-1t1x2f9

glass-78zum5 glass-ehausa glass-1wm8ruf glass-37zpob · byte 28879372

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28879372–28879426, SHA-256 8919d90b80f5d205.

Jev judged not model-facing (confidence 0.02; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-78zum5 glass-ehausa glass-1wm8ruf glass-37zpob

glass-78zum5 glass-ehausa glass-1wm8ruf glass-37zpob

glass-1s688f glass-19aaqeu glass-18advcn glass-2lah0s · byte 28879458

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28879458–28879513, SHA-256 0b5d4ffbdaa7b586.

Jev judged not model-facing (confidence 0.02; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-1s688f glass-19aaqeu glass-18advcn glass-2lah0s

glass-1s688f glass-19aaqeu glass-18advcn glass-2lah0s

glass-19aaqeu glass-13faqbe glass-1iyjqo2 glass-s83m0k glass-1t1x2f9 · byte 28879556

Source: desktop/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.glass.main.js, bytes 28879556–28879626, SHA-256 afcbf8508480bc53.

Jev judged not model-facing (confidence 0.03; role code_data). This is a classifier judgment, not proof of delivery.

Readable text: glass-19aaqeu glass-13faqbe glass-1iyjqo2 glass-s83m0k glass-1t1x2f9

glass-19aaqeu glass-13faqbe glass-1iyjqo2 glass-s83m0k glass-1t1x2f9