air-mcp-server 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +90 -0
- package/bin/air-mcp-http.js +2 -0
- package/bin/air-mcp.js +10 -0
- package/dist/core/utils/air-home.d.ts +6 -0
- package/dist/core/utils/air-home.js +72 -0
- package/dist/http.js +12738 -0
- package/dist/http.js.map +7 -0
- package/dist/index.js +12571 -0
- package/dist/index.js.map +7 -0
- package/dist/packages/mcp-server/src/config.d.ts +17 -0
- package/dist/packages/mcp-server/src/config.js +105 -0
- package/dist/packages/mcp-server/src/context.d.ts +10 -0
- package/dist/packages/mcp-server/src/context.js +18 -0
- package/dist/packages/mcp-server/src/http.d.ts +1 -0
- package/dist/packages/mcp-server/src/http.js +189 -0
- package/dist/packages/mcp-server/src/index.d.ts +1 -0
- package/dist/packages/mcp-server/src/index.js +37 -0
- package/dist/packages/mcp-server/src/server.d.ts +18 -0
- package/dist/packages/mcp-server/src/server.js +35 -0
- package/dist/packages/mcp-server/src/tools/get-session-flow-review.d.ts +2 -0
- package/dist/packages/mcp-server/src/tools/get-session-flow-review.js +62 -0
- package/dist/packages/mcp-server/src/tools/get-session-generation-context.d.ts +2 -0
- package/dist/packages/mcp-server/src/tools/get-session-generation-context.js +118 -0
- package/dist/packages/mcp-server/src/tools/index.d.ts +2 -0
- package/dist/packages/mcp-server/src/tools/index.js +13 -0
- package/dist/packages/mcp-server/src/tools/list-recorded-sessions.d.ts +2 -0
- package/dist/packages/mcp-server/src/tools/list-recorded-sessions.js +57 -0
- package/dist/packages/mcp-server/src/utils/errors.d.ts +4 -0
- package/dist/packages/mcp-server/src/utils/errors.js +15 -0
- package/dist/packages/mcp-server/src/utils/privacy.d.ts +8 -0
- package/dist/packages/mcp-server/src/utils/privacy.js +15 -0
- package/package.json +46 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../codegen/dist/src/resolver/types.js", "../../codegen/dist/src/resolver/text-matching.js", "../../codegen/dist/src/resolver/element-ranking.js", "../../codegen/dist/src/resolver/visibility.js", "../../codegen/dist/src/snapshot-selector.js", "../../codegen/dist/src/flow-review.utils.js", "../../codegen/dist/src/flow-review.service.js", "../../codegen/dist/src/flow-review.formatter.js", "../../codegen/dist/src/assertion.stub.js", "../../codegen/dist/src/resolver/bounded-field/render-bounded-field.js", "../../codegen/dist/src/selector-spec.js", "../../shared/src/anchor-utils.ts", "../../shared/src/selectors.ts", "../../shared/src/url-utils.ts", "../../shared/src/index.ts", "../../codegen/dist/src/sqlite-client.js", "../../codegen/dist/src/runtime-schemas.js", "../../codegen/dist/src/generation-builder.js", "../../codegen/dist/src/codegen.service.js", "../../codegen/dist/src/resolver/structured-selector-utils.js", "../../codegen/dist/src/resolver/bounded-field/find-bounded-field.js", "../../codegen/dist/src/resolver/bounded-field/validate-bounded-field.js", "../../codegen/dist/src/resolver/selector-spec-validator.js", "../../codegen/dist/src/resolver/excerpt-builder.js", "../../codegen/dist/src/selector-evaluation.js", "../../codegen/dist/src/resolver/bounded-field/candidates.js", "../../codegen/dist/src/resolver/bounded-field/index.js", "../../codegen/dist/src/selector-resolver.js", "../../codegen/dist/src/index.js", "../../codegen/dist/index.js", "../src/index.ts", "../src/config.ts", "../../../core/utils/air-home.ts", "../src/context.ts", "../src/server.ts", "../src/tools/list-recorded-sessions.ts", "../src/utils/privacy.ts", "../src/utils/errors.ts", "../src/tools/get-session-flow-review.ts", "../src/tools/get-session-generation-context.ts", "../src/tools/index.ts"],
|
|
4
|
+
"sourcesContent": ["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DOM_ORDER_TIEBREAKER_REASON = exports.NON_RENDERED_TAGS = exports.BROAD_SELECTOR_SCORE_LIMIT = exports.BROAD_SELECTOR_MATCH_LIMIT = void 0;\nexports.assertionNeedsDomContext = assertionNeedsDomContext;\nexports.attachAssertionOutcomeSelections = attachAssertionOutcomeSelections;\nexports.BROAD_SELECTOR_MATCH_LIMIT = 50;\nexports.BROAD_SELECTOR_SCORE_LIMIT = 15;\nexports.NON_RENDERED_TAGS = new Set(['script', 'style', 'template', 'meta', 'link', 'noscript']);\nexports.DOM_ORDER_TIEBREAKER_REASON = 'resolved_by_dom_order_tiebreaker';\nfunction assertionNeedsDomContext(assertion) {\n if (assertion.selector && assertion.selector.trim().length > 0) {\n return true;\n }\n return assertion.type === 'element_visible' || assertion.type === 'element_text';\n}\nfunction attachAssertionOutcomeSelections(session, snapshotCache) {\n for (const step of session.steps) {\n if (!Array.isArray(step.assertions) || step.assertions.length === 0) {\n continue;\n }\n const eligibleAssertions = step.assertions.filter(assertionNeedsDomContext);\n if (eligibleAssertions.length === 0) {\n continue;\n }\n let selection = null;\n try {\n if (snapshotCache.selectForStep) {\n selection = snapshotCache.selectForStep(step, 'outcome');\n }\n }\n catch (_err) {\n selection = null;\n }\n if (!selection) {\n const nodeId = step.destinationNodeId ?? step.sourceNodeId ?? '';\n const snapshot = snapshotCache.get(nodeId, step.normalizedUrl, step.controlSignature);\n const snapshotSource = snapshotCache.getSource\n ? snapshotCache.getSource(nodeId, step.normalizedUrl, step.controlSignature)\n : (snapshot ? 'latest' : 'unavailable');\n selection = {\n snapshot,\n provenance: {\n source: snapshotSource,\n temporalClass: 'unknown',\n reason: snapshot ? 'legacy_snapshot_cache_selection' : 'legacy_snapshot_cache_unavailable',\n eventId: step.eventId,\n sourceNodeId: step.destinationNodeId ?? step.sourceNodeId,\n confidenceScore: snapshot ? 0.5 : 0,\n },\n evaluatedCandidates: [\n {\n source: snapshotSource,\n temporalClass: 'unknown',\n selected: !!snapshot,\n reason: snapshot ? 'legacy_snapshot_cache_selection' : undefined,\n skipReason: snapshot ? undefined : 'snapshot-unavailable',\n eventId: step.eventId,\n sourceNodeId: step.destinationNodeId ?? step.sourceNodeId,\n confidenceScore: snapshot ? 0.5 : 0,\n },\n ],\n };\n }\n step.assertions = step.assertions.map(assertion => {\n if (!assertionNeedsDomContext(assertion)) {\n return assertion;\n }\n return {\n ...assertion,\n assertionSnapshotSelection: selection.provenance,\n assertionCandidateTrace: selection.evaluatedCandidates,\n assertionTemporalClass: selection.provenance.temporalClass,\n };\n });\n }\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cssEscape = cssEscape;\nexports.isLikelyCssSelector = isLikelyCssSelector;\nexports.isTextSelector = isTextSelector;\nexports.extractAttributeValue = extractAttributeValue;\nexports.extractId = extractId;\nexports.extractClass = extractClass;\nexports.extractTextExcerpt = extractTextExcerpt;\nexports.inferStepSignalAttributes = inferStepSignalAttributes;\nexports.normalizeStaticText = normalizeStaticText;\nexports.getElementTextSignals = getElementTextSignals;\nexports.getElementSemanticTextSignals = getElementSemanticTextSignals;\nexports.getElementContextHints = getElementContextHints;\nexports.textFromElement = textFromElement;\nexports.findStableClassFromAttributes = findStableClassFromAttributes;\nexports.isDynamicText = isDynamicText;\nexports.normalizeTextForMatch = normalizeTextForMatch;\nexports.unquoteTextLiteral = unquoteTextLiteral;\nexports.escapeTextSelectorValue = escapeTextSelectorValue;\nexports.extractStableParentSelector = extractStableParentSelector;\nfunction logFingerprintInference(attribute, selector) {\n console.warn('FINGERPRINT_ATTRIBUTE_INFERRED_DOWNSTREAM', {\n attribute,\n selector,\n });\n}\nfunction cssEscape(value) {\n return value\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, '\\\\A ')\n .replace(/\\r/g, '\\\\D ')\n .replace(/\\t/g, '\\\\9 ');\n}\nfunction isLikelyCssSelector(selector) {\n const trimmed = selector.trim();\n if (!trimmed)\n return false;\n if (trimmed.startsWith('text='))\n return false;\n if (trimmed.startsWith('//'))\n return false;\n if (trimmed.startsWith('xpath='))\n return false;\n if (/^id\\(\".*\"\\)$/i.test(trimmed))\n return false;\n return true;\n}\nfunction isTextSelector(selector) {\n const trimmed = selector.trim();\n return trimmed.startsWith('text=') || /:has-text\\((?:\"[^\"]*\"|'[^']*')\\)/i.test(trimmed);\n}\nfunction decodeCssStringLiteral(value) {\n const escapedBackslashSentinel = '\\uE000';\n const invalidCssEscapeSentinel = '\\uE001';\n const invalidCssEscapes = [];\n return value\n .replace(/\\\\\\\\/g, escapedBackslashSentinel)\n .replace(/\\\\([0-9a-f]{1,6})\\s?/gi, (match, hex) => {\n const codePoint = parseInt(hex, 16);\n if (!Number.isFinite(codePoint) || codePoint < 0 || codePoint > 0x10ffff) {\n const index = invalidCssEscapes.push(match) - 1;\n return `${invalidCssEscapeSentinel}${index}${invalidCssEscapeSentinel}`;\n }\n return String.fromCodePoint(codePoint);\n })\n .replace(/\\\\(.)/g, '$1')\n .replace(new RegExp(`${invalidCssEscapeSentinel}(\\\\d+)${invalidCssEscapeSentinel}`, 'g'), (_match, index) => invalidCssEscapes[Number(index)] ?? '')\n .replace(new RegExp(escapedBackslashSentinel, 'g'), '\\\\');\n}\nfunction extractAttributeValue(selector, attribute) {\n const escaped = attribute.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const match = selector.match(new RegExp(`\\\\[${escaped}=(?:\"((?:\\\\\\\\.|[^\"\\\\\\\\])*)\"|'((?:\\\\\\\\.|[^'\\\\\\\\])*)')\\\\]`, 'i'));\n if (!match)\n return null;\n const rawValue = match[1] ?? match[2] ?? null;\n return rawValue == null ? null : decodeCssStringLiteral(rawValue);\n}\nfunction extractId(selector) {\n const attrId = extractAttributeValue(selector, 'id');\n if (attrId)\n return attrId;\n if (!selector.startsWith('#'))\n return null;\n const match = selector.slice(1).match(/^[a-zA-Z0-9_-]+/);\n return match?.[0] ?? null;\n}\nfunction extractClass(selector) {\n const match = selector.match(/\\.([a-zA-Z0-9_-]+)/);\n return match?.[1] ?? null;\n}\nfunction extractTextExcerpt(step) {\n const hasTextMatch = step.selector.match(/:has-text\\((?:\"([^\"]*)\"|'([^']*)')\\)/i);\n if (hasTextMatch) {\n return hasTextMatch[1] ?? hasTextMatch[2] ?? null;\n }\n if (step.selector.startsWith('text=')) {\n return step.selector.slice(5).trim() || null;\n }\n const intentParts = step.intent.split('_').slice(1).join(' ').trim();\n return intentParts.length > 1 ? intentParts : null;\n}\nfunction inferStepSignalAttributes(step) {\n const attrs = {};\n const selector = step.selector || '';\n const fingerprint = step.fingerprint;\n const fpAttrs = fingerprint?.attributes;\n const preferFingerprint = (field, fingerprintValue, inferredValue) => {\n if (typeof fingerprintValue === 'string' && fingerprintValue.length > 0) {\n return fingerprintValue;\n }\n if (typeof inferredValue === 'string' && inferredValue.length > 0) {\n logFingerprintInference(field, selector);\n return inferredValue;\n }\n return undefined;\n };\n attrs.id = preferFingerprint('id', fpAttrs?.id, extractId(selector));\n attrs.name = preferFingerprint('name', fpAttrs?.name, extractAttributeValue(selector, 'name'));\n attrs.dataTestId = preferFingerprint('data-testid', fpAttrs?.dataTestId || fpAttrs?.['data-testid'], extractAttributeValue(selector, 'data-testid'));\n attrs.dataCy = preferFingerprint('data-cy', fpAttrs?.dataCy || fpAttrs?.['data-cy'], extractAttributeValue(selector, 'data-cy'));\n attrs.dataQa = preferFingerprint('data-qa', fpAttrs?.dataQa || fpAttrs?.['data-qa'], extractAttributeValue(selector, 'data-qa'));\n attrs.ariaLabel = preferFingerprint('aria-label', fpAttrs?.ariaLabel || fpAttrs?.['aria-label'], extractAttributeValue(selector, 'aria-label'));\n attrs.ariaLabelledBy = preferFingerprint('aria-labelledby', fpAttrs?.ariaLabelledBy || fpAttrs?.['aria-labelledby'], extractAttributeValue(selector, 'aria-labelledby'));\n attrs.ariaDescribedBy = preferFingerprint('aria-describedby', fpAttrs?.ariaDescribedBy || fpAttrs?.['aria-describedby'], extractAttributeValue(selector, 'aria-describedby'));\n attrs.placeholder = preferFingerprint('placeholder', fpAttrs?.placeholder, extractAttributeValue(selector, 'placeholder'));\n attrs.autocomplete = preferFingerprint('autocomplete', fpAttrs?.autocomplete, extractAttributeValue(selector, 'autocomplete'));\n attrs.role = preferFingerprint('role', fpAttrs?.role, extractAttributeValue(selector, 'role'));\n attrs.href = preferFingerprint('href', fpAttrs?.href, extractAttributeValue(selector, 'href'));\n attrs.type = preferFingerprint('type', fpAttrs?.type, extractAttributeValue(selector, 'type'));\n attrs.title = preferFingerprint('title', fpAttrs?.title, extractAttributeValue(selector, 'title'));\n attrs.alt = preferFingerprint('alt', fpAttrs?.alt, extractAttributeValue(selector, 'alt'));\n attrs.value = preferFingerprint('value', fpAttrs?.value, extractAttributeValue(selector, 'value'));\n attrs.associatedLabelText = typeof fpAttrs?.associatedLabelText === 'string' ? fpAttrs.associatedLabelText : undefined;\n attrs.wrappedLabelText = typeof fpAttrs?.wrappedLabelText === 'string' ? fpAttrs.wrappedLabelText : undefined;\n attrs.labelledByText = typeof fpAttrs?.labelledByText === 'string' ? fpAttrs.labelledByText : undefined;\n attrs.describedByText = typeof fpAttrs?.describedByText === 'string' ? fpAttrs.describedByText : undefined;\n attrs.fieldLabelText =\n typeof fpAttrs?.fieldLabelText === 'string'\n ? fpAttrs.fieldLabelText\n : (typeof fingerprint?.boundedFieldContext?.fieldLabelText === 'string'\n ? fingerprint.boundedFieldContext.fieldLabelText\n : undefined);\n attrs.class = fpAttrs?.class || extractClass(selector) || undefined;\n attrs.tagName = fingerprint?.tagName?.toLowerCase();\n attrs.parentSelector = fingerprint?.parentSelector ?? undefined;\n return attrs;\n}\nfunction normalizeStaticText(value) {\n return value.replace(/\\s+/g, ' ').trim();\n}\nfunction getElementTextSignals(element) {\n const values = [];\n const push = (value) => {\n if (typeof value !== 'string')\n return;\n const normalized = normalizeStaticText(value);\n if (!normalized)\n return;\n if (values.includes(normalized))\n return;\n values.push(normalized);\n };\n const htmlElement = element;\n const tagName = (htmlElement.tagName || '').toLowerCase();\n push(htmlElement.getAttribute('value'));\n if (tagName === 'input' || tagName === 'textarea') {\n if (typeof htmlElement.value === 'string')\n push(htmlElement.value);\n }\n push(htmlElement.getAttribute('aria-label'));\n push(htmlElement.getAttribute('placeholder'));\n push(htmlElement.textContent || '');\n return values;\n}\nfunction pushSemanticSignal(signals, value, source) {\n if (typeof value !== 'string')\n return;\n const normalized = normalizeStaticText(value);\n if (!normalized)\n return;\n if (signals.some(signal => signal.value === normalized && signal.source === source))\n return;\n signals.push({ value: normalized, source });\n}\nfunction getDirectChildren(element) {\n const rawChildren = element.children;\n if (!rawChildren)\n return [];\n return Array.from(rawChildren);\n}\nfunction getChildSemanticTextSignals(element) {\n const signals = [];\n for (const child of getDirectChildren(element)) {\n const tagName = ((child.tagName) || '').toLowerCase();\n if (tagName === 'svg') {\n for (const grandChild of getDirectChildren(child)) {\n const grandTag = ((grandChild.tagName) || '').toLowerCase();\n if (grandTag === 'title') {\n pushSemanticSignal(signals, grandChild.textContent || '', 'icon_child_svg_title');\n }\n }\n continue;\n }\n if (tagName === 'img') {\n pushSemanticSignal(signals, child.getAttribute('alt'), 'icon_child_alt');\n }\n pushSemanticSignal(signals, child.getAttribute('aria-label'), 'icon_child_aria_label');\n pushSemanticSignal(signals, child.getAttribute('title'), 'icon_child_title');\n }\n return signals;\n}\nfunction getAssociatedLabelSignals(element, snapshot) {\n const signals = [];\n const htmlElement = element;\n const id = htmlElement.getAttribute('id') || htmlElement.id || '';\n if (id) {\n try {\n for (const label of Array.from(snapshot.querySelectorAll('label'))) {\n if (label.getAttribute('for') !== id)\n continue;\n pushSemanticSignal(signals, label.textContent || '', 'label_for');\n }\n }\n catch {\n // Ignore selector support issues in synthetic test docs.\n }\n }\n const labelledBy = htmlElement.getAttribute('aria-labelledby') || '';\n if (labelledBy) {\n for (const refId of labelledBy.split(/\\s+/).filter(Boolean)) {\n try {\n const ref = snapshot.querySelector(`#${cssEscape(refId)}`);\n if (ref) {\n pushSemanticSignal(signals, ref.textContent || '', 'aria_labelledby');\n }\n }\n catch {\n // Ignore selector support issues in synthetic test docs.\n }\n }\n }\n const parent = htmlElement.parentElement;\n const parentTag = ((parent?.tagName) || '').toLowerCase();\n if (parent && parentTag === 'label') {\n pushSemanticSignal(signals, parent.textContent || '', 'wrapped_label');\n }\n return signals;\n}\nfunction getStrictParentWrapperSignals(element) {\n const signals = [];\n const parent = element.parentElement;\n if (!parent)\n return signals;\n const parentTag = (parent.tagName || '').toLowerCase();\n const disallowed = new Set(['html', 'body', 'main', 'section', 'article', 'form', 'table', 'tbody', 'thead']);\n if (disallowed.has(parentTag))\n return signals;\n const children = parent.children ? Array.from(parent.children) : [];\n const compatibleControls = children.filter(child => {\n const tagName = ((child.tagName) || '').toLowerCase();\n return ['input', 'textarea', 'select', 'button', 'a', 'label'].includes(tagName);\n });\n if (compatibleControls.length !== 1)\n return signals;\n const text = normalizeStaticText(parent.textContent || '');\n if (!text || text.length > 80)\n return signals;\n pushSemanticSignal(signals, text, 'parent_wrapper_text');\n return signals;\n}\nfunction getElementSemanticTextSignals(element, snapshot) {\n const signals = [];\n const htmlElement = element;\n const tagName = (htmlElement.tagName || '').toLowerCase();\n pushSemanticSignal(signals, htmlElement.textContent || '', 'visible_text');\n pushSemanticSignal(signals, htmlElement.getAttribute('aria-label'), 'aria_label');\n pushSemanticSignal(signals, htmlElement.getAttribute('placeholder'), 'placeholder');\n pushSemanticSignal(signals, htmlElement.getAttribute('title'), 'title');\n pushSemanticSignal(signals, htmlElement.getAttribute('alt'), 'alt');\n const type = (htmlElement.getAttribute('type') || '').toLowerCase();\n const attrValue = htmlElement.getAttribute('value');\n if (attrValue &&\n tagName !== 'input' &&\n tagName !== 'textarea') {\n pushSemanticSignal(signals, attrValue, 'value');\n }\n else if (attrValue &&\n ['checkbox', 'radio', 'option'].includes(type)) {\n pushSemanticSignal(signals, attrValue, 'value');\n }\n if (snapshot) {\n for (const signal of getAssociatedLabelSignals(element, snapshot)) {\n pushSemanticSignal(signals, signal.value, signal.source);\n }\n }\n for (const signal of getStrictParentWrapperSignals(element)) {\n pushSemanticSignal(signals, signal.value, signal.source);\n }\n if (tagName === 'button' || tagName === 'a') {\n for (const signal of getChildSemanticTextSignals(element)) {\n pushSemanticSignal(signals, signal.value, signal.source);\n }\n }\n return signals;\n}\nfunction getElementContextHints(element) {\n const parent = element.parentElement;\n const parentTag = parent ? ((parent.tagName || '').toLowerCase() || undefined) : undefined;\n let nearestContainerTag;\n let current = parent;\n const containerTags = new Set(['form', 'dialog', 'nav', 'menu', 'table', 'tr']);\n while (current) {\n const tagName = (current.tagName || '').toLowerCase();\n if (containerTags.has(tagName)) {\n nearestContainerTag = tagName;\n break;\n }\n current = current.parentElement;\n }\n return { parentTag, nearestContainerTag };\n}\nfunction textFromElement(element) {\n const values = getElementTextSignals(element);\n if (values.length === 0)\n return null;\n return values.join(' ').slice(0, 80);\n}\nfunction findStableClassFromAttributes(classAttr) {\n if (!classAttr)\n return null;\n const classes = classAttr.split(/\\s+/).filter(Boolean);\n if (classes.length === 0)\n return null;\n const bannedPatterns = [\n /\\d{4,}/,\n /^css-/,\n /^sc-/,\n /^Mui/,\n /^ant-/,\n /^chakra-/,\n ];\n const utilityPrefixes = ['mt-', 'mb-', 'pt-', 'pb-', 'flex', 'text-', 'bg-'];\n const filtered = classes.filter(cls => !bannedPatterns.some(re => re.test(cls)));\n if (filtered.length === 0)\n return null;\n filtered.sort((a, b) => {\n const aUtility = utilityPrefixes.some(prefix => a.startsWith(prefix));\n const bUtility = utilityPrefixes.some(prefix => b.startsWith(prefix));\n if (aUtility && !bUtility)\n return 1;\n if (!aUtility && bUtility)\n return -1;\n return a.length - b.length;\n });\n return filtered[0] ?? null;\n}\nfunction isDynamicText(text, options) {\n const trimmed = text.trim();\n if (!trimmed)\n return true;\n if (trimmed.length > 80)\n return true;\n if (options?.allowNumericText) {\n if (/\\d{6,}/.test(trimmed))\n return true;\n }\n else if (/\\d{4,}/.test(trimmed)) {\n return true;\n }\n if (/(?:uuid|guid|session|token|timestamp)/i.test(trimmed))\n return true;\n return false;\n}\nfunction normalizeTextForMatch(text) {\n return text.replace(/\\s+/g, ' ').trim().toLowerCase();\n}\nfunction unquoteTextLiteral(value) {\n const trimmed = value.trim();\n if (trimmed.length >= 2 &&\n ((trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\")))) {\n return trimmed.slice(1, -1);\n }\n return trimmed;\n}\nfunction escapeTextSelectorValue(value) {\n return value\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\s+/g, ' ')\n .trim();\n}\nfunction extractStableParentSelector(step, attrs) {\n if (attrs?.parentSelector && isLikelyCssSelector(attrs.parentSelector)) {\n return attrs.parentSelector;\n }\n const selector = step.selector;\n if (!selector)\n return null;\n const splitByChild = selector.split(' > ');\n if (splitByChild.length > 1) {\n return splitByChild.slice(0, -1).join(' > ').trim() || null;\n }\n const splitByDescendant = selector.split(/\\s+/);\n if (splitByDescendant.length > 1) {\n return splitByDescendant.slice(0, -1).join(' ').trim() || null;\n }\n return null;\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getElementDepth = getElementDepth;\nexports.getDescendantCount = getDescendantCount;\nexports.buildScopeElements = buildScopeElements;\nexports.isDescendantOfAnyScope = isDescendantOfAnyScope;\nexports.textMatchStrength = textMatchStrength;\nexports.attributeMatchStrength = attributeMatchStrength;\nexports.localityStrength = localityStrength;\nexports.parentProximityStrength = parentProximityStrength;\nexports.fastPruneMatchedElements = fastPruneMatchedElements;\nexports.scoreMatchedElements = scoreMatchedElements;\nexports.enrichSignalAttributesFromElement = enrichSignalAttributesFromElement;\nexports.findSeedElements = findSeedElements;\nexports.isOverlyBroadSeedElement = isOverlyBroadSeedElement;\nexports.containsCalendarHint = containsCalendarHint;\nexports.tokenizeIntentText = tokenizeIntentText;\nexports.intentTokensForStep = intentTokensForStep;\nexports.hasCalendarIntent = hasCalendarIntent;\nexports.isCalendarContext = isCalendarContext;\nexports.getCalendarScopeSelectors = getCalendarScopeSelectors;\nexports.extractCalendarTextTarget = extractCalendarTextTarget;\nexports.looksDateValue = looksDateValue;\nexports.evaluateIntentMatch = evaluateIntentMatch;\nexports.selectorLooksInputLike = selectorLooksInputLike;\nexports.selectorLooksInteractive = selectorLooksInteractive;\nexports.elementLooksInputLike = elementLooksInputLike;\nexports.elementLooksInteractive = elementLooksInteractive;\nexports.hasFieldIntent = hasFieldIntent;\nexports.getCandidateElement = getCandidateElement;\nexports.isLowScoreFallbackCandidateSafe = isLowScoreFallbackCandidateSafe;\nexports.matchesIntent = matchesIntent;\nconst types_1 = require(\"./types\");\nconst text_matching_1 = require(\"./text-matching\");\nfunction getElementDepth(element) {\n let depth = 0;\n let current = element;\n while (current?.parentElement) {\n depth += 1;\n current = current.parentElement;\n }\n return depth;\n}\nfunction getDescendantCount(element) {\n try {\n return element.querySelectorAll('*').length;\n }\n catch {\n const children = element.children;\n return typeof children?.length === 'number' ? children.length : 0;\n }\n}\nfunction buildScopeElements(snapshot, selector) {\n const elements = new Set();\n if (!selector || !(0, text_matching_1.isLikelyCssSelector)(selector)) {\n return elements;\n }\n try {\n for (const element of Array.from(snapshot.querySelectorAll(selector)).slice(0, 25)) {\n elements.add(element);\n }\n }\n catch {\n return elements;\n }\n return elements;\n}\nfunction isDescendantOfAnyScope(element, scopes) {\n if (scopes.size === 0)\n return false;\n let current = element;\n while (current) {\n if (scopes.has(current))\n return true;\n current = current.parentElement;\n }\n return false;\n}\nfunction textMatchStrength(element, step) {\n const needles = [\n step.fingerprint?.textExcerpt,\n (0, text_matching_1.extractTextExcerpt)(step),\n ].filter((value) => typeof value === 'string' && value.trim().length > 0);\n if (needles.length === 0)\n return 0;\n const haystacks = (0, text_matching_1.getElementTextSignals)(element).map(text_matching_1.normalizeTextForMatch).filter(Boolean);\n if (haystacks.length === 0)\n return 0;\n let best = 0;\n for (const rawNeedle of needles) {\n const needle = (0, text_matching_1.normalizeTextForMatch)(rawNeedle);\n if (!needle)\n continue;\n const needleTokens = needle.split(/\\s+/).filter(Boolean);\n for (const haystack of haystacks) {\n if (haystack === needle) {\n best = Math.max(best, 1);\n continue;\n }\n const haystackTokens = new Set(haystack.split(/\\s+/).filter(Boolean));\n if (needleTokens.length > 0 && needleTokens.every(token => haystackTokens.has(token))) {\n best = Math.max(best, 0.75);\n continue;\n }\n if (haystack.includes(needle)) {\n best = Math.max(best, 0.5);\n }\n }\n }\n return best;\n}\nfunction attributeMatchStrength(element, step) {\n const attrs = (0, text_matching_1.inferStepSignalAttributes)(step);\n const checks = [\n [attrs.dataTestId, element.getAttribute('data-testid'), 0.35],\n [attrs.id, element.getAttribute('id') || element.id || null, 0.25],\n [attrs.name, element.getAttribute('name'), 0.2],\n [attrs.ariaLabel, element.getAttribute('aria-label'), 0.1],\n [attrs.placeholder, element.getAttribute('placeholder'), 0.1],\n ];\n let totalWeight = 0;\n let matchedWeight = 0;\n for (const [expected, actual, weight] of checks) {\n if (!expected)\n continue;\n totalWeight += weight;\n if (actual && (0, text_matching_1.normalizeTextForMatch)(actual) === (0, text_matching_1.normalizeTextForMatch)(expected)) {\n matchedWeight += weight;\n }\n }\n if (totalWeight === 0)\n return 0;\n return Math.min(1, matchedWeight / totalWeight);\n}\nfunction localityStrength(element) {\n const interactiveBonus = elementLooksInteractive(element) ? 0.45 : 0.15;\n const descendants = getDescendantCount(element);\n const sizeScore = Math.max(0, 1 - (descendants / 25));\n const depthScore = Math.min(getElementDepth(element) / 8, 1);\n return Math.min(1, (interactiveBonus * 0.5) + (sizeScore * 0.35) + (depthScore * 0.15));\n}\nfunction parentProximityStrength(element, snapshot, step) {\n const parentSelector = step.fingerprint?.parentSelector;\n if (!parentSelector)\n return 0;\n const scopes = buildScopeElements(snapshot, parentSelector);\n return isDescendantOfAnyScope(element, scopes) ? 1 : 0;\n}\nfunction fastPruneMatchedElements(matches, snapshot, step) {\n if (matches.length <= types_1.BROAD_SELECTOR_MATCH_LIMIT) {\n return matches;\n }\n const ranked = matches.map((element, index) => {\n let score = 0;\n if (elementLooksInteractive(element))\n score += 0.4;\n if (step) {\n score += textMatchStrength(element, step) * 0.3;\n score += attributeMatchStrength(element, step) * 0.2;\n score += parentProximityStrength(element, snapshot, step) * 0.1;\n }\n return { element, index, score };\n });\n return ranked\n .sort((a, b) => (b.score - a.score) || (a.index - b.index))\n .slice(0, types_1.BROAD_SELECTOR_SCORE_LIMIT)\n .map(item => item.element);\n}\nfunction scoreMatchedElements(matches, snapshot, step) {\n const candidates = fastPruneMatchedElements(matches, snapshot, step);\n return candidates.map((element, index) => {\n const intent = step ? evaluateIntentMatch(element, step) : null;\n const tagRole = intent ? ((intent.roleScore + intent.tagScore) / 2) : (elementLooksInteractive(element) ? 0.6 : 0.2);\n const score = step\n ? ((intent?.score ?? 0) * 0.30 +\n textMatchStrength(element, step) * 0.20 +\n attributeMatchStrength(element, step) * 0.20 +\n tagRole * 0.15 +\n localityStrength(element) * 0.10 +\n parentProximityStrength(element, snapshot, step) * 0.05)\n : (localityStrength(element) * 0.7) + (elementLooksInteractive(element) ? 0.3 : 0);\n return {\n element,\n index,\n score: Math.max(0, Math.min(1, score)),\n };\n }).sort((a, b) => (b.score - a.score) || (a.index - b.index));\n}\nfunction enrichSignalAttributesFromElement(attrs, element) {\n const htmlElement = element;\n if (!attrs.id && htmlElement.id)\n attrs.id = htmlElement.id;\n if (!attrs.name) {\n const name = htmlElement.getAttribute('name');\n if (name)\n attrs.name = name;\n }\n if (!attrs.dataTestId) {\n const testId = htmlElement.getAttribute('data-testid');\n if (testId)\n attrs.dataTestId = testId;\n }\n if (!attrs.ariaLabel) {\n const aria = htmlElement.getAttribute('aria-label');\n if (aria)\n attrs.ariaLabel = aria;\n }\n if (!attrs.ariaLabelledBy) {\n const ariaLabelledBy = htmlElement.getAttribute('aria-labelledby');\n if (ariaLabelledBy)\n attrs.ariaLabelledBy = ariaLabelledBy;\n }\n if (!attrs.placeholder) {\n const placeholder = htmlElement.getAttribute('placeholder');\n if (placeholder)\n attrs.placeholder = placeholder;\n }\n if (!attrs.autocomplete) {\n const autocomplete = htmlElement.getAttribute('autocomplete');\n if (autocomplete)\n attrs.autocomplete = autocomplete;\n }\n if (!attrs.role) {\n const role = htmlElement.getAttribute('role');\n if (role)\n attrs.role = role;\n }\n if (!attrs.title) {\n const title = htmlElement.getAttribute('title');\n if (title)\n attrs.title = title;\n }\n if (!attrs.class && htmlElement.className) {\n attrs.class = htmlElement.className;\n }\n}\nfunction findSeedElements(step, snapshot) {\n const MAX_SEEDS = 5;\n const seen = new Set();\n const pushSeed = (element) => {\n if (!element)\n return;\n if (seen.has(element))\n return;\n if (isOverlyBroadSeedElement(element))\n return;\n seen.add(element);\n };\n const byIntentTokens = tokenizeIntentText(step.intent || '').filter(token => token.length >= 3 && !INTENT_STOP_TOKENS.has(token));\n const tokenMatchScore = (element) => {\n if (byIntentTokens.length === 0)\n return 0;\n const haystack = [\n (0, text_matching_1.textFromElement)(element) || '',\n element.getAttribute('aria-label') || '',\n element.getAttribute('name') || '',\n element.getAttribute('placeholder') || '',\n element.getAttribute('id') || '',\n element.getAttribute('class') || '',\n element.getAttribute('role') || '',\n element.getAttribute('href') || '',\n element.getAttribute('title') || '',\n element.getAttribute('data-testid') || '',\n ]\n .join(' ')\n .toLowerCase();\n let matched = 0;\n for (const token of byIntentTokens) {\n if (haystack.includes(token))\n matched += 1;\n }\n return matched / byIntentTokens.length;\n };\n const attributeSignalScore = (element) => {\n let score = 0;\n if (element.getAttribute('data-testid'))\n score += 0.4;\n if (element.getAttribute('id'))\n score += 0.3;\n if (element.getAttribute('name'))\n score += 0.25;\n if (element.getAttribute('aria-label'))\n score += 0.25;\n if (element.getAttribute('placeholder'))\n score += 0.2;\n if (element.getAttribute('href'))\n score += 0.15;\n if (element.getAttribute('role'))\n score += 0.1;\n return Math.min(score, 0.7);\n };\n const seedScore = (element) => {\n const intentScore = evaluateIntentMatch(element, step).score;\n const tokenScore = tokenMatchScore(element);\n const interactiveBonus = elementLooksInteractive(element) ? 0.2 : 0;\n const inputBonus = step.action === 'input' && elementLooksInputLike(element) ? 0.3 : 0;\n const selectBonus = (step.action === 'custom-select' || step.action === 'custom-menu-select')\n && elementLooksInteractive(element) ? 0.15 : 0;\n const attrsBonus = attributeSignalScore(element);\n return (tokenScore * 0.5) + (intentScore * 0.35) + interactiveBonus + inputBonus + selectBonus + attrsBonus;\n };\n if (step.selector && (0, text_matching_1.isLikelyCssSelector)(step.selector)) {\n try {\n for (const element of Array.from(snapshot.querySelectorAll(step.selector)).slice(0, MAX_SEEDS)) {\n pushSeed(element);\n }\n }\n catch {\n // ignore invalid selector\n }\n }\n const hintedAttrs = (0, text_matching_1.inferStepSignalAttributes)(step);\n const hintedSelectors = [];\n if (hintedAttrs.dataTestId)\n hintedSelectors.push(`[data-testid=\"${(0, text_matching_1.cssEscape)(hintedAttrs.dataTestId)}\"]`);\n if (hintedAttrs.id)\n hintedSelectors.push(`#${(0, text_matching_1.cssEscape)(hintedAttrs.id)}`);\n if (hintedAttrs.name)\n hintedSelectors.push(`[name=\"${(0, text_matching_1.cssEscape)(hintedAttrs.name)}\"]`);\n if (hintedAttrs.ariaLabel)\n hintedSelectors.push(`[aria-label=\"${(0, text_matching_1.cssEscape)(hintedAttrs.ariaLabel)}\"]`);\n if (hintedAttrs.placeholder)\n hintedSelectors.push(`[placeholder=\"${(0, text_matching_1.cssEscape)(hintedAttrs.placeholder)}\"]`);\n if (hintedAttrs.role)\n hintedSelectors.push(`[role=\"${(0, text_matching_1.cssEscape)(hintedAttrs.role)}\"]`);\n for (const selector of hintedSelectors) {\n if (seen.size >= MAX_SEEDS)\n break;\n try {\n for (const element of Array.from(snapshot.querySelectorAll(selector)).slice(0, 2)) {\n pushSeed(element);\n }\n }\n catch {\n // ignore selector errors\n }\n }\n if (seen.size >= MAX_SEEDS) {\n return Array.from(seen).slice(0, MAX_SEEDS);\n }\n let pool = [];\n try {\n pool = Array.from(snapshot.querySelectorAll('*')).slice(0, 350);\n }\n catch {\n pool = [];\n }\n const ranked = pool\n .filter(element => !isOverlyBroadSeedElement(element))\n .map(element => ({ element, score: seedScore(element), tokenScore: tokenMatchScore(element) }))\n .filter(candidate => {\n if (byIntentTokens.length === 0) {\n return candidate.score >= 0.45;\n }\n return candidate.tokenScore > 0 || candidate.score >= 0.6;\n })\n .sort((a, b) => b.score - a.score)\n .slice(0, MAX_SEEDS);\n for (const candidate of ranked) {\n if (seen.size >= MAX_SEEDS)\n break;\n pushSeed(candidate.element);\n }\n return Array.from(seen).slice(0, MAX_SEEDS);\n}\nfunction isOverlyBroadSeedElement(element) {\n const tag = (element.tagName || '').toLowerCase();\n if (tag === 'html' || tag === 'body' || tag === 'head') {\n return true;\n }\n const textLength = (element.textContent || '').replace(/\\s+/g, ' ').trim().length;\n const childCount = element.children?.length ?? 0;\n let descendantCount = 0;\n try {\n descendantCount = element.querySelectorAll('*').length;\n }\n catch {\n descendantCount = childCount;\n }\n if (['main', 'section', 'article', 'div', 'ul', 'ol', 'table'].includes(tag)) {\n if (descendantCount > 60)\n return true;\n if (textLength > 1500 && descendantCount > 20)\n return true;\n }\n return false;\n}\nconst CALENDAR_INTENT_HINTS = new Set([\n 'calendar',\n 'date',\n 'day',\n 'month',\n 'year',\n 'timesheet',\n 'time',\n 'today',\n 'tomorrow',\n 'yesterday',\n]);\nconst CALENDAR_SELECTOR_HINTS = [\n 'calendar',\n 'datepicker',\n 'date-picker',\n 'dateinput',\n 'date-input',\n 'date-input',\n 'oxd-date-input',\n 'oxd-calendar',\n 'timesheet',\n];\nconst CALENDAR_SCOPE_SELECTORS = [\n '.oxd-date-input',\n '.oxd-date-input-container',\n '.oxd-calendar-wrapper',\n '.oxd-calendar-selector',\n '.oxd-calendar-selector-year',\n '.oxd-calendar-selector-month',\n '.oxd-calendar-dropdown',\n '.oxd-calendar-dates-grid',\n '.react-datepicker',\n '.datepicker',\n '[role=\"dialog\"]',\n];\nfunction containsCalendarHint(value) {\n if (!value)\n return false;\n const normalized = value.toLowerCase();\n return CALENDAR_SELECTOR_HINTS.some(hint => normalized.includes(hint));\n}\nfunction isNumericIntentToken(token) {\n return /^\\d{1,4}$/.test(token);\n}\nfunction tokenizeIntentText(value) {\n return value\n .toLowerCase()\n .split(/[^a-z0-9]+/)\n .map(token => token.trim())\n .filter(Boolean)\n .filter(token => token.length >= 2);\n}\nfunction intentTokensForStep(step) {\n return tokenizeIntentText(step.intent || '');\n}\nfunction hasCalendarIntent(step) {\n const tokens = intentTokensForStep(step);\n if (tokens.some(token => CALENDAR_INTENT_HINTS.has(token)))\n return true;\n if (tokens.some(isNumericIntentToken) && (step.action === 'click' || step.action === 'input'))\n return true;\n return false;\n}\nfunction hasCalendarSnapshotMarkers(snapshot) {\n return CALENDAR_SCOPE_SELECTORS.some(selector => {\n try {\n return !!snapshot.querySelector(selector);\n }\n catch {\n return false;\n }\n });\n}\nfunction isCalendarContext(step, snapshot, attrs, seedElements) {\n if (hasCalendarIntent(step))\n return true;\n if (containsCalendarHint(step.selector))\n return true;\n if (containsCalendarHint(attrs.class))\n return true;\n if (containsCalendarHint(attrs.parentSelector))\n return true;\n if (containsCalendarHint(step.fingerprint?.selector))\n return true;\n if (containsCalendarHint(step.fingerprint?.parentSelector || undefined))\n return true;\n for (const element of seedElements) {\n const className = (element.getAttribute('class') || '').toLowerCase();\n const id = (element.getAttribute('id') || '').toLowerCase();\n const aria = (element.getAttribute('aria-label') || '').toLowerCase();\n if (containsCalendarHint(className) || containsCalendarHint(id) || containsCalendarHint(aria)) {\n return true;\n }\n }\n if (step.action === 'click' || step.action === 'input') {\n return hasCalendarSnapshotMarkers(snapshot);\n }\n return false;\n}\nfunction getCalendarScopeSelectors(step, attrs) {\n const scopes = [];\n const stableParent = (0, text_matching_1.extractStableParentSelector)(step, attrs);\n const maybeScoped = [attrs.parentSelector, stableParent];\n for (const selector of maybeScoped) {\n if (!selector)\n continue;\n if (!(0, text_matching_1.isLikelyCssSelector)(selector))\n continue;\n if (!containsCalendarHint(selector))\n continue;\n scopes.push(selector);\n }\n scopes.push(...CALENDAR_SCOPE_SELECTORS);\n const seen = new Set();\n const unique = [];\n for (const scope of scopes) {\n if (!scope)\n continue;\n if (seen.has(scope))\n continue;\n seen.add(scope);\n unique.push(scope);\n }\n return unique.slice(0, 8);\n}\nfunction extractCalendarTextTarget(step, textExcerpt) {\n const raw = textExcerpt?.trim() || '';\n if (raw)\n return raw;\n const numericToken = intentTokensForStep(step).find(isNumericIntentToken);\n return numericToken ?? null;\n}\nfunction looksDateValue(value) {\n if (!value)\n return false;\n const trimmed = value.trim();\n return /^\\d{4}[-/]\\d{1,2}[-/]\\d{1,2}$/.test(trimmed);\n}\nconst INTENT_STOP_TOKENS = new Set([\n 'click',\n 'input',\n 'type',\n 'custom',\n 'select',\n 'hover',\n 'scroll',\n 'navigate',\n 'navigation',\n 'immediate',\n 'action',\n 'state',\n 'refresh',\n 'no',\n 'change',\n 'page',\n 'root',\n 'icon',\n 'btn',\n 'button',\n 'menu',\n 'item',\n 'node',\n 'step',\n 'oxd',\n 'focus',\n 'active',\n 'field',\n 'open',\n 'close',\n]);\nfunction inferActionHint(step, tokens) {\n if (step.action)\n return step.action;\n if (tokens.includes('custom') && tokens.includes('control') && tokens.includes('open'))\n return 'custom-control-open';\n if (tokens.includes('custom') && tokens.includes('menu') && tokens.includes('select'))\n return 'custom-menu-select';\n if (tokens.includes('custom') && tokens.includes('select'))\n return 'custom-select';\n if (tokens.includes('submit'))\n return 'submit';\n if (tokens.includes('hover'))\n return 'hover';\n if (tokens.includes('scroll'))\n return 'scroll';\n if (tokens.includes('navigate') || tokens.includes('navigation'))\n return 'navigate';\n if (tokens.includes('input') || tokens.includes('type'))\n return 'input';\n if (tokens.includes('click'))\n return 'click';\n return 'unknown';\n}\nfunction actionTagHints(actionHint, calendarMode = false) {\n switch (actionHint) {\n case 'click':\n return calendarMode\n ? new Set(['button', 'a', 'label', 'input', 'option', 'summary', 'i', 'svg'])\n : new Set(['button', 'a', 'label', 'input', 'option', 'summary']);\n case 'input':\n return new Set(['input', 'textarea', 'select']);\n case 'submit':\n return new Set(['button', 'input']);\n case 'custom-control-open':\n return new Set(['button', 'a', 'label', 'input', 'summary', 'div']);\n case 'custom-select':\n case 'custom-menu-select':\n return new Set(['select', 'option', 'input', 'button', 'a']);\n case 'hover':\n return new Set(['button', 'a', 'label', 'div', 'li']);\n default:\n return new Set();\n }\n}\nfunction collectIntentHaystack(el) {\n const attrs = [\n 'aria-label',\n 'name',\n 'placeholder',\n 'id',\n 'data-testid',\n 'href',\n 'value',\n 'data-value',\n 'data-id',\n 'title',\n 'role',\n 'class',\n ];\n const text = (0, text_matching_1.getElementTextSignals)(el).join(' ');\n const attrValues = attrs\n .map(name => el.getAttribute(name) || '')\n .filter(Boolean);\n return `${text} ${attrValues.join(' ')}`.toLowerCase();\n}\nfunction computeTokenScore(tokens, haystack) {\n if (tokens.length === 0) {\n return { score: 0.5, matchedTokens: [] };\n }\n const matchedTokens = tokens.filter(token => haystack.includes(token));\n const ratio = matchedTokens.length / tokens.length;\n return {\n score: Math.max(0, Math.min(1, ratio)),\n matchedTokens,\n };\n}\nfunction computeRoleScore(actionHint, role, tagName, calendarMode = false) {\n const roleLower = role.toLowerCase();\n const tagLower = tagName.toLowerCase();\n if (!roleLower && !tagLower)\n return 0.5;\n if (actionHint === 'unknown' || actionHint === 'navigate' || actionHint === 'scroll') {\n return 0.5;\n }\n if (actionHint === 'input') {\n if (['textbox', 'searchbox', 'combobox', 'spinbutton'].includes(roleLower))\n return 1;\n if (['input', 'textarea', 'select'].includes(tagLower))\n return 1;\n return 0.2;\n }\n if (actionHint === 'submit') {\n if (roleLower === 'button' || tagLower === 'button')\n return 1;\n if (tagLower === 'input')\n return 0.8;\n return 0.2;\n }\n if (actionHint === 'custom-control-open') {\n if (['button', 'combobox'].includes(roleLower))\n return 1;\n if (['button', 'input', 'a', 'div'].includes(tagLower))\n return 0.9;\n return 0.3;\n }\n if (actionHint === 'custom-select' || actionHint === 'custom-menu-select') {\n if (['option', 'listbox', 'combobox', 'menuitem'].includes(roleLower))\n return 1;\n if (['select', 'option', 'input', 'button', 'a'].includes(tagLower))\n return 0.9;\n return 0.3;\n }\n if (actionHint === 'click' || actionHint === 'hover') {\n if (['button', 'link', 'menuitem', 'tab', 'option', 'checkbox', 'radio', 'switch'].includes(roleLower))\n return 1;\n if (calendarMode && ['img', 'presentation'].includes(roleLower))\n return 0.75;\n if (['button', 'a', 'label', 'input', 'option', 'summary'].includes(tagLower))\n return 0.85;\n if (calendarMode && ['i', 'svg'].includes(tagLower))\n return 0.8;\n return 0.3;\n }\n return 0.5;\n}\nfunction computeTagScore(actionHint, tagName, calendarMode = false) {\n if (!tagName)\n return 0.5;\n const expected = actionTagHints(actionHint, calendarMode);\n if (expected.size === 0)\n return 0.5;\n return expected.has(tagName.toLowerCase()) ? 1 : 0;\n}\nfunction evaluateIntentMatch(el, step) {\n const rawTokens = tokenizeIntentText(step.intent || '');\n const semanticTokens = rawTokens.filter(token => !INTENT_STOP_TOKENS.has(token));\n const calendarMode = hasCalendarIntent(step) || containsCalendarHint(step.selector);\n const actionHint = inferActionHint(step, rawTokens);\n const haystack = collectIntentHaystack(el);\n const tagName = (el.tagName || '').toLowerCase();\n const role = (el.getAttribute('role') || '').toLowerCase();\n const token = computeTokenScore(semanticTokens, haystack);\n const roleScore = computeRoleScore(actionHint, role, tagName, calendarMode);\n const tagScore = computeTagScore(actionHint, tagName, calendarMode);\n let score = Math.max(0, Math.min(1, (token.score * 0.6) + (roleScore * 0.2) + (tagScore * 0.2)));\n if (semanticTokens.length > 0 && token.matchedTokens.length === 0 && !calendarMode) {\n score = Math.min(score, 0.49);\n }\n return {\n score,\n tokenScore: token.score,\n roleScore,\n tagScore,\n matchedTokens: token.matchedTokens,\n tokens: semanticTokens,\n actionHint,\n };\n}\nfunction selectorLooksInputLike(selector) {\n const normalized = selector.trim().toLowerCase();\n return (normalized.startsWith('input') ||\n normalized.startsWith('textarea') ||\n normalized.startsWith('select') ||\n normalized.includes('[name=') ||\n normalized.includes('[placeholder=') ||\n normalized.includes('[type='));\n}\nfunction selectorLooksInteractive(selector) {\n const normalized = selector.trim().toLowerCase();\n return (normalized.startsWith('button') ||\n normalized.startsWith('a') ||\n normalized.startsWith('input') ||\n normalized.startsWith('textarea') ||\n normalized.startsWith('select') ||\n normalized.includes('[role=') ||\n normalized.includes('[href=') ||\n normalized.includes('[aria-label=') ||\n normalized.includes(':has-text(') ||\n normalized.startsWith('text='));\n}\nfunction elementLooksInputLike(el) {\n if (!el)\n return false;\n const tagName = (el.tagName || '').toLowerCase();\n const role = (el.getAttribute('role') || '').toLowerCase();\n const contentEditable = (el.getAttribute('contenteditable') || '').toLowerCase();\n return (['input', 'textarea', 'select'].includes(tagName) ||\n ['textbox', 'searchbox', 'combobox', 'spinbutton'].includes(role) ||\n contentEditable === 'true');\n}\nfunction elementLooksInteractive(el) {\n if (!el)\n return false;\n const tagName = (el.tagName || '').toLowerCase();\n const role = (el.getAttribute('role') || '').toLowerCase();\n const href = el.getAttribute('href');\n const onclick = el.getAttribute('onclick');\n const tabIndex = el.getAttribute('tabindex');\n if (elementLooksInputLike(el))\n return true;\n if (['button', 'a', 'label', 'summary', 'option'].includes(tagName))\n return true;\n if (['button', 'link', 'menuitem', 'tab', 'option', 'checkbox', 'radio', 'switch', 'combobox', 'listbox'].includes(role)) {\n return true;\n }\n if (href || onclick)\n return true;\n if (typeof tabIndex === 'string' && tabIndex.trim() !== '' && tabIndex.trim() !== '-1')\n return true;\n return false;\n}\nfunction hasFieldIntent(step) {\n const tokens = tokenizeIntentText(step.intent || '');\n const fieldHints = new Set([\n 'username',\n 'password',\n 'email',\n 'search',\n 'date',\n 'first',\n 'last',\n 'name',\n 'phone',\n 'mobile',\n 'otp',\n 'pin',\n 'code',\n ]);\n return tokens.some(token => fieldHints.has(token));\n}\nfunction getCandidateElement(snapshot, selector) {\n try {\n return snapshot.querySelector(selector);\n }\n catch {\n return null;\n }\n}\nfunction isLowScoreFallbackCandidateSafe(step, snapshot, candidate, config) {\n const selector = candidate.candidate.selector;\n if (!selector || selector === step.selector)\n return false;\n const source = candidate.candidate.source;\n const element = getCandidateElement(snapshot, selector);\n const intentScore = element ? evaluateIntentMatch(element, step).score : 0;\n const inputLike = selectorLooksInputLike(selector) || elementLooksInputLike(element);\n const interactive = selectorLooksInteractive(selector) || elementLooksInteractive(element);\n if (step.action === 'input') {\n return inputLike;\n }\n if (step.action === 'submit') {\n return interactive;\n }\n if (step.action === 'custom-control-open') {\n return interactive && intentScore >= config.intentMinScore;\n }\n if (step.action === 'custom-select' || step.action === 'custom-menu-select') {\n return interactive || intentScore >= config.intentMinScore;\n }\n if (step.action === 'click' && hasFieldIntent(step)) {\n return inputLike;\n }\n if (source === 'class' || source === 'parent-scope') {\n return interactive && intentScore >= config.intentMinScore;\n }\n return interactive || intentScore >= config.intentMinScore;\n}\nfunction matchesIntent(el, intent, defaultIntentMinScore) {\n const step = typeof intent === 'string'\n ? {\n step: 0,\n intent,\n action: 'click',\n selector: '',\n selectorPriority: 'unknown',\n assertions: [],\n userAssertions: [],\n confidence: 1,\n sampleSize: 1,\n pageUrl: '',\n }\n : intent;\n return evaluateIntentMatch(el, step).score >= defaultIntentMinScore;\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hasFieldIntent = exports.elementLooksInteractive = exports.elementLooksInputLike = void 0;\nexports.isVisibleElement = isVisibleElement;\nexports.validateCSSCandidate = validateCSSCandidate;\nexports.validateTextCandidate = validateTextCandidate;\nconst types_1 = require(\"./types\");\nconst text_matching_1 = require(\"./text-matching\");\nconst element_ranking_1 = require(\"./element-ranking\");\nObject.defineProperty(exports, \"elementLooksInputLike\", { enumerable: true, get: function () { return element_ranking_1.elementLooksInputLike; } });\nObject.defineProperty(exports, \"elementLooksInteractive\", { enumerable: true, get: function () { return element_ranking_1.elementLooksInteractive; } });\nObject.defineProperty(exports, \"hasFieldIntent\", { enumerable: true, get: function () { return element_ranking_1.hasFieldIntent; } });\nfunction isVisibleElement(el) {\n let current = el;\n while (current) {\n const htmlEl = current;\n const tagName = (htmlEl.tagName || '').toLowerCase();\n if (types_1.NON_RENDERED_TAGS.has(tagName))\n return false;\n if (htmlEl.hasAttribute('hidden'))\n return false;\n if ((htmlEl.getAttribute('aria-hidden') || '').toLowerCase() === 'true')\n return false;\n if (tagName === 'input' &&\n (htmlEl.getAttribute('type') || '').toLowerCase() === 'hidden') {\n return false;\n }\n const style = (htmlEl.getAttribute('style') || '')\n .toLowerCase()\n .replace(/\\s+/g, '');\n if (style.includes('display:none'))\n return false;\n if (style.includes('visibility:hidden'))\n return false;\n current = htmlEl.parentElement;\n }\n return true;\n}\nfunction validateCSSCandidate(selector, snapshot, step, root = snapshot) {\n if (!(0, text_matching_1.isLikelyCssSelector)(selector)) {\n return {\n totalMatchCount: 0,\n visibleMatchCount: 0,\n effectiveMatchCount: 0,\n reason: 'invalid-selector',\n };\n }\n let matches;\n try {\n matches = root.querySelectorAll(selector);\n }\n catch {\n return {\n totalMatchCount: 0,\n visibleMatchCount: 0,\n effectiveMatchCount: 0,\n reason: 'invalid-selector',\n };\n }\n const visibleMatches = Array.from(matches).filter(isVisibleElement);\n if (visibleMatches.length === 0) {\n return {\n totalMatchCount: matches.length,\n visibleMatchCount: 0,\n effectiveMatchCount: 0,\n reason: 'no-visible-match',\n matchCount: 0,\n confidenceScore: 0,\n resolvedElement: null,\n };\n }\n if (visibleMatches.length === 1) {\n return {\n totalMatchCount: matches.length,\n visibleMatchCount: 1,\n effectiveMatchCount: 1,\n reason: 'unique-visible',\n matchCount: 1,\n confidenceScore: 1,\n resolvedElement: visibleMatches[0] ?? null,\n };\n }\n const rankedMatches = (0, element_ranking_1.scoreMatchedElements)(visibleMatches, snapshot, step);\n const winner = rankedMatches[0];\n const runnerUp = rankedMatches[1];\n const ambiguityReason = winner && runnerUp && Math.abs(winner.score - runnerUp.score) < 0.05\n ? types_1.DOM_ORDER_TIEBREAKER_REASON\n : undefined;\n return {\n totalMatchCount: matches.length,\n visibleMatchCount: visibleMatches.length,\n effectiveMatchCount: 1,\n reason: matches.length > types_1.BROAD_SELECTOR_MATCH_LIMIT ? 'too-broad' : 'resolved-multi-match',\n matchCount: visibleMatches.length,\n confidenceScore: ambiguityReason ? Math.min(winner?.score ?? 0, 0.7) : (winner?.score ?? 0),\n ambiguityReason,\n resolvedElement: winner?.element ?? null,\n };\n}\nfunction validateTextCandidate(selector, snapshot, step, root = snapshot) {\n const rawSelector = selector.trim();\n let scopeSelector = null;\n let textNeedle = '';\n if (rawSelector.startsWith('text=')) {\n textNeedle = (0, text_matching_1.unquoteTextLiteral)(rawSelector.slice(5).trim());\n }\n else {\n const hasTextMatch = rawSelector.match(/^(.*):has-text\\((.*)\\)$/);\n if (!hasTextMatch) {\n return {\n totalMatchCount: 0,\n visibleMatchCount: 0,\n effectiveMatchCount: 0,\n reason: 'invalid-selector',\n };\n }\n scopeSelector = hasTextMatch[1]?.trim() || null;\n textNeedle = (0, text_matching_1.unquoteTextLiteral)(hasTextMatch[2]?.trim() || '');\n }\n const normalizedNeedle = (0, text_matching_1.normalizeTextForMatch)(textNeedle);\n if (!normalizedNeedle) {\n return {\n totalMatchCount: 0,\n visibleMatchCount: 0,\n effectiveMatchCount: 0,\n reason: 'invalid-selector',\n };\n }\n let scopeMatches;\n try {\n scopeMatches = scopeSelector\n ? Array.from(root.querySelectorAll(scopeSelector))\n : Array.from(root.querySelectorAll('*'));\n }\n catch {\n return {\n totalMatchCount: 0,\n visibleMatchCount: 0,\n effectiveMatchCount: 0,\n reason: 'invalid-selector',\n };\n }\n const wasTooBroad = scopeMatches.length > types_1.BROAD_SELECTOR_MATCH_LIMIT;\n if (wasTooBroad) {\n const filtered = scopeMatches.filter(element => {\n const signals = (0, text_matching_1.getElementTextSignals)(element).map(text_matching_1.normalizeTextForMatch).filter(Boolean);\n if (signals.some(signal => signal.includes(normalizedNeedle))) {\n return true;\n }\n return (0, element_ranking_1.elementLooksInteractive)(element) || (0, element_ranking_1.elementLooksInputLike)(element);\n });\n scopeMatches = filtered.slice(0, types_1.BROAD_SELECTOR_MATCH_LIMIT);\n }\n let matchedElements = scopeMatches.filter(element => {\n const signals = (0, text_matching_1.getElementTextSignals)(element).map(text_matching_1.normalizeTextForMatch).filter(Boolean);\n return signals.some(signal => signal.includes(normalizedNeedle));\n });\n if (step && (0, element_ranking_1.hasFieldIntent)(step)) {\n matchedElements = matchedElements.filter(element => (0, element_ranking_1.elementLooksInputLike)(element) || (0, element_ranking_1.elementLooksInteractive)(element));\n }\n const visibleMatches = matchedElements.filter(isVisibleElement);\n if (visibleMatches.length === 0) {\n return {\n totalMatchCount: matchedElements.length,\n visibleMatchCount: 0,\n effectiveMatchCount: 0,\n reason: 'no-visible-match',\n matchCount: 0,\n confidenceScore: 0,\n resolvedElement: null,\n };\n }\n if (visibleMatches.length === 1) {\n return {\n totalMatchCount: matchedElements.length,\n visibleMatchCount: 1,\n effectiveMatchCount: 1,\n reason: 'unique-visible',\n matchCount: 1,\n confidenceScore: 1,\n resolvedElement: visibleMatches[0] ?? null,\n };\n }\n const rankedMatches = (0, element_ranking_1.scoreMatchedElements)(visibleMatches, snapshot, step);\n const winner = rankedMatches[0];\n const runnerUp = rankedMatches[1];\n const ambiguityReason = winner && runnerUp && Math.abs(winner.score - runnerUp.score) < 0.05\n ? types_1.DOM_ORDER_TIEBREAKER_REASON\n : undefined;\n return {\n totalMatchCount: matchedElements.length,\n visibleMatchCount: visibleMatches.length,\n effectiveMatchCount: 1,\n reason: wasTooBroad ? 'too-broad' : 'resolved-multi-match',\n matchCount: visibleMatches.length,\n confidenceScore: ambiguityReason ? Math.min(winner?.score ?? 0, 0.7) : (winner?.score ?? 0),\n ambiguityReason,\n resolvedElement: winner?.element ?? null,\n };\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SNAPSHOT_SKIP_REASONS = exports.SNAPSHOT_SELECTION_REASONS = void 0;\nexports.selectSnapshotForAction = selectSnapshotForAction;\nexports.selectSnapshotForOutcome = selectSnapshotForOutcome;\nexports.selectSnapshotForStep = selectSnapshotForStep;\nconst visibility_1 = require(\"./resolver/visibility\");\nexports.SNAPSHOT_SELECTION_REASONS = {\n SELECTED_EVENT_LOCAL_PAGE_STATE_BY_EVENT_ID: 'selected_event_local_pageState_by_eventId',\n SELECTED_EVENT_LOCAL_PAGE_SNAPSHOT_BY_EVENT_ID: 'selected_event_local_pageSnapshot_by_eventId',\n SELECTED_SOURCE_NODE_SNAPSHOT_AFTER_EVENT_LOCAL_MISSING: 'selected_source_node_snapshot_after_event_local_missing',\n SELECTED_IC_EXACT_FOR_ACTION_FALLBACK: 'selected_ic_exact_for_action_fallback',\n SELECTED_IC_STABLE_BY_URL_FOR_ACTION_FALLBACK: 'selected_ic_stable_by_url_for_action_fallback',\n SELECTED_URL_EVENT_FALLBACK_LAST_RESORT: 'selected_url_event_fallback_last_resort',\n SELECTED_IC_EXACT_STABLE_FOR_OUTCOME_STATE: 'selected_ic_exact_stable_for_outcome_state',\n SELECTED_IC_EXACT_FOR_OUTCOME_STATE: 'selected_ic_exact_for_outcome_state',\n SELECTED_OUTCOME_EVENT_SNAPSHOT: 'selected_outcome_event_snapshot',\n SELECTED_DESTINATION_NODE_SNAPSHOT_AFTER_OUTCOME_MISSING: 'selected_destination_node_snapshot_after_outcome_missing',\n SELECTED_UNAVAILABLE_NO_SNAPSHOT_FOUND: 'selected_unavailable_no_snapshot_found',\n};\nexports.SNAPSHOT_SKIP_REASONS = {\n EVENT_LOCAL_UNAVAILABLE_MISSING_EVENT_ID: 'event_local_unavailable_missing_eventId',\n EVENT_LOCAL_PAGE_STATE_MISSING: 'event_local_pageState_missing_for_eventId',\n EVENT_LOCAL_PAGE_SNAPSHOT_MISSING: 'event_local_pageSnapshot_missing_for_eventId',\n SOURCE_NODE_SNAPSHOT_MISSING: 'source_node_snapshot_missing',\n INTERACTION_CONTEXT_EXACT_MISSING: 'interaction_context_exact_missing',\n INTERACTION_CONTEXT_STABLE_BY_URL_MISSING: 'interaction_context_stable_by_url_missing',\n INTERACTION_CONTEXT_ANY_BY_URL_MISSING: 'interaction_context_any_by_url_missing',\n URL_EVENT_FALLBACK_MISSING: 'url_event_fallback_missing',\n OUTCOME_EVENT_SNAPSHOT_MISSING: 'outcome_event_snapshot_missing',\n DESTINATION_NODE_SNAPSHOT_MISSING: 'destination_node_snapshot_missing',\n NORMALIZED_URL_MISSING: 'normalized_url_missing',\n CONTROL_SIGNATURE_MISSING: 'control_signature_missing',\n EXACT_IC_SKIPPED_MISSING_CONTROL_SIGNATURE: 'exact_ic_skipped_missing_control_signature',\n IC_STALE: 'ic_stale',\n SNAPSHOT_PARSE_FAILED: 'snapshot_parse_failed',\n POST_ACTION_NOT_ALLOWED_FOR_ACTION_RESOLUTION: 'post_action_not_allowed_for_action_resolution',\n TARGET_MISSING_IN_SNAPSHOT: 'target_missing_in_snapshot',\n STATE_BOUNDARY_CROSSED: 'state_boundary_crossed',\n TAB_MISMATCH: 'tab_mismatch',\n INCOMPATIBLE_STATE: 'incompatible_state',\n IC_TAB_UNKNOWN: 'ic_tab_unknown',\n SHADOW_DOM_NOT_SERIALIZED: 'shadow_dom_not_serialized',\n CLOSED_SHADOW_DOM_UNOBSERVABLE: 'closed_shadow_dom_unobservable',\n HIGHER_PRIORITY_CANDIDATE_ALREADY_SELECTED: 'higher_priority_candidate_already_selected',\n};\nfunction buildIcKey(normalizedUrl, controlSignature) {\n return `${normalizedUrl}|${controlSignature ?? ''}`;\n}\nfunction isInteractionContextSource(source) {\n return source === 'interaction-context-exact'\n || source === 'interaction-context-stable-by-url'\n || source === 'interaction-context-any-by-url';\n}\nfunction isStepNavigationLike(step) {\n return step.outcomeType === 'navigation';\n}\nfunction findNextHardBoundaryForAction(step, inventory) {\n if (typeof step.timestamp !== 'number')\n return null;\n for (const boundary of inventory.hardBoundaries) {\n if (boundary.timestamp < step.timestamp)\n continue;\n if (boundary.kind === 'tab_change') {\n if (!step.tabId)\n return boundary;\n if (boundary.fromTabId === step.tabId || boundary.tabId === step.tabId) {\n return boundary;\n }\n continue;\n }\n if (step.tabId && boundary.tabId && boundary.tabId !== step.tabId) {\n continue;\n }\n return boundary;\n }\n return null;\n}\nfunction evaluateInteractionContextState(step, candidate, inventory, mode) {\n const handle = candidate.handle;\n if (!handle || !isInteractionContextSource(candidate.source)) {\n return {};\n }\n const toleranceMs = inventory.icBoundaryToleranceMs ?? 75;\n const baseConfidence = deriveBaseConfidence(candidate, mode);\n const maybeStaleForSameState = () => {\n if (typeof step.timestamp === 'number' &&\n typeof handle.timestamp === 'number' &&\n handle.timestamp + toleranceMs < step.timestamp) {\n return {\n confidenceScore: Math.min(baseConfidence, mode === 'action' ? 0.35 : 0.7),\n annotationReason: exports.SNAPSHOT_SKIP_REASONS.IC_STALE,\n };\n }\n return {};\n };\n if (step.tabId && handle.tabId && handle.tabId !== step.tabId) {\n return { skipReason: exports.SNAPSHOT_SKIP_REASONS.TAB_MISMATCH, confidenceScore: 0 };\n }\n if (mode === 'action') {\n if (step.tabId && !handle.tabId) {\n return { confidenceScore: Math.min(baseConfidence, 0.5) };\n }\n if (step.controlSignature &&\n handle.controlSignature &&\n handle.controlSignature !== step.controlSignature) {\n return { skipReason: exports.SNAPSHOT_SKIP_REASONS.INCOMPATIBLE_STATE, confidenceScore: 0 };\n }\n const nextBoundary = findNextHardBoundaryForAction(step, inventory);\n if (nextBoundary &&\n typeof handle.timestamp === 'number' &&\n handle.timestamp > nextBoundary.timestamp + toleranceMs) {\n return { skipReason: exports.SNAPSHOT_SKIP_REASONS.STATE_BOUNDARY_CROSSED, confidenceScore: 0 };\n }\n const staleEvaluation = maybeStaleForSameState();\n if (!step.controlSignature && candidate.source === 'interaction-context-stable-by-url') {\n return {\n confidenceScore: Math.min(staleEvaluation.confidenceScore ?? baseConfidence, 0.3),\n annotationReason: staleEvaluation.annotationReason,\n };\n }\n return staleEvaluation;\n }\n if (step.tabId && !handle.tabId) {\n return { confidenceScore: Math.min(baseConfidence, 0.7) };\n }\n if (typeof step.timestamp === 'number' &&\n typeof handle.timestamp === 'number' &&\n handle.timestamp + toleranceMs < step.timestamp) {\n return {\n confidenceScore: Math.min(baseConfidence, 0.7),\n annotationReason: exports.SNAPSHOT_SKIP_REASONS.IC_STALE,\n };\n }\n if (!isStepNavigationLike(step) &&\n step.controlSignature &&\n handle.controlSignature &&\n handle.controlSignature !== step.controlSignature) {\n return { skipReason: exports.SNAPSHOT_SKIP_REASONS.INCOMPATIBLE_STATE, confidenceScore: 0 };\n }\n return {};\n}\nfunction normalizeText(value) {\n return value.replace(/\\s+/g, ' ').trim().toLowerCase();\n}\nfunction getFieldLabelText(step) {\n const value = step.fingerprint?.attributes?.fieldLabelText;\n if (typeof value !== 'string')\n return null;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\nfunction hasStrongDirectSelectorEvidence(step) {\n const priority = step.selectorPriority;\n if (priority === 'data-testid'\n || priority === 'id'\n || priority === 'attribute'\n || priority === 'text') {\n return true;\n }\n const attrs = step.fingerprint?.attributes ?? {};\n return !!(attrs.dataTestId\n || attrs['data-testid']\n || attrs.dataCy\n || attrs['data-cy']\n || attrs.dataQa\n || attrs['data-qa']\n || attrs.id\n || attrs.name\n || attrs.placeholder\n || attrs.ariaLabel\n || attrs['aria-label']\n || attrs.href);\n}\nfunction isWeakLabelContextFallbackCandidate(step) {\n if (step.action !== 'input')\n return false;\n if (hasStrongDirectSelectorEvidence(step))\n return false;\n const fieldLabelText = getFieldLabelText(step);\n if (!fieldLabelText)\n return false;\n const priority = step.selectorPriority ?? 'unknown';\n return priority === 'class' || priority === 'path' || priority === 'unknown' || priority === 'other';\n}\nfunction isLikelyCssSelector(selector) {\n const trimmed = selector.trim();\n if (!trimmed)\n return false;\n if (trimmed.startsWith('text='))\n return false;\n if (trimmed.startsWith('//'))\n return false;\n if (trimmed.startsWith('xpath='))\n return false;\n if (/^id\\(\".*\"\\)$/i.test(trimmed))\n return false;\n return true;\n}\nfunction getVisibleInputLikeControls(root) {\n try {\n return Array.from(root.querySelectorAll('input,textarea,select,[role=\"textbox\"],[role=\"combobox\"],[role=\"searchbox\"],[role=\"spinbutton\"],[contenteditable=\"true\"],[aria-haspopup=\"listbox\"],[aria-haspopup=\"combobox\"]')).filter(visibility_1.isVisibleElement);\n }\n catch {\n return [];\n }\n}\nfunction findTightFieldContainer(label, target) {\n let current = label;\n let depth = 0;\n while (current && depth < 5) {\n const tagName = current.tagName?.toLowerCase() || '';\n if (['body', 'html', 'main', 'section', 'article', 'table', 'tbody', 'thead', 'form'].includes(tagName)) {\n break;\n }\n const controls = getVisibleInputLikeControls(current);\n if (controls.length === 1 && controls[0] === target) {\n return { container: current };\n }\n if (controls.length > 1 && controls.includes(target)) {\n return { container: null, blockedReason: 'multiple_input_like_targets' };\n }\n current = current.parentElement;\n depth += 1;\n }\n return { container: null, blockedReason: 'no_bounded_label_container' };\n}\nfunction findVisibleTargetForOriginalSelector(step, snapshot) {\n const selector = step.selector?.trim();\n if (!selector || !isLikelyCssSelector(selector)) {\n return { target: null, blockedReason: 'label_structure_missing' };\n }\n try {\n const allMatches = Array.from(snapshot.querySelectorAll(selector));\n const matches = allMatches.filter(visibility_1.isVisibleElement);\n if (matches.length === 1)\n return { target: matches[0] ?? null };\n if (matches.length > 1)\n return { target: null, blockedReason: 'target_selector_ambiguous' };\n if (allMatches.length > 0) {\n return { target: null, blockedReason: 'target_visibility_mismatch' };\n }\n return { target: null, blockedReason: 'target_missing' };\n }\n catch {\n return { target: null, blockedReason: 'target_selector_ambiguous' };\n }\n}\nfunction findLabelStructureEvidence(step, snapshot) {\n if (!isWeakLabelContextFallbackCandidate(step)) {\n return {\n active: false,\n evidence: false,\n score: 0,\n reason: null,\n blockedReason: null,\n };\n }\n const fieldLabelText = getFieldLabelText(step);\n if (!fieldLabelText) {\n return {\n active: true,\n evidence: false,\n score: 0,\n reason: null,\n blockedReason: 'field_label_missing',\n };\n }\n const targetResolution = findVisibleTargetForOriginalSelector(step, snapshot);\n const target = targetResolution.target;\n if (!target) {\n return {\n active: true,\n evidence: false,\n score: 0,\n reason: null,\n blockedReason: targetResolution.blockedReason ?? 'target_missing',\n };\n }\n let labels = [];\n try {\n labels = Array.from(snapshot.querySelectorAll('label'));\n }\n catch {\n labels = [];\n }\n const normalizedFieldLabel = normalizeText(fieldLabelText);\n const matchingLabels = labels.filter(label => normalizeText(label.textContent || '') === normalizedFieldLabel);\n if (matchingLabels.length === 0) {\n return {\n active: true,\n evidence: false,\n score: 0,\n reason: null,\n blockedReason: 'label_missing',\n };\n }\n if (matchingLabels.length > 1) {\n return {\n active: true,\n evidence: false,\n score: 1,\n reason: 'label_text_match',\n blockedReason: 'duplicate_labels',\n };\n }\n const label = matchingLabels[0];\n let associationScore = 1;\n const targetId = target.getAttribute('id');\n const labelFor = label.getAttribute('for');\n if (targetId && labelFor === targetId) {\n associationScore = 3;\n }\n else if (label.contains(target)) {\n associationScore = 3;\n }\n else {\n const labelledBy = target.getAttribute('aria-labelledby');\n if (labelledBy) {\n const ids = labelledBy.split(/\\s+/).filter(Boolean);\n const labelId = label.getAttribute('id');\n if (labelId && ids.includes(labelId)) {\n associationScore = 3;\n }\n }\n }\n const boundedContainer = findTightFieldContainer(label, target);\n if (!boundedContainer.container) {\n return {\n active: true,\n evidence: false,\n score: associationScore,\n reason: 'label_text_match',\n blockedReason: boundedContainer.blockedReason ?? 'no_bounded_label_container',\n };\n }\n const controls = getVisibleInputLikeControls(boundedContainer.container);\n if (controls.length !== 1 || controls[0] !== target) {\n return {\n active: true,\n evidence: false,\n score: associationScore + 1,\n reason: 'bounded_container_match',\n blockedReason: controls.length > 1 ? 'multiple_input_like_targets' : 'target_not_bound_to_label_container',\n };\n }\n return {\n active: true,\n evidence: true,\n score: associationScore + 3,\n reason: associationScore >= 3 ? 'exact_label_association' : 'bounded_label_structure',\n blockedReason: null,\n };\n}\nfunction labelEvidenceReason(evidence) {\n if (evidence.evidence)\n return evidence.reason;\n return evidence.blockedReason;\n}\nfunction isDestructiveAction(step) {\n const fingerprintText = step.fingerprint?.textExcerpt ?? '';\n const selector = step.selector ?? '';\n const combined = normalizeText([step.intent, fingerprintText, selector].filter(Boolean).join(' '));\n return /(delete|remove|close|dismiss|clear|archive)/.test(combined);\n}\nfunction shouldRunExpensivePresenceValidation(step, candidate, mode) {\n if (mode === 'outcome')\n return true;\n if (isDestructiveAction(step))\n return true;\n return candidate.temporalClass === 'post_action' || candidate.temporalClass === 'outcome_state';\n}\nfunction trySelectorPresence(step, snapshot) {\n const selector = step.selector?.trim();\n if (!selector || !isLikelyCssSelector(selector))\n return null;\n try {\n return !!snapshot.querySelector(selector);\n }\n catch {\n return null;\n }\n}\nfunction tryFingerprintPresence(step, snapshot) {\n return !!findTargetEvidence(step, snapshot);\n}\nfunction cssEscape(value) {\n return value\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, '\\\\A ')\n .replace(/\\r/g, '\\\\D ')\n .replace(/\\t/g, '\\\\9 ');\n}\nfunction inferStepControlFamily(step) {\n const attrs = step.fingerprint?.attributes ?? {};\n const role = (attrs.role || '').toLowerCase();\n const type = (attrs.type || '').toLowerCase();\n const tagName = (step.fingerprint?.tagName || '').toLowerCase();\n const text = normalizeText(step.fingerprint?.textExcerpt || '');\n const selector = (step.selector || '').toLowerCase();\n if (role === 'menuitem')\n return 'menuitem';\n if (role === 'combobox')\n return 'combobox';\n if (type === 'password')\n return 'password-input';\n if (type === 'submit' || step.action === 'submit')\n return 'submit-button';\n if (attrs.href || tagName === 'a' || selector.startsWith('a') || selector.includes('[href='))\n return 'nav-link';\n if (role === 'button' || tagName === 'button')\n return 'button';\n if (tagName === 'select')\n return 'combobox';\n if (role === 'textbox' || role === 'searchbox' || tagName === 'input' || tagName === 'textarea') {\n return type === 'password' ? 'password-input' : 'text-input';\n }\n if (step.action === 'custom-control-open' ||\n step.action === 'custom-select' ||\n step.action === 'custom-menu-select' ||\n text === '-- select --' ||\n selector.includes('select') ||\n role === 'listbox') {\n return 'select-trigger';\n }\n return 'generic-container';\n}\nfunction inferElementControlFamily(element) {\n const tagName = ((element.tagName) || '').toLowerCase();\n const role = (element.getAttribute('role') || '').toLowerCase();\n const type = (element.getAttribute('type') || '').toLowerCase();\n const placeholder = normalizeText(element.getAttribute('placeholder') || '');\n if (role === 'menuitem')\n return 'menuitem';\n if (role === 'combobox' || role === 'listbox' || tagName === 'select')\n return 'combobox';\n if (type === 'password')\n return 'password-input';\n if (type === 'submit')\n return 'submit-button';\n if (tagName === 'a' || !!element.getAttribute('href'))\n return 'nav-link';\n if (tagName === 'button' || role === 'button')\n return 'button';\n if (tagName === 'input' || tagName === 'textarea' || role === 'textbox' || role === 'searchbox') {\n if (placeholder.includes('search') || type === 'search')\n return 'text-input';\n return 'text-input';\n }\n if (placeholder === '-- select --')\n return 'select-trigger';\n return 'generic-container';\n}\nfunction textSignalsFromElement(element) {\n const signals = [\n element.textContent || '',\n element.getAttribute('aria-label') || '',\n element.getAttribute('placeholder') || '',\n element.getAttribute('value') || '',\n ];\n return signals.map(normalizeText).filter(Boolean);\n}\nfunction findTargetEvidence(step, snapshot) {\n const selector = step.selector?.trim();\n if (selector && isLikelyCssSelector(selector)) {\n try {\n const match = snapshot.querySelector(selector);\n if (match)\n return 'selector_match';\n }\n catch {\n // Ignore invalid selector fragments and continue.\n }\n }\n const fingerprint = step.fingerprint;\n if (!fingerprint)\n return null;\n const attrs = fingerprint.attributes ?? {};\n const attrChecks = [\n ['id', attrs.id, (value) => `#${cssEscape(value)}`],\n ['name', attrs.name, (value) => `[name=\"${cssEscape(value)}\"]`],\n ['placeholder', attrs.placeholder, (value) => `[placeholder=\"${cssEscape(value)}\"]`],\n ['role', attrs.role, (value) => `[role=\"${cssEscape(value)}\"]`],\n ['href', attrs.href, (value) => `[href=\"${cssEscape(value)}\"]`],\n ['data-testid', attrs.dataTestId ?? attrs['data-testid'], (value) => `[data-testid=\"${cssEscape(value)}\"]`],\n ['data-cy', attrs.dataCy ?? attrs['data-cy'], (value) => `[data-cy=\"${cssEscape(value)}\"]`],\n ['data-qa', attrs.dataQa ?? attrs['data-qa'], (value) => `[data-qa=\"${cssEscape(value)}\"]`],\n ];\n for (const [label, value, selectorFactory] of attrChecks) {\n if (!value)\n continue;\n try {\n if (snapshot.querySelector(selectorFactory(value)))\n return `fingerprint_attribute:${label}`;\n }\n catch {\n // Ignore invalid selector fragments and continue.\n }\n }\n const targetText = normalizeText(fingerprint.textExcerpt || '');\n if (targetText) {\n try {\n const tagName = fingerprint.tagName?.toLowerCase() || '*';\n const candidates = Array.from(snapshot.querySelectorAll(tagName));\n const textMatch = candidates.some(candidate => {\n if (!(0, visibility_1.isVisibleElement)(candidate))\n return false;\n return textSignalsFromElement(candidate).some(signal => signal.includes(targetText));\n });\n if (textMatch)\n return 'fingerprint_text';\n }\n catch {\n // Ignore selector errors and continue.\n }\n }\n if (fingerprint.parentSelector && isLikelyCssSelector(fingerprint.parentSelector)) {\n try {\n if (snapshot.querySelector(fingerprint.parentSelector))\n return 'parent_context';\n }\n catch {\n // Ignore selector errors and continue.\n }\n }\n const stepFamily = inferStepControlFamily(step);\n if (stepFamily !== 'generic-container') {\n try {\n const all = Array.from(snapshot.querySelectorAll('*'));\n const familyMatch = all.some(element => inferElementControlFamily(element) === stepFamily);\n if (familyMatch)\n return 'control_family';\n }\n catch {\n // Ignore selector errors and continue.\n }\n }\n return null;\n}\nfunction deriveBaseConfidence(candidate, mode) {\n if (typeof candidate.confidenceScore === 'number')\n return candidate.confidenceScore;\n switch (candidate.source) {\n case 'event-local-pageState':\n return mode === 'action' ? 1.0 : 0.55;\n case 'event-local-pageSnapshot':\n return mode === 'action' ? 0.98 : 0.52;\n case 'source-node-snapshot':\n return 0.92;\n case 'interaction-context-exact':\n return mode === 'outcome' ? 0.95 : 0.55;\n case 'interaction-context-stable-by-url':\n return mode === 'outcome' ? 0.9 : 0.45;\n case 'interaction-context-any-by-url':\n return mode === 'outcome' ? 0.85 : 0.4;\n case 'outcome-event-snapshot':\n return 0.82;\n case 'destination-node-snapshot':\n return 0.78;\n case 'url-event-fallback':\n return 0.25;\n default:\n return 0.1;\n }\n}\nfunction createTraceEntry(candidate, overrides = {}) {\n return {\n source: candidate.source,\n temporalClass: candidate.temporalClass,\n selected: false,\n eventId: candidate.eventId ?? candidate.handle?.eventId,\n sourceNodeId: candidate.sourceNodeId ?? candidate.handle?.sourceNodeId,\n timestamp: candidate.timestamp ?? candidate.handle?.timestamp,\n confidenceScore: candidate.confidenceScore ?? candidate.handle?.confidenceScore,\n ...overrides,\n };\n}\nfunction createUnavailableResult(evaluatedCandidates) {\n return {\n snapshot: null,\n provenance: {\n source: 'unavailable',\n temporalClass: 'unknown',\n reason: exports.SNAPSHOT_SELECTION_REASONS.SELECTED_UNAVAILABLE_NO_SNAPSHOT_FOUND,\n confidenceScore: 0,\n },\n evaluatedCandidates,\n };\n}\nfunction buildActionCandidates(step, inventory) {\n const candidates = [];\n if (!step.eventId) {\n console.log('event_local_unavailable_missing_eventId', {\n step: step.step,\n traceId: step.traceId ?? null,\n sourceNodeId: step.sourceNodeId ?? null,\n });\n candidates.push({\n source: 'event-local-pageState',\n temporalClass: 'action_local',\n reasonIfSelected: exports.SNAPSHOT_SELECTION_REASONS.SELECTED_EVENT_LOCAL_PAGE_STATE_BY_EVENT_ID,\n skipReasonIfMissing: exports.SNAPSHOT_SKIP_REASONS.EVENT_LOCAL_UNAVAILABLE_MISSING_EVENT_ID,\n confidenceScore: 0,\n });\n candidates.push({\n source: 'event-local-pageSnapshot',\n temporalClass: 'action_local',\n reasonIfSelected: exports.SNAPSHOT_SELECTION_REASONS.SELECTED_EVENT_LOCAL_PAGE_SNAPSHOT_BY_EVENT_ID,\n skipReasonIfMissing: exports.SNAPSHOT_SKIP_REASONS.EVENT_LOCAL_UNAVAILABLE_MISSING_EVENT_ID,\n confidenceScore: 0,\n });\n }\n else {\n const handles = inventory.eventLocalByEventId.get(step.eventId);\n candidates.push({\n source: 'event-local-pageState',\n temporalClass: 'action_local',\n reasonIfSelected: exports.SNAPSHOT_SELECTION_REASONS.SELECTED_EVENT_LOCAL_PAGE_STATE_BY_EVENT_ID,\n skipReasonIfMissing: exports.SNAPSHOT_SKIP_REASONS.EVENT_LOCAL_PAGE_STATE_MISSING,\n handle: handles?.pageState,\n eventId: step.eventId,\n });\n candidates.push({\n source: 'event-local-pageSnapshot',\n temporalClass: 'action_local',\n reasonIfSelected: exports.SNAPSHOT_SELECTION_REASONS.SELECTED_EVENT_LOCAL_PAGE_SNAPSHOT_BY_EVENT_ID,\n skipReasonIfMissing: exports.SNAPSHOT_SKIP_REASONS.EVENT_LOCAL_PAGE_SNAPSHOT_MISSING,\n handle: handles?.pageSnapshot,\n eventId: step.eventId,\n });\n }\n candidates.push({\n source: 'source-node-snapshot',\n temporalClass: 'pre_action',\n reasonIfSelected: exports.SNAPSHOT_SELECTION_REASONS.SELECTED_SOURCE_NODE_SNAPSHOT_AFTER_EVENT_LOCAL_MISSING,\n skipReasonIfMissing: exports.SNAPSHOT_SKIP_REASONS.SOURCE_NODE_SNAPSHOT_MISSING,\n handle: step.sourceNodeId ? inventory.sourceNodeById.get(step.sourceNodeId) : undefined,\n sourceNodeId: step.sourceNodeId,\n });\n if (!step.normalizedUrl) {\n candidates.push({\n source: 'interaction-context-exact',\n temporalClass: 'post_action',\n reasonIfSelected: exports.SNAPSHOT_SELECTION_REASONS.SELECTED_IC_EXACT_FOR_ACTION_FALLBACK,\n skipReasonIfMissing: exports.SNAPSHOT_SKIP_REASONS.NORMALIZED_URL_MISSING,\n });\n }\n else if (!step.controlSignature) {\n candidates.push({\n source: 'interaction-context-exact',\n temporalClass: 'post_action',\n reasonIfSelected: exports.SNAPSHOT_SELECTION_REASONS.SELECTED_IC_EXACT_FOR_ACTION_FALLBACK,\n skipReasonIfMissing: exports.SNAPSHOT_SKIP_REASONS.EXACT_IC_SKIPPED_MISSING_CONTROL_SIGNATURE,\n });\n }\n else {\n const exactKey = buildIcKey(step.normalizedUrl, step.controlSignature);\n candidates.push({\n source: 'interaction-context-exact',\n temporalClass: 'post_action',\n reasonIfSelected: exports.SNAPSHOT_SELECTION_REASONS.SELECTED_IC_EXACT_FOR_ACTION_FALLBACK,\n skipReasonIfMissing: exports.SNAPSHOT_SKIP_REASONS.INTERACTION_CONTEXT_EXACT_MISSING,\n handle: inventory.interactionContextExactAny.get(exactKey),\n });\n }\n candidates.push({\n source: 'interaction-context-stable-by-url',\n temporalClass: 'post_action',\n reasonIfSelected: exports.SNAPSHOT_SELECTION_REASONS.SELECTED_IC_STABLE_BY_URL_FOR_ACTION_FALLBACK,\n skipReasonIfMissing: step.normalizedUrl\n ? exports.SNAPSHOT_SKIP_REASONS.INTERACTION_CONTEXT_STABLE_BY_URL_MISSING\n : exports.SNAPSHOT_SKIP_REASONS.NORMALIZED_URL_MISSING,\n handle: step.normalizedUrl ? inventory.interactionContextStableByUrl.get(step.normalizedUrl) : undefined,\n });\n candidates.push({\n source: 'url-event-fallback',\n temporalClass: 'unknown',\n reasonIfSelected: exports.SNAPSHOT_SELECTION_REASONS.SELECTED_URL_EVENT_FALLBACK_LAST_RESORT,\n skipReasonIfMissing: step.normalizedUrl\n ? exports.SNAPSHOT_SKIP_REASONS.URL_EVENT_FALLBACK_MISSING\n : exports.SNAPSHOT_SKIP_REASONS.NORMALIZED_URL_MISSING,\n handle: step.normalizedUrl ? inventory.urlEventFallbackByNormalizedUrl.get(step.normalizedUrl) : undefined,\n });\n return candidates;\n}\nfunction buildOutcomeCandidates(step, inventory) {\n const candidates = [];\n if (step.normalizedUrl && step.controlSignature) {\n const exactKey = buildIcKey(step.normalizedUrl, step.controlSignature);\n candidates.push({\n source: 'interaction-context-exact',\n temporalClass: 'outcome_state',\n reasonIfSelected: exports.SNAPSHOT_SELECTION_REASONS.SELECTED_IC_EXACT_STABLE_FOR_OUTCOME_STATE,\n skipReasonIfMissing: exports.SNAPSHOT_SKIP_REASONS.INTERACTION_CONTEXT_EXACT_MISSING,\n handle: inventory.interactionContextExactStable.get(exactKey),\n });\n candidates.push({\n source: 'interaction-context-exact',\n temporalClass: 'outcome_state',\n reasonIfSelected: exports.SNAPSHOT_SELECTION_REASONS.SELECTED_IC_EXACT_FOR_OUTCOME_STATE,\n skipReasonIfMissing: exports.SNAPSHOT_SKIP_REASONS.INTERACTION_CONTEXT_EXACT_MISSING,\n handle: inventory.interactionContextExactAny.get(exactKey),\n });\n }\n else {\n candidates.push({\n source: 'interaction-context-exact',\n temporalClass: 'outcome_state',\n reasonIfSelected: exports.SNAPSHOT_SELECTION_REASONS.SELECTED_IC_EXACT_STABLE_FOR_OUTCOME_STATE,\n skipReasonIfMissing: !step.normalizedUrl\n ? exports.SNAPSHOT_SKIP_REASONS.NORMALIZED_URL_MISSING\n : exports.SNAPSHOT_SKIP_REASONS.EXACT_IC_SKIPPED_MISSING_CONTROL_SIGNATURE,\n });\n candidates.push({\n source: 'interaction-context-exact',\n temporalClass: 'outcome_state',\n reasonIfSelected: exports.SNAPSHOT_SELECTION_REASONS.SELECTED_IC_EXACT_FOR_OUTCOME_STATE,\n skipReasonIfMissing: !step.normalizedUrl\n ? exports.SNAPSHOT_SKIP_REASONS.NORMALIZED_URL_MISSING\n : exports.SNAPSHOT_SKIP_REASONS.EXACT_IC_SKIPPED_MISSING_CONTROL_SIGNATURE,\n });\n }\n candidates.push({\n source: 'outcome-event-snapshot',\n temporalClass: 'outcome_state',\n reasonIfSelected: exports.SNAPSHOT_SELECTION_REASONS.SELECTED_OUTCOME_EVENT_SNAPSHOT,\n skipReasonIfMissing: step.traceId\n ? exports.SNAPSHOT_SKIP_REASONS.OUTCOME_EVENT_SNAPSHOT_MISSING\n : exports.SNAPSHOT_SKIP_REASONS.EVENT_LOCAL_UNAVAILABLE_MISSING_EVENT_ID,\n handle: step.traceId ? inventory.outcomeEventByTraceId.get(step.traceId) : undefined,\n eventId: step.eventId,\n });\n candidates.push({\n source: 'destination-node-snapshot',\n temporalClass: 'outcome_state',\n reasonIfSelected: exports.SNAPSHOT_SELECTION_REASONS.SELECTED_DESTINATION_NODE_SNAPSHOT_AFTER_OUTCOME_MISSING,\n skipReasonIfMissing: exports.SNAPSHOT_SKIP_REASONS.DESTINATION_NODE_SNAPSHOT_MISSING,\n handle: step.destinationNodeId ? inventory.destinationNodeById.get(step.destinationNodeId) : undefined,\n sourceNodeId: step.destinationNodeId,\n });\n return candidates;\n}\nfunction evaluateTargetPresence(step, candidate, snapshot, mode) {\n const destructive = isDestructiveAction(step);\n const cheapPresence = trySelectorPresence(step, snapshot);\n if (cheapPresence === true) {\n return { targetPresent: true, evidenceReason: 'selector_match' };\n }\n const runExpensive = shouldRunExpensivePresenceValidation(step, candidate, mode);\n const evidenceReason = runExpensive ? findTargetEvidence(step, snapshot) : null;\n const expensivePresence = !!evidenceReason;\n const targetPresent = cheapPresence === false ? expensivePresence : cheapPresence ?? expensivePresence;\n const probableClosedShadow = step.nestedContext?.degradedReason === 'probable_closed_shadow_host';\n if (!targetPresent && probableClosedShadow) {\n return {\n targetPresent: false,\n skipReason: exports.SNAPSHOT_SKIP_REASONS.CLOSED_SHADOW_DOM_UNOBSERVABLE,\n shadowDegraded: true,\n confidenceScore: destructive ? 0 : 0.2,\n evidenceReason: null,\n };\n }\n if (!targetPresent && step.nestedContext?.isShadowDom) {\n return {\n targetPresent: false,\n skipReason: exports.SNAPSHOT_SKIP_REASONS.SHADOW_DOM_NOT_SERIALIZED,\n shadowDegraded: true,\n confidenceScore: destructive ? 0 : 0.25,\n evidenceReason: null,\n };\n }\n if (!targetPresent) {\n return {\n targetPresent: false,\n skipReason: exports.SNAPSHOT_SKIP_REASONS.TARGET_MISSING_IN_SNAPSHOT,\n confidenceScore: destructive ? 0 : 0.35,\n evidenceReason: null,\n };\n }\n return { targetPresent: true, evidenceReason: evidenceReason ?? 'selector_match' };\n}\nfunction selectFromCandidates(step, candidates, inventory, mode) {\n const evaluatedCandidates = [];\n let selectedSnapshot = null;\n let selectedCandidate = null;\n let selectedConfidence = 0;\n let selectedLabelEvidence = {\n active: false,\n evidence: false,\n score: 0,\n reason: null,\n blockedReason: null,\n };\n const weakLabelFallback = mode === 'action' && isWeakLabelContextFallbackCandidate(step);\n let targetMissingFallback = null;\n for (const candidate of candidates) {\n if (selectedCandidate && !weakLabelFallback) {\n evaluatedCandidates.push(createTraceEntry(candidate, {\n skipReason: exports.SNAPSHOT_SKIP_REASONS.HIGHER_PRIORITY_CANDIDATE_ALREADY_SELECTED,\n confidenceScore: deriveBaseConfidence(candidate, mode),\n }));\n continue;\n }\n if (!candidate.handle) {\n evaluatedCandidates.push(createTraceEntry(candidate, {\n skipReason: candidate.skipReasonIfMissing,\n confidenceScore: deriveBaseConfidence(candidate, mode),\n }));\n continue;\n }\n const snapshot = candidate.handle.load();\n if (!snapshot) {\n evaluatedCandidates.push(createTraceEntry(candidate, {\n skipReason: exports.SNAPSHOT_SKIP_REASONS.SNAPSHOT_PARSE_FAILED,\n confidenceScore: deriveBaseConfidence(candidate, mode),\n }));\n continue;\n }\n let confidenceScore = deriveBaseConfidence(candidate, mode);\n const icStateEvaluation = evaluateInteractionContextState(step, candidate, inventory, mode);\n if (icStateEvaluation.confidenceScore !== undefined) {\n confidenceScore = Math.min(confidenceScore, icStateEvaluation.confidenceScore);\n }\n if (icStateEvaluation.skipReason) {\n evaluatedCandidates.push(createTraceEntry(candidate, {\n skipReason: icStateEvaluation.skipReason,\n confidenceScore,\n }));\n continue;\n }\n const icTabUnknown = isInteractionContextSource(candidate.source) &&\n !!step.tabId &&\n !candidate.handle.tabId;\n if (mode === 'outcome') {\n evaluatedCandidates.push(createTraceEntry(candidate, {\n selected: true,\n reason: candidate.reasonIfSelected,\n confidenceScore,\n skipReason: icStateEvaluation.annotationReason\n ?? (icTabUnknown ? exports.SNAPSHOT_SKIP_REASONS.IC_TAB_UNKNOWN : undefined),\n }));\n selectedSnapshot = snapshot;\n selectedCandidate = candidate;\n selectedConfidence = confidenceScore;\n continue;\n }\n const targetEvaluation = evaluateTargetPresence(step, candidate, snapshot, mode);\n const destructive = isDestructiveAction(step);\n const labelEvidence = weakLabelFallback\n ? findLabelStructureEvidence(step, snapshot)\n : {\n active: false,\n evidence: false,\n score: 0,\n reason: null,\n blockedReason: null,\n };\n if (targetEvaluation.confidenceScore !== undefined) {\n confidenceScore = Math.min(confidenceScore, targetEvaluation.confidenceScore);\n }\n if (targetEvaluation.skipReason && destructive) {\n evaluatedCandidates.push(createTraceEntry(candidate, {\n skipReason: targetEvaluation.skipReason,\n confidenceScore,\n targetPresent: targetEvaluation.targetPresent,\n shadowDegraded: targetEvaluation.shadowDegraded,\n labelStructureEvidence: labelEvidence.evidence,\n labelStructureEvidenceReason: labelEvidenceReason(labelEvidence),\n }));\n continue;\n }\n if (targetEvaluation.skipReason && !destructive) {\n const traceIndex = evaluatedCandidates.push(createTraceEntry(candidate, {\n selected: false,\n confidenceScore,\n targetPresent: targetEvaluation.targetPresent,\n snapshotTargetEvidenceReason: targetEvaluation.evidenceReason ?? targetEvaluation.skipReason ?? null,\n shadowDegraded: targetEvaluation.shadowDegraded,\n skipReason: targetEvaluation.skipReason,\n labelStructureEvidence: labelEvidence.evidence,\n labelStructureEvidenceReason: labelEvidenceReason(labelEvidence),\n })) - 1;\n if (!targetMissingFallback) {\n targetMissingFallback = {\n snapshot,\n candidate,\n confidenceScore,\n evidenceReason: targetEvaluation.evidenceReason ?? targetEvaluation.skipReason ?? null,\n labelEvidence,\n traceIndex,\n };\n }\n continue;\n }\n const traceEntry = createTraceEntry(candidate, {\n selected: true,\n reason: candidate.reasonIfSelected,\n confidenceScore,\n targetPresent: true,\n snapshotTargetEvidenceReason: targetEvaluation.evidenceReason ?? 'selector_match',\n skipReason: icStateEvaluation.annotationReason\n ?? (icTabUnknown ? exports.SNAPSHOT_SKIP_REASONS.IC_TAB_UNKNOWN : undefined),\n labelStructureEvidence: labelEvidence.evidence,\n labelStructureEvidenceReason: labelEvidenceReason(labelEvidence),\n });\n if (!weakLabelFallback) {\n evaluatedCandidates.push(traceEntry);\n selectedSnapshot = snapshot;\n selectedCandidate = candidate;\n selectedConfidence = confidenceScore;\n selectedLabelEvidence = labelEvidence;\n continue;\n }\n const candidateIndex = evaluatedCandidates.push(traceEntry) - 1;\n const shouldReplace = !selectedCandidate\n || (labelEvidence.evidence\n && !selectedLabelEvidence.evidence)\n || (labelEvidence.evidence\n && selectedLabelEvidence.evidence\n && (labelEvidence.score > selectedLabelEvidence.score\n || (labelEvidence.score === selectedLabelEvidence.score\n && confidenceScore > selectedConfidence)));\n if (shouldReplace) {\n if (selectedCandidate) {\n const previousIndex = evaluatedCandidates.findIndex(entry => entry.selected\n && entry.source === selectedCandidate?.source\n && entry.temporalClass === selectedCandidate?.temporalClass);\n if (previousIndex >= 0) {\n evaluatedCandidates[previousIndex] = {\n ...evaluatedCandidates[previousIndex],\n selected: false,\n reason: undefined,\n skipReason: exports.SNAPSHOT_SKIP_REASONS.HIGHER_PRIORITY_CANDIDATE_ALREADY_SELECTED,\n };\n }\n }\n evaluatedCandidates[candidateIndex] = {\n ...evaluatedCandidates[candidateIndex],\n selected: true,\n reason: candidate.reasonIfSelected,\n };\n selectedSnapshot = snapshot;\n selectedCandidate = candidate;\n selectedConfidence = confidenceScore;\n selectedLabelEvidence = labelEvidence;\n }\n else {\n evaluatedCandidates[candidateIndex] = {\n ...evaluatedCandidates[candidateIndex],\n selected: false,\n reason: undefined,\n skipReason: exports.SNAPSHOT_SKIP_REASONS.HIGHER_PRIORITY_CANDIDATE_ALREADY_SELECTED,\n };\n }\n }\n if (!selectedCandidate && targetMissingFallback) {\n selectedSnapshot = targetMissingFallback.snapshot;\n selectedCandidate = targetMissingFallback.candidate;\n selectedConfidence = targetMissingFallback.confidenceScore;\n selectedLabelEvidence = targetMissingFallback.labelEvidence;\n evaluatedCandidates[targetMissingFallback.traceIndex] = {\n ...evaluatedCandidates[targetMissingFallback.traceIndex],\n selected: true,\n reason: targetMissingFallback.candidate.reasonIfSelected,\n };\n }\n if (!selectedCandidate) {\n return createUnavailableResult(evaluatedCandidates);\n }\n const provenance = {\n source: selectedCandidate.source,\n temporalClass: selectedCandidate.temporalClass,\n reason: selectedCandidate.reasonIfSelected,\n eventId: selectedCandidate.eventId ?? selectedCandidate.handle?.eventId,\n sourceNodeId: selectedCandidate.sourceNodeId ?? selectedCandidate.handle?.sourceNodeId,\n timestamp: selectedCandidate.timestamp ?? selectedCandidate.handle?.timestamp,\n confidenceScore: selectedConfidence,\n snapshotTargetEvidence: evaluatedCandidates.find(entry => entry.selected &&\n entry.source === selectedCandidate?.source &&\n entry.temporalClass === selectedCandidate?.temporalClass)?.targetPresent,\n snapshotTargetEvidenceReason: evaluatedCandidates.find(entry => entry.selected &&\n entry.source === selectedCandidate?.source &&\n entry.temporalClass === selectedCandidate?.temporalClass)?.snapshotTargetEvidenceReason ?? null,\n labelStructureEvidence: weakLabelFallback ? selectedLabelEvidence.evidence : undefined,\n labelStructureEvidenceReason: weakLabelFallback\n ? labelEvidenceReason(selectedLabelEvidence)\n : undefined,\n labelContextSnapshotSource: weakLabelFallback && selectedLabelEvidence.evidence\n ? selectedCandidate.source\n : null,\n labelContextBlockedReason: weakLabelFallback && !selectedLabelEvidence.evidence\n ? selectedLabelEvidence.blockedReason\n : null,\n };\n return {\n snapshot: selectedSnapshot,\n provenance,\n evaluatedCandidates,\n };\n}\nfunction selectSnapshotForAction(step, inventory) {\n return selectFromCandidates(step, buildActionCandidates(step, inventory), inventory, 'action');\n}\nfunction selectSnapshotForOutcome(step, inventory) {\n return selectFromCandidates(step, buildOutcomeCandidates(step, inventory), inventory, 'outcome');\n}\nfunction selectSnapshotForStep(step, inventory, mode = 'action') {\n if (mode === 'outcome') {\n return selectSnapshotForOutcome(step, inventory);\n }\n return selectSnapshotForAction(step, inventory);\n}\n", "\"use strict\";\n/**\n * packages/codegen/src/flow-review.utils.ts\n *\n * Pure utility functions for the FlowReview presentation layer.\n * Zero side effects. Zero DB access. Only imports type definitions.\n * Every function is independently testable.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.extractPathname = extractPathname;\nexports.normalizeUrlForGrouping = normalizeUrlForGrouping;\nexports.getPageName = getPageName;\nexports.humanizeIntent = humanizeIntent;\nexports.normalizeActionVerb = normalizeActionVerb;\nexports.getSelectorQuality = getSelectorQuality;\nexports.getConfidenceLabel = getConfidenceLabel;\nexports.maskDisplayValue = maskDisplayValue;\nexports.deriveFlowTitle = deriveFlowTitle;\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// URL HELPERS\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/**\n * Extracts the pathname from a URL string.\n * Falls back to the raw input on parse failure.\n */\nfunction extractPathname(url) {\n if (!url)\n return '/';\n try {\n return new URL(url).pathname;\n }\n catch {\n return url;\n }\n}\n/**\n * Normalizes a URL for page-grouping purposes.\n * Strips trailing slash (except root), query params, and hash.\n * \"/dashboard/\" and \"/dashboard?tab=1\" both normalize to \"/dashboard\".\n */\nfunction normalizeUrlForGrouping(url) {\n if (!url)\n return '';\n try {\n const parsed = new URL(url);\n const pathname = parsed.pathname.replace(/\\/$/, '') || '/';\n return parsed.origin + pathname;\n }\n catch {\n // Relative URL or unparseable \u2014 strip trailing slash at least\n return url.replace(/\\?.*$/, '').replace(/#.*$/, '').replace(/\\/$/, '') || url;\n }\n}\n/**\n * Derives a human-readable page name from a URL.\n *\n * Rules (applied in order):\n * 1. Empty URL \u2192 \"Page N\"\n * 2. Root path \"/\" \u2192 \"<DomainName> Root\" (e.g. \"Orangehrmlive Root\")\n * 3. Non-root path \u2192 title-case last 1-2 stable segments\n * A \"noisy\" segment is: purely numeric, UUID-shaped, or \u22642 chars.\n * If all segments are noisy \u2192 \"Page N\"\n *\n * @param url Raw URL string from the step\n * @param visitIndex 1-based sequential visit number (used as fallback label)\n */\nfunction getPageName(url, visitIndex) {\n if (!url)\n return `Page ${visitIndex}`;\n let pathname = '';\n let hostname = '';\n try {\n const parsed = new URL(url);\n pathname = parsed.pathname;\n hostname = parsed.hostname;\n }\n catch {\n // Treat the raw string as a pathname\n pathname = url;\n }\n // Root path \u2014 derive from hostname\n if (pathname === '/' || pathname === '') {\n if (hostname) {\n const domain = hostname.replace(/^www\\./, '').split('.')[0];\n return titleCase(domain) + ' Root';\n }\n return `Page ${visitIndex}`;\n }\n // Extract stable path segments\n const segments = pathname.split('/').filter(Boolean);\n const stable = segments.filter(s => !isNoisySegment(s));\n if (stable.length === 0)\n return `Page ${visitIndex}`;\n // Use last two stable segments for specificity\n const label = stable\n .slice(-2)\n .map(s => s.replace(/[-_]/g, ' '))\n .map(titleCase)\n .join(' ');\n return label || `Page ${visitIndex}`;\n}\n/**\n * Returns true for path segments that represent IDs, not semantic page names.\n * Examples: \"123\", \"a3f2b1c4-...\", \"ph\" (2 chars)\n */\nfunction isNoisySegment(segment) {\n if (segment.length <= 2)\n return true;\n if (/^\\d+$/.test(segment))\n return true;\n if (/^[0-9a-f]{8}-[0-9a-f]{4}-/.test(segment))\n return true;\n return false;\n}\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// INTENT HUMANIZATION\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/**\n * Transforms a raw CodegenStep intent into a display-ready string.\n * Always returns a non-null string (best-effort).\n *\n * Input pattern from CodegenService:\n * \"{action}_{sanitized_selector_chars}\"\n * e.g. \"click_data_testid_login_btn_\"\n * \"input_input_name_username_\"\n * \"click_html_body_div_3_form_button\"\n *\n * Strategy:\n * 1. Strip leading action verb prefix (\"click_\", \"input_\", etc.)\n * 2. Remove noise tokens generated by selector sanitization\n * 3. Title-case and join remaining tokens\n * 4. If nothing meaningful remains, fall back to \"<Verb> Element\"\n * 5. Cap at 40 characters\n */\nfunction humanizeIntent(intent, action) {\n if (!intent)\n return normalizeActionVerb(action) + ' Element';\n // Strip the leading action verb prefix\n const prefixesToStrip = [\n 'custom_select_', 'navigate_to_', 'custom-select_',\n 'interact_', 'generic_', 'scroll_', 'hover_',\n 'submit_', 'select_', 'click_', 'input_', 'type_',\n ];\n let remainder = intent;\n for (const prefix of prefixesToStrip) {\n if (remainder.startsWith(prefix)) {\n remainder = remainder.slice(prefix.length);\n break;\n }\n }\n // If nothing was stripped try splitting on the first underscore\n if (remainder === intent) {\n const firstUs = intent.indexOf('_');\n if (firstUs > 0)\n remainder = intent.slice(firstUs + 1);\n }\n // Tokens generated by selector sanitization that add no semantic value\n const NOISE = new Set([\n 'data', 'testid', 'test', 'id', 'name', 'class',\n 'html', 'body', 'div', 'form', 'span', 'ul', 'li',\n 'input', 'button', 'a', 'btn', 'el',\n 'wrapper', 'container', 'component',\n ]);\n const parts = remainder\n .split('_')\n .map(t => t.trim())\n .filter(t => t.length > 0 && !NOISE.has(t.toLowerCase()));\n if (parts.length === 0) {\n return normalizeActionVerb(action) + ' Element';\n }\n const humanized = parts.map(titleCase).join(' ');\n return humanized.length > 40 ? humanized.slice(0, 37) + '\u2026' : humanized;\n}\n/**\n * Maps an ActionType to a user-facing verb.\n * e.g. 'input' \u2192 'Type', 'custom-select' \u2192 'Select'\n */\nfunction normalizeActionVerb(action) {\n const MAP = {\n click: 'Click',\n input: 'Type',\n submit: 'Submit',\n 'custom-control-open': 'Open',\n 'custom-select': 'Select',\n 'custom-menu-select': 'Select',\n scroll: 'Scroll',\n hover: 'Hover',\n navigate: 'Navigate',\n };\n return MAP[action] ?? titleCase(action);\n}\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// SELECTOR QUALITY\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/**\n * Maps a SelectorPriority string to a SelectorQuality reliability tier.\n * 'unknown' is already returned by normalizeSelectorPriority() for anything\n * unrecognized (including the multi-attribute P8.5 \"multi-attribute\" priority\n * that doesn't exist in the SelectorPriority enum).\n */\nfunction getSelectorQuality(priority) {\n switch (priority) {\n case 'data-testid': return 'best';\n case 'id':\n case 'attribute':\n case 'text': return 'good';\n case 'class':\n case 'path':\n case 'xpath':\n case 'other':\n case 'chained': return 'fragile';\n default: return 'unknown';\n }\n}\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// CONFIDENCE LABEL\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/**\n * Returns a display-ready confidence label.\n *\n * The ambiguous case: sampleSize === 1 && confidence === 1.0\n * This can mean either \"seen once, Laplace gives 1.0\" OR \"no edge found,\n * both defaulted to 1.0\". We cannot distinguish these from CodegenStep\n * data alone, so we surface it honestly as \"unverified\".\n */\nfunction getConfidenceLabel(confidence, sampleSize) {\n if (sampleSize === 1 && Math.abs(confidence - 1.0) < 0.001) {\n return 'unverified';\n }\n const pct = Math.round(confidence * 100);\n if (confidence >= 0.9)\n return `${pct}%`;\n if (confidence >= 0.7)\n return `${pct}% (moderate)`;\n return `${pct}% (low)`;\n}\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// VALUE MASKING\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/**\n * Produces a display-safe version of a step value.\n * - '<LLM_GENERATE_MOCK_DATA>' \u2192 '{auto-generated}'\n * - Password-intent fields \u2192 '\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022'\n * - Email addresses \u2192 'j***@example.com'\n * - All other values \u2192 returned as-is\n */\nfunction maskDisplayValue(value, intent) {\n if (value === '<LLM_GENERATE_MOCK_DATA>')\n return '{auto-generated}';\n const intentLower = (intent ?? '').toLowerCase();\n if (intentLower.includes('password') || intentLower.includes('secret')) {\n return '\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022';\n }\n if (value.includes('@') && value.includes('.')) {\n const atIdx = value.indexOf('@');\n const local = value.slice(0, atIdx);\n const domain = value.slice(atIdx + 1);\n const maskedLocal = local.charAt(0) + '***';\n return `${maskedLocal}@${domain}`;\n }\n return value;\n}\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// FLOW TITLE\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/**\n * Derives a human-readable flow title combining the site domain and an\n * inferred flow type.\n *\n * Examples:\n * URL: \"https://app.orangehrmlive.com/auth/login\"\n * Intents containing \"login\", \"password\" \u2192 \"Orangehrmlive \u2014 Login Flow\"\n *\n * URL: \"https://shop.example.com/checkout\"\n * Intents containing \"checkout\", \"payment\" \u2192 \"Example \u2014 Checkout Flow\"\n *\n * Falls back gracefully:\n * - No parseable URL \u2192 just flowType\n * - No recognizable intent type \u2192 recorded page title stripped of \" - SiteName\"\n * - No title either \u2192 \"Recorded Flow\"\n */\nfunction deriveFlowTitle(url, recordedTitle, steps) {\n let domain = '';\n try {\n const host = new URL(url).hostname.replace(/^www\\./, '');\n domain = titleCase(host.split('.')[0]);\n }\n catch {\n /* ignore \u2014 domain stays '' */\n }\n const allIntents = steps.map(s => s.intent.toLowerCase()).join(' ');\n let flowType;\n if (allIntents.includes('login') || allIntents.includes('signin') || allIntents.includes('password')) {\n flowType = 'Login Flow';\n }\n else if (allIntents.includes('register') || allIntents.includes('signup')) {\n flowType = 'Registration Flow';\n }\n else if (allIntents.includes('checkout') || allIntents.includes('payment')) {\n flowType = 'Checkout Flow';\n }\n else if (allIntents.includes('search')) {\n flowType = 'Search Flow';\n }\n else if (recordedTitle) {\n // Strip the common \" - SiteName\" suffix from page titles\n flowType = recordedTitle.replace(/\\s*[-|\u2013|\u00B7]\\s*.+$/, '').trim() || 'Recorded Flow';\n }\n else {\n flowType = 'Recorded Flow';\n }\n return domain ? `${domain} \u2014 ${flowType}` : flowType;\n}\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// INTERNAL\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction titleCase(str) {\n if (!str)\n return '';\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\n}\n", "\"use strict\";\n/**\n * packages/codegen/src/flow-review.service.ts\n *\n * Pure transformation layer: CodegenSession \u2192 FlowReview.\n *\n * Constraints (enforced by design):\n * - Zero DB access\n * - Zero side effects (no console.log, no file writes)\n * - Single pass over session.steps \u2014 stats, warnings, pages, and enriched\n * steps are all accumulated in one loop. Session-level warnings (which\n * depend on final loop totals) are appended after the loop.\n * - FlowReview does not embed the original CodegenSession.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FlowReviewService = void 0;\nconst flow_review_utils_1 = require(\"./flow-review.utils\");\nclass FlowReviewService {\n /**\n * Transforms a CodegenSession into an enriched FlowReview DTO.\n * All computation happens here; no async, no I/O.\n */\n static build(session) {\n // \u2500\u2500 Accumulators initialized before the loop \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const enrichedSteps = [];\n const pages = [];\n const warnings = [];\n // Page-tracking state (updated as we walk steps in order)\n let currentPageNormalizedUrl = '\\x00'; // sentinel: never matches any real URL\n let currentPage = null;\n let pageVisitIndex = 0;\n // Stats counters \u2014 incremented inside the loop, never re-iterated\n let navigationCount = 0;\n let assertionCount = 0;\n let fragileSteps = 0;\n let lowConfidenceSteps = 0;\n let sensitiveDataSteps = 0;\n // \u2500\u2500 Single pass over all steps \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n for (const rawStep of session.steps) {\n const normalizedUrl = (0, flow_review_utils_1.normalizeUrlForGrouping)(rawStep.pageUrl);\n const isFirstOnPage = currentPage === null || normalizedUrl !== currentPageNormalizedUrl;\n // \u2500\u2500 Open a new page entry when the URL changes \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n if (isFirstOnPage) {\n pageVisitIndex++;\n currentPageNormalizedUrl = normalizedUrl;\n currentPage = {\n visitIndex: pageVisitIndex,\n url: rawStep.pageUrl,\n urlPathname: (0, flow_review_utils_1.extractPathname)(rawStep.pageUrl),\n pageName: (0, flow_review_utils_1.getPageName)(rawStep.pageUrl, pageVisitIndex),\n steps: [],\n hasNavigation: false,\n };\n pages.push(currentPage);\n }\n // \u2500\u2500 Build the enriched step \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const selectorQuality = (0, flow_review_utils_1.getSelectorQuality)(rawStep.selectorPriority);\n const confidenceLabel = (0, flow_review_utils_1.getConfidenceLabel)(rawStep.confidence, rawStep.sampleSize);\n const displayValue = rawStep.value\n ? (0, flow_review_utils_1.maskDisplayValue)(rawStep.value, rawStep.intent)\n : undefined;\n const step = {\n stepNumber: rawStep.step,\n intent: (0, flow_review_utils_1.humanizeIntent)(rawStep.intent, rawStep.action),\n rawIntent: rawStep.intent,\n action: rawStep.action,\n displayAction: (0, flow_review_utils_1.normalizeActionVerb)(rawStep.action),\n selector: rawStep.selector,\n selectorPriority: rawStep.selectorPriority,\n selectorQuality,\n value: rawStep.value,\n displayValue,\n outcomeType: rawStep.outcomeType,\n navigatesTo: rawStep.navigatesTo,\n assertions: rawStep.assertions,\n // userAssertions intentionally excluded \u2014 Phase 2 stub, always empty\n confidence: rawStep.confidence,\n confidenceLabel,\n sampleSize: rawStep.sampleSize,\n pageUrl: rawStep.pageUrl,\n isFirstOnPage,\n };\n // Both arrays hold the same object reference \u2014 no duplication\n enrichedSteps.push(step);\n currentPage.steps.push(step);\n // \u2500\u2500 Stats accumulation \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n if (rawStep.outcomeType === 'navigation') {\n navigationCount++;\n currentPage.hasNavigation = true;\n }\n // Count only AI-derived assertions (userAssertions is always [] today)\n assertionCount += rawStep.assertions.length;\n if (selectorQuality === 'fragile' || selectorQuality === 'unknown') {\n fragileSteps++;\n }\n // \"Genuinely flaky\" requires sampleSize > 1 so we know it's been observed\n // more than once and still shows low probability, not just a defaulted value.\n const isGenuinelyFlaky = rawStep.confidence < 0.8 && rawStep.sampleSize > 1;\n if (isGenuinelyFlaky)\n lowConfidenceSteps++;\n if (rawStep.value === '<LLM_GENERATE_MOCK_DATA>')\n sensitiveDataSteps++;\n // \u2500\u2500 Step-level warnings (generated in the same pass) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n if (selectorQuality === 'fragile') {\n warnings.push({\n type: 'fragile_selector',\n severity: 'warning',\n step: rawStep.step,\n message: `Step ${rawStep.step} uses a ${rawStep.selectorPriority} selector: `\n + `\"${rawStep.selector.slice(0, 60)}\". `\n + `Likely to break on DOM structural changes.`,\n });\n }\n else if (selectorQuality === 'unknown') {\n warnings.push({\n type: 'fragile_selector',\n severity: 'info',\n step: rawStep.step,\n message: `Step ${rawStep.step} has an unrecognized selector priority `\n + `(\"${rawStep.selectorPriority}\"). Reliability unconfirmed.`,\n });\n }\n if (isGenuinelyFlaky) {\n warnings.push({\n type: 'flaky_step',\n severity: 'warning',\n step: rawStep.step,\n message: `Step ${rawStep.step} (\"${step.intent}\") has low confidence `\n + `(${Math.round(rawStep.confidence * 100)}%) across `\n + `${rawStep.sampleSize} observations. `\n + `This transition doesn't always lead to the same page.`,\n });\n }\n // Ambiguous case: confidence === 1.0 with sampleSize === 1 \u2014 could be\n // \"seen exactly once\" OR \"no edge found, both fields defaulted\".\n if (rawStep.sampleSize === 1 && Math.abs(rawStep.confidence - 1.0) < 0.001) {\n warnings.push({\n type: 'low_sample_size',\n severity: 'info',\n step: rawStep.step,\n message: `Step ${rawStep.step} has only one observation or no historical edge. `\n + `Selector reliability unconfirmed.`,\n });\n }\n if (rawStep.value === '<LLM_GENERATE_MOCK_DATA>') {\n warnings.push({\n type: 'sensitive_data',\n severity: 'info',\n step: rawStep.step,\n message: `Step ${rawStep.step} contains a sensitive field. `\n + `The test generator will produce mock data instead of the recorded value.`,\n });\n }\n }\n // \u2500\u2500 End of single pass \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // \u2500\u2500 Session-level warnings (require final loop totals) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // False confidence: flowConfidence === 1.0 but no navigation edges were\n // recorded. This is the CodegenService default when navProbabilities is empty.\n const isFalseConfidence = session.flowConfidence >= 0.99 && navigationCount === 0;\n if (isFalseConfidence) {\n warnings.unshift({\n type: 'false_confidence',\n severity: 'warning',\n message: 'Flow confidence shows 100% but no page navigations were recorded. '\n + 'The interceptor may have missed page loads, or this is a single-page '\n + 'flow with no route changes. Confidence is unverified.',\n });\n }\n else if (session.flowConfidence < 0.7) {\n warnings.unshift({\n type: 'low_flow_confidence',\n severity: 'error',\n message: `Overall flow confidence is ${Math.round(session.flowConfidence * 100)}%. `\n + 'Multiple recordings produced different outcomes. '\n + 'The generated test may be unreliable \u2014 consider re-recording.',\n });\n }\n // \u2500\u2500 Assemble final stats \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const stats = {\n totalSteps: enrichedSteps.length,\n totalPages: pages.length,\n navigationCount,\n assertionCount,\n fragileSteps,\n lowConfidenceSteps,\n sensitiveDataSteps,\n };\n return {\n sessionId: session.sessionId,\n flowTitle: (0, flow_review_utils_1.deriveFlowTitle)(session.url, session.title, session.steps),\n recordedAt: session.recordedAt,\n startUrl: session.url,\n stats,\n flowConfidence: session.flowConfidence,\n pages,\n steps: enrichedSteps,\n warnings,\n };\n }\n}\nexports.FlowReviewService = FlowReviewService;\n", "\"use strict\";\n/**\n * packages/codegen/src/flow-review.formatter.ts\n *\n * Console/ASCII formatter for FlowReview.\n *\n * Design decisions:\n * - All methods return `string` \u2014 callers decide what to do with it (console.log,\n * write to file, assert in tests). No `console.log` inside this class.\n * - Uses ASCII-safe symbols throughout so output is readable in CI logs,\n * Windows cmd, and any terminal that doesn't support Unicode emoji.\n * - The class is stateless \u2014 all methods are static.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FlowReviewFormatter = void 0;\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// SYMBOL MAPS (ASCII only \u2014 safe in every terminal and CI log)\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst QUALITY_BADGE = {\n best: '[*]', // data-testid \u2014 best\n good: '[+]', // id / attribute / text \u2014 good\n fragile: '[!]', // class / xpath / path \u2014 fragile\n unknown: '[?]', // unrecognized priority \u2014 unknown\n};\nconst SEVERITY_PREFIX = {\n error: 'ERR',\n warning: 'WRN',\n info: 'INF',\n};\nconst ACTION_GLYPH = {\n click: '->',\n input: '~>',\n submit: '=>',\n 'custom-control-open': 'o>',\n 'custom-select': 'v>',\n 'custom-menu-select': 'v>',\n scroll: '^v',\n hover: '..',\n navigate: '>>',\n};\nconst LINE_WIDTH = 70;\nconst HR = '\u2500'.repeat(LINE_WIDTH);\nconst DHR = '\u2550'.repeat(LINE_WIDTH);\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// FORMATTER\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nclass FlowReviewFormatter {\n /**\n * Returns a full ASCII summary of the FlowReview, suitable for\n * `console.log`, file output, or test snapshots.\n *\n * @example\n * const review = FlowReviewService.build(session);\n * console.log(FlowReviewFormatter.formatForConsole(review));\n */\n static formatForConsole(review) {\n const lines = [];\n lines.push('');\n lines.push(DHR);\n lines.push(` AIR Flow Review`);\n lines.push(` ${review.flowTitle}`);\n lines.push(DHR);\n lines.push(` Session : ${review.sessionId}`);\n lines.push(` Recorded: ${review.recordedAt}`);\n lines.push(` Start : ${review.startUrl}`);\n lines.push('');\n // Stats summary bar\n lines.push(this.formatStatsBar(review));\n lines.push('');\n // Horizontal page flow path\n lines.push(' Flow path:');\n lines.push(this.formatFlowPath(review.pages.map(p => p.pageName)));\n lines.push('');\n // Per-page blocks with step details\n for (const page of review.pages) {\n lines.push(HR);\n lines.push(` ${page.pageName} (${page.urlPathname})`);\n lines.push('');\n for (const step of page.steps) {\n lines.push(...this.formatStep(step));\n lines.push('');\n }\n }\n // Warnings section\n if (review.warnings.length > 0) {\n lines.push(HR);\n lines.push(` Warnings (${review.warnings.length}):`);\n lines.push('');\n for (const w of review.warnings) {\n lines.push(this.formatWarning(w));\n }\n lines.push('');\n }\n // Legend\n lines.push(HR);\n lines.push(' Selector quality: [*] data-testid [+] id/attr/text [!] fragile [?] unknown');\n lines.push(` Confidence label: % = Laplace probability \"unverified\" = no historical edge`);\n lines.push('');\n return lines.join('\\n');\n }\n // \u2500\u2500 Section formatters \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n static formatStatsBar(review) {\n const { stats, flowConfidence } = review;\n const isFalseConf = flowConfidence >= 0.99 && stats.navigationCount === 0;\n const confDisplay = isFalseConf\n ? '? (no nav edges)'\n : `${Math.round(flowConfidence * 100)}%`;\n const parts = [\n `Steps: ${stats.totalSteps}`,\n `Pages: ${stats.totalPages}`,\n `Nav: ${stats.navigationCount}`,\n `Assertions: ${stats.assertionCount}`,\n `Confidence: ${confDisplay}`,\n ];\n if (stats.fragileSteps > 0) {\n parts.push(`Fragile selectors: ${stats.fragileSteps}`);\n }\n if (stats.lowConfidenceSteps > 0) {\n parts.push(`Flaky steps: ${stats.lowConfidenceSteps}`);\n }\n return ' ' + parts.join(' ');\n }\n static formatFlowPath(pageNames) {\n if (pageNames.length === 0)\n return ' (no pages)';\n const INDENT = ' ';\n const ARROW = ' -> ';\n const MAX = LINE_WIDTH - INDENT.length;\n const lines = [];\n let current = '';\n for (let i = 0; i < pageNames.length; i++) {\n const segment = i === 0 ? pageNames[i] : ARROW + pageNames[i];\n if (current.length + segment.length > MAX && current.length > 0) {\n lines.push(INDENT + current);\n // Continuation lines indented extra to align with the arrow\n current = ' ' + pageNames[i];\n }\n else {\n current += segment;\n }\n }\n if (current)\n lines.push(INDENT + current);\n return lines.join('\\n');\n }\n static formatStep(step) {\n const lines = [];\n const badge = QUALITY_BADGE[step.selectorQuality];\n const glyph = ACTION_GLYPH[step.action] ?? ' ';\n const num = String(step.stepNumber).padStart(2, ' ');\n // Primary description line\n let desc = `${step.displayAction} \"${step.intent}\"`;\n if (step.displayValue) {\n desc += ` = \"${step.displayValue}\"`;\n }\n if (step.outcomeType === 'navigation' && step.navigatesTo) {\n desc += ` -> ${this.shortenUrl(step.navigatesTo)}`;\n }\n lines.push(` ${num}. ${glyph} ${desc}`);\n // Secondary line: selector quality + selector + confidence\n const confPad = step.confidenceLabel.padStart(12, ' ');\n const selectorTrunc = step.selector.length > 48\n ? step.selector.slice(0, 45) + '...'\n : step.selector;\n lines.push(` ${badge} ${selectorTrunc} ${confPad}`);\n // Assertion lines (only when present \u2014 navigation steps)\n for (const assertion of step.assertions) {\n const target = assertion.selector ?? assertion.value;\n const truncTarget = target.length > 48 ? target.slice(0, 45) + '...' : target;\n lines.push(` + assert ${assertion.type}: ${truncTarget}`);\n }\n return lines;\n }\n static formatWarning(w) {\n const prefix = SEVERITY_PREFIX[w.severity];\n const stepTag = w.step !== undefined ? ` [step ${w.step}]` : '';\n return ` [${prefix}]${stepTag} ${w.message}`;\n }\n // \u2500\u2500 Utilities \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n static shortenUrl(url) {\n try {\n return new URL(url).pathname;\n }\n catch {\n return url.length > 45 ? url.slice(0, 42) + '...' : url;\n }\n }\n}\nexports.FlowReviewFormatter = FlowReviewFormatter;\n", "\"use strict\";\n/**\n * packages/codegen/src/assertion.stub.ts\n *\n * Stub for Phase 2: user-defined assertion capture in the interceptor.\n *\n * TODAY: returns empty array. The interceptor has no mechanism yet for\n * the user to mark elements as assertion targets during recording.\n *\n * FUTURE (Phase 2): When the interceptor gains right-click \u2192 \"Assert this\"\n * or a keyboard shortcut to mark elements, those assertions will be stored\n * in a dedicated `user_assertions` table in the DB. This stub will be\n * replaced with a real DB query without changing any downstream types or\n * MCP tool signatures \u2014 the CodegenSession.userAssertions field already\n * exists and is part of the semantic timeline contract.\n *\n * The self-healing loop will prioritize user-defined assertions over\n * AI-derived ones, since the user explicitly declared what matters.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getUserDefinedAssertions = getUserDefinedAssertions;\nexports.hasUserAssertionSupport = hasUserAssertionSupport;\n/**\n * Returns user-defined assertions for a session.\n *\n * @param sessionId - The session to look up assertions for\n * @param _db - Database instance (unused until Phase 2)\n * @returns Empty array until Phase 2 ships\n */\nfunction getUserDefinedAssertions(sessionId, _db) {\n // Phase 2 stub \u2014 no user_assertions table exists yet\n void sessionId;\n return [];\n}\n/**\n * Checks whether the user_assertions table exists in the DB.\n * Used by codegen.service.ts to skip the query entirely in Phase 1.\n */\nfunction hasUserAssertionSupport(_db) {\n // Returns false until the Phase 2 migration adds the user_assertions table\n return false;\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.classifyBoundedFieldRenderStatus = classifyBoundedFieldRenderStatus;\nexports.renderBoundedFieldLocator = renderBoundedFieldLocator;\nexports.getBoundedFieldRenderingWarnings = getBoundedFieldRenderingWarnings;\nexports.buildBoundedFieldWarningComments = buildBoundedFieldWarningComments;\nfunction escapeRegexLiteral(value) {\n return value.replace(/[\\\\^$.*+?()[\\]{}|/]/g, '\\\\$&');\n}\nfunction buildExactHasTextRegexLiteral(text) {\n return `/^${escapeRegexLiteral(text)}$/`;\n}\nfunction classifyBoundedFieldRenderStatus(boundedField) {\n if (!boundedField)\n return undefined;\n if (boundedField.renderStatus)\n return boundedField.renderStatus;\n if (boundedField.relation === 'label-for' || boundedField.relation === 'aria-labelledby') {\n return 'clean-direct-selector';\n }\n if (boundedField.cleanParentSelector)\n return 'clean-scoped-locator';\n return 'proven-structural-fallback';\n}\nfunction renderBoundedFieldLocator(boundedField) {\n if (!boundedField)\n return null;\n const renderStatus = classifyBoundedFieldRenderStatus(boundedField);\n const childSelector = boundedField.cleanChildSelector || boundedField.target.selector;\n if (!childSelector)\n return null;\n if (renderStatus === 'clean-direct-selector') {\n return `locator(${JSON.stringify(childSelector)})`;\n }\n if (renderStatus === 'clean-scoped-locator') {\n if (!boundedField.cleanParentSelector)\n return null;\n return `locator(${JSON.stringify(boundedField.cleanParentSelector)}).locator(${JSON.stringify(childSelector)})`;\n }\n if (renderStatus === 'proven-structural-fallback') {\n const containerSelector = boundedField.containerSelector || boundedField.cleanParentSelector;\n if (!containerSelector)\n return null;\n const labelTag = boundedField.labelElementTag || 'label';\n const labelRegex = buildExactHasTextRegexLiteral(boundedField.labelText);\n return `locator(${JSON.stringify(containerSelector)}).filter({ has: this.page.locator(${JSON.stringify(labelTag)}).filter({ hasText: ${labelRegex} }) }).locator(${JSON.stringify(childSelector)})`;\n }\n return null;\n}\nfunction getBoundedFieldRenderingWarnings(boundedField) {\n if (!boundedField)\n return [];\n const warnings = new Set(boundedField.warningCodes ?? []);\n const renderStatus = classifyBoundedFieldRenderStatus(boundedField);\n if (renderStatus === 'proven-structural-fallback')\n warnings.add('bounded-field-structural-fallback');\n if (renderStatus === 'proof-only-no-clean-render')\n warnings.add('bounded-field-proof-only');\n if (renderStatus === 'blocked-unsafe-render')\n warnings.add('bounded-field-blocked-unsafe-render');\n return Array.from(warnings);\n}\nfunction buildBoundedFieldWarningComments(boundedField) {\n if (!boundedField)\n return [];\n if (classifyBoundedFieldRenderStatus(boundedField) !== 'proven-structural-fallback')\n return [];\n return [\n `// AIR WARNING: Structural bounded-field fallback.`,\n `// Reason: ${boundedField.renderReason || `no stable direct selector existed for field \"${boundedField.labelText}\".`}`,\n `// Proof: exact label + one visible target control inside bounded field container.`,\n `// Consider adding data-testid/name/aria-label for a cleaner locator.`,\n ];\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.inferSelectorEngine = inferSelectorEngine;\nexports.buildSelectorSpec = buildSelectorSpec;\nexports.buildScopedSelectorSpec = buildScopedSelectorSpec;\nexports.buildBoundedFieldSelectorSpec = buildBoundedFieldSelectorSpec;\nexports.isSelectorSpecExactProofLevel = isSelectorSpecExactProofLevel;\nexports.isSelectorSpecRenderableAsNative = isSelectorSpecRenderableAsNative;\nexports.isEquivalentRenderingRenderable = isEquivalentRenderingRenderable;\nexports.canRenderSelectorSpecConfidently = canRenderSelectorSpecConfidently;\nexports.getSelectorSpecRenderingWarnings = getSelectorSpecRenderingWarnings;\nexports.pickPreferredEquivalentRendering = pickPreferredEquivalentRendering;\nexports.renderLocatorExpressionFromSelectorSpec = renderLocatorExpressionFromSelectorSpec;\nexports.renderLocatorExpressionFromEquivalentRendering = renderLocatorExpressionFromEquivalentRendering;\nconst render_bounded_field_1 = require(\"./resolver/bounded-field/render-bounded-field\");\nfunction escapeRegexLiteral(value) {\n return value.replace(/[\\\\^$.*+?()[\\]{}|/]/g, '\\\\$&');\n}\nfunction buildExactHasTextRegexLiteral(text) {\n return `/^${escapeRegexLiteral(text)}$/`;\n}\nfunction trimSelector(selector) {\n return typeof selector === 'string' ? selector.trim() : '';\n}\nfunction inferSelectorEngine(selector, selectorPriority) {\n const trimmed = trimSelector(selector);\n if (/^getByTestId\\(/.test(trimmed))\n return 'testid';\n if (/^getByRole\\(/.test(trimmed))\n return 'role';\n if (/^getByLabel\\(/.test(trimmed))\n return 'label';\n if (/^getByPlaceholder\\(/.test(trimmed))\n return 'placeholder';\n if (/^getByText\\(/.test(trimmed))\n return 'text';\n if (/^(?:locator|getBy)[A-Za-z]/.test(trimmed))\n return 'playwright';\n if (trimmed.startsWith('text=') || /:has-text\\((?:\"[^\"]*\"|'[^']*')\\)/i.test(trimmed))\n return 'text';\n if (trimmed.startsWith('//') || trimmed.startsWith('xpath=') || /^id\\(\".*\"\\)$/i.test(trimmed))\n return 'xpath';\n if (selectorPriority === 'xpath')\n return 'xpath';\n if (selectorPriority === 'text')\n return 'text';\n return 'css';\n}\nfunction buildSelectorSpec(params) {\n const selector = trimSelector(params.selector);\n const warningCodes = Array.from(new Set((params.warningCodes ?? []).filter(Boolean)));\n return {\n selector,\n engine: params.engine ?? inferSelectorEngine(selector, params.selectorPriority),\n source: params.source,\n proofLevel: params.proofLevel,\n labelContext: params.labelContext,\n triggerContext: params.triggerContext,\n rank: typeof params.rank === 'number' ? params.rank : undefined,\n confidence: typeof params.confidence === 'number' ? params.confidence : undefined,\n rejectReason: params.rejectReason ?? undefined,\n warningCodes: warningCodes.length > 0 ? warningCodes : undefined,\n };\n}\nfunction buildScopedSelectorSpec(params) {\n const warningCodes = Array.from(new Set((params.warningCodes ?? []).filter(Boolean)));\n return {\n selector: trimSelector(params.selector),\n engine: 'scoped',\n scope: params.scope,\n target: params.target,\n relation: params.relation,\n source: params.source,\n proofLevel: params.proofLevel,\n rank: typeof params.rank === 'number' ? params.rank : undefined,\n confidence: typeof params.confidence === 'number' ? params.confidence : undefined,\n rejectReason: params.rejectReason ?? undefined,\n warningCodes: warningCodes.length > 0 ? warningCodes : undefined,\n };\n}\nfunction buildBoundedFieldSelectorSpec(params) {\n const warningCodes = Array.from(new Set((params.warningCodes ?? []).filter(Boolean)));\n return {\n selector: trimSelector(params.selector),\n engine: 'bounded-field',\n boundedField: params.boundedField,\n source: params.source,\n proofLevel: params.proofLevel,\n rank: typeof params.rank === 'number' ? params.rank : undefined,\n confidence: typeof params.confidence === 'number' ? params.confidence : undefined,\n rejectReason: params.rejectReason ?? undefined,\n warningCodes: warningCodes.length > 0 ? warningCodes : undefined,\n };\n}\nfunction buildStructuralTriggerContextLocator(triggerContext) {\n const labelRegex = buildExactHasTextRegexLiteral(triggerContext.labelText);\n const labelTag = triggerContext.labelElementTag || 'label';\n const childSelector = triggerContext.cleanChildSelector || triggerContext.triggerSelector;\n if (!childSelector)\n return null;\n switch (triggerContext.association) {\n case 'bounded-field':\n if (!triggerContext.containerSelector)\n return null;\n return `locator(${JSON.stringify(triggerContext.containerSelector)}).filter({ has: this.page.locator(${JSON.stringify(labelTag)}).filter({ hasText: ${labelRegex} }) }).locator(${JSON.stringify(childSelector)})`;\n default:\n return null;\n }\n}\nfunction buildStructuralLabelContextLocator(labelContext) {\n const targetTag = labelContext.targetTag || 'input';\n const labelRegex = buildExactHasTextRegexLiteral(labelContext.labelText);\n switch (labelContext.association) {\n case 'wrapped-label':\n return `locator(\"label\").filter({ hasText: ${labelRegex} }).locator(${JSON.stringify(targetTag)})`;\n case 'bounded-field':\n if (!labelContext.containerSelector)\n return null;\n return `locator(${JSON.stringify(labelContext.containerSelector)}).filter({ has: this.page.locator(\"label\").filter({ hasText: ${labelRegex} }) }).locator(${JSON.stringify(targetTag)})`;\n case 'label-for':\n if (labelContext.targetId) {\n return `locator(${JSON.stringify(`[id=\"${labelContext.targetId.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"]`)})`;\n }\n return null;\n case 'aria-labelledby':\n if (labelContext.ariaLabelledBy) {\n return `locator(${JSON.stringify(`${targetTag}[aria-labelledby=\"${labelContext.ariaLabelledBy.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"]`)})`;\n }\n return null;\n default:\n return null;\n }\n}\nfunction classifyLabelContextRenderStatus(labelContext) {\n if (labelContext.renderStatus)\n return labelContext.renderStatus;\n switch (labelContext.association) {\n case 'label-for':\n case 'aria-labelledby':\n return 'clean-direct-selector';\n case 'bounded-field':\n return labelContext.cleanParentSelector ? 'clean-scoped-locator' : 'proven-structural-fallback';\n case 'wrapped-label':\n return 'proven-structural-fallback';\n default:\n return 'proof-only-no-clean-render';\n }\n}\nfunction renderLabelContextLocator(labelContext) {\n const targetTag = labelContext.targetTag || 'input';\n const renderStatus = classifyLabelContextRenderStatus(labelContext);\n switch (renderStatus) {\n case 'clean-direct-selector':\n return buildStructuralLabelContextLocator(labelContext);\n case 'clean-scoped-locator':\n if (!labelContext.cleanParentSelector)\n return null;\n return `locator(${JSON.stringify(labelContext.cleanParentSelector)}).locator(${JSON.stringify(labelContext.cleanChildSelector || targetTag)})`;\n case 'proven-structural-fallback':\n return labelContext.structuralFallbackLocator || buildStructuralLabelContextLocator(labelContext);\n case 'proof-only-no-clean-render':\n case 'blocked-unsafe-render':\n default:\n return null;\n }\n}\nfunction renderTriggerContextLocator(triggerContext) {\n const renderStatus = triggerContext.renderStatus ?? 'proof-only-no-clean-render';\n switch (renderStatus) {\n case 'clean-direct-selector':\n case 'proven-structural-fallback':\n return triggerContext.structuralFallbackLocator || buildStructuralTriggerContextLocator(triggerContext);\n case 'clean-scoped-locator':\n if (!triggerContext.cleanParentSelector)\n return null;\n return `locator(${JSON.stringify(triggerContext.cleanParentSelector)}).locator(${JSON.stringify(triggerContext.cleanChildSelector || triggerContext.triggerSelector)})`;\n case 'proof-only-no-clean-render':\n case 'blocked-unsafe-render':\n default:\n return null;\n }\n}\nfunction renderScopedTargetSegment(spec) {\n if (!spec || spec.engine === 'scoped')\n return null;\n if (spec.engine === 'label-context' || spec.engine === 'trigger-context' || spec.engine === 'bounded-field')\n return null;\n const selector = trimSelector(spec.selector);\n return selector ? JSON.stringify(selector) : null;\n}\nfunction renderScopedLocator(spec) {\n const scopeExpr = renderLocatorExpressionFromSelectorSpec(spec.scope);\n const targetSegment = renderScopedTargetSegment(spec.target);\n if (!scopeExpr || !targetSegment)\n return null;\n return `${scopeExpr}.locator(${targetSegment})`;\n}\nfunction isSelectorSpecExactProofLevel(proofLevel) {\n return (proofLevel === 'recorded' ||\n proofLevel === 'snapshot_validated' ||\n proofLevel === 'semantic_validated' ||\n proofLevel === 'live_smoke_validated' ||\n proofLevel === 'weak_but_usable');\n}\nfunction isSelectorSpecRenderableAsNative(spec) {\n if (!spec)\n return false;\n const selector = spec.selector.trim();\n const hasNativeExpression = /^getBy(?:TestId|Role|Label|Placeholder|Text)\\(/.test(selector) ||\n /^locator\\(/.test(selector);\n if (!hasNativeExpression)\n return false;\n switch (spec.engine) {\n case 'role':\n case 'label':\n return spec.proofLevel === 'recorded' || spec.proofLevel === 'live_smoke_validated';\n case 'testid':\n case 'placeholder':\n case 'playwright':\n return (spec.proofLevel === 'proven_equivalent' ||\n spec.proofLevel === 'recorded' ||\n spec.proofLevel === 'live_smoke_validated');\n case 'text':\n return (/^getByText\\(/.test(selector) &&\n (spec.proofLevel === 'proven_equivalent' ||\n spec.proofLevel === 'recorded' ||\n spec.proofLevel === 'live_smoke_validated'));\n default:\n return false;\n }\n}\nfunction isEquivalentRenderingRenderable(rendering) {\n if (!rendering)\n return false;\n switch (rendering.engine) {\n case 'testid':\n case 'placeholder':\n case 'text':\n case 'playwright':\n return (rendering.proofLevel === 'proven_equivalent' ||\n rendering.proofLevel === 'recorded' ||\n rendering.proofLevel === 'live_smoke_validated');\n case 'role':\n case 'label':\n default:\n return false;\n }\n}\nfunction canRenderSelectorSpecConfidently(spec) {\n if (!spec)\n return false;\n if (spec.engine === 'scoped') {\n return (canRenderSelectorSpecConfidently(spec.scope) &&\n canRenderSelectorSpecConfidently(spec.target) &&\n !!renderScopedLocator(spec) &&\n !(spec.proofLevel === 'blocked' ||\n spec.proofLevel === 'unvalidated' ||\n spec.proofLevel === 'inferred_unproven'));\n }\n if (spec.engine === 'bounded-field' &&\n spec.boundedField &&\n ((0, render_bounded_field_1.classifyBoundedFieldRenderStatus)(spec.boundedField) === 'proof-only-no-clean-render' ||\n (0, render_bounded_field_1.classifyBoundedFieldRenderStatus)(spec.boundedField) === 'blocked-unsafe-render' ||\n !(0, render_bounded_field_1.renderBoundedFieldLocator)(spec.boundedField))) {\n return false;\n }\n if (spec.engine === 'label-context' &&\n spec.labelContext &&\n (classifyLabelContextRenderStatus(spec.labelContext) === 'proof-only-no-clean-render' ||\n classifyLabelContextRenderStatus(spec.labelContext) === 'blocked-unsafe-render')) {\n return false;\n }\n if (spec.engine === 'trigger-context' &&\n spec.triggerContext &&\n ((spec.triggerContext.renderStatus ?? 'proof-only-no-clean-render') === 'proof-only-no-clean-render' ||\n (spec.triggerContext.renderStatus ?? 'proof-only-no-clean-render') === 'blocked-unsafe-render')) {\n return false;\n }\n return !(spec.proofLevel === 'blocked' ||\n spec.proofLevel === 'unvalidated' ||\n spec.proofLevel === 'inferred_unproven');\n}\nfunction getSelectorSpecRenderingWarnings(spec) {\n if (!spec)\n return [];\n const warnings = new Set(spec.warningCodes ?? []);\n const flatSpec = spec.engine !== 'scoped' && spec.engine !== 'bounded-field' ? spec : null;\n if (flatSpec?.labelContext?.warningCodes) {\n for (const code of flatSpec.labelContext.warningCodes)\n warnings.add(code);\n }\n if (flatSpec?.triggerContext?.warningCodes) {\n for (const code of flatSpec.triggerContext.warningCodes)\n warnings.add(code);\n }\n if (spec.engine === 'bounded-field' && spec.boundedField) {\n for (const code of (0, render_bounded_field_1.getBoundedFieldRenderingWarnings)(spec.boundedField))\n warnings.add(code);\n }\n switch (spec.proofLevel) {\n case 'recorded':\n warnings.add('recorded-not-revalidated');\n break;\n case 'weak_but_usable':\n warnings.add('weak-selector');\n break;\n case 'inferred_unproven':\n warnings.add('inferred-unproven');\n break;\n case 'blocked':\n warnings.add('blocked-selector');\n break;\n case 'unvalidated':\n warnings.add('unvalidated-selector');\n break;\n default:\n break;\n }\n if (spec.engine === 'label-context' && spec.labelContext) {\n const renderStatus = classifyLabelContextRenderStatus(spec.labelContext);\n if (renderStatus === 'proven-structural-fallback')\n warnings.add('label-context-structural-fallback');\n if (renderStatus === 'proof-only-no-clean-render')\n warnings.add('label-context-proof-only');\n if (renderStatus === 'blocked-unsafe-render')\n warnings.add('label-context-blocked-unsafe-render');\n }\n if (spec.engine === 'trigger-context' && spec.triggerContext) {\n const renderStatus = spec.triggerContext.renderStatus ?? 'proof-only-no-clean-render';\n if (renderStatus === 'proven-structural-fallback')\n warnings.add('custom-control-trigger-structural-fallback');\n if (renderStatus === 'proof-only-no-clean-render')\n warnings.add('custom-control-trigger-proof-only');\n if (renderStatus === 'blocked-unsafe-render')\n warnings.add('custom-control-trigger-blocked-unsafe-render');\n }\n return Array.from(warnings);\n}\nfunction pickPreferredEquivalentRendering(renderings) {\n if (!Array.isArray(renderings) || renderings.length === 0)\n return null;\n return renderings.find(rendering => isEquivalentRenderingRenderable(rendering)) ?? null;\n}\nfunction renderLocatorExpressionFromSelectorSpec(spec) {\n if (!spec)\n return null;\n if (spec.engine === 'scoped') {\n return renderScopedLocator(spec);\n }\n if (spec.engine === 'bounded-field' && spec.boundedField) {\n return (0, render_bounded_field_1.renderBoundedFieldLocator)(spec.boundedField);\n }\n if (spec.engine === 'label-context' && spec.labelContext) {\n return renderLabelContextLocator(spec.labelContext);\n }\n if (spec.engine === 'trigger-context' && spec.triggerContext) {\n return renderTriggerContextLocator(spec.triggerContext);\n }\n if (isSelectorSpecRenderableAsNative(spec)) {\n return spec.selector.trim();\n }\n return `locator(${JSON.stringify(spec.selector)})`;\n}\nfunction renderLocatorExpressionFromEquivalentRendering(rendering) {\n if (!rendering || !isEquivalentRenderingRenderable(rendering))\n return null;\n return rendering.locator.trim();\n}\n", "export type CompositeAnchorKind =\r\n | \"form_cluster\"\r\n | \"container_controls\"\r\n | \"table_row\"\r\n | \"dialog_actions\"\r\n | \"menu_group\";\r\n\r\nexport interface CompositeAnchor {\r\n kind: CompositeAnchorKind;\r\n scopeTag?: string | null;\r\n scopeRole?: string | null;\r\n scopeId?: string | null;\r\n scopeName?: string | null;\r\n scopeLabel?: string | null;\r\n tokens: string[];\r\n descriptor: string;\r\n confidence: number;\r\n}\r\n\r\nexport interface CompositeAnchorScanResult {\r\n anchors: CompositeAnchor[];\r\n inspectedContainerCount: number;\r\n droppedCompositeCount: number;\r\n skippedCompositeReasons: string[];\r\n skippedCompositeCount: number;\r\n finalCompositeCount: number;\r\n formScanMs: number;\r\n dialogScanMs: number;\r\n tableScanMs: number;\r\n menuScanMs: number;\r\n containerScanMs: number;\r\n}\r\n\r\ninterface CompositeAnchorCandidate extends CompositeAnchor {\r\n sortScore: number;\r\n}\r\n\r\nconst MAX_COMPOSITE_ANCHORS_PER_PAGE = 8;\r\nconst MAX_PER_KIND = 3;\r\nconst MAX_CONTAINERS_PER_KIND = 6;\r\nconst MAX_CHILD_CONTROLS_PER_CONTAINER = 12;\r\nconst MAX_CONTAINER_NODES = 220;\r\nconst MAX_CONTAINER_DEPTH = 6;\r\nconst NON_VOLATILE_TEXT_MAX_LENGTH = 40;\r\n\r\nconst FORM_CONTROL_SELECTOR =\r\n 'input, select, textarea, button, [role=\"button\"], [data-testid], [name]';\r\nconst ACTION_CONTROL_SELECTOR =\r\n 'button, [role=\"button\"], input[type=\"submit\"], input[type=\"button\"], input[type=\"reset\"], a[href]';\r\nconst MENU_CONTROL_SELECTOR =\r\n '[role=\"menuitem\"], [role=\"option\"], option, button, [role=\"button\"], a[href], li';\r\n\r\nfunction nowMs(): number {\r\n if (typeof performance !== \"undefined\" && typeof performance.now === \"function\") {\r\n return performance.now();\r\n }\r\n return Date.now();\r\n}\r\n\r\n/**\r\n * Exported normalize function (Node + test usage)\r\n */\r\nexport function normalizeAnchor(text: string | null | undefined): string {\r\n if (!text) return \"\";\r\n return String(text)\r\n .replace(/\\(\\s*\\d+\\s*\\)/g, \"\")\r\n .replace(/\\b\\d+\\s*(new|items?|results?|unread)\\b/gi, \"\")\r\n .replace(/\\s+/g, \" \")\r\n .trim();\r\n}\r\n\r\nfunction collapseWhitespace(text: string | null | undefined): string {\r\n return String(text || \"\")\r\n .replace(/\\s+/g, \" \")\r\n .trim();\r\n}\r\n\r\nfunction normalizeTokenValue(text: string | null | undefined): string {\r\n return collapseWhitespace(text).toLowerCase();\r\n}\r\n\r\nfunction isLikelyVolatile(value: string | null | undefined): boolean {\r\n const normalized = collapseWhitespace(value);\r\n if (!normalized) return true;\r\n if (normalized.length > 80) return true;\r\n if (/\\b\\d{6,}\\b/.test(normalized)) return true;\r\n if (/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i.test(normalized)) return true;\r\n if (/[A-Za-z0-9_-]{20,}/.test(normalized)) return true;\r\n return false;\r\n}\r\n\r\nfunction isStableTextCandidate(value: string | null | undefined): boolean {\r\n const normalized = collapseWhitespace(value);\r\n if (!normalized) return false;\r\n if (normalized.length < 2 || normalized.length > NON_VOLATILE_TEXT_MAX_LENGTH) return false;\r\n if (isLikelyVolatile(normalized)) return false;\r\n return true;\r\n}\r\n\r\nfunction tokenFromParts(prefix: string, value: string | null | undefined): string | null {\r\n const normalized = normalizeTokenValue(value);\r\n if (!normalized) return null;\r\n return `${prefix}:${normalized}`;\r\n}\r\n\r\nfunction safeGetAttribute(el: Element, name: string): string | null {\r\n try {\r\n return el.getAttribute(name);\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction stableAttributeToken(el: Element, tagName?: string): string | null {\r\n const tag = (tagName || el.tagName || \"node\").toLowerCase();\r\n\r\n const testId = normalizeAnchor(\r\n safeGetAttribute(el, \"data-testid\") ||\r\n safeGetAttribute(el, \"data-cy\") ||\r\n safeGetAttribute(el, \"data-qa\"),\r\n );\r\n if (testId && !isLikelyVolatile(testId)) {\r\n return tokenFromParts(`${tag}.testid`, testId);\r\n }\r\n\r\n const id = normalizeAnchor((el as HTMLElement).id || \"\");\r\n if (id && !/\\d{5,}/.test(id) && !isLikelyVolatile(id)) {\r\n return tokenFromParts(`${tag}.id`, id);\r\n }\r\n\r\n const name = normalizeAnchor(safeGetAttribute(el, \"name\"));\r\n if (name && !isLikelyVolatile(name)) {\r\n return tokenFromParts(`${tag}.name`, name);\r\n }\r\n\r\n const ariaLabel = normalizeAnchor(safeGetAttribute(el, \"aria-label\"));\r\n if (ariaLabel && isStableTextCandidate(ariaLabel)) {\r\n return tokenFromParts(`${tag}.aria`, ariaLabel);\r\n }\r\n\r\n const role = normalizeAnchor(safeGetAttribute(el, \"role\"));\r\n if (role && !isLikelyVolatile(role)) {\r\n return tokenFromParts(`${tag}.role`, role);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction stableTextToken(el: Element, prefix: string): string | null {\r\n const text = normalizeAnchor(el.textContent || \"\");\r\n if (!isStableTextCandidate(text)) return null;\r\n return tokenFromParts(prefix, text);\r\n}\r\n\r\nfunction sortAndDedupeTokens(tokens: Array<string | null | undefined>): string[] {\r\n return [...new Set(tokens.filter((token): token is string => typeof token === \"string\" && token.length > 0))]\r\n .sort((left, right) => left.localeCompare(right));\r\n}\r\n\r\nfunction buildDescriptor(kind: CompositeAnchorKind, scopeToken: string | null, tokens: string[]): string {\r\n const parts: string[] = [kind];\r\n if (scopeToken) parts.push(`scope=${scopeToken}`);\r\n if (tokens.length > 0) parts.push(`tokens=${tokens.join(\"|\")}`);\r\n return parts.join(\"|\");\r\n}\r\n\r\nfunction deriveScopeIdentity(container: Element): {\r\n scopeTag: string | null;\r\n scopeRole: string | null;\r\n scopeId: string | null;\r\n scopeName: string | null;\r\n scopeLabel: string | null;\r\n scopeToken: string | null;\r\n} {\r\n const scopeTag = container.tagName ? container.tagName.toLowerCase() : null;\r\n const scopeRole = normalizeTokenValue(safeGetAttribute(container, \"role\")) || null;\r\n const scopeId = normalizeTokenValue((container as HTMLElement).id || \"\") || null;\r\n const scopeName = normalizeTokenValue(safeGetAttribute(container, \"name\")) || null;\r\n\r\n const labelSource =\r\n safeGetAttribute(container, \"aria-label\") ||\r\n safeGetAttribute(container, \"aria-labelledby\") ||\r\n ((scopeTag === \"dialog\" || scopeRole === \"dialog\") ? extractHeadingText(container) : null);\r\n const scopeLabel = isStableTextCandidate(labelSource) ? normalizeTokenValue(labelSource) : null;\r\n\r\n const scopeToken =\r\n stableAttributeToken(container, scopeTag || \"scope\") ||\r\n (scopeLabel ? tokenFromParts(`${scopeTag || \"scope\"}.label`, scopeLabel) : null) ||\r\n (scopeRole ? tokenFromParts(`${scopeTag || \"scope\"}.role`, scopeRole) : null);\r\n\r\n return {\r\n scopeTag,\r\n scopeRole,\r\n scopeId,\r\n scopeName,\r\n scopeLabel,\r\n scopeToken,\r\n };\r\n}\r\n\r\nfunction countNodesWithLimit(container: Element, maxNodes = MAX_CONTAINER_NODES): number {\r\n let count = 0;\r\n const stack: Element[] = [container];\r\n while (stack.length > 0 && count <= maxNodes) {\r\n const current = stack.pop();\r\n if (!current) continue;\r\n count++;\r\n for (let i = current.children.length - 1; i >= 0; i--) {\r\n const child = current.children.item(i);\r\n if (child && typeof child.tagName === \"string\") stack.push(child);\r\n }\r\n }\r\n return count;\r\n}\r\n\r\nfunction collectControls(\r\n container: Element,\r\n selector: string,\r\n maxItems = MAX_CHILD_CONTROLS_PER_CONTAINER,\r\n maxDepth = MAX_CONTAINER_DEPTH,\r\n): Element[] {\r\n const collected: Element[] = [];\r\n const seen = new Set<Element>();\r\n const stack: Array<{ node: Element; depth: number }> = [{ node: container, depth: 0 }];\r\n\r\n while (stack.length > 0 && collected.length < maxItems) {\r\n const current = stack.pop();\r\n if (!current) continue;\r\n\r\n if (current.depth > 0 && current.node.matches(selector) && !seen.has(current.node)) {\r\n collected.push(current.node);\r\n seen.add(current.node);\r\n }\r\n\r\n if (current.depth >= maxDepth) continue;\r\n for (let i = current.node.children.length - 1; i >= 0; i--) {\r\n const child = current.node.children.item(i);\r\n if (child && typeof child.tagName === \"string\") {\r\n stack.push({ node: child, depth: current.depth + 1 });\r\n }\r\n }\r\n }\r\n\r\n return collected;\r\n}\r\n\r\nfunction extractHeadingText(container: Element): string | null {\r\n const headings = container.querySelectorAll(\"h1, h2, h3, legend, [role='heading']\");\r\n for (const heading of headings) {\r\n const text = normalizeAnchor(heading.textContent || \"\");\r\n if (isStableTextCandidate(text)) return text;\r\n }\r\n return null;\r\n}\r\n\r\nfunction firstStableText(elements: Iterable<Element>, prefix: string): string | null {\r\n for (const element of elements) {\r\n const token = stableTextToken(element, prefix);\r\n if (token) return token;\r\n const attrToken = stableAttributeToken(element);\r\n if (attrToken) return attrToken;\r\n }\r\n return null;\r\n}\r\n\r\nfunction getStableRowIdentifier(row: Element): string | null {\r\n const rowToken = stableAttributeToken(row, \"tr\");\r\n if (rowToken) return rowToken;\r\n\r\n const directCells = Array.from(row.children)\r\n .filter((child): child is Element => !!child && typeof child.tagName === \"string\")\r\n .filter((child) => /^(td|th)$/i.test(child.tagName));\r\n\r\n if (directCells.length === 0) return null;\r\n\r\n const firstCell = directCells[0];\r\n const firstCellToken =\r\n stableAttributeToken(firstCell, firstCell.tagName.toLowerCase()) ||\r\n stableTextToken(firstCell, \"row\");\r\n\r\n return firstCellToken;\r\n}\r\n\r\nfunction buildCompositeAnchor(\r\n kind: CompositeAnchorKind,\r\n container: Element,\r\n tokens: Array<string | null | undefined>,\r\n confidence: number,\r\n): CompositeAnchorCandidate | null {\r\n const normalizedTokens = sortAndDedupeTokens(tokens);\r\n if (normalizedTokens.length === 0) return null;\r\n\r\n const scope = deriveScopeIdentity(container);\r\n const descriptor = buildDescriptor(kind, scope.scopeToken, normalizedTokens);\r\n const sortScore = confidence * 100 + normalizedTokens.length;\r\n\r\n return {\r\n kind,\r\n scopeTag: scope.scopeTag,\r\n scopeRole: scope.scopeRole,\r\n scopeId: scope.scopeId,\r\n scopeName: scope.scopeName,\r\n scopeLabel: scope.scopeLabel,\r\n tokens: normalizedTokens,\r\n descriptor,\r\n confidence,\r\n sortScore,\r\n };\r\n}\r\n\r\nfunction selectTopAnchors(candidates: CompositeAnchorCandidate[]): CompositeAnchorScanResult {\r\n const byKind = new Map<CompositeAnchorKind, CompositeAnchorCandidate[]>();\r\n for (const candidate of candidates) {\r\n const list = byKind.get(candidate.kind) || [];\r\n list.push(candidate);\r\n byKind.set(candidate.kind, list);\r\n }\r\n\r\n const keptPerKind: CompositeAnchorCandidate[] = [];\r\n let droppedCompositeCount = 0;\r\n\r\n for (const [kind, list] of byKind.entries()) {\r\n const sorted = [...list].sort(\r\n (left, right) =>\r\n right.sortScore - left.sortScore ||\r\n right.confidence - left.confidence ||\r\n left.descriptor.localeCompare(right.descriptor),\r\n );\r\n keptPerKind.push(...sorted.slice(0, MAX_PER_KIND));\r\n droppedCompositeCount += Math.max(0, sorted.length - MAX_PER_KIND);\r\n byKind.set(kind, sorted);\r\n }\r\n\r\n const finalAnchors = keptPerKind\r\n .sort(\r\n (left, right) =>\r\n right.sortScore - left.sortScore ||\r\n right.confidence - left.confidence ||\r\n left.descriptor.localeCompare(right.descriptor),\r\n )\r\n .slice(0, MAX_COMPOSITE_ANCHORS_PER_PAGE);\r\n\r\n droppedCompositeCount += Math.max(0, keptPerKind.length - finalAnchors.length);\r\n\r\n return {\r\n anchors: finalAnchors.map(({ sortScore: _sortScore, ...anchor }) => anchor),\r\n inspectedContainerCount: 0,\r\n droppedCompositeCount,\r\n skippedCompositeReasons: [],\r\n skippedCompositeCount: 0,\r\n finalCompositeCount: finalAnchors.length,\r\n formScanMs: 0,\r\n dialogScanMs: 0,\r\n tableScanMs: 0,\r\n menuScanMs: 0,\r\n containerScanMs: 0,\r\n };\r\n}\r\n\r\nfunction chooseStableControlToken(el: Element): string | null {\r\n return (\r\n stableAttributeToken(el) ||\r\n stableTextToken(el, `${el.tagName.toLowerCase()}.text`) ||\r\n (el.tagName.toLowerCase() === \"input\"\r\n ? tokenFromParts(\"input.type\", normalizeAnchor(safeGetAttribute(el, \"type\") || \"text\"))\r\n : null)\r\n );\r\n}\r\n\r\nfunction generateFormAnchor(form: Element): CompositeAnchorCandidate | null {\r\n const controls = collectControls(form, FORM_CONTROL_SELECTOR);\r\n const fieldTokens = controls\r\n .map((control) => {\r\n const tag = control.tagName.toLowerCase();\r\n if (tag === \"button\" || safeGetAttribute(control, \"role\") === \"button\") {\r\n return chooseStableControlToken(control);\r\n }\r\n const nameToken =\r\n tokenFromParts(`${tag}.name`, normalizeAnchor(safeGetAttribute(control, \"name\"))) ||\r\n stableAttributeToken(control, tag) ||\r\n tokenFromParts(`${tag}.type`, normalizeAnchor(safeGetAttribute(control, \"type\")));\r\n return nameToken;\r\n })\r\n .filter((token): token is string => !!token)\r\n .slice(0, MAX_CHILD_CONTROLS_PER_CONTAINER);\r\n\r\n const formAction = normalizeAnchor(safeGetAttribute(form, \"action\"));\r\n const formActionToken =\r\n formAction && !isLikelyVolatile(formAction)\r\n ? tokenFromParts(\"form.action\", formAction.toLowerCase())\r\n : null;\r\n const headingToken = tokenFromParts(\"form.label\", extractHeadingText(form));\r\n\r\n return buildCompositeAnchor(\r\n \"form_cluster\",\r\n form,\r\n [formActionToken, headingToken, ...fieldTokens],\r\n 0.95,\r\n );\r\n}\r\n\r\nfunction isTableHeaderStable(value: string | null | undefined): boolean {\r\n const normalized = normalizeAnchor(value);\r\n return normalized.length >= 2 && normalized.length <= 30 && !isLikelyVolatile(normalized);\r\n}\r\n\r\nfunction generateTableRowAnchors(table: Element): CompositeAnchorCandidate[] {\r\n const headerCells = Array.from(table.querySelectorAll(\"thead th, th[scope='col'], tr:first-child th\"))\r\n .map((cell) => normalizeAnchor(cell.textContent || \"\"))\r\n .filter((text) => isTableHeaderStable(text))\r\n .slice(0, 6);\r\n const headerTokens = headerCells.map((header) => tokenFromParts(\"header\", header));\r\n\r\n if (headerTokens.length === 0) return [];\r\n\r\n const rows = Array.from(table.querySelectorAll(\"tbody tr, tr\"))\r\n .filter((row) => row.querySelector(\"td,th\"))\r\n .slice(0, MAX_CONTAINERS_PER_KIND);\r\n\r\n const anchors: CompositeAnchorCandidate[] = [];\r\n for (const row of rows) {\r\n const rowControls = collectControls(row, ACTION_CONTROL_SELECTOR, 6, 3);\r\n if (rowControls.length === 0) continue;\r\n\r\n const rowIdentifier = getStableRowIdentifier(row);\r\n if (!rowIdentifier) continue;\r\n\r\n const actionTokens = rowControls\r\n .map((control) => chooseStableControlToken(control))\r\n .filter((token): token is string => !!token)\r\n .slice(0, 4);\r\n if (actionTokens.length === 0) continue;\r\n\r\n const anchor = buildCompositeAnchor(\r\n \"table_row\",\r\n row,\r\n [...headerTokens, rowIdentifier, ...actionTokens],\r\n 0.96,\r\n );\r\n if (anchor) anchors.push(anchor);\r\n }\r\n\r\n return anchors;\r\n}\r\n\r\nfunction generateDialogAnchor(dialog: Element): CompositeAnchorCandidate | null {\r\n const titleToken =\r\n tokenFromParts(\"dialog.title\", extractHeadingText(dialog)) ||\r\n tokenFromParts(\"dialog.label\", normalizeAnchor(safeGetAttribute(dialog, \"aria-label\")));\r\n const actionTokens = collectControls(dialog, ACTION_CONTROL_SELECTOR, 8, 5)\r\n .map((control) => chooseStableControlToken(control))\r\n .filter((token): token is string => !!token)\r\n .slice(0, 6);\r\n\r\n return buildCompositeAnchor(\r\n \"dialog_actions\",\r\n dialog,\r\n [titleToken, ...actionTokens],\r\n 0.93,\r\n );\r\n}\r\n\r\nfunction generateMenuAnchor(container: Element): CompositeAnchorCandidate | null {\r\n const labelToken =\r\n tokenFromParts(\"menu.label\", normalizeAnchor(safeGetAttribute(container, \"aria-label\"))) ||\r\n tokenFromParts(\"menu.heading\", extractHeadingText(container));\r\n const optionTokens = collectControls(container, MENU_CONTROL_SELECTOR, 10, 4)\r\n .map((control) => chooseStableControlToken(control))\r\n .filter((token): token is string => !!token)\r\n .slice(0, 8);\r\n\r\n return buildCompositeAnchor(\r\n \"menu_group\",\r\n container,\r\n [labelToken, ...optionTokens],\r\n 0.9,\r\n );\r\n}\r\n\r\nfunction generateContainerAnchor(container: Element): CompositeAnchorCandidate | null {\r\n const controlTokens = collectControls(container, ACTION_CONTROL_SELECTOR, 8, 4)\r\n .map((control) => chooseStableControlToken(control))\r\n .filter((token): token is string => !!token)\r\n .slice(0, 6);\r\n const labelToken =\r\n tokenFromParts(\"container.label\", normalizeAnchor(safeGetAttribute(container, \"aria-label\"))) ||\r\n tokenFromParts(\"container.heading\", extractHeadingText(container));\r\n\r\n return buildCompositeAnchor(\r\n \"container_controls\",\r\n container,\r\n [labelToken, ...controlTokens],\r\n 0.82,\r\n );\r\n}\r\n\r\nfunction scanContainers(root: Document | Element, selector: string, limit: number): Element[] {\r\n const found = root.querySelectorAll(selector);\r\n const results: Element[] = [];\r\n for (const element of found) {\r\n if (results.length >= limit) break;\r\n if (element && typeof element.tagName === \"string\") results.push(element);\r\n }\r\n return results;\r\n}\r\n\r\n/**\r\n * MUST be self-contained for page.evaluate()\r\n */\r\nexport function scanPageAnchors(\r\n root: Document | Element = (globalThis as { document?: Document }).document as Document,\r\n locationPath: string = typeof window !== \"undefined\" ? window.location.pathname : \"/\"\r\n): string[] {\r\n // Local copy to avoid closure issues in browser execution\r\n const normalize = (text: string | null | undefined): string => {\r\n if (!text) return \"\";\r\n return String(text)\r\n .replace(/\\(\\s*\\d+\\s*\\)/g, \"\")\r\n .replace(/\\b\\d+\\s*(new|items?|results?|unread)\\b/gi, \"\")\r\n .replace(/\\s+/g, \" \")\r\n .trim();\r\n };\r\n\r\n const anchors: string[] = [];\r\n anchors.push(`URL:${locationPath}`);\r\n\r\n const elements = root.querySelectorAll(\r\n 'input, button, select, textarea, form, h1, h2, h3, [role=\"button\"]'\r\n );\r\n\r\n for (const rawEl of elements) {\r\n if (!rawEl || typeof rawEl.tagName !== \"string\") continue;\r\n\r\n const tag = rawEl.tagName.toUpperCase();\r\n const styleAttr = typeof rawEl.getAttribute === \"function\" ? rawEl.getAttribute(\"style\") || \"\" : \"\";\r\n\r\n // Visibility checks\r\n if (tag === \"INPUT\" && normalize(rawEl.getAttribute?.(\"type\") || \"\").toLowerCase() === \"hidden\") continue;\r\n if (/display\\s*:\\s*none/i.test(styleAttr)) continue;\r\n\r\n try {\r\n if (rawEl.hasAttribute(\"data-testid\")) {\r\n const v = normalize(rawEl.getAttribute(\"data-testid\"));\r\n if (v.length > 1) anchors.push(`${tag}:testid=${v}`);\r\n } else if ((rawEl as Element & { id?: string }).id && !/\\d{5,}/.test((rawEl as Element & { id?: string }).id || \"\")) {\r\n const v = normalize((rawEl as Element & { id?: string }).id || \"\");\r\n if (v.length > 1) anchors.push(`${tag}:id=${v}`);\r\n } else if (rawEl.hasAttribute(\"name\")) {\r\n const v = normalize(rawEl.getAttribute(\"name\"));\r\n if (v.length > 1) anchors.push(`${tag}:name=${v}`);\r\n } else if (rawEl.hasAttribute(\"role\")) {\r\n const v = normalize(rawEl.getAttribute(\"role\"));\r\n if (v.length > 1) anchors.push(`${tag}:role=${v}`);\r\n } else if (tag === \"BUTTON\" || tag === \"H1\" || tag === \"H2\") {\r\n const text = normalize(rawEl.textContent || \"\");\r\n if (text.length > 2 && text.length < 30) {\r\n anchors.push(`${tag}:text=${text}`);\r\n }\r\n } else if (tag === \"INPUT\") {\r\n const inputType = normalize(rawEl.getAttribute?.(\"type\") || \"text\").toLowerCase();\r\n if (inputType.length > 1) anchors.push(`${tag}:type=${inputType}`);\r\n }\r\n } catch (e) {\r\n console.warn(\"[AnchorCapture] Error processing element:\", e);\r\n }\r\n }\r\n\r\n return [...new Set(anchors)].sort();\r\n}\r\n\r\nexport function scanCompositeAnchors(\r\n root: Document | Element = (globalThis as { document?: Document }).document as Document,\r\n _locationPath: string = typeof window !== \"undefined\" ? window.location.pathname : \"/\"\r\n): CompositeAnchor[] {\r\n return scanCompositeAnchorsDetailed(root, _locationPath).anchors;\r\n}\r\n\r\nexport function scanCompositeAnchorsDetailed(\r\n root: Document | Element = (globalThis as { document?: Document }).document as Document,\r\n _locationPath: string = typeof window !== \"undefined\" ? window.location.pathname : \"/\"\r\n): CompositeAnchorScanResult {\r\n const candidates: CompositeAnchorCandidate[] = [];\r\n const skippedCompositeReasons: string[] = [];\r\n let inspectedContainerCount = 0;\r\n let skippedCompositeCount = 0;\r\n let formScanMs = 0;\r\n let dialogScanMs = 0;\r\n let tableScanMs = 0;\r\n let menuScanMs = 0;\r\n let containerScanMs = 0;\r\n\r\n const inspectContainer = (\r\n kind: CompositeAnchorKind,\r\n container: Element,\r\n build: (container: Element) => CompositeAnchorCandidate | CompositeAnchorCandidate[] | null,\r\n ) => {\r\n inspectedContainerCount++;\r\n if (countNodesWithLimit(container, MAX_CONTAINER_NODES + 1) > MAX_CONTAINER_NODES) {\r\n skippedCompositeReasons.push(\"container_too_large\");\r\n skippedCompositeCount += 1;\r\n return;\r\n }\r\n const built = build(container);\r\n if (!built) return;\r\n if (Array.isArray(built)) candidates.push(...built);\r\n else candidates.push(built);\r\n };\r\n\r\n let scanStartedAt = nowMs();\r\n const forms = scanContainers(root, \"form\", MAX_CONTAINERS_PER_KIND);\r\n for (const form of forms) inspectContainer(\"form_cluster\", form, generateFormAnchor);\r\n formScanMs = nowMs() - scanStartedAt;\r\n\r\n scanStartedAt = nowMs();\r\n const dialogs = scanContainers(root, 'dialog, [role=\"dialog\"]', MAX_CONTAINERS_PER_KIND);\r\n for (const dialog of dialogs) inspectContainer(\"dialog_actions\", dialog, generateDialogAnchor);\r\n dialogScanMs = nowMs() - scanStartedAt;\r\n\r\n scanStartedAt = nowMs();\r\n const tables = scanContainers(root, \"table\", MAX_CONTAINERS_PER_KIND);\r\n for (const table of tables) inspectContainer(\"table_row\", table, generateTableRowAnchors);\r\n tableScanMs = nowMs() - scanStartedAt;\r\n\r\n scanStartedAt = nowMs();\r\n const menus = scanContainers(\r\n root,\r\n '[role=\"menu\"], [role=\"listbox\"], [role=\"list\"], nav, [role=\"group\"]',\r\n MAX_CONTAINERS_PER_KIND,\r\n );\r\n for (const menu of menus) inspectContainer(\"menu_group\", menu, generateMenuAnchor);\r\n menuScanMs = nowMs() - scanStartedAt;\r\n\r\n scanStartedAt = nowMs();\r\n const containers = scanContainers(\r\n root,\r\n 'section, [role=\"region\"], [role=\"group\"], [role=\"toolbar\"], [role=\"navigation\"], main, aside',\r\n MAX_CONTAINERS_PER_KIND,\r\n );\r\n for (const container of containers) inspectContainer(\"container_controls\", container, generateContainerAnchor);\r\n containerScanMs = nowMs() - scanStartedAt;\r\n\r\n const selected = selectTopAnchors(\r\n candidates.filter(\r\n (candidate, index, arr) =>\r\n arr.findIndex((other) => other.descriptor === candidate.descriptor) === index,\r\n ),\r\n );\r\n selected.inspectedContainerCount = inspectedContainerCount;\r\n selected.skippedCompositeReasons = [...new Set(skippedCompositeReasons)].sort();\r\n selected.skippedCompositeCount = skippedCompositeCount;\r\n selected.finalCompositeCount = selected.anchors.length;\r\n selected.formScanMs = formScanMs;\r\n selected.dialogScanMs = dialogScanMs;\r\n selected.tableScanMs = tableScanMs;\r\n selected.menuScanMs = menuScanMs;\r\n selected.containerScanMs = containerScanMs;\r\n return selected;\r\n}\r\n", "export type SelectorResult = {\r\n selector: string;\r\n priority: string;\r\n rank: number;\r\n};\r\n\r\ntype SelectorOptions = {\r\n maxTextLength?: number;\r\n};\r\n\r\ntype SelectorElement = Element & {\r\n type?: string;\r\n name?: string;\r\n placeholder?: string;\r\n};\r\n\r\nexport const SELECTOR_RANK_MAP: Record<string, number> = {\r\n \"data-testid\": 1,\r\n id: 2,\r\n attribute: 3,\r\n class: 7,\r\n text: 8,\r\n path: 10,\r\n xpath: 10,\r\n other: 10,\r\n chained: 10,\r\n};\r\n\r\nexport function escapeCssString(value: unknown): string {\r\n return String(value)\r\n .replace(/\\\\/g, \"\\\\\\\\\")\r\n .replace(/\"/g, '\\\\\"')\r\n .replace(/\\n/g, \"\\\\A \")\r\n .replace(/\\r/g, \"\\\\D \")\r\n .replace(/\\t/g, \"\\\\9 \");\r\n}\r\n\r\nconst safeCssEscape =\r\n typeof CSS !== \"undefined\" && CSS.escape\r\n ? CSS.escape\r\n : (str: string) => str.replace(/[^a-zA-Z0-9_-]/g, \"\\\\$&\");\r\n\r\nexport function rankForPriority(priority: string): number {\r\n return SELECTOR_RANK_MAP[priority] ?? 10;\r\n}\r\n\r\nexport function extractText(\r\n element: Element,\r\n maxTextLength = 50\r\n): string | null {\r\n const text = element.textContent || (element as HTMLElement).innerText || \"\";\r\n return text.trim().replace(/\\s+/g, \" \").substring(0, maxTextLength) || null;\r\n}\r\n\r\nexport function findStableClass(element: Element): string | null {\r\n if (!element.classList || element.classList.length === 0) return null;\r\n\r\n const classes = Array.from(element.classList);\r\n\r\n const BANNED_PATTERNS = [\r\n /\\d{4,}/,\r\n /^css-/,\r\n /^sc-/,\r\n /^oxd-input$/,\r\n /^oxd-select-text-input$/,\r\n /^el-input__inner$/,\r\n /^ant-input$/,\r\n /^MuiInputBase-input$/,\r\n ];\r\n\r\n const stableClasses = classes.filter(\r\n (cls) => !BANNED_PATTERNS.some((regex) => regex.test(cls))\r\n );\r\n\r\n if (stableClasses.length === 0) return null;\r\n\r\n const utilityPrefixes = [\"mt-\", \"mb-\", \"pt-\", \"pb-\", \"flex\", \"text-\", \"bg-\"];\r\n stableClasses.sort((a, b) => {\r\n const aIsUtility = utilityPrefixes.some((p) => a.startsWith(p));\r\n const bIsUtility = utilityPrefixes.some((p) => b.startsWith(p));\r\n if (aIsUtility && !bIsUtility) return 1;\r\n if (!aIsUtility && bIsUtility) return -1;\r\n return 0;\r\n });\r\n\r\n return stableClasses[0];\r\n}\r\n\r\nexport function generateXPath(element: Element): string {\r\n if (element.id) return `id(\"${element.id}\")`;\r\n if (element === document.body) return \"/html/body\";\r\n\r\n let path = \"\";\r\n let current: Node | null = element;\r\n\r\n while (current && current.nodeType === Node.ELEMENT_NODE) {\r\n let index = 0;\r\n let sibling = current.previousSibling;\r\n\r\n while (sibling) {\r\n if (\r\n sibling.nodeType === Node.ELEMENT_NODE &&\r\n sibling.nodeName === current.nodeName\r\n ) {\r\n index++;\r\n }\r\n sibling = sibling.previousSibling;\r\n }\r\n\r\n const tagName = current.nodeName.toLowerCase();\r\n const pathIndex = index > 0 ? `[${index + 1}]` : \"\";\r\n path = `/${tagName}${pathIndex}${path}`;\r\n current = current.parentNode;\r\n }\r\n\r\n return path;\r\n}\r\n\r\nexport function generateOptimalSelector(\r\n rawElement: Element,\r\n options: SelectorOptions = {}\r\n): SelectorResult {\r\n const element = rawElement as SelectorElement;\r\n const tagName = element.tagName.toLowerCase();\r\n const maxTextLength =\r\n typeof options.maxTextLength === \"number\" ? options.maxTextLength : 50;\r\n\r\n if (element.hasAttribute(\"data-testid\")) {\r\n const testId = element.getAttribute(\"data-testid\");\r\n return {\r\n selector: `[data-testid=\"${escapeCssString(testId)}\"]`,\r\n priority: \"data-testid\",\r\n rank: rankForPriority(\"data-testid\"),\r\n };\r\n }\r\n\r\n if (element.id) {\r\n const id = element.id;\r\n const isDynamic =\r\n /^\\d/.test(id) ||\r\n /^react-/i.test(id) ||\r\n /[0-9a-f]{8}-[0-9a-f]{4}/i.test(id) ||\r\n /^:[a-z0-9]+:$/i.test(id) ||\r\n /\\d{5,}/.test(id) ||\r\n /^(?:css|sc)-[a-zA-Z0-9]+$/.test(id);\r\n if (!isDynamic) {\r\n return {\r\n selector: `#${safeCssEscape(id)}`,\r\n priority: \"id\",\r\n rank: rankForPriority(\"id\"),\r\n };\r\n }\r\n }\r\n\r\n if (element.name) {\r\n return {\r\n selector: `${tagName}[name=\"${escapeCssString(element.name)}\"]`,\r\n priority: \"attribute\",\r\n rank: rankForPriority(\"attribute\"),\r\n };\r\n }\r\n\r\n if (element.getAttribute(\"aria-label\")) {\r\n return {\r\n selector: `${tagName}[aria-label=\"${escapeCssString(\r\n element.getAttribute(\"aria-label\")\r\n )}\"]`,\r\n priority: \"attribute\",\r\n rank: rankForPriority(\"attribute\"),\r\n };\r\n }\r\n\r\n if (element.getAttribute(\"role\")) {\r\n return {\r\n selector: `[role=\"${escapeCssString(element.getAttribute(\"role\"))}\"]`,\r\n priority: \"attribute\",\r\n rank: rankForPriority(\"attribute\"),\r\n };\r\n }\r\n\r\n if (\r\n element.type &&\r\n [\"submit\", \"button\", \"reset\", \"checkbox\", \"radio\"].includes(element.type)\r\n ) {\r\n return {\r\n selector: `${tagName}[type=\"${escapeCssString(element.type)}\"]`,\r\n priority: \"attribute\",\r\n rank: rankForPriority(\"attribute\"),\r\n };\r\n }\r\n\r\n const stableClass = findStableClass(element);\r\n if (stableClass) {\r\n return {\r\n selector: `.${safeCssEscape(stableClass)}`,\r\n priority: \"class\",\r\n rank: rankForPriority(\"class\"),\r\n };\r\n }\r\n\r\n if ([\"button\", \"a\", \"submit\"].includes(tagName)) {\r\n const text = extractText(element, maxTextLength);\r\n if (text && text.length > 0 && text.length < maxTextLength) {\r\n return {\r\n selector: `${tagName}:has-text(\"${escapeCssString(text)}\")`,\r\n priority: \"text\",\r\n rank: rankForPriority(\"text\"),\r\n };\r\n }\r\n }\r\n\r\n {\r\n const parts = [];\r\n if (element.name) parts.push(`[name=\"${escapeCssString(element.name)}\"]`);\r\n if (element.getAttribute(\"aria-label\")) {\r\n parts.push(\r\n `[aria-label=\"${escapeCssString(element.getAttribute(\"aria-label\"))}\"]`\r\n );\r\n }\r\n if (element.type && ![\"text\", \"button\"].includes(element.type)) {\r\n parts.push(`[type=\"${escapeCssString(element.type)}\"]`);\r\n }\r\n if (element.placeholder) {\r\n parts.push(`[placeholder=\"${escapeCssString(element.placeholder)}\"]`);\r\n }\r\n\r\n if (parts.length >= 2) {\r\n return {\r\n selector: `${tagName}${parts.join(\"\")}`,\r\n priority: \"attribute\",\r\n rank: rankForPriority(\"attribute\"),\r\n };\r\n }\r\n }\r\n\r\n const parent = element.parentElement;\r\n if (parent) {\r\n const siblings = Array.from(parent.children).filter(\r\n (child) => child.tagName === element.tagName\r\n );\r\n if (siblings.length > 0) {\r\n const index = siblings.indexOf(element);\r\n const parentSelector =\r\n parent.id && !/^\\d/.test(parent.id)\r\n ? `#${safeCssEscape(parent.id)}`\r\n : parent.tagName.toLowerCase();\r\n\r\n return {\r\n selector: `${parentSelector} > ${tagName}:nth-of-type(${index + 1})`,\r\n priority: \"path\",\r\n rank: rankForPriority(\"path\"),\r\n };\r\n }\r\n }\r\n\r\n return {\r\n selector: generateXPath(element),\r\n priority: \"xpath\",\r\n rank: rankForPriority(\"xpath\"),\r\n };\r\n}\r\n", "export function normalizeUrl(url: string, base?: string): string {\r\n try {\r\n const u = new URL(url, base);\r\n const path = u.pathname.replace(/\\/$/, \"\") || \"/\";\r\n return `${u.origin}${path}`;\r\n } catch {\r\n return url;\r\n }\r\n}\r\n\r\n", "export * from './anchor-utils';\r\nexport * from './selectors';\r\nexport * from './url-utils';\r\n\r\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.openSqliteReadonlyDatabase = openSqliteReadonlyDatabase;\nfunction loadDatabaseSyncCtor() {\n try {\n // Lazy load to avoid static resolver issues in tooling.\n // In CJS/ts-node contexts, require is module-scoped (not global),\n // so avoid Function('return require') which can fail.\n const dynamicRequire = typeof require === 'function' ? require : null;\n if (!dynamicRequire) {\n throw new Error('require is unavailable in this runtime');\n }\n const mod = dynamicRequire('node:sqlite');\n if (typeof mod?.DatabaseSync === 'function') {\n return mod.DatabaseSync;\n }\n }\n catch {\n // Handled by explicit throw below.\n }\n throw new Error('node:sqlite is unavailable. Use a Node.js runtime that provides node:sqlite (Node 22+).');\n}\nfunction openSqliteReadonlyDatabase(dbPath) {\n try {\n const DatabaseSync = loadDatabaseSyncCtor();\n const db = new DatabaseSync(dbPath);\n // Hard read-only posture for codegen/tracing paths.\n db.exec('PRAGMA query_only = ON');\n return db;\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to open SQLite database via node:sqlite at \"${dbPath}\": ${message}`);\n }\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GenerationContextSchemaV1 = exports.GenerationGuidanceSchemaV1 = exports.IgnoredGenerationStepSchemaV1 = exports.IgnoredStepReasonSchemaV1 = exports.GenerationStepSchemaV1 = exports.FallbackHintsSchema = exports.GenerationAssertionSchema = exports.ResolvedTargetSchema = exports.SelectorResolutionSchema = void 0;\nconst zod_1 = require(\"zod\");\nexports.SelectorResolutionSchema = zod_1.z.object({\n schemaVersion: zod_1.z.literal('air:selector-resolution:v1'),\n status: zod_1.z.enum(['resolved', 'unresolved']),\n selected: zod_1.z.object({\n selector: zod_1.z.string(),\n engine: zod_1.z.enum(['css', 'xpath']),\n family: zod_1.z.string().optional(),\n source: zod_1.z.enum(['shadow-preference', 'legacy-primary']),\n proposalSource: zod_1.z.string().nullable().optional(),\n matchCount: zod_1.z.number().nullable().optional(),\n visibleMatchCount: zod_1.z.number().nullable().optional(),\n replaySafe: zod_1.z.boolean(),\n confidence: zod_1.z.enum(['high', 'medium', 'low']).optional(),\n warningCodes: zod_1.z.array(zod_1.z.string()).optional(),\n proofSource: zod_1.z.string().nullable().optional(),\n selectedReason: zod_1.z.string().optional(),\n }).optional(),\n blockedReason: zod_1.z.string().nullable().optional(),\n});\nexports.ResolvedTargetSchema = zod_1.z.object({\n kind: zod_1.z.enum(['css', 'xpath', 'role', 'text', 'label', 'placeholder', 'testid']),\n value: zod_1.z.string(),\n options: zod_1.z.object({\n name: zod_1.z.string().optional(),\n exact: zod_1.z.boolean().optional(),\n }).optional(),\n source: zod_1.z.enum(['selectorResolution', 'legacy_fallback']),\n replaySafe: zod_1.z.boolean(),\n});\nexports.GenerationAssertionSchema = zod_1.z.object({\n type: zod_1.z.enum(['url', 'element_visible', 'element_text', 'title', 'custom']),\n value: zod_1.z.string().optional(),\n selector: zod_1.z.string().optional(),\n source: zod_1.z.enum(['outcome', 'anchor', 'user_defined']).optional(),\n confidence: zod_1.z.number().optional(),\n});\nexports.FallbackHintsSchema = zod_1.z.object({\n legacySelector: zod_1.z.string().optional(),\n elementText: zod_1.z.string().optional(),\n tagName: zod_1.z.string().optional(),\n attributes: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).optional(),\n});\nexports.GenerationStepSchemaV1 = zod_1.z.object({\n stepIndex: zod_1.z.number(),\n eventId: zod_1.z.string().optional(),\n traceId: zod_1.z.string().optional(),\n action: zod_1.z.string(),\n intent: zod_1.z.string(),\n value: zod_1.z.string().optional(),\n locatorStatus: zod_1.z.enum(['resolved', 'unresolved', 'not_applicable']),\n resolvedTarget: exports.ResolvedTargetSchema.optional(),\n fallbackHints: exports.FallbackHintsSchema.optional(),\n selectorResolution: exports.SelectorResolutionSchema.optional(),\n assertions: zod_1.z.array(exports.GenerationAssertionSchema).default([]),\n pageUrl: zod_1.z.string().optional(),\n normalizedUrl: zod_1.z.string().optional(),\n outcomeType: zod_1.z.string().optional(),\n confidence: zod_1.z.number().optional(),\n});\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// IGNORED STEPS \u2014 mirror of core/types/generation.ts\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/**\n * Reason codes for why a recorded step was moved to ignoredSteps.\n * Must stay in sync with core/types/generation.ts IgnoredStepReasonSchemaV1.\n */\nexports.IgnoredStepReasonSchemaV1 = zod_1.z.enum([\n 'broad_no_change_container_click',\n 'duplicate_lower_quality_action',\n 'non_replay_background_click',\n 'unknown_low_value_step',\n]);\n/**\n * IgnoredGenerationStepV1 \u2014 extends GenerationStepSchemaV1 with an ignore reason.\n * Must stay in sync with core/types/generation.ts IgnoredGenerationStepSchemaV1.\n */\nexports.IgnoredGenerationStepSchemaV1 = exports.GenerationStepSchemaV1.extend({\n ignoredReason: exports.IgnoredStepReasonSchemaV1,\n ignoredExplanation: zod_1.z.string().optional(),\n});\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// GENERATION GUIDANCE \u2014 mirror of core/types/generation.ts\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/**\n * GenerationGuidanceV1 \u2014 typed rules for the IDE LLM code generator.\n * Must stay in sync with core/types/generation.ts GenerationGuidanceSchemaV1.\n */\nexports.GenerationGuidanceSchemaV1 = zod_1.z.object({\n replaySource: zod_1.z.literal('steps'),\n ignoredStepsPolicy: zod_1.z.literal('context_only'),\n rules: zod_1.z.array(zod_1.z.string()),\n});\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// GENERATION CONTEXT\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nexports.GenerationContextSchemaV1 = zod_1.z.object({\n schemaVersion: zod_1.z.literal('air:generation-context:v1'),\n sessionId: zod_1.z.string(),\n url: zod_1.z.string(),\n recordedAt: zod_1.z.number(),\n steps: zod_1.z.array(exports.GenerationStepSchemaV1),\n ignoredSteps: zod_1.z.array(exports.IgnoredGenerationStepSchemaV1).default([]),\n generationGuidance: exports.GenerationGuidanceSchemaV1.optional(),\n metadata: zod_1.z.object({\n generatedAt: zod_1.z.number().optional(),\n source: zod_1.z.literal('air-db').optional(),\n }).optional(),\n});\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.deriveGenerationContext = deriveGenerationContext;\nconst runtime_schemas_1 = require(\"./runtime-schemas\");\n/**\n * Phase 3C + GC-1A: Pure GenerationContext Builder\n *\n * Derives a pristine GenerationContextV1 from an internal CodegenSession\n * and lightweight event metadata.\n *\n * Does NOT query the DB, load HTML snapshots, or interact with heavy services.\n * Purely deterministic transformation.\n *\n * GC-1A additions:\n * - Classifies broad no_change container clicks \u2192 ignoredSteps\n * - Emits generationGuidance with typed LLM rules\n */\nfunction deriveGenerationContext(input) {\n const { session, eventsById } = input;\n // Handle recordedAt safely\n let recordedAt = Date.now();\n if (typeof session.recordedAt === 'number') {\n recordedAt = session.recordedAt;\n }\n else if (typeof session.recordedAt === 'string') {\n const parsed = Date.parse(session.recordedAt);\n if (!isNaN(parsed)) {\n recordedAt = parsed;\n }\n }\n const replaySteps = [];\n const ignoredSteps = [];\n session.steps.forEach((step, index) => {\n const metadata = step.eventId ? eventsById.get(step.eventId) : undefined;\n const selectorResolution = metadata?.selectorResolution;\n const nextStep = session.steps[index + 1];\n const isTargetNeeded = actionNeedsTarget(step.action, step);\n let locatorStatus = 'not_applicable';\n let resolvedTarget = undefined;\n let fallbackHints = undefined;\n if (isTargetNeeded) {\n if (selectorResolution &&\n selectorResolution.status === 'resolved' &&\n selectorResolution.selected &&\n selectorResolution.selected.replaySafe === true &&\n typeof selectorResolution.selected.selector === 'string' &&\n selectorResolution.selected.selector.trim().length > 0 &&\n (selectorResolution.selected.engine === 'css' || selectorResolution.selected.engine === 'xpath')) {\n locatorStatus = 'resolved';\n resolvedTarget = {\n kind: selectorResolution.selected.engine,\n value: selectorResolution.selected.selector,\n source: 'selectorResolution',\n replaySafe: true,\n };\n }\n else {\n locatorStatus = 'unresolved';\n // Build fallback hints\n const legacySelector = metadata?.fallbackHints?.legacySelector ?? step.selector;\n const elementText = metadata?.fallbackHints?.elementText ?? step.fingerprint?.textExcerpt;\n const tagName = metadata?.fallbackHints?.tagName ?? step.fingerprint?.tagName;\n const hints = {};\n if (legacySelector)\n hints.legacySelector = legacySelector;\n if (elementText)\n hints.elementText = elementText;\n if (tagName)\n hints.tagName = tagName;\n if (Object.keys(hints).length > 0) {\n fallbackHints = hints;\n }\n }\n }\n const assertions = (step.assertions || [])\n .filter((assertion) => !shouldDropConflictingOutcomeUrlAssertion(assertion, nextStep))\n .map(mapAssertion);\n const mappedStep = {\n stepIndex: step.step,\n eventId: step.eventId,\n traceId: step.traceId,\n action: step.action,\n intent: step.intent,\n value: step.value,\n locatorStatus,\n resolvedTarget,\n fallbackHints,\n selectorResolution,\n assertions,\n pageUrl: step.pageUrl,\n normalizedUrl: step.normalizedUrl,\n outcomeType: step.outcomeType,\n confidence: step.confidence,\n };\n const cleanStep = stripUndefined(mappedStep);\n // GC-1A: Classify whether this step should move to ignoredSteps\n const noiseClassification = classifyNoiseStep(step, cleanStep);\n if (noiseClassification !== null) {\n const ignoredStep = {\n ...cleanStep,\n ignoredReason: noiseClassification.reason,\n ignoredExplanation: noiseClassification.explanation,\n };\n ignoredSteps.push(ignoredStep);\n }\n else {\n replaySteps.push(cleanStep);\n }\n });\n const context = {\n schemaVersion: 'air:generation-context:v1',\n sessionId: session.sessionId,\n url: session.url,\n recordedAt,\n steps: replaySteps,\n ignoredSteps,\n generationGuidance: buildGenerationGuidance(),\n metadata: {\n generatedAt: Date.now(),\n source: 'air-db',\n },\n };\n return runtime_schemas_1.GenerationContextSchemaV1.parse(context);\n}\n/**\n * Determines whether a mapped step should be moved to ignoredSteps.\n *\n * Returns null if the step is replay-safe and must stay in steps.\n * Returns a NoiseClassification if the step should be ignored.\n *\n * GC-1A only handles: broad_no_change_container_click\n * GC-2 will add: duplicate_lower_quality_action\n *\n * Safety rules (NEVER ignore these):\n * - Any action other than 'click'\n * - Any click with assertions\n * - Any click with outcomeType !== 'no_change'\n * - Concrete interactive controls (button, a[href], input, select, role controls)\n * - custom-control-open / custom-select / custom-menu-select\n * - input / submit / navigate / scroll actions\n *\n * When uncertain, returns null (keep in steps).\n */\nfunction classifyNoiseStep(rawStep, mappedStep) {\n // Only 'click' actions can be noise-classified in GC-1A\n if (rawStep.action !== 'click') {\n return null;\n }\n // Steps with assertions must stay in steps \u2014 they carry verification data\n if (mappedStep.assertions.length > 0) {\n return null;\n }\n // Only classify no_change outcome \u2014 state_refresh and navigation are meaningful\n if (rawStep.outcomeType !== 'no_change') {\n return null;\n }\n // Determine the effective selector for classification\n const effectiveSelector = (mappedStep.resolvedTarget?.value ??\n mappedStep.fallbackHints?.legacySelector ??\n rawStep.selector ??\n '').trim();\n if (!effectiveSelector) {\n return null;\n }\n // Concrete controls must never be ignored\n if (looksLikeConcreteControl(effectiveSelector)) {\n return null;\n }\n // Broad container check \u2014 the only GC-1A classification\n if (isBroadContainerSelector(effectiveSelector)) {\n return {\n reason: 'broad_no_change_container_click',\n explanation: `Click on broad container selector \"${effectiveSelector}\" with no_change outcome and no assertions. Not recommended for replay.`,\n };\n }\n return null;\n}\n/**\n * Returns true if the selector targets an element that looks like a concrete\n * interactive control \u2014 these must never be moved to ignoredSteps.\n *\n * Checks (CSS-based, order matters):\n * 1. tag-based: button, a, input, select, textarea\n * 2. attribute-based: [href], [role=\"button\"], [role=\"menuitem\"], [role=\"option\"],\n * [role=\"tab\"], [role=\"link\"], [role=\"checkbox\"], [role=\"radio\"]\n * 3. ID-based: #anything (IDs almost always target concrete elements)\n * 4. action-text-based: :has-text patterns on tags\n * 5. type attribute selectors: [type=\"submit\"], [type=\"button\"]\n */\nfunction looksLikeConcreteControl(selector) {\n const s = selector.trim().toLowerCase();\n // Concrete HTML tags\n if (/^(button|a|input|select|textarea)[\\s,\\[.:#>~+]/.test(s))\n return true;\n if (/^(button|a|input|select|textarea)$/.test(s))\n return true;\n // Interactive role attributes\n if (/\\[role=[\"'](button|menuitem|option|tab|link|checkbox|radio|switch|menuitemcheckbox|menuitemradio)[\"']/.test(s))\n return true;\n // ID selectors \u2014 IDs reliably point to concrete elements\n if (s.startsWith('#'))\n return true;\n // href attribute \u2014 only links have these\n if (/\\[href/.test(s))\n return true;\n // Type attribute for form controls\n if (/\\[type=[\"'](submit|button|reset|checkbox|radio)[\"']/.test(s))\n return true;\n // :has-text() on a concrete tag\n if (/^(button|a|input|select|textarea|span|label)[^{]*:has-text\\(/.test(s))\n return true;\n // data-testid selectors \u2014 these are always deliberate\n if (/\\[data-testid/.test(s) || /\\[data-cy/.test(s) || /\\[data-qa/.test(s))\n return true;\n return false;\n}\n/**\n * Returns true if the selector looks like a broad layout/container element\n * with no interactive semantics.\n *\n * Uses a conservative token list. Generic layout tokens indicate a\n * broad container, not a concrete control.\n *\n * Rules:\n * - Checks class names and element names for layout tokens, including hyphenated names\n * - Does NOT hardcode any app names or app-specific class names\n * - If uncertain, returns false (keep in steps is the safe default)\n */\nfunction isBroadContainerSelector(selector) {\n // Extract all word-boundary tokens (class names, tag names, identifiers)\n // Split each token by '-' to handle hyphenated names like 'background-container'\n const tokenPattern = /[\\w-]+/g;\n const rawTokens = (selector.match(tokenPattern) ?? []).map((t) => t.toLowerCase());\n if (rawTokens.length === 0)\n return false;\n // Expand hyphenated and underscored tokens into their sub-components\n // e.g. 'background-container' \u2192 ['background', 'container']\n const tokens = rawTokens.flatMap((t) => t.split(/[-_]/));\n // Broad layout container tokens \u2014 app-agnostic\n // These are conservative: only add tokens that reliably indicate a\n // non-interactive layout wrapper across many apps.\n const BROAD_CONTAINER_TOKENS = new Set([\n 'container',\n 'background',\n 'wrapper',\n 'layout',\n 'content',\n 'main',\n 'section',\n 'page',\n 'panel',\n 'overlay',\n 'backdrop',\n 'scaffold',\n 'shell',\n 'frame',\n 'region',\n 'area',\n 'body',\n 'surface',\n 'canvas',\n ]);\n // Check if any sub-token in the selector is a broad container token\n const hasBroadToken = tokens.some((token) => BROAD_CONTAINER_TOKENS.has(token));\n if (!hasBroadToken)\n return false;\n // Double-check: even with a broad token, if the selector has a concrete\n // sub-part, treat it as a concrete target (e.g. .container button)\n // The presence of whitespace (descendant combinator) or > means it's scoped\n if (/[\\s>~+]/.test(selector.trim()))\n return false;\n return true;\n}\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// GC-1B: GENERATION GUIDANCE\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/**\n * Returns a static, typed GenerationGuidanceV1 payload.\n *\n * These rules are emitted into every GenerationContext so the IDE LLM\n * has explicit directives without needing a perfect user prompt.\n *\n * Rules are ordered by priority:\n * 1. Fundamental replay rules\n * 2. ignoredSteps policy\n * 3. Locator strategy\n * 4. Assertions and values\n * 5. Framework style\n */\nfunction buildGenerationGuidance() {\n return {\n replaySource: 'steps',\n ignoredStepsPolicy: 'context_only',\n rules: [\n 'Generate replay code only from steps, in order.',\n 'Do not generate code from ignoredSteps by default.',\n 'Use ignoredSteps only for context, diagnostics, or fallback explanation.',\n 'Do not skip or reorder steps unless the user explicitly instructs it.',\n 'Preserve custom-control-open steps; they are required for dropdown and menu visibility before selection.',\n 'Use resolvedTarget.value as the locator when locatorStatus is \"resolved\".',\n 'Use fallbackHints.legacySelector only when locatorStatus is \"unresolved\".',\n 'Do not invent or guess selectors.',\n 'Replace <LLM_GENERATE_MOCK_DATA> with safe mock data or environment-backed test data.',\n 'Generate code in the current repository\\'s test framework style.',\n ],\n };\n}\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// SHARED UTILITIES\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/**\n * Shallow-strips undefined fields from a plain object.\n * Keeps null values intact \u2014 null is semantically meaningful in some fields.\n */\nfunction stripUndefined(obj) {\n const result = { ...obj };\n for (const key of Object.keys(result)) {\n if (result[key] === undefined) {\n delete result[key];\n }\n }\n return result;\n}\n/**\n * Determines whether an action inherently needs a targeted element locator.\n */\nfunction actionNeedsTarget(action, step) {\n if (['click', 'input', 'submit', 'custom-control-open', 'custom-select', 'custom-menu-select', 'hover'].includes(action)) {\n return true;\n }\n if (action === 'scroll') {\n return !!step?.selector;\n }\n if (action === 'navigate') {\n return false;\n }\n // Default to true for any unknown/future actions to avoid hiding unresolved target problems\n return true;\n}\n/**\n * Maps internal assertions to the public generation contract shape.\n */\nfunction mapAssertion(assertion) {\n let type = 'custom';\n if (['url', 'element_visible', 'element_text', 'title', 'custom'].includes(assertion.type)) {\n type = assertion.type;\n }\n let source = undefined;\n if (assertion.source) {\n if (['url', 'url_change', 'navigation', 'outcome'].includes(assertion.source)) {\n source = 'outcome';\n }\n else if (assertion.source === 'anchor') {\n source = 'anchor';\n }\n else if (assertion.source === 'user_defined') {\n source = 'user_defined';\n }\n else {\n source = 'anchor'; // Safe default per requirements\n }\n }\n const mapped = {\n type,\n value: assertion.value,\n selector: assertion.selector,\n confidence: assertion.confidence,\n source,\n };\n return stripUndefined(mapped);\n}\nfunction shouldDropConflictingOutcomeUrlAssertion(assertion, nextStep) {\n if (assertion.type !== 'url')\n return false;\n // Bug fix: URL assertions from parseAnchorsToAssertions use 'url_change' or 'navigation'\n if (assertion.source && !['outcome', 'url_change', 'navigation'].includes(assertion.source))\n return false;\n if (!nextStep)\n return false;\n const nextPageUrl = typeof nextStep.pageUrl === 'string' ? nextStep.pageUrl : '';\n const nextNormalizedUrl = typeof nextStep.normalizedUrl === 'string' ? nextStep.normalizedUrl : '';\n if (!nextPageUrl && !nextNormalizedUrl)\n return false;\n return urlsClearlyConflict(assertion.value, nextPageUrl, nextNormalizedUrl);\n}\nfunction urlsClearlyConflict(assertionUrl, nextPageUrl, nextNormalizedUrl) {\n const assertionTrimmed = assertionUrl.trim();\n const nextPageTrimmed = (nextPageUrl ?? '').trim();\n const nextNormalizedTrimmed = (nextNormalizedUrl ?? '').trim();\n if (!assertionTrimmed || (!nextPageTrimmed && !nextNormalizedTrimmed)) {\n return false;\n }\n if (assertionTrimmed === nextPageTrimmed || assertionTrimmed === nextNormalizedTrimmed) {\n return false;\n }\n const parsedAssertion = tryParseUrl(assertionTrimmed);\n const parsedNextPage = tryParseUrl(nextPageTrimmed);\n const parsedNextNormalized = tryParseUrl(nextNormalizedTrimmed);\n if (parsedAssertion && parsedNextPage && urlsMatch(parsedAssertion, parsedNextPage)) {\n return false;\n }\n if (parsedAssertion && parsedNextNormalized && urlsMatch(parsedAssertion, parsedNextNormalized)) {\n return false;\n }\n if (parsedAssertion && (parsedNextPage || parsedNextNormalized)) {\n const comparableNext = (parsedNextPage ?? parsedNextNormalized);\n return !urlsMatch(parsedAssertion, comparableNext);\n }\n return false;\n}\nfunction urlsMatch(left, right) {\n if (left.href === right.href)\n return true;\n if (left.pathname === right.pathname && left.search === right.search)\n return true;\n return false;\n}\nfunction tryParseUrl(value) {\n if (!value)\n return null;\n try {\n return new URL(value);\n }\n catch {\n return null;\n }\n}\n", "\"use strict\";\n/**\n * packages/codegen/src/codegen.service.ts\n *\n * The AIR Code Generation Service \u00E2\u20AC\u201D \"The Compressor\".\n *\n * Reads raw recording data from SQLite and produces a compressed,\n * intent-driven CodegenSession (the Semantic Timeline) that can be\n * fed directly to an AI without blowing up the context window.\n *\n * What gets stripped:\n * - Raw HTML snapshots (can be 100KB-500KB each)\n * - Network events (not actionable in tests)\n * - Scroll events (excluded by default \u00E2\u20AC\u201D noise for most tests)\n * - Hover events (excluded by default)\n * - Input heartbeats (trigger=input:progress \u00E2\u20AC\u201D already filtered at DB level)\n * - Duplicate edges (deduped by fingerprint hash)\n * - Pre-navigation UI setup clicks (hamburger expands, container taps) \u00E2\u2020\u0090 Fix B\n * - Assertions shared across 2+ destination pages (layout chrome) \u00E2\u2020\u0090 Fix C\n *\n * What gets preserved:\n * - Selectors + selector priority (how to find the element)\n * - Intents (why the user interacted \u00E2\u20AC\u201D drives self-healing)\n * - Outcome types (navigation/no_change \u00E2\u20AC\u201D drives waitForURL/assertions)\n * - Confidence + sample size (reliability signal for the AI)\n * - Anchor fingerprints from destination nodes (drives assertions)\n * - Page URLs (drives page.goto() when needed)\n *\n * Output size target: < 8KB per session for a typical 10-step flow.\n * This fits comfortably in any AI context window alongside the prompt.\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CodegenService = exports.SELECTOR_RANK_MAP = void 0;\nexports.rankFromPriority = rankFromPriority;\nexports.getSourceNodeId = getSourceNodeId;\nexports.normalizeSelectorPriority = normalizeSelectorPriority;\nexports.suppressPreNavSetupClicks = suppressPreNavSetupClicks;\nexports.collapseRedundantClickBeforeInput = collapseRedundantClickBeforeInput;\nexports.compressDuplicateSubmitAfterClick = compressDuplicateSubmitAfterClick;\nexports.compressCustomControlOpenSelectPairs = compressCustomControlOpenSelectPairs;\nexports.deduplicateSharedAssertions = deduplicateSharedAssertions;\nconst crypto = __importStar(require(\"crypto\"));\nconst snapshot_selector_1 = require(\"./snapshot-selector\");\nconst flow_review_service_1 = require(\"./flow-review.service\");\nconst flow_review_formatter_1 = require(\"./flow-review.formatter\");\nconst assertion_stub_1 = require(\"./assertion.stub\");\nconst selector_spec_1 = require(\"./selector-spec\");\nconst shared_1 = require(\"@air/shared\");\nconst sqlite_client_1 = require(\"./sqlite-client\");\nconst runtime_schemas_1 = require(\"./runtime-schemas\");\nconst generation_builder_1 = require(\"./generation-builder\");\nexports.SELECTOR_RANK_MAP = {\n 'data-testid': 1,\n id: 2,\n attribute: 3,\n class: 7,\n text: 8,\n path: 10,\n xpath: 10,\n other: 10,\n chained: 10,\n unknown: 10,\n};\nconst MAX_RECORDED_SELECTOR_CANDIDATES = 8;\nconst VALID_CAPTURED_SELECTOR_CANDIDATE_ENGINES = new Set([\n 'css',\n 'text',\n 'xpath',\n]);\nconst VALID_CAPTURED_SELECTOR_CANDIDATE_FAMILIES = new Set([\n 'primary',\n 'test-id',\n 'id',\n 'name',\n 'placeholder',\n 'aria-label',\n 'href',\n 'role-attr',\n 'text',\n 'class',\n 'parent-scoped-css',\n 'tight-container-css',\n]);\nconst VALID_CAPTURED_SELECTOR_CANDIDATE_STRENGTHS = new Set([\n 'strong',\n 'medium',\n 'weak',\n]);\nfunction escapeCssString(value) {\n return value\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, '\\\\A ')\n .replace(/\\r/g, '\\\\D ')\n .replace(/\\t/g, '\\\\9 ');\n}\nfunction rankFromPriority(priority) {\n return exports.SELECTOR_RANK_MAP[priority] ?? 10;\n}\nfunction getStepNormalizedUrl(step) {\n return step.normalizedUrl ?? (0, shared_1.normalizeUrl)(step.pageUrl);\n}\nfunction getSourceNodeId(event, edge) {\n return event?.nodeId ?? edge?.fromNodeId ?? edge?.toNodeId ?? null;\n}\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\n// ACTION TYPES THAT PRODUCE MEANINGFUL TEST STEPS\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\nconst ACTIONABLE_TYPES = new Set(['click', 'input', 'submit', 'custom-control-open', 'custom-select', 'custom-menu-select']);\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\n// FIX B \u00E2\u20AC\u201D FRAGILE SELECTOR PRIORITIES\n// Steps with these priorities AND immediate_action outcome are candidates for\n// pre-navigation setup suppression (hamburger expands, container taps, etc.)\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\nconst FRAGILE_PRIORITIES = new Set(['class', 'path', 'xpath']);\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\n// ANCHOR PARSING\n// Anchors are stored as JSON arrays of strings like:\n// [\"URL:/dashboard\", \"BUTTON:text=Log out\", \"H1:text=Congratulations\"]\n// We parse these into CodegenAssertions.\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\nfunction parseAnchorsToAssertions(anchorsJson, pageUrl, confidence) {\n const assertions = [];\n // Always assert the URL when we have one\n if (pageUrl) {\n assertions.push({\n type: 'url',\n value: pageUrl,\n source: 'url_change',\n confidence,\n });\n }\n if (!anchorsJson)\n return assertions;\n let anchors;\n try {\n anchors = JSON.parse(anchorsJson);\n }\n catch {\n return assertions;\n }\n for (const anchor of anchors) {\n // Skip URL anchors \u00E2\u20AC\u201D already handled above\n if (anchor.startsWith('URL:'))\n continue;\n // Parse format: \"TAG:attr=value\" e.g. \"BUTTON:text=Log out\"\n const colonIdx = anchor.indexOf(':');\n if (colonIdx === -1)\n continue;\n const tag = anchor.slice(0, colonIdx).toLowerCase();\n const rest = anchor.slice(colonIdx + 1);\n const eqIdx = rest.indexOf('=');\n if (eqIdx === -1)\n continue;\n const attrType = rest.slice(0, eqIdx);\n const attrVal = rest.slice(eqIdx + 1);\n if (!attrVal || attrVal.length < 2)\n continue;\n let assertionType = 'element_visible';\n let selector = '';\n const safeVal = escapeCssString(attrVal);\n switch (attrType) {\n case 'text':\n selector = `${tag}:has-text(\"${safeVal}\")`;\n break;\n case 'testid':\n selector = `[data-testid=\"${safeVal}\"]`;\n break;\n case 'id': {\n const safeId = typeof CSS !== 'undefined' && typeof CSS.escape === 'function'\n ? CSS.escape(attrVal)\n : escapeCssString(attrVal);\n selector = `#${safeId}`;\n break;\n }\n case 'name':\n selector = `[name=\"${safeVal}\"]`;\n break;\n case 'role':\n selector = `[role=\"${safeVal}\"]`;\n break;\n default:\n selector = `${tag}[${attrType}=\"${safeVal}\"]`;\n }\n assertions.push({\n type: assertionType,\n value: attrVal,\n selector,\n source: 'anchor',\n confidence: confidence * 0.9,\n });\n }\n return assertions;\n}\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\n// SELECTOR EXTRACTION\n// Fingerprint is stored as JSON in event payload.\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\nfunction logFingerprintWarning(code, details) {\n console.warn(code, details);\n}\nfunction normalizeFingerprintAttributes(raw) {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw))\n return undefined;\n const source = raw;\n const normalized = {};\n for (const [key, value] of Object.entries(source)) {\n if (typeof value === 'string' && value.length > 0) {\n normalized[key] = value;\n }\n }\n const aliasPairs = [\n ['ariaLabel', 'aria-label'],\n ['dataTestId', 'data-testid'],\n ['dataCy', 'data-cy'],\n ['dataQa', 'data-qa'],\n ];\n for (const [camelKey, kebabKey] of aliasPairs) {\n const camelValue = normalized[camelKey];\n const kebabValue = normalized[kebabKey];\n if (camelValue && !kebabValue)\n normalized[kebabKey] = camelValue;\n if (kebabValue && !camelValue)\n normalized[camelKey] = kebabValue;\n }\n return Object.keys(normalized).length > 0 ? normalized : undefined;\n}\nfunction normalizeNonNegativeInteger(raw) {\n if (raw === null)\n return null;\n if (typeof raw !== 'number' || !Number.isInteger(raw) || raw < 0)\n return undefined;\n return raw;\n}\nfunction normalizeTargetIdentitySource(raw) {\n return raw === 'pageState' || raw === 'pageSnapshot' || raw === 'interactionContext'\n ? raw\n : undefined;\n}\nfunction normalizeTargetIdentityStatus(raw) {\n return (raw === 'emitted' ||\n raw === 'target-not-element' ||\n raw === 'target-detached' ||\n raw === 'target-not-in-snapshot' ||\n raw === 'shadow-not-serialized' ||\n raw === 'cross-origin-frame' ||\n raw === 'unsupported')\n ? raw\n : undefined;\n}\nfunction normalizeCapturedSelectorCandidate(raw) {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw))\n return null;\n const source = raw;\n const selector = typeof source.selector === 'string' ? source.selector.trim() : '';\n const engine = typeof source.engine === 'string' ? source.engine : undefined;\n const family = typeof source.family === 'string' ? source.family : undefined;\n const strength = typeof source.strength === 'string' ? source.strength : undefined;\n const captureSource = typeof source.source === 'string' ? source.source : undefined;\n if (!selector)\n return null;\n if (!engine || !VALID_CAPTURED_SELECTOR_CANDIDATE_ENGINES.has(engine)) {\n return null;\n }\n if (!family || !VALID_CAPTURED_SELECTOR_CANDIDATE_FAMILIES.has(family)) {\n return null;\n }\n if (!strength || !VALID_CAPTURED_SELECTOR_CANDIDATE_STRENGTHS.has(strength)) {\n return null;\n }\n if (captureSource !== 'capture')\n return null;\n const warningCodes = Array.isArray(source.warningCodes)\n ? Array.from(new Set(source.warningCodes\n .filter((code) => typeof code === 'string')\n .map(code => code.trim())\n .filter(Boolean)))\n : undefined;\n const candidate = {\n selector,\n engine: engine,\n family: family,\n strength: strength,\n source: 'capture',\n };\n if (typeof source.isPrimary === 'boolean')\n candidate.isPrimary = source.isPrimary;\n if (typeof source.usesDynamicClass === 'boolean')\n candidate.usesDynamicClass = source.usesDynamicClass;\n if (typeof source.usesIndex === 'boolean')\n candidate.usesIndex = source.usesIndex;\n const matchCount = normalizeNonNegativeInteger(source.matchCount);\n if (matchCount !== undefined)\n candidate.matchCount = matchCount;\n const visibleMatchCount = normalizeNonNegativeInteger(source.visibleMatchCount);\n if (visibleMatchCount !== undefined)\n candidate.visibleMatchCount = visibleMatchCount;\n const positionInAllMatches = normalizeNonNegativeInteger(source.positionInAllMatches);\n if (positionInAllMatches !== undefined)\n candidate.positionInAllMatches = positionInAllMatches;\n const positionInVisibleMatches = normalizeNonNegativeInteger(source.positionInVisibleMatches);\n if (positionInVisibleMatches !== undefined)\n candidate.positionInVisibleMatches = positionInVisibleMatches;\n if (warningCodes && warningCodes.length > 0) {\n candidate.warningCodes = warningCodes;\n }\n return candidate;\n}\nfunction normalizeSelectorCandidates(raw) {\n if (!Array.isArray(raw))\n return undefined;\n const normalized = [];\n const seen = new Set();\n for (const entry of raw) {\n const candidate = normalizeCapturedSelectorCandidate(entry);\n if (!candidate)\n continue;\n const dedupeKey = `${candidate.engine}::${candidate.family}::${candidate.selector}`;\n if (seen.has(dedupeKey))\n continue;\n seen.add(dedupeKey);\n normalized.push(candidate);\n if (normalized.length >= MAX_RECORDED_SELECTOR_CANDIDATES)\n break;\n }\n return normalized.length > 0 ? normalized : undefined;\n}\nfunction normalizeSelectorAmbiguity(raw) {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw))\n return undefined;\n const source = raw;\n const matchCount = typeof source.matchCount === 'number' ? source.matchCount : undefined;\n const visibleMatchCount = typeof source.visibleMatchCount === 'number' ? source.visibleMatchCount : undefined;\n const isUnique = typeof source.isUnique === 'boolean' ? source.isUnique : undefined;\n const isAmbiguous = typeof source.isAmbiguous === 'boolean' ? source.isAmbiguous : undefined;\n if (typeof source.originalSelector !== 'string' ||\n matchCount == null ||\n visibleMatchCount == null ||\n isUnique == null ||\n isAmbiguous == null) {\n return undefined;\n }\n return {\n originalSelector: source.originalSelector,\n originalPriority: typeof source.originalPriority === 'string' ? source.originalPriority : undefined,\n matchCount,\n visibleMatchCount,\n positionInMatches: source.positionInMatches === null\n ? null\n : (typeof source.positionInMatches === 'number' ? source.positionInMatches : undefined),\n isUnique,\n isAmbiguous,\n };\n}\nfunction normalizeBoundedFieldContext(raw) {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw))\n return undefined;\n const source = raw;\n const rawCandidates = Array.isArray(source.boundedContainerSelectorCandidates)\n ? source.boundedContainerSelectorCandidates\n : [];\n const boundedContainerSelectorCandidates = rawCandidates\n .map(candidate => {\n if (!candidate || typeof candidate !== 'object' || Array.isArray(candidate))\n return null;\n const record = candidate;\n if (typeof record.selector !== 'string' || typeof record.kind !== 'string')\n return null;\n return {\n selector: record.selector,\n kind: record.kind,\n isClean: typeof record.isClean === 'boolean' ? record.isClean : undefined,\n };\n })\n .filter((candidate) => candidate !== null);\n const fieldRelation = source.fieldRelation === null\n ? null\n : (source.fieldRelation === 'label-for' ||\n source.fieldRelation === 'wrapped-label' ||\n source.fieldRelation === 'aria-labelledby' ||\n source.fieldRelation === 'sibling-label' ||\n source.fieldRelation === 'bounded-container'\n ? source.fieldRelation\n : undefined);\n const targetControlKind = source.targetControlKind === null\n ? null\n : (source.targetControlKind === 'input' ||\n source.targetControlKind === 'textarea' ||\n source.targetControlKind === 'select' ||\n source.targetControlKind === 'custom-trigger' ||\n source.targetControlKind === 'combobox' ||\n source.targetControlKind === 'searchbox' ||\n source.targetControlKind === 'contenteditable' ||\n source.targetControlKind === 'unknown'\n ? source.targetControlKind\n : undefined);\n return {\n fieldLabelText: source.fieldLabelText === null\n ? null\n : (typeof source.fieldLabelText === 'string' ? source.fieldLabelText : undefined),\n fieldRelation,\n targetControlKind,\n visibleControlCountInContainer: source.visibleControlCountInContainer === null\n ? null\n : (typeof source.visibleControlCountInContainer === 'number' ? source.visibleControlCountInContainer : undefined),\n targetIndexWithinContainer: source.targetIndexWithinContainer === null\n ? null\n : (typeof source.targetIndexWithinContainer === 'number' ? source.targetIndexWithinContainer : undefined),\n boundedContainerSummary: source.boundedContainerSummary === null\n ? null\n : (typeof source.boundedContainerSummary === 'string' ? source.boundedContainerSummary : undefined),\n boundedContainerSelectorCandidates: boundedContainerSelectorCandidates.length > 0 ? boundedContainerSelectorCandidates : undefined,\n cleanParentSelector: source.cleanParentSelector === null\n ? null\n : (typeof source.cleanParentSelector === 'string' ? source.cleanParentSelector : undefined),\n cleanChildSelector: source.cleanChildSelector === null\n ? null\n : (typeof source.cleanChildSelector === 'string' ? source.cleanChildSelector : undefined),\n containerSelector: source.containerSelector === null\n ? null\n : (typeof source.containerSelector === 'string' ? source.containerSelector : undefined),\n competingControlCount: source.competingControlCount === null\n ? null\n : (typeof source.competingControlCount === 'number' ? source.competingControlCount : undefined),\n duplicateLabelCount: source.duplicateLabelCount === null\n ? null\n : (typeof source.duplicateLabelCount === 'number' ? source.duplicateLabelCount : undefined),\n isValid: typeof source.isValid === 'boolean' ? source.isValid : undefined,\n blockedReason: source.blockedReason === null\n ? null\n : (typeof source.blockedReason === 'string' ? source.blockedReason : undefined),\n };\n}\nfunction normalizeAccessibilityEvidence(raw) {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw))\n return undefined;\n const source = raw;\n const validSources = [\n 'aria-label',\n 'aria-labelledby',\n 'label-for',\n 'wrapped-label',\n 'button-text',\n 'link-text',\n 'placeholder',\n 'title',\n 'role-text',\n 'none',\n ];\n return {\n role: typeof source.role === 'string' ? source.role : (source.role === null ? null : undefined),\n accessibleName: typeof source.accessibleName === 'string' ? source.accessibleName : (source.accessibleName === null ? null : undefined),\n accessibleNameSource: (validSources.includes(source.accessibleNameSource)\n ? source.accessibleNameSource\n : 'none'),\n labelText: typeof source.labelText === 'string' ? source.labelText : (source.labelText === null ? null : undefined),\n labelledByIds: Array.isArray(source.labelledByIds)\n ? source.labelledByIds.filter((id) => typeof id === 'string')\n : undefined,\n isNativeLabelAssociation: typeof source.isNativeLabelAssociation === 'boolean' ? source.isNativeLabelAssociation : undefined,\n };\n}\nfunction normalizeFingerprint(raw) {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw))\n return null;\n const fingerprint = raw;\n const attributes = normalizeFingerprintAttributes(fingerprint.attributes);\n const contextRaw = fingerprint.context && typeof fingerprint.context === 'object' && !Array.isArray(fingerprint.context)\n ? fingerprint.context\n : undefined;\n const normalized = {\n selector: typeof fingerprint.selector === 'string' ? fingerprint.selector : undefined,\n selectorPriority: typeof fingerprint.selectorPriority === 'string' ? fingerprint.selectorPriority : undefined,\n selectorRank: typeof fingerprint.selectorRank === 'number' ? fingerprint.selectorRank : undefined,\n tagName: typeof fingerprint.tagName === 'string' ? fingerprint.tagName : undefined,\n parentSelector: fingerprint.parentSelector === null\n ? null\n : (typeof fingerprint.parentSelector === 'string' ? fingerprint.parentSelector : undefined),\n textExcerpt: fingerprint.textExcerpt === null\n ? null\n : (typeof fingerprint.textExcerpt === 'string' ? fingerprint.textExcerpt : undefined),\n context: contextRaw\n ? {\n parentTag: contextRaw.parentTag === null\n ? null\n : (typeof contextRaw.parentTag === 'string' ? contextRaw.parentTag : undefined),\n nearestContainerTag: contextRaw.nearestContainerTag === null\n ? null\n : (typeof contextRaw.nearestContainerTag === 'string' ? contextRaw.nearestContainerTag : undefined),\n }\n : undefined,\n attributes,\n selectorCandidates: normalizeSelectorCandidates(fingerprint.selectorCandidates),\n selectorAmbiguity: normalizeSelectorAmbiguity(fingerprint.selectorAmbiguity),\n boundedFieldContext: normalizeBoundedFieldContext(fingerprint.boundedFieldContext),\n accessibilityEvidence: normalizeAccessibilityEvidence(fingerprint.accessibilityEvidence),\n attributesHash: typeof fingerprint.attributesHash === 'string' ? fingerprint.attributesHash : undefined,\n targetNodeId: typeof fingerprint.targetNodeId === 'string' && fingerprint.targetNodeId.trim().length > 0\n ? fingerprint.targetNodeId.trim()\n : undefined,\n targetIdentitySource: normalizeTargetIdentitySource(fingerprint.targetIdentitySource),\n targetIdentityStatus: normalizeTargetIdentityStatus(fingerprint.targetIdentityStatus),\n };\n if (fingerprint.attributes != null &&\n (typeof fingerprint.attributes !== 'object' || Array.isArray(fingerprint.attributes))) {\n logFingerprintWarning('FINGERPRINT_ATTRIBUTE_DROPPED_DOWNSTREAM', {\n reason: 'attributes-unparseable',\n rawType: typeof fingerprint.attributes,\n });\n }\n const expectedAliases = [\n ['ariaLabel', 'aria-label'],\n ['dataTestId', 'data-testid'],\n ['dataCy', 'data-cy'],\n ['dataQa', 'data-qa'],\n ];\n for (const [camelKey, kebabKey] of expectedAliases) {\n const source = fingerprint.attributes;\n const sourceHasValue = typeof source?.[camelKey] === 'string' || typeof source?.[kebabKey] === 'string';\n const normalizedHasValue = typeof attributes?.[camelKey] === 'string' || typeof attributes?.[kebabKey] === 'string';\n if (sourceHasValue && !normalizedHasValue) {\n logFingerprintWarning('FINGERPRINT_ATTRIBUTE_DROPPED_DOWNSTREAM', {\n attribute: camelKey,\n alias: kebabKey,\n });\n }\n }\n return normalized;\n}\nfunction extractFingerprint(payloadJson) {\n if (!payloadJson)\n return null;\n try {\n const payload = JSON.parse(payloadJson);\n if (payload.fingerprint && typeof payload.fingerprint === 'object' && !Array.isArray(payload.fingerprint)) {\n const rawFingerprint = payload.fingerprint;\n for (const field of ['selector', 'selectorPriority', 'attributes']) {\n if (rawFingerprint[field] == null) {\n logFingerprintWarning('FINGERPRINT_ATTRIBUTE_MISSING_AT_CAPTURE', {\n field,\n });\n }\n }\n }\n const fingerprint = normalizeFingerprint(payload.fingerprint);\n if (payload.fingerprint && !fingerprint) {\n logFingerprintWarning('FINGERPRINT_ATTRIBUTE_DROPPED_DOWNSTREAM', {\n reason: 'fingerprint-unparseable',\n });\n }\n return fingerprint;\n }\n catch {\n return null;\n }\n}\nfunction normalizeSelectorPriority(raw) {\n const valid = [\n 'data-testid', 'id', 'attribute', 'class', 'path', 'text', 'xpath', 'chained', 'other',\n ];\n return (valid.includes(raw) ? raw : 'unknown');\n}\nfunction extractValue(payloadJson, eventType) {\n if (!payloadJson)\n return undefined;\n try {\n const payload = JSON.parse(payloadJson);\n if ((eventType === 'custom-select' || eventType === 'custom-menu-select') && payload.selection?.label) {\n return payload.selection.label;\n }\n if (eventType === 'input') {\n if (payload.inputValueMasked) {\n if (payload.inputValueMasked === '[REDACTED]') {\n return '<LLM_GENERATE_MOCK_DATA>';\n }\n return payload.inputValueMasked;\n }\n if (payload.inputLength)\n return '*'.repeat(Math.min(payload.inputLength, 20));\n }\n return undefined;\n }\n catch {\n return undefined;\n }\n}\nfunction extractControlSignature(payloadJson) {\n if (!payloadJson)\n return undefined;\n try {\n const payload = JSON.parse(payloadJson);\n const candidates = [\n payload?.interactionContext?.controlSignature,\n payload?.pageSnapshot?.controlSignature,\n payload?.pageState?.controlSignature,\n payload?.controlSignature,\n ];\n for (const candidate of candidates) {\n if (typeof candidate === 'string' && candidate.length > 0) {\n return candidate;\n }\n }\n return undefined;\n }\n catch {\n return undefined;\n }\n}\nfunction extractNestedContext(payloadJson) {\n if (!payloadJson)\n return undefined;\n try {\n const payload = JSON.parse(payloadJson);\n const nestedContext = payload?.nestedContext;\n if (!nestedContext || typeof nestedContext !== 'object')\n return undefined;\n return nestedContext;\n }\n catch {\n return undefined;\n }\n}\nfunction extractCustomControlFamily(payloadJson) {\n if (!payloadJson)\n return undefined;\n try {\n const payload = JSON.parse(payloadJson);\n const familyCandidates = [\n payload?.controlFamily,\n payload?.meta?.containerRole,\n ];\n for (const candidate of familyCandidates) {\n if (typeof candidate === 'string' && candidate.length > 0) {\n return candidate;\n }\n }\n return undefined;\n }\n catch {\n return undefined;\n }\n}\nfunction buildRecordedSelectorSpecFromFingerprint(selector, selectorPriority, selectorRank) {\n const normalizedSelector = (selector || '').trim();\n if (!normalizedSelector)\n return undefined;\n const normalizedPriority = normalizeSelectorPriority(selectorPriority);\n const rank = selectorRank ?? rankFromPriority(normalizedPriority);\n return (0, selector_spec_1.buildSelectorSpec)({\n selector: normalizedSelector,\n selectorPriority: normalizedPriority,\n source: 'interceptor',\n proofLevel: 'recorded',\n rank,\n });\n}\nfunction extractCustomControlEvidence(payloadJson, eventType) {\n if (!payloadJson)\n return {};\n try {\n const payload = JSON.parse(payloadJson);\n const fingerprint = normalizeFingerprint(payload?.fingerprint);\n const triggerFingerprint = normalizeFingerprint(payload?.triggerFingerprint);\n const triggerSelector = triggerFingerprint?.selector ??\n (typeof payload?.meta?.triggerSelector === 'string' && payload.meta.triggerSelector.length > 0\n ? payload.meta.triggerSelector\n : undefined);\n const triggerSelectorPriority = normalizeSelectorPriority(triggerFingerprint?.selectorPriority) ??\n (triggerSelector ? 'unknown' : undefined);\n const optionText = payload?.selection?.label ??\n payload?.selection?.value ??\n fingerprint?.textExcerpt ??\n undefined;\n const optionValue = payload?.selection?.value ??\n payload?.selection?.label ??\n fingerprint?.textExcerpt ??\n undefined;\n if (eventType === 'custom-control-open') {\n return {\n controlFamily: extractCustomControlFamily(payloadJson),\n triggerFingerprint: fingerprint ?? undefined,\n triggerSelector: fingerprint?.selector,\n triggerSelectorPriority: normalizeSelectorPriority(fingerprint?.selectorPriority),\n triggerSelectorSpec: buildRecordedSelectorSpecFromFingerprint(fingerprint?.selector, fingerprint?.selectorPriority, fingerprint?.selectorRank),\n };\n }\n if (eventType === 'custom-select' || eventType === 'custom-menu-select') {\n return {\n controlFamily: extractCustomControlFamily(payloadJson),\n triggerFingerprint: triggerFingerprint ?? undefined,\n triggerSelector,\n triggerSelectorPriority: triggerSelector\n ? normalizeSelectorPriority(triggerFingerprint?.selectorPriority)\n : undefined,\n triggerSelectorSpec: buildRecordedSelectorSpecFromFingerprint(triggerFingerprint?.selector ?? triggerSelector, triggerFingerprint?.selectorPriority, triggerFingerprint?.selectorRank),\n optionSelector: fingerprint?.selector,\n optionText,\n optionValue,\n optionSelectorSpec: buildRecordedSelectorSpecFromFingerprint(fingerprint?.selector, fingerprint?.selectorPriority, fingerprint?.selectorRank),\n };\n }\n return {};\n }\n catch {\n return {};\n }\n}\nfunction extractTabId(payloadJson) {\n if (!payloadJson)\n return undefined;\n try {\n const payload = JSON.parse(payloadJson);\n return typeof payload?.tabId === 'string' && payload.tabId.length > 0\n ? payload.tabId\n : undefined;\n }\n catch {\n return undefined;\n }\n}\nfunction extractNormalizedUrl(payloadJson, fallbackPageUrl) {\n if (payloadJson) {\n try {\n const payload = JSON.parse(payloadJson);\n if (typeof payload?.normalizedUrl === 'string' && payload.normalizedUrl.length > 0) {\n return payload.normalizedUrl;\n }\n }\n catch {\n // Fall through to pageUrl fallback\n }\n }\n if (fallbackPageUrl) {\n return (0, shared_1.normalizeUrl)(fallbackPageUrl);\n }\n return undefined;\n}\nfunction computeFpHash(fp, eventType) {\n const raw = [\n fp?.selector || '',\n fp?.textExcerpt || '',\n fp?.attributesHash || '',\n eventType,\n ].join('|');\n return crypto.createHash('sha256').update(raw).digest('hex');\n}\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\n// FIX A \u00E2\u20AC\u201D INTENT FROM textExcerpt\n//\n// Previously intent was synthesised entirely from the selector string:\n// click_.oxd_main_menu_item (same for Admin, PIM and Leave links)\n//\n// The textExcerpt in the fingerprint holds the visible label the user clicked\n// (\"Admin\", \"PIM\", \"Leave\"). Using it makes intents unique and human-readable,\n// which also produces better selector guidance for the AI code generator.\n//\n// Priority order:\n// 1. textExcerpt (visible label \u00E2\u20AC\u201D most meaningful)\n// 2. aria-label attribute (accessibility label)\n// 3. title/alt attribute (icon and tooltip labels)\n// 4. name attribute (form field names)\n// 5. selector string (last resort)\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\nfunction buildIntent(eventType, fp) {\n const candidates = [\n fp.textExcerpt,\n fp.attributes?.['ariaLabel'],\n fp.attributes?.['aria-label'],\n fp.attributes?.['fieldLabelText'],\n fp.attributes?.['associatedLabelText'],\n fp.attributes?.['wrappedLabelText'],\n fp.attributes?.['labelledByText'],\n fp.attributes?.['placeholder'],\n fp.attributes?.['title'],\n fp.attributes?.['alt'],\n fp.attributes?.['name'],\n ];\n const label = candidates.find(c => typeof c === 'string' && c.trim().length > 1);\n const source = label ?? fp.selector ?? '';\n const safeName = source\n .trim()\n .replace(/[^a-zA-Z0-9]/g, '_')\n .replace(/_+/g, '_')\n .replace(/^_+|_+$/g, '')\n .substring(0, 30);\n return safeName ? `${eventType}_${safeName}` : eventType;\n}\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\n// FIX B \u00E2\u20AC\u201D PRE-NAVIGATION SETUP CLICK SUPPRESSION\n//\n// SPA sidebar navigation produces noise clicks before the real nav trigger:\n// 8. click .oxd-icon (immediate_action, fragile class selector)\n// 9. click div > div:nth-of-type (immediate_action, fragile path selector)\n// 10. click .oxd-main-menu-item (navigation) \u00E2\u2020\u0090 the only step that matters\n//\n// A step is suppressed when ALL three conditions hold:\n// 1. outcomeType is 'immediate_action' (explicitly did not change page state)\n// 2. selectorPriority is fragile (class / path / xpath)\n// 3. Within the next LOOKAHEAD_WINDOW steps on the same page URL, there is a\n// navigation step \u00E2\u20AC\u201D OR there are no further steps on this page at all\n// (trailing setup clicks with no completion are equally useless).\n//\n// Steps that do NOT meet all three conditions are always kept, so legitimate\n// class-selector clicks that actually change state (e.g. toggling a tab that\n// stays on the same page with state_refresh outcome) are never suppressed.\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\nconst LOOKAHEAD_WINDOW = 4; // scan up to 4 steps ahead for a navigation trigger\nfunction suppressPreNavSetupClicks(steps, options = {}) {\n const suppress = new Set(); // indices to remove\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i];\n if (options.preserveCompoundOpenSteps && step.action === 'custom-control-open') {\n continue;\n }\n // Condition 1: must be immediate_action\n if (step.outcomeType !== 'immediate_action')\n continue;\n // Condition 2: must have a fragile selector\n if (!FRAGILE_PRIORITIES.has(step.selectorPriority))\n continue;\n // Condition 3a: look ahead within the window on the same page\n let foundNavAhead = false;\n let foundAnyStepOnSamePage = false;\n const stepUrl = getStepNormalizedUrl(step);\n for (let j = i + 1; j < steps.length && j <= i + LOOKAHEAD_WINDOW; j++) {\n const nextUrl = getStepNormalizedUrl(steps[j]);\n if (nextUrl !== stepUrl)\n break; // left the page\n foundAnyStepOnSamePage = true;\n if (steps[j].outcomeType === 'navigation') {\n foundNavAhead = true;\n break;\n }\n }\n // Condition 3b: also suppress if this is the last meaningful step on the\n // page (no further steps exist on this URL \u00E2\u20AC\u201D trailing noise).\n const isTrailing = !foundAnyStepOnSamePage ||\n steps.slice(i + 1).every(s => getStepNormalizedUrl(s) !== stepUrl);\n if (foundNavAhead || isTrailing) {\n suppress.add(i);\n }\n }\n return steps.filter((_, i) => !suppress.has(i));\n}\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\n// FIX C \u00E2\u20AC\u201D SHARED ASSERTION DEDUPLICATION\n//\n// scanPageAnchors() captures global nav/sidebar elements (Add, Reset, Search,\n// Upgrade, checkbox, text input) that appear identically on every page of the\n// app. These produce the same assertion set on every navigation step, making\n// them useless as page-specific checks.\n//\n// Strategy: count how many distinct destination pages each anchor assertion\n// selector appears on. Any selector present on 2+ destination pages is layout\n// chrome \u00E2\u20AC\u201D strip it. URL assertions are always unique so they are never\n// touched. The result: each nav step keeps only the assertions that are\n// genuinely specific to its destination page.\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\nfunction isLikelyTextEntryStep(step) {\n if (step.action !== 'input')\n return false;\n const selector = (step.selector || '').toLowerCase();\n const tagName = (step.fingerprint?.tagName || '').toLowerCase();\n if (['input', 'textarea', 'select'].includes(tagName))\n return true;\n if (selector.startsWith('input') || selector.startsWith('textarea') || selector.startsWith('select')) {\n return true;\n }\n if (/\\[(?:name|placeholder|type)=/i.test(selector))\n return true;\n return false;\n}\n/**\n * Collapses redundant focus-click steps when the next step is an input on the\n * same element in the same page context.\n */\nfunction collapseRedundantClickBeforeInput(steps) {\n const out = [];\n for (let i = 0; i < steps.length; i++) {\n const current = steps[i];\n const next = steps[i + 1];\n const shouldCollapse = current?.action === 'click' &&\n next?.action === 'input' &&\n current.selector === next.selector &&\n getStepNormalizedUrl(current) === getStepNormalizedUrl(next) &&\n (current.sourceNodeId ?? null) === (next.sourceNodeId ?? null) &&\n !current.navigatesTo &&\n (current.assertions?.length ?? 0) === 0 &&\n current.outcomeType !== 'navigation' &&\n isLikelyTextEntryStep(next);\n if (shouldCollapse) {\n continue;\n }\n out.push(current);\n }\n return out;\n}\nconst DUPLICATE_SUBMIT_AFTER_CLICK_MAX_MS = 1000;\nconst CUSTOM_CONTROL_OPEN_SELECT_MAX_MS = 1500;\nfunction assertionKey(assertion) {\n return JSON.stringify({\n type: assertion.type,\n value: assertion.value,\n selector: assertion.selector ?? null,\n source: assertion.source,\n confidence: assertion.confidence,\n });\n}\nfunction userAssertionKey(assertion) {\n return JSON.stringify({\n assertionIntent: assertion.assertionIntent,\n selector: assertion.selector,\n expectedValue: assertion.expectedValue ?? null,\n checkType: assertion.checkType,\n });\n}\nfunction mergeAssertions(primary, absorbed) {\n const merged = [];\n const seen = new Set();\n for (const assertion of [...primary, ...absorbed]) {\n const key = assertionKey(assertion);\n if (seen.has(key))\n continue;\n seen.add(key);\n merged.push(assertion);\n }\n return merged;\n}\nfunction mergeUserAssertions(primary, absorbed) {\n const merged = [];\n const seen = new Set();\n for (const assertion of [...primary, ...absorbed]) {\n const key = userAssertionKey(assertion);\n if (seen.has(key))\n continue;\n seen.add(key);\n merged.push(assertion);\n }\n return merged;\n}\nfunction containsSubmitLikeText(value) {\n if (!value)\n return false;\n return /\\b(submit|search|save|login|log\\s*in|sign\\s*in|register|create\\s+account|continue|next|apply|send|confirm)\\b/i\n .test(value);\n}\nfunction isMeaningfulSubmitControl(step) {\n if (step.action !== 'click')\n return false;\n const selector = (step.selector ?? '').toLowerCase();\n const tagName = (step.fingerprint?.tagName ?? '').toLowerCase();\n const role = (step.fingerprint?.attributes?.role ?? '').toLowerCase();\n const type = (step.fingerprint?.attributes?.type ?? '').toLowerCase();\n if (/^(button|input)\\[type=[\"']?submit[\"']?\\]/i.test(selector))\n return true;\n if ((tagName === 'button' || tagName === 'input') && type === 'submit')\n return true;\n const labelCandidates = [\n step.fingerprint?.textExcerpt ?? undefined,\n step.fingerprint?.attributes?.value,\n step.fingerprint?.attributes?.title,\n step.fingerprint?.attributes?.ariaLabel,\n step.fingerprint?.attributes?.['aria-label'],\n step.intent.replace(/^click_/, '').replace(/_/g, ' '),\n ];\n const isButtonLike = tagName === 'button' ||\n tagName === 'input' ||\n role === 'button' ||\n selector.startsWith('button') ||\n selector.startsWith('input');\n return isButtonLike && labelCandidates.some(candidate => containsSubmitLikeText(candidate));\n}\nfunction isLikelyFormShellSubmit(step) {\n if (step.action !== 'submit')\n return false;\n const selector = (step.selector ?? '').toLowerCase();\n const tagName = (step.fingerprint?.tagName ?? '').toLowerCase();\n const role = (step.fingerprint?.attributes?.role ?? '').toLowerCase();\n const nearestContainerTag = (step.fingerprint?.context?.nearestContainerTag ?? '').toLowerCase();\n const parentTag = (step.fingerprint?.context?.parentTag ?? '').toLowerCase();\n if (tagName === 'form' || role === 'form')\n return true;\n if (selector === 'form' || selector.startsWith('form[') || selector.startsWith('form.'))\n return true;\n const formContext = nearestContainerTag === 'form' ||\n parentTag === 'form' ||\n selector.includes('form');\n return formContext && FRAGILE_PRIORITIES.has(step.selectorPriority);\n}\nfunction canAbsorbSubmitOutcome(clickStep, submitStep) {\n if (clickStep.action !== 'click' || submitStep.action !== 'submit')\n return false;\n if (clickStep.traceId == null || submitStep.traceId == null || clickStep.traceId !== submitStep.traceId)\n return false;\n const clickTab = clickStep.tabId ?? null;\n const submitTab = submitStep.tabId ?? null;\n if (clickTab !== submitTab)\n return false;\n if (getStepNormalizedUrl(clickStep) !== getStepNormalizedUrl(submitStep))\n return false;\n if (typeof clickStep.timestamp === 'number' && typeof submitStep.timestamp === 'number') {\n const deltaMs = submitStep.timestamp - clickStep.timestamp;\n if (deltaMs < 0 || deltaMs > DUPLICATE_SUBMIT_AFTER_CLICK_MAX_MS)\n return false;\n }\n else {\n return false;\n }\n if (!isMeaningfulSubmitControl(clickStep))\n return false;\n if (!isLikelyFormShellSubmit(submitStep))\n return false;\n return true;\n}\nfunction mergeSubmitIntoClick(clickStep, submitStep) {\n return {\n ...clickStep,\n outcomeType: submitStep.outcomeType ?? clickStep.outcomeType,\n navigatesTo: submitStep.navigatesTo ?? clickStep.navigatesTo,\n destinationNodeId: submitStep.destinationNodeId ?? clickStep.destinationNodeId,\n assertions: mergeAssertions(clickStep.assertions, submitStep.assertions),\n userAssertions: mergeUserAssertions(clickStep.userAssertions, submitStep.userAssertions),\n confidence: Math.max(clickStep.confidence, submitStep.confidence),\n sampleSize: Math.max(clickStep.sampleSize, submitStep.sampleSize),\n };\n}\nfunction compressDuplicateSubmitAfterClick(steps) {\n const out = [];\n for (let i = 0; i < steps.length; i++) {\n const current = steps[i];\n const next = steps[i + 1];\n if (current && next && canAbsorbSubmitOutcome(current, next)) {\n out.push(mergeSubmitIntoClick(current, next));\n i++;\n continue;\n }\n out.push(current);\n }\n return out;\n}\nfunction isSelectLikeControlFamily(family) {\n const normalized = (family || '').toLowerCase();\n return ['combobox', 'listbox', 'select', 'dropdown'].includes(normalized);\n}\nfunction canCompressOpenSelectPair(openStep, selectStep) {\n if (openStep.action !== 'custom-control-open' || selectStep.action !== 'custom-select')\n return false;\n if (openStep.traceId == null || selectStep.traceId == null || openStep.traceId !== selectStep.traceId)\n return false;\n const openTab = openStep.tabId ?? null;\n const selectTab = selectStep.tabId ?? null;\n if (openTab !== selectTab)\n return false;\n if (getStepNormalizedUrl(openStep) !== getStepNormalizedUrl(selectStep))\n return false;\n if (typeof openStep.timestamp !== 'number' || typeof selectStep.timestamp !== 'number')\n return false;\n const deltaMs = selectStep.timestamp - openStep.timestamp;\n if (deltaMs < 0 || deltaMs > CUSTOM_CONTROL_OPEN_SELECT_MAX_MS)\n return false;\n if (!isSelectLikeControlFamily(openStep.controlFamily ?? selectStep.controlFamily))\n return false;\n if ((openStep.controlFamily ?? '').toLowerCase() === 'autocomplete')\n return false;\n if ((selectStep.controlFamily ?? '').toLowerCase() === 'autocomplete')\n return false;\n const triggerSelector = selectStep.triggerSelector ?? openStep.triggerSelector ?? openStep.selector;\n const optionSelector = selectStep.optionSelector ?? selectStep.selector;\n const optionText = selectStep.optionText ?? selectStep.value ?? selectStep.fingerprint?.textExcerpt ?? undefined;\n if (!triggerSelector || triggerSelector.trim().length === 0)\n return false;\n if ((!optionSelector || optionSelector.trim().length === 0) && (!optionText || optionText.trim().length === 0)) {\n return false;\n }\n return true;\n}\nfunction compressOpenSelectPair(openStep, selectStep) {\n const compressedEventIds = [openStep.eventId, selectStep.eventId].filter((value) => typeof value === 'string' && value.length > 0);\n return {\n ...selectStep,\n controlFamily: selectStep.controlFamily ?? openStep.controlFamily,\n triggerSelector: selectStep.triggerSelector ?? openStep.triggerSelector ?? openStep.selector,\n triggerSelectorPriority: selectStep.triggerSelectorPriority ??\n openStep.triggerSelectorPriority ??\n openStep.selectorPriority,\n triggerFingerprint: selectStep.triggerFingerprint ??\n openStep.triggerFingerprint ??\n openStep.fingerprint,\n triggerSelectorSpec: selectStep.triggerSelectorSpec ??\n openStep.triggerSelectorSpec ??\n openStep.selectorSpec,\n triggerResolvedSelector: selectStep.triggerResolvedSelector ??\n openStep.triggerResolvedSelector,\n optionSelector: selectStep.optionSelector ?? selectStep.selector,\n optionText: selectStep.optionText ??\n selectStep.value ??\n selectStep.fingerprint?.textExcerpt ??\n undefined,\n optionValue: selectStep.optionValue ??\n selectStep.value ??\n selectStep.optionText ??\n selectStep.fingerprint?.textExcerpt ??\n undefined,\n optionSelectorSpec: selectStep.optionSelectorSpec ??\n selectStep.selectorSpec,\n optionResolvedSelector: selectStep.optionResolvedSelector,\n absorbedOpenEventId: openStep.eventId,\n absorbedOpenTraceId: openStep.traceId,\n compressedFromEvents: compressedEventIds,\n };\n}\nfunction compressCustomControlOpenSelectPairs(steps) {\n const out = [];\n for (let i = 0; i < steps.length; i++) {\n const current = steps[i];\n const next = steps[i + 1];\n if (current && next && canCompressOpenSelectPair(current, next)) {\n out.push(compressOpenSelectPair(current, next));\n i++;\n continue;\n }\n out.push(current);\n }\n return out;\n}\nfunction deduplicateSharedAssertions(steps) {\n // Count how many NAV steps each anchor selector appears in\n const selectorPageCount = new Map();\n for (const step of steps) {\n if (step.outcomeType !== 'navigation')\n continue;\n // Use a Set so one step with the same selector twice doesn't double-count\n const seen = new Set();\n for (const assertion of step.assertions) {\n if (assertion.source !== 'anchor')\n continue;\n if (!assertion.selector)\n continue;\n if (!seen.has(assertion.selector)) {\n seen.add(assertion.selector);\n selectorPageCount.set(assertion.selector, (selectorPageCount.get(assertion.selector) ?? 0) + 1);\n }\n }\n }\n // Strip selectors that appear on more than one destination page\n return steps.map(step => ({\n ...step,\n assertions: step.assertions.filter(assertion => {\n if (assertion.source !== 'anchor')\n return true; // always keep URL assertions\n if (!assertion.selector)\n return true;\n return (selectorPageCount.get(assertion.selector) ?? 0) < 2;\n }),\n }));\n}\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\n// MAIN SERVICE\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\nclass CodegenService {\n options;\n db;\n constructor(options) {\n this.options = options;\n this.db = (0, sqlite_client_1.openSqliteReadonlyDatabase)(options.dbPath);\n }\n /**\n * Lists all sessions available for code generation, newest first.\n */\n listSessions() {\n const rows = this.db.prepare(`\r\n SELECT\r\n s.id AS sessionId,\r\n s.started_at AS startedAt,\r\n s.event_count AS eventCount,\r\n (\r\n SELECT e2.page_url FROM events e2\r\n WHERE e2.session_id = s.id AND e2.page_url IS NOT NULL\r\n ORDER BY e2.timestamp ASC\r\n LIMIT 1\r\n ) AS url\r\n FROM sessions s\r\n ORDER BY s.started_at DESC\r\n `).all();\n return rows.map(r => ({\n sessionId: r.sessionId,\n url: r.url || 'unknown',\n startedAt: new Date(r.startedAt).toISOString(),\n eventCount: r.eventCount || 0,\n }));\n }\n /**\n * Builds the full Semantic Timeline for a session.\n * This is what gets fed to the AI \u00E2\u20AC\u201D no raw HTML, no snapshots.\n */\n buildSession(sessionId, buildOptions = {}) {\n const preserveCompoundOpenSteps = buildOptions.preserveCompoundOpenSteps === true;\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC 1. Load session metadata \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\n const session = this.db.prepare(`\r\n SELECT id, started_at, last_event_at, metadata\r\n FROM sessions\r\n WHERE id = ?\r\n `).get(sessionId);\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC 2. Load ordered events for this session \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\n const includeTypes = ['click', 'input', 'submit', 'custom-control-open', 'custom-select', 'custom-menu-select'];\n if (this.options.includeScrollSteps)\n includeTypes.push('scroll');\n if (this.options.includeHoverSteps)\n includeTypes.push('hover');\n const placeholders = includeTypes.map(() => '?').join(', ');\n const events = this.db.prepare(`\r\n SELECT\r\n e.id AS eventId,\r\n e.type AS eventType,\r\n e.timestamp,\r\n e.page_url AS pageUrl,\r\n e.trace_id AS traceId,\r\n e.node_id AS nodeId,\r\n e.payload\r\n FROM events e\r\n WHERE e.session_id = ?\r\n AND e.type IN (${placeholders})\r\n ORDER BY e.timestamp ASC\r\n `).all(sessionId, ...includeTypes);\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC 3. Load edges keyed by fingerprint_hash \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\n // CRITICAL: We join via fingerprint_hash not trigger_event_id.\n // When the same action is recorded multiple times, OutcomeHandler calls\n // resolveOutcome() on the EXISTING edge (first session created it).\n // That edge's trigger_event_id points to a DIFFERENT session's event,\n // making it invisible if we filter by current session's event IDs.\n const sessionFpHashes = new Set();\n const sessionEventIds = new Set();\n for (const ev of events) {\n if (ev.eventId)\n sessionEventIds.add(ev.eventId);\n const fp = extractFingerprint(ev.payload);\n sessionFpHashes.add(computeFpHash(fp, ev.eventType));\n }\n const fpHashList = Array.from(sessionFpHashes);\n const eventIdList = Array.from(sessionEventIds);\n const allEdgeRows = [];\n if (fpHashList.length > 0) {\n const fpPlaceholders = fpHashList.map(() => '?').join(', ');\n const byFp = this.db.prepare(`\r\n SELECT\r\n ed.fingerprint_hash AS fingerprintHash,\r\n ed.id AS edgeId,\r\n ed.trigger_event_id AS triggerEventId,\r\n ed.from_node_id AS fromNodeId,\r\n ed.to_node_id AS toNodeId,\r\n ed.outcome_type AS outcomeType,\r\n ed.sample_size AS sampleSize,\r\n o.probability\r\n FROM edges ed\r\n LEFT JOIN outcomes o ON o.edge_id = ed.id\r\n WHERE ed.fingerprint_hash IN (${fpPlaceholders})\r\n `).all(...fpHashList);\n allEdgeRows.push(...byFp);\n }\n if (eventIdList.length > 0) {\n const evPlaceholders = eventIdList.map(() => '?').join(', ');\n const byEvent = this.db.prepare(`\r\n SELECT\r\n ed.fingerprint_hash AS fingerprintHash,\r\n ed.id AS edgeId,\r\n ed.trigger_event_id AS triggerEventId,\r\n ed.from_node_id AS fromNodeId,\r\n ed.to_node_id AS toNodeId,\r\n ed.outcome_type AS outcomeType,\r\n ed.sample_size AS sampleSize,\r\n o.probability\r\n FROM edges ed\r\n LEFT JOIN outcomes o ON o.edge_id = ed.id\r\n WHERE ed.trigger_event_id IN (${evPlaceholders})\r\n `).all(...eventIdList);\n allEdgeRows.push(...byEvent);\n }\n // Deduplicate edges \u00E2\u20AC\u201D keep highest-confidence outcome per fingerprint\n const edgeByEventId = new Map();\n const edgeByFingerprint = new Map();\n const outcomeTypePriority = {\n navigation: 3, state_refresh: 2, no_change: 1, immediate_action: 0,\n };\n for (const edge of allEdgeRows) {\n const newPriority = outcomeTypePriority[edge.outcomeType] ?? -1;\n if (edge.triggerEventId) {\n const existing = edgeByEventId.get(edge.triggerEventId);\n if (!existing || newPriority > (outcomeTypePriority[existing.outcomeType] ?? -1)) {\n edgeByEventId.set(edge.triggerEventId, edge);\n }\n }\n if (edge.fingerprintHash) {\n const existing = edgeByFingerprint.get(edge.fingerprintHash);\n if (!existing || newPriority > (outcomeTypePriority[existing.outcomeType] ?? -1)) {\n edgeByFingerprint.set(edge.fingerprintHash, edge);\n }\n }\n }\n const edgeRows = Array.from(edgeByFingerprint.values());\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC 4. Load destination nodes for navigation edges \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\n const navEdges = edgeRows.filter(e => e.outcomeType === 'navigation');\n const toNodeIds = Array.from(new Set(navEdges.map(e => e.toNodeId).filter(Boolean)));\n const nodeMap = new Map();\n if (toNodeIds.length > 0) {\n const nodePlaceholders = toNodeIds.map(() => '?').join(', ');\n const nodes = this.db.prepare(`\r\n SELECT id, page_url, page_title, anchors\r\n FROM nodes\r\n WHERE id IN (${nodePlaceholders})\r\n `).all(...toNodeIds);\n for (const node of nodes)\n nodeMap.set(node.id, node);\n }\n // Source-node fallback for control signature when payload lacks it.\n // This is additive and preserves current behavior when payload already carries signature.\n const nodeControlSignatureStmt = this.db.prepare(`\r\n SELECT control_signature AS controlSignature\r\n FROM nodes\r\n WHERE id = ?\r\n LIMIT 1\r\n `);\n const controlSignatureByNodeId = new Map();\n const getNodeControlSignature = (nodeId) => {\n if (!nodeId)\n return undefined;\n if (controlSignatureByNodeId.has(nodeId)) {\n return controlSignatureByNodeId.get(nodeId);\n }\n const row = nodeControlSignatureStmt.get(nodeId);\n const resolved = typeof row?.controlSignature === 'string' && row.controlSignature.length > 0\n ? row.controlSignature\n : undefined;\n controlSignatureByNodeId.set(nodeId, resolved);\n return resolved;\n };\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC 5. Build raw steps \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\n const rawSteps = [];\n let stepNum = 0;\n const minConfidence = this.options.minConfidence ?? 0.0;\n let lastResolvedSourceNodeId;\n for (const ev of events) {\n if (!ACTIONABLE_TYPES.has(ev.eventType))\n continue;\n const fingerprint = extractFingerprint(ev.payload);\n if (!fingerprint?.selector)\n continue;\n const recomputedHash = computeFpHash(fingerprint, ev.eventType);\n const edge = edgeByEventId.get(ev.eventId) || edgeByFingerprint.get(recomputedHash);\n const confidence = edge?.probability ?? 1.0;\n if (confidence < minConfidence)\n continue;\n stepNum++;\n // FIX A: intent now prefers textExcerpt over the raw selector string.\n // \"click_Admin\", \"click_PIM\", \"click_Leave\" instead of\n // \"click__oxd_main_menu_item\" for all three navigation steps.\n const intent = buildIntent(ev.eventType, fingerprint);\n const selectorPriority = normalizeSelectorPriority(fingerprint.selectorPriority);\n const selectorRank = fingerprint.selectorRank ?? rankFromPriority(selectorPriority);\n const directSourceNodeId = getSourceNodeId(ev, edge) ?? undefined;\n // Submit events can arrive without node linkage from the event payload/edge.\n // Keep graph truth untouched, but anchor generation to the latest known node\n // so resolver can still fetch a meaningful snapshot.\n const sourceNodeId = directSourceNodeId ?? (ev.eventType === 'submit'\n ? lastResolvedSourceNodeId\n : undefined);\n const controlSignature = extractControlSignature(ev.payload) ??\n getNodeControlSignature(sourceNodeId);\n const step = {\n step: stepNum,\n eventId: ev.eventId ?? undefined,\n traceId: ev.traceId ?? undefined,\n timestamp: typeof ev.timestamp === 'number' ? ev.timestamp : undefined,\n tabId: extractTabId(ev.payload) ?? null,\n intent,\n action: ev.eventType,\n selector: fingerprint.selector,\n sourceNodeId,\n selectorPriority,\n selectorRank,\n selectorSpec: (0, selector_spec_1.buildSelectorSpec)({\n selector: fingerprint.selector,\n selectorPriority,\n source: 'interceptor',\n proofLevel: 'recorded',\n rank: selectorRank,\n }),\n fingerprint: fingerprint ?? undefined,\n targetNodeId: fingerprint?.targetNodeId ?? undefined,\n nestedContext: extractNestedContext(ev.payload),\n controlSignature,\n pageUrl: ev.pageUrl || '',\n normalizedUrl: extractNormalizedUrl(ev.payload, ev.pageUrl || ''),\n confidence,\n sampleSize: edge?.sampleSize ?? 1,\n assertions: [],\n userAssertions: [],\n };\n Object.assign(step, extractCustomControlEvidence(ev.payload, ev.eventType));\n if (sourceNodeId) {\n lastResolvedSourceNodeId = sourceNodeId;\n }\n const value = extractValue(ev.payload, ev.eventType);\n if (value)\n step.value = value;\n if (edge) {\n step.outcomeType = edge.outcomeType;\n step.destinationNodeId = edge.toNodeId ?? undefined;\n if (edge.outcomeType === 'navigation' && edge.toNodeId) {\n const destNode = nodeMap.get(edge.toNodeId);\n if (destNode?.page_url)\n step.navigatesTo = destNode.page_url;\n if (destNode) {\n step.assertions = parseAnchorsToAssertions(destNode.anchors, destNode.page_url, edge.probability ?? 1.0);\n }\n step.userAssertions = (0, assertion_stub_1.hasUserAssertionSupport)(this.db)\n ? (0, assertion_stub_1.getUserDefinedAssertions)(sessionId, this.db)\n : [];\n }\n }\n console.log('CODEGEN_STEP_MAPPED', {\n sessionId,\n step: step.step,\n eventId: ev.eventId ?? null,\n traceId: ev.traceId ?? null,\n sourceNodeId: step.sourceNodeId ?? null,\n selector: step.selector,\n resolvedSelector: step.resolvedSelector ?? null,\n });\n // Consecutive duplicate filter \u00E2\u20AC\u201D keep last (carries final committed value)\n const prev = rawSteps[rawSteps.length - 1];\n if (prev && prev.selector === step.selector && prev.action === step.action) {\n step.step = prev.step;\n rawSteps[rawSteps.length - 1] = step;\n stepNum--;\n }\n else {\n rawSteps.push(step);\n }\n }\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC 6. FIX B: suppress pre-navigation setup clicks \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\n // Removes hamburger-expand and container-tap noise clicks that precede\n // every SPA sidebar navigation (e.g. .oxd-icon and div > div:nth-of-type).\n const afterClickInputCollapse = collapseRedundantClickBeforeInput(rawSteps);\n const afterSubmitCompression = compressDuplicateSubmitAfterClick(afterClickInputCollapse);\n const afterCustomControlCompression = preserveCompoundOpenSteps\n ? afterSubmitCompression\n : compressCustomControlOpenSelectPairs(afterSubmitCompression);\n const afterSetupFilter = suppressPreNavSetupClicks(afterCustomControlCompression, {\n preserveCompoundOpenSteps,\n });\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC 7. FIX C: strip assertions shared across multiple destination pages \u00E2\u201D\u20AC\u00E2\u201D\u20AC\n // Removes global layout elements (Add, Reset, Search buttons) that appear\n // identically in the anchor set of every page, leaving only page-specific\n // assertions. URL assertions are never stripped.\n const finalSteps = deduplicateSharedAssertions(afterSetupFilter);\n // Re-number steps sequentially after filtering\n finalSteps.forEach((s, i) => { s.step = i + 1; });\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC 8. Flow confidence \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\n const navProbabilities = edgeRows\n .filter(e => e.outcomeType === 'navigation' && e.probability != null)\n .map(e => e.probability);\n const flowConfidence = navProbabilities.length > 0\n ? navProbabilities.reduce((sum, p) => sum + p, 0) / navProbabilities.length\n : 1.0;\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC 9. Starting URL and title \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\n const firstEvent = events[0];\n const startUrl = firstEvent?.pageUrl || 'unknown';\n const startTitle = (() => {\n try {\n const payload = JSON.parse(firstEvent?.payload || '{}');\n return payload.pageTitle || '';\n }\n catch {\n return '';\n }\n })();\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC 10. Unique node count \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\n const visitedNodes = new Set();\n for (const ev of events) {\n if (ev.nodeId)\n visitedNodes.add(ev.nodeId);\n }\n return {\n sessionId,\n url: startUrl,\n title: startTitle,\n recordedAt: new Date(session.started_at).toISOString(),\n stepCount: finalSteps.length,\n steps: finalSteps,\n flowConfidence,\n nodeCount: visitedNodes.size,\n };\n }\n close() {\n this.db.close();\n }\n async loadSnapshots(session, options = {}) {\n try {\n const sourceNodeIds = Array.from(new Set(session.steps\n .map(step => step.sourceNodeId)\n .filter((nodeId) => typeof nodeId === 'string' && nodeId.length > 0)));\n const destinationNodeIds = Array.from(new Set(session.steps\n .map(step => step.destinationNodeId)\n .filter((nodeId) => typeof nodeId === 'string' && nodeId.length > 0)));\n const normalizedUrls = Array.from(new Set(session.steps\n .map(step => step.normalizedUrl || (0, shared_1.normalizeUrl)(step.pageUrl))\n .filter((url) => typeof url === 'string' && url.length > 0)));\n const eventIds = Array.from(new Set(session.steps\n .map(step => step.eventId)\n .filter((eventId) => typeof eventId === 'string' && eventId.length > 0)));\n const traceIds = Array.from(new Set(session.steps\n .map(step => step.traceId)\n .filter((traceId) => typeof traceId === 'string' && traceId.length > 0)));\n const maxBytes = options.maxSnapshotBytesForValidation ?? 2_000_000;\n let jsdomCtor = null;\n let linkedomParse = null;\n const dynamicImport = new Function('specifier', 'return import(specifier);');\n try {\n const jsdomModule = await dynamicImport('jsdom');\n if (typeof jsdomModule.JSDOM === 'function') {\n jsdomCtor = jsdomModule.JSDOM;\n }\n }\n catch {\n // Try linkedom below.\n }\n if (!jsdomCtor) {\n try {\n const linkedom = await dynamicImport('linkedom');\n if (typeof linkedom.parseHTML === 'function') {\n linkedomParse = linkedom.parseHTML;\n }\n }\n catch {\n // Snapshot engine remains unavailable.\n }\n }\n const snapshotEngineAvailable = !!(jsdomCtor || linkedomParse);\n console.log('[DEBUG] loadSnapshots: jsdomCtor=', !!jsdomCtor, 'linkedomParse=', !!linkedomParse);\n const emptyInventory = {\n snapshotEngineAvailable,\n hardBoundaries: [],\n icBoundaryToleranceMs: 75,\n eventLocalByEventId: new Map(),\n interactionContextExactStable: new Map(),\n interactionContextExactAny: new Map(),\n interactionContextStableByUrl: new Map(),\n interactionContextAnyByUrl: new Map(),\n outcomeEventByTraceId: new Map(),\n sourceNodeById: new Map(),\n destinationNodeById: new Map(),\n urlEventFallbackByNormalizedUrl: new Map(),\n };\n if (!snapshotEngineAvailable) {\n console.warn('[AIR] Failed to load jsdom or linkedom. Snapshot validation disabled.');\n console.warn('[AIR] Snapshot engine unavailable \u2014 resolver running in degraded mode');\n return {\n snapshotEngineAvailable,\n get(_nodeId, _normalizedUrl, _controlSignature) {\n return null;\n },\n getSource(_nodeId, _normalizedUrl, _controlSignature) {\n return 'unavailable';\n },\n selectForStep(step, mode = 'action') {\n return (0, snapshot_selector_1.selectSnapshotForStep)(step, emptyInventory, mode);\n },\n };\n }\n const parseHtmlToDocument = (html, debugLabel) => {\n if (!html)\n return null;\n if (Buffer.byteLength(html, 'utf8') > maxBytes)\n return null;\n try {\n if (jsdomCtor) {\n const dom = new jsdomCtor(html);\n return dom.window.document;\n }\n if (linkedomParse) {\n const parsed = linkedomParse(html);\n return parsed.window.document;\n }\n return null;\n }\n catch (err) {\n console.error('[DEBUG] loadSnapshots: parsing error for', debugLabel, err);\n return null;\n }\n };\n const buildIcKey = (normalizedUrl, controlSignature) => `${normalizedUrl}|${controlSignature ?? ''}`;\n const payloadRowCache = new Map();\n const documentCache = new Map();\n const getEventRowStmt = this.db.prepare(`\r\n SELECT\r\n id AS eventId,\r\n type AS eventType,\r\n trace_id AS traceId,\r\n timestamp,\r\n page_url AS pageUrl,\r\n payload\r\n FROM events\r\n WHERE id = ?\r\n LIMIT 1\r\n `);\n const getNodeSnapshotStmt = this.db.prepare(`\r\n SELECT snapshot_html AS snapshotHtml\r\n FROM nodes\r\n WHERE id = ?\r\n LIMIT 1\r\n `);\n const getInteractionContextSnapshotStmt = this.db.prepare(`\r\n SELECT snapshot_html AS snapshotHtml\r\n FROM interaction_contexts\r\n WHERE session_id = ? AND normalized_url = ? AND control_signature = ?\r\n LIMIT 1\r\n `);\n const loadEventRow = (eventId) => {\n if (payloadRowCache.has(eventId)) {\n return payloadRowCache.get(eventId) ?? null;\n }\n const row = getEventRowStmt.get(eventId);\n const resolved = row ?? null;\n payloadRowCache.set(eventId, resolved);\n return resolved;\n };\n const parsePayload = (eventId) => {\n const row = loadEventRow(eventId);\n if (!row?.payload)\n return null;\n try {\n return JSON.parse(row.payload);\n }\n catch {\n return null;\n }\n };\n const parsePayloadJson = (payloadJson) => {\n if (!payloadJson)\n return null;\n try {\n return JSON.parse(payloadJson);\n }\n catch {\n return null;\n }\n };\n const sessionTimelineRows = this.db.prepare(`\r\n SELECT\r\n id AS eventId,\r\n type AS eventType,\r\n trace_id AS traceId,\r\n timestamp,\r\n page_url AS pageUrl,\r\n payload\r\n FROM events\r\n WHERE session_id = ?\r\n ORDER BY timestamp ASC\r\n `).all(session.sessionId);\n const icTabEvidence = new Map();\n const hardBoundaries = [];\n const previousByTab = new Map();\n let previousTimelineEvent = null;\n for (const row of sessionTimelineRows) {\n const payload = parsePayloadJson(row.payload);\n const tabId = extractTabId(row.payload) ?? null;\n const normalizedUrl = extractNormalizedUrl(row.payload, row.pageUrl);\n const controlSignature = typeof payload?.interactionContext?.controlSignature === 'string'\n ? payload.interactionContext.controlSignature\n : (payload?.interactionContext?.controlSignature === null\n ? ''\n : undefined);\n if (tabId && normalizedUrl !== undefined && controlSignature !== undefined) {\n const icKey = buildIcKey(normalizedUrl, controlSignature);\n const knownTabs = icTabEvidence.get(icKey) ?? new Set();\n knownTabs.add(tabId);\n icTabEvidence.set(icKey, knownTabs);\n }\n if (previousTimelineEvent?.tabId &&\n tabId &&\n previousTimelineEvent.tabId !== tabId) {\n hardBoundaries.push({\n timestamp: row.timestamp,\n kind: previousTimelineEvent.traceId &&\n row.traceId &&\n previousTimelineEvent.traceId === row.traceId\n ? 'cross_tab_handoff'\n : 'tab_change',\n eventId: row.eventId,\n traceId: row.traceId,\n fromTabId: previousTimelineEvent.tabId,\n toTabId: tabId,\n tabId,\n });\n }\n if (row.eventType === 'spa-route-change') {\n hardBoundaries.push({\n timestamp: row.timestamp,\n kind: 'spa_route_change',\n eventId: row.eventId,\n traceId: row.traceId,\n tabId,\n toNormalizedUrl: normalizedUrl ?? null,\n });\n }\n if (tabId) {\n const previousForTab = previousByTab.get(tabId);\n if (previousForTab?.normalizedUrl &&\n normalizedUrl &&\n previousForTab.normalizedUrl !== normalizedUrl) {\n hardBoundaries.push({\n timestamp: row.timestamp,\n kind: row.eventType === 'outcome' ? 'navigation' : 'url_change',\n eventId: row.eventId,\n traceId: row.traceId,\n tabId,\n fromNormalizedUrl: previousForTab.normalizedUrl,\n toNormalizedUrl: normalizedUrl,\n });\n }\n previousByTab.set(tabId, { normalizedUrl });\n }\n previousTimelineEvent = {\n tabId,\n traceId: row.traceId,\n };\n }\n const loadDocumentCached = (cacheKey, factory) => {\n if (documentCache.has(cacheKey)) {\n return documentCache.get(cacheKey) ?? null;\n }\n const doc = factory();\n documentCache.set(cacheKey, doc);\n return doc;\n };\n const loadEventSnapshotField = (eventId, fieldName, sourceLabel) => {\n return loadDocumentCached(`event:${eventId}:${fieldName}`, () => {\n const payload = parsePayload(eventId);\n const html = payload?.[fieldName]?.html;\n if (typeof html !== 'string' || html.length === 0)\n return null;\n return parseHtmlToDocument(html, `${sourceLabel}:${eventId}:${fieldName}`);\n });\n };\n const loadUrlFallbackSnapshot = (eventId, normalizedUrl) => {\n return loadDocumentCached(`url-fallback:${normalizedUrl}:${eventId}`, () => {\n const payload = parsePayload(eventId);\n if (!payload || typeof payload !== 'object')\n return null;\n const candidates = [\n payload?.pageState?.html,\n payload?.pageSnapshot?.html,\n payload?.interactionContext?.html,\n ];\n for (const candidate of candidates) {\n if (typeof candidate === 'string' && candidate.length > 0) {\n return parseHtmlToDocument(candidate, `url-fallback:${normalizedUrl}:${eventId}`);\n }\n }\n return null;\n });\n };\n const loadNodeSnapshot = (nodeId, sourceLabel) => {\n return loadDocumentCached(`node:${sourceLabel}:${nodeId}`, () => {\n const row = getNodeSnapshotStmt.get(nodeId);\n const snapshotHtml = row?.snapshotHtml;\n console.log(`[DEBUG] loadSnapshots: nodeId=${nodeId}, snapshotHtml length=${snapshotHtml ? snapshotHtml.length : 0}`);\n if (!snapshotHtml)\n return null;\n return parseHtmlToDocument(snapshotHtml, `${sourceLabel}:${nodeId}`);\n });\n };\n const loadInteractionContext = (normalizedUrl, controlSignature, sourceLabel) => {\n return loadDocumentCached(`ic:${sourceLabel}:${normalizedUrl}:${controlSignature}`, () => {\n const row = getInteractionContextSnapshotStmt.get(session.sessionId, normalizedUrl, controlSignature);\n const snapshotHtml = row?.snapshotHtml;\n if (!snapshotHtml)\n return null;\n return parseHtmlToDocument(snapshotHtml, `${sourceLabel}:${normalizedUrl}:${controlSignature}`);\n });\n };\n // Current inventory contract is intentionally HTML/provenance/control-signature centered.\n // Rich snapshot metadata such as compositeAnchors, captured metrics, and snapshotBuildId\n // is proven earlier in capture/schema tests but is not reconstructed here until a concrete\n // downstream consumer exists.\n const inventory = {\n snapshotEngineAvailable,\n hardBoundaries,\n icBoundaryToleranceMs: 75,\n eventLocalByEventId: new Map(),\n interactionContextExactStable: new Map(),\n interactionContextExactAny: new Map(),\n interactionContextStableByUrl: new Map(),\n interactionContextAnyByUrl: new Map(),\n outcomeEventByTraceId: new Map(),\n sourceNodeById: new Map(),\n destinationNodeById: new Map(),\n urlEventFallbackByNormalizedUrl: new Map(),\n };\n for (const eventId of eventIds) {\n const eventRow = loadEventRow(eventId);\n const eventNormalizedUrl = extractNormalizedUrl(eventRow?.payload ?? null, eventRow?.pageUrl ?? null);\n const eventControlSignature = extractControlSignature(eventRow?.payload ?? null);\n const eventTabId = extractTabId(eventRow?.payload ?? null) ?? null;\n inventory.eventLocalByEventId.set(eventId, {\n pageState: {\n source: 'event-local-pageState',\n temporalClass: 'action_local',\n eventId,\n timestamp: eventRow?.timestamp,\n tabId: eventTabId,\n normalizedUrl: eventNormalizedUrl,\n controlSignature: eventControlSignature,\n load: () => loadEventSnapshotField(eventId, 'pageState', 'event-local'),\n },\n pageSnapshot: {\n source: 'event-local-pageSnapshot',\n temporalClass: 'action_local',\n eventId,\n timestamp: eventRow?.timestamp,\n tabId: eventTabId,\n normalizedUrl: eventNormalizedUrl,\n controlSignature: eventControlSignature,\n load: () => loadEventSnapshotField(eventId, 'pageSnapshot', 'event-local'),\n },\n });\n }\n for (const nodeId of sourceNodeIds) {\n inventory.sourceNodeById.set(nodeId, {\n source: 'source-node-snapshot',\n temporalClass: 'pre_action',\n sourceNodeId: nodeId,\n load: () => loadNodeSnapshot(nodeId, 'source-node'),\n });\n }\n for (const nodeId of destinationNodeIds) {\n inventory.destinationNodeById.set(nodeId, {\n source: 'destination-node-snapshot',\n temporalClass: 'outcome_state',\n sourceNodeId: nodeId,\n load: () => loadNodeSnapshot(nodeId, 'destination-node'),\n });\n }\n if (normalizedUrls.length > 0) {\n const normalizedPlaceholders = normalizedUrls.map(() => '?').join(', ');\n const icRows = this.db.prepare(`\r\n SELECT\r\n normalized_url AS normalizedUrl,\r\n control_signature AS controlSignature,\r\n is_stable AS isStable,\r\n captured_at AS capturedAt\r\n FROM interaction_contexts\r\n WHERE session_id = ?\r\n AND normalized_url IN (${normalizedPlaceholders})\r\n ORDER BY normalized_url ASC, control_signature ASC, is_stable DESC, captured_at DESC\r\n `).all(session.sessionId, ...normalizedUrls);\n for (const row of icRows) {\n if (!row.normalizedUrl)\n continue;\n const cacheKey = buildIcKey(row.normalizedUrl, row.controlSignature ?? '');\n const reliableIcTabs = icTabEvidence.get(cacheKey);\n const icTabId = reliableIcTabs && reliableIcTabs.size === 1\n ? Array.from(reliableIcTabs)[0]\n : null;\n const baseHandle = {\n source: 'interaction-context-exact',\n temporalClass: row.isStable === 1 ? 'outcome_state' : 'post_action',\n timestamp: row.capturedAt,\n tabId: icTabId,\n normalizedUrl: row.normalizedUrl,\n controlSignature: row.controlSignature ?? '',\n load: () => loadInteractionContext(row.normalizedUrl, row.controlSignature ?? '', row.isStable === 1 ? 'ic-exact-stable' : 'ic-exact-any'),\n };\n if (!inventory.interactionContextExactAny.has(cacheKey)) {\n inventory.interactionContextExactAny.set(cacheKey, baseHandle);\n }\n if (row.isStable === 1) {\n if (!inventory.interactionContextExactStable.has(cacheKey)) {\n inventory.interactionContextExactStable.set(cacheKey, baseHandle);\n }\n if (!inventory.interactionContextStableByUrl.has(row.normalizedUrl)) {\n inventory.interactionContextStableByUrl.set(row.normalizedUrl, {\n ...baseHandle,\n source: 'interaction-context-stable-by-url',\n load: () => loadInteractionContext(row.normalizedUrl, row.controlSignature ?? '', 'ic-stable-by-url'),\n });\n }\n }\n if (!inventory.interactionContextAnyByUrl.has(row.normalizedUrl)) {\n inventory.interactionContextAnyByUrl.set(row.normalizedUrl, {\n ...baseHandle,\n source: 'interaction-context-any-by-url',\n load: () => loadInteractionContext(row.normalizedUrl, row.controlSignature ?? '', 'ic-any-by-url'),\n });\n }\n }\n }\n if (traceIds.length > 0) {\n const tracePlaceholders = traceIds.map(() => '?').join(', ');\n const outcomeRows = this.db.prepare(`\r\n SELECT\r\n id AS eventId,\r\n trace_id AS traceId,\r\n timestamp\r\n FROM events\r\n WHERE session_id = ?\r\n AND type = 'outcome'\r\n AND trace_id IN (${tracePlaceholders})\r\n ORDER BY trace_id ASC, timestamp DESC\r\n `).all(session.sessionId, ...traceIds);\n for (const row of outcomeRows) {\n if (!row.traceId || inventory.outcomeEventByTraceId.has(row.traceId))\n continue;\n inventory.outcomeEventByTraceId.set(row.traceId, {\n source: 'outcome-event-snapshot',\n temporalClass: 'outcome_state',\n eventId: row.eventId,\n timestamp: row.timestamp,\n tabId: extractTabId(loadEventRow(row.eventId)?.payload ?? null) ?? null,\n load: () => loadEventSnapshotField(row.eventId, 'pageState', 'outcome-event')\n || loadEventSnapshotField(row.eventId, 'pageSnapshot', 'outcome-event'),\n });\n }\n }\n if (normalizedUrls.length > 0) {\n const normalizedUrlSet = new Set(normalizedUrls);\n const eventRows = this.db.prepare(`\r\n SELECT id AS eventId, timestamp, page_url AS pageUrl\r\n FROM events\r\n WHERE session_id = ?\r\n ORDER BY timestamp DESC\r\n `).all(session.sessionId);\n for (const row of eventRows) {\n const normalizedUrl = row.pageUrl ? (0, shared_1.normalizeUrl)(row.pageUrl) : null;\n if (!normalizedUrl || !normalizedUrlSet.has(normalizedUrl))\n continue;\n if (inventory.urlEventFallbackByNormalizedUrl.has(normalizedUrl))\n continue;\n inventory.urlEventFallbackByNormalizedUrl.set(normalizedUrl, {\n source: 'url-event-fallback',\n temporalClass: 'unknown',\n eventId: row.eventId,\n timestamp: row.timestamp,\n load: () => loadUrlFallbackSnapshot(row.eventId, normalizedUrl),\n });\n }\n }\n console.log('[DEBUG] loadSnapshots inventory', {\n exactEventLocal: inventory.eventLocalByEventId.size,\n sourceNodes: inventory.sourceNodeById.size,\n destinationNodes: inventory.destinationNodeById.size,\n icExactStable: inventory.interactionContextExactStable.size,\n icExactAny: inventory.interactionContextExactAny.size,\n icStableByUrl: inventory.interactionContextStableByUrl.size,\n icAnyByUrl: inventory.interactionContextAnyByUrl.size,\n outcomeEvents: inventory.outcomeEventByTraceId.size,\n urlFallback: inventory.urlEventFallbackByNormalizedUrl.size,\n });\n const legacyGet = (nodeId, normalizedUrl, controlSignature) => {\n if (normalizedUrl && controlSignature) {\n const exactKey = buildIcKey(normalizedUrl, controlSignature);\n const stable = inventory.interactionContextExactStable.get(exactKey)?.load();\n if (stable)\n return stable;\n const any = inventory.interactionContextExactAny.get(exactKey)?.load();\n if (any)\n return any;\n }\n if (normalizedUrl) {\n const stableByUrl = inventory.interactionContextStableByUrl.get(normalizedUrl)?.load();\n if (stableByUrl)\n return stableByUrl;\n const anyByUrl = inventory.interactionContextAnyByUrl.get(normalizedUrl)?.load();\n if (anyByUrl)\n return anyByUrl;\n const eventFallback = inventory.urlEventFallbackByNormalizedUrl.get(normalizedUrl)?.load();\n if (eventFallback)\n return eventFallback;\n }\n if (!nodeId)\n return null;\n return inventory.sourceNodeById.get(nodeId)?.load() ?? inventory.destinationNodeById.get(nodeId)?.load() ?? null;\n };\n const legacyGetSource = (nodeId, normalizedUrl, controlSignature) => {\n if (normalizedUrl && controlSignature) {\n const exactKey = buildIcKey(normalizedUrl, controlSignature);\n if (inventory.interactionContextExactStable.get(exactKey)?.load())\n return 'interaction-context-exact';\n if (inventory.interactionContextExactAny.get(exactKey)?.load())\n return 'interaction-context-exact';\n }\n if (normalizedUrl) {\n if (inventory.interactionContextStableByUrl.get(normalizedUrl)?.load())\n return 'interaction-context-stable-by-url';\n if (inventory.interactionContextAnyByUrl.get(normalizedUrl)?.load())\n return 'interaction-context-any-by-url';\n if (inventory.urlEventFallbackByNormalizedUrl.get(normalizedUrl)?.load())\n return 'url-event-fallback';\n }\n if (nodeId) {\n if (inventory.sourceNodeById.get(nodeId)?.load())\n return 'source-node-snapshot';\n if (inventory.destinationNodeById.get(nodeId)?.load())\n return 'destination-node-snapshot';\n }\n return 'unavailable';\n };\n return {\n snapshotEngineAvailable,\n get(nodeId, normalizedUrl, controlSignature) {\n return legacyGet(nodeId, normalizedUrl, controlSignature);\n },\n getSource(nodeId, normalizedUrl, controlSignature) {\n return legacyGetSource(nodeId, normalizedUrl, controlSignature);\n },\n selectForStep(step, mode = 'action') {\n return (0, snapshot_selector_1.selectSnapshotForStep)(step, inventory, mode);\n },\n };\n }\n catch (err) {\n console.error('[AIR] loadSnapshots fatal error:', err);\n const emptyInventory = {\n snapshotEngineAvailable: false,\n hardBoundaries: [],\n icBoundaryToleranceMs: 75,\n eventLocalByEventId: new Map(),\n interactionContextExactStable: new Map(),\n interactionContextExactAny: new Map(),\n interactionContextStableByUrl: new Map(),\n interactionContextAnyByUrl: new Map(),\n outcomeEventByTraceId: new Map(),\n sourceNodeById: new Map(),\n destinationNodeById: new Map(),\n urlEventFallbackByNormalizedUrl: new Map(),\n };\n return {\n snapshotEngineAvailable: false,\n get(_nodeId, _normalizedUrl, _controlSignature) {\n return null;\n },\n getSource(_nodeId, _normalizedUrl, _controlSignature) {\n return 'unavailable';\n },\n selectForStep(step, mode = 'action') {\n return (0, snapshot_selector_1.selectSnapshotForStep)(step, emptyInventory, mode);\n },\n };\n }\n }\n /**\n * PHASE 3B: Lightweight Metadata Extraction\n *\n * Fetches only the minimal metadata required to build the public GenerationContext\n * without loading the massive raw payload. Uses SQLite JSON functions to parse\n * only the specific fields needed (selectorResolution, fallback hints).\n */\n getGenerationEventMetadataByIds(eventIds) {\n const result = new Map();\n if (!eventIds || eventIds.length === 0)\n return result;\n const uniqueIds = Array.from(new Set(eventIds));\n const placeholders = uniqueIds.map(() => '?').join(',');\n const query = `\r\n SELECT\r\n id,\r\n json_extract(payload, '$.selectorResolution') as selectorResolution,\r\n json_extract(payload, '$.fingerprint.selector') as legacySelector,\r\n json_extract(payload, '$.fingerprint.textExcerpt') as elementText,\r\n json_extract(payload, '$.fingerprint.tagName') as tagName\r\n FROM events\r\n WHERE id IN (${placeholders})\r\n `;\n const rows = this.db.prepare(query).all(...uniqueIds);\n for (const row of rows) {\n let selectorResolution;\n try {\n if (row.selectorResolution) {\n const parsed = JSON.parse(row.selectorResolution);\n const validation = runtime_schemas_1.SelectorResolutionSchema.safeParse(parsed);\n if (validation.success) {\n selectorResolution = validation.data;\n }\n }\n }\n catch (e) {\n // Silently ignore invalid JSON per requirements\n }\n const metadata = { id: row.id };\n if (selectorResolution) {\n metadata.selectorResolution = selectorResolution;\n }\n const fallbackHints = {};\n if (row.legacySelector)\n fallbackHints.legacySelector = row.legacySelector;\n if (row.elementText)\n fallbackHints.elementText = row.elementText;\n if (row.tagName)\n fallbackHints.tagName = row.tagName;\n if (Object.keys(fallbackHints).length > 0) {\n metadata.fallbackHints = fallbackHints;\n }\n result.set(row.id, metadata);\n }\n return result;\n }\n /**\n * PHASE 3D: Service Orchestration\n *\n * Orchestrates the building of a full session, fetching of lightweight\n * event metadata, and derivation of the pure GenerationContext.\n * This is the entrypoint for future MCP codegen workflows.\n */\n buildGenerationContext(sessionId) {\n const session = this.buildSession(sessionId, { preserveCompoundOpenSteps: true });\n const eventIds = session.steps\n .map(step => step.eventId)\n .filter((id) => typeof id === 'string' && id.length > 0);\n const eventsById = this.getGenerationEventMetadataByIds(eventIds);\n return (0, generation_builder_1.deriveGenerationContext)({ session, eventsById });\n }\n /**\n * PHASE 3E: MCP read path\n *\n * Lightweight discovery of recorded sessions without building GenerationContext\n */\n listRecordedSessions(options = {}) {\n const rawLimit = options.limit ?? 10;\n const limit = Math.min(Math.max(Math.floor(rawLimit), 1), 50);\n const rawOffset = options.offset ?? 0;\n const offset = Math.max(Math.floor(rawOffset), 0);\n const recentDays = typeof options.recentDays === 'number' && Number.isFinite(options.recentDays)\n ? Math.min(Math.max(Math.floor(options.recentDays), 1), 365)\n : undefined;\n const whereClauses = [];\n const params = [];\n if (recentDays !== undefined) {\n const cutoff = Date.now() - recentDays * 86400000;\n whereClauses.push('started_at >= ?');\n params.push(cutoff);\n }\n const whereSql = whereClauses.length > 0\n ? `WHERE ${whereClauses.join(' AND ')}`\n : '';\n const query = `\r\n SELECT\r\n id as sessionId,\r\n started_at as recordedAt,\r\n last_event_at as lastEventAt,\r\n event_count as eventCount,\r\n status,\r\n json_extract(\r\n CASE\r\n WHEN metadata IS NOT NULL AND json_valid(metadata) THEN metadata\r\n ELSE '{}'\r\n END,\r\n '$.title'\r\n ) as title,\r\n json_extract(\r\n CASE\r\n WHEN metadata IS NOT NULL AND json_valid(metadata) THEN metadata\r\n ELSE '{}'\r\n END,\r\n '$.url'\r\n ) as url\r\n FROM sessions\r\n ${whereSql}\r\n ORDER BY started_at DESC\r\n LIMIT ? OFFSET ?\r\n `;\n const queryLimit = limit + 1;\n const rows = this.db.prepare(query).all(...params, queryLimit, offset);\n const hasMore = rows.length > limit;\n const visibleRows = rows.slice(0, limit);\n const sessions = visibleRows.map(row => ({\n sessionId: String(row.sessionId),\n recordedAt: typeof row.recordedAt === 'number' ? row.recordedAt : undefined,\n lastEventAt: typeof row.lastEventAt === 'number' ? row.lastEventAt : undefined,\n eventCount: typeof row.eventCount === 'number' ? row.eventCount : undefined,\n status: typeof row.status === 'string' ? row.status : undefined,\n title: typeof row.title === 'string' && row.title.length > 0 ? row.title : undefined,\n url: typeof row.url === 'string' && row.url.length > 0 ? row.url : undefined,\n }));\n return {\n sessions,\n limit,\n offset,\n hasMore,\n };\n }\n /**\n * PHASE 3E-C: MCP read path\n *\n * Returns a human-readable ASCII/Markdown review of a recorded session.\n * Driven by the FlowReview layer, avoiding raw DOM/snapshot data.\n */\n getFlowReviewMarkdown(sessionId) {\n const session = this.buildSession(sessionId);\n const review = flow_review_service_1.FlowReviewService.build(session);\n return flow_review_formatter_1.FlowReviewFormatter.formatForConsole(review);\n }\n}\nexports.CodegenService = CodegenService;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.normalizeStructuredSelectorText = normalizeStructuredSelectorText;\nexports.getVisibleInputLikeControls = getVisibleInputLikeControls;\nexports.getVisibleTriggerLikeControls = getVisibleTriggerLikeControls;\nexports.findExactVisibleLabelLikeDescendants = findExactVisibleLabelLikeDescendants;\nexports.findTightFieldContainer = findTightFieldContainer;\nexports.findTightTriggerContainer = findTightTriggerContainer;\nexports.isGenericContainerSelector = isGenericContainerSelector;\nconst visibility_1 = require(\"./visibility\");\nfunction normalizeStructuredSelectorText(value) {\n if (!value)\n return '';\n return value\n .replace(/\\s+/g, ' ')\n .trim()\n .replace(/[:*]\\s*$/, '') // Remove trailing colons or asterisks (common in forms)\n .trim()\n .toLowerCase();\n}\nfunction getVisibleInputLikeControls(root) {\n try {\n return Array.from(root.querySelectorAll('input,textarea,select,[role=\"textbox\"],[role=\"combobox\"],[role=\"searchbox\"],[role=\"spinbutton\"],[contenteditable=\"true\"],[aria-haspopup=\"listbox\"],[aria-haspopup=\"combobox\"]')).filter(visibility_1.isVisibleElement);\n }\n catch {\n return [];\n }\n}\nfunction getVisibleTriggerLikeControls(root) {\n try {\n return Array.from(root.querySelectorAll('select,[role=\"combobox\"],[role=\"button\"][aria-haspopup],[aria-haspopup=\"listbox\"],[aria-haspopup=\"combobox\"],button[aria-haspopup],input[role=\"combobox\"],[contenteditable=\"true\"]')).filter(visibility_1.isVisibleElement);\n }\n catch {\n return [];\n }\n}\nfunction findExactVisibleLabelLikeDescendants(root, labelText) {\n const normalizedLabel = normalizeStructuredSelectorText(labelText);\n try {\n const candidates = Array.from(root.querySelectorAll('label,legend,span,div,p')).filter(element => (0, visibility_1.isVisibleElement)(element) &&\n normalizeStructuredSelectorText(element.textContent || '') === normalizedLabel);\n return candidates.filter(element => !candidates.some(other => other !== element && element.contains(other)));\n }\n catch {\n return [];\n }\n}\nfunction findTightFieldContainer(label, target) {\n let current = label;\n let depth = 0;\n while (current && depth < 5) {\n const tagName = current.tagName?.toLowerCase() || '';\n if (['body', 'html', 'main', 'section', 'article', 'table', 'tbody', 'thead', 'form'].includes(tagName)) {\n break;\n }\n const controls = getVisibleInputLikeControls(current);\n if (controls.length === 1 && controls[0] === target) {\n return { container: current };\n }\n if (controls.length > 1 && controls.includes(target)) {\n return { container: null, blockedReason: 'multiple_input_like_targets' };\n }\n current = current.parentElement;\n depth += 1;\n }\n return { container: null, blockedReason: 'broad_container_only' };\n}\nfunction findTightTriggerContainer(target, labelText) {\n let current = target;\n let depth = 0;\n while (current && depth < 5) {\n const tagName = current.tagName?.toLowerCase() || '';\n if (['body', 'html', 'main', 'section', 'article', 'table', 'tbody', 'thead', 'form'].includes(tagName)) {\n break;\n }\n const labels = findExactVisibleLabelLikeDescendants(current, labelText);\n if (labels.length > 1) {\n return { container: null, labelElement: null, blockedReason: 'duplicate_label_text' };\n }\n const controls = getVisibleTriggerLikeControls(current);\n if (labels.length === 1 && controls.length === 1 && controls[0] === target) {\n return { container: current, labelElement: labels[0] };\n }\n if (labels.length === 1 && controls.length > 1 && controls.includes(target)) {\n return { container: null, labelElement: labels[0], blockedReason: 'multiple_input_like_targets' };\n }\n current = current.parentElement;\n depth += 1;\n }\n return { container: null, labelElement: null, blockedReason: 'broad_container_only' };\n}\nfunction isGenericContainerSelector(selector) {\n if (!selector)\n return true;\n const normalized = selector.trim().toLowerCase();\n // Tag-only generic selectors\n if (['div', 'span', 'body', 'html', 'main', 'section', 'article', 'form', 'table'].includes(normalized)) {\n return true;\n }\n // Common broad class names (case-insensitive)\n const genericClassPatterns = [\n /\\.container\\b/i,\n /\\.wrapper\\b/i,\n /\\.content\\b/i,\n /\\.row\\b/i,\n /\\.form\\b/i,\n ];\n if (genericClassPatterns.some(pattern => pattern.test(normalized))) {\n return true;\n }\n return false;\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.findExactVisibleFieldLabels = findExactVisibleFieldLabels;\nexports.findBoundedFieldProof = findBoundedFieldProof;\nconst text_matching_1 = require(\"../text-matching\");\nconst structured_selector_utils_1 = require(\"../structured-selector-utils\");\nconst visibility_1 = require(\"../visibility\");\nconst BROAD_FIELD_STOP_TAGS = new Set([\n 'body',\n 'html',\n 'main',\n 'section',\n 'article',\n 'table',\n 'tbody',\n 'thead',\n 'form',\n]);\nfunction isVeryOpaqueMixedId(id) {\n if (id.length < 18)\n return false;\n if (!/[a-z]/i.test(id) || !/\\d/.test(id))\n return false;\n if (!/^[a-z0-9_-]+$/i.test(id))\n return false;\n const tokens = id.split(/[-_]/).filter(Boolean);\n if (tokens.length <= 1) {\n return /[a-z]{2,}\\d{2,}[a-z0-9]{6,}/i.test(id);\n }\n return tokens.every(token => token.length >= 4 && /[a-z]/i.test(token) && /\\d/.test(token));\n}\nfunction hasOpaqueHyphenatedSegments(id) {\n const tokens = id.split(/[-_]/).filter(Boolean);\n if (tokens.length < 3)\n return false;\n const opaqueTokens = tokens.filter(token => token.length >= 4 &&\n /[a-z]/i.test(token) &&\n (/\\d/.test(token) || token.length >= 8) &&\n !/(user|admin|menu|nav|search|input|button|dialog|modal|form|table|row|col|step|line|email|name|leave|logout|login|address)/i.test(token));\n return opaqueTokens.length >= 2;\n}\nfunction isUtilityClassToken(token) {\n return (/^(?:flex|grid|block|hidden)$/i.test(token) ||\n /^(?:items|justify|content|self|place)-/i.test(token) ||\n /^(?:p|m)(?:[trblxy])?-\\d+/i.test(token) ||\n /^(?:text|bg|border|rounded)-/i.test(token) ||\n /^(?:w|h|min|max)-/i.test(token) ||\n /^(?:gap|space-[xy]|inset|top|left|right|bottom)-/i.test(token) ||\n /^(?:hover|focus|active|disabled|group-hover|focus-within|focus-visible):/i.test(token));\n}\nfunction isStateClassToken(token) {\n const normalized = token.trim().toLowerCase();\n if (!normalized)\n return false;\n if (/^(?:is|has)-[a-z0-9:_-]+$/i.test(normalized))\n return true;\n if (/--(?:focus|focused|active|selected|open|disabled|hover|loading|expanded|collapsed|current|checked|invalid|valid|dirty|touched|visited|state)$/i.test(normalized)) {\n return true;\n }\n if (normalized.includes('data-state') || normalized.includes('headlessui-state'))\n return true;\n return /(focus|focused|active|selected|open|disabled|hover|loading|expanded|collapsed|current|checked|invalid|valid|dirty|touched|visited|state)/.test(normalized);\n}\nfunction isFrameworkClassToken(token) {\n return /^(?:oxd-|mui|ant-|chakra-|radix-|headlessui-)/i.test(token);\n}\nfunction isGenericShellClassToken(token) {\n return /^(?:container|wrapper|row|item|content|layout|shell|panel|section|body|header|footer)$/i.test(token);\n}\nfunction isCssInJsClassToken(token) {\n return /^(?:css-|sc-)/i.test(token);\n}\nfunction isHashedRandomClassToken(token) {\n if (isCssInJsClassToken(token))\n return true;\n if (token.length < 8)\n return false;\n if (!/[a-z]/i.test(token))\n return false;\n if (/^(?:oxd-|mui|ant-|chakra-)/i.test(token))\n return false;\n if (/^[a-z0-9_-]+$/i.test(token) && /\\d/.test(token)) {\n const parts = token.split(/[-_]/).filter(Boolean);\n if (parts.length <= 1) {\n return /[a-z]{2,}\\d{2,}[a-z0-9]{4,}/i.test(token);\n }\n return parts.every(part => part.length >= 3 && (/\\d/.test(part) || /^[a-z]{6,}$/i.test(part)));\n }\n return false;\n}\nfunction isStableRecoverableId(id) {\n if (typeof id !== 'string')\n return false;\n const trimmed = id.trim();\n if (!trimmed)\n return false;\n return !isVeryOpaqueMixedId(trimmed) && !hasOpaqueHyphenatedSegments(trimmed);\n}\nfunction classifySemanticContainerClass(stableClass) {\n if (!stableClass)\n return false;\n return !(isUtilityClassToken(stableClass) ||\n isCssInJsClassToken(stableClass) ||\n isHashedRandomClassToken(stableClass) ||\n isStateClassToken(stableClass) ||\n isFrameworkClassToken(stableClass) ||\n isGenericShellClassToken(stableClass));\n}\nfunction buildIdSelectors(id) {\n const attributeSelector = `[id=\"${(0, text_matching_1.cssEscape)(id)}\"]`;\n if (!/^[A-Za-z_][A-Za-z0-9_-]*$/.test(id)) {\n return [attributeSelector];\n }\n return [`#${(0, text_matching_1.cssEscape)(id)}`, attributeSelector];\n}\nfunction deriveSafeContainerSelector(container) {\n const attrs = {\n id: container.getAttribute('id') || container.id || undefined,\n dataTestId: container.getAttribute('data-testid') || undefined,\n dataCy: container.getAttribute('data-cy') || undefined,\n dataQa: container.getAttribute('data-qa') || undefined,\n class: container.getAttribute('class') || undefined,\n };\n const tagName = container.tagName?.toLowerCase() || 'div';\n if (attrs.dataTestId)\n return { selector: `[data-testid=\"${(0, text_matching_1.cssEscape)(attrs.dataTestId)}\"]`, kind: 'data-testid' };\n if (attrs.dataCy)\n return { selector: `[data-cy=\"${(0, text_matching_1.cssEscape)(attrs.dataCy)}\"]`, kind: 'data-cy' };\n if (attrs.dataQa)\n return { selector: `[data-qa=\"${(0, text_matching_1.cssEscape)(attrs.dataQa)}\"]`, kind: 'data-qa' };\n if (isStableRecoverableId(attrs.id))\n return { selector: buildIdSelectors(attrs.id)[0] ?? null, kind: 'id' };\n const stableClass = (0, text_matching_1.findStableClassFromAttributes)(attrs.class);\n if (stableClass) {\n return {\n selector: `${tagName}.${(0, text_matching_1.cssEscape)(stableClass)}`,\n kind: classifySemanticContainerClass(stableClass) ? 'semantic-class' : 'framework-class',\n };\n }\n return { selector: null, kind: 'unsafe' };\n}\nfunction summarizeContainer(container) {\n const tagName = container.tagName?.toLowerCase() || 'div';\n const className = (container.getAttribute('class') || '').trim().split(/\\s+/).filter(Boolean)[0];\n if (className)\n return `${tagName}.${className}`;\n const role = container.getAttribute('role');\n if (role)\n return `${tagName}[role=\"${role}\"]`;\n return tagName;\n}\nfunction uniqueVisibleMatches(selector, root) {\n if (!selector || !(0, text_matching_1.isLikelyCssSelector)(selector))\n return [];\n try {\n return Array.from(root.querySelectorAll(selector)).filter(visibility_1.isVisibleElement);\n }\n catch {\n return [];\n }\n}\nfunction isTriggerLikeElement(element) {\n return (0, structured_selector_utils_1.getVisibleTriggerLikeControls)(element.parentElement ?? element.ownerDocument).includes(element);\n}\nfunction matchesControlKind(element, controlKind) {\n const tagName = element.tagName?.toLowerCase() || '';\n const role = (element.getAttribute('role') || '').toLowerCase();\n const contentEditable = (element.getAttribute('contenteditable') || '').toLowerCase();\n const inputType = (element.getAttribute('type') || '').toLowerCase();\n switch (controlKind) {\n case 'input':\n return tagName === 'input' && inputType !== 'hidden';\n case 'textarea':\n return tagName === 'textarea';\n case 'select':\n return tagName === 'select';\n case 'custom-trigger':\n return isTriggerLikeElement(element);\n case 'combobox':\n return tagName === 'select' || role === 'combobox' || (element.getAttribute('aria-haspopup') || '').toLowerCase() === 'listbox';\n case 'searchbox':\n return role === 'searchbox' || (tagName === 'input' && inputType === 'search');\n case 'contenteditable':\n return contentEditable === 'true';\n case 'unknown':\n default:\n return true;\n }\n}\nfunction getVisibleControlLikeTargets(root) {\n const controls = new Set();\n for (const element of (0, structured_selector_utils_1.getVisibleInputLikeControls)(root))\n controls.add(element);\n for (const element of (0, structured_selector_utils_1.getVisibleTriggerLikeControls)(root))\n controls.add(element);\n return Array.from(controls).filter(visibility_1.isVisibleElement);\n}\nfunction getMatchingTargetElements(root, targetSpec, controlKind) {\n const matches = uniqueVisibleMatches(targetSpec.selector, root);\n return matches.filter(match => matchesControlKind(match, controlKind));\n}\nfunction getEligibleControlKindTargets(root, controlKind) {\n return getVisibleControlLikeTargets(root).filter(match => matchesControlKind(match, controlKind));\n}\nfunction bindTargetWithinScope(root, targetSpec, controlKind, preferredTarget) {\n const matchingTargets = getMatchingTargetElements(root, targetSpec, controlKind);\n if (matchingTargets.length === 1) {\n return { target: matchingTargets[0] };\n }\n if (matchingTargets.length > 1) {\n return { target: null, rejectReason: 'target_selector_ambiguous' };\n }\n const eligibleTargets = getEligibleControlKindTargets(root, controlKind);\n if (preferredTarget && eligibleTargets.includes(preferredTarget)) {\n return { target: preferredTarget };\n }\n if (eligibleTargets.length === 1) {\n return { target: eligibleTargets[0] };\n }\n if (eligibleTargets.length > 1) {\n return { target: null, rejectReason: 'bounded-field-multiple-targets' };\n }\n return { target: null, rejectReason: 'bounded-field-target-binding-failed' };\n}\nfunction deriveRenderMetadata(container, targetSpec, relation) {\n const containerDescriptor = deriveSafeContainerSelector(container);\n const isGeneric = (0, structured_selector_utils_1.isGenericContainerSelector)(containerDescriptor.selector);\n const cleanParentSelector = containerDescriptor.selector &&\n ['data-testid', 'data-cy', 'data-qa', 'id', 'semantic-class'].includes(containerDescriptor.kind) &&\n !isGeneric\n ? containerDescriptor.selector\n : undefined;\n const cleanChildSelector = targetSpec.selector;\n let renderStatus = cleanParentSelector ? 'clean-scoped-locator' : 'proven-structural-fallback';\n let renderReason = cleanParentSelector ? 'clean_parent_unique_visible' : 'no_clean_parent_selector';\n if (!cleanParentSelector && isGeneric) {\n renderStatus = 'proof-only-no-clean-render';\n renderReason = 'generic_container_proof_only';\n }\n const warningCodes = (cleanParentSelector || renderStatus === 'proof-only-no-clean-render')\n ? []\n : ['bounded-field-structural-fallback'];\n return {\n renderStatus,\n renderReason,\n cleanParentSelector,\n cleanChildSelector,\n containerSelector: containerDescriptor.selector ?? undefined,\n boundedContainerSummary: summarizeContainer(container),\n warningCodes: relation === 'bounded-container' || relation === 'sibling-label' ? warningCodes : [],\n };\n}\nfunction findExplicitAssociationProof(label, targetSpec, controlKind) {\n const doc = label.ownerDocument;\n const labelText = label.textContent || '';\n const normalizedLabelText = (0, structured_selector_utils_1.normalizeStructuredSelectorText)(labelText);\n const labelFor = label.getAttribute('for');\n if (label.tagName?.toLowerCase() === 'label' && labelFor) {\n const target = doc.getElementById(labelFor);\n if (target && (0, visibility_1.isVisibleElement)(target) && matchesControlKind(target, controlKind)) {\n const targetIdSelector = buildIdSelectors(labelFor)[0] ?? `[id=\"${(0, text_matching_1.cssEscape)(labelFor)}\"]`;\n return {\n labelElement: label,\n targetElement: target,\n containerElement: target.parentElement ?? label.parentElement ?? label,\n relation: 'label-for',\n renderStatus: 'clean-direct-selector',\n renderReason: 'label_for_exact',\n cleanChildSelector: targetIdSelector,\n };\n }\n }\n if (label.contains?.(label)) {\n // no-op; keeps TS happy on older DOM typings\n }\n const wrappedBinding = bindTargetWithinScope(label, targetSpec, controlKind);\n if (wrappedBinding.target) {\n return {\n labelElement: label,\n targetElement: wrappedBinding.target,\n containerElement: label,\n relation: 'wrapped-label',\n ...deriveRenderMetadata(label, targetSpec, 'wrapped-label'),\n };\n }\n const labelId = label.getAttribute('id');\n if (labelId && normalizedLabelText) {\n const ariaRoot = {\n querySelectorAll: (selector) => doc.querySelectorAll(selector),\n };\n const ariaBinding = bindTargetWithinScope(ariaRoot, {\n ...targetSpec,\n selector: `[aria-labelledby~=\"${(0, text_matching_1.cssEscape)(labelId)}\"]`,\n }, controlKind);\n if (ariaBinding.target) {\n const tagName = ariaBinding.target.tagName?.toLowerCase() || targetSpec.selector;\n return {\n labelElement: label,\n targetElement: ariaBinding.target,\n containerElement: ariaBinding.target.parentElement ?? label.parentElement ?? label,\n relation: 'aria-labelledby',\n renderStatus: 'clean-direct-selector',\n renderReason: 'aria_labelledby_exact',\n cleanChildSelector: `${tagName}[aria-labelledby~=\"${(0, text_matching_1.cssEscape)(labelId)}\"]`,\n };\n }\n }\n return null;\n}\nfunction findBoundedContainerProof(label, targetSpec, controlKind) {\n let current = label;\n let depth = 0;\n while (current && depth < 5) {\n const tagName = current.tagName?.toLowerCase() || '';\n if (BROAD_FIELD_STOP_TAGS.has(tagName))\n break;\n const exactLabels = (0, structured_selector_utils_1.findExactVisibleLabelLikeDescendants)(current, label.textContent || '');\n if (exactLabels.length > 1) {\n return { match: null, rejectReason: 'bounded-field-duplicate-label' };\n }\n const allControls = getVisibleControlLikeTargets(current);\n const boundTarget = bindTargetWithinScope(current, targetSpec, controlKind);\n const matchingTarget = boundTarget.target;\n if (matchingTarget) {\n if (allControls.length !== 1 || allControls[0] !== matchingTarget) {\n return { match: null, rejectReason: 'bounded-field-multiple-targets' };\n }\n return {\n match: {\n labelElement: label,\n targetElement: matchingTarget,\n containerElement: current,\n relation: label.parentElement === current ? 'sibling-label' : 'bounded-container',\n ...deriveRenderMetadata(current, targetSpec, label.parentElement === current ? 'sibling-label' : 'bounded-container'),\n },\n rejectReason: null,\n };\n }\n if (boundTarget.rejectReason === 'target_selector_ambiguous') {\n return { match: null, rejectReason: 'target_selector_ambiguous' };\n }\n current = current.parentElement;\n depth += 1;\n }\n return { match: null, rejectReason: 'bounded-field-broad-container' };\n}\nfunction findExactVisibleFieldLabels(root, labelText) {\n const normalized = (0, structured_selector_utils_1.normalizeStructuredSelectorText)(labelText);\n try {\n const rootAsNode = root;\n const scope = rootAsNode.nodeType === 1\n ? root\n : (rootAsNode.ownerDocument ?? root);\n const candidates = Array.from(scope.querySelectorAll('label,legend,span,div,p')).filter(element => (0, visibility_1.isVisibleElement)(element) &&\n (0, structured_selector_utils_1.normalizeStructuredSelectorText)(element.textContent || '') === normalized);\n return candidates.filter(element => !candidates.some(other => other !== element && element.contains(other)));\n }\n catch {\n return [];\n }\n}\nfunction findBoundedFieldProof(snapshot, params) {\n const targetSpec = params.target.engine === 'scoped' || params.target.engine === 'bounded-field'\n ? null\n : params.target;\n if (!targetSpec || !(0, text_matching_1.isLikelyCssSelector)(targetSpec.selector)) {\n return { match: null, rejectReason: 'invalid-target-spec' };\n }\n const labels = findExactVisibleFieldLabels(snapshot, params.labelText);\n if (labels.length === 0) {\n return { match: null, rejectReason: 'bounded-field-no-label' };\n }\n for (const label of labels) {\n if (!params.relation || params.relation === 'label-for' || params.relation === 'wrapped-label' || params.relation === 'aria-labelledby') {\n const explicit = findExplicitAssociationProof(label, targetSpec, params.controlKind);\n if (explicit) {\n if (!params.relation || params.relation === explicit.relation) {\n if (labels.length > 1) {\n explicit.warningCodes = [...(explicit.warningCodes || []), 'bounded-field-global-duplicate-label'];\n }\n return { match: explicit, rejectReason: null };\n }\n }\n }\n if (!params.relation ||\n params.relation === 'sibling-label' ||\n params.relation === 'bounded-container') {\n const boundedResult = findBoundedContainerProof(label, targetSpec, params.controlKind);\n if (boundedResult.match) {\n if (labels.length > 1) {\n boundedResult.match.warningCodes = [...(boundedResult.match.warningCodes || []), 'bounded-field-global-duplicate-label'];\n }\n return boundedResult;\n }\n }\n }\n return { match: null, rejectReason: 'bounded-field-broad-container' };\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateBoundedFieldSelectorSpec = validateBoundedFieldSelectorSpec;\nexports.toCandidateValidation = toCandidateValidation;\nconst find_bounded_field_1 = require(\"./find-bounded-field\");\nfunction rejectResult(reason) {\n return {\n totalMatchCount: 0,\n visibleMatchCount: 0,\n effectiveMatchCount: 0,\n reason: 'no-visible-match',\n confidenceScore: 0,\n rejectReason: reason ?? null,\n };\n}\nfunction validateBoundedFieldSelectorSpec(spec, snapshot, _context = {}) {\n const recordedBoundedField = spec.boundedField.source === 'recorded-bounded-field'\n ? spec.boundedField\n : null;\n const proof = (0, find_bounded_field_1.findBoundedFieldProof)(snapshot, {\n labelText: spec.boundedField.labelText,\n target: spec.boundedField.target,\n controlKind: spec.boundedField.controlKind,\n relation: spec.boundedField.relation,\n originalSelector: spec.boundedField.originalSelector,\n snapshotSource: spec.boundedField.snapshotSource,\n });\n if (!proof.match) {\n if (recordedBoundedField &&\n recordedBoundedField.recordedValidity &&\n recordedBoundedField.cleanChildSelector &&\n (recordedBoundedField.cleanParentSelector || recordedBoundedField.containerSelector)) {\n return {\n totalMatchCount: 1,\n visibleMatchCount: 1,\n effectiveMatchCount: 1,\n reason: 'unique-visible',\n matchCount: 1,\n confidenceScore: 0.82,\n resolvedElement: null,\n proofSummary: `recorded:${recordedBoundedField.relation}:${recordedBoundedField.renderReason || 'recorded_bounded_field'}`,\n matchedContainerSummary: recordedBoundedField.boundedContainerSummary ?? null,\n warningCodes: Array.from(new Set([\n ...(recordedBoundedField.warningCodes ?? []),\n 'recorded-bounded-field-proof',\n ])),\n rejectReason: null,\n };\n }\n return rejectResult(proof.rejectReason);\n }\n return {\n totalMatchCount: 1,\n visibleMatchCount: 1,\n effectiveMatchCount: 1,\n reason: 'unique-visible',\n matchCount: 1,\n confidenceScore: 1,\n resolvedElement: proof.match.targetElement,\n proofSummary: `${proof.match.relation}:${proof.match.renderReason}`,\n matchedContainerSummary: proof.match.boundedContainerSummary ?? null,\n warningCodes: proof.match.warningCodes ?? [],\n rejectReason: null,\n };\n}\nfunction toCandidateValidation(validation) {\n return {\n totalMatchCount: validation.totalMatchCount,\n visibleMatchCount: validation.visibleMatchCount,\n effectiveMatchCount: validation.effectiveMatchCount,\n reason: validation.reason,\n matchCount: validation.matchCount,\n confidenceScore: validation.confidenceScore,\n ambiguityReason: validation.ambiguityReason,\n resolvedElement: validation.resolvedElement,\n };\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateScopedSelectorSpec = validateScopedSelectorSpec;\nexports.validateBoundedFieldStructuredSelectorSpec = validateBoundedFieldStructuredSelectorSpec;\nexports.validateSelectorSpec = validateSelectorSpec;\nexports.validateRawCandidate = validateRawCandidate;\nconst types_1 = require(\"./types\");\nconst validate_bounded_field_1 = require(\"./bounded-field/validate-bounded-field\");\nconst text_matching_1 = require(\"./text-matching\");\nconst visibility_1 = require(\"./visibility\");\nconst structured_selector_utils_1 = require(\"./structured-selector-utils\");\nconst visibility_2 = require(\"./visibility\");\nfunction getValidationRoot(snapshot, root) {\n return root ?? snapshot;\n}\nfunction summarizeMatches(collection) {\n if (collection.blockedReason === 'invalid-selector') {\n return {\n totalMatchCount: 0,\n visibleMatchCount: 0,\n effectiveMatchCount: 0,\n reason: 'invalid-selector',\n confidenceScore: 0,\n };\n }\n if (collection.visibleMatchCount === 0) {\n return {\n totalMatchCount: collection.totalMatchCount,\n visibleMatchCount: 0,\n effectiveMatchCount: 0,\n reason: collection.blockedReason === 'too-broad' ? 'too-broad' : 'no-visible-match',\n matchCount: 0,\n confidenceScore: 0,\n resolvedElement: null,\n };\n }\n if (collection.visibleMatchCount === 1) {\n return {\n totalMatchCount: collection.totalMatchCount,\n visibleMatchCount: 1,\n effectiveMatchCount: 1,\n reason: 'unique-visible',\n matchCount: 1,\n confidenceScore: 1,\n resolvedElement: collection.matches[0] ?? null,\n };\n }\n return {\n totalMatchCount: collection.totalMatchCount,\n visibleMatchCount: collection.visibleMatchCount,\n effectiveMatchCount: collection.visibleMatchCount > 1 ? 2 : 0,\n reason: collection.totalMatchCount > types_1.BROAD_SELECTOR_MATCH_LIMIT ? 'too-broad' : 'non-unique',\n matchCount: collection.visibleMatchCount,\n confidenceScore: 0.3,\n resolvedElement: null,\n };\n}\nfunction isWithinRoot(root, element) {\n if (root === element || root === element.ownerDocument)\n return true;\n if ('contains' in root && typeof root.contains === 'function') {\n return root.contains(element);\n }\n return false;\n}\nfunction collectFlatMatches(spec, snapshot, context) {\n const root = getValidationRoot(snapshot, context.root);\n const selector = spec.selector.trim();\n if ((0, text_matching_1.isTextSelector)(selector)) {\n const rawSelector = selector.trim();\n let scopeSelector = null;\n let textNeedle = '';\n if (rawSelector.startsWith('text=')) {\n textNeedle = (0, text_matching_1.unquoteTextLiteral)(rawSelector.slice(5).trim());\n }\n else {\n const hasTextMatch = rawSelector.match(/^(.*):has-text\\((.*)\\)$/);\n if (!hasTextMatch) {\n return {\n matches: [],\n totalMatchCount: 0,\n visibleMatchCount: 0,\n blockedReason: 'invalid-selector',\n };\n }\n scopeSelector = hasTextMatch[1]?.trim() || null;\n textNeedle = (0, text_matching_1.unquoteTextLiteral)(hasTextMatch[2]?.trim() || '');\n }\n const normalizedNeedle = (0, text_matching_1.normalizeTextForMatch)(textNeedle);\n if (!normalizedNeedle) {\n return {\n matches: [],\n totalMatchCount: 0,\n visibleMatchCount: 0,\n blockedReason: 'invalid-selector',\n };\n }\n let scopeMatches;\n try {\n scopeMatches = scopeSelector\n ? Array.from(root.querySelectorAll(scopeSelector))\n : Array.from(root.querySelectorAll('*'));\n }\n catch {\n return {\n matches: [],\n totalMatchCount: 0,\n visibleMatchCount: 0,\n blockedReason: 'invalid-selector',\n };\n }\n let matchedElements = scopeMatches.filter(element => {\n const signals = (0, text_matching_1.getElementTextSignals)(element).map(text_matching_1.normalizeTextForMatch).filter(Boolean);\n return signals.some(signal => signal.includes(normalizedNeedle));\n });\n if (context.step && (0, visibility_1.hasFieldIntent)(context.step)) {\n matchedElements = matchedElements.filter(element => (0, visibility_1.elementLooksInputLike)(element) || (0, visibility_1.elementLooksInteractive)(element));\n }\n const visibleMatches = matchedElements.filter(visibility_2.isVisibleElement);\n return {\n matches: visibleMatches,\n totalMatchCount: matchedElements.length,\n visibleMatchCount: visibleMatches.length,\n blockedReason: visibleMatches.length > types_1.BROAD_SELECTOR_MATCH_LIMIT ? 'too-broad' : undefined,\n };\n }\n if (!(0, text_matching_1.isLikelyCssSelector)(selector)) {\n return {\n matches: [],\n totalMatchCount: 0,\n visibleMatchCount: 0,\n blockedReason: 'invalid-selector',\n };\n }\n try {\n const allMatches = Array.from(root.querySelectorAll(selector));\n const visibleMatches = allMatches.filter(visibility_2.isVisibleElement);\n return {\n matches: visibleMatches,\n totalMatchCount: allMatches.length,\n visibleMatchCount: visibleMatches.length,\n blockedReason: allMatches.length > types_1.BROAD_SELECTOR_MATCH_LIMIT ? 'too-broad' : undefined,\n };\n }\n catch {\n return {\n matches: [],\n totalMatchCount: 0,\n visibleMatchCount: 0,\n blockedReason: 'invalid-selector',\n };\n }\n}\nfunction collectLabelContextMatches(labelContext, snapshot, context) {\n const root = getValidationRoot(snapshot, context.root);\n const matches = [];\n if (labelContext.association === 'wrapped-label') {\n try {\n const labels = Array.from(root.querySelectorAll('label')).filter(label => (0, structured_selector_utils_1.normalizeStructuredSelectorText)(label.textContent || '') === (0, structured_selector_utils_1.normalizeStructuredSelectorText)(labelContext.labelText));\n for (const label of labels) {\n const controls = (0, structured_selector_utils_1.getVisibleInputLikeControls)(label).filter(control => control.tagName?.toLowerCase() === labelContext.targetTag);\n if (controls.length === 1) {\n matches.push(controls[0]);\n }\n }\n }\n catch {\n return {\n matches: [],\n totalMatchCount: 0,\n visibleMatchCount: 0,\n blockedReason: 'invalid-selector',\n };\n }\n return {\n matches,\n totalMatchCount: matches.length,\n visibleMatchCount: matches.length,\n };\n }\n if (labelContext.association === 'bounded-field' && labelContext.containerSelector) {\n try {\n const containers = Array.from(root.querySelectorAll(labelContext.containerSelector)).filter(visibility_2.isVisibleElement);\n for (const container of containers) {\n const labels = Array.from(container.querySelectorAll('label')).filter(label => (0, structured_selector_utils_1.normalizeStructuredSelectorText)(label.textContent || '') === (0, structured_selector_utils_1.normalizeStructuredSelectorText)(labelContext.labelText));\n if (labels.length !== 1)\n continue;\n const controls = (0, structured_selector_utils_1.getVisibleInputLikeControls)(container).filter(control => control.tagName?.toLowerCase() === labelContext.targetTag);\n if (controls.length === 1) {\n matches.push(controls[0]);\n }\n }\n }\n catch {\n return {\n matches: [],\n totalMatchCount: 0,\n visibleMatchCount: 0,\n blockedReason: 'invalid-selector',\n };\n }\n return {\n matches,\n totalMatchCount: matches.length,\n visibleMatchCount: matches.length,\n };\n }\n if (labelContext.association === 'label-for' && labelContext.targetId) {\n const target = snapshot.getElementById(labelContext.targetId);\n if (!target || !isWithinRoot(root, target) || !(0, visibility_2.isVisibleElement)(target)) {\n return {\n matches: [],\n totalMatchCount: target ? 1 : 0,\n visibleMatchCount: 0,\n blockedReason: target ? 'no-visible-match' : 'no-visible-match',\n };\n }\n return {\n matches: [target],\n totalMatchCount: 1,\n visibleMatchCount: 1,\n };\n }\n if (labelContext.association === 'aria-labelledby' && labelContext.ariaLabelledBy) {\n const selector = `${labelContext.targetTag}[aria-labelledby=\"${labelContext.ariaLabelledBy.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"]`;\n return collectFlatMatches({\n engine: 'css',\n selector,\n source: 'resolver',\n proofLevel: 'snapshot_validated',\n }, snapshot, context);\n }\n return {\n matches: [],\n totalMatchCount: 0,\n visibleMatchCount: 0,\n blockedReason: 'invalid-selector',\n };\n}\nfunction collectTriggerContextMatches(triggerContext, snapshot, context) {\n const root = getValidationRoot(snapshot, context.root);\n if (triggerContext.association !== 'bounded-field' || !triggerContext.containerSelector) {\n return {\n matches: [],\n totalMatchCount: 0,\n visibleMatchCount: 0,\n blockedReason: 'invalid-selector',\n };\n }\n const matches = [];\n try {\n const containers = Array.from(root.querySelectorAll(triggerContext.containerSelector)).filter(visibility_2.isVisibleElement);\n for (const container of containers) {\n const labelMatches = (0, structured_selector_utils_1.findExactVisibleLabelLikeDescendants)(container, triggerContext.labelText)\n .filter(element => (element.tagName?.toLowerCase() || '') === (triggerContext.labelElementTag || 'label'));\n if (labelMatches.length !== 1)\n continue;\n const controls = (0, structured_selector_utils_1.getVisibleTriggerLikeControls)(container).filter(control => {\n const childSelector = triggerContext.cleanChildSelector || triggerContext.triggerSelector;\n if (!childSelector)\n return false;\n try {\n return Array.from(container.querySelectorAll(childSelector)).includes(control);\n }\n catch {\n return false;\n }\n });\n if (controls.length === 1) {\n matches.push(controls[0]);\n }\n }\n }\n catch {\n return {\n matches: [],\n totalMatchCount: 0,\n visibleMatchCount: 0,\n blockedReason: 'invalid-selector',\n };\n }\n return {\n matches,\n totalMatchCount: matches.length,\n visibleMatchCount: matches.length,\n };\n}\nfunction collectScopedMatches(spec, snapshot, context) {\n const scopeCollection = collectMatchesForSelectorSpec(spec.scope, snapshot, context);\n if (scopeCollection.visibleMatchCount === 0) {\n return {\n matches: [],\n totalMatchCount: 0,\n visibleMatchCount: 0,\n blockedReason: scopeCollection.blockedReason ?? 'no-visible-match',\n };\n }\n const matches = [];\n for (const scopeElement of scopeCollection.matches) {\n const targetCollection = collectMatchesForSelectorSpec(spec.target, snapshot, {\n ...context,\n root: scopeElement,\n });\n for (const match of targetCollection.matches) {\n if ((0, visibility_2.isVisibleElement)(match)) {\n matches.push(match);\n }\n }\n }\n return {\n matches,\n totalMatchCount: matches.length,\n visibleMatchCount: matches.length,\n blockedReason: matches.length > types_1.BROAD_SELECTOR_MATCH_LIMIT ? 'too-broad' : undefined,\n };\n}\nfunction collectMatchesForSelectorSpec(spec, snapshot, context) {\n switch (spec.engine) {\n case 'scoped':\n return collectScopedMatches(spec, snapshot, context);\n case 'bounded-field': {\n const validation = validateBoundedFieldStructuredSelectorSpec(spec, snapshot, context);\n return {\n matches: validation.resolvedElement ? [validation.resolvedElement] : [],\n totalMatchCount: validation.totalMatchCount,\n visibleMatchCount: validation.visibleMatchCount,\n blockedReason: validation.reason === 'unique-visible' ? undefined : validation.reason,\n };\n }\n case 'label-context':\n return spec.labelContext\n ? collectLabelContextMatches(spec.labelContext, snapshot, context)\n : { matches: [], totalMatchCount: 0, visibleMatchCount: 0, blockedReason: 'invalid-selector' };\n case 'trigger-context':\n return spec.triggerContext\n ? collectTriggerContextMatches(spec.triggerContext, snapshot, context)\n : { matches: [], totalMatchCount: 0, visibleMatchCount: 0, blockedReason: 'invalid-selector' };\n default:\n return collectFlatMatches(spec, snapshot, context);\n }\n}\nfunction validateScopedSelectorSpec(spec, snapshot, context = {}) {\n return summarizeMatches(collectScopedMatches(spec, snapshot, context));\n}\nfunction validateBoundedFieldStructuredSelectorSpec(spec, snapshot, context = {}) {\n return (0, validate_bounded_field_1.validateBoundedFieldSelectorSpec)(spec, snapshot, context);\n}\nfunction validateSelectorSpec(spec, snapshot, context = {}) {\n switch (spec.engine) {\n case 'scoped':\n return validateScopedSelectorSpec(spec, snapshot, context);\n case 'bounded-field':\n return validateBoundedFieldStructuredSelectorSpec(spec, snapshot, context);\n case 'label-context':\n return summarizeMatches(spec.labelContext\n ? collectLabelContextMatches(spec.labelContext, snapshot, context)\n : { matches: [], totalMatchCount: 0, visibleMatchCount: 0, blockedReason: 'invalid-selector' });\n case 'trigger-context':\n return summarizeMatches(spec.triggerContext\n ? collectTriggerContextMatches(spec.triggerContext, snapshot, context)\n : { matches: [], totalMatchCount: 0, visibleMatchCount: 0, blockedReason: 'invalid-selector' });\n default:\n return (0, text_matching_1.isTextSelector)(spec.selector)\n ? (0, visibility_2.validateTextCandidate)(spec.selector, snapshot, context.step, context.root)\n : (0, visibility_2.validateCSSCandidate)(spec.selector, snapshot, context.step, context.root);\n }\n}\nfunction validateRawCandidate(candidate, snapshot, step) {\n if (candidate.engine === 'bounded-field' && candidate.boundedField) {\n return (0, validate_bounded_field_1.validateBoundedFieldSelectorSpec)({\n selector: candidate.selector,\n engine: 'bounded-field',\n boundedField: candidate.boundedField,\n source: 'resolver',\n proofLevel: 'snapshot_validated',\n }, snapshot, { step });\n }\n if (candidate.engine === 'label-context') {\n return summarizeMatches(candidate.labelContext\n ? collectLabelContextMatches(candidate.labelContext, snapshot, { step })\n : { matches: [], totalMatchCount: 0, visibleMatchCount: 0, blockedReason: 'invalid-selector' });\n }\n if (candidate.engine === 'trigger-context') {\n return summarizeMatches(candidate.triggerContext\n ? collectTriggerContextMatches(candidate.triggerContext, snapshot, { step })\n : { matches: [], totalMatchCount: 0, visibleMatchCount: 0, blockedReason: 'invalid-selector' });\n }\n const selector = candidate.selector;\n return (0, text_matching_1.isTextSelector)(selector)\n ? (0, visibility_2.validateTextCandidate)(selector, snapshot, step)\n : (0, visibility_2.validateCSSCandidate)(selector, snapshot, step);\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.redactSnapshot = redactSnapshot;\nexports.serializeSnapshotExcerpt = serializeSnapshotExcerpt;\nconst element_ranking_1 = require(\"./element-ranking\");\nconst text_matching_1 = require(\"./text-matching\");\nconst NON_CONTENT_TAGS = new Set(['script', 'style', 'template', 'noscript']);\nconst STRIPPED_TAGS = new Set(['script', 'style', 'template', 'noscript', 'link', 'meta']);\nconst TEXT_LIKE_INPUT_TYPES = new Set([\n '',\n 'text',\n 'email',\n 'password',\n 'tel',\n 'search',\n 'url',\n 'number',\n 'date',\n 'datetime-local',\n 'time',\n 'hidden',\n]);\nconst SENSITIVE_TEXT_DETECTORS = [\n /\\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\b/i,\n /\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b/i,\n /\\b\\d{10,15}\\b/,\n /\\b\\d{6,}\\b/,\n /\\b[a-zA-Z0-9_-]{20,}\\b/,\n];\nconst SENSITIVE_TEXT_REPLACERS = [\n /\\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\b/gi,\n /\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b/gi,\n /\\b\\d{10,15}\\b/g,\n /\\b\\d{6,}\\b/g,\n /\\b[a-zA-Z0-9_-]{20,}\\b/g,\n];\nfunction excerptNowMs() {\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n return performance.now();\n }\n return Date.now();\n}\nfunction isExcerptTelemetryEnabled() {\n const runtime = globalThis;\n return runtime.__AIR_RESOLVER_DEBUG__ === true || runtime.__AIR_DEBUG__ === true;\n}\nfunction legacyRegexRedactSnapshot(html) {\n const redactLegacyInputTag = (tag) => {\n const typeMatch = tag.match(/\\btype\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/i);\n const inputType = (typeMatch?.[1] ?? typeMatch?.[2] ?? '').trim().toLowerCase();\n if (!TEXT_LIKE_INPUT_TYPES.has(inputType)) {\n return tag;\n }\n return tag.replace(/\\bvalue\\s*=\\s*(?:\"[^\"]*\"|'[^']*')/i, 'value=\"REDACTED\"');\n };\n return html\n .replace(/<input\\b[^>]*\\bvalue\\s*=\\s*(?:\"[^\"]*\"|'[^']*')[^>]*>/gi, redactLegacyInputTag)\n .replace(/<textarea[^>]*>[\\s\\S]*?<\\/textarea>/gi, '<textarea>REDACTED</textarea>')\n .replace(/\\b\\d{6,}\\b/g, 'REDACTED')\n .replace(/\\b[\\w.-]+@[\\w.-]+\\.\\w+\\b/g, 'REDACTED');\n}\nfunction containsSensitivePattern(value) {\n if (typeof value !== 'string' || !value)\n return false;\n return SENSITIVE_TEXT_DETECTORS.some(pattern => pattern.test(value));\n}\nfunction redactSensitiveSubstrings(value) {\n let result = value;\n for (const pattern of SENSITIVE_TEXT_REPLACERS) {\n result = result.replace(pattern, 'REDACTED');\n }\n return result;\n}\nfunction shouldRedactValueAttribute(element) {\n const tagName = (element.tagName || '').toLowerCase();\n if (tagName === 'textarea')\n return true;\n if (tagName !== 'input')\n return false;\n const type = ((element.getAttribute('type') || '').trim().toLowerCase());\n if (type === 'radio' || type === 'checkbox' || type === 'submit' || type === 'button' || type === 'reset') {\n return false;\n }\n return TEXT_LIKE_INPUT_TYPES.has(type);\n}\nfunction stripNoiseFromDom(root) {\n const rootTag = (root.tagName || '').toLowerCase();\n if (STRIPPED_TAGS.has(rootTag)) {\n while (root.firstChild) {\n root.removeChild(root.firstChild);\n }\n return;\n }\n const selectors = Array.from(STRIPPED_TAGS).join(',');\n if (!selectors)\n return;\n for (const node of Array.from(root.querySelectorAll(selectors))) {\n node.parentNode?.removeChild(node);\n }\n}\nfunction redactElementAttributes(element) {\n const tagName = (element.tagName || '').toLowerCase();\n if (tagName === 'textarea') {\n const currentText = element.textContent || '';\n if (currentText.length > 0) {\n element.textContent = 'REDACTED';\n }\n }\n if (element.hasAttribute('value') && shouldRedactValueAttribute(element)) {\n element.setAttribute('value', 'REDACTED');\n }\n if (element.hasAttribute('data-value')) {\n const dataValue = element.getAttribute('data-value');\n if (containsSensitivePattern(dataValue)) {\n element.setAttribute('data-value', 'REDACTED');\n }\n }\n if (tagName !== 'meta' && element.hasAttribute('content')) {\n const content = element.getAttribute('content');\n if (containsSensitivePattern(content)) {\n element.setAttribute('content', 'REDACTED');\n }\n }\n}\nfunction redactTextNodes(root) {\n const doc = root.ownerDocument;\n const showText = doc.defaultView?.NodeFilter?.SHOW_TEXT ?? 4;\n const walker = doc.createTreeWalker(root, showText);\n const textNodes = [];\n let current = walker.nextNode();\n while (current) {\n textNodes.push(current);\n current = walker.nextNode();\n }\n for (const textNode of textNodes) {\n const parentElement = textNode.parentElement;\n if (!parentElement)\n continue;\n const parentTag = (parentElement.tagName || '').toLowerCase();\n if (parentTag === 'textarea')\n continue;\n if (NON_CONTENT_TAGS.has(parentTag))\n continue;\n const original = textNode.textContent || '';\n if (!original)\n continue;\n if (!containsSensitivePattern(original)) {\n if (original.trim().length < 40) {\n continue;\n }\n continue;\n }\n const redacted = redactSensitiveSubstrings(original);\n if (redacted !== original) {\n textNode.textContent = redacted;\n }\n }\n}\nfunction redactDomFragment(root) {\n stripNoiseFromDom(root);\n const showElement = root.ownerDocument.defaultView?.NodeFilter?.SHOW_ELEMENT ?? 1;\n const walker = root.ownerDocument.createTreeWalker(root, showElement);\n const elements = [root];\n let current = walker.nextNode();\n while (current) {\n elements.push(current);\n current = walker.nextNode();\n }\n for (const element of elements) {\n const tagName = (element.tagName || '').toLowerCase();\n if (NON_CONTENT_TAGS.has(tagName) || tagName === 'meta')\n continue;\n redactElementAttributes(element);\n }\n redactTextNodes(root);\n}\nfunction serializeRedactedElement(root) {\n const clone = root.cloneNode(true);\n redactDomFragment(clone);\n return clone.outerHTML || '';\n}\nfunction parseHtmlWithAvailableDom(html) {\n const globalDocument = globalThis.document;\n if (!globalDocument?.implementation?.createHTMLDocument) {\n return null;\n }\n const scratch = globalDocument.implementation.createHTMLDocument('air-redact');\n const container = scratch.createElement('div');\n container.innerHTML = html;\n return container;\n}\nfunction redactSnapshot(html) {\n try {\n const container = parseHtmlWithAvailableDom(html);\n if (!container) {\n throw new Error('dom-parser-unavailable');\n }\n redactDomFragment(container);\n return container.innerHTML;\n }\n catch {\n return legacyRegexRedactSnapshot(html);\n }\n}\nfunction serializeSnapshotExcerpt(snapshot, step, maxChars) {\n const telemetry = {\n excerptBuildStartedAt: excerptNowMs(),\n pruneMs: 0,\n redactMs: 0,\n };\n const TARGET_MARKER_ATTR = 'data-air-target';\n const MAX_BOUNDARY_HTML_CHARS = 50000;\n const PRUNED_MARKER_TEXT = '[...pruned...]';\n const PRUNING_MODE = 'path_only_phase_1';\n const VOID_TAGS = new Set(['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr']);\n const SEMANTIC_BOUNDARY_TAGS = new Set(['form', 'dialog', 'table', 'section', 'fieldset', 'tr', 'li']);\n const stripNoise = (html) => {\n if (typeof html !== 'string') {\n return '';\n }\n return html\n .replace(/<script[\\s\\S]*?<\\/script>/gi, '')\n .replace(/<style[\\s\\S]*?<\\/style>/gi, '')\n .replace(/<link\\b[^>]*>/gi, '')\n .replace(/<meta\\b[^>]*>/gi, '')\n .replace(/<noscript[\\s\\S]*?<\\/noscript>/gi, '');\n };\n const legacySerializeFromElement = (targetElement, strategy = 'max-context') => {\n const candidateElements = [];\n candidateElements.push(targetElement);\n let parent = targetElement.parentElement;\n let depth = 0;\n while (parent && depth < 2) {\n candidateElements.push(parent);\n parent = parent.parentElement;\n depth++;\n }\n const redactedCandidates = candidateElements.map(element => {\n try {\n return serializeRedactedElement(element);\n }\n catch {\n return redactSnapshot(stripNoise(element.outerHTML));\n }\n });\n if (strategy === 'focused') {\n for (let index = 0; index < redactedCandidates.length; index += 1) {\n const redacted = redactedCandidates[index];\n const tagName = (candidateElements[index].tagName || '').toLowerCase();\n if (tagName === 'html' || tagName === 'body')\n continue;\n if (redacted.length >= 60 && redacted.length <= maxChars) {\n return redacted;\n }\n }\n for (let index = 0; index < redactedCandidates.length; index += 1) {\n const tagName = (candidateElements[index].tagName || '').toLowerCase();\n if (tagName === 'html' || tagName === 'body')\n continue;\n const candidate = redactedCandidates[index] || '';\n if (candidate.length > 0)\n return candidate.slice(0, maxChars);\n }\n const firstRedacted = redactedCandidates[0] || '';\n return firstRedacted.slice(0, maxChars);\n }\n let bestHtml = '';\n for (const redacted of redactedCandidates) {\n if (redacted.length <= maxChars && redacted.length > bestHtml.length) {\n bestHtml = redacted;\n }\n }\n if (!bestHtml) {\n const firstRedacted = redactedCandidates[0] || '';\n bestHtml = firstRedacted.slice(0, maxChars);\n }\n return bestHtml;\n };\n const isSemanticBoundaryElement = (element) => {\n const htmlElement = element;\n const tagName = (htmlElement.tagName || '').toLowerCase();\n if (SEMANTIC_BOUNDARY_TAGS.has(tagName))\n return true;\n const role = (htmlElement.getAttribute('role') || '').toLowerCase();\n if (role === 'dialog')\n return true;\n if (role === 'row' && tagName !== 'tr')\n return true;\n if (role === 'listitem' && tagName !== 'li')\n return true;\n return false;\n };\n const getBoundaryReason = (element, source) => {\n const htmlElement = element;\n const tagName = (htmlElement.tagName || '').toLowerCase();\n const role = (htmlElement.getAttribute('role') || '').toLowerCase();\n if (source === 'semantic') {\n if (role === 'dialog')\n return 'semantic-dialog';\n if (role === 'row' && tagName !== 'tr')\n return 'semantic-row';\n if (role === 'listitem' && tagName !== 'li')\n return 'semantic-listitem';\n return `semantic-${tagName || 'unknown'}`;\n }\n return `fallback-${tagName || 'target'}`;\n };\n const getAncestryChain = (targetElement) => {\n const chain = [];\n let current = targetElement;\n while (current) {\n chain.push(current);\n const tagName = ((current.tagName) || '').toLowerCase();\n if (tagName === 'body' || tagName === 'html')\n break;\n current = current.parentElement;\n }\n return chain;\n };\n const chooseBoundaryCandidate = (targetElement) => {\n const ancestry = getAncestryChain(targetElement);\n const semanticIndex = ancestry.findIndex(isSemanticBoundaryElement);\n const startingIndex = semanticIndex >= 0 ? semanticIndex : Math.min(2, ancestry.length - 1);\n const startingReason = semanticIndex >= 0\n ? getBoundaryReason(ancestry[startingIndex], 'semantic')\n : getBoundaryReason(ancestry[startingIndex], 'fallback');\n for (let index = startingIndex; index >= 0; index -= 1) {\n const candidate = ancestry[index];\n const candidateOuterHtml = typeof candidate.outerHTML === 'string'\n ? candidate.outerHTML\n : '';\n const candidateSize = stripNoise(candidateOuterHtml).length;\n if (!candidateOuterHtml || candidateSize === 0 || candidateSize <= MAX_BOUNDARY_HTML_CHARS) {\n const boundaryReason = index === startingIndex\n ? startingReason\n : `${startingReason}-size-guard-fallback`;\n return { boundary: candidate, boundaryReason };\n }\n }\n return {\n boundary: targetElement,\n boundaryReason: `${startingReason}-size-guard-target`,\n };\n };\n const pruneSiblingSubtree = (element) => {\n const descendantCount = typeof element.querySelectorAll === 'function'\n ? element.querySelectorAll('*').length\n : 0;\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n const htmlElement = element;\n const tagName = (htmlElement.tagName || '').toLowerCase();\n htmlElement.setAttribute('data-air-pruned', 'true');\n if (!VOID_TAGS.has(tagName)) {\n htmlElement.textContent = PRUNED_MARKER_TEXT;\n }\n return descendantCount + 1;\n };\n const serializePrunedBoundary = (targetElement, strategy = 'max-context') => {\n const pruneStartedAt = excerptNowMs();\n const targetHtmlElement = targetElement;\n if (typeof targetHtmlElement.outerHTML !== 'string') {\n return null;\n }\n const { boundary, boundaryReason } = chooseBoundaryCandidate(targetElement);\n const boundaryHtmlElement = boundary;\n if (typeof boundaryHtmlElement.outerHTML !== 'string') {\n return null;\n }\n let boundaryClone = null;\n let clonedTarget = null;\n try {\n targetHtmlElement.setAttribute(TARGET_MARKER_ATTR, 'true');\n if (typeof boundary.cloneNode !== 'function') {\n return null;\n }\n boundaryClone = boundary.cloneNode(true);\n if (!boundaryClone) {\n return null;\n }\n const cloneHtmlElement = boundaryClone;\n clonedTarget = cloneHtmlElement.getAttribute(TARGET_MARKER_ATTR) === 'true'\n ? boundaryClone\n : boundaryClone.querySelector(`[${TARGET_MARKER_ATTR}=\"true\"]`);\n if (!clonedTarget) {\n return null;\n }\n targetHtmlElement.removeAttribute(TARGET_MARKER_ATTR);\n clonedTarget.removeAttribute(TARGET_MARKER_ATTR);\n const pathNodes = [];\n const pathSet = new Set();\n let current = clonedTarget;\n while (current) {\n pathNodes.push(current);\n pathSet.add(current);\n if (current === boundaryClone) {\n break;\n }\n current = current.parentElement;\n }\n if (pathNodes[pathNodes.length - 1] !== boundaryClone) {\n return null;\n }\n let prunedNodeCount = 0;\n for (let index = pathNodes.length - 1; index >= 0; index -= 1) {\n const pathNode = pathNodes[index];\n const childElements = Array.from(pathNode.children);\n for (const child of childElements) {\n if (pathSet.has(child))\n continue;\n prunedNodeCount += pruneSiblingSubtree(child);\n }\n }\n const boundarySizeBefore = stripNoise(boundaryHtmlElement.outerHTML).length;\n const boundarySizeAfter = stripNoise(boundaryClone.outerHTML || '').length;\n console.log('[AIR] [RESOLVER] Excerpt pruning applied', {\n boundarySizeBefore,\n boundarySizeAfter,\n prunedNodeCount,\n boundaryReason,\n pruningMode: PRUNING_MODE,\n });\n let redacted = '';\n const beforeRedactAt = excerptNowMs();\n telemetry.pruneMs += beforeRedactAt - pruneStartedAt;\n const redactStartedAt = excerptNowMs();\n try {\n redactDomFragment(boundaryClone);\n redacted = boundaryClone.outerHTML || '';\n }\n catch {\n redacted = redactSnapshot(stripNoise(boundaryClone.outerHTML || ''));\n }\n telemetry.redactMs += excerptNowMs() - redactStartedAt;\n if (strategy === 'focused') {\n return redacted.slice(0, maxChars);\n }\n return redacted.length <= maxChars\n ? redacted\n : redacted.slice(0, maxChars);\n }\n catch (error) {\n console.warn('[AIR] [RESOLVER] Excerpt pruning failed, using legacy excerpt behavior', {\n reason: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n finally {\n targetHtmlElement.removeAttribute(TARGET_MARKER_ATTR);\n if (clonedTarget) {\n clonedTarget.removeAttribute(TARGET_MARKER_ATTR);\n }\n }\n };\n const serializeFromElement = (targetElement, strategy = 'max-context') => {\n const pruned = serializePrunedBoundary(targetElement, strategy);\n if (typeof pruned === 'string' && pruned.length > 0) {\n return pruned;\n }\n return legacySerializeFromElement(targetElement, strategy);\n };\n const fallbackDocumentExcerpt = () => {\n const interactiveSelectors = [\n 'a[href]',\n 'button',\n 'input:not([type=\"hidden\"])',\n 'select',\n '[role=\"button\"]',\n '[role=\"link\"]',\n '[data-testid]',\n '[data-id]',\n '[class*=\"btn\"]',\n '[class*=\"button\"]',\n ];\n const interactiveCandidates = [];\n const seenCandidates = new Set();\n const addCandidate = (element) => {\n if (!element)\n return;\n if (seenCandidates.has(element))\n return;\n seenCandidates.add(element);\n interactiveCandidates.push(element);\n };\n for (const selector of interactiveSelectors) {\n try {\n const matches = Array.from(snapshot.querySelectorAll(selector)).slice(0, 4);\n for (const match of matches) {\n addCandidate(match);\n }\n }\n catch {\n // Ignore invalid selector errors and continue probing.\n }\n }\n if (interactiveCandidates.length > 0) {\n const ranked = interactiveCandidates\n .map(element => ({\n element,\n score: (0, element_ranking_1.evaluateIntentMatch)(element, step).score,\n }))\n .sort((a, b) => b.score - a.score);\n const best = ranked[0]?.element;\n if (best) {\n return serializeFromElement(best, 'focused');\n }\n }\n const root = (snapshot.body || snapshot.documentElement);\n if (root) {\n try {\n const redactStartedAt = excerptNowMs();\n const redacted = serializeRedactedElement(root).slice(0, maxChars);\n telemetry.redactMs += excerptNowMs() - redactStartedAt;\n return redacted;\n }\n catch {\n const fullHtml = root.outerHTML || '';\n const cleaned = stripNoise(fullHtml);\n const redactStartedAt = excerptNowMs();\n const redacted = redactSnapshot(cleaned);\n telemetry.redactMs += excerptNowMs() - redactStartedAt;\n return redacted.slice(0, maxChars);\n }\n }\n const fullHtml = snapshot.body?.outerHTML || snapshot.documentElement?.outerHTML || '';\n const cleaned = stripNoise(fullHtml);\n const redactStartedAt = excerptNowMs();\n const redacted = redactSnapshot(cleaned);\n telemetry.redactMs += excerptNowMs() - redactStartedAt;\n return redacted.slice(0, maxChars);\n };\n const finalizeExcerpt = (excerpt, mode) => {\n const excerptBuildTotalMs = Math.round((excerptNowMs() - telemetry.excerptBuildStartedAt) * 100) / 100;\n const pruneMs = Math.round(telemetry.pruneMs * 100) / 100;\n const redactMs = Math.round(telemetry.redactMs * 100) / 100;\n const finalExcerptChars = excerpt.length;\n if (isExcerptTelemetryEnabled()) {\n console.log('[AIR] [RESOLVER] Excerpt telemetry', {\n mode,\n excerptBuildMs: excerptBuildTotalMs,\n excerptBuildTotalMs,\n pruneMs,\n redactMs,\n finalExcerptChars,\n });\n }\n return {\n excerpt,\n mode,\n metrics: {\n excerptBuildTotalMs,\n pruneMs,\n redactMs,\n finalExcerptChars,\n },\n };\n };\n const targetSelector = step.selector || '';\n if (targetSelector && (0, text_matching_1.isLikelyCssSelector)(targetSelector)) {\n try {\n const targetElement = snapshot.querySelector(targetSelector);\n if (targetElement) {\n return finalizeExcerpt(serializeFromElement(targetElement), 'target-selector');\n }\n }\n catch {\n // Ignore and continue with seed search.\n }\n }\n const seedElements = (0, element_ranking_1.findSeedElements)(step, snapshot);\n if (seedElements.length > 0) {\n const rankedSeed = seedElements\n .map(element => ({\n element,\n score: (0, element_ranking_1.evaluateIntentMatch)(element, step).score,\n }))\n .sort((a, b) => b.score - a.score)[0]?.element;\n if (rankedSeed) {\n return finalizeExcerpt(serializeFromElement(rankedSeed), 'seed-element');\n }\n }\n return finalizeExcerpt(fallbackDocumentExcerpt(), 'document-fallback');\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.classifySelectorCategory = classifySelectorCategory;\nexports.mapSelectorProofSource = mapSelectorProofSource;\nexports.proofScoreForValidation = proofScoreForValidation;\nexports.stabilityBaseScoreForCategory = stabilityBaseScoreForCategory;\nexports.summarizeSelectorEvaluation = summarizeSelectorEvaluation;\nfunction isXPathSelector(selector) {\n const normalized = selector.trim();\n return normalized.startsWith('//') || normalized.startsWith('xpath=');\n}\nfunction descendantDepth(selector) {\n return Math.max(0, (selector.match(/\\s+/g)?.length ?? 0) + (selector.match(/>/g)?.length ?? 0));\n}\nfunction isStructuralSelector(selector) {\n if (isXPathSelector(selector))\n return false;\n return (/nth-child|nth-of-type/i.test(selector) ||\n descendantDepth(selector) >= 3 ||\n selector.length >= 80);\n}\nfunction classifySelectorCategory(selector, source) {\n const normalized = selector.trim();\n if (!normalized)\n return source === 'llm' ? 'llm' : 'unknown';\n if (source === 'bounded-field')\n return 'bounded-field';\n if (source === 'label-context' || source === 'trigger-context')\n return 'label-context';\n if (isXPathSelector(normalized))\n return 'xpath';\n if (source === 'parent-scope')\n return 'parent-scoped';\n if (/\\[data-testid=(?:\"[^\"]+\"|'[^']+')\\]/i.test(normalized))\n return 'testid';\n if (/\\[data-cy=(?:\"[^\"]+\"|'[^']+')\\]/i.test(normalized))\n return 'data-cy';\n if (/\\[data-qa=(?:\"[^\"]+\"|'[^']+')\\]/i.test(normalized))\n return 'data-qa';\n if (/^#/.test(normalized) || /\\[id=(?:\"[^\"]+\"|'[^']+')\\]/i.test(normalized))\n return 'id';\n if (/\\[name=(?:\"[^\"]+\"|'[^']+')\\]/i.test(normalized))\n return 'name';\n if (/\\[href[*^$]?=(?:\"[^\"]+\"|'[^']+')\\]/i.test(normalized))\n return 'href';\n if (/\\[placeholder=(?:\"[^\"]+\"|'[^']+')\\]/i.test(normalized))\n return 'placeholder';\n if (/\\[aria-label=(?:\"[^\"]+\"|'[^']+')\\]/i.test(normalized))\n return 'aria-label';\n if (/\\[role=(?:\"[^\"]+\"|'[^']+')\\]/i.test(normalized))\n return 'role-attr';\n if (/^text=|:has-text\\(/i.test(normalized))\n return 'text';\n if (source === 'class' || /(?:^|[\\s>])(?:[a-z0-9_-]+)?\\.[a-z0-9:_-]+/i.test(normalized)) {\n return isStructuralSelector(normalized) ? 'structural' : 'class';\n }\n if (source === 'llm')\n return 'llm';\n if (isStructuralSelector(normalized) || source === 'path' || source === 'chained')\n return 'structural';\n if (normalized.includes('['))\n return 'semantic-css';\n return 'unknown';\n}\nfunction mapSelectorProofSource(params) {\n if (params.proofLevel === 'recorded')\n return 'recorded';\n if (params.proofLevel === 'blocked' || params.proofLevel === 'unvalidated')\n return 'none';\n if (params.proofLevel === 'live_smoke_validated')\n return 'smoke';\n if (params.source === 'llm')\n return 'llm-validator';\n if (params.proofLevel === 'semantic_validated')\n return 'semantic';\n if (params.proofLevel === 'snapshot_validated' || params.proofLevel === 'proven_equivalent')\n return 'snapshot';\n return 'none';\n}\nfunction proofScoreForValidation(validation) {\n switch (validation.reason) {\n case 'unique-visible':\n return 1;\n case 'resolved-multi-match':\n return 0.82;\n case 'too-broad':\n return 0.38;\n case 'non-unique':\n return 0.32;\n case 'no-visible-match':\n return 0.08;\n case 'invalid-selector':\n default:\n return 0;\n }\n}\nfunction stabilityBaseScoreForCategory(category) {\n switch (category) {\n case 'testid':\n case 'data-cy':\n case 'data-qa':\n return 0.78;\n case 'id':\n return 0.62;\n case 'name':\n return 0.72;\n case 'href':\n return 0.7;\n case 'placeholder':\n return 0.69;\n case 'aria-label':\n return 0.67;\n case 'role-attr':\n return 0.66;\n case 'label-context':\n case 'bounded-field':\n return 0.64;\n case 'semantic-css':\n return 0.65;\n case 'text':\n return 0.62;\n case 'parent-scoped':\n return 0.61;\n case 'class':\n return 0.55;\n case 'structural':\n return 0.42;\n case 'xpath':\n return 0.35;\n case 'llm':\n return 0.4;\n case 'unknown':\n default:\n return 0.46;\n }\n}\nfunction summarizeSelectorEvaluation(selectorSpec, params) {\n return {\n selectorSpec,\n category: params.category,\n validation: params.validation,\n proof: {\n proofLevel: selectorSpec.proofLevel,\n proofSource: params.proofSource,\n snapshotTargetEvidence: params.snapshotTargetEvidence,\n },\n scoring: {\n proofScore: params.proofScore,\n stabilityScore: params.stabilityScore,\n semanticScore: params.semanticScore,\n brittlenessPenalty: params.brittlenessPenalty,\n entropyPenalty: params.entropyPenalty,\n finalScore: params.finalScore,\n },\n reasons: params.reasons,\n warningCodes: params.warningCodes ?? selectorSpec.warningCodes ?? [],\n rejectReason: params.rejectReason ?? selectorSpec.rejectReason,\n preferredRenderings: params.preferredRenderings,\n };\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isWeakBoundedFieldInputCandidate = isWeakBoundedFieldInputCandidate;\nexports.buildBoundedFieldCandidates = buildBoundedFieldCandidates;\nexports.diagnoseBoundedFieldInputCandidate = diagnoseBoundedFieldInputCandidate;\nexports.buildBoundedFieldTriggerCandidates = buildBoundedFieldTriggerCandidates;\nconst selector_spec_1 = require(\"../../selector-spec\");\nconst text_matching_1 = require(\"../text-matching\");\nconst visibility_1 = require(\"../visibility\");\nconst find_bounded_field_1 = require(\"./find-bounded-field\");\nconst structured_selector_utils_1 = require(\"../structured-selector-utils\");\nfunction getCapturedBoundedFieldContext(step, useTrigger = false) {\n const fingerprint = useTrigger\n ? (step.triggerFingerprint ?? step.fingerprint)\n : step.fingerprint;\n const context = fingerprint?.boundedFieldContext;\n return context && typeof context === 'object' ? context : null;\n}\nfunction getFieldLabelText(step) {\n const captured = getCapturedBoundedFieldContext(step);\n const capturedLabel = captured?.fieldLabelText;\n if (typeof capturedLabel === 'string' && capturedLabel.trim().length > 0) {\n return capturedLabel.trim();\n }\n const attrs = (0, text_matching_1.inferStepSignalAttributes)(step);\n const value = attrs.fieldLabelText\n || attrs.associatedLabelText\n || attrs.wrappedLabelText\n || attrs.labelledByText;\n if (typeof value !== 'string')\n return null;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\nfunction getCapturedControlKind(step, useTrigger = false) {\n const captured = getCapturedBoundedFieldContext(step, useTrigger);\n const kind = captured?.targetControlKind;\n return typeof kind === 'string' ? kind : null;\n}\nfunction hasStrongDirectSelectorEvidence(step) {\n const priority = step.selectorPriority;\n if (priority === 'data-testid' ||\n priority === 'id' ||\n priority === 'attribute' ||\n priority === 'text') {\n return true;\n }\n const attrs = (0, text_matching_1.inferStepSignalAttributes)(step);\n return !!(attrs.dataTestId ||\n attrs.dataCy ||\n attrs.dataQa ||\n attrs.id ||\n attrs.name ||\n attrs.placeholder ||\n attrs.ariaLabel ||\n attrs.href);\n}\nfunction isWeakPriority(priority) {\n return priority === 'class' || priority === 'path' || priority === 'unknown' || priority === 'other';\n}\nfunction inferInputControlKind(step) {\n const capturedKind = getCapturedControlKind(step);\n if (capturedKind)\n return capturedKind;\n const attrs = (0, text_matching_1.inferStepSignalAttributes)(step);\n const tagName = attrs.tagName || step.fingerprint?.tagName?.toLowerCase() || 'input';\n const role = (attrs.role || '').toLowerCase();\n if (tagName === 'textarea')\n return 'textarea';\n if (tagName === 'select')\n return 'select';\n if (role === 'combobox')\n return 'combobox';\n if (role === 'searchbox')\n return 'searchbox';\n if ((step.fingerprint?.attributes?.contenteditable || '').toLowerCase() === 'true')\n return 'contenteditable';\n return 'input';\n}\nfunction normalizeCapturedRelation(relation) {\n switch (relation) {\n case 'label-for':\n case 'wrapped-label':\n case 'aria-labelledby':\n case 'sibling-label':\n case 'bounded-container':\n return relation;\n default:\n return 'bounded-container';\n }\n}\nfunction buildInputTargetSelector(step, controlKind) {\n switch (controlKind) {\n case 'textarea':\n return 'textarea';\n case 'select':\n return 'select';\n case 'combobox':\n return '[role=\"combobox\"]';\n case 'searchbox':\n return '[role=\"searchbox\"],input[type=\"search\"]';\n case 'contenteditable':\n return '[contenteditable=\"true\"]';\n case 'input':\n case 'unknown':\n default:\n return 'input';\n }\n}\nfunction inferTriggerLabelText(step) {\n const triggerFingerprintAttrs = step.triggerFingerprint?.attributes;\n const capturedLabel = step.triggerFingerprint?.boundedFieldContext?.fieldLabelText;\n const candidates = [\n capturedLabel,\n triggerFingerprintAttrs?.fieldLabelText,\n triggerFingerprintAttrs?.associatedLabelText,\n triggerFingerprintAttrs?.wrappedLabelText,\n triggerFingerprintAttrs?.labelledByText,\n step.fingerprint?.attributes?.fieldLabelText,\n ];\n for (const candidate of candidates) {\n if (typeof candidate !== 'string')\n continue;\n const trimmed = candidate.trim();\n if (!trimmed || trimmed === 'Select' || trimmed === '-- Select --')\n continue;\n return trimmed;\n }\n return null;\n}\nfunction isSelectLikeTriggerStep(step) {\n const family = (step.controlFamily || '').toLowerCase();\n return (step.action === 'custom-control-open' ||\n (step.action === 'custom-select' && ['combobox', 'listbox', 'select', 'dropdown'].includes(family)));\n}\nfunction buildBoundedFieldSyntheticSelector(spec) {\n const containerHint = spec.containerSelector || spec.boundedContainerSummary;\n const targetHint = spec.cleanChildSelector || spec.target.selector;\n if (containerHint) {\n return `bounded-field(\"${spec.labelText}\" within ${containerHint} -> ${targetHint})`;\n }\n return `bounded-field(\"${spec.labelText}\" -> ${targetHint})`;\n}\nfunction buildBoundedFieldCandidateFromProof(step, labelText, controlKind, targetSelector, snapshot, snapshotSource) {\n const targetSpec = (0, selector_spec_1.buildSelectorSpec)({\n selector: targetSelector,\n source: 'resolver',\n proofLevel: 'snapshot_validated',\n });\n const proof = (0, find_bounded_field_1.findBoundedFieldProof)(snapshot, {\n labelText,\n target: targetSpec,\n controlKind,\n originalSelector: step.selector,\n snapshotSource: snapshotSource?.source ?? 'unavailable',\n });\n if (!proof.match)\n return [];\n const boundedField = {\n source: 'snapshot-bounded-field',\n labelText,\n target: targetSpec,\n controlKind,\n relation: proof.match.relation,\n originalSelector: step.selector,\n containerSelector: proof.match.containerSelector,\n labelElementTag: proof.match.labelElement.tagName?.toLowerCase() || 'label',\n boundedContainerSummary: proof.match.boundedContainerSummary,\n snapshotSource: snapshotSource?.source ?? 'unavailable',\n renderStatus: proof.match.renderStatus,\n renderReason: proof.match.renderReason,\n cleanParentSelector: proof.match.cleanParentSelector,\n cleanChildSelector: proof.match.cleanChildSelector,\n warningCodes: proof.match.warningCodes,\n };\n return [{\n selector: buildBoundedFieldSyntheticSelector(boundedField),\n source: 'bounded-field',\n engine: 'bounded-field',\n categoryOverride: 'bounded-field',\n boundedField,\n rank: 8,\n }];\n}\nfunction buildRecordedBoundedFieldCandidate(step, labelText, controlKind, targetSelector, snapshotSource, capturedContext, originalSelector) {\n // 1. Hard Blocks (Required behavior: only emit when capture proof is locally valid)\n if (capturedContext.isValid !== true)\n return [];\n if (!labelText || labelText.trim() === '')\n return [];\n if (!controlKind)\n return [];\n if (capturedContext.visibleControlCountInContainer !== 1)\n return [];\n if (capturedContext.targetIndexWithinContainer === null || capturedContext.targetIndexWithinContainer === undefined)\n return [];\n if (!capturedContext.cleanChildSelector)\n return [];\n // 2. Identify Parent/Container\n const selectorCandidates = capturedContext.boundedContainerSelectorCandidates ?? [];\n const rawParentSelector = capturedContext.cleanParentSelector ??\n selectorCandidates.find(candidate => candidate.isClean)?.selector ?? null;\n const rawContainerSelector = capturedContext.containerSelector ??\n rawParentSelector ??\n selectorCandidates[0]?.selector ?? null;\n // 3. Safety/Genericness Filtering\n const isParentSafe = rawParentSelector && !(0, structured_selector_utils_1.isGenericContainerSelector)(rawParentSelector);\n const isContainerSafe = rawContainerSelector && !(0, structured_selector_utils_1.isGenericContainerSelector)(rawContainerSelector);\n const warningCodes = new Set();\n if ((capturedContext.duplicateLabelCount ?? 0) > 1) {\n warningCodes.add('bounded-field-global-duplicate-label');\n }\n let renderStatus = 'clean-scoped-locator';\n let renderReason = 'recorded_clean_parent_unique_visible';\n let recordedValidity = true;\n let recordedBlockedReason = null;\n let proofLevel = 'recorded';\n if (capturedContext.recordedBlockedReason) {\n recordedValidity = false;\n recordedBlockedReason = capturedContext.recordedBlockedReason;\n renderStatus = 'blocked-unsafe-render';\n renderReason = `captured_blocked_reason: ${capturedContext.recordedBlockedReason}`;\n proofLevel = 'blocked';\n }\n else if (!isParentSafe && isContainerSafe) {\n renderStatus = 'proven-structural-fallback';\n renderReason = 'recorded_bounded_field_structural_fallback';\n warningCodes.add('bounded-field-structural-fallback');\n }\n else if (!isParentSafe && !isContainerSafe) {\n recordedValidity = false;\n recordedBlockedReason = 'generic_container_only';\n renderStatus = 'proof-only-no-clean-render';\n renderReason = 'no_safe_parent_or_container_selector';\n proofLevel = 'blocked';\n }\n warningCodes.add('recorded-bounded-field-proof');\n const targetSpec = (0, selector_spec_1.buildSelectorSpec)({\n selector: targetSelector,\n source: 'resolver',\n proofLevel,\n });\n const boundedField = {\n source: 'recorded-bounded-field',\n labelText,\n target: targetSpec,\n controlKind,\n relation: normalizeCapturedRelation(capturedContext.fieldRelation),\n originalSelector,\n containerSelector: rawContainerSelector ?? undefined,\n boundedContainerSummary: capturedContext.boundedContainerSummary ?? undefined,\n snapshotSource: snapshotSource?.source ?? 'unavailable',\n renderStatus,\n renderReason,\n cleanParentSelector: isParentSafe ? rawParentSelector : undefined,\n cleanChildSelector: capturedContext.cleanChildSelector,\n warningCodes: Array.from(warningCodes),\n visibleControlCountInContainer: capturedContext.visibleControlCountInContainer ?? null,\n targetIndexWithinContainer: capturedContext.targetIndexWithinContainer ?? null,\n competingControlCount: capturedContext.competingControlCount ?? null,\n duplicateLabelCount: capturedContext.duplicateLabelCount ?? null,\n recordedValidity,\n recordedBlockedReason,\n };\n return [{\n selector: buildBoundedFieldSyntheticSelector(boundedField),\n source: 'bounded-field',\n engine: 'bounded-field',\n categoryOverride: 'bounded-field',\n boundedField,\n rank: 8,\n }];\n}\nfunction diagnoseBoundedFieldInputProof(step, snapshot, snapshotSelection) {\n const captured = getCapturedBoundedFieldContext(step);\n if (captured?.isValid === false && typeof captured.blockedReason === 'string') {\n return captured.blockedReason;\n }\n const labelText = getFieldLabelText(step);\n if (!labelText)\n return 'bounded-field-no-label';\n const controlKind = inferInputControlKind(step);\n const targetSelector = buildInputTargetSelector(step, controlKind);\n const targetSpec = (0, selector_spec_1.buildSelectorSpec)({\n selector: targetSelector,\n source: 'resolver',\n proofLevel: 'snapshot_validated',\n });\n const proof = (0, find_bounded_field_1.findBoundedFieldProof)(snapshot, {\n labelText,\n target: targetSpec,\n controlKind,\n originalSelector: step.selector,\n snapshotSource: snapshotSelection?.source ?? 'unavailable',\n });\n return proof.rejectReason;\n}\nfunction isWeakBoundedFieldInputCandidate(step) {\n return step.action === 'input' && !hasStrongDirectSelectorEvidence(step) && !!getFieldLabelText(step) && isWeakPriority(step.selectorPriority);\n}\nfunction buildBoundedFieldCandidates(params) {\n const { step, snapshot, snapshotSelection } = params;\n if (!isWeakBoundedFieldInputCandidate(step))\n return [];\n const labelText = getFieldLabelText(step);\n if (!labelText)\n return [];\n const controlKind = inferInputControlKind(step);\n const targetSelector = buildInputTargetSelector(step, controlKind);\n const capturedContext = getCapturedBoundedFieldContext(step);\n const recordedCandidates = capturedContext\n ? buildRecordedBoundedFieldCandidate(step, labelText, controlKind, targetSelector, snapshotSelection, capturedContext, step.selector)\n : [];\n if (recordedCandidates.length > 0) {\n return recordedCandidates;\n }\n return buildBoundedFieldCandidateFromProof(step, labelText, controlKind, targetSelector, snapshot, snapshotSelection);\n}\nfunction diagnoseBoundedFieldInputCandidate(params) {\n if (!isWeakBoundedFieldInputCandidate(params.step))\n return null;\n return diagnoseBoundedFieldInputProof(params.step, params.snapshot, params.snapshotSelection);\n}\nfunction buildBoundedFieldTriggerCandidates(params) {\n const { step, snapshot, snapshotSelection } = params;\n if (!isSelectLikeTriggerStep(step))\n return [];\n const triggerSelector = (step.triggerSelector || '').trim();\n if (!triggerSelector || !(0, text_matching_1.isLikelyCssSelector)(triggerSelector))\n return [];\n if (hasStrongDirectSelectorEvidence({\n ...step,\n selector: triggerSelector,\n selectorPriority: step.triggerSelectorPriority ?? step.selectorPriority,\n fingerprint: step.triggerFingerprint ?? step.fingerprint,\n })) {\n return [];\n }\n let visibleMatches = [];\n try {\n visibleMatches = Array.from(snapshot.querySelectorAll(triggerSelector)).filter(visibility_1.isVisibleElement);\n }\n catch {\n return [];\n }\n const capturedContext = getCapturedBoundedFieldContext(step, true);\n const recordedTriggerAmbiguity = step.triggerFingerprint?.selectorAmbiguity?.isAmbiguous === true;\n if (visibleMatches.length <= 1 && !recordedTriggerAmbiguity && !capturedContext?.fieldLabelText)\n return [];\n const labelText = inferTriggerLabelText(step);\n if (!labelText)\n return [];\n if (capturedContext?.isValid || capturedContext?.fieldLabelText) {\n return buildRecordedBoundedFieldCandidate(step, labelText, getCapturedControlKind(step, true) ?? 'custom-trigger', triggerSelector, snapshotSelection, capturedContext, triggerSelector);\n }\n const targetSpec = (0, selector_spec_1.buildSelectorSpec)({\n selector: triggerSelector,\n source: 'resolver',\n proofLevel: 'snapshot_validated',\n });\n const proof = (0, find_bounded_field_1.findBoundedFieldProof)(snapshot, {\n labelText,\n target: targetSpec,\n controlKind: 'custom-trigger',\n originalSelector: triggerSelector,\n snapshotSource: snapshotSelection?.source ?? 'unavailable',\n });\n if (!proof.match)\n return [];\n const boundedField = {\n source: 'snapshot-bounded-field',\n labelText,\n target: targetSpec,\n controlKind: 'custom-trigger',\n relation: proof.match.relation,\n originalSelector: triggerSelector,\n containerSelector: proof.match.containerSelector,\n labelElementTag: proof.match.labelElement.tagName?.toLowerCase() || 'label',\n boundedContainerSummary: proof.match.boundedContainerSummary,\n snapshotSource: snapshotSelection?.source ?? 'unavailable',\n renderStatus: proof.match.renderStatus,\n renderReason: proof.match.renderReason,\n cleanParentSelector: proof.match.cleanParentSelector,\n cleanChildSelector: proof.match.cleanChildSelector,\n warningCodes: proof.match.warningCodes,\n };\n return [{\n selector: buildBoundedFieldSyntheticSelector(boundedField),\n source: 'bounded-field',\n engine: 'bounded-field',\n categoryOverride: 'bounded-field',\n boundedField,\n rank: 5,\n }];\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toCandidateValidation = exports.validateBoundedFieldSelectorSpec = exports.renderBoundedFieldLocator = exports.getBoundedFieldRenderingWarnings = exports.classifyBoundedFieldRenderStatus = exports.buildBoundedFieldWarningComments = exports.findExactVisibleFieldLabels = exports.findBoundedFieldProof = exports.isWeakBoundedFieldInputCandidate = exports.diagnoseBoundedFieldInputCandidate = exports.buildBoundedFieldTriggerCandidates = exports.buildBoundedFieldCandidates = void 0;\nvar candidates_1 = require(\"./candidates\");\nObject.defineProperty(exports, \"buildBoundedFieldCandidates\", { enumerable: true, get: function () { return candidates_1.buildBoundedFieldCandidates; } });\nObject.defineProperty(exports, \"buildBoundedFieldTriggerCandidates\", { enumerable: true, get: function () { return candidates_1.buildBoundedFieldTriggerCandidates; } });\nObject.defineProperty(exports, \"diagnoseBoundedFieldInputCandidate\", { enumerable: true, get: function () { return candidates_1.diagnoseBoundedFieldInputCandidate; } });\nObject.defineProperty(exports, \"isWeakBoundedFieldInputCandidate\", { enumerable: true, get: function () { return candidates_1.isWeakBoundedFieldInputCandidate; } });\nvar find_bounded_field_1 = require(\"./find-bounded-field\");\nObject.defineProperty(exports, \"findBoundedFieldProof\", { enumerable: true, get: function () { return find_bounded_field_1.findBoundedFieldProof; } });\nObject.defineProperty(exports, \"findExactVisibleFieldLabels\", { enumerable: true, get: function () { return find_bounded_field_1.findExactVisibleFieldLabels; } });\nvar render_bounded_field_1 = require(\"./render-bounded-field\");\nObject.defineProperty(exports, \"buildBoundedFieldWarningComments\", { enumerable: true, get: function () { return render_bounded_field_1.buildBoundedFieldWarningComments; } });\nObject.defineProperty(exports, \"classifyBoundedFieldRenderStatus\", { enumerable: true, get: function () { return render_bounded_field_1.classifyBoundedFieldRenderStatus; } });\nObject.defineProperty(exports, \"getBoundedFieldRenderingWarnings\", { enumerable: true, get: function () { return render_bounded_field_1.getBoundedFieldRenderingWarnings; } });\nObject.defineProperty(exports, \"renderBoundedFieldLocator\", { enumerable: true, get: function () { return render_bounded_field_1.renderBoundedFieldLocator; } });\nvar validate_bounded_field_1 = require(\"./validate-bounded-field\");\nObject.defineProperty(exports, \"validateBoundedFieldSelectorSpec\", { enumerable: true, get: function () { return validate_bounded_field_1.validateBoundedFieldSelectorSpec; } });\nObject.defineProperty(exports, \"toCandidateValidation\", { enumerable: true, get: function () { return validate_bounded_field_1.toCandidateValidation; } });\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateScopedSelectorSpec = exports.validateSelectorSpec = exports.validateTextCandidate = exports.validateCSSCandidate = exports.isVisibleElement = void 0;\nexports.hasSameAirTargetNodeId = hasSameAirTargetNodeId;\nexports.shouldKeepOriginal = shouldKeepOriginal;\nexports.matchesIntent = matchesIntent;\nexports.generateCandidates = generateCandidates;\nexports.complexityPenalty = complexityPenalty;\nexports.volatilityPenalty = volatilityPenalty;\nexports.scoreCandidate = scoreCandidate;\nexports.normalizeLlmSelector = normalizeLlmSelector;\nexports.normalizeLlmSuggestions = normalizeLlmSuggestions;\nexports.normalizeLlmRetrySuggestions = normalizeLlmRetrySuggestions;\nexports.resolveSelectorsForSession = resolveSelectorsForSession;\nconst types_1 = require(\"./resolver/types\");\nconst text_matching_1 = require(\"./resolver/text-matching\");\nconst element_ranking_1 = require(\"./resolver/element-ranking\");\nconst visibility_1 = require(\"./resolver/visibility\");\nconst selector_spec_validator_1 = require(\"./resolver/selector-spec-validator\");\nconst structured_selector_utils_1 = require(\"./resolver/structured-selector-utils\");\nconst excerpt_builder_1 = require(\"./resolver/excerpt-builder\");\nconst selector_spec_1 = require(\"./selector-spec\");\nconst selector_spec_2 = require(\"./selector-spec\");\nconst selector_evaluation_1 = require(\"./selector-evaluation\");\nconst bounded_field_1 = require(\"./resolver/bounded-field\");\nvar visibility_2 = require(\"./resolver/visibility\");\nObject.defineProperty(exports, \"isVisibleElement\", { enumerable: true, get: function () { return visibility_2.isVisibleElement; } });\nObject.defineProperty(exports, \"validateCSSCandidate\", { enumerable: true, get: function () { return visibility_2.validateCSSCandidate; } });\nObject.defineProperty(exports, \"validateTextCandidate\", { enumerable: true, get: function () { return visibility_2.validateTextCandidate; } });\nvar selector_spec_validator_2 = require(\"./resolver/selector-spec-validator\");\nObject.defineProperty(exports, \"validateSelectorSpec\", { enumerable: true, get: function () { return selector_spec_validator_2.validateSelectorSpec; } });\nObject.defineProperty(exports, \"validateScopedSelectorSpec\", { enumerable: true, get: function () { return selector_spec_validator_2.validateScopedSelectorSpec; } });\nfunction hasSameAirTargetNodeId(resolvedElement, targetNodeId) {\n return !!resolvedElement &&\n !!targetNodeId &&\n resolvedElement.getAttribute('data-air-node-id') === targetNodeId;\n}\nconst SELECTOR_RANK_MAP = {\n 'data-testid': 1,\n id: 2,\n attribute: 3,\n class: 7,\n text: 8,\n path: 10,\n xpath: 10,\n other: 10,\n chained: 10,\n unknown: 10,\n};\nconst RANK_SCORES = {\n 1: 0.7,\n 2: 0.65,\n 3: 0.6,\n 4: 0.55,\n 5: 0.5,\n 6: 0.45,\n 7: 0.4,\n 8: 0.35,\n};\nconst DEFAULT_CONFIG = {\n enableLLMFallback: false,\n enableCapturedCandidateShadowEvaluation: false,\n enableCapturedCandidateDirectPromotion: false,\n resolverMinScore: 0.7,\n intentMinScore: 0.6,\n maxSnapshotBytesForValidation: 2_000_000,\n maxSnapshotExcerptChars: 2000,\n llmTimeoutMs: 20_000,\n llmRetryTimeoutMs: 10_000,\n llmMaxCandidatesPerStep: 3,\n llmMaxRetriesPerStep: 3,\n};\nfunction resolveConfig(config) {\n const llmMaxCandidatesPerStep = Math.max(1, config?.llmMaxCandidatesPerStep ??\n config?.llmMaxRetriesPerStep ??\n DEFAULT_CONFIG.llmMaxCandidatesPerStep);\n return {\n enableLLMFallback: config?.enableLLMFallback ?? DEFAULT_CONFIG.enableLLMFallback,\n enableCapturedCandidateShadowEvaluation: config?.enableCapturedCandidateShadowEvaluation ?? DEFAULT_CONFIG.enableCapturedCandidateShadowEvaluation,\n enableCapturedCandidateDirectPromotion: config?.enableCapturedCandidateDirectPromotion ?? DEFAULT_CONFIG.enableCapturedCandidateDirectPromotion,\n resolverMinScore: config?.resolverMinScore ?? DEFAULT_CONFIG.resolverMinScore,\n intentMinScore: config?.intentMinScore ?? DEFAULT_CONFIG.intentMinScore,\n maxSnapshotBytesForValidation: config?.maxSnapshotBytesForValidation ?? DEFAULT_CONFIG.maxSnapshotBytesForValidation,\n maxSnapshotExcerptChars: config?.maxSnapshotExcerptChars ?? DEFAULT_CONFIG.maxSnapshotExcerptChars,\n llmTimeoutMs: config?.llmTimeoutMs ?? DEFAULT_CONFIG.llmTimeoutMs,\n llmRetryTimeoutMs: config?.llmRetryTimeoutMs ?? DEFAULT_CONFIG.llmRetryTimeoutMs,\n maxLLMFallbackPerSession: config?.maxLLMFallbackPerSession,\n llmMaxCandidatesPerStep,\n llmMaxRetriesPerStep: llmMaxCandidatesPerStep,\n };\n}\nfunction rankScore(rank) {\n return RANK_SCORES[rank] ?? 0.3;\n}\nfunction isSafeHashIdSelector(id) {\n return /^[A-Za-z_][A-Za-z0-9_-]*$/.test(id);\n}\nfunction buildIdSelectors(id) {\n const attributeSelector = `[id=\"${(0, text_matching_1.cssEscape)(id)}\"]`;\n if (!isSafeHashIdSelector(id)) {\n return [attributeSelector];\n }\n return [`#${(0, text_matching_1.cssEscape)(id)}`, attributeSelector];\n}\nfunction candidateUsesIdSelector(candidate) {\n return candidate.source === 'id' || /\\[id=(?:\"[^\"]+\"|'[^']+')\\]/i.test(candidate.selector) || /(?:^|\\s)#/.test(candidate.selector);\n}\nfunction candidateUsesClassSelector(candidate) {\n return candidate.source === 'class' || /(?:^|[\\s>])(?:[a-z0-9_-]+)?\\.[a-z0-9:_-]+/i.test(candidate.selector);\n}\nfunction extractCandidateId(selector) {\n const attrId = (0, text_matching_1.extractAttributeValue)(selector, 'id');\n if (attrId)\n return attrId;\n if (!selector.startsWith('#'))\n return null;\n const match = selector.slice(1).match(/^[A-Za-z0-9_-]+/);\n return match?.[0] ?? null;\n}\nfunction tokenizeSemanticParts(value) {\n if (!value)\n return [];\n return value\n .toLowerCase()\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .split(/[^a-z0-9]+/)\n .map(token => token.trim())\n .filter(token => token.length >= 2);\n}\nfunction extractHrefTokens(href) {\n if (!href)\n return [];\n try {\n const url = new URL(href, 'https://air.local');\n return tokenizeSemanticParts(url.pathname);\n }\n catch {\n return tokenizeSemanticParts(href);\n }\n}\nfunction isVeryOpaqueMixedId(id) {\n if (id.length < 18)\n return false;\n if (!/[a-z]/i.test(id) || !/\\d/.test(id))\n return false;\n if (!/^[a-z0-9_-]+$/i.test(id))\n return false;\n const tokens = id.split(/[-_]/).filter(Boolean);\n if (tokens.length <= 1) {\n return /[a-z]{2,}\\d{2,}[a-z0-9]{6,}/i.test(id);\n }\n return tokens.every(token => token.length >= 4 && /[a-z]/i.test(token) && /\\d/.test(token));\n}\nfunction hasOpaqueHyphenatedSegments(id) {\n const tokens = id.split(/[-_]/).filter(Boolean);\n if (tokens.length < 3)\n return false;\n const opaqueTokens = tokens.filter(token => token.length >= 4 &&\n /[a-z]/i.test(token) &&\n (/\\d/.test(token) || token.length >= 8) &&\n !/(user|admin|menu|nav|search|input|button|dialog|modal|form|table|row|col|step|line|email|name|leave|logout|login|address)/i.test(token));\n return opaqueTokens.length >= 2;\n}\nfunction isUtilityClassToken(token) {\n return (/^(?:flex|grid|block|hidden)$/i.test(token) ||\n /^(?:items|justify|content|self|place)-/i.test(token) ||\n /^(?:p|m)(?:[trblxy])?-\\d+/i.test(token) ||\n /^(?:text|bg|border|rounded)-/i.test(token) ||\n /^(?:w|h|min|max)-/i.test(token) ||\n /^(?:gap|space-[xy]|inset|top|left|right|bottom)-/i.test(token) ||\n /^(?:hover|focus|active|disabled|group-hover|focus-within|focus-visible):/i.test(token));\n}\nfunction isStateClassToken(token) {\n const normalized = token.trim().toLowerCase();\n if (!normalized)\n return false;\n if (/^(?:is|has)-[a-z0-9:_-]+$/i.test(normalized))\n return true;\n if (/--(?:focus|focused|active|selected|open|disabled|hover|loading|expanded|collapsed|current|checked|invalid|valid|dirty|touched|visited|state)$/i.test(normalized)) {\n return true;\n }\n if (normalized.includes('data-state') || normalized.includes('headlessui-state'))\n return true;\n const parts = tokenizeSemanticParts(normalized);\n if (parts.length === 0)\n return false;\n return parts.some(part => /^(?:focus|focused|active|selected|open|disabled|hover|loading|expanded|collapsed|current|checked|invalid|valid|dirty|touched|visited|state)$/.test(part));\n}\nfunction isFrameworkClassToken(token) {\n return /^(?:oxd-|mui|ant-|chakra-|radix-|headlessui-)/i.test(token);\n}\nfunction isGenericShellClassToken(token) {\n return /^(?:container|wrapper|row|item|content|layout|shell|panel|section|body|header|footer)$/i.test(token);\n}\nfunction isCssInJsClassToken(token) {\n return /^(?:css-|sc-)/i.test(token);\n}\nfunction isBemLikeClassToken(token) {\n return /(?:__|--)/.test(token);\n}\nfunction isHashedRandomClassToken(token) {\n if (isCssInJsClassToken(token))\n return true;\n if (token.length < 8)\n return false;\n if (!/[a-z]/i.test(token))\n return false;\n if (/^(?:oxd-|mui|ant-|chakra-)/i.test(token))\n return false;\n if (/^[a-z0-9_-]+$/i.test(token) && /\\d/.test(token)) {\n const parts = token.split(/[-_]/).filter(Boolean);\n if (parts.length <= 1) {\n return /[a-z]{2,}\\d{2,}[a-z0-9]{4,}/i.test(token);\n }\n return parts.every(part => part.length >= 3 && (/\\d/.test(part) || /^[a-z]{6,}$/i.test(part)));\n }\n return false;\n}\nfunction extractCandidateClassTokens(selector) {\n return Array.from(selector.matchAll(/\\.([A-Za-z0-9:_-]+)/g))\n .map(match => match[1] ?? '')\n .filter(Boolean);\n}\nfunction extractClassContextTokens(step) {\n const attrs = (0, text_matching_1.inferStepSignalAttributes)(step);\n return new Set([\n ...tokenizeSemanticParts(step.fingerprint?.textExcerpt ?? (0, text_matching_1.extractTextExcerpt)(step)),\n ...tokenizeSemanticParts(attrs.name),\n ...tokenizeSemanticParts(attrs.placeholder),\n ...extractHrefTokens(attrs.href),\n ...tokenizeSemanticParts(step.intent),\n ]);\n}\nfunction evaluateClassTokenEntropy(classToken, step, candidate) {\n let penalty = 0;\n const reasons = [];\n const addPenalty = (amount, reason) => {\n if (reasons.includes(reason))\n return;\n penalty += amount;\n reasons.push(reason);\n };\n if (isUtilityClassToken(classToken))\n addPenalty(0.24, 'utility_class');\n if (isCssInJsClassToken(classToken))\n addPenalty(0.22, 'css_in_js_class');\n if (isHashedRandomClassToken(classToken))\n addPenalty(0.2, 'hashed_random_class');\n if (isStateClassToken(classToken))\n addPenalty(0.18, 'state_class');\n if (isFrameworkClassToken(classToken))\n addPenalty(0.14, 'framework_structural_class');\n if (isGenericShellClassToken(classToken))\n addPenalty(0.12, 'generic_shell_class');\n penalty = Math.min(0.28, penalty);\n const contextTokens = extractClassContextTokens(step);\n const classTokens = tokenizeSemanticParts(classToken);\n let bonus = 0;\n if (isBemLikeClassToken(classToken)) {\n bonus += 0.03;\n }\n const overlapCount = classTokens.filter(token => contextTokens.has(token)).length;\n if (overlapCount >= 2) {\n bonus += 0.04;\n }\n else if (overlapCount === 1) {\n bonus += 0.02;\n }\n const calendarScopedClass = candidate.source === 'parent-scope' &&\n ((0, element_ranking_1.looksDateValue)(step.value) || step.action === 'input') &&\n classTokens.some(token => token === 'date' || token === 'calendar');\n if (calendarScopedClass) {\n bonus += 0.08;\n }\n const adjustment = Math.max(-0.28, Math.min(0.04, bonus - penalty));\n return {\n adjustment,\n score: adjustment,\n reasons,\n };\n}\nfunction computeClassEntropy(step, candidate, validation, snapshot) {\n if (!candidateUsesClassSelector(candidate)) {\n return { adjustment: 0, score: 0, reasons: [] };\n }\n const element = validation.resolvedElement ??\n (snapshot ? (0, element_ranking_1.getCandidateElement)(snapshot, candidate.selector) : null);\n const selectorClassTokens = extractCandidateClassTokens(candidate.selector);\n const elementClassTokens = (element?.getAttribute('class') || '')\n .split(/\\s+/)\n .map(token => token.trim())\n .filter(Boolean);\n const candidateClassTokens = Array.from(new Set([\n ...selectorClassTokens,\n ...elementClassTokens,\n ]));\n if (candidateClassTokens.length === 0) {\n return { adjustment: 0, score: 0, reasons: [] };\n }\n const bestTokenEntropy = candidateClassTokens\n .map(classToken => evaluateClassTokenEntropy(classToken, step, candidate))\n .sort((left, right) => {\n if (right.adjustment !== left.adjustment)\n return right.adjustment - left.adjustment;\n return left.reasons.length - right.reasons.length;\n })[0];\n return bestTokenEntropy ?? { adjustment: 0, score: 0, reasons: [] };\n}\nfunction computeIdEntropy(step, candidate, validation, snapshot) {\n if (!candidateUsesIdSelector(candidate)) {\n return { adjustment: 0, score: 0, reasons: [] };\n }\n const element = validation.resolvedElement ??\n (snapshot ? (0, element_ranking_1.getCandidateElement)(snapshot, candidate.selector) : null);\n const candidateId = (element?.getAttribute('id') ||\n element?.id ||\n extractCandidateId(candidate.selector) ||\n '').trim();\n if (!candidateId) {\n return { adjustment: 0, score: 0, reasons: [] };\n }\n let penalty = 0;\n const reasons = [];\n const normalizedId = candidateId.trim();\n const addPenalty = (amount, reason) => {\n if (reasons.includes(reason))\n return;\n penalty += amount;\n reasons.push(reason);\n };\n if (/^react-/i.test(normalizedId))\n addPenalty(0.18, 'react_prefix');\n if (/^headlessui-/i.test(normalizedId))\n addPenalty(0.22, 'headlessui_prefix');\n if (/^radix-/i.test(normalizedId))\n addPenalty(0.22, 'radix_prefix');\n if (/^:[a-z0-9]+:$/i.test(normalizedId))\n addPenalty(0.24, 'react_runtime_id');\n if (/[0-9a-f]{8}-[0-9a-f]{4}(?:-[0-9a-f]{4}){1,2}/i.test(normalizedId))\n addPenalty(0.22, 'uuid_like');\n if (/^(?:css|sc)-[a-z0-9_-]+$/i.test(normalizedId))\n addPenalty(0.2, 'css_hash');\n if (/\\d{5,}/.test(normalizedId))\n addPenalty(0.16, 'long_numeric_run');\n if (isVeryOpaqueMixedId(normalizedId))\n addPenalty(0.12, 'opaque_mixed_alnum');\n if (hasOpaqueHyphenatedSegments(normalizedId))\n addPenalty(0.1, 'opaque_hyphen_segments');\n penalty = Math.min(0.3, penalty);\n const attrs = (0, text_matching_1.inferStepSignalAttributes)(step);\n const stepTokens = new Set([\n ...tokenizeSemanticParts(attrs.id),\n ...tokenizeSemanticParts(attrs.name),\n ...tokenizeSemanticParts(attrs.placeholder),\n ...tokenizeSemanticParts(step.fingerprint?.textExcerpt ?? (0, text_matching_1.extractTextExcerpt)(step)),\n ...extractHrefTokens(attrs.href),\n ...tokenizeSemanticParts(step.intent),\n ]);\n const idTokens = tokenizeSemanticParts(candidateId);\n let bonus = 0;\n if (attrs.id && attrs.id.toLowerCase() === candidateId.toLowerCase()) {\n bonus += 0.05;\n }\n if (attrs.name && candidateId.toLowerCase().includes(attrs.name.toLowerCase())) {\n bonus += 0.03;\n }\n const overlapCount = idTokens.filter(token => stepTokens.has(token)).length;\n if (overlapCount >= 2) {\n bonus += 0.04;\n }\n else if (overlapCount === 1) {\n bonus += 0.02;\n }\n bonus = Math.min(0.05, bonus);\n const adjustment = Math.max(-0.3, Math.min(0.05, bonus - penalty));\n return {\n adjustment,\n score: adjustment,\n reasons,\n };\n}\nfunction getSelectorRank(selector, selectorPriority, selectorRank) {\n if (typeof selectorRank === 'number' && Number.isFinite(selectorRank)) {\n return selectorRank;\n }\n if (selectorPriority) {\n return SELECTOR_RANK_MAP[selectorPriority] ?? 10;\n }\n if (selector.startsWith('[data-testid='))\n return 1;\n if (selector.startsWith('#') || selector.startsWith('[id='))\n return 2;\n if (selector.includes('[aria-label=') || selector.includes('[name=') || selector.includes('[role=')) {\n return 3;\n }\n if (selector.startsWith('.'))\n return 7;\n if (selector.startsWith('text=') || selector.includes(':has-text('))\n return 8;\n if (selector.startsWith('//') || selector.startsWith('id(\"'))\n return 10;\n return 10;\n}\nfunction inferCapturedSelectorSource(selector, family, engine) {\n if (family === 'test-id')\n return 'testid';\n if (family === 'id')\n return 'id';\n if (family === 'name')\n return 'name';\n if (family === 'aria-label')\n return 'aria';\n if (family === 'placeholder')\n return 'placeholder';\n if (family === 'href')\n return 'href';\n if (family === 'class')\n return 'class';\n if (family === 'text' || engine === 'text')\n return 'text';\n if (family === 'parent-scoped-css' || family === 'tight-container-css')\n return 'parent-scope';\n if (family === 'role-attr')\n return 'other';\n if (selector.startsWith('[data-testid='))\n return 'testid';\n if (selector.startsWith('[data-cy='))\n return 'data-cy';\n if (selector.startsWith('[data-qa='))\n return 'data-qa';\n if (selector.startsWith('#') || selector.startsWith('[id='))\n return 'id';\n if (selector.includes('[name='))\n return 'name';\n if (selector.includes('[aria-label='))\n return 'aria';\n if (selector.includes('[placeholder='))\n return 'placeholder';\n if (selector.includes('[href='))\n return 'href';\n if (selector.includes('[role='))\n return 'role+name';\n if (selector.startsWith('.') || /(?:^|[\\s>])(?:[a-z0-9_-]+)?\\.[a-z0-9:_-]+/i.test(selector))\n return 'class';\n if (engine === 'xpath' || selector.startsWith('//') || selector.startsWith('id(\"'))\n return 'path';\n return 'original';\n}\nfunction inferCapturedSelectorCategoryOverride(family) {\n if (family === 'role-attr')\n return 'role-attr';\n if (family === 'parent-scoped-css')\n return 'parent-scoped';\n if (family === 'tight-container-css')\n return 'structural';\n return undefined;\n}\n/**\n * Converts one captured selector candidate into a resolver-native candidate\n * without mutating resolver behavior. This is used only for shadow evaluation.\n */\nfunction convertCapturedCandidate(candidate) {\n if (!candidate?.selector || typeof candidate.selector !== 'string') {\n return null;\n }\n const selector = candidate.selector.trim();\n if (!selector)\n return null;\n return {\n selector,\n source: inferCapturedSelectorSource(selector, candidate.family, candidate.engine),\n engine: candidate.engine === 'xpath' ? 'xpath' : candidate.engine,\n categoryOverride: inferCapturedSelectorCategoryOverride(candidate.family),\n rank: getSelectorRank(selector),\n };\n}\nfunction buildShadowEvaluationWinner(winner) {\n return {\n selector: winner.candidate.candidate.selector,\n source: winner.candidate.candidate.source,\n engine: winner.candidate.candidate.engine,\n rank: winner.candidate.candidate.rank,\n score: winner.candidate.score,\n family: winner.captured.family,\n strength: winner.captured.strength,\n matchCount: winner.captured.matchCount ?? null,\n visibleMatchCount: winner.captured.visibleMatchCount ?? null,\n sameTargetEvidence: winner.sameTargetEvidence,\n warningCodes: winner.captured.warningCodes,\n };\n}\n/**\n * Computes a captured-candidate shadow winner using the existing validation\n * and semantic-rejection rails, while keeping emitted selector output unchanged.\n */\nfunction computeCapturedCandidateShadowEvaluation(step, snapshot) {\n const capturedCandidates = step.fingerprint?.selectorCandidates ?? [];\n if (capturedCandidates.length === 0) {\n return {\n status: 'skipped-no-candidates',\n candidateCount: 0,\n convertedCandidateCount: 0,\n uniqueCandidateCount: 0,\n semanticallySafeCandidateCount: 0,\n skippedReason: 'missing-selector-candidates',\n };\n }\n if (!snapshot) {\n return {\n status: 'skipped-no-snapshot',\n candidateCount: capturedCandidates.length,\n convertedCandidateCount: 0,\n uniqueCandidateCount: 0,\n semanticallySafeCandidateCount: 0,\n skippedReason: 'snapshot-unavailable',\n };\n }\n const converted = capturedCandidates\n .map(captured => {\n const rawCandidate = convertCapturedCandidate(captured);\n if (!rawCandidate)\n return null;\n const validation = validateCandidate(rawCandidate, snapshot, step);\n const baselineScore = computeBaselineCandidateScore(rawCandidate, validation, step, snapshot);\n const usesId = candidateUsesIdSelector(rawCandidate);\n const usesClass = candidateUsesClassSelector(rawCandidate);\n const idEntropy = computeIdEntropy(step, rawCandidate, validation, snapshot);\n const classEntropy = computeClassEntropy(step, rawCandidate, validation, snapshot);\n const sameTargetEvidence = hasSameAirTargetNodeId(validation.resolvedElement ?? null, step.targetNodeId);\n const selectorEvaluation = buildCandidateSelectorEvaluation({\n step,\n candidate: rawCandidate,\n validation,\n baselineScore,\n snapshotTargetEvidence: sameTargetEvidence || undefined,\n idEntropyScore: usesId ? idEntropy.score : undefined,\n idPenaltyReason: usesId ? idEntropy.reasons : undefined,\n classEntropyScore: usesClass ? classEntropy.score : undefined,\n classPenaltyReason: usesClass ? classEntropy.reasons : undefined,\n warningCodes: captured.warningCodes,\n });\n const candidateScore = {\n candidate: rawCandidate,\n validation,\n score: selectorEvaluation.scoring.finalScore,\n selectorEvaluation,\n idEntropyScore: usesId ? idEntropy.score : undefined,\n idPenaltyReason: usesId ? idEntropy.reasons : undefined,\n classEntropyScore: usesClass ? classEntropy.score : undefined,\n classPenaltyReason: usesClass ? classEntropy.reasons : undefined,\n };\n const semantic = evaluateSemanticReject(step, candidateScore, snapshot);\n return {\n captured,\n candidate: candidateScore,\n semantic,\n selectorEvaluation: buildCandidateSelectorEvaluation({\n step,\n candidate: rawCandidate,\n validation,\n baselineScore: candidateScore.score,\n snapshotTargetEvidence: sameTargetEvidence || undefined,\n semanticScore: semantic.score,\n semanticReasons: semantic.reasons,\n semanticRejectReason: semantic.rejectReason,\n proofLevel: semantic.rejectReason === null ? 'semantic_validated' : 'unvalidated',\n proofSource: semantic.rejectReason === null ? 'semantic' : 'none',\n idEntropyScore: candidateScore.idEntropyScore,\n idPenaltyReason: candidateScore.idPenaltyReason,\n classEntropyScore: candidateScore.classEntropyScore,\n classPenaltyReason: candidateScore.classPenaltyReason,\n warningCodes: selectorEvaluation.warningCodes,\n }),\n sameTargetEvidence,\n };\n })\n .filter((candidate) => candidate !== null);\n const uniqueCandidates = converted\n .filter(candidate => candidate.candidate.validation.effectiveMatchCount === 1);\n const semanticallySafeCandidates = uniqueCandidates\n .filter(candidate => candidate.semantic.rejectReason === null)\n .sort(compareSemanticCandidates);\n const rejectedCandidates = uniqueCandidates\n .filter(candidate => candidate.semantic.rejectReason !== null)\n .map(candidate => ({\n selector: candidate.candidate.candidate.selector,\n reason: candidate.semantic.rejectReason,\n }));\n const winner = semanticallySafeCandidates[0];\n return {\n status: 'computed',\n candidateCount: capturedCandidates.length,\n convertedCandidateCount: converted.length,\n uniqueCandidateCount: uniqueCandidates.length,\n semanticallySafeCandidateCount: semanticallySafeCandidates.length,\n winner: winner ? buildShadowEvaluationWinner(winner) : undefined,\n rejectedCandidates: rejectedCandidates.length > 0 ? rejectedCandidates : undefined,\n skippedReason: winner ? null : 'no-safe-captured-winner',\n };\n}\nconst CAPTURED_DIRECT_PROMOTION_FAMILY_PRIORITY = {\n 'test-id': 1,\n id: 2,\n name: 3,\n href: 4,\n 'aria-label': 5,\n placeholder: 6,\n};\nconst BLOCKED_CAPTURED_DIRECT_PROMOTION_WARNING_CODES = new Set([\n 'multiple-matches',\n 'multiple-visible-matches',\n 'target-not-in-matches',\n 'too-many-matches-for-visible-index',\n 'detached-target',\n 'inside-shadow-dom',\n 'shadow-boundary-crossed',\n 'query-failed',\n 'dynamic-class',\n 'framework-class',\n]);\nconst HIGH_TRUST_DIRECT_CATEGORIES = new Set([\n 'testid',\n 'id',\n 'name',\n 'href',\n 'placeholder',\n 'aria-label',\n]);\nconst CURRENT_WINNER_WEAK_WARNING_CODES = new Set([\n 'deterministic-low-score-fallback',\n 'deterministic-below-threshold',\n 'deterministic-low-score-available',\n 'deterministic-low-score-rejected',\n 'no-unique-candidate',\n 'snapshot-target-missing',\n 'blocked-generic-shell-override',\n 'deterministic-semantic-reject',\n 'invalid-original-selector',\n 'trusted-original-snapshot-miss',\n]);\nfunction isAllowlistedCapturedDirectFamily(family) {\n return family === 'test-id' ||\n family === 'id' ||\n family === 'name' ||\n family === 'href' ||\n family === 'aria-label' ||\n family === 'placeholder';\n}\nfunction getBlockedCapturedPromotionWarningCode(warningCodes) {\n for (const warningCode of warningCodes ?? []) {\n if (BLOCKED_CAPTURED_DIRECT_PROMOTION_WARNING_CODES.has(warningCode)) {\n return warningCode;\n }\n }\n return null;\n}\nfunction extractCapturedDirectCandidateValue(candidate) {\n switch (candidate.family) {\n case 'test-id':\n return (0, text_matching_1.extractAttributeValue)(candidate.selector, 'data-testid')\n ?? (0, text_matching_1.extractAttributeValue)(candidate.selector, 'data-cy')\n ?? (0, text_matching_1.extractAttributeValue)(candidate.selector, 'data-qa');\n case 'id':\n return extractCandidateId(candidate.selector);\n case 'name':\n return (0, text_matching_1.extractAttributeValue)(candidate.selector, 'name');\n case 'href':\n return (0, text_matching_1.extractAttributeValue)(candidate.selector, 'href');\n case 'aria-label':\n return (0, text_matching_1.extractAttributeValue)(candidate.selector, 'aria-label');\n case 'placeholder':\n return (0, text_matching_1.extractAttributeValue)(candidate.selector, 'placeholder');\n default:\n return null;\n }\n}\nfunction isStableCapturedHrefValue(href) {\n if (!href)\n return false;\n const normalized = href.trim();\n if (!normalized)\n return false;\n if (/^(?:#|javascript:|mailto:|tel:)/i.test(normalized))\n return false;\n try {\n const parsed = new URL(normalized, 'https://air.local');\n if (parsed.hash)\n return false;\n if (parsed.search)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction matchesRecordedDirectSignal(step, candidate) {\n const attrs = (0, text_matching_1.inferStepSignalAttributes)(step);\n const candidateValue = extractCapturedDirectCandidateValue(candidate);\n if (!candidateValue)\n return false;\n switch (candidate.family) {\n case 'test-id':\n return candidateValue === attrs.dataTestId || candidateValue === attrs.dataCy || candidateValue === attrs.dataQa;\n case 'id':\n return candidateValue === attrs.id;\n case 'name':\n return candidateValue === attrs.name;\n case 'href': {\n const candidatePath = normalizeComparablePath(candidateValue);\n const stepPath = normalizeComparablePath(attrs.href);\n return !!candidatePath && !!stepPath && candidatePath === stepPath;\n }\n case 'aria-label':\n return candidateValue === attrs.ariaLabel;\n case 'placeholder':\n return candidateValue === attrs.placeholder;\n default:\n return false;\n }\n}\nfunction isStructuredRecoverySpec(selectorSpec) {\n return selectorSpec?.engine === 'bounded-field' ||\n selectorSpec?.engine === 'label-context' ||\n selectorSpec?.engine === 'trigger-context';\n}\nfunction isCurrentWinnerHighTrust(draft) {\n if (isStructuredRecoverySpec(draft.resolvedSelectorSpec))\n return true;\n const evaluation = draft.metadata.selectorEvaluation;\n if (!evaluation)\n return false;\n if (!HIGH_TRUST_DIRECT_CATEGORIES.has(evaluation.category))\n return false;\n if (evaluation.proof.proofLevel !== 'snapshot_validated' &&\n evaluation.proof.proofLevel !== 'semantic_validated' &&\n evaluation.proof.proofLevel !== 'recorded') {\n return false;\n }\n if (evaluation.proof.proofSource === 'none')\n return false;\n const warningCodes = new Set([\n ...(draft.metadata.warningCodes ?? []),\n ...(evaluation.warningCodes ?? []),\n ]);\n for (const warningCode of warningCodes) {\n if (CURRENT_WINNER_WEAK_WARNING_CODES.has(warningCode))\n return false;\n }\n return true;\n}\nfunction compareCapturedDirectPromotionCandidates(left, right) {\n const leftPriority = CAPTURED_DIRECT_PROMOTION_FAMILY_PRIORITY[left.captured.family];\n const rightPriority = CAPTURED_DIRECT_PROMOTION_FAMILY_PRIORITY[right.captured.family];\n if (leftPriority !== rightPriority)\n return leftPriority - rightPriority;\n if (right.sameTargetEvidence !== left.sameTargetEvidence) {\n return Number(right.sameTargetEvidence) - Number(left.sameTargetEvidence);\n }\n if (right.score !== left.score)\n return right.score - left.score;\n return left.rawCandidate.rank - right.rawCandidate.rank;\n}\nfunction buildCapturedCandidatePromotionDecision(previousSelector, params) {\n return {\n attempted: true,\n promoted: params.promoted,\n previousSelector,\n selectedSelector: params.selectedSelector ?? null,\n selectedFamily: params.selectedFamily ?? null,\n reason: params.reason ?? null,\n blockedReason: params.blockedReason ?? null,\n };\n}\nfunction evaluateCapturedDirectPromotionCandidate(step, snapshot, captured) {\n if (captured.matchCount !== 1) {\n return { blockedReason: 'match-count-not-unique' };\n }\n if (captured.visibleMatchCount !== 1) {\n return { blockedReason: 'visible-match-count-not-unique' };\n }\n const blockedWarningCode = getBlockedCapturedPromotionWarningCode(captured.warningCodes);\n if (blockedWarningCode) {\n return { blockedReason: `warning:${blockedWarningCode}` };\n }\n if (captured.usesIndex === true) {\n return { blockedReason: 'uses-index' };\n }\n if (captured.usesDynamicClass === true) {\n return { blockedReason: 'uses-dynamic-class' };\n }\n const rawCandidate = convertCapturedCandidate(captured);\n if (!rawCandidate) {\n return { blockedReason: 'unconvertible-candidate' };\n }\n if (captured.family === 'id') {\n const candidateId = extractCapturedDirectCandidateValue(captured);\n if (!candidateId) {\n return { blockedReason: 'missing-id-value' };\n }\n const idEntropy = computeIdEntropy(step, rawCandidate, {\n totalMatchCount: 1,\n visibleMatchCount: 1,\n effectiveMatchCount: 1,\n reason: 'unique-visible',\n }, snapshot ?? undefined);\n if (idEntropy.reasons.length > 0) {\n return { blockedReason: 'dynamic-or-opaque-id' };\n }\n }\n if (captured.family === 'href') {\n const hrefValue = extractCapturedDirectCandidateValue(captured);\n if (!isStableCapturedHrefValue(hrefValue)) {\n return { blockedReason: 'volatile-href' };\n }\n }\n if (!snapshot) {\n const pristineNoSnapshot = captured.strength === 'strong' &&\n matchesRecordedDirectSignal(step, captured);\n if (!pristineNoSnapshot) {\n return { blockedReason: 'no-snapshot-non-pristine-direct-candidate' };\n }\n const score = 0.85 + Math.max(0, 0.05 - (CAPTURED_DIRECT_PROMOTION_FAMILY_PRIORITY[captured.family] - 1) * 0.005);\n return {\n candidate: {\n captured,\n rawCandidate,\n score,\n sameTargetEvidence: false,\n proofLevel: 'recorded',\n proofSource: 'recorded',\n reason: 'pristine-direct-candidate',\n },\n };\n }\n const validation = validateCandidate(rawCandidate, snapshot, step);\n if (validation.effectiveMatchCount !== 1 || validation.reason !== 'unique-visible') {\n return { blockedReason: 'snapshot-validation-not-unique-visible' };\n }\n const idEntropy = computeIdEntropy(step, rawCandidate, validation, snapshot);\n if (captured.family === 'id' && idEntropy.reasons.length > 0) {\n return { blockedReason: 'dynamic-or-opaque-id' };\n }\n const classEntropy = computeClassEntropy(step, rawCandidate, validation, snapshot);\n const sameTargetEvidence = hasSameAirTargetNodeId(validation.resolvedElement ?? null, step.targetNodeId);\n const baselineScore = computeBaselineCandidateScore(rawCandidate, validation, step, snapshot);\n const selectorEvaluation = buildCandidateSelectorEvaluation({\n step,\n candidate: rawCandidate,\n validation,\n baselineScore,\n snapshotTargetEvidence: sameTargetEvidence || undefined,\n idEntropyScore: idEntropy.score,\n idPenaltyReason: idEntropy.reasons,\n classEntropyScore: classEntropy.score,\n classPenaltyReason: classEntropy.reasons,\n warningCodes: captured.warningCodes,\n });\n const candidateScore = {\n candidate: rawCandidate,\n validation,\n score: selectorEvaluation.scoring.finalScore,\n selectorEvaluation,\n idEntropyScore: idEntropy.score,\n idPenaltyReason: idEntropy.reasons,\n classEntropyScore: classEntropy.score,\n classPenaltyReason: classEntropy.reasons,\n };\n const semantic = evaluateSemanticReject(step, candidateScore, snapshot);\n if (semantic.rejectReason !== null) {\n return { blockedReason: semantic.rejectReason };\n }\n return {\n candidate: {\n captured,\n rawCandidate,\n score: selectorEvaluation.scoring.finalScore,\n sameTargetEvidence,\n selectorEvaluation: buildCandidateSelectorEvaluation({\n step,\n candidate: rawCandidate,\n validation,\n baselineScore: candidateScore.score,\n snapshotTargetEvidence: sameTargetEvidence || undefined,\n semanticScore: semantic.score,\n semanticReasons: semantic.reasons,\n semanticRejectReason: semantic.rejectReason,\n proofLevel: sameTargetEvidence ? 'snapshot_validated' : 'semantic_validated',\n proofSource: sameTargetEvidence ? 'snapshot' : 'semantic',\n idEntropyScore: candidateScore.idEntropyScore,\n idPenaltyReason: candidateScore.idPenaltyReason,\n classEntropyScore: candidateScore.classEntropyScore,\n classPenaltyReason: candidateScore.classPenaltyReason,\n warningCodes: selectorEvaluation.warningCodes,\n }),\n validation,\n proofLevel: sameTargetEvidence ? 'snapshot_validated' : 'semantic_validated',\n proofSource: sameTargetEvidence ? 'snapshot' : 'semantic',\n reason: sameTargetEvidence ? 'same-target-direct-candidate' : 'semantic-direct-candidate',\n },\n };\n}\nfunction maybeApplyCapturedCandidateDirectPromotion(draft, config) {\n if (!config.enableCapturedCandidateDirectPromotion)\n return;\n const capturedCandidates = draft.step.fingerprint?.selectorCandidates ?? [];\n if (capturedCandidates.length === 0) {\n draft.metadata.capturedCandidatePromotion = buildCapturedCandidatePromotionDecision(draft.resolvedSelector, {\n promoted: false,\n blockedReason: 'no-captured-candidates',\n });\n return;\n }\n if (isStructuredRecoverySpec(draft.resolvedSelectorSpec)) {\n draft.metadata.capturedCandidatePromotion = buildCapturedCandidatePromotionDecision(draft.resolvedSelector, {\n promoted: false,\n blockedReason: 'structured-recovery-higher-proof',\n });\n return;\n }\n if (isCurrentWinnerHighTrust(draft)) {\n draft.metadata.capturedCandidatePromotion = buildCapturedCandidatePromotionDecision(draft.resolvedSelector, {\n promoted: false,\n blockedReason: 'current-winner-already-strong',\n });\n return;\n }\n const evaluatedCandidates = capturedCandidates\n .filter((candidate) => isAllowlistedCapturedDirectFamily(candidate.family))\n .map(candidate => ({\n captured: candidate,\n evaluation: evaluateCapturedDirectPromotionCandidate(draft.step, draft.snapshot, candidate),\n }));\n const promotableCandidates = evaluatedCandidates\n .flatMap(entry => entry.evaluation.candidate ? [entry.evaluation.candidate] : [])\n .filter(candidate => candidate.rawCandidate.selector !== draft.resolvedSelector)\n .sort(compareCapturedDirectPromotionCandidates);\n const promotedCandidate = promotableCandidates[0];\n if (!promotedCandidate) {\n const blockedReason = evaluatedCandidates.find(entry => entry.evaluation.blockedReason)?.evaluation.blockedReason\n ?? 'no-eligible-direct-candidate';\n draft.metadata.capturedCandidatePromotion = buildCapturedCandidatePromotionDecision(draft.resolvedSelector, {\n promoted: false,\n blockedReason,\n });\n return;\n }\n draft.resolvedSelector = promotedCandidate.rawCandidate.selector;\n draft.resolvedSelectorSpec = buildResolvedSelectorSpec({\n step: draft.step,\n selector: promotedCandidate.rawCandidate.selector,\n source: 'resolver',\n proofLevel: promotedCandidate.proofLevel,\n engine: promotedCandidate.rawCandidate.engine,\n rank: promotedCandidate.rawCandidate.rank,\n confidence: promotedCandidate.validation?.confidenceScore ?? promotedCandidate.score,\n warningCodes: [\n ...draft.metadata.warningCodes,\n 'captured-direct-promotion',\n ],\n });\n draft.metadata = {\n ...draft.metadata,\n resolvedSelector: promotedCandidate.rawCandidate.selector,\n resolvedBy: 'deterministic-override',\n bestScore: promotedCandidate.score,\n effectiveMatchCount: promotedCandidate.validation?.effectiveMatchCount ?? 1,\n matchCount: promotedCandidate.validation?.matchCount ?? promotedCandidate.validation?.visibleMatchCount ?? 1,\n confidenceScore: promotedCandidate.validation?.confidenceScore ?? promotedCandidate.score,\n ambiguityReason: promotedCandidate.validation?.ambiguityReason ?? null,\n semanticCompatibilityScore: promotedCandidate.selectorEvaluation?.scoring.semanticScore ?? draft.metadata.semanticCompatibilityScore,\n semanticCompatibilityReasons: promotedCandidate.reason ? [promotedCandidate.reason] : draft.metadata.semanticCompatibilityReasons,\n snapshotTargetEvidence: promotedCandidate.sameTargetEvidence || undefined,\n snapshotTargetEvidenceReason: promotedCandidate.sameTargetEvidence ? 'captured_candidate_same_target' : null,\n warningCodes: [\n ...draft.metadata.warningCodes,\n 'captured-direct-promotion',\n ],\n capturedCandidatePromotion: buildCapturedCandidatePromotionDecision(draft.metadata.resolvedSelector, {\n promoted: true,\n selectedSelector: promotedCandidate.rawCandidate.selector,\n selectedFamily: promotedCandidate.captured.family,\n reason: promotedCandidate.reason,\n }),\n };\n draft.metadata.selectorEvaluation = buildResolutionSelectorEvaluation({\n step: draft.step,\n selectorSpec: draft.resolvedSelectorSpec,\n metadata: draft.metadata,\n candidateEvaluation: promotedCandidate.selectorEvaluation,\n snapshotTargetEvidence: promotedCandidate.sameTargetEvidence || undefined,\n validation: promotedCandidate.validation,\n });\n draft.llmEligible = false;\n}\nfunction normalizeLabelContextText(value) {\n return (0, structured_selector_utils_1.normalizeStructuredSelectorText)(value);\n}\nfunction getFieldLabelText(step) {\n const value = (0, text_matching_1.inferStepSignalAttributes)(step).fieldLabelText;\n if (typeof value !== 'string')\n return null;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\nfunction hasStrongDirectSelectorEvidence(step) {\n const priority = step.selectorPriority;\n if (priority === 'data-testid' ||\n priority === 'id' ||\n priority === 'attribute' ||\n priority === 'text') {\n return true;\n }\n const attrs = (0, text_matching_1.inferStepSignalAttributes)(step);\n return !!(attrs.dataTestId ||\n attrs.dataCy ||\n attrs.dataQa ||\n attrs.id ||\n attrs.name ||\n attrs.placeholder ||\n attrs.ariaLabel ||\n attrs.href);\n}\nfunction isStructuredContextSource(source) {\n return source === 'label-context' || source === 'trigger-context' || source === 'bounded-field';\n}\nfunction buildTriggerResolutionStep(step) {\n return {\n ...step,\n selector: step.triggerSelector ?? step.selector,\n selectorPriority: step.triggerSelectorPriority ?? step.selectorPriority,\n fingerprint: step.triggerFingerprint ?? step.fingerprint,\n };\n}\nfunction getTriggerContextLabel(step) {\n const triggerStep = buildTriggerResolutionStep(step);\n const attrs = (0, text_matching_1.inferStepSignalAttributes)(triggerStep);\n const candidates = [\n attrs.fieldLabelText,\n attrs.associatedLabelText,\n attrs.wrappedLabelText,\n attrs.labelledByText,\n step.triggerFingerprint?.textExcerpt ?? undefined,\n step.fingerprint?.attributes?.fieldLabelText ?? undefined,\n ];\n for (const candidate of candidates) {\n if (typeof candidate !== 'string')\n continue;\n const trimmed = candidate.trim();\n if (!trimmed)\n continue;\n if (trimmed === '-- Select --' || trimmed === 'Select')\n continue;\n if (step.optionText && normalizeLabelContextText(trimmed) === normalizeLabelContextText(step.optionText))\n continue;\n if (step.optionValue && normalizeLabelContextText(trimmed) === normalizeLabelContextText(step.optionValue))\n continue;\n return trimmed;\n }\n return null;\n}\nfunction isSelectLikeTriggerStep(step) {\n const family = (step.controlFamily || '').toLowerCase();\n return (step.action === 'custom-control-open' ||\n (step.action === 'custom-select' && ['combobox', 'listbox', 'select', 'dropdown'].includes(family)));\n}\nfunction isTriggerSelectorDirectAndStrong(step) {\n const triggerStep = buildTriggerResolutionStep(step);\n return hasStrongDirectSelectorEvidence(triggerStep);\n}\nfunction isWeakLabelContextFallbackCandidate(step, snapshotSelection) {\n if (step.action !== 'input')\n return false;\n if (hasStrongDirectSelectorEvidence(step))\n return false;\n if (!getFieldLabelText(step))\n return false;\n if (snapshotSelection?.labelStructureEvidence !== true)\n return false;\n const priority = step.selectorPriority ?? 'unknown';\n return priority === 'class' || priority === 'path' || priority === 'unknown' || priority === 'other';\n}\nfunction findVisibleTargetForOriginalSelectorWithReason(step, snapshot) {\n if (!step.selector || !(0, text_matching_1.isLikelyCssSelector)(step.selector)) {\n return { target: null, blockedReason: 'label_structure_missing' };\n }\n try {\n const matches = Array.from(snapshot.querySelectorAll(step.selector)).filter(visibility_1.isVisibleElement);\n if (matches.length === 1)\n return { target: matches[0] ?? null };\n if (matches.length > 1)\n return { target: null, blockedReason: 'target_selector_ambiguous' };\n return { target: null, blockedReason: 'target_missing' };\n }\n catch {\n return { target: null, blockedReason: 'target_selector_ambiguous' };\n }\n}\nfunction findVisibleElementsForSelector(selector, snapshot) {\n const normalized = (selector || '').trim();\n if (!normalized || !(0, text_matching_1.isLikelyCssSelector)(normalized)) {\n return { matches: [], blockedReason: 'label_structure_missing' };\n }\n try {\n const matches = Array.from(snapshot.querySelectorAll(normalized)).filter(visibility_1.isVisibleElement);\n if (matches.length === 0)\n return { matches: [], blockedReason: 'target_missing' };\n return { matches };\n }\n catch {\n return { matches: [], blockedReason: 'target_selector_ambiguous' };\n }\n}\nfunction isStableRecoverableId(id) {\n if (typeof id !== 'string')\n return false;\n const trimmed = id.trim();\n if (!trimmed)\n return false;\n return !isVeryOpaqueMixedId(trimmed) && !hasOpaqueHyphenatedSegments(trimmed);\n}\nfunction classifySemanticContainerClass(stableClass) {\n if (!stableClass)\n return false;\n return !(isUtilityClassToken(stableClass) ||\n isCssInJsClassToken(stableClass) ||\n isHashedRandomClassToken(stableClass) ||\n isStateClassToken(stableClass) ||\n isFrameworkClassToken(stableClass) ||\n isGenericShellClassToken(stableClass));\n}\nfunction deriveSafeContainerSelector(container) {\n const attrs = {\n id: container.getAttribute('id') || container.id || undefined,\n dataTestId: container.getAttribute('data-testid') || undefined,\n dataCy: container.getAttribute('data-cy') || undefined,\n dataQa: container.getAttribute('data-qa') || undefined,\n class: container.getAttribute('class') || undefined,\n };\n const tagName = container.tagName?.toLowerCase() || 'div';\n if (attrs.dataTestId)\n return { selector: `[data-testid=\"${(0, text_matching_1.cssEscape)(attrs.dataTestId)}\"]`, kind: 'data-testid' };\n if (attrs.dataCy)\n return { selector: `[data-cy=\"${(0, text_matching_1.cssEscape)(attrs.dataCy)}\"]`, kind: 'data-cy' };\n if (attrs.dataQa)\n return { selector: `[data-qa=\"${(0, text_matching_1.cssEscape)(attrs.dataQa)}\"]`, kind: 'data-qa' };\n if (isStableRecoverableId(attrs.id))\n return { selector: buildIdSelectors(attrs.id)[0] ?? null, kind: 'id' };\n const stableClass = (0, text_matching_1.findStableClassFromAttributes)(attrs.class);\n if (stableClass) {\n return {\n selector: `${tagName}.${(0, text_matching_1.cssEscape)(stableClass)}`,\n kind: classifySemanticContainerClass(stableClass) ? 'semantic-class' : 'framework-class',\n };\n }\n return { selector: null, kind: 'unsafe' };\n}\nfunction summarizeContainer(container) {\n const tagName = container.tagName?.toLowerCase() || 'div';\n const className = (container.getAttribute('class') || '').trim().split(/\\s+/).filter(Boolean)[0];\n if (className)\n return `${tagName}.${className}`;\n const role = container.getAttribute('role');\n if (role)\n return `${tagName}[role=\"${role}\"]`;\n return tagName;\n}\nfunction buildLabelContextSyntheticSelector(labelContext) {\n const containerHint = labelContext.containerSelector || labelContext.boundedContainerSummary;\n if (containerHint) {\n return `label-context(\"${labelContext.labelText}\" within ${containerHint} -> ${labelContext.targetTag})`;\n }\n return `label-context(\"${labelContext.labelText}\" -> ${labelContext.targetTag})`;\n}\nfunction buildTriggerContextSyntheticSelector(triggerContext) {\n const containerHint = triggerContext.containerSelector || triggerContext.boundedContainerSummary;\n if (containerHint) {\n return `trigger-context(\"${triggerContext.labelText}\" within ${containerHint} -> ${triggerContext.triggerSelector})`;\n }\n return `trigger-context(\"${triggerContext.labelText}\" -> ${triggerContext.triggerSelector})`;\n}\nfunction deriveSafeTriggerChildSelector(target, triggerSelector, container) {\n const normalizedTrigger = (triggerSelector || '').trim();\n if (normalizedTrigger) {\n try {\n const matches = Array.from(container.querySelectorAll(normalizedTrigger)).filter(visibility_1.isVisibleElement);\n if (matches.length === 1 && matches[0] === target)\n return normalizedTrigger;\n }\n catch {\n // Ignore invalid selector fragments and continue to safer fallbacks.\n }\n }\n const tagName = target.tagName?.toLowerCase() || 'div';\n const role = (target.getAttribute('role') || '').toLowerCase();\n const hasPopup = (target.getAttribute('aria-haspopup') || '').toLowerCase();\n if (role === 'combobox')\n return '[role=\"combobox\"]';\n if (role === 'button' && hasPopup)\n return `[role=\"button\"][aria-haspopup=\"${(0, text_matching_1.cssEscape)(hasPopup)}\"]`;\n if (hasPopup === 'listbox' || hasPopup === 'combobox')\n return `[aria-haspopup=\"${(0, text_matching_1.cssEscape)(hasPopup)}\"]`;\n if (tagName === 'select')\n return 'select';\n const stableClass = (0, text_matching_1.findStableClassFromAttributes)(target.getAttribute('class') || undefined);\n if (stableClass && classifySemanticContainerClass(stableClass)) {\n return `${tagName}.${(0, text_matching_1.cssEscape)(stableClass)}`;\n }\n return null;\n}\nfunction findVisibleTargetForOriginalSelector(step, snapshot) {\n return findVisibleTargetForOriginalSelectorWithReason(step, snapshot).target;\n}\nfunction buildLabelContextCandidates(step, snapshot, snapshotSelection) {\n if (!isWeakLabelContextFallbackCandidate(step, snapshotSelection))\n return [];\n const fieldLabelText = getFieldLabelText(step);\n if (!fieldLabelText)\n return [];\n const targetResolution = findVisibleTargetForOriginalSelectorWithReason(step, snapshot);\n const target = targetResolution.target;\n if (!target)\n return [];\n const normalizedFieldLabel = normalizeLabelContextText(fieldLabelText);\n let labels = [];\n try {\n labels = Array.from(snapshot.querySelectorAll('label')).filter(label => normalizeLabelContextText(label.textContent || '') === normalizedFieldLabel);\n }\n catch {\n labels = [];\n }\n if (labels.length !== 1)\n return [];\n const label = labels[0];\n const tagName = (target.tagName?.toLowerCase() || step.fingerprint?.tagName?.toLowerCase() || 'input');\n const baseLabelContext = {\n source: 'snapshot-label-context',\n labelText: fieldLabelText,\n targetTag: tagName === 'textarea' || tagName === 'select' ? tagName : 'input',\n snapshotSource: snapshotSelection?.labelContextSnapshotSource ?? snapshotSelection?.source ?? 'unavailable',\n labelStructureEvidenceReason: snapshotSelection?.labelStructureEvidenceReason ?? null,\n recoveredFromSelector: step.selector,\n };\n const labelFor = label.getAttribute('for');\n const targetId = target.getAttribute('id') || target.id || null;\n if (labelFor && targetId && labelFor === targetId && isStableRecoverableId(targetId)) {\n const labelContext = {\n ...baseLabelContext,\n association: 'label-for',\n targetId,\n renderStatus: 'clean-direct-selector',\n renderReason: 'label_for_stable_id',\n cleanChildSelector: buildIdSelectors(targetId)[0] ?? undefined,\n };\n return buildIdSelectors(targetId).map(selector => ({\n selector,\n source: 'label-context',\n engine: 'css',\n categoryOverride: 'id',\n labelContext,\n rank: 2,\n }));\n }\n const ariaLabelledBy = target.getAttribute('aria-labelledby');\n if (ariaLabelledBy) {\n const ids = ariaLabelledBy.split(/\\s+/).filter(Boolean);\n const referencedExact = ids.some(id => {\n const referenced = snapshot.getElementById?.(id) ?? null;\n return !!referenced && normalizeLabelContextText(referenced.textContent || '') === normalizedFieldLabel;\n });\n if (referencedExact) {\n const selector = `${baseLabelContext.targetTag}[aria-labelledby=\"${(0, text_matching_1.cssEscape)(ariaLabelledBy)}\"]`;\n return [{\n selector,\n source: 'label-context',\n engine: 'css',\n categoryOverride: 'aria-label',\n labelContext: {\n ...baseLabelContext,\n association: 'aria-labelledby',\n ariaLabelledBy,\n renderStatus: 'clean-direct-selector',\n renderReason: 'aria_labelledby_exact',\n cleanChildSelector: selector,\n },\n rank: 3,\n }];\n }\n }\n if (label.contains(target) && (0, structured_selector_utils_1.getVisibleInputLikeControls)(label).length === 1) {\n const labelContext = {\n ...baseLabelContext,\n association: 'wrapped-label',\n renderStatus: 'proven-structural-fallback',\n renderReason: 'wrapped_label_exact',\n warningCodes: ['label-context-structural-fallback'],\n };\n return [{\n selector: buildLabelContextSyntheticSelector(labelContext),\n source: 'label-context',\n engine: 'label-context',\n categoryOverride: 'label-context',\n labelContext,\n rank: 5,\n }];\n }\n const boundedContainer = (0, structured_selector_utils_1.findTightFieldContainer)(label, target);\n if (!boundedContainer.container)\n return [];\n const visibleControls = (0, structured_selector_utils_1.getVisibleInputLikeControls)(boundedContainer.container);\n if (visibleControls.length !== 1 || visibleControls[0] !== target)\n return [];\n const containerDescriptor = deriveSafeContainerSelector(boundedContainer.container);\n const containerSelector = containerDescriptor.selector;\n if (!containerSelector)\n return [];\n const matchingVisibleContainers = Array.from(snapshot.querySelectorAll(containerSelector)).filter(visibility_1.isVisibleElement);\n const cleanParentSelector = matchingVisibleContainers.length === 1 &&\n ['data-testid', 'data-cy', 'data-qa', 'id', 'semantic-class'].includes(containerDescriptor.kind)\n ? containerSelector\n : undefined;\n const labelContext = {\n ...baseLabelContext,\n association: 'bounded-field',\n containerSelector,\n boundedContainerSummary: summarizeContainer(boundedContainer.container),\n renderStatus: cleanParentSelector ? 'clean-scoped-locator' : 'proven-structural-fallback',\n renderReason: cleanParentSelector ? 'clean_parent_unique_visible' : 'no_clean_parent_selector',\n cleanParentSelector,\n cleanChildSelector: tagName === 'textarea' || tagName === 'select' ? tagName : 'input',\n warningCodes: cleanParentSelector ? [] : ['label-context-structural-fallback', 'label-context-no-clean-parent'],\n };\n return [{\n selector: buildLabelContextSyntheticSelector(labelContext),\n source: 'label-context',\n engine: 'label-context',\n categoryOverride: 'label-context',\n labelContext,\n rank: 5,\n }];\n}\nfunction buildTriggerContextCandidates(step, snapshot, snapshotSelection) {\n if (!isSelectLikeTriggerStep(step))\n return [];\n const triggerSelector = (step.triggerSelector || '').trim();\n if (!triggerSelector || !(0, text_matching_1.isLikelyCssSelector)(triggerSelector))\n return [];\n if (isTriggerSelectorDirectAndStrong(step))\n return [];\n const labelText = getTriggerContextLabel(step);\n if (!labelText)\n return [];\n const triggerMatches = findVisibleElementsForSelector(triggerSelector, snapshot);\n if (triggerMatches.matches.length <= 1)\n return [];\n const proofs = [];\n for (const match of triggerMatches.matches) {\n const bounded = (0, structured_selector_utils_1.findTightTriggerContainer)(match, labelText);\n if (bounded.container && bounded.labelElement) {\n proofs.push({\n target: match,\n container: bounded.container,\n labelElement: bounded.labelElement,\n });\n continue;\n }\n }\n if (proofs.length !== 1)\n return [];\n const proof = proofs[0];\n const containerDescriptor = deriveSafeContainerSelector(proof.container);\n const containerSelector = containerDescriptor.selector;\n if (!containerSelector)\n return [];\n const matchingVisibleContainers = Array.from(snapshot.querySelectorAll(containerSelector)).filter(visibility_1.isVisibleElement);\n const cleanParentSelector = matchingVisibleContainers.length === 1 &&\n ['data-testid', 'data-cy', 'data-qa', 'id', 'semantic-class'].includes(containerDescriptor.kind)\n ? containerSelector\n : undefined;\n const cleanChildSelector = deriveSafeTriggerChildSelector(proof.target, triggerSelector, proof.container);\n if (!cleanChildSelector)\n return [];\n const renderStatus = cleanParentSelector\n ? 'clean-scoped-locator'\n : 'proven-structural-fallback';\n const warningCodes = cleanParentSelector\n ? []\n : ['custom-control-trigger-structural-fallback'];\n const triggerContext = {\n source: 'snapshot-trigger-context',\n labelText,\n controlFamily: step.controlFamily,\n association: 'bounded-field',\n triggerSelector: cleanChildSelector,\n containerSelector,\n labelElementTag: proof.labelElement.tagName?.toLowerCase() || 'label',\n boundedContainerSummary: summarizeContainer(proof.container),\n snapshotSource: snapshotSelection?.source ?? 'unavailable',\n recoveredFromSelector: step.triggerSelector,\n renderStatus,\n renderReason: cleanParentSelector\n ? 'clean_parent_unique_visible'\n : 'no_clean_parent_selector',\n cleanParentSelector,\n cleanChildSelector,\n warningCodes,\n };\n return [{\n selector: buildTriggerContextSyntheticSelector(triggerContext),\n source: 'trigger-context',\n engine: 'trigger-context',\n categoryOverride: 'label-context',\n triggerContext,\n rank: 5,\n }];\n}\nfunction validateCandidate(selectorOrCandidate, snapshot, step) {\n if (typeof selectorOrCandidate === 'string') {\n const selector = selectorOrCandidate;\n return (0, text_matching_1.isTextSelector)(selector)\n ? (0, visibility_1.validateTextCandidate)(selector, snapshot, step)\n : (0, visibility_1.validateCSSCandidate)(selector, snapshot, step);\n }\n return (0, selector_spec_validator_1.validateRawCandidate)(selectorOrCandidate, snapshot, step);\n}\nfunction hasStrongAttributeSignal(selector) {\n const patterns = [\n /\\[data-testid=(?:\"[^\"]+\"|'[^']+')\\]/i,\n /\\[id=(?:\"[^\"]+\"|'[^']+')\\]/i,\n /\\[name=(?:\"[^\"]+\"|'[^']+')\\]/i,\n /\\[aria-label=(?:\"[^\"]+\"|'[^']+')\\]/i,\n /\\[placeholder=(?:\"[^\"]+\"|'[^']+')\\]/i,\n /\\[type=(?:\"submit\"|'submit')\\]/i,\n /\\[href=(?:\"[^\"]+\"|'[^']+')\\]/i,\n /\\[role=(?:\"[^\"]+\"|'[^']+')\\]/i,\n ];\n return patterns.some(pattern => pattern.test(selector));\n}\nfunction normalizeSelectorForShellCheck(selector) {\n return (selector || '').trim().toLowerCase();\n}\nfunction isKnownShellSelector(selector) {\n const normalized = normalizeSelectorForShellCheck(selector);\n if (!normalized)\n return false;\n if (normalized === 'html' || normalized === 'body' || normalized === '#app' || normalized === '[id=\"app\"]') {\n return true;\n }\n if (/(?:layout|shell|container|wrapper)/i.test(normalized) && !/(?:button|input|textarea|select|a\\[|\\[role=)/i.test(normalized)) {\n return true;\n }\n return false;\n}\nfunction shouldBlockGenericShellOverride(originalSelector, candidateSelector) {\n if (!candidateSelector || candidateSelector === originalSelector)\n return false;\n if (isKnownShellSelector(candidateSelector))\n return true;\n // Block generic parent-child overrides like \"div input\"\n const parts = candidateSelector.split(/\\s+|>/);\n if (parts.length > 1) {\n const parent = parts[0].trim();\n if ((0, structured_selector_utils_1.isGenericContainerSelector)(parent))\n return true;\n }\n return false;\n}\nfunction shouldTrustOriginalOnSnapshotMiss(step, originalValidation) {\n const selector = step.selector || '';\n if (!selector)\n return false;\n if (!(0, text_matching_1.isLikelyCssSelector)(selector))\n return false;\n if (isKnownShellSelector(selector))\n return false;\n if (originalValidation.effectiveMatchCount !== 0)\n return false;\n if ((0, text_matching_1.isTextSelector)(selector))\n return false;\n const strongPriority = step.selectorPriority === 'data-testid' || step.selectorPriority === 'id';\n const strongSignal = strongPriority || hasStrongAttributeSignal(selector) || selector.startsWith('#');\n if (!strongSignal)\n return false;\n const normalized = selector.toLowerCase();\n if (step.action === 'input') {\n return normalized.startsWith('input') ||\n normalized.startsWith('textarea') ||\n normalized.startsWith('select') ||\n /\\[(?:name|id|placeholder)=/i.test(selector);\n }\n if (step.action === 'submit') {\n return normalized.startsWith('button') ||\n normalized.startsWith('input') ||\n /\\[type=(?:\"submit\"|'submit')\\]/i.test(selector);\n }\n if (step.action === 'click' ||\n step.action === 'custom-control-open' ||\n step.action === 'custom-select' ||\n step.action === 'custom-menu-select' ||\n step.action === 'hover') {\n return true;\n }\n return false;\n}\nfunction shouldKeepOriginal(step, snapshot, config, snapshotSelection) {\n if (!step.selector)\n return false;\n if ((0, bounded_field_1.isWeakBoundedFieldInputCandidate)(step))\n return false;\n if (isWeakLabelContextFallbackCandidate(step, snapshotSelection))\n return false;\n const validation = validateCandidate(step.selector, snapshot, step);\n if (validation.reason !== 'unique-visible')\n return false;\n const rank = getSelectorRank(step.selector, step.selectorPriority, step.selectorRank);\n const score = rankScore(rank) + 0.3;\n const minScore = config.resolverMinScore ?? DEFAULT_CONFIG.resolverMinScore;\n const effectiveMinScore = (0, text_matching_1.isTextSelector)(step.selector)\n ? Math.min(minScore, 0.65)\n : minScore;\n return (score + 1e-9) >= effectiveMinScore;\n}\nfunction matchesIntent(el, intent, defaultIntentMinScore = DEFAULT_CONFIG.intentMinScore) {\n return (0, element_ranking_1.matchesIntent)(el, intent, defaultIntentMinScore);\n}\nfunction pushCandidate(candidates, seen, selector, source, rank, extras = {}) {\n const normalized = (selector || '').trim();\n if (!normalized)\n return;\n if (seen.has(normalized))\n return;\n seen.add(normalized);\n candidates.push({ selector: normalized, source, rank, ...extras });\n}\nfunction generateCandidates(step, snapshot, snapshotSelection) {\n const candidates = [];\n const seen = new Set();\n const attrs = (0, text_matching_1.inferStepSignalAttributes)(step);\n const seedElements = (0, element_ranking_1.findSeedElements)(step, snapshot);\n let textExcerpt = (0, text_matching_1.extractTextExcerpt)(step);\n pushCandidate(candidates, seen, step.selector, 'original', getSelectorRank(step.selector, step.selectorPriority, step.selectorRank));\n for (const seedElement of seedElements) {\n (0, element_ranking_1.enrichSignalAttributesFromElement)(attrs, seedElement);\n if (!textExcerpt) {\n const extracted = (0, text_matching_1.textFromElement)(seedElement);\n if (extracted)\n textExcerpt = extracted;\n }\n }\n const tagName = attrs.tagName || step.fingerprint?.tagName?.toLowerCase();\n for (const candidate of (0, bounded_field_1.buildBoundedFieldCandidates)({ step, snapshot, snapshotSelection })) {\n pushCandidate(candidates, seen, candidate.selector, candidate.source, candidate.rank, {\n engine: candidate.engine,\n categoryOverride: candidate.categoryOverride,\n boundedField: candidate.boundedField,\n });\n }\n for (const candidate of buildLabelContextCandidates(step, snapshot, snapshotSelection)) {\n pushCandidate(candidates, seen, candidate.selector, candidate.source, candidate.rank, {\n engine: candidate.engine,\n categoryOverride: candidate.categoryOverride,\n labelContext: candidate.labelContext,\n });\n }\n if (attrs.dataTestId) {\n pushCandidate(candidates, seen, `[data-testid=\"${(0, text_matching_1.cssEscape)(attrs.dataTestId)}\"]`, 'testid', 1);\n if (tagName) {\n pushCandidate(candidates, seen, `${tagName}[data-testid=\"${(0, text_matching_1.cssEscape)(attrs.dataTestId)}\"]`, 'testid', 1);\n }\n }\n if (attrs.dataCy) {\n pushCandidate(candidates, seen, `[data-cy=\"${(0, text_matching_1.cssEscape)(attrs.dataCy)}\"]`, 'data-cy', 1);\n if (tagName) {\n pushCandidate(candidates, seen, `${tagName}[data-cy=\"${(0, text_matching_1.cssEscape)(attrs.dataCy)}\"]`, 'data-cy', 1);\n }\n }\n if (attrs.dataQa) {\n pushCandidate(candidates, seen, `[data-qa=\"${(0, text_matching_1.cssEscape)(attrs.dataQa)}\"]`, 'data-qa', 1);\n if (tagName) {\n pushCandidate(candidates, seen, `${tagName}[data-qa=\"${(0, text_matching_1.cssEscape)(attrs.dataQa)}\"]`, 'data-qa', 1);\n }\n }\n if (attrs.id) {\n for (const selector of buildIdSelectors(attrs.id)) {\n pushCandidate(candidates, seen, selector, 'id', 2);\n }\n }\n if (attrs.name) {\n pushCandidate(candidates, seen, `[name=\"${(0, text_matching_1.cssEscape)(attrs.name)}\"]`, 'name', 3);\n if (tagName) {\n pushCandidate(candidates, seen, `${tagName}[name=\"${(0, text_matching_1.cssEscape)(attrs.name)}\"]`, 'name', 3);\n }\n }\n if (attrs.ariaLabel) {\n pushCandidate(candidates, seen, `[aria-label=\"${(0, text_matching_1.cssEscape)(attrs.ariaLabel)}\"]`, 'aria', 3);\n if (tagName) {\n pushCandidate(candidates, seen, `${tagName}[aria-label=\"${(0, text_matching_1.cssEscape)(attrs.ariaLabel)}\"]`, 'aria', 3);\n }\n }\n if (attrs.ariaLabelledBy) {\n pushCandidate(candidates, seen, `[aria-labelledby=\"${(0, text_matching_1.cssEscape)(attrs.ariaLabelledBy)}\"]`, 'other', 4);\n if (tagName) {\n pushCandidate(candidates, seen, `${tagName}[aria-labelledby=\"${(0, text_matching_1.cssEscape)(attrs.ariaLabelledBy)}\"]`, 'other', 4);\n }\n }\n if (attrs.placeholder) {\n pushCandidate(candidates, seen, `[placeholder=\"${(0, text_matching_1.cssEscape)(attrs.placeholder)}\"]`, 'placeholder', 4);\n if (tagName) {\n pushCandidate(candidates, seen, `${tagName}[placeholder=\"${(0, text_matching_1.cssEscape)(attrs.placeholder)}\"]`, 'placeholder', 4);\n }\n if (/yyyy/i.test(attrs.placeholder)) {\n pushCandidate(candidates, seen, 'input[placeholder*=\"yyyy\"]', 'placeholder', 4);\n }\n }\n if (attrs.autocomplete) {\n pushCandidate(candidates, seen, `[autocomplete=\"${(0, text_matching_1.cssEscape)(attrs.autocomplete)}\"]`, 'other', 4);\n if (tagName) {\n pushCandidate(candidates, seen, `${tagName}[autocomplete=\"${(0, text_matching_1.cssEscape)(attrs.autocomplete)}\"]`, 'other', 4);\n }\n }\n if (attrs.title) {\n pushCandidate(candidates, seen, `[title=\"${(0, text_matching_1.cssEscape)(attrs.title)}\"]`, 'other', 4);\n if (tagName) {\n pushCandidate(candidates, seen, `${tagName}[title=\"${(0, text_matching_1.cssEscape)(attrs.title)}\"]`, 'other', 4);\n }\n }\n if (attrs.role) {\n pushCandidate(candidates, seen, `[role=\"${(0, text_matching_1.cssEscape)(attrs.role)}\"]`, 'role+name', 3);\n }\n if (attrs.href) {\n pushCandidate(candidates, seen, `[href=\"${(0, text_matching_1.cssEscape)(attrs.href)}\"]`, 'href', 3);\n if (tagName) {\n pushCandidate(candidates, seen, `${tagName}[href=\"${(0, text_matching_1.cssEscape)(attrs.href)}\"]`, 'href', 3);\n }\n }\n const stableClass = (0, text_matching_1.findStableClassFromAttributes)(attrs.class);\n if (stableClass) {\n pushCandidate(candidates, seen, `.${stableClass}`, 'class', 7);\n if (tagName) {\n pushCandidate(candidates, seen, `${tagName}.${stableClass}`, 'class', 7);\n }\n }\n const calendarMode = (0, element_ranking_1.isCalendarContext)(step, snapshot, attrs, seedElements);\n const allowNumericText = calendarMode || !!(0, element_ranking_1.extractCalendarTextTarget)(step, textExcerpt);\n const stableText = textExcerpt?.trim() || '';\n if (stableText && !(0, text_matching_1.isDynamicText)(stableText, { allowNumericText })) {\n const escapedText = (0, text_matching_1.escapeTextSelectorValue)(stableText.toLowerCase());\n pushCandidate(candidates, seen, `text=${escapedText}`, 'text', 8);\n if (tagName) {\n pushCandidate(candidates, seen, `${tagName}:has-text(\"${(0, text_matching_1.escapeTextSelectorValue)(stableText)}\")`, 'text', 8);\n }\n if (attrs.role) {\n pushCandidate(candidates, seen, `[role=\"${(0, text_matching_1.cssEscape)(attrs.role)}\"]:has-text(\"${(0, text_matching_1.escapeTextSelectorValue)(stableText)}\")`, 'role+name', 4);\n }\n }\n const parentSelector = (0, text_matching_1.extractStableParentSelector)(step, attrs);\n const scopedBase = parentSelector && (0, text_matching_1.isLikelyCssSelector)(parentSelector)\n ? parentSelector\n : attrs.parentSelector;\n if (scopedBase && (0, text_matching_1.isLikelyCssSelector)(scopedBase)) {\n if (attrs.dataTestId)\n pushCandidate(candidates, seen, `${scopedBase} [data-testid=\"${(0, text_matching_1.cssEscape)(attrs.dataTestId)}\"]`, 'parent-scope', 2);\n if (attrs.dataCy)\n pushCandidate(candidates, seen, `${scopedBase} [data-cy=\"${(0, text_matching_1.cssEscape)(attrs.dataCy)}\"]`, 'parent-scope', 2);\n if (attrs.dataQa)\n pushCandidate(candidates, seen, `${scopedBase} [data-qa=\"${(0, text_matching_1.cssEscape)(attrs.dataQa)}\"]`, 'parent-scope', 2);\n if (attrs.id) {\n for (const selector of buildIdSelectors(attrs.id)) {\n pushCandidate(candidates, seen, `${scopedBase} ${selector}`, 'parent-scope', 2);\n }\n }\n if (attrs.name)\n pushCandidate(candidates, seen, `${scopedBase} [name=\"${(0, text_matching_1.cssEscape)(attrs.name)}\"]`, 'parent-scope', 4);\n if (attrs.href)\n pushCandidate(candidates, seen, `${scopedBase} [href=\"${(0, text_matching_1.cssEscape)(attrs.href)}\"]`, 'parent-scope', 4);\n if (attrs.ariaLabel)\n pushCandidate(candidates, seen, `${scopedBase} [aria-label=\"${(0, text_matching_1.cssEscape)(attrs.ariaLabel)}\"]`, 'parent-scope', 4);\n if (attrs.ariaLabelledBy)\n pushCandidate(candidates, seen, `${scopedBase} [aria-labelledby=\"${(0, text_matching_1.cssEscape)(attrs.ariaLabelledBy)}\"]`, 'parent-scope', 4);\n if (attrs.placeholder)\n pushCandidate(candidates, seen, `${scopedBase} [placeholder=\"${(0, text_matching_1.cssEscape)(attrs.placeholder)}\"]`, 'parent-scope', 4);\n if (attrs.autocomplete)\n pushCandidate(candidates, seen, `${scopedBase} [autocomplete=\"${(0, text_matching_1.cssEscape)(attrs.autocomplete)}\"]`, 'parent-scope', 4);\n if (attrs.title)\n pushCandidate(candidates, seen, `${scopedBase} [title=\"${(0, text_matching_1.cssEscape)(attrs.title)}\"]`, 'parent-scope', 4);\n if (tagName)\n pushCandidate(candidates, seen, `${scopedBase} ${tagName}`, 'parent-scope', 6);\n if (step.selector && (0, text_matching_1.isLikelyCssSelector)(step.selector)) {\n pushCandidate(candidates, seen, `${scopedBase} ${step.selector}`, 'parent-scope', Math.min(getSelectorRank(step.selector, step.selectorPriority, step.selectorRank), 6));\n }\n }\n if (calendarMode) {\n const calendarScopes = (0, element_ranking_1.getCalendarScopeSelectors)(step, attrs);\n for (const scope of calendarScopes) {\n if (step.selector && (0, text_matching_1.isLikelyCssSelector)(step.selector)) {\n pushCandidate(candidates, seen, `${scope} ${step.selector}`, 'parent-scope', 5);\n }\n if (tagName) {\n pushCandidate(candidates, seen, `${scope} ${tagName}`, 'parent-scope', 5);\n }\n if (step.action === 'input') {\n pushCandidate(candidates, seen, `${scope} input`, 'parent-scope', 4);\n if (attrs.class) {\n const classToken = attrs.class.split(/\\s+/).find(Boolean);\n if (classToken)\n pushCandidate(candidates, seen, `${scope} .${(0, text_matching_1.cssEscape)(classToken)}`, 'parent-scope', 5);\n }\n }\n }\n const calendarText = (0, element_ranking_1.extractCalendarTextTarget)(step, textExcerpt);\n if (calendarText) {\n for (const scope of calendarScopes) {\n if (tagName) {\n pushCandidate(candidates, seen, `${scope} ${tagName}:has-text(\"${(0, text_matching_1.escapeTextSelectorValue)(calendarText)}\")`, 'parent-scope', 4);\n }\n if (attrs.role) {\n pushCandidate(candidates, seen, `${scope} [role=\"${(0, text_matching_1.cssEscape)(attrs.role)}\"]:has-text(\"${(0, text_matching_1.escapeTextSelectorValue)(calendarText)}\")`, 'parent-scope', 4);\n }\n if (step.selector && (0, text_matching_1.isLikelyCssSelector)(step.selector)) {\n pushCandidate(candidates, seen, `${scope} ${step.selector}:has-text(\"${(0, text_matching_1.escapeTextSelectorValue)(calendarText)}\")`, 'parent-scope', 4);\n }\n }\n if (tagName) {\n pushCandidate(candidates, seen, `${tagName}:has-text(\"${(0, text_matching_1.escapeTextSelectorValue)(calendarText)}\")`, 'text', 8);\n }\n }\n }\n return candidates.slice(0, 20);\n}\nfunction normalizeComparablePath(href) {\n if (typeof href !== 'string')\n return null;\n const trimmed = href.trim();\n if (!trimmed)\n return null;\n try {\n const parsed = new URL(trimmed, 'https://air.local');\n const pathname = parsed.pathname.replace(/\\/+$/, '') || '/';\n return pathname.toLowerCase();\n }\n catch {\n return trimmed.replace(/\\/+$/, '') || '/';\n }\n}\nfunction normalizeSemanticText(value) {\n if (typeof value !== 'string')\n return '';\n return (0, text_matching_1.normalizeTextForMatch)(value.replace(/[^\\w\\s-]+/g, ' '));\n}\nfunction extractOriginalMeaningfulText(step) {\n const text = step.fingerprint?.textExcerpt\n || ((0, text_matching_1.isTextSelector)(step.selector) ? (0, text_matching_1.extractTextExcerpt)(step) : null);\n if (typeof text !== 'string')\n return null;\n const normalized = normalizeSemanticText(text);\n if (!normalized || normalized.length < 2)\n return null;\n return normalized;\n}\nfunction normalizeSignalValue(signal) {\n return typeof signal === 'string'\n ? normalizeSemanticText(signal)\n : normalizeSemanticText(signal.value);\n}\nfunction textSignalsAlign(originalSignals, candidateSignals) {\n const normalizedOriginals = originalSignals\n .map(signal => ({\n source: typeof signal === 'string' ? 'text' : signal.source,\n value: normalizeSignalValue(signal),\n }))\n .filter(signal => signal.value.length > 0);\n const normalizedCandidates = candidateSignals\n .map(signal => ({\n source: typeof signal === 'string' ? 'text' : signal.source,\n value: normalizeSignalValue(signal),\n }))\n .filter(signal => signal.value.length > 0);\n if (normalizedOriginals.length === 0 || normalizedCandidates.length === 0) {\n return { matched: false, reasons: [] };\n }\n const reasons = new Set();\n for (const original of normalizedOriginals) {\n const originalTokens = original.value.split(/\\s+/).filter(Boolean);\n const compactOriginal = original.value.replace(/\\s+/g, '');\n for (const candidate of normalizedCandidates) {\n const compactCandidate = candidate.value.replace(/\\s+/g, '');\n if (compactCandidate === compactOriginal ||\n candidate.value === original.value ||\n candidate.value.includes(original.value) ||\n original.value.includes(candidate.value)) {\n reasons.add(`text_match:${candidate.source}`);\n return { matched: true, reasons: Array.from(reasons) };\n }\n const candidateTokens = new Set(candidate.value.split(/\\s+/).filter(Boolean));\n if (originalTokens.length > 0 && originalTokens.every(token => candidateTokens.has(token))) {\n reasons.add(`text_match:${candidate.source}`);\n return { matched: true, reasons: Array.from(reasons) };\n }\n }\n }\n return { matched: false, reasons: [] };\n}\nfunction collectStepPrimarySemanticSignals(step) {\n const attrs = (0, text_matching_1.inferStepSignalAttributes)(step);\n const signals = [];\n const push = (value, source) => {\n const normalized = normalizeSemanticText(value);\n if (!normalized)\n return;\n if (signals.some(signal => signal.value === normalized && signal.source === source))\n return;\n signals.push({ value: normalized, source });\n };\n push(step.fingerprint?.textExcerpt || undefined, 'fingerprint_text');\n push(attrs.ariaLabel, 'fingerprint_aria_label');\n push(attrs.labelledByText, 'fingerprint_labelledby_text');\n push(attrs.associatedLabelText, 'fingerprint_associated_label');\n push(attrs.wrappedLabelText, 'fingerprint_wrapped_label');\n push(attrs.fieldLabelText, 'fingerprint_field_label');\n push(attrs.placeholder, 'fingerprint_placeholder');\n push(attrs.autocomplete, 'fingerprint_autocomplete');\n push(attrs.title, 'fingerprint_title');\n push(attrs.alt, 'fingerprint_alt');\n push(attrs.describedByText, 'fingerprint_describedby_text');\n return signals;\n}\nfunction collectStepPositiveSemanticSignals(step) {\n const attrs = (0, text_matching_1.inferStepSignalAttributes)(step);\n const signals = collectStepPrimarySemanticSignals(step);\n const normalizedValue = normalizeSemanticText(attrs.value);\n if (normalizedValue) {\n signals.push({ value: normalizedValue, source: 'fingerprint_value' });\n }\n return signals;\n}\nfunction collectCandidatePrimarySemanticSignals(element, snapshot) {\n return (0, text_matching_1.getElementSemanticTextSignals)(element, snapshot)\n .filter(signal => signal.source !== 'value' && signal.source !== 'parent_wrapper_text');\n}\nfunction collectCandidatePositiveSemanticSignals(element, snapshot) {\n return (0, text_matching_1.getElementSemanticTextSignals)(element, snapshot)\n .filter(signal => signal.source !== 'parent_wrapper_text');\n}\nfunction hasParentSelectorMatch(step, element, snapshot) {\n const parentSelector = step.fingerprint?.parentSelector;\n if (!parentSelector || !(0, text_matching_1.isLikelyCssSelector)(parentSelector))\n return false;\n try {\n const scopes = Array.from(snapshot.querySelectorAll(parentSelector)).slice(0, 25);\n let current = element;\n while (current) {\n if (scopes.includes(current))\n return true;\n current = current.parentElement;\n }\n }\n catch {\n return false;\n }\n return false;\n}\nfunction collectContextCompatibilityReasons(step, element, snapshot) {\n const reasons = [];\n let score = 0;\n const stepParentTag = (step.fingerprint?.context?.parentTag || '').toLowerCase();\n const stepNearestContainerTag = (step.fingerprint?.context?.nearestContainerTag || '').toLowerCase();\n const elementHints = (0, text_matching_1.getElementContextHints)(element);\n if (stepParentTag && elementHints.parentTag && stepParentTag === elementHints.parentTag) {\n score += 0.08;\n reasons.push(`parent_tag_match:${stepParentTag}`);\n }\n if (stepNearestContainerTag &&\n elementHints.nearestContainerTag &&\n stepNearestContainerTag === elementHints.nearestContainerTag) {\n score += 0.1;\n reasons.push(`nearest_container_match:${stepNearestContainerTag}`);\n }\n if (hasParentSelectorMatch(step, element, snapshot)) {\n score += 0.12;\n reasons.push('parent_selector_match');\n }\n return { score, reasons };\n}\nfunction collectCompatibilityEvidence(step, element, snapshot) {\n const originalAttrs = (0, text_matching_1.inferStepSignalAttributes)(step);\n const originalHref = normalizeComparablePath(originalAttrs.href);\n const candidateHref = normalizeComparablePath(element.getAttribute('href'));\n if (originalHref && candidateHref && originalHref !== candidateHref) {\n return {\n score: 0,\n reasons: ['href_mismatch'],\n rejectReason: 'href_mismatch',\n };\n }\n const originalFamily = inferStepControlFamily(step);\n const candidateFamily = inferElementControlFamily(element);\n if (shouldRejectControlFamily(originalFamily, candidateFamily)) {\n return {\n score: 0,\n reasons: [`control_family_mismatch:${originalFamily}->${candidateFamily}`],\n rejectReason: 'control_family_mismatch',\n };\n }\n const primaryOriginalSignals = collectStepPrimarySemanticSignals(step);\n const primaryCandidateSignals = collectCandidatePrimarySemanticSignals(element, snapshot);\n const primaryTextMatch = textSignalsAlign(primaryOriginalSignals, primaryCandidateSignals);\n if (primaryOriginalSignals.length > 0 &&\n primaryCandidateSignals.length > 0 &&\n !primaryTextMatch.matched) {\n return {\n score: 0,\n reasons: ['text_mismatch'],\n rejectReason: 'text_mismatch',\n };\n }\n let score = 0.25;\n const reasons = [];\n if (originalFamily === candidateFamily || (originalFamily === 'button' && candidateFamily === 'icon-button')) {\n score += 0.2;\n reasons.push(`control_family_match:${candidateFamily}`);\n }\n if (originalHref && candidateHref && originalHref === candidateHref) {\n score += 0.2;\n reasons.push('href_match');\n }\n if (primaryTextMatch.matched) {\n score += 0.3;\n reasons.push(...primaryTextMatch.reasons);\n }\n const positiveTextMatch = textSignalsAlign(collectStepPositiveSemanticSignals(step), collectCandidatePositiveSemanticSignals(element, snapshot));\n if (positiveTextMatch.matched) {\n score += 0.08;\n reasons.push(...positiveTextMatch.reasons.filter(reason => !reasons.includes(reason)));\n }\n const contextCompatibility = collectContextCompatibilityReasons(step, element, snapshot);\n score += contextCompatibility.score;\n reasons.push(...contextCompatibility.reasons);\n return {\n score: Math.max(0, Math.min(1, score)),\n reasons,\n rejectReason: null,\n };\n}\nfunction compareSemanticCandidates(left, right) {\n if (right.selectorEvaluation.scoring.proofScore !== left.selectorEvaluation.scoring.proofScore) {\n return right.selectorEvaluation.scoring.proofScore - left.selectorEvaluation.scoring.proofScore;\n }\n if (right.semantic.score !== left.semantic.score) {\n return right.semantic.score - left.semantic.score;\n }\n if (right.selectorEvaluation.scoring.finalScore !== left.selectorEvaluation.scoring.finalScore) {\n return right.selectorEvaluation.scoring.finalScore - left.selectorEvaluation.scoring.finalScore;\n }\n if (right.selectorEvaluation.scoring.stabilityScore !== left.selectorEvaluation.scoring.stabilityScore) {\n return right.selectorEvaluation.scoring.stabilityScore - left.selectorEvaluation.scoring.stabilityScore;\n }\n return compareCandidates(left.candidate, right.candidate);\n}\nfunction inferStepControlFamily(step) {\n const attrs = (0, text_matching_1.inferStepSignalAttributes)(step);\n const selector = (step.selector || step.fingerprint?.selector || '').toLowerCase();\n const text = normalizeSemanticText(step.fingerprint?.textExcerpt || '');\n const role = (attrs.role || '').toLowerCase();\n const tagName = (step.fingerprint?.tagName || attrs.tagName || '').toLowerCase();\n const type = (attrs.type || '').toLowerCase();\n const hasPopup = normalizeSemanticText((step.fingerprint?.attributes?.['aria-haspopup']) || '');\n if ((role === 'button' || tagName === 'button') && !text && (attrs.ariaLabel || attrs.title || attrs.alt)) {\n return 'icon-button';\n }\n if (role === 'menuitem')\n return 'menuitem';\n if (role === 'link')\n return 'nav-link';\n if (role === 'combobox')\n return 'combobox';\n if (type === 'password')\n return 'password-input';\n if (type === 'submit' || step.action === 'submit')\n return 'submit-button';\n if (attrs.href || tagName === 'a' || selector.startsWith('a') || selector.includes('[href='))\n return 'nav-link';\n if (role === 'button' || tagName === 'button')\n return 'button';\n if (tagName === 'select')\n return 'combobox';\n if (role === 'textbox' || role === 'searchbox' || tagName === 'input' || tagName === 'textarea') {\n return type === 'password' ? 'password-input' : 'text-input';\n }\n if (step.action === 'custom-control-open' ||\n step.action === 'custom-select' ||\n step.action === 'custom-menu-select' ||\n text === '-- select --' ||\n selector.includes('select') ||\n role === 'listbox' ||\n hasPopup === 'listbox' ||\n hasPopup === 'combobox') {\n return 'select-trigger';\n }\n return 'generic-container';\n}\nfunction inferElementControlFamily(element) {\n if (!element)\n return 'generic-container';\n const tagName = ((element.tagName) || '').toLowerCase();\n const role = (element.getAttribute('role') || '').toLowerCase();\n const type = (element.getAttribute('type') || '').toLowerCase();\n const placeholder = normalizeSemanticText(element.getAttribute('placeholder') || '');\n const hasPopup = normalizeSemanticText(element.getAttribute('aria-haspopup') || '');\n const signals = (0, text_matching_1.getElementSemanticTextSignals)(element);\n const hasExplicitIconText = signals.some(signal => ['aria_label', 'title', 'alt', 'icon_child_svg_title', 'icon_child_alt', 'icon_child_aria_label', 'icon_child_title'].includes(signal.source));\n if (role === 'menuitem')\n return 'menuitem';\n if (role === 'link')\n return 'nav-link';\n if (role === 'combobox' || role === 'listbox' || tagName === 'select')\n return 'combobox';\n if (type === 'password')\n return 'password-input';\n if (type === 'submit')\n return 'submit-button';\n if (tagName === 'a' || !!element.getAttribute('href'))\n return 'nav-link';\n if ((tagName === 'button' || role === 'button') && hasExplicitIconText && !(element.textContent || '').trim()) {\n return 'icon-button';\n }\n if (tagName === 'button' || role === 'button')\n return 'button';\n if (tagName === 'input' || tagName === 'textarea' || role === 'textbox' || role === 'searchbox') {\n if (placeholder.includes('search') || type === 'search')\n return 'text-input';\n return 'text-input';\n }\n if (placeholder === '-- select --' || hasPopup === 'listbox' || hasPopup === 'combobox')\n return 'select-trigger';\n return 'generic-container';\n}\nfunction shouldRejectControlFamily(originalFamily, candidateFamily) {\n if (originalFamily === candidateFamily)\n return false;\n if (originalFamily === 'icon-button') {\n return !['icon-button', 'button'].includes(candidateFamily);\n }\n if (originalFamily === 'select-trigger') {\n return candidateFamily === 'text-input' || candidateFamily === 'password-input' || candidateFamily === 'nav-link';\n }\n if (originalFamily === 'menuitem') {\n return candidateFamily !== 'menuitem';\n }\n if (originalFamily === 'nav-link') {\n return candidateFamily !== 'nav-link' && candidateFamily !== 'menuitem';\n }\n if (originalFamily === 'password-input') {\n return candidateFamily !== 'password-input';\n }\n if (originalFamily === 'text-input') {\n return !['text-input', 'password-input', 'combobox'].includes(candidateFamily);\n }\n if (originalFamily === 'submit-button') {\n return !['submit-button', 'button'].includes(candidateFamily);\n }\n return false;\n}\nfunction evaluateSemanticReject(step, candidate, snapshot) {\n if (candidate.candidate.selector === step.selector) {\n return {\n score: 0.5,\n reasons: ['original-selector-candidate'],\n rejectReason: null,\n };\n }\n const validation = candidate.validation;\n const element = validation.resolvedElement ?? (0, element_ranking_1.getCandidateElement)(snapshot, candidate.candidate.selector);\n if (!element) {\n return {\n score: 0,\n reasons: ['candidate-element-missing'],\n rejectReason: null,\n };\n }\n return collectCompatibilityEvidence(step, element, snapshot);\n}\nfunction complexityPenalty(selector) {\n const descendantPenalty = Math.max(0, (selector.match(/\\s+/g)?.length ?? 0) * 0.03);\n const childPenalty = Math.max(0, (selector.match(/>/g)?.length ?? 0) * 0.05);\n const pseudoPenalty = Math.max(0, (selector.match(/:has-text\\(/g)?.length ?? 0) * 0.04);\n return descendantPenalty + childPenalty + pseudoPenalty;\n}\nfunction volatilityPenalty(selector) {\n let penalty = 0;\n if (/nth-child|nth-of-type/i.test(selector))\n penalty += 0.2;\n if (/\\.(?:css-|sc-|Mui|ant-|chakra-)/.test(selector))\n penalty += 0.12;\n if (/\\d{4,}/.test(selector))\n penalty += 0.1;\n return penalty;\n}\nfunction selectorDepth(selector) {\n return Math.max(0, (selector.match(/\\s+/g)?.length ?? 0) + (selector.match(/>/g)?.length ?? 0));\n}\nfunction computeBrittlenessPenalty(selector, category) {\n if (category === 'label-context') {\n return { penalty: 0.02, reasons: ['snapshot-label-context'] };\n }\n let penalty = 0;\n const reasons = [];\n const addPenalty = (amount, reason) => {\n if (reasons.includes(reason))\n return;\n penalty += amount;\n reasons.push(reason);\n };\n if (/nth-child|nth-of-type/i.test(selector))\n addPenalty(0.22, 'nth-index-selector');\n const depth = selectorDepth(selector);\n if (depth >= 4) {\n addPenalty(0.14, 'deep-descendant-selector');\n }\n else if (depth >= 2) {\n addPenalty(0.05, 'descendant-selector');\n }\n if (selector.length >= 96) {\n addPenalty(0.12, 'very-long-selector');\n }\n else if (selector.length >= 56) {\n addPenalty(0.06, 'long-selector');\n }\n if (category === 'structural')\n addPenalty(0.16, 'structural-selector');\n if (category === 'parent-scoped' && depth >= 3)\n addPenalty(0.04, 'deep-parent-scope');\n if (/\\.(?:container|wrapper|row|item|content|layout|shell|panel|section|body|header|footer)\\b/i.test(selector)) {\n addPenalty(0.08, 'generic-shell-class');\n }\n return { penalty: Math.min(0.4, penalty), reasons };\n}\nfunction computeEvaluationFinalScore(params) {\n return Math.max(0, Math.min(1.5, params.baselineScore));\n}\nfunction equivalentRenderingPriority(engine) {\n switch (engine) {\n case 'testid':\n return 1;\n case 'placeholder':\n return 2;\n case 'text':\n return 3;\n default:\n return 10;\n }\n}\nfunction sortPreferredRenderings(renderings) {\n return [...renderings].sort((left, right) => {\n const leftPriority = equivalentRenderingPriority(left.engine);\n const rightPriority = equivalentRenderingPriority(right.engine);\n if (leftPriority !== rightPriority)\n return leftPriority - rightPriority;\n return left.locator.localeCompare(right.locator);\n });\n}\nfunction buildPreferredEquivalentRenderings(params) {\n if (params.validation.effectiveMatchCount !== 1 || params.validation.reason !== 'unique-visible') {\n return [];\n }\n if (params.selectorSpec.engine === 'scoped' ||\n params.selectorSpec.engine === 'bounded-field' ||\n params.selectorSpec.engine === 'label-context' ||\n params.selectorSpec.engine === 'trigger-context') {\n return [];\n }\n const selector = params.selectorSpec.selector.trim();\n const renderings = [];\n const addRendering = (rendering) => {\n if (renderings.some(existing => existing.engine === rendering.engine && existing.locator === rendering.locator)) {\n return;\n }\n renderings.push(rendering);\n };\n const exactTestId = (0, text_matching_1.extractAttributeValue)(selector, 'data-testid');\n const hasAlternateTestIdAttr = /\\[data-cy=(?:\"[^\"]+\"|'[^']+')\\]/i.test(selector) ||\n /\\[data-qa=(?:\"[^\"]+\"|'[^']+')\\]/i.test(selector);\n if (params.category === 'testid' && exactTestId && !hasAlternateTestIdAttr) {\n addRendering({\n engine: 'testid',\n locator: `getByTestId(${JSON.stringify(exactTestId)})`,\n proofLevel: 'proven_equivalent',\n proofSource: 'attribute-equivalence',\n sourceSelector: selector,\n sourceEngine: params.selectorSpec.engine,\n });\n }\n const exactPlaceholder = (0, text_matching_1.extractAttributeValue)(selector, 'placeholder');\n const resolvedTagName = params.resolvedElement?.tagName?.toLowerCase() ?? null;\n const explicitPlaceholderTagMatch = selector.match(/^\\s*([a-z0-9_-]+)\\s*\\[placeholder=/i);\n const explicitPlaceholderTag = explicitPlaceholderTagMatch?.[1]?.toLowerCase() ?? null;\n const placeholderTagFamily = explicitPlaceholderTag ?? resolvedTagName;\n if (params.category === 'placeholder' &&\n exactPlaceholder &&\n (placeholderTagFamily === 'input' || placeholderTagFamily === 'textarea')) {\n addRendering({\n engine: 'placeholder',\n locator: `getByPlaceholder(${JSON.stringify(exactPlaceholder)}, { exact: true })`,\n proofLevel: 'proven_equivalent',\n proofSource: 'attribute-equivalence',\n sourceSelector: selector,\n sourceEngine: params.selectorSpec.engine,\n });\n }\n if (params.category === 'text' &&\n selector.startsWith('text=') &&\n !/:has-text\\(/i.test(selector)) {\n const matchedText = params.resolvedElement\n ? (0, text_matching_1.textFromElement)(params.resolvedElement)?.trim()\n : '';\n if (matchedText) {\n addRendering({\n engine: 'text',\n locator: `getByText(${JSON.stringify(matchedText)}, { exact: true })`,\n proofLevel: 'proven_equivalent',\n proofSource: 'text-equivalence',\n sourceSelector: selector,\n sourceEngine: params.selectorSpec.engine,\n });\n }\n }\n return sortPreferredRenderings(renderings).slice(0, 3);\n}\nfunction buildCandidateSelectorEvaluation(params) {\n const category = params.candidate.categoryOverride\n ?? (0, selector_evaluation_1.classifySelectorCategory)(params.candidate.selector, params.source ?? params.candidate.source);\n const proofLevel = params.proofLevel ?? (params.candidate.engine === 'bounded-field' &&\n params.candidate.boundedField?.source === 'recorded-bounded-field' &&\n !params.validation.resolvedElement &&\n params.validation.effectiveMatchCount === 1\n ? 'recorded'\n : (params.validation.effectiveMatchCount === 1 ? 'snapshot_validated' : 'unvalidated'));\n const selectorSpec = params.candidate.engine === 'bounded-field' && params.candidate.boundedField\n ? (0, selector_spec_2.buildBoundedFieldSelectorSpec)({\n selector: params.candidate.selector,\n boundedField: params.candidate.boundedField,\n source: params.source ?? 'resolver',\n proofLevel,\n rank: params.candidate.rank,\n confidence: params.validation.confidenceScore ?? params.baselineScore,\n warningCodes: params.warningCodes,\n rejectReason: params.semanticRejectReason ?? undefined,\n })\n : (0, selector_spec_1.buildSelectorSpec)({\n selector: params.candidate.selector,\n engine: params.candidate.engine,\n source: params.source ?? 'resolver',\n proofLevel,\n labelContext: params.candidate.labelContext,\n triggerContext: params.candidate.triggerContext,\n rank: params.candidate.rank,\n confidence: params.validation.confidenceScore ?? params.baselineScore,\n warningCodes: params.warningCodes,\n rejectReason: params.semanticRejectReason ?? undefined,\n });\n let proofScore = (0, selector_evaluation_1.proofScoreForValidation)(params.validation);\n if (proofLevel === 'recorded') {\n proofScore = Math.max(proofScore, 1.0);\n }\n const brittleness = computeBrittlenessPenalty(params.candidate.selector, category);\n const entropyPenalty = Math.max(0, -(params.idEntropyScore ?? 0)) + Math.max(0, -(params.classEntropyScore ?? 0));\n const stabilityScore = Math.max(0, Math.min(1, (0, selector_evaluation_1.stabilityBaseScoreForCategory)(category) - (brittleness.penalty * 0.45) - (entropyPenalty * 0.35)));\n const semanticScore = Math.max(0, Math.min(1, params.semanticScore ??\n Math.max(params.validation.confidenceScore ?? 0, params.validation.effectiveMatchCount === 1 ? 0.5 : 0.2)));\n const reasons = Array.from(new Set([\n `category:${category}`,\n `proof:${proofLevel}`,\n ...(params.semanticReasons ?? []),\n ...(params.idPenaltyReason ?? []).map(reason => `id:${reason}`),\n ...(params.classPenaltyReason ?? []).map(reason => `class:${reason}`),\n ...brittleness.reasons,\n ]));\n const preferredRenderings = buildPreferredEquivalentRenderings({\n selectorSpec,\n category,\n validation: params.validation,\n resolvedElement: params.validation.resolvedElement,\n });\n return (0, selector_evaluation_1.summarizeSelectorEvaluation)(selectorSpec, {\n category,\n validation: {\n valid: params.validation.reason !== 'invalid-selector' && params.validation.visibleMatchCount > 0,\n matchCount: params.validation.matchCount ?? params.validation.totalMatchCount,\n visibleMatchCount: params.validation.visibleMatchCount,\n uniqueVisible: params.validation.effectiveMatchCount === 1,\n invalidReason: params.validation.reason === 'invalid-selector' ? 'invalid-selector' : undefined,\n },\n proofSource: params.proofSource ?? (0, selector_evaluation_1.mapSelectorProofSource)({ source: params.source ?? 'resolver', proofLevel }),\n snapshotTargetEvidence: params.snapshotTargetEvidence,\n proofScore,\n stabilityScore,\n semanticScore,\n brittlenessPenalty: brittleness.penalty,\n entropyPenalty,\n finalScore: computeEvaluationFinalScore({\n baselineScore: params.baselineScore,\n proofScore,\n stabilityScore,\n semanticScore,\n brittlenessPenalty: brittleness.penalty,\n entropyPenalty,\n }),\n reasons,\n warningCodes: params.warningCodes,\n rejectReason: params.semanticRejectReason,\n preferredRenderings,\n });\n}\nfunction computeBaselineCandidateScore(candidate, validation, step, snapshot) {\n let score = rankScore(candidate.rank);\n if (validation.effectiveMatchCount === 1)\n score += 0.3;\n const excerpt = ((0, text_matching_1.extractTextExcerpt)(step) || '').toLowerCase();\n if (excerpt && candidate.selector.toLowerCase().includes(excerpt))\n score += 0.08;\n const tagName = step.fingerprint?.tagName?.toLowerCase();\n if (tagName && candidate.selector.toLowerCase().startsWith(tagName))\n score += 0.06;\n if (candidate.source === 'parent-scope')\n score += 0.04;\n if (candidate.source === 'text')\n score += 0.02;\n if (isStructuredContextSource(candidate.source))\n score += 0.16;\n score += (validation.confidenceScore ?? 0) * 0.25;\n if (!isStructuredContextSource(candidate.source)) {\n score -= complexityPenalty(candidate.selector);\n score -= volatilityPenalty(candidate.selector);\n }\n if (validation.reason === 'resolved-multi-match')\n score -= 0.08;\n if (validation.reason === 'too-broad')\n score -= 0.12;\n if (validation.ambiguityReason)\n score -= 0.22;\n const idEntropy = computeIdEntropy(step, candidate, validation, snapshot);\n score += idEntropy.adjustment;\n if (candidateUsesIdSelector(candidate)) {\n score = Math.max(score, 0.52);\n }\n const classEntropy = computeClassEntropy(step, candidate, validation, snapshot);\n score += classEntropy.adjustment;\n if (candidate.source === 'parent-scope' &&\n candidateUsesClassSelector(candidate) &&\n step.action === 'input' &&\n /\\.[A-Za-z0-9:_-]*(?:date|calendar)[A-Za-z0-9:_-]*/i.test(candidate.selector)) {\n score += 0.03;\n }\n if (candidateUsesClassSelector(candidate)) {\n score = Math.max(score, 0.44);\n }\n if (isStructuredContextSource(candidate.source)) {\n score = Math.max(score, 0.86);\n }\n return Math.max(0, Math.min(1.5, score));\n}\nfunction scoreCandidate(candidate, validation, step, snapshot) {\n const baselineScore = computeBaselineCandidateScore(candidate, validation, step, snapshot);\n const idEntropy = computeIdEntropy(step, candidate, validation, snapshot);\n const classEntropy = computeClassEntropy(step, candidate, validation, snapshot);\n const selectorEvaluation = buildCandidateSelectorEvaluation({\n step,\n candidate,\n validation,\n baselineScore,\n snapshotTargetEvidence: true,\n idEntropyScore: candidateUsesIdSelector(candidate) ? idEntropy.score : undefined,\n idPenaltyReason: candidateUsesIdSelector(candidate) ? idEntropy.reasons : undefined,\n classEntropyScore: candidateUsesClassSelector(candidate) ? classEntropy.score : undefined,\n classPenaltyReason: candidateUsesClassSelector(candidate) ? classEntropy.reasons : undefined,\n });\n return selectorEvaluation.scoring.finalScore;\n}\nfunction compareCandidates(left, right) {\n const leftEvaluation = left.selectorEvaluation;\n const rightEvaluation = right.selectorEvaluation;\n if (leftEvaluation &&\n rightEvaluation &&\n rightEvaluation.scoring.proofScore !== leftEvaluation.scoring.proofScore) {\n return rightEvaluation.scoring.proofScore - leftEvaluation.scoring.proofScore;\n }\n if (right.score !== left.score)\n return right.score - left.score;\n if (leftEvaluation &&\n rightEvaluation &&\n rightEvaluation.scoring.stabilityScore !== leftEvaluation.scoring.stabilityScore) {\n return rightEvaluation.scoring.stabilityScore - leftEvaluation.scoring.stabilityScore;\n }\n if (leftEvaluation &&\n rightEvaluation &&\n rightEvaluation.scoring.semanticScore !== leftEvaluation.scoring.semanticScore) {\n return rightEvaluation.scoring.semanticScore - leftEvaluation.scoring.semanticScore;\n }\n if (right.validation.effectiveMatchCount !== left.validation.effectiveMatchCount) {\n return right.validation.effectiveMatchCount - left.validation.effectiveMatchCount;\n }\n if ((right.validation.confidenceScore ?? 0) !== (left.validation.confidenceScore ?? 0)) {\n return (right.validation.confidenceScore ?? 0) - (left.validation.confidenceScore ?? 0);\n }\n return left.candidate.rank - right.candidate.rank;\n}\nfunction getOriginalSelectorSpec(step) {\n if (step.selectorSpec)\n return step.selectorSpec;\n return (0, selector_spec_1.buildSelectorSpec)({\n selector: step.selector,\n selectorPriority: step.selectorPriority,\n source: 'interceptor',\n proofLevel: 'recorded',\n rank: step.selectorRank,\n });\n}\nfunction buildResolvedSelectorSpec(params) {\n if (params.engine === 'bounded-field' && params.boundedField) {\n return (0, selector_spec_2.buildBoundedFieldSelectorSpec)({\n selector: params.selector,\n boundedField: params.boundedField,\n source: params.source,\n proofLevel: params.proofLevel,\n rank: params.rank,\n confidence: params.confidence,\n rejectReason: params.rejectReason,\n warningCodes: params.warningCodes,\n });\n }\n return (0, selector_spec_1.buildSelectorSpec)({\n selector: params.selector,\n selectorPriority: params.source === 'interceptor' ? params.step.selectorPriority : undefined,\n engine: params.engine,\n source: params.source,\n proofLevel: params.proofLevel,\n labelContext: params.labelContext,\n triggerContext: params.triggerContext,\n rank: params.rank,\n confidence: params.confidence,\n rejectReason: params.rejectReason,\n warningCodes: params.warningCodes,\n });\n}\nfunction buildResolutionSelectorEvaluation(params) {\n if (params.candidateEvaluation) {\n const mergedSelectorSpec = {\n ...params.candidateEvaluation.selectorSpec,\n ...params.selectorSpec,\n };\n return (0, selector_evaluation_1.summarizeSelectorEvaluation)(mergedSelectorSpec, {\n category: params.candidateEvaluation.category,\n validation: params.candidateEvaluation.validation,\n proofSource: (0, selector_evaluation_1.mapSelectorProofSource)({\n source: params.selectorSpec.source,\n proofLevel: params.selectorSpec.proofLevel,\n }),\n snapshotTargetEvidence: params.snapshotTargetEvidence,\n proofScore: params.candidateEvaluation.scoring.proofScore,\n stabilityScore: params.candidateEvaluation.scoring.stabilityScore,\n semanticScore: params.metadata.semanticCompatibilityScore ?? params.candidateEvaluation.scoring.semanticScore,\n brittlenessPenalty: params.candidateEvaluation.scoring.brittlenessPenalty,\n entropyPenalty: params.candidateEvaluation.scoring.entropyPenalty,\n finalScore: params.metadata.bestScore || params.candidateEvaluation.scoring.finalScore,\n reasons: params.candidateEvaluation.reasons,\n warningCodes: params.metadata.warningCodes,\n rejectReason: params.metadata.rejectReason,\n preferredRenderings: params.candidateEvaluation.preferredRenderings,\n });\n }\n const category = params.selectorSpec.engine === 'label-context' || params.selectorSpec.engine === 'trigger-context'\n ? 'label-context'\n : params.selectorSpec.engine === 'bounded-field'\n ? 'bounded-field'\n : (0, selector_evaluation_1.classifySelectorCategory)(params.selectorSpec.selector, params.selectorSpec.source);\n const proofSource = (0, selector_evaluation_1.mapSelectorProofSource)({\n source: params.selectorSpec.source,\n proofLevel: params.selectorSpec.proofLevel,\n });\n const fallbackValidation = {\n valid: params.selectorSpec.proofLevel !== 'blocked' && params.selectorSpec.proofLevel !== 'unvalidated',\n matchCount: params.metadata.matchCount,\n visibleMatchCount: params.metadata.effectiveMatchCount,\n uniqueVisible: params.metadata.effectiveMatchCount === 1,\n invalidReason: params.metadata.rejectReason ?? undefined,\n };\n const preferredRenderings = params.validation\n ? buildPreferredEquivalentRenderings({\n selectorSpec: params.selectorSpec,\n category,\n validation: params.validation,\n resolvedElement: params.validation.resolvedElement,\n })\n : [];\n const proofScore = params.selectorSpec.proofLevel === 'recorded'\n ? 0.6\n : params.selectorSpec.proofLevel === 'blocked' || params.selectorSpec.proofLevel === 'unvalidated'\n ? 0\n : 1;\n const stabilityScore = (0, selector_evaluation_1.stabilityBaseScoreForCategory)(category);\n return (0, selector_evaluation_1.summarizeSelectorEvaluation)(params.selectorSpec, {\n category,\n validation: fallbackValidation,\n proofSource,\n snapshotTargetEvidence: params.snapshotTargetEvidence,\n proofScore,\n stabilityScore,\n semanticScore: params.metadata.semanticCompatibilityScore ?? (fallbackValidation.valid ? 0.5 : 0),\n brittlenessPenalty: complexityPenalty(params.selectorSpec.selector) + volatilityPenalty(params.selectorSpec.selector),\n entropyPenalty: Math.max(0, -(params.metadata.idEntropyScore ?? 0)) + Math.max(0, -(params.metadata.classEntropyScore ?? 0)),\n finalScore: params.metadata.bestScore,\n reasons: [\n `category:${category}`,\n `proof:${params.selectorSpec.proofLevel}`,\n ...(params.metadata.semanticCompatibilityReasons ?? []),\n ],\n warningCodes: params.metadata.warningCodes,\n rejectReason: params.metadata.rejectReason,\n preferredRenderings,\n });\n}\nfunction getOriginalTriggerSelectorSpec(step) {\n if (step.triggerSelectorSpec)\n return step.triggerSelectorSpec;\n const selector = (step.triggerSelector || '').trim();\n if (!selector)\n return undefined;\n return (0, selector_spec_1.buildSelectorSpec)({\n selector,\n selectorPriority: step.triggerSelectorPriority,\n source: 'interceptor',\n proofLevel: 'recorded',\n });\n}\nfunction resolveTriggerContextForStep(step, snapshot, snapshotSelection) {\n if (!snapshot || !isSelectLikeTriggerStep(step))\n return {};\n const triggerSelector = (step.triggerSelector || '').trim();\n if (!triggerSelector)\n return {};\n const labelText = getTriggerContextLabel(step);\n const originalSpec = getOriginalTriggerSelectorSpec(step);\n const triggerMatches = findVisibleElementsForSelector(triggerSelector, snapshot);\n if (triggerMatches.matches.length === 1) {\n return {\n triggerResolvedSelector: triggerSelector,\n triggerResolvedSelectorSpec: originalSpec,\n triggerContextLabel: labelText,\n triggerWarningCodes: [],\n };\n }\n const warningCodes = new Set();\n const blockedReason = triggerMatches.matches.length > 1\n ? 'target_selector_ambiguous'\n : (triggerMatches.blockedReason ?? 'label_structure_missing');\n if (!labelText) {\n warningCodes.add('custom-control-trigger-target-binding-ambiguous');\n return {\n triggerContextRenderStatus: 'blocked-unsafe-render',\n triggerContextRenderReason: blockedReason,\n triggerWarningCodes: Array.from(warningCodes),\n };\n }\n const candidates = buildTriggerContextCandidates(step, snapshot, snapshotSelection);\n const boundedCandidates = (0, bounded_field_1.buildBoundedFieldTriggerCandidates)({ step, snapshot, snapshotSelection });\n const candidate = boundedCandidates[0] ?? candidates[0];\n if (!candidate) {\n warningCodes.add('custom-control-trigger-target-binding-ambiguous');\n return {\n triggerContextLabel: labelText,\n triggerContextRenderStatus: 'blocked-unsafe-render',\n triggerContextRenderReason: blockedReason,\n triggerWarningCodes: Array.from(warningCodes),\n };\n }\n const validation = validateCandidate(candidate, snapshot, buildTriggerResolutionStep(step));\n const boundedField = candidate.boundedField;\n const isRecordedValid = (boundedField && boundedField.source === 'recorded-bounded-field') ||\n (candidate.source === 'interceptor' && candidate.triggerContext) ||\n (candidate.source === 'trigger-context');\n if ((validation.reason !== 'unique-visible' && !isRecordedValid) ||\n validation.effectiveMatchCount !== 1 ||\n (!candidate.triggerContext && !boundedField)) {\n warningCodes.add('custom-control-trigger-target-binding-ambiguous');\n return {\n triggerContextLabel: labelText,\n triggerContextRenderStatus: 'blocked-unsafe-render',\n triggerContextRenderReason: validation.reason === 'non-unique'\n ? 'multiple_input_like_targets'\n : 'target_not_bound_to_label_container',\n triggerWarningCodes: Array.from(warningCodes),\n };\n }\n const renderStatus = candidate.triggerContext?.renderStatus\n ?? boundedField?.renderStatus\n ?? 'proof-only-no-clean-render';\n if (renderStatus === 'proven-structural-fallback') {\n warningCodes.add('custom-control-trigger-structural-fallback');\n }\n if (renderStatus === 'proof-only-no-clean-render') {\n warningCodes.add('custom-control-trigger-proof-only');\n }\n const resolvedSelectorSpec = buildResolvedSelectorSpec({\n step,\n selector: candidate.selector,\n source: 'resolver',\n proofLevel: 'semantic_validated',\n engine: candidate.engine === 'bounded-field' ? 'bounded-field' : 'trigger-context',\n boundedField: boundedField\n ? {\n ...boundedField,\n warningCodes: Array.from(new Set([\n ...(boundedField.warningCodes ?? []),\n ...Array.from(warningCodes),\n ])),\n }\n : undefined,\n triggerContext: candidate.triggerContext\n ? {\n ...candidate.triggerContext,\n warningCodes: Array.from(new Set([\n ...(candidate.triggerContext.warningCodes ?? []),\n ...Array.from(warningCodes),\n ])),\n }\n : undefined,\n rank: candidate.rank,\n confidence: validation.confidenceScore ?? 0.88,\n warningCodes: Array.from(warningCodes),\n });\n return {\n triggerResolvedSelector: candidate.selector,\n triggerResolvedSelectorSpec: resolvedSelectorSpec,\n triggerContextLabel: boundedField?.labelText ?? labelText,\n triggerContextRenderStatus: renderStatus,\n triggerContextRenderReason: candidate.triggerContext?.renderReason ?? boundedField?.renderReason ?? null,\n triggerBoundedContainerSummary: candidate.triggerContext?.boundedContainerSummary ?? boundedField?.boundedContainerSummary ?? null,\n triggerStructuralFallbackLocator: candidate.triggerContext?.structuralFallbackLocator ?? boundedField?.structuralFallbackLocator ?? null,\n triggerWarningCodes: Array.from(new Set([\n ...Array.from(warningCodes),\n ...(candidate.triggerContext?.warningCodes ?? []),\n ...(boundedField?.warningCodes ?? []),\n ])),\n };\n}\nfunction deriveDeterministicResolution(step, snapshot, config, ctx, snapshotSource, snapshotSelection, evaluatedCandidates) {\n const originalSelectorSpec = getOriginalSelectorSpec(step);\n const baseMetadata = {\n resolvedSelector: step.selector,\n resolvedBy: 'unresolved',\n bestScore: 0,\n effectiveMatchCount: 0,\n snapshotSource: snapshotSource ?? (snapshot ? 'latest' : 'unavailable'),\n validationMethod: 'css-query-static-visibility-element-ranking-v1',\n llmAttempted: false,\n llmAccepted: false,\n llmAlternative: null,\n llmCandidatesReturned: undefined,\n llmCandidatesTried: undefined,\n llmAcceptedRank: null,\n llmRejectedCandidates: undefined,\n llmResponseFormat: undefined,\n llmRetryTriggered: false,\n llmRetrySelector: null,\n llmRetryRejectReason: null,\n llmRetryAccepted: false,\n llmRetryTimeoutMs: undefined,\n llmRetryStatus: 'not-eligible',\n rejectReason: null,\n semanticRejectReason: null,\n warningCodes: [],\n resolverVersion: 1,\n temporalClass: snapshotSelection?.temporalClass,\n selectionReason: snapshotSelection?.reason ?? null,\n snapshotSelection,\n evaluatedCandidates,\n snapshotTargetEvidence: snapshotSelection?.snapshotTargetEvidence,\n snapshotTargetEvidenceReason: snapshotSelection?.snapshotTargetEvidenceReason ?? null,\n semanticCompatibilityScore: undefined,\n semanticCompatibilityReasons: undefined,\n idEntropyScore: undefined,\n idPenaltyReason: undefined,\n classEntropyScore: undefined,\n classPenaltyReason: undefined,\n };\n if (config.enableCapturedCandidateShadowEvaluation) {\n try {\n baseMetadata.shadowEvaluation = computeCapturedCandidateShadowEvaluation(step, snapshot);\n }\n catch (error) {\n baseMetadata.shadowEvaluation = {\n status: 'failed',\n candidateCount: step.fingerprint?.selectorCandidates?.length ?? 0,\n convertedCandidateCount: 0,\n uniqueCandidateCount: 0,\n semanticallySafeCandidateCount: 0,\n failureReason: error instanceof Error ? error.message : String(error),\n };\n }\n }\n if (!snapshot) {\n baseMetadata.warningCodes.push('snapshot-unavailable');\n if (!ctx.snapshotEngineAvailable) {\n baseMetadata.warningCodes.push('snapshot-engine-unavailable');\n }\n const resolvedSelectorSpec = buildResolvedSelectorSpec({\n step,\n selector: step.selector,\n source: 'resolver',\n proofLevel: 'unvalidated',\n rank: step.selectorRank,\n confidence: 0,\n warningCodes: baseMetadata.warningCodes,\n });\n const metadata = {\n ...baseMetadata,\n };\n metadata.selectorEvaluation = buildResolutionSelectorEvaluation({\n step,\n selectorSpec: resolvedSelectorSpec,\n metadata,\n snapshotTargetEvidence: snapshotSelection?.snapshotTargetEvidence,\n });\n return {\n step,\n snapshot: null,\n selectorSpec: originalSelectorSpec,\n resolvedSelectorSpec,\n resolvedSelector: step.selector,\n metadata,\n llmEligible: false,\n };\n }\n if (!step.selector) {\n baseMetadata.warningCodes.push('missing-original-selector');\n const resolvedSelectorSpec = buildResolvedSelectorSpec({\n step,\n selector: step.selector,\n source: 'resolver',\n proofLevel: 'unvalidated',\n rank: step.selectorRank,\n confidence: 0,\n warningCodes: baseMetadata.warningCodes,\n });\n const metadata = {\n ...baseMetadata,\n };\n metadata.selectorEvaluation = buildResolutionSelectorEvaluation({\n step,\n selectorSpec: resolvedSelectorSpec,\n metadata,\n snapshotTargetEvidence: snapshotSelection?.snapshotTargetEvidence,\n });\n return {\n step,\n snapshot,\n selectorSpec: originalSelectorSpec,\n resolvedSelectorSpec,\n resolvedSelector: step.selector,\n metadata,\n llmEligible: false,\n };\n }\n const triggerResolution = resolveTriggerContextForStep(step, snapshot, snapshotSelection);\n const originalValidation = validateCandidate(step.selector, snapshot, step);\n if (shouldTrustOriginalOnSnapshotMiss(step, originalValidation)) {\n const rank = getSelectorRank(step.selector, step.selectorPriority, step.selectorRank);\n const score = Math.max(rankScore(rank), 0.65);\n const resolvedSelectorSpec = buildResolvedSelectorSpec({\n step,\n selector: step.selector,\n source: 'interceptor',\n proofLevel: 'recorded',\n rank,\n confidence: originalValidation.confidenceScore ?? score,\n warningCodes: [...baseMetadata.warningCodes, 'trusted-original-snapshot-miss'],\n });\n const metadata = {\n ...baseMetadata,\n ...triggerResolution,\n resolvedSelector: step.selector,\n resolvedBy: 'kept-original',\n bestScore: score,\n effectiveMatchCount: originalValidation.effectiveMatchCount,\n matchCount: originalValidation.matchCount ?? originalValidation.visibleMatchCount,\n confidenceScore: originalValidation.confidenceScore ?? score,\n ambiguityReason: originalValidation.ambiguityReason ?? null,\n warningCodes: [...baseMetadata.warningCodes, 'trusted-original-snapshot-miss'],\n };\n metadata.selectorEvaluation = buildResolutionSelectorEvaluation({\n step,\n selectorSpec: resolvedSelectorSpec,\n metadata,\n snapshotTargetEvidence: snapshotSelection?.snapshotTargetEvidence,\n validation: originalValidation,\n });\n return {\n step,\n snapshot,\n selectorSpec: originalSelectorSpec,\n resolvedSelectorSpec,\n resolvedSelector: step.selector,\n metadata,\n llmEligible: false,\n };\n }\n if (shouldKeepOriginal(step, snapshot, config, snapshotSelection)) {\n const rank = getSelectorRank(step.selector, step.selectorPriority, step.selectorRank);\n const score = rankScore(rank) + 0.3;\n const resolvedSelectorSpec = buildResolvedSelectorSpec({\n step,\n selector: step.selector,\n source: 'interceptor',\n proofLevel: 'snapshot_validated',\n rank,\n confidence: originalValidation.confidenceScore ?? score,\n });\n const metadata = {\n ...baseMetadata,\n ...triggerResolution,\n resolvedSelector: step.selector,\n resolvedBy: 'kept-original',\n bestScore: score,\n effectiveMatchCount: originalValidation.effectiveMatchCount,\n matchCount: originalValidation.matchCount ?? originalValidation.visibleMatchCount,\n confidenceScore: originalValidation.confidenceScore ?? score,\n ambiguityReason: originalValidation.ambiguityReason ?? null,\n };\n metadata.selectorEvaluation = buildResolutionSelectorEvaluation({\n step,\n selectorSpec: resolvedSelectorSpec,\n metadata,\n snapshotTargetEvidence: snapshotSelection?.snapshotTargetEvidence,\n validation: originalValidation,\n });\n return {\n step,\n snapshot,\n selectorSpec: originalSelectorSpec,\n resolvedSelectorSpec,\n resolvedSelector: step.selector,\n metadata,\n llmEligible: false,\n };\n }\n if (snapshotSelection?.temporalClass !== 'outcome_state' &&\n snapshotSelection?.snapshotTargetEvidence === false) {\n const resolvedSelectorSpec = buildResolvedSelectorSpec({\n step,\n selector: step.selector,\n source: 'resolver',\n proofLevel: 'blocked',\n rank: step.selectorRank,\n confidence: originalValidation.confidenceScore ?? 0,\n rejectReason: 'snapshot_target_missing',\n warningCodes: [...baseMetadata.warningCodes, 'snapshot-target-missing'],\n });\n const metadata = {\n ...baseMetadata,\n ...triggerResolution,\n resolvedSelector: step.selector,\n resolvedBy: 'blocked-snapshot-target-missing',\n effectiveMatchCount: originalValidation.effectiveMatchCount,\n matchCount: originalValidation.matchCount ?? originalValidation.visibleMatchCount,\n confidenceScore: originalValidation.confidenceScore ?? 0,\n ambiguityReason: originalValidation.ambiguityReason ?? null,\n rejectReason: 'snapshot_target_missing',\n semanticRejectReason: 'snapshot_target_missing',\n semanticCompatibilityScore: 0,\n semanticCompatibilityReasons: ['snapshot_target_missing'],\n warningCodes: [...baseMetadata.warningCodes, 'snapshot-target-missing'],\n };\n metadata.selectorEvaluation = buildResolutionSelectorEvaluation({\n step,\n selectorSpec: resolvedSelectorSpec,\n metadata,\n snapshotTargetEvidence: snapshotSelection?.snapshotTargetEvidence,\n });\n return {\n step,\n snapshot,\n selectorSpec: originalSelectorSpec,\n resolvedSelectorSpec,\n resolvedSelector: step.selector,\n metadata,\n llmEligible: false,\n };\n }\n const candidateScores = generateCandidates(step, snapshot, snapshotSelection).map(candidate => {\n const validation = validateCandidate(candidate, snapshot, step);\n const idEntropy = computeIdEntropy(step, candidate, validation, snapshot);\n const usesId = candidateUsesIdSelector(candidate);\n const classEntropy = computeClassEntropy(step, candidate, validation, snapshot);\n const usesClass = candidateUsesClassSelector(candidate);\n const baselineScore = computeBaselineCandidateScore(candidate, validation, step, snapshot);\n const selectorEvaluation = buildCandidateSelectorEvaluation({\n step,\n candidate,\n validation,\n baselineScore,\n snapshotTargetEvidence: snapshotSelection?.snapshotTargetEvidence,\n idEntropyScore: usesId ? idEntropy.score : undefined,\n idPenaltyReason: usesId ? idEntropy.reasons : undefined,\n classEntropyScore: usesClass ? classEntropy.score : undefined,\n classPenaltyReason: usesClass ? classEntropy.reasons : undefined,\n });\n return {\n candidate,\n validation,\n score: selectorEvaluation.scoring.finalScore,\n selectorEvaluation,\n idEntropyScore: usesId ? idEntropy.score : undefined,\n idPenaltyReason: usesId ? idEntropy.reasons : undefined,\n classEntropyScore: usesClass ? classEntropy.score : undefined,\n classPenaltyReason: usesClass ? classEntropy.reasons : undefined,\n };\n });\n const uniqueCandidates = candidateScores\n .filter(candidate => candidate.validation.effectiveMatchCount === 1)\n .sort(compareCandidates);\n const semanticEvaluations = uniqueCandidates.map(candidate => {\n const semantic = evaluateSemanticReject(step, candidate, snapshot);\n return {\n candidate,\n semantic,\n selectorEvaluation: buildCandidateSelectorEvaluation({\n step,\n candidate: candidate.candidate,\n validation: candidate.validation,\n baselineScore: candidate.score,\n snapshotTargetEvidence: snapshotSelection?.snapshotTargetEvidence,\n semanticScore: semantic.score,\n semanticReasons: semantic.reasons,\n semanticRejectReason: semantic.rejectReason,\n proofLevel: semantic.rejectReason === null ? 'semantic_validated' : 'unvalidated',\n proofSource: semantic.rejectReason === null ? 'semantic' : 'none',\n idEntropyScore: candidate.idEntropyScore,\n idPenaltyReason: candidate.idPenaltyReason,\n classEntropyScore: candidate.classEntropyScore,\n classPenaltyReason: candidate.classPenaltyReason,\n warningCodes: candidate.selectorEvaluation?.warningCodes,\n }),\n };\n });\n const rejectedCandidates = semanticEvaluations\n .filter(evaluation => evaluation.semantic.rejectReason !== null)\n .map(evaluation => ({\n selector: evaluation.candidate.candidate.selector,\n reason: evaluation.semantic.rejectReason,\n }));\n const semanticallySafeCandidates = semanticEvaluations\n .filter(evaluation => evaluation.semantic.rejectReason === null)\n .sort(compareSemanticCandidates);\n const highScoreCandidates = semanticallySafeCandidates\n .filter(evaluation => evaluation.candidate.candidate.selector !== step.selector)\n .filter(evaluation => evaluation.candidate.score >= config.resolverMinScore);\n const winner = highScoreCandidates[0];\n const lowScoreFallbackCandidates = semanticallySafeCandidates\n .map(evaluation => evaluation.candidate)\n .filter(candidate => candidate.candidate.selector !== step.selector &&\n !shouldBlockGenericShellOverride(step.selector, candidate.candidate.selector));\n const lowScoreFallback = lowScoreFallbackCandidates.find(candidate => (0, element_ranking_1.isLowScoreFallbackCandidateSafe)(step, snapshot, candidate, config));\n const hadRejectedLowScoreFallback = lowScoreFallbackCandidates.length > 0 && !lowScoreFallback;\n if (winner && shouldBlockGenericShellOverride(step.selector, winner.candidate.candidate.selector)) {\n const resolvedSelectorSpec = buildResolvedSelectorSpec({\n step,\n selector: step.selector,\n source: 'resolver',\n proofLevel: 'unvalidated',\n rank: step.selectorRank,\n confidence: originalValidation.confidenceScore ?? 0,\n warningCodes: [...baseMetadata.warningCodes, 'blocked-generic-shell-override'],\n });\n const metadata = {\n ...baseMetadata,\n ...triggerResolution,\n resolvedSelector: step.selector,\n effectiveMatchCount: originalValidation.effectiveMatchCount,\n matchCount: originalValidation.matchCount ?? originalValidation.visibleMatchCount,\n confidenceScore: originalValidation.confidenceScore ?? 0,\n ambiguityReason: originalValidation.ambiguityReason ?? null,\n warningCodes: [...baseMetadata.warningCodes, 'blocked-generic-shell-override'],\n };\n metadata.selectorEvaluation = buildResolutionSelectorEvaluation({\n step,\n selectorSpec: resolvedSelectorSpec,\n metadata,\n candidateEvaluation: winner.selectorEvaluation,\n snapshotTargetEvidence: snapshotSelection?.snapshotTargetEvidence,\n });\n return {\n step,\n snapshot,\n selectorSpec: originalSelectorSpec,\n resolvedSelector: step.selector,\n metadata,\n llmEligible: true,\n resolvedSelectorSpec,\n lowScoreFallback,\n };\n }\n if (!winner) {\n const bestAvailableCandidate = lowScoreFallbackCandidates[0] ?? uniqueCandidates[0];\n const boundedFieldRejectReason = (0, bounded_field_1.isWeakBoundedFieldInputCandidate)(step)\n ? (0, bounded_field_1.diagnoseBoundedFieldInputCandidate)({ step, snapshot, snapshotSelection }) ?? null\n : null;\n if (rejectedCandidates.length > 0) {\n const blockedEvaluation = semanticEvaluations.find(evaluation => evaluation.semantic.rejectReason !== null);\n baseMetadata.warningCodes.push('deterministic-semantic-reject');\n baseMetadata.rejectReason = rejectedCandidates[0]?.reason ?? 'control_family_mismatch';\n baseMetadata.semanticRejectReason = baseMetadata.rejectReason;\n baseMetadata.rejectedCandidates = rejectedCandidates;\n baseMetadata.semanticCompatibilityScore = blockedEvaluation?.semantic.score;\n baseMetadata.semanticCompatibilityReasons = blockedEvaluation?.semantic.reasons;\n baseMetadata.idEntropyScore = blockedEvaluation?.candidate.idEntropyScore;\n baseMetadata.idPenaltyReason = blockedEvaluation?.candidate.idPenaltyReason;\n baseMetadata.classEntropyScore = blockedEvaluation?.candidate.classEntropyScore;\n baseMetadata.classPenaltyReason = blockedEvaluation?.candidate.classPenaltyReason;\n baseMetadata.resolvedBy = 'blocked-semantic-mismatch';\n }\n if (rejectedCandidates.length === 0 && bestAvailableCandidate) {\n baseMetadata.idEntropyScore = bestAvailableCandidate.idEntropyScore;\n baseMetadata.idPenaltyReason = bestAvailableCandidate.idPenaltyReason;\n baseMetadata.classEntropyScore = bestAvailableCandidate.classEntropyScore;\n baseMetadata.classPenaltyReason = bestAvailableCandidate.classPenaltyReason;\n }\n if (uniqueCandidates.length === 0) {\n baseMetadata.warningCodes.push('no-unique-candidate');\n if (boundedFieldRejectReason) {\n baseMetadata.warningCodes.push(boundedFieldRejectReason);\n baseMetadata.rejectReason = baseMetadata.rejectReason ?? boundedFieldRejectReason;\n }\n }\n else if (rejectedCandidates.length === 0) {\n baseMetadata.warningCodes.push('deterministic-below-threshold');\n if (lowScoreFallback) {\n baseMetadata.warningCodes.push('deterministic-low-score-available');\n }\n else if (hadRejectedLowScoreFallback) {\n baseMetadata.warningCodes.push('deterministic-low-score-rejected');\n }\n }\n if (originalValidation.reason === 'invalid-selector') {\n baseMetadata.warningCodes.push('invalid-original-selector');\n }\n const resolvedSelectorSpec = buildResolvedSelectorSpec({\n step,\n selector: step.selector,\n source: 'resolver',\n proofLevel: baseMetadata.resolvedBy === 'blocked-semantic-mismatch' ? 'blocked' : 'unvalidated',\n rank: step.selectorRank,\n confidence: originalValidation.confidenceScore ?? 0,\n rejectReason: baseMetadata.rejectReason,\n warningCodes: baseMetadata.warningCodes,\n });\n const metadata = {\n ...baseMetadata,\n ...triggerResolution,\n effectiveMatchCount: originalValidation.effectiveMatchCount,\n matchCount: originalValidation.matchCount ?? originalValidation.visibleMatchCount,\n confidenceScore: originalValidation.confidenceScore ?? 0,\n ambiguityReason: originalValidation.ambiguityReason ?? null,\n rejectedCandidates: baseMetadata.rejectedCandidates,\n semanticCompatibilityScore: baseMetadata.semanticCompatibilityScore,\n semanticCompatibilityReasons: baseMetadata.semanticCompatibilityReasons,\n semanticRejectReason: baseMetadata.semanticRejectReason,\n idEntropyScore: baseMetadata.idEntropyScore,\n idPenaltyReason: baseMetadata.idPenaltyReason,\n classEntropyScore: baseMetadata.classEntropyScore,\n classPenaltyReason: baseMetadata.classPenaltyReason,\n };\n metadata.selectorEvaluation = buildResolutionSelectorEvaluation({\n step,\n selectorSpec: resolvedSelectorSpec,\n metadata,\n candidateEvaluation: bestAvailableCandidate?.selectorEvaluation,\n snapshotTargetEvidence: snapshotSelection?.snapshotTargetEvidence,\n });\n return {\n step,\n snapshot,\n selectorSpec: originalSelectorSpec,\n resolvedSelectorSpec,\n resolvedSelector: step.selector,\n metadata,\n llmEligible: true,\n lowScoreFallback,\n };\n }\n const resolvedSelectorSpec = buildResolvedSelectorSpec({\n step,\n selector: winner.candidate.candidate.selector,\n source: 'resolver',\n proofLevel: 'semantic_validated',\n engine: winner.candidate.candidate.engine,\n boundedField: winner.candidate.candidate.boundedField,\n labelContext: winner.candidate.candidate.labelContext,\n triggerContext: winner.candidate.candidate.triggerContext,\n rank: winner.candidate.candidate.rank,\n confidence: winner.candidate.validation.confidenceScore ?? winner.candidate.score,\n warningCodes: [\n ...baseMetadata.warningCodes,\n 'deterministic-override',\n ...(winner.candidate.candidate.source === 'bounded-field' ? ['bounded-field-recovery'] : []),\n ...(winner.candidate.candidate.source === 'label-context' ? ['label-context-recovery'] : []),\n ...(winner.candidate.candidate.source === 'trigger-context' ? ['custom-control-trigger-bounded-context-recovery'] : []),\n ...(winner.candidate.validation.ambiguityReason ? ['deterministic-dom-order-tiebreaker'] : []),\n ],\n });\n const metadata = {\n ...baseMetadata,\n ...triggerResolution,\n resolvedSelector: winner.candidate.candidate.selector,\n resolvedBy: 'deterministic-override',\n bestScore: winner.candidate.score,\n effectiveMatchCount: winner.candidate.validation.effectiveMatchCount,\n matchCount: winner.candidate.validation.matchCount ?? winner.candidate.validation.visibleMatchCount,\n confidenceScore: winner.candidate.validation.confidenceScore ?? winner.candidate.score,\n ambiguityReason: winner.candidate.validation.ambiguityReason ?? null,\n semanticCompatibilityScore: winner.semantic.score,\n semanticCompatibilityReasons: winner.semantic.reasons,\n idEntropyScore: winner.candidate.idEntropyScore,\n idPenaltyReason: winner.candidate.idPenaltyReason,\n classEntropyScore: winner.candidate.classEntropyScore,\n classPenaltyReason: winner.candidate.classPenaltyReason,\n rejectedCandidates: rejectedCandidates.length > 0 ? rejectedCandidates : undefined,\n warningCodes: [\n ...baseMetadata.warningCodes,\n 'deterministic-override',\n ...(winner.candidate.candidate.source === 'bounded-field' ? ['bounded-field-recovery'] : []),\n ...(winner.candidate.candidate.source === 'label-context' ? ['label-context-recovery'] : []),\n ...(winner.candidate.candidate.source === 'trigger-context' ? ['custom-control-trigger-bounded-context-recovery'] : []),\n ...(winner.candidate.validation.ambiguityReason ? ['deterministic-dom-order-tiebreaker'] : []),\n ],\n };\n metadata.selectorEvaluation = buildResolutionSelectorEvaluation({\n step,\n selectorSpec: resolvedSelectorSpec,\n metadata,\n candidateEvaluation: winner.selectorEvaluation,\n snapshotTargetEvidence: snapshotSelection?.snapshotTargetEvidence,\n });\n return {\n step,\n snapshot,\n selectorSpec: originalSelectorSpec,\n resolvedSelectorSpec,\n resolvedSelector: winner.candidate.candidate.selector,\n metadata,\n llmEligible: false,\n };\n}\nfunction buildLlmCap(totalSteps, config) {\n if (typeof config.maxLLMFallbackPerSession === 'number') {\n return Math.max(0, config.maxLLMFallbackPerSession);\n }\n return Math.max(2, Math.min(5, Math.ceil(totalSteps * 0.3)));\n}\nfunction withTimeout(promise, timeoutMs, label = 'Selector fallback') {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n reject(new Error(`${label} timed out after ${timeoutMs}ms`));\n }, timeoutMs);\n promise.then(value => {\n clearTimeout(timer);\n resolve(value);\n }, error => {\n clearTimeout(timer);\n reject(error);\n });\n });\n}\nfunction unwrapSingleCodeFence(selector) {\n const trimmed = selector.trim();\n const fenceMatch = trimmed.match(/^```[a-z0-9_-]*\\s*([\\s\\S]*?)\\s*```$/i);\n return fenceMatch?.[1]?.trim() ?? trimmed;\n}\nfunction unwrapQuotedSelector(selector) {\n const trimmed = selector.trim();\n if ((trimmed.startsWith('`') && trimmed.endsWith('`')) ||\n (trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n (trimmed.startsWith('\\'') && trimmed.endsWith('\\''))) {\n return trimmed.slice(1, -1).trim();\n }\n return trimmed;\n}\nfunction unwrapLocatorPrefix(selector) {\n let normalized = selector.trim();\n normalized = normalized.replace(/^css\\s*=\\s*/i, '');\n normalized = normalized.replace(/^locator\\s*=\\s*/i, '');\n return normalized.trim();\n}\nfunction unwrapLocatorCall(selector) {\n const trimmed = selector.trim();\n const callMatch = trimmed.match(/^locator\\(\\s*(['\"`])([\\s\\S]*?)\\1\\s*\\)$/i);\n if (callMatch?.[2]) {\n return callMatch[2].trim();\n }\n const bareMatch = trimmed.match(/^locator\\(\\s*([^()]+?)\\s*\\)$/i);\n return bareMatch?.[1]?.trim() ?? trimmed;\n}\nfunction looksLikeProse(selector) {\n if (!selector)\n return true;\n if (/^(?:use|try|selector|best|candidate|the|this|choose|prefer)\\b/i.test(selector)) {\n return true;\n }\n if (/[.!?]$/.test(selector) && !/[)\\]\"']$/.test(selector)) {\n return true;\n }\n return false;\n}\nfunction normalizeLlmSelector(selector) {\n if (typeof selector !== 'string')\n return null;\n let normalized = selector.trim();\n if (!normalized)\n return null;\n normalized = unwrapSingleCodeFence(normalized);\n normalized = unwrapQuotedSelector(normalized);\n normalized = unwrapLocatorPrefix(normalized);\n normalized = unwrapLocatorCall(normalized);\n normalized = normalized.trim().replace(/\\s+/g, ' ');\n if (!normalized)\n return null;\n if (/^xpath\\s*=/i.test(normalized))\n return null;\n if (looksLikeProse(normalized))\n return null;\n if (!(0, text_matching_1.isLikelyCssSelector)(normalized))\n return null;\n return normalized;\n}\nfunction normalizeLlmResponseFormat(item) {\n if (Array.isArray(item.candidates))\n return 'candidates-v2';\n if (Array.isArray(item.selectors))\n return 'legacy-selectors';\n return 'legacy-selector';\n}\nfunction collectRawSuggestionCandidates(item) {\n const selectors = [];\n if (Array.isArray(item.candidates)) {\n for (const candidate of item.candidates) {\n if (typeof candidate === 'string') {\n selectors.push(candidate);\n }\n else if (candidate && typeof candidate === 'object' && typeof candidate.selector === 'string') {\n selectors.push(candidate.selector);\n }\n }\n }\n if (Array.isArray(item.selectors)) {\n for (const selector of item.selectors) {\n selectors.push(typeof selector === 'string' ? selector : null);\n }\n }\n if (typeof item.selector === 'string') {\n selectors.push(item.selector);\n }\n return selectors;\n}\nfunction normalizeLlmSuggestions(suggestions, maxCandidatesPerStep) {\n const cappedMax = Math.max(1, maxCandidatesPerStep);\n const merged = new Map();\n for (const item of suggestions) {\n if (!item || typeof item !== 'object')\n continue;\n const stepNumber = Number(item.stepNumber);\n if (!Number.isFinite(stepNumber) || stepNumber <= 0)\n continue;\n const responseFormat = normalizeLlmResponseFormat(item);\n const normalizedCandidates = [];\n const seen = new Set();\n for (const rawSelector of collectRawSuggestionCandidates(item)) {\n const normalized = normalizeLlmSelector(rawSelector);\n if (!normalized || seen.has(normalized))\n continue;\n seen.add(normalized);\n normalizedCandidates.push(normalized);\n }\n if (normalizedCandidates.length === 0)\n continue;\n const existing = merged.get(stepNumber);\n if (!existing) {\n merged.set(stepNumber, {\n stepNumber,\n candidates: normalizedCandidates.slice(0, cappedMax),\n responseFormat,\n truncated: normalizedCandidates.length > cappedMax,\n });\n continue;\n }\n const combined = [...existing.candidates];\n const combinedSeen = new Set(existing.candidates);\n for (const candidate of normalizedCandidates) {\n if (combinedSeen.has(candidate))\n continue;\n combinedSeen.add(candidate);\n combined.push(candidate);\n if (combined.length >= cappedMax)\n break;\n }\n existing.candidates = combined.slice(0, cappedMax);\n existing.truncated = existing.truncated === true || normalizedCandidates.length > cappedMax || combined.length > cappedMax;\n if (existing.responseFormat !== 'candidates-v2') {\n existing.responseFormat =\n responseFormat === 'candidates-v2'\n ? 'candidates-v2'\n : existing.responseFormat === 'legacy-selectors' || responseFormat === 'legacy-selectors'\n ? 'legacy-selectors'\n : 'legacy-selector';\n }\n }\n return Array.from(merged.values()).sort((left, right) => left.stepNumber - right.stepNumber);\n}\nfunction normalizeLlmRetrySuggestions(suggestions) {\n const normalized = [];\n const seenSteps = new Set();\n for (const item of suggestions) {\n if (!item || typeof item !== 'object')\n continue;\n const stepNumber = Number(item.stepNumber);\n if (!Number.isFinite(stepNumber) || stepNumber <= 0 || seenSteps.has(stepNumber))\n continue;\n const selector = normalizeLlmSelector(item.selector);\n if (!selector)\n continue;\n seenSteps.add(stepNumber);\n normalized.push({ stepNumber, selector });\n }\n return normalized.sort((left, right) => left.stepNumber - right.stepNumber);\n}\nfunction isSafeRetryParentSelector(selector) {\n if (typeof selector !== 'string')\n return false;\n const trimmed = selector.trim();\n if (!trimmed || trimmed.length > 80)\n return false;\n if (/^(?:html|body)\\b/i.test(trimmed))\n return false;\n return (0, text_matching_1.isLikelyCssSelector)(trimmed);\n}\nfunction buildRetryFingerprintSummary(step) {\n if (!step.fingerprint)\n return undefined;\n const attrs = (0, text_matching_1.inferStepSignalAttributes)(step);\n const summary = {\n tagName: step.fingerprint.tagName?.toLowerCase() || attrs.tagName,\n textExcerpt: step.fingerprint.textExcerpt || undefined,\n href: attrs.href,\n role: attrs.role,\n ariaLabel: attrs.ariaLabel,\n name: attrs.name,\n placeholder: attrs.placeholder,\n type: attrs.type,\n dataTestId: attrs.dataTestId,\n dataCy: attrs.dataCy,\n dataQa: attrs.dataQa,\n controlFamily: inferStepControlFamily(step),\n };\n const parentSelector = step.fingerprint.parentSelector ?? attrs.parentSelector;\n if (isSafeRetryParentSelector(parentSelector)) {\n summary.parentSelector = parentSelector ?? undefined;\n }\n return Object.values(summary).some(value => value != null && value !== '')\n ? summary\n : undefined;\n}\nfunction buildRetryFailedCandidates(metadata) {\n return (metadata.llmRejectedCandidates ?? [])\n .slice(0, 3)\n .map(candidate => ({\n selector: candidate.selector,\n rejectReason: candidate.rejectReason,\n }));\n}\nfunction isRetryValidationFailure(reason) {\n return [\n 'invalid-llm-selector',\n 'llm-selector-too-complex',\n 'llm-selector-not-unique',\n 'llm-intent-mismatch',\n 'href_mismatch',\n 'control_family_mismatch',\n 'text_mismatch',\n ].includes(reason ?? '');\n}\nfunction validateLlmCandidateSelector(draft, selector, config) {\n let rejectReason = null;\n let warningCode = null;\n if (isLlmSelectorTooComplex(selector)) {\n rejectReason = 'llm-selector-too-complex';\n warningCode = 'llm-selector-too-complex';\n }\n const validation = rejectReason ? null : validateCandidate(selector, draft.snapshot, draft.step);\n if (!rejectReason && validation?.reason === 'invalid-selector') {\n rejectReason = 'invalid-llm-selector';\n warningCode = 'llm-invalid-selector';\n }\n if (!rejectReason &&\n validation &&\n (validation.effectiveMatchCount !== 1 ||\n validation.reason !== 'unique-visible')) {\n rejectReason = 'llm-selector-not-unique';\n warningCode = 'llm-non-unique';\n }\n const match = !rejectReason && validation\n ? validation.resolvedElement ??\n (0, element_ranking_1.getCandidateElement)(draft.snapshot, selector) ??\n ((0, text_matching_1.isLikelyCssSelector)(selector) ? draft.snapshot.querySelector(selector) : null)\n : null;\n if (!rejectReason && (!match || !matchesIntent(match, draft.step, config.intentMinScore))) {\n rejectReason = 'llm-intent-mismatch';\n warningCode = 'llm-intent-mismatch';\n }\n if (!rejectReason && shouldBlockGenericShellOverride(draft.step.selector, selector)) {\n rejectReason = 'llm-intent-mismatch';\n warningCode = 'blocked-generic-shell-override';\n }\n if (!rejectReason && validation) {\n const llmCandidateEvaluation = evaluateSemanticReject(draft.step, {\n candidate: {\n selector,\n source: 'other',\n rank: 10,\n },\n validation,\n score: 0,\n }, draft.snapshot);\n if (llmCandidateEvaluation.rejectReason) {\n rejectReason = llmCandidateEvaluation.rejectReason;\n warningCode = 'llm-semantic-reject';\n }\n }\n const selectorEvaluation = validation\n ? buildCandidateSelectorEvaluation({\n step: draft.step,\n candidate: {\n selector,\n source: 'other',\n rank: 10,\n },\n validation,\n baselineScore: 0.6,\n snapshotTargetEvidence: draft.metadata.snapshotTargetEvidence,\n semanticScore: rejectReason ? 0 : 0.75,\n semanticReasons: rejectReason ? [rejectReason] : ['llm-validated'],\n semanticRejectReason: rejectReason,\n proofLevel: rejectReason ? 'unvalidated' : 'semantic_validated',\n proofSource: rejectReason ? 'none' : 'llm-validator',\n source: 'llm',\n warningCodes: warningCode ? [warningCode] : [],\n })\n : undefined;\n return {\n accepted: rejectReason === null,\n rejectReason,\n warningCode,\n validation,\n selectorEvaluation,\n };\n}\nfunction isLlmSelectorTooComplex(selector) {\n if (selector.length > 160)\n return true;\n if (/^(?:html|body)\\b/i.test(selector))\n return true;\n if (/(?:^|\\s)(?:html|body)\\s*>/i.test(selector))\n return true;\n const nthHeavyCount = (selector.match(/:nth-(?:child|of-type)\\(/gi) ?? []).length;\n if (nthHeavyCount >= 2)\n return true;\n const depthCount = (selector.match(/\\s+>\\s+/g) ?? []).length +\n (selector.match(/\\s+(?![>+~])/g) ?? []).length;\n if (depthCount >= 5)\n return true;\n return false;\n}\nfunction pushWarningCode(metadata, code) {\n if (!metadata.warningCodes.includes(code)) {\n metadata.warningCodes.push(code);\n }\n}\nfunction applyLowScoreFallback(draft) {\n if (!draft.lowScoreFallback)\n return;\n draft.resolvedSelector = draft.lowScoreFallback.candidate.selector;\n draft.resolvedSelectorSpec = buildResolvedSelectorSpec({\n step: draft.step,\n selector: draft.lowScoreFallback.candidate.selector,\n source: 'resolver',\n proofLevel: 'semantic_validated',\n rank: draft.lowScoreFallback.candidate.rank,\n confidence: draft.lowScoreFallback.validation.confidenceScore ?? draft.lowScoreFallback.score,\n });\n const nextMetadata = {\n ...draft.metadata,\n resolvedSelector: draft.lowScoreFallback.candidate.selector,\n resolvedBy: 'deterministic-override',\n bestScore: draft.lowScoreFallback.score,\n effectiveMatchCount: draft.lowScoreFallback.validation.effectiveMatchCount,\n matchCount: draft.lowScoreFallback.validation.matchCount ?? draft.lowScoreFallback.validation.visibleMatchCount,\n confidenceScore: draft.lowScoreFallback.validation.confidenceScore ?? draft.lowScoreFallback.score,\n ambiguityReason: draft.lowScoreFallback.validation.ambiguityReason ?? null,\n idEntropyScore: draft.lowScoreFallback.idEntropyScore,\n idPenaltyReason: draft.lowScoreFallback.idPenaltyReason,\n classEntropyScore: draft.lowScoreFallback.classEntropyScore,\n classPenaltyReason: draft.lowScoreFallback.classPenaltyReason,\n llmAccepted: false,\n };\n pushWarningCode(nextMetadata, 'deterministic-low-score-fallback');\n nextMetadata.selectorEvaluation = buildResolutionSelectorEvaluation({\n step: draft.step,\n selectorSpec: draft.resolvedSelectorSpec,\n metadata: nextMetadata,\n candidateEvaluation: draft.lowScoreFallback.selectorEvaluation,\n snapshotTargetEvidence: draft.metadata.snapshotTargetEvidence,\n });\n draft.metadata = nextMetadata;\n}\nasync function resolveSelectorsForSession(session, snapshotCache, config, llmFallbackProvider) {\n const resolvedConfig = resolveConfig(config);\n const snapshotEngineAvailable = snapshotCache.snapshotEngineAvailable ?? true;\n (0, types_1.attachAssertionOutcomeSelections)(session, snapshotCache);\n const drafts = session.steps.map(step => {\n let snapshot = null;\n let snapshotSource;\n let snapshotSelection;\n let evaluatedCandidates;\n try {\n if (snapshotCache.selectForStep) {\n const selection = snapshotCache.selectForStep(step, 'action');\n snapshot = selection.snapshot;\n snapshotSource = selection.provenance.source;\n snapshotSelection = selection.provenance;\n evaluatedCandidates = selection.evaluatedCandidates;\n }\n }\n catch {\n snapshot = null;\n }\n if (!snapshotSelection) {\n const nodeId = step.sourceNodeId ?? '';\n snapshot = snapshot ?? snapshotCache.get(nodeId, step.normalizedUrl, step.controlSignature);\n snapshotSource = snapshotCache.getSource\n ? snapshotCache.getSource(nodeId, step.normalizedUrl, step.controlSignature)\n : (snapshot ? 'latest' : 'unavailable');\n snapshotSelection = {\n source: snapshotSource,\n temporalClass: 'unknown',\n reason: snapshot ? 'legacy_snapshot_cache_selection' : 'legacy_snapshot_cache_unavailable',\n eventId: step.eventId,\n sourceNodeId: step.sourceNodeId,\n confidenceScore: snapshot ? 0.5 : 0,\n };\n evaluatedCandidates = [\n {\n source: snapshotSource,\n temporalClass: 'unknown',\n selected: !!snapshot,\n reason: snapshot ? 'legacy_snapshot_cache_selection' : undefined,\n skipReason: snapshot ? undefined : 'snapshot-unavailable',\n eventId: step.eventId,\n sourceNodeId: step.sourceNodeId,\n confidenceScore: snapshot ? 0.5 : 0,\n },\n ];\n }\n const draft = deriveDeterministicResolution(step, snapshot, resolvedConfig, { snapshotEngineAvailable }, snapshotSource, snapshotSelection, evaluatedCandidates);\n maybeApplyCapturedCandidateDirectPromotion(draft, resolvedConfig);\n return draft;\n });\n const hasAnySnapshot = drafts.some(draft => draft.snapshot !== null);\n if (!hasAnySnapshot) {\n console.warn('[AIR] No snapshots available for entire session');\n }\n const llmAttemptedStepNumbers = [];\n const llmAcceptedStepNumbers = [];\n const llmEnabled = resolvedConfig.enableLLMFallback && typeof llmFallbackProvider === 'function';\n const llmEligible = drafts.filter(draft => draft.llmEligible && !!draft.snapshot);\n const llmCap = buildLlmCap(session.steps.length, resolvedConfig);\n const llmTargets = llmEnabled ? llmEligible.slice(0, llmCap) : [];\n if (llmEnabled && llmEligible.length > llmTargets.length) {\n for (const skipped of llmEligible.slice(llmTargets.length)) {\n pushWarningCode(skipped.metadata, 'llm-circuit-breaker');\n }\n }\n if (llmEnabled && llmTargets.length > 0 && llmFallbackProvider) {\n for (const draft of llmTargets) {\n draft.metadata.llmAttempted = true;\n llmAttemptedStepNumbers.push(draft.step.step);\n }\n const excerptByStep = new Map();\n const request = {\n mode: 'initial',\n steps: llmTargets.map(draft => {\n const excerptInfo = (0, excerpt_builder_1.serializeSnapshotExcerpt)(draft.snapshot, draft.step, resolvedConfig.maxSnapshotExcerptChars);\n excerptByStep.set(draft.step.step, { excerpt: excerptInfo.excerpt });\n draft.metadata = {\n ...draft.metadata,\n excerptBuildTotalMs: excerptInfo.metrics.excerptBuildTotalMs,\n pruneMs: excerptInfo.metrics.pruneMs,\n redactMs: excerptInfo.metrics.redactMs,\n finalExcerptChars: excerptInfo.metrics.finalExcerptChars,\n };\n return {\n stepNumber: draft.step.step,\n intent: draft.step.intent,\n action: draft.step.action,\n originalSelector: draft.step.selector,\n snapshotExcerpt: excerptInfo.excerpt,\n normalizedUrl: draft.step.normalizedUrl,\n snapshotSource: draft.metadata.snapshotSource,\n excerptChars: excerptInfo.metrics.finalExcerptChars,\n excerptMode: excerptInfo.mode,\n selectorPriority: draft.step.selectorPriority,\n };\n }),\n config: resolvedConfig,\n };\n try {\n const providerSuggestions = await withTimeout(llmFallbackProvider(request), resolvedConfig.llmTimeoutMs, 'Selector fallback');\n const suggestions = normalizeLlmSuggestions(providerSuggestions, resolvedConfig.llmMaxCandidatesPerStep);\n const suggestionsByStep = new Map(suggestions.map(suggestion => [suggestion.stepNumber, suggestion]));\n const retryEligibleTargets = [];\n for (const target of llmTargets) {\n const suggestion = suggestionsByStep.get(target.step.step);\n target.metadata.llmCandidatesReturned = suggestion?.candidates ?? [];\n target.metadata.llmCandidatesTried = [];\n target.metadata.llmRejectedCandidates = [];\n target.metadata.llmAcceptedRank = null;\n target.metadata.llmResponseFormat = suggestion?.responseFormat;\n target.metadata.llmRetryStatus = 'not-eligible';\n if (suggestion?.truncated) {\n pushWarningCode(target.metadata, 'llm-retry-cap-reached');\n }\n }\n for (const suggestion of suggestions) {\n const target = llmTargets.find(draft => draft.step.step === suggestion.stepNumber);\n if (!target || !target.snapshot)\n continue;\n let accepted = false;\n for (const [index, selector] of suggestion.candidates.entries()) {\n target.metadata.llmAlternative = selector;\n target.metadata.llmCandidatesTried?.push(selector);\n const candidateResult = validateLlmCandidateSelector(target, selector, resolvedConfig);\n const { rejectReason, warningCode, validation } = candidateResult;\n if (rejectReason) {\n target.metadata.rejectReason = rejectReason;\n target.metadata.llmRejectedCandidates?.push({ selector, rejectReason });\n if (warningCode) {\n pushWarningCode(target.metadata, warningCode);\n }\n continue;\n }\n target.resolvedSelector = selector;\n target.resolvedSelectorSpec = buildResolvedSelectorSpec({\n step: target.step,\n selector,\n source: 'llm',\n proofLevel: 'semantic_validated',\n confidence: validation?.confidenceScore ?? 0.95,\n });\n const nextMetadata = {\n ...target.metadata,\n resolvedSelector: selector,\n resolvedBy: 'llm-accepted',\n bestScore: Math.max(target.metadata.bestScore, 0.95),\n effectiveMatchCount: validation?.effectiveMatchCount ?? 1,\n matchCount: validation?.matchCount ?? validation?.visibleMatchCount,\n confidenceScore: validation?.confidenceScore ?? 0.95,\n ambiguityReason: validation?.ambiguityReason ?? null,\n llmAccepted: true,\n llmAcceptedRank: index + 1,\n llmAlternative: selector,\n rejectReason: null,\n semanticRejectReason: null,\n };\n nextMetadata.selectorEvaluation = buildResolutionSelectorEvaluation({\n step: target.step,\n selectorSpec: target.resolvedSelectorSpec,\n metadata: nextMetadata,\n candidateEvaluation: candidateResult.selectorEvaluation,\n snapshotTargetEvidence: target.metadata.snapshotTargetEvidence,\n });\n target.metadata = nextMetadata;\n llmAcceptedStepNumbers.push(target.step.step);\n accepted = true;\n break;\n }\n if (!accepted) {\n if (suggestion.candidates.length > 0) {\n pushWarningCode(target.metadata, 'llm-retries-exhausted');\n }\n if (target.lowScoreFallback) {\n applyLowScoreFallback(target);\n }\n }\n }\n for (const target of llmTargets) {\n const suggestion = suggestionsByStep.get(target.step.step);\n const returnedCandidates = suggestion?.candidates ?? [];\n const rejectedCandidates = target.metadata.llmRejectedCandidates ?? [];\n const retryEligible = !target.metadata.llmAccepted &&\n returnedCandidates.length > 0 &&\n rejectedCandidates.length === returnedCandidates.length &&\n rejectedCandidates.every(candidate => isRetryValidationFailure(candidate.rejectReason));\n if (retryEligible) {\n target.metadata.llmRetryTriggered = true;\n target.metadata.llmRetryTimeoutMs = resolvedConfig.llmRetryTimeoutMs;\n target.metadata.llmRetryStatus = 'triggered';\n retryEligibleTargets.push(target);\n continue;\n }\n if (!target.metadata.llmAccepted && !target.metadata.rejectReason) {\n target.metadata.rejectReason = 'llm-no-valid-suggestion';\n target.metadata.llmRetryStatus = 'skipped-empty-response';\n pushWarningCode(target.metadata, 'llm-no-valid-suggestion');\n pushWarningCode(target.metadata, 'llm-retry-skipped-empty-response');\n }\n if (!target.metadata.llmAccepted && target.lowScoreFallback) {\n applyLowScoreFallback(target);\n }\n }\n if (retryEligibleTargets.length > 0) {\n const retryRequest = {\n mode: 'retry',\n steps: retryEligibleTargets.map(target => ({\n stepNumber: target.step.step,\n action: target.step.action,\n intent: target.step.intent,\n originalSelector: target.step.selector,\n fingerprint: buildRetryFingerprintSummary(target.step),\n snapshotExcerpt: excerptByStep.get(target.step.step)?.excerpt ??\n (0, excerpt_builder_1.serializeSnapshotExcerpt)(target.snapshot, target.step, resolvedConfig.maxSnapshotExcerptChars).excerpt,\n failedCandidates: buildRetryFailedCandidates(target.metadata),\n })),\n config: resolvedConfig,\n };\n try {\n const retrySuggestions = await withTimeout(llmFallbackProvider(retryRequest), resolvedConfig.llmRetryTimeoutMs, 'Selector corrective retry');\n const normalizedRetrySuggestions = normalizeLlmRetrySuggestions(retrySuggestions);\n const retryByStep = new Map(normalizedRetrySuggestions.map(suggestion => [suggestion.stepNumber, suggestion]));\n for (const target of retryEligibleTargets) {\n const retrySuggestion = retryByStep.get(target.step.step);\n if (!retrySuggestion) {\n target.metadata.llmRetryStatus = 'skipped-empty-response';\n pushWarningCode(target.metadata, 'llm-retry-skipped-empty-response');\n if (target.lowScoreFallback) {\n applyLowScoreFallback(target);\n }\n continue;\n }\n target.metadata.llmRetrySelector = retrySuggestion.selector;\n target.metadata.llmAlternative = retrySuggestion.selector;\n const retryResult = validateLlmCandidateSelector(target, retrySuggestion.selector, resolvedConfig);\n if (!retryResult.accepted) {\n target.metadata.rejectReason = retryResult.rejectReason;\n target.metadata.llmRetryRejectReason = retryResult.rejectReason;\n target.metadata.llmRetryAccepted = false;\n target.metadata.llmRetryStatus = 'rejected';\n if (retryResult.warningCode) {\n pushWarningCode(target.metadata, retryResult.warningCode);\n }\n pushWarningCode(target.metadata, 'llm-retry-rejected');\n if (target.lowScoreFallback) {\n applyLowScoreFallback(target);\n }\n continue;\n }\n target.resolvedSelector = retrySuggestion.selector;\n target.resolvedSelectorSpec = buildResolvedSelectorSpec({\n step: target.step,\n selector: retrySuggestion.selector,\n source: 'llm',\n proofLevel: 'semantic_validated',\n confidence: retryResult.validation?.confidenceScore ?? 0.95,\n });\n const nextMetadata = {\n ...target.metadata,\n resolvedSelector: retrySuggestion.selector,\n resolvedBy: 'llm-accepted',\n bestScore: Math.max(target.metadata.bestScore, 0.95),\n effectiveMatchCount: retryResult.validation?.effectiveMatchCount ?? 1,\n matchCount: retryResult.validation?.matchCount ?? retryResult.validation?.visibleMatchCount,\n confidenceScore: retryResult.validation?.confidenceScore ?? 0.95,\n ambiguityReason: retryResult.validation?.ambiguityReason ?? null,\n llmAccepted: true,\n llmAlternative: retrySuggestion.selector,\n llmRetrySelector: retrySuggestion.selector,\n llmRetryRejectReason: null,\n llmRetryAccepted: true,\n llmRetryStatus: 'accepted',\n rejectReason: null,\n semanticRejectReason: null,\n };\n nextMetadata.selectorEvaluation = buildResolutionSelectorEvaluation({\n step: target.step,\n selectorSpec: target.resolvedSelectorSpec,\n metadata: nextMetadata,\n candidateEvaluation: retryResult.selectorEvaluation,\n snapshotTargetEvidence: target.metadata.snapshotTargetEvidence,\n });\n target.metadata = nextMetadata;\n pushWarningCode(target.metadata, 'llm-retry-accepted');\n llmAcceptedStepNumbers.push(target.step.step);\n }\n }\n catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n const timedOut = /timed out/i.test(reason);\n for (const target of retryEligibleTargets) {\n target.metadata.llmRetryAccepted = false;\n target.metadata.llmRetryRejectReason = reason;\n target.metadata.llmRetryStatus = timedOut ? 'skipped-timeout' : 'skipped-provider-error';\n pushWarningCode(target.metadata, timedOut ? 'llm-retry-timeout' : 'llm-retry-error');\n if (target.lowScoreFallback) {\n applyLowScoreFallback(target);\n }\n }\n }\n }\n }\n catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n for (const target of llmTargets) {\n target.metadata.rejectReason = reason;\n pushWarningCode(target.metadata, 'llm-error');\n if (target.lowScoreFallback) {\n applyLowScoreFallback(target);\n }\n }\n }\n }\n const resolutions = drafts.map(draft => ({\n stepNumber: draft.step.step,\n sourceNodeId: draft.step.sourceNodeId ?? null,\n originalSelector: draft.step.selector,\n selectorSpec: draft.selectorSpec,\n resolvedSelector: draft.resolvedSelector || draft.step.selector,\n resolvedSelectorSpec: draft.resolvedSelectorSpec,\n resolverMetadata: {\n ...draft.metadata,\n resolvedSelector: draft.resolvedSelector || draft.step.selector,\n },\n }));\n return {\n resolutions,\n unresolvedStepNumbers: resolutions\n .filter(resolution => resolution.resolverMetadata.resolvedBy === 'unresolved')\n .map(resolution => resolution.stepNumber),\n llmAttemptedStepNumbers,\n llmAcceptedStepNumbers,\n };\n}\n", "\"use strict\";\n/**\n * packages/codegen/src/index.ts\n * Public API of the @air/codegen package.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hasUserAssertionSupport = exports.getUserDefinedAssertions = exports.FlowReviewFormatter = exports.FlowReviewService = exports.selectSnapshotForStep = exports.selectSnapshotForOutcome = exports.selectSnapshotForAction = exports.resolveSelectorsForSession = exports.CodegenService = void 0;\n// \u2500\u2500 Core pipeline \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nvar codegen_service_1 = require(\"./codegen.service\");\nObject.defineProperty(exports, \"CodegenService\", { enumerable: true, get: function () { return codegen_service_1.CodegenService; } });\nvar selector_resolver_1 = require(\"./selector-resolver\");\nObject.defineProperty(exports, \"resolveSelectorsForSession\", { enumerable: true, get: function () { return selector_resolver_1.resolveSelectorsForSession; } });\nvar snapshot_selector_1 = require(\"./snapshot-selector\");\nObject.defineProperty(exports, \"selectSnapshotForAction\", { enumerable: true, get: function () { return snapshot_selector_1.selectSnapshotForAction; } });\nObject.defineProperty(exports, \"selectSnapshotForOutcome\", { enumerable: true, get: function () { return snapshot_selector_1.selectSnapshotForOutcome; } });\nObject.defineProperty(exports, \"selectSnapshotForStep\", { enumerable: true, get: function () { return snapshot_selector_1.selectSnapshotForStep; } });\n// \u2500\u2500 FlowReview layer \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nvar flow_review_service_1 = require(\"./flow-review.service\");\nObject.defineProperty(exports, \"FlowReviewService\", { enumerable: true, get: function () { return flow_review_service_1.FlowReviewService; } });\nvar flow_review_formatter_1 = require(\"./flow-review.formatter\");\nObject.defineProperty(exports, \"FlowReviewFormatter\", { enumerable: true, get: function () { return flow_review_formatter_1.FlowReviewFormatter; } });\n// \u2500\u2500 Stubs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nvar assertion_stub_1 = require(\"./assertion.stub\");\nObject.defineProperty(exports, \"getUserDefinedAssertions\", { enumerable: true, get: function () { return assertion_stub_1.getUserDefinedAssertions; } });\nObject.defineProperty(exports, \"hasUserAssertionSupport\", { enumerable: true, get: function () { return assertion_stub_1.hasUserAssertionSupport; } });\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./src/index\"), exports);\n", "import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\r\nimport { formatHelp, parseArgs, shouldShowHelp } from './config';\r\nimport { createContext } from './context';\r\nimport { createMcpServer } from './server';\r\n\r\nasync function main() {\r\n try {\r\n if (shouldShowHelp(process.argv.slice(2))) {\r\n console.error(formatHelp('stdio'));\r\n process.exit(0);\r\n }\r\n\r\n // 1. Parse arguments (e.g., node dist/index.js --db path/to/air.db)\r\n const config = parseArgs(process.argv.slice(2));\r\n\r\n // 2. Initialize context (CodegenService with read-only DB connection)\r\n const context = createContext(config);\r\n\r\n // 3. Create the MCP Server instance\r\n const server = createMcpServer(context);\r\n\r\n // 4. Wire up the stdio transport\r\n const transport = new StdioServerTransport();\r\n await server.connect(transport);\r\n\r\n // Provide logging to stderr so it doesn't break the JSON stdio protocol on stdout\r\n console.error(`[AIR MCP] Server running on stdio`);\r\n console.error(`[AIR MCP] Database path: ${config.dbPath}`);\r\n\r\n // Graceful shutdown\r\n process.on('SIGINT', async () => {\r\n console.error(`[AIR MCP] Shutting down...`);\r\n await server.close();\r\n process.exit(0);\r\n });\r\n\r\n } catch (error) {\r\n console.error(`[AIR MCP] Fatal initialization error:`, error);\r\n process.exit(1);\r\n }\r\n}\r\n\r\nmain().catch(console.error);\r\n", "import { z } from 'zod';\r\nimport * as path from 'path';\r\nimport { getDatabasePath } from '../../../core/utils/air-home';\r\n\r\nexport const ConfigSchema = z.object({\r\n dbPath: z.string().min(1, 'DB path must be provided via --db or AIR_MCP_DB_PATH'),\r\n});\r\n\r\nexport type McpServerConfig = z.infer<typeof ConfigSchema>;\r\n\r\nconst DEFAULT_HTTP_PORT = 3333;\r\n\r\nfunction readFlag(args: string[], name: string): string | undefined {\r\n for (let i = 0; i < args.length; i++) {\r\n const arg = args[i];\r\n\r\n if (arg === name && args[i + 1]) {\r\n return args[i + 1];\r\n }\r\n\r\n if (arg.startsWith(`${name}=`)) {\r\n return arg.slice(name.length + 1);\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function resolveDbPath(args: string[], env: NodeJS.ProcessEnv = process.env): string {\r\n const dbArg = readFlag(args, '--db');\r\n const dbPath = dbArg ?? env.AIR_MCP_DB_PATH ?? env.AIR_DB_PATH;\r\n\r\n if (dbPath) {\r\n return path.resolve(dbPath);\r\n }\r\n\r\n return getDatabasePath();\r\n}\r\n\r\nexport function resolveHttpPort(args: string[], env: NodeJS.ProcessEnv = process.env): number {\r\n const portValue = readFlag(args, '--port') ?? env.AIR_MCP_PORT;\r\n\r\n if (!portValue) {\r\n return DEFAULT_HTTP_PORT;\r\n }\r\n\r\n const parsed = Number.parseInt(portValue, 10);\r\n if (!Number.isFinite(parsed) || parsed <= 0) {\r\n throw new Error(`Invalid port: ${portValue}`);\r\n }\r\n\r\n return parsed;\r\n}\r\n\r\nexport function shouldShowHelp(args: string[]): boolean {\r\n return args.includes('--help') || args.includes('-h');\r\n}\r\n\r\nexport function formatHelp(transport: 'stdio' | 'http'): string {\r\n const lines = [\r\n 'AIR MCP Server',\r\n '',\r\n 'Configuration:',\r\n ' --db <path> Path to AIR SQLite database',\r\n ' AIR_MCP_DB_PATH Database path environment variable',\r\n ' AIR_DB_PATH Database path environment variable',\r\n ' Fallback ~/.air/air-data.db',\r\n ];\r\n\r\n if (transport === 'http') {\r\n lines.push(' --port <number> HTTP port for Streamable MCP transport');\r\n lines.push(' AIR_MCP_PORT HTTP port environment variable');\r\n }\r\n\r\n lines.push('');\r\n lines.push('Examples:');\r\n lines.push(' stdio: node scripts/air-mcp.cjs --db C:/path/to/air-data.db');\r\n lines.push(' http: node scripts/air-mcp.cjs --transport http --db C:/path/to/air-data.db --port 3333');\r\n\r\n return lines.join('\\n');\r\n}\r\n\r\n/**\r\n * Parses simple CLI arguments like --db path/to/air.db\r\n */\r\nexport function parseArgs(args: string[]): McpServerConfig {\r\n const parsed: Record<string, string> = {\r\n dbPath: resolveDbPath(args),\r\n };\r\n\r\n const result = ConfigSchema.safeParse(parsed);\r\n if (!result.success) {\r\n throw new Error(`Invalid configuration: ${result.error.message}`);\r\n }\r\n\r\n return result.data;\r\n}\r\n", "import * as os from 'os';\r\nimport * as path from 'path';\r\nimport * as fs from 'fs';\r\n\r\nexport function getAirHome(): string {\r\n if (process.env.AIR_HOME) {\r\n return process.env.AIR_HOME;\r\n }\r\n if (process.env.AIR_DB_PATH) {\r\n return path.dirname(process.env.AIR_DB_PATH);\r\n }\r\n return path.join(os.homedir(), '.air');\r\n}\r\n\r\nexport function ensureAirHome(): void {\r\n const home = getAirHome();\r\n if (!fs.existsSync(home)) {\r\n fs.mkdirSync(home, { recursive: true });\r\n }\r\n}\r\n\r\nexport function getDatabasePath(): string {\r\n if (process.env.AIR_DB_PATH) {\r\n return process.env.AIR_DB_PATH;\r\n }\r\n return path.join(getAirHome(), 'air-data.db');\r\n}\r\n\r\nexport function getConfigPath(): string {\r\n return path.join(getAirHome(), 'config.json');\r\n}\r\n\r\nexport function getExportsPath(): string {\r\n const exportsPath = path.join(getAirHome(), 'exports');\r\n if (!fs.existsSync(exportsPath)) {\r\n fs.mkdirSync(exportsPath, { recursive: true });\r\n }\r\n return exportsPath;\r\n}\r\n\r\nexport function getSessionMapsPath(): string {\r\n const sessionMapsPath = path.join(getAirHome(), 'session-maps');\r\n if (!fs.existsSync(sessionMapsPath)) {\r\n fs.mkdirSync(sessionMapsPath, { recursive: true });\r\n }\r\n return sessionMapsPath;\r\n}\r\n", "import { CodegenService } from '@air/codegen';\r\nimport { McpServerConfig } from './config';\r\n\r\n/**\r\n * Context holds shared services so tools don't instantiate them repeatedly.\r\n */\r\nexport interface McpContext {\r\n config: McpServerConfig;\r\n getCodegenService(): CodegenService;\r\n}\r\n\r\nexport function createContext(config: McpServerConfig): McpContext {\r\n let _codegenService: CodegenService | null = null;\r\n \r\n return {\r\n config,\r\n getCodegenService: () => {\r\n if (!_codegenService) {\r\n // Pass the configured DB path down to the CodegenService.\r\n // It handles opening it natively in query_only mode.\r\n _codegenService = new CodegenService({ dbPath: config.dbPath });\r\n }\r\n return _codegenService;\r\n }\r\n };\r\n}\r\n", "import { Server } from '@modelcontextprotocol/sdk/server/index.js';\r\nimport {\r\n CallToolRequestSchema,\r\n ListToolsRequestSchema,\r\n ErrorCode,\r\n McpError,\r\n} from '@modelcontextprotocol/sdk/types.js';\r\nimport { McpContext } from './context';\r\n\r\nexport type AirMcpToolDefinition = {\r\n name: string;\r\n description: string;\r\n inputSchema: Record<string, unknown>;\r\n};\r\n\r\nexport type AirMcpToolResponse = {\r\n content: Array<{\r\n type: 'text';\r\n text: string;\r\n }>;\r\n};\r\n\r\nexport type AirMcpToolHandler = {\r\n definition: AirMcpToolDefinition;\r\n handle: (args: unknown, context: McpContext) => Promise<AirMcpToolResponse>;\r\n};\r\n\r\nimport { getToolHandlers } from './tools';\r\n\r\nconst AIR_MCP_INSTRUCTIONS =\r\n 'Use AIR tools first for questions about recorded AIR sessions, AIR flow reviews, or AIR generation context. ' +\r\n 'Prefer list_recorded_sessions instead of searching files or querying SQLite directly when the user asks to list or find sessions. ' +\r\n 'After selecting a session, use get_session_flow_review for a human-readable review and get_session_generation_context for structured machine-readable step data. ' +\r\n 'Do not inspect the AIR database via shell when an AIR MCP tool can answer the request.';\r\n\r\nexport function createMcpServer(context: McpContext): Server {\r\n const server = new Server(\r\n {\r\n name: 'air-mcp-server',\r\n version: '1.0.0',\r\n },\r\n {\r\n capabilities: {\r\n tools: {},\r\n },\r\n instructions: AIR_MCP_INSTRUCTIONS,\r\n }\r\n );\r\n\r\n const tools = getToolHandlers();\r\n\r\n server.setRequestHandler(ListToolsRequestSchema, async () => {\r\n return {\r\n tools: tools.map(tool => tool.definition),\r\n };\r\n });\r\n\r\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\r\n const tool = tools.find(t => t.definition.name === request.params.name);\r\n\r\n if (!tool) {\r\n throw new McpError(\r\n ErrorCode.MethodNotFound,\r\n `Unknown tool: ${request.params.name}`\r\n );\r\n }\r\n\r\n return tool.handle(request.params.arguments ?? {}, context);\r\n });\r\n\r\n return server;\r\n}\r\n", "import { z } from 'zod';\r\nimport { AirMcpToolHandler } from '../server';\r\nimport { wrapWithPrivacy } from '../utils/privacy';\r\nimport { createDatabaseUnavailableError, createInvalidArgumentsError } from '../utils/errors';\r\n\r\nconst ListRecordedSessionsArgsSchema = z.object({\r\n limit: z.number().optional(),\r\n offset: z.number().optional(),\r\n recentDays: z.number().optional(),\r\n}).default({});\r\n\r\nexport const listRecordedSessionsTool: AirMcpToolHandler = {\r\n definition: {\r\n name: 'list_recorded_sessions',\r\n description: 'List available AIR recorded sessions by recording start time, newest first.',\r\n inputSchema: {\r\n type: 'object',\r\n properties: {\r\n limit: {\r\n type: 'number',\r\n description: 'Maximum number of sessions to return. Default 10, max 50.'\r\n },\r\n offset: {\r\n type: 'number',\r\n description: 'Number of sessions to skip. Default 0.'\r\n },\r\n recentDays: {\r\n type: 'number',\r\n description: 'Optional filter for sessions started in the last N days. Max 365.'\r\n }\r\n },\r\n additionalProperties: false\r\n }\r\n },\r\n handle: async (args, context) => {\r\n try {\r\n const parsedArgs = ListRecordedSessionsArgsSchema.parse(args || {});\r\n const service = context.getCodegenService();\r\n \r\n const result = service.listRecordedSessions(parsedArgs);\r\n const wrapped = wrapWithPrivacy(result);\r\n \r\n return {\r\n content: [\r\n {\r\n type: 'text',\r\n text: JSON.stringify(wrapped, null, 2),\r\n },\r\n ],\r\n };\r\n } catch (error) {\r\n if (error instanceof z.ZodError) {\r\n throw createInvalidArgumentsError(error.message);\r\n }\r\n throw createDatabaseUnavailableError(\r\n error instanceof Error ? error.message : 'Unknown database error'\r\n );\r\n }\r\n }\r\n};\r\n", "export interface PrivacyMeta {\r\n privacy: string;\r\n}\r\n\r\nexport function createPrivacyMeta(): PrivacyMeta {\r\n return {\r\n privacy: \"This context may contain local DOM excerpts or masked values. Do not leak sensitive PII.\"\r\n };\r\n}\r\n\r\nexport function wrapWithPrivacy<T>(data: T): { _meta: PrivacyMeta; data: T } {\r\n return {\r\n _meta: createPrivacyMeta(),\r\n data\r\n };\r\n}\r\n", "import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';\r\n\r\nexport function createSessionNotFoundError(sessionId: string): McpError {\r\n return new McpError(\r\n ErrorCode.InvalidRequest,\r\n `Session not found: ${sessionId}`\r\n );\r\n}\r\n\r\nexport function createDatabaseUnavailableError(message: string): McpError {\r\n return new McpError(\r\n ErrorCode.InternalError,\r\n `Database unavailable: ${message}`\r\n );\r\n}\r\n\r\nexport function createInvalidArgumentsError(message: string): McpError {\r\n return new McpError(\r\n ErrorCode.InvalidParams,\r\n `Invalid arguments: ${message}`\r\n );\r\n}\r\n", "import { z } from 'zod';\r\nimport { AirMcpToolHandler } from '../server';\r\nimport { wrapWithPrivacy } from '../utils/privacy';\r\nimport {\r\n createDatabaseUnavailableError,\r\n createInvalidArgumentsError,\r\n createSessionNotFoundError,\r\n} from '../utils/errors';\r\n\r\nconst GetSessionFlowReviewArgsSchema = z.object({\r\n sessionId: z.string().min(1),\r\n});\r\n\r\nfunction getSessionIdFromArgs(args: unknown): string {\r\n if (\r\n args &&\r\n typeof args === 'object' &&\r\n 'sessionId' in args &&\r\n typeof (args as { sessionId?: unknown }).sessionId === 'string'\r\n ) {\r\n return (args as { sessionId: string }).sessionId;\r\n }\r\n return 'unknown';\r\n}\r\n\r\nexport const getSessionFlowReviewTool: AirMcpToolHandler = {\r\n definition: {\r\n name: 'get_session_flow_review',\r\n description: 'Return a human-readable AIR FlowReview for a recorded session.',\r\n inputSchema: {\r\n type: 'object',\r\n properties: {\r\n sessionId: {\r\n type: 'string',\r\n description: 'The AIR recorded session ID to review.',\r\n },\r\n },\r\n required: ['sessionId'],\r\n additionalProperties: false,\r\n },\r\n },\r\n handle: async (args, context) => {\r\n try {\r\n const parsedArgs = GetSessionFlowReviewArgsSchema.parse(args || {});\r\n const markdown = context\r\n .getCodegenService()\r\n .getFlowReviewMarkdown(parsedArgs.sessionId);\r\n\r\n const wrapped = wrapWithPrivacy({ markdown });\r\n\r\n return {\r\n content: [\r\n {\r\n type: 'text',\r\n text: JSON.stringify(wrapped, null, 2),\r\n },\r\n ],\r\n };\r\n } catch (error) {\r\n if (error instanceof z.ZodError) {\r\n throw createInvalidArgumentsError(error.message);\r\n }\r\n \r\n const errorMessage = error instanceof Error ? error.message : String(error);\r\n \r\n if (errorMessage.includes('Session not found')) {\r\n throw createSessionNotFoundError(getSessionIdFromArgs(args));\r\n }\r\n \r\n throw createDatabaseUnavailableError(\r\n error instanceof Error ? error.message : 'Unknown database error'\r\n );\r\n }\r\n },\r\n};\r\n", "import { z } from 'zod';\r\nimport { AirMcpToolHandler } from '../server';\r\nimport { wrapWithPrivacy } from '../utils/privacy';\r\nimport {\r\n createDatabaseUnavailableError,\r\n createInvalidArgumentsError,\r\n createSessionNotFoundError,\r\n} from '../utils/errors';\r\n\r\nconst GetSessionGenerationContextArgsSchema = z.object({\r\n sessionId: z.string().min(1),\r\n offset: z.number().optional(),\r\n limit: z.number().optional(),\r\n});\r\n\r\nfunction normalizePagination(args: { offset?: number; limit?: number }) {\r\n const rawOffset = args.offset ?? 0;\r\n const offset = Math.max(Math.floor(rawOffset), 0);\r\n\r\n const rawLimit = args.limit ?? 25;\r\n const limit = Math.min(Math.max(Math.floor(rawLimit), 1), 100);\r\n\r\n return { offset, limit };\r\n}\r\n\r\nfunction getSessionIdFromArgs(args: unknown): string {\r\n if (\r\n args &&\r\n typeof args === 'object' &&\r\n 'sessionId' in args &&\r\n typeof (args as { sessionId?: unknown }).sessionId === 'string'\r\n ) {\r\n return (args as { sessionId: string }).sessionId;\r\n }\r\n return 'unknown';\r\n}\r\n\r\nexport const getSessionGenerationContextTool: AirMcpToolHandler = {\r\n definition: {\r\n name: 'get_session_generation_context',\r\n description: 'Return a paginated machine-readable AIR GenerationContext for a recorded session.',\r\n inputSchema: {\r\n type: 'object',\r\n properties: {\r\n sessionId: {\r\n type: 'string',\r\n description: 'The AIR recorded session ID.',\r\n },\r\n offset: {\r\n type: 'number',\r\n description: 'Pagination offset. Default 0.',\r\n },\r\n limit: {\r\n type: 'number',\r\n description: 'Pagination limit. Default 25, max 100.',\r\n },\r\n },\r\n required: ['sessionId'],\r\n additionalProperties: false,\r\n },\r\n },\r\n handle: async (args, context) => {\r\n try {\r\n const parsedArgs = GetSessionGenerationContextArgsSchema.parse(args || {});\r\n const { offset, limit } = normalizePagination(parsedArgs);\r\n\r\n const service = context.getCodegenService();\r\n const generationContext = service.buildGenerationContext(parsedArgs.sessionId);\r\n\r\n const totalSteps = generationContext.steps.length;\r\n const steps = generationContext.steps.slice(offset, offset + limit);\r\n const hasMore = offset + limit < totalSteps;\r\n\r\n const resolvedSteps = generationContext.steps.filter(s => s.locatorStatus === 'resolved').length;\r\n const unresolvedSteps = generationContext.steps.filter(s => s.locatorStatus === 'unresolved').length;\r\n const notApplicableSteps = generationContext.steps.filter(s => s.locatorStatus === 'not_applicable').length;\r\n const assertionCount = generationContext.steps.reduce((sum, step) => sum + (step.assertions?.length || 0), 0);\r\n const ignoredStepsCount = generationContext.ignoredSteps?.length ?? 0;\r\n\r\n const response = {\r\n schemaVersion: 'air:mcp-generation-context-response:v1' as const,\r\n generationContextSchemaVersion: generationContext.schemaVersion,\r\n sessionId: generationContext.sessionId,\r\n url: generationContext.url,\r\n recordedAt: generationContext.recordedAt,\r\n metadata: generationContext.metadata,\r\n\r\n totalSteps,\r\n offset,\r\n limit,\r\n hasMore,\r\n\r\n summary: {\r\n resolvedSteps,\r\n unresolvedSteps,\r\n notApplicableSteps,\r\n assertionCount,\r\n ignoredStepsCount,\r\n },\r\n\r\n steps,\r\n\r\n /**\r\n * Recorded steps not recommended for replay.\r\n * The LLM must NOT generate code from these unless explicitly requested.\r\n * Use for context, diagnostics, and fallback explanation only.\r\n */\r\n ignoredSteps: generationContext.ignoredSteps ?? [],\r\n\r\n /**\r\n * Typed generation rules for the IDE LLM.\r\n * Follow these rules in addition to any user-provided instructions.\r\n */\r\n generationGuidance: generationContext.generationGuidance,\r\n };\r\n\r\n\r\n const wrapped = wrapWithPrivacy(response);\r\n\r\n return {\r\n content: [\r\n {\r\n type: 'text',\r\n text: JSON.stringify(wrapped, null, 2),\r\n },\r\n ],\r\n };\r\n } catch (error) {\r\n if (error instanceof z.ZodError) {\r\n throw createInvalidArgumentsError(error.message);\r\n }\r\n\r\n const errorMessage = error instanceof Error ? error.message : String(error);\r\n\r\n if (errorMessage.includes('Session not found')) {\r\n throw createSessionNotFoundError(getSessionIdFromArgs(args));\r\n }\r\n\r\n throw createDatabaseUnavailableError(\r\n error instanceof Error ? error.message : 'Unknown database error'\r\n );\r\n }\r\n },\r\n};\r\n", "import type { AirMcpToolHandler } from '../server';\r\nimport { listRecordedSessionsTool } from './list-recorded-sessions';\r\nimport { getSessionFlowReviewTool } from './get-session-flow-review';\r\nimport { getSessionGenerationContextTool } from './get-session-generation-context';\r\n\r\nexport function getToolHandlers(): AirMcpToolHandler[] {\r\n return [\r\n listRecordedSessionsTool,\r\n getSessionFlowReviewTool,\r\n getSessionGenerationContextTool,\r\n ];\r\n}\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["exports", "exports", "exports", "token", "exports", "exports", "label", "exports", "exports", "exports", "exports", "exports", "exports", "path", "path", "exports", "exports", "exports", "exports", "escapeCssString", "CodegenService", "exports", "exports", "exports", "exports", "exports", "redactStartedAt", "redacted", "fullHtml", "cleaned", "exports", "exports", "exports", "exports", "SELECTOR_RANK_MAP", "idEntropy", "label", "labelContext", "resolvedSelectorSpec", "metadata", "resolve", "exports", "exports", "path", "import_types", "import_zod", "import_zod", "import_zod", "getSessionIdFromArgs"]
|
|
7
|
+
}
|