{"version":3,"sources":["../typescript/src/core/semantic-dom.ts","../typescript/src/toon/index.ts","../typescript/src/mcp/index.ts","../typescript/src/summary/index.ts","../typescript/src/index.ts"],"names":["encode","toon","decode"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * SemanticDOM Core Implementation\n * Provides O(1) lookup and deterministic navigation\n */\n\nimport type {\n  SemanticNode,\n  SemanticId,\n  SemanticDocument,\n  SemanticRole,\n  SemanticIntent,\n  StateType,\n  SemanticQuery,\n  SemanticDOMConfig,\n  NavigationOptions,\n  SemanticA11y,\n  SemanticBounds,\n  SSGNode,\n  StateTransition,\n  AgentCertification,\n  ValidationCheck,\n} from './types.js';\n\n/**\n * SECURITY: Allowed URL protocols for document URLs\n */\nconst ALLOWED_URL_PROTOCOLS = ['https:', 'http:', 'file:'];\n\n/**\n * Validate and sanitize a URL\n * @returns Sanitized URL or empty string if invalid\n */\nfunction validateAndSanitizeUrl(url: string): string {\n  if (!url || typeof url !== 'string') return '';\n\n  try {\n    // Handle relative URLs and special cases\n    if (url === '' || url.startsWith('/') || url.startsWith('./') || url.startsWith('../')) {\n      return url; // Relative URLs are safe\n    }\n\n    const parsed = new URL(url);\n\n    // SECURITY: Only allow safe protocols\n    if (!ALLOWED_URL_PROTOCOLS.includes(parsed.protocol)) {\n      console.warn(`SemanticDOM: Blocked URL with disallowed protocol: ${parsed.protocol}`);\n      return '';\n    }\n\n    // Return the sanitized URL (normalized by URL parser)\n    return parsed.href;\n  } catch {\n    // Invalid URL format - could be a relative path without prefix\n    // Only allow alphanumeric paths and common safe characters\n    if (/^[\\w\\-./]+$/.test(url)) {\n      return url;\n    }\n    return '';\n  }\n}\n\n/**\n * Default configuration for SemanticDOM\n */\nconst DEFAULT_CONFIG: Required<SemanticDOMConfig> = {\n  computeBounds: true,\n  includeStateGraph: true,\n  maxDepth: 50,\n  exclude: ['script', 'style', 'noscript', 'template'],\n  include: [],\n  roleMapping: {},\n  intentMapping: {},\n  generateIds: true,\n  idPrefix: 'sdom',\n  validate: true,\n  targetCertification: 'standard',\n};\n\n/**\n * Role mapping from HTML elements to semantic roles\n */\nconst HTML_ROLE_MAP: Record<string, SemanticRole> = {\n  a: 'link',\n  article: 'article',\n  aside: 'aside',\n  button: 'button',\n  dialog: 'dialog',\n  footer: 'footer',\n  form: 'form',\n  h1: 'heading',\n  h2: 'heading',\n  h3: 'heading',\n  h4: 'heading',\n  h5: 'heading',\n  h6: 'heading',\n  header: 'header',\n  img: 'img',\n  input: 'textbox',\n  li: 'listitem',\n  main: 'main',\n  nav: 'navigation',\n  ol: 'list',\n  option: 'option',\n  section: 'section',\n  select: 'listbox',\n  table: 'table',\n  textarea: 'textbox',\n  ul: 'list',\n};\n\n/**\n * Input type to role mapping\n */\nconst INPUT_ROLE_MAP: Record<string, SemanticRole> = {\n  button: 'button',\n  checkbox: 'checkbox',\n  radio: 'radio',\n  range: 'slider',\n  submit: 'button',\n  reset: 'button',\n};\n\n/**\n * Generate unique semantic ID\n */\nexport function generateSemanticId(\n  prefix: string,\n  role: SemanticRole,\n  index: number\n): SemanticId {\n  const hash = Math.random().toString(36).substring(2, 8);\n  return `sdom-${prefix}-${role}-${index}-${hash}` as SemanticId;\n}\n\n/**\n * SemanticDOM class for parsing and navigating semantic documents\n */\nexport class SemanticDOM {\n  private config: Required<SemanticDOMConfig>;\n  private index: Map<SemanticId, SemanticNode> = new Map();\n  private stateGraph: Map<SemanticId, SSGNode> = new Map();\n  private nodeCounter = 0;\n\n  constructor(config: SemanticDOMConfig = {}) {\n    this.config = { ...DEFAULT_CONFIG, ...config };\n  }\n\n  /**\n   * Parse a DOM element into a SemanticDocument\n   */\n  parse(root: Element, url = '', title = ''): SemanticDocument {\n    this.index.clear();\n    this.stateGraph.clear();\n    this.nodeCounter = 0;\n\n    // SECURITY: Validate and sanitize the URL\n    const sanitizedUrl = validateAndSanitizeUrl(url);\n\n    const semanticRoot = this.parseElement(root, 0);\n\n    const document: SemanticDocument = {\n      version: '1.0.0',\n      standard: 'ISO/IEC-SDOM-SSG-DRAFT-2024',\n      url: sanitizedUrl,\n      title: title || this.extractTitle(root),\n      root: semanticRoot,\n      index: this.index,\n      stateGraph: this.stateGraph,\n      landmarks: this.extractLandmarks(semanticRoot),\n      interactables: this.extractInteractables(semanticRoot),\n      language: this.extractLanguage(root),\n      generatedAt: Date.now(),\n      agentReady: this.config.validate\n        ? this.certify(semanticRoot)\n        : this.createEmptyCertification(),\n    };\n\n    return document;\n  }\n\n  /**\n   * Parse a single element into a SemanticNode\n   */\n  private parseElement(element: Element, depth: number, parentId?: SemanticId): SemanticNode {\n    if (depth > this.config.maxDepth) {\n      return this.createGenericNode(element, parentId);\n    }\n\n    const tagName = element.tagName.toLowerCase();\n\n    // Check exclusions\n    if (this.config.exclude.includes(tagName)) {\n      return this.createGenericNode(element, parentId);\n    }\n\n    const role = this.determineRole(element);\n    const id = generateSemanticId(this.config.idPrefix, role, this.nodeCounter++);\n    const state = this.determineState(element);\n    const intent = this.determineIntent(element, role);\n    const a11y = this.extractA11y(element, role);\n\n    const node: SemanticNode = {\n      id,\n      role,\n      label: this.extractLabel(element, a11y),\n      intent,\n      state,\n      stateFlags: this.extractStateFlags(element),\n      value: this.extractValue(element),\n      element: typeof window !== 'undefined' ? element : undefined,\n      selector: this.generateSelector(element),\n      xpath: this.generateXPath(element),\n      bounds: this.config.computeBounds ? this.computeBounds(element) : undefined,\n      children: [],\n      parent: parentId,\n      a11y,\n      metadata: this.extractMetadata(element),\n      updatedAt: Date.now(),\n    };\n\n    // Index the node for O(1) lookup\n    this.index.set(id, node);\n\n    // Create SSG node if configured\n    if (this.config.includeStateGraph && this.isInteractive(node)) {\n      this.stateGraph.set(id, this.createSSGNode(node));\n    }\n\n    // Parse children\n    const children = Array.from(element.children);\n    node.children = children\n      .filter((child) => !this.config.exclude.includes(child.tagName.toLowerCase()))\n      .map((child) => this.parseElement(child, depth + 1, id));\n\n    return node;\n  }\n\n  /**\n   * Determine semantic role for an element\n   */\n  private determineRole(element: Element): SemanticRole {\n    // Check explicit ARIA role\n    const ariaRole = element.getAttribute('role');\n    if (ariaRole && this.isValidRole(ariaRole)) {\n      return ariaRole as SemanticRole;\n    }\n\n    // Check custom role mapping\n    const tagName = element.tagName.toLowerCase();\n    if (this.config.roleMapping[tagName]) {\n      return this.config.roleMapping[tagName];\n    }\n\n    // Check input type\n    if (tagName === 'input') {\n      const inputType = element.getAttribute('type') || 'text';\n      if (INPUT_ROLE_MAP[inputType]) {\n        return INPUT_ROLE_MAP[inputType];\n      }\n    }\n\n    // Use HTML role map\n    if (HTML_ROLE_MAP[tagName]) {\n      return HTML_ROLE_MAP[tagName];\n    }\n\n    return 'generic';\n  }\n\n  /**\n   * Check if a role string is valid\n   */\n  private isValidRole(role: string): boolean {\n    const validRoles: SemanticRole[] = [\n      'document', 'article', 'section', 'navigation', 'main', 'header', 'footer',\n      'aside', 'form', 'button', 'link', 'textbox', 'checkbox', 'radio', 'listbox',\n      'option', 'menu', 'menuitem', 'dialog', 'alert', 'status', 'progressbar',\n      'slider', 'tablist', 'tab', 'tabpanel', 'tree', 'treeitem', 'grid', 'gridcell',\n      'row', 'rowgroup', 'columnheader', 'rowheader', 'img', 'figure', 'table',\n      'heading', 'list', 'listitem', 'landmark', 'region', 'group', 'separator',\n      'tooltip', 'generic',\n    ];\n    return validRoles.includes(role as SemanticRole);\n  }\n\n  /**\n   * Determine current state of an element\n   */\n  private determineState(element: Element): StateType {\n    if (element.hasAttribute('disabled')) return 'disabled';\n    if (element.getAttribute('aria-disabled') === 'true') return 'disabled';\n    if (element.getAttribute('aria-busy') === 'true') return 'loading';\n    if (element.getAttribute('aria-invalid') === 'true') return 'invalid';\n    if (element.getAttribute('aria-selected') === 'true') return 'selected';\n    if (element.getAttribute('aria-expanded') === 'true') return 'expanded';\n    if (element.getAttribute('aria-expanded') === 'false') return 'collapsed';\n    if (element.getAttribute('aria-checked') === 'true') return 'checked';\n    if (element.getAttribute('aria-checked') === 'false') return 'unchecked';\n    if (element.getAttribute('aria-checked') === 'mixed') return 'indeterminate';\n    if (element.hasAttribute('hidden')) return 'hidden';\n    if (element.getAttribute('aria-hidden') === 'true') return 'hidden';\n\n    return 'idle';\n  }\n\n  /**\n   * Extract state flags from element\n   */\n  private extractStateFlags(element: Element): Partial<Record<StateType, boolean>> | undefined {\n    const flags: Partial<Record<StateType, boolean>> = {};\n\n    if (element.hasAttribute('disabled')) flags.disabled = true;\n    if (element.hasAttribute('readonly')) flags.readonly = true;\n    if (element.hasAttribute('required')) flags.required = true;\n    if (element.getAttribute('aria-required') === 'true') flags.required = true;\n    if (element.getAttribute('aria-readonly') === 'true') flags.readonly = true;\n\n    return Object.keys(flags).length > 0 ? flags : undefined;\n  }\n\n  /**\n   * Determine semantic intent for an element\n   */\n  private determineIntent(element: Element, role: SemanticRole): SemanticIntent | undefined {\n    // Check custom intent mapping\n    const tagName = element.tagName.toLowerCase();\n    if (this.config.intentMapping[tagName]) {\n      return this.config.intentMapping[tagName];\n    }\n\n    // Check data attribute\n    const dataIntent = element.getAttribute('data-semantic-intent');\n    if (dataIntent) {\n      return dataIntent as SemanticIntent;\n    }\n\n    // Infer from role\n    switch (role) {\n      case 'link':\n      case 'navigation':\n        return 'navigate';\n      case 'button':\n        return this.inferButtonIntent(element);\n      case 'textbox':\n        return 'input';\n      case 'checkbox':\n      case 'radio':\n        return 'toggle';\n      case 'listbox':\n      case 'option':\n        return 'select';\n      case 'dialog':\n        return 'open';\n      case 'alert':\n        return 'warn';\n      default:\n        return undefined;\n    }\n  }\n\n  /**\n   * Infer intent from button attributes\n   */\n  private inferButtonIntent(element: Element): SemanticIntent {\n    const type = element.getAttribute('type');\n    const text = element.textContent?.toLowerCase() || '';\n    const ariaLabel = element.getAttribute('aria-label')?.toLowerCase() || '';\n\n    if (type === 'submit') return 'submit';\n    if (text.includes('submit') || ariaLabel.includes('submit')) return 'submit';\n    if (text.includes('search') || ariaLabel.includes('search')) return 'search';\n    if (text.includes('cancel') || ariaLabel.includes('cancel')) return 'cancel';\n    if (text.includes('close') || ariaLabel.includes('close')) return 'close';\n    if (text.includes('delete') || ariaLabel.includes('delete')) return 'delete';\n    if (text.includes('confirm') || ariaLabel.includes('confirm')) return 'confirm';\n\n    return 'toggle';\n  }\n\n  /**\n   * Extract accessibility properties\n   */\n  private extractA11y(element: Element, role: SemanticRole): SemanticA11y {\n    const tagName = element.tagName.toLowerCase();\n\n    return {\n      name: this.computeAccessibleName(element),\n      description: element.getAttribute('aria-describedby')\n        ? this.getDescriptionById(element)\n        : element.getAttribute('aria-description') || undefined,\n      live: this.getLiveRegion(element),\n      atomic: element.getAttribute('aria-atomic') === 'true',\n      busy: element.getAttribute('aria-busy') === 'true',\n      current: this.getCurrentValue(element),\n      keyboardShortcut: element.getAttribute('aria-keyshortcuts') || undefined,\n      tabIndex: element.hasAttribute('tabindex')\n        ? parseInt(element.getAttribute('tabindex') || '0', 10)\n        : undefined,\n      focusable: this.isFocusable(element),\n      inTabOrder: this.isInTabOrder(element),\n      level: role === 'heading' ? this.getHeadingLevel(tagName) : undefined,\n      posInSet: this.getPosInSet(element),\n      setSize: this.getSetSize(element),\n    };\n  }\n\n  /**\n   * Compute accessible name for element\n   */\n  private computeAccessibleName(element: Element): string {\n    // Priority: aria-labelledby > aria-label > native label > content\n    const labelledBy = element.getAttribute('aria-labelledby');\n    if (labelledBy) {\n      const labelElement = element.ownerDocument?.getElementById(labelledBy);\n      if (labelElement) {\n        return labelElement.textContent?.trim() || '';\n      }\n    }\n\n    const ariaLabel = element.getAttribute('aria-label');\n    if (ariaLabel) {\n      return ariaLabel;\n    }\n\n    // Check for associated label (for inputs)\n    const id = element.getAttribute('id');\n    if (id) {\n      const label = element.ownerDocument?.querySelector(`label[for=\"${id}\"]`);\n      if (label) {\n        return label.textContent?.trim() || '';\n      }\n    }\n\n    // Use text content for buttons and links\n    const tagName = element.tagName.toLowerCase();\n    if (['button', 'a'].includes(tagName)) {\n      return element.textContent?.trim() || '';\n    }\n\n    // Use alt for images\n    if (tagName === 'img') {\n      return element.getAttribute('alt') || '';\n    }\n\n    // Use title as fallback\n    return element.getAttribute('title') || '';\n  }\n\n  /**\n   * Get description by aria-describedby\n   */\n  private getDescriptionById(element: Element): string | undefined {\n    const describedBy = element.getAttribute('aria-describedby');\n    if (!describedBy) return undefined;\n\n    const ids = describedBy.split(/\\s+/);\n    const descriptions = ids\n      .map((id) => element.ownerDocument?.getElementById(id)?.textContent?.trim())\n      .filter(Boolean);\n\n    return descriptions.length > 0 ? descriptions.join(' ') : undefined;\n  }\n\n  /**\n   * Get live region type\n   */\n  private getLiveRegion(element: Element): 'off' | 'polite' | 'assertive' | undefined {\n    const live = element.getAttribute('aria-live');\n    if (live === 'polite' || live === 'assertive' || live === 'off') {\n      return live;\n    }\n\n    // Check for implicit live regions\n    const role = element.getAttribute('role');\n    if (role === 'alert') return 'assertive';\n    if (role === 'status') return 'polite';\n\n    return undefined;\n  }\n\n  /**\n   * Get aria-current value\n   */\n  private getCurrentValue(\n    element: Element\n  ): 'page' | 'step' | 'location' | 'date' | 'time' | 'true' | 'false' | undefined {\n    const current = element.getAttribute('aria-current');\n    if (!current) return undefined;\n\n    const validValues = ['page', 'step', 'location', 'date', 'time', 'true', 'false'] as const;\n    return validValues.includes(current as (typeof validValues)[number])\n      ? (current as (typeof validValues)[number])\n      : undefined;\n  }\n\n  /**\n   * Check if element is focusable\n   */\n  private isFocusable(element: Element): boolean {\n    const tagName = element.tagName.toLowerCase();\n    const focusableTags = ['a', 'button', 'input', 'select', 'textarea'];\n    const tabIndex = element.getAttribute('tabindex');\n\n    if (element.hasAttribute('disabled')) return false;\n    if (tabIndex === '-1') return true; // Programmatically focusable\n    if (focusableTags.includes(tagName)) return true;\n    if (tabIndex !== null) return true;\n    if (element.getAttribute('contenteditable') === 'true') return true;\n\n    return false;\n  }\n\n  /**\n   * Check if element is in tab order\n   */\n  private isInTabOrder(element: Element): boolean {\n    const tabIndex = element.getAttribute('tabindex');\n\n    if (element.hasAttribute('disabled')) return false;\n    if (tabIndex === '-1') return false;\n    if (this.isFocusable(element)) return true;\n\n    return false;\n  }\n\n  /**\n   * Get heading level from tag name\n   */\n  private getHeadingLevel(tagName: string): number | undefined {\n    const match = tagName.match(/^h([1-6])$/);\n    return match ? parseInt(match[1], 10) : undefined;\n  }\n\n  /**\n   * Get position in set\n   */\n  private getPosInSet(element: Element): number | undefined {\n    const posInSet = element.getAttribute('aria-posinset');\n    return posInSet ? parseInt(posInSet, 10) : undefined;\n  }\n\n  /**\n   * Get set size\n   */\n  private getSetSize(element: Element): number | undefined {\n    const setSize = element.getAttribute('aria-setsize');\n    return setSize ? parseInt(setSize, 10) : undefined;\n  }\n\n  /**\n   * Extract label for node\n   */\n  private extractLabel(element: Element, a11y: SemanticA11y): string {\n    if (a11y.name) return a11y.name;\n\n    const tagName = element.tagName.toLowerCase();\n    const role = element.getAttribute('role');\n\n    // Use tag name as fallback\n    return role || tagName;\n  }\n\n  /**\n   * Extract value from interactive elements\n   */\n  private extractValue(element: Element): string | number | boolean | undefined {\n    const tagName = element.tagName.toLowerCase();\n\n    if (tagName === 'input') {\n      const type = element.getAttribute('type') || 'text';\n      const value = element.getAttribute('value');\n\n      if (type === 'checkbox' || type === 'radio') {\n        return (element as HTMLInputElement).checked;\n      }\n      if (type === 'number' || type === 'range') {\n        return value ? parseFloat(value) : undefined;\n      }\n      return value || undefined;\n    }\n\n    if (tagName === 'textarea' || tagName === 'select') {\n      return element.textContent?.trim() || undefined;\n    }\n\n    // Check aria-valuenow for sliders\n    const valueNow = element.getAttribute('aria-valuenow');\n    if (valueNow) {\n      return parseFloat(valueNow);\n    }\n\n    return undefined;\n  }\n\n  /**\n   * Generate CSS selector for element\n   */\n  private generateSelector(element: Element): string {\n    const parts: string[] = [];\n    let current: Element | null = element;\n\n    while (current && current !== current.ownerDocument?.documentElement) {\n      let selector = current.tagName.toLowerCase();\n\n      if (current.id) {\n        selector = `#${CSS.escape(current.id)}`;\n        parts.unshift(selector);\n        break;\n      }\n\n      const classes = Array.from(current.classList);\n      if (classes.length > 0) {\n        selector += `.${classes.map((c) => CSS.escape(c)).join('.')}`;\n      }\n\n      // Add nth-child for disambiguation\n      const parent = current.parentElement;\n      if (parent) {\n        const siblings = Array.from(parent.children).filter(\n          (s) => s.tagName === current!.tagName\n        );\n        if (siblings.length > 1) {\n          const index = siblings.indexOf(current) + 1;\n          selector += `:nth-of-type(${index})`;\n        }\n      }\n\n      parts.unshift(selector);\n      current = current.parentElement;\n    }\n\n    return parts.join(' > ');\n  }\n\n  /**\n   * Generate XPath for element\n   */\n  private generateXPath(element: Element): string {\n    const parts: string[] = [];\n    let current: Element | null = element;\n\n    while (current && current.nodeType === 1) {\n      let index = 1;\n      let sibling: Element | null = current.previousElementSibling;\n\n      while (sibling) {\n        if (sibling.tagName === current.tagName) {\n          index++;\n        }\n        sibling = sibling.previousElementSibling;\n      }\n\n      const tagName = current.tagName.toLowerCase();\n      parts.unshift(`${tagName}[${index}]`);\n      current = current.parentElement;\n    }\n\n    return '/' + parts.join('/');\n  }\n\n  /**\n   * Compute bounding box for element\n   */\n  private computeBounds(element: Element): SemanticBounds | undefined {\n    if (typeof window === 'undefined') return undefined;\n\n    try {\n      const rect = element.getBoundingClientRect();\n      return {\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    } catch {\n      return undefined;\n    }\n  }\n\n  /**\n   * Extract custom metadata from element\n   */\n  private extractMetadata(element: Element): Record<string, unknown> | undefined {\n    const metadata: Record<string, unknown> = {};\n\n    // Extract data-semantic-* attributes\n    Array.from(element.attributes)\n      .filter((attr) => attr.name.startsWith('data-semantic-'))\n      .forEach((attr) => {\n        const key = attr.name.replace('data-semantic-', '');\n        try {\n          metadata[key] = JSON.parse(attr.value);\n        } catch {\n          metadata[key] = attr.value;\n        }\n      });\n\n    return Object.keys(metadata).length > 0 ? metadata : undefined;\n  }\n\n  /**\n   * Check if node is interactive\n   */\n  private isInteractive(node: SemanticNode): boolean {\n    const interactiveRoles: SemanticRole[] = [\n      'button', 'link', 'textbox', 'checkbox', 'radio', 'listbox', 'option',\n      'menu', 'menuitem', 'slider', 'tab', 'treeitem', 'gridcell',\n    ];\n    return interactiveRoles.includes(node.role);\n  }\n\n  /**\n   * Create SSG node for state management\n   */\n  private createSSGNode(node: SemanticNode): SSGNode {\n    return {\n      semanticId: node.id,\n      currentState: node.state,\n      transitions: this.inferTransitions(node),\n      history: [],\n      maxHistory: 100,\n      relations: [],\n    };\n  }\n\n  /**\n   * Infer state transitions based on role and current state\n   */\n  private inferTransitions(node: SemanticNode): StateTransition[] {\n    const transitions: StateTransition[] = [];\n\n    switch (node.role) {\n      case 'button':\n        transitions.push(\n          { from: 'idle', to: 'loading', trigger: 'submit', actions: [{ type: 'emit', payload: 'click' }] },\n          { from: 'loading', to: 'success', trigger: 'complete' },\n          { from: 'loading', to: 'error', trigger: 'fail' },\n          { from: 'success', to: 'idle', trigger: 'reset' },\n          { from: 'error', to: 'idle', trigger: 'dismiss' }\n        );\n        break;\n\n      case 'checkbox':\n      case 'radio':\n        transitions.push(\n          { from: 'unchecked', to: 'checked', trigger: 'toggle' },\n          { from: 'checked', to: 'unchecked', trigger: 'toggle' }\n        );\n        break;\n\n      case 'textbox':\n        transitions.push(\n          { from: 'idle', to: 'focused', trigger: 'input' },\n          { from: 'focused', to: 'valid', trigger: 'validate' },\n          { from: 'focused', to: 'invalid', trigger: 'validate' },\n          { from: 'valid', to: 'idle', trigger: 'blur' },\n          { from: 'invalid', to: 'idle', trigger: 'blur' }\n        );\n        break;\n\n      default:\n        transitions.push(\n          { from: 'idle', to: 'focused', trigger: 'focus' },\n          { from: 'focused', to: 'idle', trigger: 'blur' }\n        );\n    }\n\n    return transitions;\n  }\n\n  /**\n   * Create a generic node for excluded/hidden elements\n   */\n  private createGenericNode(element: Element, parentId?: SemanticId): SemanticNode {\n    const id = generateSemanticId(this.config.idPrefix, 'generic', this.nodeCounter++);\n\n    return {\n      id,\n      role: 'generic',\n      label: element.tagName.toLowerCase(),\n      state: 'hidden',\n      selector: this.generateSelector(element),\n      xpath: this.generateXPath(element),\n      children: [],\n      parent: parentId,\n      a11y: {\n        name: '',\n        focusable: false,\n        inTabOrder: false,\n      },\n      updatedAt: Date.now(),\n    };\n  }\n\n  /**\n   * Extract document title\n   */\n  private extractTitle(root: Element): string {\n    const doc = root.ownerDocument;\n    if (doc) {\n      return doc.title || '';\n    }\n    return '';\n  }\n\n  /**\n   * Extract document language\n   */\n  private extractLanguage(root: Element): string {\n    const doc = root.ownerDocument;\n    if (doc) {\n      return doc.documentElement.lang || 'en';\n    }\n    return 'en';\n  }\n\n  /**\n   * Extract landmark elements\n   */\n  private extractLandmarks(root: SemanticNode): SemanticNode[] {\n    const landmarkRoles: SemanticRole[] = [\n      'main', 'navigation', 'header', 'footer', 'aside', 'section', 'article',\n    ];\n\n    return this.query(root, { role: landmarkRoles, deep: true });\n  }\n\n  /**\n   * Extract interactive elements\n   */\n  private extractInteractables(root: SemanticNode): SemanticNode[] {\n    return this.query(root, { interactive: true, deep: true });\n  }\n\n  /**\n   * Query semantic nodes\n   */\n  query(root: SemanticNode, query: SemanticQuery): SemanticNode[] {\n    const results: SemanticNode[] = [];\n\n    const matches = (node: SemanticNode): boolean => {\n      if (query.role) {\n        const roles = Array.isArray(query.role) ? query.role : [query.role];\n        if (!roles.includes(node.role)) return false;\n      }\n\n      if (query.intent) {\n        const intents = Array.isArray(query.intent) ? query.intent : [query.intent];\n        if (!node.intent || !intents.includes(node.intent)) return false;\n      }\n\n      if (query.state) {\n        const states = Array.isArray(query.state) ? query.state : [query.state];\n        if (!states.includes(node.state)) return false;\n      }\n\n      if (query.text) {\n        const text = node.label || '';\n        if (typeof query.text === 'string') {\n          if (!text.toLowerCase().includes(query.text.toLowerCase())) return false;\n        } else if (!query.text.test(text)) {\n          return false;\n        }\n      }\n\n      if (query.interactive && !this.isInteractive(node)) return false;\n      if (query.visible && node.state === 'hidden') return false;\n      if (query.focusable && !node.a11y.focusable) return false;\n      if (query.filter && !query.filter(node)) return false;\n\n      return true;\n    };\n\n    const traverse = (node: SemanticNode) => {\n      if (matches(node)) {\n        results.push(node);\n        if (query.limit && results.length >= query.limit) return;\n      }\n\n      if (query.deep !== false) {\n        for (const child of node.children) {\n          if (query.limit && results.length >= query.limit) break;\n          traverse(child);\n        }\n      }\n    };\n\n    traverse(root);\n    return results;\n  }\n\n  /**\n   * Navigate to next semantic node\n   */\n  navigate(\n    document: SemanticDocument,\n    currentId: SemanticId,\n    options: NavigationOptions\n  ): SemanticNode | null {\n    const current = document.index.get(currentId);\n    if (!current) return null;\n\n    const { direction, filter, wrap, skipHidden, focusableOnly } = options;\n\n    const isValid = (node: SemanticNode): boolean => {\n      if (skipHidden && node.state === 'hidden') return false;\n      if (focusableOnly && !node.a11y.focusable) return false;\n      if (filter) {\n        const matches = this.query(node, { ...filter, deep: false });\n        if (matches.length === 0) return false;\n      }\n      return true;\n    };\n\n    switch (direction) {\n      case 'parent':\n        if (!current.parent) return null;\n        return document.index.get(current.parent) || null;\n\n      case 'firstChild':\n        return current.children.find(isValid) || null;\n\n      case 'lastChild':\n        return [...current.children].reverse().find(isValid) || null;\n\n      case 'nextSibling':\n      case 'previousSibling': {\n        const parent = current.parent ? document.index.get(current.parent) : null;\n        if (!parent) return null;\n\n        const siblings = parent.children;\n        const index = siblings.findIndex((s) => s.id === currentId);\n        if (index === -1) return null;\n\n        if (direction === 'nextSibling') {\n          const next = siblings.slice(index + 1).find(isValid);\n          return next || (wrap ? siblings.find(isValid) : null) || null;\n        } else {\n          const prev = siblings.slice(0, index).reverse().find(isValid);\n          return prev || (wrap ? [...siblings].reverse().find(isValid) : null) || null;\n        }\n      }\n\n      case 'next':\n      case 'previous':\n      case 'first':\n      case 'last': {\n        const all = this.flattenTree(document.root).filter(isValid);\n        if (all.length === 0) return null;\n\n        if (direction === 'first') return all[0];\n        if (direction === 'last') return all[all.length - 1];\n\n        const index = all.findIndex((n) => n.id === currentId);\n        if (index === -1) return null;\n\n        if (direction === 'next') {\n          return all[index + 1] || (wrap ? all[0] : null);\n        } else {\n          return all[index - 1] || (wrap ? all[all.length - 1] : null);\n        }\n      }\n    }\n  }\n\n  /**\n   * Flatten tree to array\n   */\n  private flattenTree(root: SemanticNode): SemanticNode[] {\n    const result: SemanticNode[] = [root];\n    for (const child of root.children) {\n      result.push(...this.flattenTree(child));\n    }\n    return result;\n  }\n\n  /**\n   * Get node by ID (O(1) lookup)\n   */\n  getById(document: SemanticDocument, id: SemanticId): SemanticNode | undefined {\n    return document.index.get(id);\n  }\n\n  /**\n   * Certify document for agent readiness\n   * Uses completeness-based scoring for more meaningful results\n   */\n  private certify(root: SemanticNode): AgentCertification {\n    const checks: ValidationCheck[] = [];\n\n    // Structure checks\n    checks.push(this.checkStructure(root));\n    checks.push(this.checkLandmarks(root));\n\n    // Accessibility checks\n    checks.push(this.checkAccessibleNames(root));\n    checks.push(this.checkHeadingHierarchy(root));\n    checks.push(this.checkKeyboardNav(root));\n\n    // Navigation checks\n    checks.push(this.checkUniqueIds(root));\n    checks.push(this.checkSelectors(root));\n\n    // State checks\n    checks.push(this.checkStateTransitions(root));\n\n    // Interoperability checks\n    checks.push(this.checkSemanticIntent(root));\n\n    const passed = checks.filter((c) => c.passed);\n    const failures = checks.filter((c) => !c.passed);\n\n    // Calculate completeness-based score (weighted by importance)\n    const score = this.calculateCompletenessScore(root, checks);\n\n    let level: AgentCertification['level'] = 'none';\n    if (score >= 90) level = 'full';\n    else if (score >= 80) level = 'advanced';\n    else if (score >= 70) level = 'standard';\n    else if (score >= 50) level = 'basic';\n\n    return {\n      level,\n      checks: passed,\n      failures,\n      score,\n      certifiedAt: Date.now(),\n    };\n  }\n\n  /**\n   * Calculate completeness score based on actual content quality\n   * Weights: Structure (30%) + A11y (30%) + Navigation (25%) + Interop (15%)\n   */\n  private calculateCompletenessScore(\n    root: SemanticNode,\n    checks: ValidationCheck[]\n  ): number {\n    const weights = {\n      structure: 0.30,\n      a11y: 0.30,\n      navigation: 0.25,\n      interoperability: 0.15,\n    };\n\n    const categoryScores: Record<string, { score: number; count: number }> = {\n      structure: { score: 0, count: 0 },\n      a11y: { score: 0, count: 0 },\n      navigation: { score: 0, count: 0 },\n      interoperability: { score: 0, count: 0 },\n      state: { score: 0, count: 0 },\n    };\n\n    // Score checks by category\n    for (const check of checks) {\n      const category = check.category || 'navigation';\n      if (categoryScores[category]) {\n        categoryScores[category].count++;\n        categoryScores[category].score += check.passed ? 1 : 0;\n      }\n    }\n\n    // Add bonus for content completeness\n    const all = this.flattenTree(root);\n    const withLabels = all.filter((n) => n.label && n.label !== n.role);\n    const withSelectors = all.filter((n) => n.selector);\n    const withIntent = all.filter((n) => n.intent);\n    const interactive = all.filter((n) => this.isInteractive(n));\n    const withA11yNames = interactive.filter((n) => n.a11y.name);\n\n    // Content completeness factors\n    const labelCompleteness = all.length > 0 ? withLabels.length / all.length : 0;\n    const selectorCompleteness = all.length > 0 ? withSelectors.length / all.length : 0;\n    const intentCompleteness = interactive.length > 0 ? withIntent.length / interactive.length : 1;\n    const a11yCompleteness = interactive.length > 0 ? withA11yNames.length / interactive.length : 1;\n\n    // Calculate weighted category scores\n    let weightedScore = 0;\n    let totalWeight = 0;\n\n    for (const [category, weight] of Object.entries(weights)) {\n      const catData = categoryScores[category] || categoryScores.navigation;\n      if (catData.count > 0) {\n        weightedScore += (catData.score / catData.count) * weight;\n        totalWeight += weight;\n      }\n    }\n\n    // Normalize weighted score\n    const baseScore = totalWeight > 0 ? (weightedScore / totalWeight) * 70 : 0;\n\n    // Add completeness bonuses (up to 30 points)\n    const completenessBonus =\n      (labelCompleteness * 8) +\n      (selectorCompleteness * 7) +\n      (intentCompleteness * 8) +\n      (a11yCompleteness * 7);\n\n    return Math.min(100, Math.round(baseScore + completenessBonus));\n  }\n\n  /**\n   * Create empty certification\n   */\n  private createEmptyCertification(): AgentCertification {\n    return {\n      level: 'none',\n      checks: [],\n      failures: [],\n      score: 0,\n    };\n  }\n\n  /**\n   * Check document structure\n   */\n  private checkStructure(root: SemanticNode): ValidationCheck {\n    const hasMain = this.query(root, { role: 'main', deep: true }).length > 0;\n    return {\n      id: 'structure-main',\n      name: 'Main landmark present',\n      category: 'structure',\n      passed: hasMain,\n      message: hasMain\n        ? 'Document has main landmark'\n        : 'Document should have a main landmark',\n      severity: hasMain ? undefined : 'warning',\n    };\n  }\n\n  /**\n   * Check for proper landmarks\n   */\n  private checkLandmarks(root: SemanticNode): ValidationCheck {\n    const landmarks = this.query(root, {\n      role: ['main', 'navigation', 'header', 'footer'],\n      deep: true,\n    });\n    const hasEnough = landmarks.length >= 2;\n    return {\n      id: 'structure-landmarks',\n      name: 'Sufficient landmarks',\n      category: 'structure',\n      passed: hasEnough,\n      message: hasEnough\n        ? `Found ${landmarks.length} landmarks`\n        : 'Document should have at least 2 landmarks',\n      severity: hasEnough ? undefined : 'warning',\n    };\n  }\n\n  /**\n   * Check accessible names\n   */\n  private checkAccessibleNames(root: SemanticNode): ValidationCheck {\n    const interactables = this.query(root, { interactive: true, deep: true });\n    const withNames = interactables.filter((n) => n.a11y.name.length > 0);\n    const allNamed = interactables.length === 0 || withNames.length === interactables.length;\n\n    return {\n      id: 'a11y-names',\n      name: 'Interactive elements have accessible names',\n      category: 'a11y',\n      passed: allNamed,\n      message: allNamed\n        ? 'All interactive elements have accessible names'\n        : `${interactables.length - withNames.length} interactive elements missing accessible names`,\n      severity: allNamed ? undefined : 'error',\n      nodes: interactables.filter((n) => n.a11y.name.length === 0).map((n) => n.id),\n    };\n  }\n\n  /**\n   * Check heading hierarchy\n   */\n  private checkHeadingHierarchy(root: SemanticNode): ValidationCheck {\n    const headings = this.query(root, { role: 'heading', deep: true });\n    let valid = true;\n    let lastLevel = 0;\n\n    for (const heading of headings) {\n      const level = heading.a11y.level || 1;\n      if (level > lastLevel + 1) {\n        valid = false;\n        break;\n      }\n      lastLevel = level;\n    }\n\n    return {\n      id: 'a11y-headings',\n      name: 'Heading hierarchy valid',\n      category: 'a11y',\n      passed: valid,\n      message: valid\n        ? 'Heading levels follow proper hierarchy'\n        : 'Heading levels skip levels (e.g., h1 to h3)',\n      severity: valid ? undefined : 'warning',\n    };\n  }\n\n  /**\n   * Check keyboard navigation\n   */\n  private checkKeyboardNav(root: SemanticNode): ValidationCheck {\n    const focusable = this.query(root, { focusable: true, deep: true });\n    const inTabOrder = focusable.filter((n) => n.a11y.inTabOrder);\n    const hasNav = inTabOrder.length > 0;\n\n    return {\n      id: 'navigation-keyboard',\n      name: 'Keyboard navigation available',\n      category: 'navigation',\n      passed: hasNav,\n      message: hasNav\n        ? `${inTabOrder.length} elements in tab order`\n        : 'No elements in keyboard tab order',\n      severity: hasNav ? undefined : 'error',\n    };\n  }\n\n  /**\n   * Check unique IDs\n   */\n  private checkUniqueIds(root: SemanticNode): ValidationCheck {\n    const ids = new Set<SemanticId>();\n    const duplicates: SemanticId[] = [];\n\n    const traverse = (node: SemanticNode) => {\n      if (ids.has(node.id)) {\n        duplicates.push(node.id);\n      }\n      ids.add(node.id);\n      node.children.forEach(traverse);\n    };\n\n    traverse(root);\n    const unique = duplicates.length === 0;\n\n    return {\n      id: 'navigation-unique-ids',\n      name: 'All semantic IDs unique',\n      category: 'navigation',\n      passed: unique,\n      message: unique ? 'All IDs are unique' : `${duplicates.length} duplicate IDs found`,\n      severity: unique ? undefined : 'critical',\n      nodes: duplicates,\n    };\n  }\n\n  /**\n   * Check selectors work\n   */\n  private checkSelectors(root: SemanticNode): ValidationCheck {\n    // In browser, we could verify selectors. Here we just check they're not empty.\n    const all = this.flattenTree(root);\n    const withSelectors = all.filter((n) => n.selector && n.selector.length > 0);\n    const valid = withSelectors.length === all.length;\n\n    return {\n      id: 'navigation-selectors',\n      name: 'All nodes have valid selectors',\n      category: 'navigation',\n      passed: valid,\n      message: valid\n        ? 'All nodes have CSS selectors'\n        : `${all.length - withSelectors.length} nodes missing selectors`,\n      severity: valid ? undefined : 'error',\n    };\n  }\n\n  /**\n   * Check state transitions\n   */\n  private checkStateTransitions(root: SemanticNode): ValidationCheck {\n    const interactive = this.query(root, { interactive: true, deep: true });\n    const withStates = interactive.filter((n) => this.stateGraph.has(n.id));\n    const coverage = interactive.length > 0 ? withStates.length / interactive.length : 1;\n    const good = coverage >= 0.8;\n\n    return {\n      id: 'state-transitions',\n      name: 'State transitions defined',\n      category: 'state',\n      passed: good,\n      message: good\n        ? `${Math.round(coverage * 100)}% state coverage`\n        : 'Insufficient state transition coverage',\n      severity: good ? undefined : 'warning',\n    };\n  }\n\n  /**\n   * Check semantic intents\n   */\n  private checkSemanticIntent(root: SemanticNode): ValidationCheck {\n    const interactive = this.query(root, { interactive: true, deep: true });\n    const withIntent = interactive.filter((n) => n.intent);\n    const coverage = interactive.length > 0 ? withIntent.length / interactive.length : 1;\n    const good = coverage >= 0.7;\n\n    return {\n      id: 'interop-intent',\n      name: 'Semantic intents defined',\n      category: 'interoperability',\n      passed: good,\n      message: good\n        ? `${Math.round(coverage * 100)}% intent coverage`\n        : 'Many interactive elements lack semantic intent',\n      severity: good ? undefined : 'info',\n    };\n  }\n}\n\n/**\n * Create a new SemanticDOM instance\n */\nexport function createSemanticDOM(config?: SemanticDOMConfig): SemanticDOM {\n  return new SemanticDOM(config);\n}\n\n/**\n * Parse an element directly\n */\nexport function parseElement(\n  element: Element,\n  config?: SemanticDOMConfig\n): SemanticDocument {\n  const sdom = createSemanticDOM(config);\n  return sdom.parse(element);\n}\n","/**\n * TOON Serialization for SemanticDOM\n * Token-Oriented Object Notation for LLM-efficient semantic document encoding\n *\n * TOON reduces token usage by ~40-50% compared to JSON, making it ideal\n * for passing SemanticDOM documents to AI agents.\n *\n * @packageDocumentation\n */\n\nimport { encode, decode, type EncodeOptions, type DecodeOptions } from '@toon-format/toon';\nimport type {\n  SemanticDocument,\n  SemanticNode,\n  SemanticId,\n  SSGNode,\n  AgentCertification,\n} from '../core/types.js';\n\n/**\n * Serializable representation of SemanticNode (without circular refs)\n */\ninterface SerializableNode {\n  id: string;\n  role: string;\n  label: string;\n  intent?: string;\n  state: string;\n  selector: string;\n  xpath: string;\n  a11y: {\n    name: string;\n    focusable: boolean;\n    inTabOrder: boolean;\n    level?: number;\n  };\n  children: SerializableNode[];\n  value?: string | number | boolean;\n}\n\n/**\n * Serializable document format for TOON encoding\n */\ninterface SerializableDocument {\n  version: string;\n  standard: string;\n  url: string;\n  title: string;\n  language: string;\n  generatedAt: number;\n  agentReady: {\n    level: string;\n    score: number;\n    checks: Array<{ id: string; name: string; passed: boolean }>;\n    failures: Array<{ id: string; name: string; message: string; severity?: string }>;\n  };\n  root: SerializableNode;\n  landmarks: Array<{ id: string; role: string; label: string }>;\n  interactables: Array<{ id: string; role: string; label: string; intent?: string }>;\n  stateGraph: Array<{\n    id: string;\n    state: string;\n    transitions: Array<{ from: string; to: string; trigger: string }>;\n  }>;\n}\n\n/**\n * Convert SemanticNode to serializable format\n */\nfunction serializeNode(node: SemanticNode): SerializableNode {\n  return {\n    id: node.id,\n    role: node.role,\n    label: node.label,\n    intent: node.intent,\n    state: node.state,\n    selector: node.selector,\n    xpath: node.xpath,\n    a11y: {\n      name: node.a11y.name,\n      focusable: node.a11y.focusable,\n      inTabOrder: node.a11y.inTabOrder,\n      level: node.a11y.level,\n    },\n    children: node.children.map(serializeNode),\n    value: node.value,\n  };\n}\n\n/**\n * Convert SemanticDocument to serializable format\n */\nfunction serializeDocument(doc: SemanticDocument): SerializableDocument {\n  const stateGraphArray: SerializableDocument['stateGraph'] = [];\n\n  doc.stateGraph.forEach((ssgNode, id) => {\n    stateGraphArray.push({\n      id,\n      state: ssgNode.currentState,\n      transitions: ssgNode.transitions.map((t) => ({\n        from: t.from,\n        to: t.to,\n        trigger: typeof t.trigger === 'string' ? t.trigger : String(t.trigger),\n      })),\n    });\n  });\n\n  return {\n    version: doc.version,\n    standard: doc.standard,\n    url: doc.url,\n    title: doc.title,\n    language: doc.language,\n    generatedAt: doc.generatedAt,\n    agentReady: {\n      level: doc.agentReady.level,\n      score: doc.agentReady.score,\n      checks: doc.agentReady.checks.map((c) => ({\n        id: c.id,\n        name: c.name,\n        passed: c.passed,\n      })),\n      failures: doc.agentReady.failures.map((f) => ({\n        id: f.id,\n        name: f.name,\n        message: f.message,\n        severity: f.severity,\n      })),\n    },\n    root: serializeNode(doc.root),\n    landmarks: doc.landmarks.map((l) => ({\n      id: l.id,\n      role: l.role,\n      label: l.label,\n    })),\n    interactables: doc.interactables.map((i) => ({\n      id: i.id,\n      role: i.role,\n      label: i.label,\n      intent: i.intent,\n    })),\n    stateGraph: stateGraphArray,\n  };\n}\n\n/**\n * Encode SemanticDocument to TOON format\n *\n * @param document - SemanticDocument to encode\n * @param options - TOON encoding options\n * @returns TOON formatted string\n *\n * @example\n * ```ts\n * const toon = toTOON(document);\n * // Saves ~40-50% tokens vs JSON\n * ```\n */\nexport function toTOON(document: SemanticDocument, options?: EncodeOptions): string {\n  const serializable = serializeDocument(document);\n  return encode(serializable, {\n    indent: 2,\n    keyFolding: 'safe',\n    ...options,\n  });\n}\n\n/**\n * Decode TOON string to partial SemanticDocument data\n *\n * Note: Returns plain object structure, not full SemanticDocument with Map indexes.\n * Use this for reading TOON data; create fresh SemanticDocument via parse() for full functionality.\n *\n * @param toon - TOON formatted string\n * @param options - TOON decoding options\n * @returns Decoded document data\n */\nexport function fromTOON(toon: string, options?: DecodeOptions): SerializableDocument {\n  return decode(toon, {\n    strict: true,\n    expandPaths: 'safe',\n    ...options,\n  }) as unknown as SerializableDocument;\n}\n\n/**\n * Encode just the semantic tree (nodes only) to TOON\n * Useful for passing to LLMs when you only need structure\n *\n * @param root - Root SemanticNode\n * @returns TOON formatted string of just the tree\n */\nexport function treeToTOON(root: SemanticNode, options?: EncodeOptions): string {\n  return encode(serializeNode(root), {\n    indent: 2,\n    keyFolding: 'safe',\n    ...options,\n  });\n}\n\n/**\n * Encode landmarks array to TOON (compact format)\n *\n * @param landmarks - Array of landmark nodes\n * @returns TOON formatted string\n */\nexport function landmarksToTOON(landmarks: SemanticNode[], options?: EncodeOptions): string {\n  const data = landmarks.map((l) => ({\n    id: l.id,\n    role: l.role,\n    label: l.label,\n    selector: l.selector,\n  }));\n  return encode({ landmarks: data }, options);\n}\n\n/**\n * Encode interactables array to TOON (compact format)\n *\n * @param interactables - Array of interactive nodes\n * @returns TOON formatted string\n */\nexport function interactablesToTOON(interactables: SemanticNode[], options?: EncodeOptions): string {\n  const data = interactables.map((i) => ({\n    id: i.id,\n    role: i.role,\n    label: i.label,\n    intent: i.intent,\n    state: i.state,\n    selector: i.selector,\n  }));\n  return encode({ interactables: data }, options);\n}\n\n/**\n * Encode state graph to TOON\n *\n * @param stateGraph - Map of SSG nodes\n * @returns TOON formatted string\n */\nexport function stateGraphToTOON(\n  stateGraph: Map<SemanticId, SSGNode>,\n  options?: EncodeOptions\n): string {\n  const nodes: Array<{\n    id: string;\n    state: string;\n    transitions: Array<{ from: string; to: string; trigger: string }>;\n  }> = [];\n\n  stateGraph.forEach((node, id) => {\n    nodes.push({\n      id,\n      state: node.currentState,\n      transitions: node.transitions.map((t) => ({\n        from: t.from,\n        to: t.to,\n        trigger: String(t.trigger),\n      })),\n    });\n  });\n\n  return encode({ stateGraph: nodes }, options);\n}\n\n/**\n * Encode certification report to TOON\n *\n * @param certification - AgentCertification object\n * @returns TOON formatted string\n */\nexport function certificationToTOON(\n  certification: AgentCertification,\n  options?: EncodeOptions\n): string {\n  return encode(\n    {\n      level: certification.level,\n      score: certification.score,\n      passed: certification.checks.map((c) => c.name),\n      failed: certification.failures.map((f) => ({\n        name: f.name,\n        severity: f.severity,\n        message: f.message,\n      })),\n    },\n    options\n  );\n}\n\n/**\n * Calculate token savings estimate\n *\n * @param document - SemanticDocument to analyze\n * @returns Token comparison stats\n */\nexport function estimateTokenSavings(document: SemanticDocument): {\n  jsonTokens: number;\n  toonTokens: number;\n  savings: number;\n  savingsPercent: number;\n} {\n  const serializable = serializeDocument(document);\n  const jsonStr = JSON.stringify(serializable, null, 2);\n  const toonStr = toTOON(document);\n\n  // Rough token estimate: ~4 chars per token for English text\n  const jsonTokens = Math.ceil(jsonStr.length / 4);\n  const toonTokens = Math.ceil(toonStr.length / 4);\n  const savings = jsonTokens - toonTokens;\n  const savingsPercent = Math.round((savings / jsonTokens) * 100);\n\n  return {\n    jsonTokens,\n    toonTokens,\n    savings,\n    savingsPercent,\n  };\n}\n\n// Re-export TOON types for convenience\nexport type { EncodeOptions, DecodeOptions } from '@toon-format/toon';\n","/**\n * MCP (Model Context Protocol) Server for SemanticDOM\n * Exposes SemanticDOM/SSG as MCP Resources and Tools\n *\n * Compatible with the Linux Foundation's Model Context Protocol standard\n * @see https://modelcontextprotocol.io/specification\n *\n * @packageDocumentation\n */\n\nimport type {\n  SemanticDocument,\n  SemanticId,\n} from '../core/types.js';\nimport { toTOON, treeToTOON, landmarksToTOON, interactablesToTOON, stateGraphToTOON } from '../toon/index.js';\n\n/**\n * MCP Resource descriptor for SemanticDOM\n */\nexport interface MCPResource {\n  uri: string;\n  mimeType: string;\n  name: string;\n  description?: string;\n}\n\n/**\n * MCP Tool descriptor\n */\nexport interface MCPTool {\n  name: string;\n  description: string;\n  inputSchema: {\n    type: 'object';\n    properties: Record<string, { type: string; description: string }>;\n    required?: string[];\n  };\n}\n\n/**\n * MCP Tool call result\n */\nexport interface MCPToolResult {\n  content: Array<{\n    type: 'text' | 'resource';\n    text?: string;\n    resource?: MCPResource;\n  }>;\n  isError?: boolean;\n}\n\n/**\n * MCP Prompt descriptor\n */\nexport interface MCPPrompt {\n  name: string;\n  description: string;\n  arguments?: Array<{\n    name: string;\n    description: string;\n    required?: boolean;\n  }>;\n}\n\n/**\n * SemanticDOM MCP Server capabilities\n */\nexport interface SemanticDOMMCPCapabilities {\n  resources: MCPResource[];\n  tools: MCPTool[];\n  prompts: MCPPrompt[];\n}\n\n/**\n * Create MCP resource from SemanticDocument\n */\nexport function createResource(\n  document: SemanticDocument,\n  format: 'json' | 'toon' = 'toon'\n): MCPResource {\n  return {\n    uri: `semantic-dom://${new URL(document.url).hostname}${new URL(document.url).pathname}`,\n    mimeType: format === 'toon' ? 'application/toon' : 'application/json',\n    name: document.title || 'SemanticDOM Document',\n    description: `SemanticDOM structure with ${document.landmarks.length} landmarks, ${document.interactables.length} interactables. Agent certification: ${document.agentReady.level} (${document.agentReady.score}/100)`,\n  };\n}\n\n/**\n * Get available MCP tools for SemanticDOM operations\n */\nexport function getTools(): MCPTool[] {\n  return [\n    {\n      name: 'semantic_query',\n      description: 'Query element by semantic ID with O(1) lookup time. Returns element details including role, label, state, and accessibility info.',\n      inputSchema: {\n        type: 'object',\n        properties: {\n          id: {\n            type: 'string',\n            description: 'Semantic ID of the element (e.g., \"nav-main\", \"btn-submit\")',\n          },\n        },\n        required: ['id'],\n      },\n    },\n    {\n      name: 'semantic_navigate',\n      description: 'Navigate to a landmark region. Returns landmark details and its interactive children.',\n      inputSchema: {\n        type: 'object',\n        properties: {\n          landmark: {\n            type: 'string',\n            description: 'Landmark role or ID (e.g., \"main\", \"navigation\", \"nav-primary\")',\n          },\n        },\n        required: ['landmark'],\n      },\n    },\n    {\n      name: 'semantic_interact',\n      description: 'Get interaction details for an element. Returns intent, state, available actions, and CSS selector for automation.',\n      inputSchema: {\n        type: 'object',\n        properties: {\n          id: {\n            type: 'string',\n            description: 'Semantic ID of the interactive element',\n          },\n        },\n        required: ['id'],\n      },\n    },\n    {\n      name: 'semantic_list_landmarks',\n      description: 'List all landmark regions on the page for navigation overview.',\n      inputSchema: {\n        type: 'object',\n        properties: {},\n      },\n    },\n    {\n      name: 'semantic_list_interactables',\n      description: 'List all interactive elements (buttons, links, inputs) with their intents.',\n      inputSchema: {\n        type: 'object',\n        properties: {\n          filter: {\n            type: 'string',\n            description: 'Optional filter by role (e.g., \"button\", \"link\", \"textbox\")',\n          },\n        },\n      },\n    },\n    {\n      name: 'semantic_state_graph',\n      description: 'Get the Semantic State Graph showing all stateful elements and their possible state transitions.',\n      inputSchema: {\n        type: 'object',\n        properties: {\n          id: {\n            type: 'string',\n            description: 'Optional: filter to specific element ID',\n          },\n        },\n      },\n    },\n    {\n      name: 'semantic_certification',\n      description: 'Get agent certification status including level, score, and any failed checks.',\n      inputSchema: {\n        type: 'object',\n        properties: {},\n      },\n    },\n  ];\n}\n\n/**\n * Get available MCP prompts for SemanticDOM\n */\nexport function getPrompts(): MCPPrompt[] {\n  return [\n    {\n      name: 'analyze_page',\n      description: 'Analyze page structure and provide navigation guidance',\n      arguments: [\n        {\n          name: 'goal',\n          description: 'What the user wants to accomplish on this page',\n          required: true,\n        },\n      ],\n    },\n    {\n      name: 'find_element',\n      description: 'Find the best element to interact with for a given task',\n      arguments: [\n        {\n          name: 'task',\n          description: 'Description of what you want to do (e.g., \"submit the form\", \"navigate to settings\")',\n          required: true,\n        },\n      ],\n    },\n    {\n      name: 'automation_plan',\n      description: 'Generate a step-by-step automation plan using semantic IDs',\n      arguments: [\n        {\n          name: 'workflow',\n          description: 'Description of the workflow to automate',\n          required: true,\n        },\n      ],\n    },\n  ];\n}\n\n/**\n * Execute MCP tool call\n */\nexport function executeTool(\n  document: SemanticDocument,\n  toolName: string,\n  args: Record<string, unknown>\n): MCPToolResult {\n  switch (toolName) {\n    case 'semantic_query': {\n      const id = args.id as string;\n      const node = document.index.get(id as SemanticId);\n      if (!node) {\n        return {\n          content: [{ type: 'text', text: `Element not found: ${id}` }],\n          isError: true,\n        };\n      }\n      return {\n        content: [{\n          type: 'text',\n          text: treeToTOON(node),\n        }],\n      };\n    }\n\n    case 'semantic_navigate': {\n      const landmark = args.landmark as string;\n      const found = document.landmarks.find(\n        (l) => l.role === landmark || l.id === landmark\n      );\n      if (!found) {\n        return {\n          content: [{ type: 'text', text: `Landmark not found: ${landmark}` }],\n          isError: true,\n        };\n      }\n      return {\n        content: [{\n          type: 'text',\n          text: treeToTOON(found),\n        }],\n      };\n    }\n\n    case 'semantic_interact': {\n      const id = args.id as string;\n      const node = document.index.get(id as SemanticId);\n      if (!node) {\n        return {\n          content: [{ type: 'text', text: `Element not found: ${id}` }],\n          isError: true,\n        };\n      }\n      const ssgNode = document.stateGraph.get(id as SemanticId);\n      return {\n        content: [{\n          type: 'text',\n          text: JSON.stringify({\n            id: node.id,\n            role: node.role,\n            label: node.label,\n            intent: node.intent,\n            state: node.state,\n            selector: node.selector,\n            xpath: node.xpath,\n            a11y: node.a11y,\n            stateGraph: ssgNode ? {\n              currentState: ssgNode.currentState,\n              transitions: ssgNode.transitions,\n            } : null,\n          }, null, 2),\n        }],\n      };\n    }\n\n    case 'semantic_list_landmarks': {\n      return {\n        content: [{\n          type: 'text',\n          text: landmarksToTOON(document.landmarks),\n        }],\n      };\n    }\n\n    case 'semantic_list_interactables': {\n      const filter = args.filter as string | undefined;\n      let interactables = document.interactables;\n      if (filter) {\n        interactables = interactables.filter((i) => i.role === filter);\n      }\n      return {\n        content: [{\n          type: 'text',\n          text: interactablesToTOON(interactables),\n        }],\n      };\n    }\n\n    case 'semantic_state_graph': {\n      const id = args.id as SemanticId | undefined;\n      if (id) {\n        const node = document.stateGraph.get(id);\n        if (!node) {\n          return {\n            content: [{ type: 'text', text: `State graph node not found: ${id}` }],\n            isError: true,\n          };\n        }\n        return {\n          content: [{\n            type: 'text',\n            text: JSON.stringify({\n              id,\n              currentState: node.currentState,\n              transitions: node.transitions,\n            }, null, 2),\n          }],\n        };\n      }\n      return {\n        content: [{\n          type: 'text',\n          text: stateGraphToTOON(document.stateGraph),\n        }],\n      };\n    }\n\n    case 'semantic_certification': {\n      return {\n        content: [{\n          type: 'text',\n          text: JSON.stringify(document.agentReady, null, 2),\n        }],\n      };\n    }\n\n    default:\n      return {\n        content: [{ type: 'text', text: `Unknown tool: ${toolName}` }],\n        isError: true,\n      };\n  }\n}\n\n/**\n * Get full MCP capabilities for SemanticDOM\n */\nexport function getCapabilities(document: SemanticDocument): SemanticDOMMCPCapabilities {\n  return {\n    resources: [createResource(document, 'toon')],\n    tools: getTools(),\n    prompts: getPrompts(),\n  };\n}\n\n/**\n * Serialize document for MCP resource response\n */\nexport function serializeForMCP(\n  document: SemanticDocument,\n  format: 'json' | 'toon' = 'toon'\n): string {\n  if (format === 'toon') {\n    return toTOON(document);\n  }\n  return JSON.stringify({\n    version: document.version,\n    standard: document.standard,\n    url: document.url,\n    title: document.title,\n    agentReady: document.agentReady,\n    landmarks: document.landmarks.map((l) => ({ id: l.id, role: l.role, label: l.label })),\n    interactables: document.interactables.map((i) => ({\n      id: i.id,\n      role: i.role,\n      label: i.label,\n      intent: i.intent,\n    })),\n  }, null, 2);\n}\n\n/**\n * MCP Server Info for SemanticDOM\n */\nexport const SERVER_INFO = {\n  name: 'semantic-dom-ssg',\n  version: '0.1.0',\n  protocolVersion: '2024-11-05',\n  capabilities: {\n    resources: { subscribe: false, listChanged: true },\n    tools: {},\n    prompts: { listChanged: false },\n  },\n};\n","/**\n * Agent Summary Format\n * Ultra token-efficient plain text format for LLM consumption\n *\n * Target: ~100 tokens vs ~800 tokens for JSON\n * Use case: Quick site understanding for AI agents\n *\n * @packageDocumentation\n */\n\nimport type { SemanticDocument, SemanticNode } from '../core/types.js';\n\n/**\n * Options for agent summary generation\n */\nexport interface AgentSummaryOptions {\n  /** Include interactables list (default: true) */\n  includeInteractables?: boolean;\n  /** Include landmarks list (default: true) */\n  includeLandmarks?: boolean;\n  /** Include certification info (default: true) */\n  includeCertification?: boolean;\n  /** Maximum interactables to list (default: 20) */\n  maxInteractables?: number;\n  /** Maximum landmarks to list (default: 10) */\n  maxLandmarks?: number;\n  /** Include resource URLs if available (default: true) */\n  includeResourceUrls?: boolean;\n}\n\nconst DEFAULT_OPTIONS: Required<AgentSummaryOptions> = {\n  includeInteractables: true,\n  includeLandmarks: true,\n  includeCertification: true,\n  maxInteractables: 20,\n  maxLandmarks: 10,\n  includeResourceUrls: true,\n};\n\n/**\n * Generate an ultra-compact agent summary\n *\n * Format designed for ~100 tokens vs ~800 for JSON manifest\n *\n * @example Output:\n * ```\n * SITE: example.com\n * TITLE: My Website\n * LANG: en\n * CERT: standard (75/100)\n *\n * LANDMARKS:\n * navigation: Main Nav | #nav\n * main: Content | #main\n *\n * ACTIONS:\n * button: Submit Form | #submit | submit\n * link: Home | #home | navigate\n * audio: Track 1 | #audio-1 | play\n * ```\n *\n * @param document - SemanticDocument to summarize\n * @param options - Summary options\n * @returns Plain text summary\n */\nexport function toAgentSummary(\n  document: SemanticDocument,\n  options?: AgentSummaryOptions\n): string {\n  const opts = { ...DEFAULT_OPTIONS, ...options };\n  const lines: string[] = [];\n\n  // Header (minimal metadata)\n  const domain = extractDomain(document.url);\n  lines.push(`SITE: ${domain || 'local'}`);\n  if (document.title) {\n    lines.push(`TITLE: ${truncate(document.title, 50)}`);\n  }\n  lines.push(`LANG: ${document.language || 'en'}`);\n\n  // Certification (one line)\n  if (opts.includeCertification) {\n    const cert = document.agentReady;\n    lines.push(`CERT: ${cert.level} (${cert.score}/100)`);\n  }\n\n  lines.push(''); // Blank line separator\n\n  // Landmarks (compact)\n  if (opts.includeLandmarks && document.landmarks.length > 0) {\n    lines.push('LANDMARKS:');\n    const landmarks = document.landmarks.slice(0, opts.maxLandmarks);\n    for (const lm of landmarks) {\n      const selector = truncate(lm.selector || '', 30);\n      lines.push(`${lm.role}: ${truncate(lm.label, 25)} | ${selector}`);\n    }\n    if (document.landmarks.length > opts.maxLandmarks) {\n      lines.push(`... +${document.landmarks.length - opts.maxLandmarks} more`);\n    }\n    lines.push('');\n  }\n\n  // Interactables (compact, with intent)\n  if (opts.includeInteractables && document.interactables.length > 0) {\n    lines.push('ACTIONS:');\n    const items = document.interactables.slice(0, opts.maxInteractables);\n    for (const item of items) {\n      const selector = truncate(item.selector || '', 25);\n      const intent = item.intent || '-';\n      const url = opts.includeResourceUrls ? extractResourceUrl(item) : '';\n      const urlSuffix = url ? ` | ${url}` : '';\n      lines.push(`${item.role}: ${truncate(item.label, 20)} | ${selector} | ${intent}${urlSuffix}`);\n    }\n    if (document.interactables.length > opts.maxInteractables) {\n      lines.push(`... +${document.interactables.length - opts.maxInteractables} more`);\n    }\n  }\n\n  return lines.join('\\n');\n}\n\n/**\n * Generate a minimal one-line summary\n * For ultra-compressed contexts (~20 tokens)\n *\n * @example\n * \"example.com | standard (75) | 5 landmarks | 12 actions\"\n */\nexport function toOneLiner(document: SemanticDocument): string {\n  const domain = extractDomain(document.url) || 'local';\n  const cert = document.agentReady;\n  return `${domain} | ${cert.level} (${cert.score}) | ${document.landmarks.length} landmarks | ${document.interactables.length} actions`;\n}\n\n/**\n * Generate a navigation-focused summary\n * Lists all navigable sections with anchors\n */\nexport function toNavSummary(document: SemanticDocument): string {\n  const lines: string[] = [];\n  const domain = extractDomain(document.url) || '';\n\n  lines.push(`NAV: ${domain}`);\n\n  // Extract navigation links\n  const navItems = document.interactables.filter(\n    (i) => i.intent === 'navigate' && i.role === 'link'\n  );\n\n  for (const item of navItems.slice(0, 15)) {\n    const href = extractHref(item);\n    lines.push(`${truncate(item.label, 20)}: ${href || item.selector || '-'}`);\n  }\n\n  return lines.join('\\n');\n}\n\n/**\n * Generate an audio-focused summary\n * Lists all playable audio elements\n */\nexport function toAudioSummary(document: SemanticDocument): string {\n  const lines: string[] = [];\n\n  // Filter by play intent (audio elements have intent='play')\n  const audioItems = document.interactables.filter(\n    (i) => i.intent === 'play'\n  );\n\n  if (audioItems.length === 0) {\n    return 'AUDIO: none';\n  }\n\n  lines.push(`AUDIO: ${audioItems.length} tracks`);\n\n  for (const item of audioItems) {\n    const url = extractResourceUrl(item);\n    lines.push(`- ${truncate(item.label, 30)}${url ? ': ' + url : ''}`);\n  }\n\n  return lines.join('\\n');\n}\n\n/**\n * Estimate token count for the summary\n * Based on ~4 chars per token heuristic\n */\nexport function estimateSummaryTokens(summary: string): number {\n  return Math.ceil(summary.length / 4);\n}\n\n/**\n * Compare token usage between formats\n */\nexport function compareTokenUsage(document: SemanticDocument): {\n  summary: number;\n  json: number;\n  savings: number;\n  savingsPercent: number;\n} {\n  const summary = toAgentSummary(document);\n  const json = JSON.stringify(\n    {\n      url: document.url,\n      title: document.title,\n      landmarks: document.landmarks.map((l) => ({ role: l.role, label: l.label })),\n      interactables: document.interactables.map((i) => ({\n        role: i.role,\n        label: i.label,\n        intent: i.intent,\n      })),\n      certification: document.agentReady,\n    },\n    null,\n    2\n  );\n\n  const summaryTokens = estimateSummaryTokens(summary);\n  const jsonTokens = Math.ceil(json.length / 4);\n  const savings = jsonTokens - summaryTokens;\n  const savingsPercent = Math.round((savings / jsonTokens) * 100);\n\n  return {\n    summary: summaryTokens,\n    json: jsonTokens,\n    savings,\n    savingsPercent,\n  };\n}\n\n// --- Helpers ---\n\nfunction truncate(str: string, maxLen: number): string {\n  if (!str) return '-';\n  if (str.length <= maxLen) return str;\n  return str.slice(0, maxLen - 2) + '..';\n}\n\nfunction extractDomain(url: string): string {\n  if (!url) return '';\n  try {\n    const parsed = new URL(url);\n    return parsed.hostname;\n  } catch {\n    return url.split('/')[0] || '';\n  }\n}\n\nfunction extractHref(node: SemanticNode): string {\n  // Check metadata for href\n  if (node.metadata && typeof node.metadata === 'object') {\n    const href = (node.metadata as Record<string, unknown>).href;\n    if (typeof href === 'string') return href;\n  }\n\n  // Try to extract from selector (e.g., a[href=\"#about\"])\n  const selectorMatch = node.selector?.match(/\\[href=[\"']([^\"']+)[\"']\\]/);\n  if (selectorMatch) return selectorMatch[1];\n\n  return '';\n}\n\nfunction extractResourceUrl(node: SemanticNode): string {\n  // Check metadata for src/href\n  if (node.metadata && typeof node.metadata === 'object') {\n    const meta = node.metadata as Record<string, unknown>;\n    if (typeof meta.src === 'string') return meta.src;\n    if (typeof meta.href === 'string') return meta.href;\n    if (typeof meta.url === 'string') return meta.url;\n  }\n\n  return '';\n}\n","/**\n * semantic-dom-ssg\n * NPM package implementing ISO/IEC draft standard for SemanticDOM and Semantic State Graph\n *\n * @packageDocumentation\n */\n\n// Core exports\nexport * from './core/index.js';\n\n// Re-export convenience functions\nexport {\n  SemanticDOM,\n  createSemanticDOM,\n  parseElement,\n  generateSemanticId,\n} from './core/semantic-dom.js';\n\n// TOON serialization exports\nexport {\n  toTOON,\n  fromTOON,\n  treeToTOON,\n  landmarksToTOON,\n  interactablesToTOON,\n  stateGraphToTOON,\n  certificationToTOON,\n  estimateTokenSavings,\n} from './toon/index.js';\n\n// MCP (Model Context Protocol) exports\nexport {\n  createResource,\n  getTools,\n  getPrompts,\n  executeTool,\n  getCapabilities,\n  serializeForMCP,\n  SERVER_INFO,\n} from './mcp/index.js';\n\nexport type {\n  MCPResource,\n  MCPTool,\n  MCPToolResult,\n  MCPPrompt,\n  SemanticDOMMCPCapabilities,\n} from './mcp/index.js';\n\n// Agent Summary exports (ultra token-efficient format)\nexport {\n  toAgentSummary,\n  toOneLiner,\n  toNavSummary,\n  toAudioSummary,\n  estimateSummaryTokens,\n  compareTokenUsage,\n} from './summary/index.js';\n\nexport type { AgentSummaryOptions } from './summary/index.js';\n\n// Version\nexport const VERSION = '0.1.0';\n\n// Standard reference\nexport const STANDARD = 'ISO/IEC-SDOM-SSG-DRAFT-2024';\n"]}