@qontinui/ui-bridge 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/control/index.d.mts +134 -0
- package/dist/control/index.d.ts +134 -0
- package/dist/control/index.js +924 -0
- package/dist/control/index.js.map +1 -0
- package/dist/control/index.mjs +919 -0
- package/dist/control/index.mjs.map +1 -0
- package/dist/core/index.d.mts +52 -0
- package/dist/core/index.d.ts +52 -0
- package/dist/core/index.js +1424 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/index.mjs +1409 -0
- package/dist/core/index.mjs.map +1 -0
- package/dist/debug/index.d.mts +93 -0
- package/dist/debug/index.d.ts +93 -0
- package/dist/debug/index.js +673 -0
- package/dist/debug/index.js.map +1 -0
- package/dist/debug/index.mjs +664 -0
- package/dist/debug/index.mjs.map +1 -0
- package/dist/index.d.mts +12 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +4719 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +4665 -0
- package/dist/index.mjs.map +1 -0
- package/dist/metrics-BCG7z7Aq.d.mts +147 -0
- package/dist/metrics-QCnK0EFw.d.ts +147 -0
- package/dist/react/index.d.mts +786 -0
- package/dist/react/index.d.ts +786 -0
- package/dist/react/index.js +4312 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/index.mjs +4290 -0
- package/dist/react/index.mjs.map +1 -0
- package/dist/registry-CT6BVVKr.d.mts +253 -0
- package/dist/registry-D4mQ01B3.d.ts +253 -0
- package/dist/render-log/index.d.mts +340 -0
- package/dist/render-log/index.d.ts +340 -0
- package/dist/render-log/index.js +702 -0
- package/dist/render-log/index.js.map +1 -0
- package/dist/render-log/index.mjs +695 -0
- package/dist/render-log/index.mjs.map +1 -0
- package/dist/types-BDkXy5si.d.ts +354 -0
- package/dist/types-BpvpStn3.d.mts +802 -0
- package/dist/types-BpvpStn3.d.ts +802 -0
- package/dist/types-DdJD9yw5.d.mts +354 -0
- package/dist/websocket-client-B2LC9CYc.d.mts +124 -0
- package/dist/websocket-client-DupH0X7B.d.ts +124 -0
- package/package.json +83 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/core/element-identifier.ts","../../src/render-log/dom-capture.ts","../../src/render-log/snapshot.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Element Identification Module\n *\n * Provides utilities for identifying DOM elements using multiple strategies:\n * 1. data-ui-id (explicit UI Bridge identifier - preferred)\n * 2. data-testid (testing library convention)\n * 3. data-awas-element (legacy support)\n * 4. id (HTML id attribute)\n * 5. Generated XPath/CSS selector (fallback)\n */\n\nimport type { ElementIdentifier } from './types';\n\n/**\n * Data attributes used for element identification (in priority order)\n */\nexport const ID_ATTRIBUTES = ['data-ui-id', 'data-testid', 'data-awas-element', 'id'] as const;\n\n/**\n * Generate a unique XPath for an element\n */\nexport function generateXPath(element: HTMLElement): string {\n if (element.id) {\n return `//*[@id=\"${element.id}\"]`;\n }\n\n const parts: string[] = [];\n let current: HTMLElement | null = element;\n\n while (current && current.nodeType === Node.ELEMENT_NODE) {\n let selector = current.nodeName.toLowerCase();\n\n // Check for identifying attributes\n const uiId = current.getAttribute('data-ui-id');\n if (uiId) {\n selector += `[@data-ui-id=\"${uiId}\"]`;\n parts.unshift(selector);\n break;\n }\n\n const testId = current.getAttribute('data-testid');\n if (testId) {\n selector += `[@data-testid=\"${testId}\"]`;\n parts.unshift(selector);\n break;\n }\n\n const id = current.id;\n if (id) {\n selector += `[@id=\"${id}\"]`;\n parts.unshift(selector);\n break;\n }\n\n // Calculate position among siblings with same tag\n const parentEl: HTMLElement | null = current.parentElement;\n if (parentEl) {\n const currentEl = current;\n const siblings = Array.from(parentEl.children).filter(\n (child): child is Element => child.nodeName === currentEl.nodeName\n );\n if (siblings.length > 1) {\n const index = siblings.indexOf(currentEl) + 1;\n selector += `[${index}]`;\n }\n }\n\n parts.unshift(selector);\n current = parentEl;\n }\n\n return '/' + parts.join('/');\n}\n\n/**\n * Generate a unique CSS selector for an element\n */\nexport function generateCSSSelector(element: HTMLElement): string {\n // Check for identifying attributes first\n const uiId = element.getAttribute('data-ui-id');\n if (uiId) {\n return `[data-ui-id=\"${uiId}\"]`;\n }\n\n const testId = element.getAttribute('data-testid');\n if (testId) {\n return `[data-testid=\"${testId}\"]`;\n }\n\n const awasId = element.getAttribute('data-awas-element');\n if (awasId) {\n return `[data-awas-element=\"${awasId}\"]`;\n }\n\n if (element.id) {\n return `#${CSS.escape(element.id)}`;\n }\n\n // Build a path selector\n const path: string[] = [];\n let current: HTMLElement | null = element;\n\n while (current && current.nodeType === Node.ELEMENT_NODE) {\n let selector = current.nodeName.toLowerCase();\n\n // Check for unique identifiers on ancestors\n const parentUiId = current.getAttribute('data-ui-id');\n if (parentUiId && current !== element) {\n path.unshift(`[data-ui-id=\"${parentUiId}\"]`);\n break;\n }\n\n const parentTestId = current.getAttribute('data-testid');\n if (parentTestId && current !== element) {\n path.unshift(`[data-testid=\"${parentTestId}\"]`);\n break;\n }\n\n if (current.id) {\n path.unshift(`#${CSS.escape(current.id)}`);\n break;\n }\n\n // Add nth-child if needed for uniqueness\n const parentEl: HTMLElement | null = current.parentElement;\n if (parentEl) {\n const currentEl = current;\n const siblings = Array.from(parentEl.children);\n const sameTagSiblings = siblings.filter(\n (s): s is Element => s.nodeName === currentEl.nodeName\n );\n\n if (sameTagSiblings.length > 1) {\n const index = siblings.indexOf(currentEl) + 1;\n selector += `:nth-child(${index})`;\n }\n }\n\n path.unshift(selector);\n current = current.parentElement;\n }\n\n return path.join(' > ');\n}\n\n/**\n * Get the best identifier for an element based on available attributes\n */\nexport function getBestIdentifier(element: HTMLElement): string {\n // Priority order\n const uiId = element.getAttribute('data-ui-id');\n if (uiId) return uiId;\n\n const testId = element.getAttribute('data-testid');\n if (testId) return testId;\n\n const awasId = element.getAttribute('data-awas-element');\n if (awasId) return awasId;\n\n if (element.id) return element.id;\n\n // Fallback to generated CSS selector\n return generateCSSSelector(element);\n}\n\n/**\n * Create a full ElementIdentifier object for an element\n */\nexport function createElementIdentifier(element: HTMLElement): ElementIdentifier {\n return {\n uiId: element.getAttribute('data-ui-id') || undefined,\n testId: element.getAttribute('data-testid') || undefined,\n awasId: element.getAttribute('data-awas-element') || undefined,\n htmlId: element.id || undefined,\n xpath: generateXPath(element),\n selector: generateCSSSelector(element),\n };\n}\n\n/**\n * Find an element by its identifier\n *\n * Tries each identification method in priority order\n */\nexport function findElementByIdentifier(\n identifier: string | ElementIdentifier,\n root: ParentNode = document\n): HTMLElement | null {\n // If string, try each identification method\n if (typeof identifier === 'string') {\n // Try data-ui-id\n const byUiId = root.querySelector<HTMLElement>(`[data-ui-id=\"${identifier}\"]`);\n if (byUiId) return byUiId;\n\n // Try data-testid\n const byTestId = root.querySelector<HTMLElement>(`[data-testid=\"${identifier}\"]`);\n if (byTestId) return byTestId;\n\n // Try data-awas-element\n const byAwasId = root.querySelector<HTMLElement>(`[data-awas-element=\"${identifier}\"]`);\n if (byAwasId) return byAwasId;\n\n // Try id\n const byId = root.querySelector<HTMLElement>(`#${CSS.escape(identifier)}`);\n if (byId) return byId;\n\n // Try as CSS selector\n try {\n const bySelector = root.querySelector<HTMLElement>(identifier);\n if (bySelector) return bySelector;\n } catch {\n // Invalid selector, ignore\n }\n\n // Try as XPath\n try {\n const result = document.evaluate(\n identifier,\n root,\n null,\n XPathResult.FIRST_ORDERED_NODE_TYPE,\n null\n );\n if (result.singleNodeValue instanceof HTMLElement) {\n return result.singleNodeValue;\n }\n } catch {\n // Invalid XPath, ignore\n }\n\n return null;\n }\n\n // If ElementIdentifier object, try in priority order\n if (identifier.uiId) {\n const el = root.querySelector<HTMLElement>(`[data-ui-id=\"${identifier.uiId}\"]`);\n if (el) return el;\n }\n\n if (identifier.testId) {\n const el = root.querySelector<HTMLElement>(`[data-testid=\"${identifier.testId}\"]`);\n if (el) return el;\n }\n\n if (identifier.awasId) {\n const el = root.querySelector<HTMLElement>(`[data-awas-element=\"${identifier.awasId}\"]`);\n if (el) return el;\n }\n\n if (identifier.htmlId) {\n const el = root.querySelector<HTMLElement>(`#${CSS.escape(identifier.htmlId)}`);\n if (el) return el;\n }\n\n // Try CSS selector\n if (identifier.selector) {\n try {\n const el = root.querySelector<HTMLElement>(identifier.selector);\n if (el) return el;\n } catch {\n // Invalid selector\n }\n }\n\n // Try XPath\n if (identifier.xpath) {\n try {\n const result = document.evaluate(\n identifier.xpath,\n root,\n null,\n XPathResult.FIRST_ORDERED_NODE_TYPE,\n null\n );\n if (result.singleNodeValue instanceof HTMLElement) {\n return result.singleNodeValue;\n }\n } catch {\n // Invalid XPath\n }\n }\n\n return null;\n}\n\n/**\n * Find all elements matching an identifier pattern\n */\nexport function findAllElementsByIdentifier(\n pattern: string,\n root: ParentNode = document\n): HTMLElement[] {\n const results: HTMLElement[] = [];\n\n // Try as CSS selector first (supports wildcards better)\n try {\n const elements = root.querySelectorAll<HTMLElement>(pattern);\n results.push(...Array.from(elements));\n if (results.length > 0) return results;\n } catch {\n // Not a valid CSS selector\n }\n\n // Try partial matching on data attributes\n const partials = [\n `[data-ui-id*=\"${pattern}\"]`,\n `[data-testid*=\"${pattern}\"]`,\n `[data-awas-element*=\"${pattern}\"]`,\n `[id*=\"${pattern}\"]`,\n ];\n\n for (const selector of partials) {\n try {\n const elements = root.querySelectorAll<HTMLElement>(selector);\n for (const el of elements) {\n if (!results.includes(el)) {\n results.push(el);\n }\n }\n } catch {\n // Invalid selector\n }\n }\n\n return results;\n}\n\n/**\n * Check if an element matches an identifier\n */\nexport function elementMatchesIdentifier(\n element: HTMLElement,\n identifier: string | ElementIdentifier\n): boolean {\n if (typeof identifier === 'string') {\n return (\n element.getAttribute('data-ui-id') === identifier ||\n element.getAttribute('data-testid') === identifier ||\n element.getAttribute('data-awas-element') === identifier ||\n element.id === identifier ||\n element.matches(identifier)\n );\n }\n\n return (\n (identifier.uiId && element.getAttribute('data-ui-id') === identifier.uiId) ||\n (identifier.testId && element.getAttribute('data-testid') === identifier.testId) ||\n (identifier.awasId && element.getAttribute('data-awas-element') === identifier.awasId) ||\n (identifier.htmlId && element.id === identifier.htmlId) ||\n false\n );\n}\n","/**\n * DOM Capture Module\n *\n * Utilities for capturing DOM snapshots and tracking changes.\n */\n\nimport type { ElementIdentifier, ElementState } from '../core/types';\nimport { createElementIdentifier, getBestIdentifier } from '../core/element-identifier';\n\n/**\n * Captured DOM element information\n */\nexport interface CapturedElement {\n /** Element identifier */\n identifier: ElementIdentifier;\n /** Best single identifier string */\n bestId: string;\n /** Tag name */\n tagName: string;\n /** Element role */\n role?: string;\n /** Accessible name */\n accessibleName?: string;\n /** Text content (truncated) */\n textContent?: string;\n /** Element state */\n state: ElementState;\n /** Attributes relevant for automation */\n attributes: Record<string, string>;\n /** Child element count */\n childCount: number;\n /** Depth in the DOM tree */\n depth: number;\n}\n\n/**\n * DOM snapshot\n */\nexport interface DOMSnapshot {\n /** Timestamp when snapshot was taken */\n timestamp: number;\n /** Page URL */\n url: string;\n /** Page title */\n title: string;\n /** Viewport dimensions */\n viewport: {\n width: number;\n height: number;\n scrollX: number;\n scrollY: number;\n };\n /** Captured elements */\n elements: CapturedElement[];\n /** Total DOM node count */\n totalNodeCount: number;\n /** Capture duration in milliseconds */\n captureDurationMs: number;\n}\n\n/**\n * Options for DOM capture\n */\nexport interface CaptureOptions {\n /** Root element to capture from (defaults to document.body) */\n root?: HTMLElement;\n /** Maximum depth to traverse */\n maxDepth?: number;\n /** Maximum number of elements to capture */\n maxElements?: number;\n /** Only capture interactive elements */\n interactiveOnly?: boolean;\n /** Include hidden elements */\n includeHidden?: boolean;\n /** Selectors to include (whitelist) */\n includeSelectors?: string[];\n /** Selectors to exclude (blacklist) */\n excludeSelectors?: string[];\n /** Custom filter function */\n filter?: (element: HTMLElement) => boolean;\n /** Truncate text content to this length */\n maxTextLength?: number;\n}\n\n/**\n * Attributes to capture for automation\n */\nconst CAPTURE_ATTRIBUTES = [\n 'data-ui-id',\n 'data-testid',\n 'data-awas-element',\n 'id',\n 'name',\n 'type',\n 'href',\n 'src',\n 'alt',\n 'title',\n 'placeholder',\n 'value',\n 'aria-label',\n 'aria-labelledby',\n 'aria-describedby',\n 'aria-expanded',\n 'aria-selected',\n 'aria-checked',\n 'aria-disabled',\n 'aria-hidden',\n 'role',\n 'tabindex',\n 'disabled',\n 'readonly',\n 'required',\n 'checked',\n];\n\n/**\n * Interactive element selectors\n */\nconst INTERACTIVE_SELECTORS = [\n 'a[href]',\n 'button',\n 'input',\n 'select',\n 'textarea',\n '[onclick]',\n '[role=\"button\"]',\n '[role=\"link\"]',\n '[role=\"checkbox\"]',\n '[role=\"radio\"]',\n '[role=\"menuitem\"]',\n '[role=\"tab\"]',\n '[role=\"switch\"]',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n];\n\n/**\n * Check if an element is interactive\n */\nfunction isInteractive(element: HTMLElement): boolean {\n return INTERACTIVE_SELECTORS.some((selector) => {\n try {\n return element.matches(selector);\n } catch {\n return false;\n }\n });\n}\n\n/**\n * Get the accessible name of an element\n */\nfunction getAccessibleName(element: HTMLElement): string | undefined {\n // aria-label takes precedence\n const ariaLabel = element.getAttribute('aria-label');\n if (ariaLabel) return ariaLabel;\n\n // aria-labelledby\n const labelledBy = element.getAttribute('aria-labelledby');\n if (labelledBy) {\n const labels = labelledBy\n .split(' ')\n .map((id) => document.getElementById(id)?.textContent?.trim())\n .filter(Boolean);\n if (labels.length > 0) return labels.join(' ');\n }\n\n // Input associated label\n if (\n element instanceof HTMLInputElement ||\n element instanceof HTMLSelectElement ||\n element instanceof HTMLTextAreaElement\n ) {\n const id = element.id;\n if (id) {\n const label = document.querySelector<HTMLLabelElement>(`label[for=\"${id}\"]`);\n if (label) return label.textContent?.trim();\n }\n }\n\n // Title attribute\n const title = element.getAttribute('title');\n if (title) return title;\n\n // Alt text for images\n if (element instanceof HTMLImageElement) {\n return element.alt || undefined;\n }\n\n // Button or link text content\n if (element.matches('button, a, [role=\"button\"], [role=\"link\"]')) {\n return element.textContent?.trim() || undefined;\n }\n\n return undefined;\n}\n\n/**\n * Get element state\n */\nfunction getElementState(element: HTMLElement): ElementState {\n const rect = element.getBoundingClientRect();\n const style = window.getComputedStyle(element);\n\n const state: ElementState = {\n visible: isVisible(element, rect, style),\n enabled: !isDisabled(element),\n focused: document.activeElement === element,\n rect: {\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n },\n computedStyles: {\n display: style.display,\n visibility: style.visibility,\n opacity: style.opacity,\n pointerEvents: style.pointerEvents,\n },\n };\n\n // Input-specific state\n if (element instanceof HTMLInputElement) {\n state.value = element.value;\n if (element.type === 'checkbox' || element.type === 'radio') {\n state.checked = element.checked;\n }\n } else if (element instanceof HTMLTextAreaElement) {\n state.value = element.value;\n } else if (element instanceof HTMLSelectElement) {\n state.value = element.value;\n state.selectedOptions = Array.from(element.selectedOptions).map((opt) => opt.value);\n }\n\n return state;\n}\n\nfunction isVisible(element: HTMLElement, rect: DOMRect, style: CSSStyleDeclaration): boolean {\n if (rect.width === 0 || rect.height === 0) return false;\n if (style.display === 'none') return false;\n if (style.visibility === 'hidden') return false;\n if (parseFloat(style.opacity) === 0) return false;\n if (element.getAttribute('aria-hidden') === 'true') return false;\n\n return (\n rect.top < window.innerHeight &&\n rect.bottom > 0 &&\n rect.left < window.innerWidth &&\n rect.right > 0\n );\n}\n\nfunction isDisabled(element: HTMLElement): boolean {\n if ('disabled' in element && (element as HTMLInputElement).disabled) return true;\n if (element.getAttribute('aria-disabled') === 'true') return true;\n return false;\n}\n\n/**\n * Capture attributes from an element\n */\nfunction captureAttributes(element: HTMLElement): Record<string, string> {\n const attrs: Record<string, string> = {};\n for (const attr of CAPTURE_ATTRIBUTES) {\n const value = element.getAttribute(attr);\n if (value !== null) {\n attrs[attr] = value;\n }\n }\n return attrs;\n}\n\n/**\n * Capture a single element\n */\nfunction captureElement(\n element: HTMLElement,\n depth: number,\n maxTextLength: number\n): CapturedElement {\n const identifier = createElementIdentifier(element);\n let textContent = element.textContent?.trim();\n if (textContent && textContent.length > maxTextLength) {\n textContent = textContent.substring(0, maxTextLength) + '...';\n }\n\n return {\n identifier,\n bestId: getBestIdentifier(element),\n tagName: element.tagName.toLowerCase(),\n role: element.getAttribute('role') || undefined,\n accessibleName: getAccessibleName(element),\n textContent,\n state: getElementState(element),\n attributes: captureAttributes(element),\n childCount: element.children.length,\n depth,\n };\n}\n\n/**\n * Capture DOM snapshot\n */\nexport function captureDOMSnapshot(options: CaptureOptions = {}): DOMSnapshot {\n const startTime = performance.now();\n const {\n root = document.body,\n maxDepth = 50,\n maxElements = 5000,\n interactiveOnly = false,\n includeHidden = false,\n includeSelectors,\n excludeSelectors,\n filter,\n maxTextLength = 200,\n } = options;\n\n const elements: CapturedElement[] = [];\n let totalNodeCount = 0;\n\n function shouldCapture(element: HTMLElement): boolean {\n // Check custom filter\n if (filter && !filter(element)) return false;\n\n // Check exclude selectors\n if (excludeSelectors) {\n for (const selector of excludeSelectors) {\n try {\n if (element.matches(selector)) return false;\n } catch {\n // Invalid selector\n }\n }\n }\n\n // Check include selectors (whitelist)\n if (includeSelectors && includeSelectors.length > 0) {\n let matches = false;\n for (const selector of includeSelectors) {\n try {\n if (element.matches(selector)) {\n matches = true;\n break;\n }\n } catch {\n // Invalid selector\n }\n }\n if (!matches) return false;\n }\n\n // Check interactive only\n if (interactiveOnly && !isInteractive(element)) return false;\n\n // Check visibility\n if (!includeHidden) {\n const rect = element.getBoundingClientRect();\n const style = window.getComputedStyle(element);\n if (!isVisible(element, rect, style)) return false;\n }\n\n return true;\n }\n\n function traverse(element: HTMLElement, depth: number): void {\n if (depth > maxDepth || elements.length >= maxElements) return;\n\n totalNodeCount++;\n\n if (shouldCapture(element)) {\n elements.push(captureElement(element, depth, maxTextLength));\n }\n\n // Traverse children\n for (const child of element.children) {\n if (child instanceof HTMLElement) {\n traverse(child, depth + 1);\n }\n }\n }\n\n traverse(root, 0);\n\n const endTime = performance.now();\n\n return {\n timestamp: Date.now(),\n url: window.location.href,\n title: document.title,\n viewport: {\n width: window.innerWidth,\n height: window.innerHeight,\n scrollX: window.scrollX,\n scrollY: window.scrollY,\n },\n elements,\n totalNodeCount,\n captureDurationMs: endTime - startTime,\n };\n}\n\n/**\n * Capture only interactive elements\n */\nexport function captureInteractiveElements(\n options: Omit<CaptureOptions, 'interactiveOnly'> = {}\n): DOMSnapshot {\n return captureDOMSnapshot({ ...options, interactiveOnly: true });\n}\n\n/**\n * Mutation record for tracked changes\n */\nexport interface DOMChange {\n timestamp: number;\n type: 'added' | 'removed' | 'modified' | 'attribute';\n elementId?: string;\n tagName: string;\n details?: {\n attributeName?: string;\n oldValue?: string;\n newValue?: string;\n addedNodes?: number;\n removedNodes?: number;\n };\n}\n\n/**\n * DOM change observer\n */\nexport class DOMChangeObserver {\n private observer: MutationObserver | null = null;\n private changes: DOMChange[] = [];\n private maxChanges: number;\n private callback?: (change: DOMChange) => void;\n\n constructor(options: { maxChanges?: number; callback?: (change: DOMChange) => void } = {}) {\n this.maxChanges = options.maxChanges ?? 1000;\n this.callback = options.callback;\n }\n\n start(root: HTMLElement = document.body): void {\n if (this.observer) return;\n\n this.observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n const change = this.processMutation(mutation);\n if (change) {\n this.addChange(change);\n }\n }\n });\n\n this.observer.observe(root, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true,\n attributeOldValue: true,\n });\n }\n\n stop(): void {\n this.observer?.disconnect();\n this.observer = null;\n }\n\n private processMutation(mutation: MutationRecord): DOMChange | null {\n const target = mutation.target;\n if (!(target instanceof HTMLElement)) return null;\n\n const elementId = getBestIdentifier(target);\n\n if (mutation.type === 'attributes') {\n return {\n timestamp: Date.now(),\n type: 'attribute',\n elementId,\n tagName: target.tagName.toLowerCase(),\n details: {\n attributeName: mutation.attributeName || undefined,\n oldValue: mutation.oldValue || undefined,\n newValue: mutation.attributeName\n ? target.getAttribute(mutation.attributeName) || undefined\n : undefined,\n },\n };\n }\n\n if (mutation.type === 'childList') {\n if (mutation.addedNodes.length > 0) {\n return {\n timestamp: Date.now(),\n type: 'added',\n elementId,\n tagName: target.tagName.toLowerCase(),\n details: {\n addedNodes: mutation.addedNodes.length,\n },\n };\n }\n if (mutation.removedNodes.length > 0) {\n return {\n timestamp: Date.now(),\n type: 'removed',\n elementId,\n tagName: target.tagName.toLowerCase(),\n details: {\n removedNodes: mutation.removedNodes.length,\n },\n };\n }\n }\n\n return null;\n }\n\n private addChange(change: DOMChange): void {\n this.changes.push(change);\n if (this.changes.length > this.maxChanges) {\n this.changes.shift();\n }\n this.callback?.(change);\n }\n\n getChanges(): DOMChange[] {\n return [...this.changes];\n }\n\n clearChanges(): void {\n this.changes = [];\n }\n}\n","/**\n * Render Log Snapshot Module\n *\n * Manages render log entries and provides persistence options.\n */\n\nimport type { DOMSnapshot, DOMChange, CaptureOptions } from './dom-capture';\nimport { captureDOMSnapshot, DOMChangeObserver } from './dom-capture';\n\n/**\n * Render log entry types\n */\nexport type RenderLogEntryType =\n | 'snapshot'\n | 'change'\n | 'navigation'\n | 'interaction'\n | 'error'\n | 'custom';\n\n/**\n * Base render log entry\n */\nexport interface RenderLogEntry {\n /** Unique entry ID */\n id: string;\n /** Entry type */\n type: RenderLogEntryType;\n /** Timestamp */\n timestamp: number;\n /** Entry data */\n data: unknown;\n /** Optional metadata */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Snapshot entry\n */\nexport interface SnapshotEntry extends RenderLogEntry {\n type: 'snapshot';\n data: DOMSnapshot;\n}\n\n/**\n * Change entry\n */\nexport interface ChangeEntry extends RenderLogEntry {\n type: 'change';\n data: DOMChange[];\n}\n\n/**\n * Navigation entry\n */\nexport interface NavigationEntry extends RenderLogEntry {\n type: 'navigation';\n data: {\n from: string;\n to: string;\n navigationType: 'push' | 'replace' | 'pop' | 'reload';\n };\n}\n\n/**\n * Interaction entry\n */\nexport interface InteractionEntry extends RenderLogEntry {\n type: 'interaction';\n data: {\n eventType: string;\n targetId?: string;\n targetTagName?: string;\n coordinates?: { x: number; y: number };\n key?: string;\n modifiers?: {\n ctrl: boolean;\n shift: boolean;\n alt: boolean;\n meta: boolean;\n };\n };\n}\n\n/**\n * Error entry\n */\nexport interface ErrorEntry extends RenderLogEntry {\n type: 'error';\n data: {\n message: string;\n stack?: string;\n source?: string;\n lineno?: number;\n colno?: number;\n };\n}\n\n/**\n * Render log storage interface\n */\nexport interface RenderLogStorage {\n /** Append an entry to the log */\n append(entry: RenderLogEntry): Promise<void>;\n /** Get entries by type and/or time range */\n getEntries(options?: {\n type?: RenderLogEntryType;\n since?: number;\n until?: number;\n limit?: number;\n }): Promise<RenderLogEntry[]>;\n /** Clear the log */\n clear(): Promise<void>;\n /** Get total entry count */\n count(): Promise<number>;\n}\n\n/**\n * In-memory render log storage\n */\nexport class InMemoryRenderLogStorage implements RenderLogStorage {\n private entries: RenderLogEntry[] = [];\n private maxEntries: number;\n\n constructor(maxEntries = 1000) {\n this.maxEntries = maxEntries;\n }\n\n async append(entry: RenderLogEntry): Promise<void> {\n this.entries.push(entry);\n while (this.entries.length > this.maxEntries) {\n this.entries.shift();\n }\n }\n\n async getEntries(options?: {\n type?: RenderLogEntryType;\n since?: number;\n until?: number;\n limit?: number;\n }): Promise<RenderLogEntry[]> {\n let results = [...this.entries];\n\n if (options?.type) {\n results = results.filter((e) => e.type === options.type);\n }\n if (options?.since) {\n results = results.filter((e) => e.timestamp >= options.since!);\n }\n if (options?.until) {\n results = results.filter((e) => e.timestamp <= options.until!);\n }\n if (options?.limit) {\n results = results.slice(-options.limit);\n }\n\n return results;\n }\n\n async clear(): Promise<void> {\n this.entries = [];\n }\n\n async count(): Promise<number> {\n return this.entries.length;\n }\n\n /** Get entries synchronously (for in-memory only) */\n getEntriesSync(): RenderLogEntry[] {\n return [...this.entries];\n }\n}\n\n/**\n * Generate unique ID\n */\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Render log manager options\n */\nexport interface RenderLogOptions {\n /** Storage implementation */\n storage?: RenderLogStorage;\n /** Automatically capture snapshots on navigation */\n captureOnNavigation?: boolean;\n /** Automatically capture DOM changes */\n captureChanges?: boolean;\n /** Capture interval for periodic snapshots (ms) */\n snapshotInterval?: number;\n /** Default capture options */\n captureOptions?: CaptureOptions;\n /** Callback when entry is added */\n onEntry?: (entry: RenderLogEntry) => void;\n /** Maximum entries to keep */\n maxEntries?: number;\n}\n\n/**\n * Render Log Manager\n *\n * Central manager for capturing and storing render logs.\n */\nexport class RenderLogManager {\n private storage: RenderLogStorage;\n private changeObserver: DOMChangeObserver | null = null;\n private snapshotTimer: ReturnType<typeof setInterval> | null = null;\n private pendingChanges: DOMChange[] = [];\n private options: RenderLogOptions;\n private started = false;\n\n constructor(options: RenderLogOptions = {}) {\n this.options = options;\n this.storage = options.storage ?? new InMemoryRenderLogStorage(options.maxEntries);\n }\n\n /**\n * Start capturing\n */\n start(): void {\n if (this.started) return;\n this.started = true;\n\n // Set up change observer\n if (this.options.captureChanges !== false) {\n this.changeObserver = new DOMChangeObserver({\n callback: (change) => {\n this.pendingChanges.push(change);\n },\n });\n this.changeObserver.start();\n }\n\n // Set up navigation observer\n if (this.options.captureOnNavigation !== false) {\n this.setupNavigationObserver();\n }\n\n // Set up periodic snapshots\n if (this.options.snapshotInterval) {\n this.snapshotTimer = setInterval(() => {\n this.captureSnapshot();\n }, this.options.snapshotInterval);\n }\n\n // Capture initial snapshot\n this.captureSnapshot();\n }\n\n /**\n * Stop capturing\n */\n stop(): void {\n if (!this.started) return;\n this.started = false;\n\n this.changeObserver?.stop();\n this.changeObserver = null;\n\n if (this.snapshotTimer) {\n clearInterval(this.snapshotTimer);\n this.snapshotTimer = null;\n }\n }\n\n /**\n * Capture a DOM snapshot\n */\n async captureSnapshot(metadata?: Record<string, unknown>): Promise<SnapshotEntry> {\n // Flush pending changes first\n if (this.pendingChanges.length > 0) {\n await this.flushChanges();\n }\n\n const snapshot = captureDOMSnapshot(this.options.captureOptions);\n const entry: SnapshotEntry = {\n id: generateId(),\n type: 'snapshot',\n timestamp: snapshot.timestamp,\n data: snapshot,\n metadata,\n };\n\n await this.addEntry(entry);\n return entry;\n }\n\n /**\n * Flush pending DOM changes\n */\n async flushChanges(): Promise<ChangeEntry | null> {\n if (this.pendingChanges.length === 0) return null;\n\n const changes = [...this.pendingChanges];\n this.pendingChanges = [];\n\n const entry: ChangeEntry = {\n id: generateId(),\n type: 'change',\n timestamp: Date.now(),\n data: changes,\n };\n\n await this.addEntry(entry);\n return entry;\n }\n\n /**\n * Log an interaction\n */\n async logInteraction(\n eventType: string,\n details: Omit<InteractionEntry['data'], 'eventType'>\n ): Promise<InteractionEntry> {\n const entry: InteractionEntry = {\n id: generateId(),\n type: 'interaction',\n timestamp: Date.now(),\n data: {\n eventType,\n ...details,\n },\n };\n\n await this.addEntry(entry);\n return entry;\n }\n\n /**\n * Log an error\n */\n async logError(\n message: string,\n details?: Omit<ErrorEntry['data'], 'message'>\n ): Promise<ErrorEntry> {\n const entry: ErrorEntry = {\n id: generateId(),\n type: 'error',\n timestamp: Date.now(),\n data: {\n message,\n ...details,\n },\n };\n\n await this.addEntry(entry);\n return entry;\n }\n\n /**\n * Log a navigation\n */\n async logNavigation(\n from: string,\n to: string,\n navigationType: NavigationEntry['data']['navigationType']\n ): Promise<NavigationEntry> {\n const entry: NavigationEntry = {\n id: generateId(),\n type: 'navigation',\n timestamp: Date.now(),\n data: {\n from,\n to,\n navigationType,\n },\n };\n\n await this.addEntry(entry);\n return entry;\n }\n\n /**\n * Add a custom entry\n */\n async logCustom(data: unknown, metadata?: Record<string, unknown>): Promise<RenderLogEntry> {\n const entry: RenderLogEntry = {\n id: generateId(),\n type: 'custom',\n timestamp: Date.now(),\n data,\n metadata,\n };\n\n await this.addEntry(entry);\n return entry;\n }\n\n /**\n * Get log entries\n */\n async getEntries(options?: {\n type?: RenderLogEntryType;\n since?: number;\n until?: number;\n limit?: number;\n }): Promise<RenderLogEntry[]> {\n return this.storage.getEntries(options);\n }\n\n /**\n * Clear the log\n */\n async clear(): Promise<void> {\n this.pendingChanges = [];\n await this.storage.clear();\n }\n\n /**\n * Get entry count\n */\n async count(): Promise<number> {\n return this.storage.count();\n }\n\n /**\n * Get the latest snapshot\n */\n async getLatestSnapshot(): Promise<SnapshotEntry | null> {\n const snapshots = await this.storage.getEntries({ type: 'snapshot', limit: 1 });\n return (snapshots[0] as SnapshotEntry) || null;\n }\n\n private async addEntry(entry: RenderLogEntry): Promise<void> {\n await this.storage.append(entry);\n this.options.onEntry?.(entry);\n }\n\n private setupNavigationObserver(): void {\n let lastUrl = window.location.href;\n\n // History API\n const originalPushState = history.pushState;\n const originalReplaceState = history.replaceState;\n\n history.pushState = (...args) => {\n const result = originalPushState.apply(history, args);\n const newUrl = window.location.href;\n if (newUrl !== lastUrl) {\n this.logNavigation(lastUrl, newUrl, 'push');\n this.captureSnapshot({ trigger: 'navigation' });\n lastUrl = newUrl;\n }\n return result;\n };\n\n history.replaceState = (...args) => {\n const result = originalReplaceState.apply(history, args);\n const newUrl = window.location.href;\n if (newUrl !== lastUrl) {\n this.logNavigation(lastUrl, newUrl, 'replace');\n this.captureSnapshot({ trigger: 'navigation' });\n lastUrl = newUrl;\n }\n return result;\n };\n\n // Popstate (back/forward)\n window.addEventListener('popstate', () => {\n const newUrl = window.location.href;\n if (newUrl !== lastUrl) {\n this.logNavigation(lastUrl, newUrl, 'pop');\n this.captureSnapshot({ trigger: 'navigation' });\n lastUrl = newUrl;\n }\n });\n }\n}\n\n/**\n * Create a render log manager with default options\n */\nexport function createRenderLogManager(options?: RenderLogOptions): RenderLogManager {\n return new RenderLogManager(options);\n}\n"]}
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
import { a as ActionRequest, b as ActionResponse, a0 as WaitOptions, h as ElementState } from './types-BpvpStn3.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Control Module Types
|
|
5
|
+
*
|
|
6
|
+
* Types for the control protocol and action execution.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Extended action request with additional options
|
|
11
|
+
*/
|
|
12
|
+
interface ControlActionRequest extends ActionRequest {
|
|
13
|
+
/** Unique request ID for tracking */
|
|
14
|
+
requestId?: string;
|
|
15
|
+
/** Capture snapshot after action */
|
|
16
|
+
captureAfter?: boolean;
|
|
17
|
+
/** Retry options if action fails */
|
|
18
|
+
retryOptions?: {
|
|
19
|
+
maxRetries: number;
|
|
20
|
+
retryDelay: number;
|
|
21
|
+
retryOn?: ('timeout' | 'notFound' | 'disabled' | 'error')[];
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Extended action response with additional info
|
|
26
|
+
*/
|
|
27
|
+
interface ControlActionResponse extends ActionResponse {
|
|
28
|
+
/** Request ID if provided */
|
|
29
|
+
requestId?: string;
|
|
30
|
+
/** Snapshot captured after action */
|
|
31
|
+
snapshot?: unknown;
|
|
32
|
+
/** Number of retries attempted */
|
|
33
|
+
retryCount?: number;
|
|
34
|
+
/** Wait duration before action */
|
|
35
|
+
waitDurationMs?: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Component action request
|
|
39
|
+
*/
|
|
40
|
+
interface ComponentActionRequest {
|
|
41
|
+
/** Action ID to execute */
|
|
42
|
+
action: string;
|
|
43
|
+
/** Action parameters */
|
|
44
|
+
params?: Record<string, unknown>;
|
|
45
|
+
/** Unique request ID */
|
|
46
|
+
requestId?: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Component action response
|
|
50
|
+
*/
|
|
51
|
+
interface ComponentActionResponse {
|
|
52
|
+
/** Whether the action succeeded */
|
|
53
|
+
success: boolean;
|
|
54
|
+
/** Result from the action */
|
|
55
|
+
result?: unknown;
|
|
56
|
+
/** Error message if failed */
|
|
57
|
+
error?: string;
|
|
58
|
+
/** Stack trace if failed */
|
|
59
|
+
stack?: string;
|
|
60
|
+
/** Duration of the action */
|
|
61
|
+
durationMs: number;
|
|
62
|
+
/** Timestamp when completed */
|
|
63
|
+
timestamp: number;
|
|
64
|
+
/** Request ID if provided */
|
|
65
|
+
requestId?: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Workflow run request
|
|
69
|
+
*/
|
|
70
|
+
interface WorkflowRunRequest {
|
|
71
|
+
/** Parameters for the workflow */
|
|
72
|
+
params?: Record<string, unknown>;
|
|
73
|
+
/** Request ID for tracking */
|
|
74
|
+
requestId?: string;
|
|
75
|
+
/** Start from a specific step */
|
|
76
|
+
startStep?: string;
|
|
77
|
+
/** Stop at a specific step */
|
|
78
|
+
stopStep?: string;
|
|
79
|
+
/** Step timeout */
|
|
80
|
+
stepTimeout?: number;
|
|
81
|
+
/** Total workflow timeout */
|
|
82
|
+
workflowTimeout?: number;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Workflow step result
|
|
86
|
+
*/
|
|
87
|
+
interface WorkflowStepResult {
|
|
88
|
+
/** Step ID */
|
|
89
|
+
stepId: string;
|
|
90
|
+
/** Step type */
|
|
91
|
+
stepType: string;
|
|
92
|
+
/** Whether the step succeeded */
|
|
93
|
+
success: boolean;
|
|
94
|
+
/** Step result */
|
|
95
|
+
result?: unknown;
|
|
96
|
+
/** Error if failed */
|
|
97
|
+
error?: string;
|
|
98
|
+
/** Duration in milliseconds */
|
|
99
|
+
durationMs: number;
|
|
100
|
+
/** Timestamp when completed */
|
|
101
|
+
timestamp: number;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Workflow run status
|
|
105
|
+
*/
|
|
106
|
+
type WorkflowRunStatus = 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
|
|
107
|
+
/**
|
|
108
|
+
* Workflow run response
|
|
109
|
+
*/
|
|
110
|
+
interface WorkflowRunResponse {
|
|
111
|
+
/** Workflow ID */
|
|
112
|
+
workflowId: string;
|
|
113
|
+
/** Run ID for tracking */
|
|
114
|
+
runId: string;
|
|
115
|
+
/** Current status */
|
|
116
|
+
status: WorkflowRunStatus;
|
|
117
|
+
/** Step results */
|
|
118
|
+
steps: WorkflowStepResult[];
|
|
119
|
+
/** Current step index */
|
|
120
|
+
currentStep?: number;
|
|
121
|
+
/** Total steps */
|
|
122
|
+
totalSteps: number;
|
|
123
|
+
/** Overall success */
|
|
124
|
+
success?: boolean;
|
|
125
|
+
/** Error message if failed */
|
|
126
|
+
error?: string;
|
|
127
|
+
/** Start timestamp */
|
|
128
|
+
startedAt: number;
|
|
129
|
+
/** End timestamp */
|
|
130
|
+
completedAt?: number;
|
|
131
|
+
/** Total duration */
|
|
132
|
+
durationMs?: number;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Element info for discovery
|
|
136
|
+
*/
|
|
137
|
+
interface DiscoveredElement {
|
|
138
|
+
/** Element ID */
|
|
139
|
+
id: string;
|
|
140
|
+
/** Element type */
|
|
141
|
+
type: string;
|
|
142
|
+
/** Human-readable label */
|
|
143
|
+
label?: string;
|
|
144
|
+
/** Tag name */
|
|
145
|
+
tagName: string;
|
|
146
|
+
/** Role attribute */
|
|
147
|
+
role?: string;
|
|
148
|
+
/** Accessible name */
|
|
149
|
+
accessibleName?: string;
|
|
150
|
+
/** Available actions */
|
|
151
|
+
actions: string[];
|
|
152
|
+
/** Current state */
|
|
153
|
+
state: ElementState;
|
|
154
|
+
/** Whether registered with UI Bridge */
|
|
155
|
+
registered: boolean;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Find request options
|
|
159
|
+
*
|
|
160
|
+
* Used to find/discover controllable elements in the UI.
|
|
161
|
+
*/
|
|
162
|
+
interface FindRequest {
|
|
163
|
+
/** Root element selector to start from */
|
|
164
|
+
root?: string;
|
|
165
|
+
/** Only find interactive elements */
|
|
166
|
+
interactiveOnly?: boolean;
|
|
167
|
+
/** Include hidden elements */
|
|
168
|
+
includeHidden?: boolean;
|
|
169
|
+
/** Maximum elements to return */
|
|
170
|
+
limit?: number;
|
|
171
|
+
/** Filter by element type */
|
|
172
|
+
types?: string[];
|
|
173
|
+
/** Filter by selector */
|
|
174
|
+
selector?: string;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Find response
|
|
178
|
+
*
|
|
179
|
+
* Response from finding/discovering controllable elements.
|
|
180
|
+
*/
|
|
181
|
+
interface FindResponse {
|
|
182
|
+
/** Found elements */
|
|
183
|
+
elements: DiscoveredElement[];
|
|
184
|
+
/** Total elements found */
|
|
185
|
+
total: number;
|
|
186
|
+
/** Find duration */
|
|
187
|
+
durationMs: number;
|
|
188
|
+
/** Timestamp */
|
|
189
|
+
timestamp: number;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* @deprecated Use FindRequest instead
|
|
193
|
+
*/
|
|
194
|
+
type DiscoveryRequest = FindRequest;
|
|
195
|
+
/**
|
|
196
|
+
* @deprecated Use FindResponse instead
|
|
197
|
+
*/
|
|
198
|
+
type DiscoveryResponse = FindResponse;
|
|
199
|
+
/**
|
|
200
|
+
* Control snapshot - full state of controllable UI
|
|
201
|
+
*/
|
|
202
|
+
interface ControlSnapshot {
|
|
203
|
+
/** Timestamp */
|
|
204
|
+
timestamp: number;
|
|
205
|
+
/** All registered elements */
|
|
206
|
+
elements: Array<{
|
|
207
|
+
id: string;
|
|
208
|
+
type: string;
|
|
209
|
+
label?: string;
|
|
210
|
+
actions: string[];
|
|
211
|
+
state: ElementState;
|
|
212
|
+
}>;
|
|
213
|
+
/** All registered components */
|
|
214
|
+
components: Array<{
|
|
215
|
+
id: string;
|
|
216
|
+
name: string;
|
|
217
|
+
actions: string[];
|
|
218
|
+
}>;
|
|
219
|
+
/** Available workflows */
|
|
220
|
+
workflows: Array<{
|
|
221
|
+
id: string;
|
|
222
|
+
name: string;
|
|
223
|
+
stepCount: number;
|
|
224
|
+
}>;
|
|
225
|
+
/** Active workflow runs */
|
|
226
|
+
activeRuns: Array<{
|
|
227
|
+
runId: string;
|
|
228
|
+
workflowId: string;
|
|
229
|
+
status: WorkflowRunStatus;
|
|
230
|
+
currentStep: number;
|
|
231
|
+
totalSteps: number;
|
|
232
|
+
}>;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Action types for keyboard input
|
|
236
|
+
*/
|
|
237
|
+
interface KeyboardAction {
|
|
238
|
+
/** Key to press */
|
|
239
|
+
key: string;
|
|
240
|
+
/** Key modifiers */
|
|
241
|
+
modifiers?: {
|
|
242
|
+
ctrl?: boolean;
|
|
243
|
+
shift?: boolean;
|
|
244
|
+
alt?: boolean;
|
|
245
|
+
meta?: boolean;
|
|
246
|
+
};
|
|
247
|
+
/** Hold duration for key press */
|
|
248
|
+
holdDuration?: number;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Action types for mouse input
|
|
252
|
+
*/
|
|
253
|
+
interface MouseAction {
|
|
254
|
+
/** Mouse button */
|
|
255
|
+
button?: 'left' | 'right' | 'middle';
|
|
256
|
+
/** Click count */
|
|
257
|
+
clickCount?: number;
|
|
258
|
+
/** Coordinates relative to element */
|
|
259
|
+
position?: {
|
|
260
|
+
x: number;
|
|
261
|
+
y: number;
|
|
262
|
+
};
|
|
263
|
+
/** Hold duration for click */
|
|
264
|
+
holdDuration?: number;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Action types for scroll input
|
|
268
|
+
*/
|
|
269
|
+
interface ScrollAction {
|
|
270
|
+
/** Scroll direction */
|
|
271
|
+
direction?: 'up' | 'down' | 'left' | 'right';
|
|
272
|
+
/** Scroll amount in pixels */
|
|
273
|
+
amount?: number;
|
|
274
|
+
/** Scroll to specific position */
|
|
275
|
+
position?: {
|
|
276
|
+
x: number;
|
|
277
|
+
y: number;
|
|
278
|
+
};
|
|
279
|
+
/** Scroll to element */
|
|
280
|
+
toElement?: string;
|
|
281
|
+
/** Smooth scroll */
|
|
282
|
+
smooth?: boolean;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Type action for text input
|
|
286
|
+
*/
|
|
287
|
+
interface TypeAction {
|
|
288
|
+
/** Text to type */
|
|
289
|
+
text: string;
|
|
290
|
+
/** Clear existing value first */
|
|
291
|
+
clear?: boolean;
|
|
292
|
+
/** Delay between keystrokes (ms) */
|
|
293
|
+
delay?: number;
|
|
294
|
+
/** Trigger events (input, change) */
|
|
295
|
+
triggerEvents?: boolean;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Select action for dropdowns
|
|
299
|
+
*/
|
|
300
|
+
interface SelectAction {
|
|
301
|
+
/** Value(s) to select */
|
|
302
|
+
value: string | string[];
|
|
303
|
+
/** Select by label instead of value */
|
|
304
|
+
byLabel?: boolean;
|
|
305
|
+
/** For multi-select: add to selection */
|
|
306
|
+
additive?: boolean;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Wait condition result
|
|
310
|
+
*/
|
|
311
|
+
interface WaitResult {
|
|
312
|
+
/** Whether the condition was met */
|
|
313
|
+
met: boolean;
|
|
314
|
+
/** Time waited in milliseconds */
|
|
315
|
+
waitedMs: number;
|
|
316
|
+
/** Final state when resolved */
|
|
317
|
+
state?: ElementState;
|
|
318
|
+
/** Error if timed out */
|
|
319
|
+
error?: string;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Action executor interface
|
|
323
|
+
*/
|
|
324
|
+
interface ActionExecutor {
|
|
325
|
+
/** Execute an action on an element */
|
|
326
|
+
executeAction(elementId: string, action: ControlActionRequest): Promise<ControlActionResponse>;
|
|
327
|
+
/** Execute an action on a component */
|
|
328
|
+
executeComponentAction(componentId: string, action: ComponentActionRequest): Promise<ComponentActionResponse>;
|
|
329
|
+
/** Wait for a condition */
|
|
330
|
+
waitFor(elementId: string, options: WaitOptions): Promise<WaitResult>;
|
|
331
|
+
/** Find controllable elements */
|
|
332
|
+
find(options?: FindRequest): Promise<FindResponse>;
|
|
333
|
+
/**
|
|
334
|
+
* @deprecated Use find() instead
|
|
335
|
+
*/
|
|
336
|
+
discover(options?: FindRequest): Promise<FindResponse>;
|
|
337
|
+
/** Get control snapshot */
|
|
338
|
+
getSnapshot(): Promise<ControlSnapshot>;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Workflow engine interface
|
|
342
|
+
*/
|
|
343
|
+
interface WorkflowEngine {
|
|
344
|
+
/** Run a workflow */
|
|
345
|
+
run(workflowId: string, request?: WorkflowRunRequest): Promise<WorkflowRunResponse>;
|
|
346
|
+
/** Get workflow run status */
|
|
347
|
+
getRunStatus(runId: string): Promise<WorkflowRunResponse | null>;
|
|
348
|
+
/** Cancel a running workflow */
|
|
349
|
+
cancel(runId: string): Promise<boolean>;
|
|
350
|
+
/** List active runs */
|
|
351
|
+
listActiveRuns(): Promise<WorkflowRunResponse[]>;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
export type { ActionExecutor as A, ComponentActionRequest as C, DiscoveredElement as D, FindRequest as F, KeyboardAction as K, MouseAction as M, ScrollAction as S, TypeAction as T, WaitResult as W, ComponentActionResponse as a, ControlActionRequest as b, ControlActionResponse as c, ControlSnapshot as d, DiscoveryRequest as e, DiscoveryResponse as f, FindResponse as g, SelectAction as h, WorkflowEngine as i, WorkflowRunRequest as j, WorkflowRunResponse as k, WorkflowRunStatus as l, WorkflowStepResult as m };
|