@qontinui/ui-bridge 0.2.0 → 0.3.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.
Files changed (140) hide show
  1. package/dist/ai/index.d.mts +312 -155
  2. package/dist/ai/index.d.ts +312 -155
  3. package/dist/ai/index.js +2363 -67
  4. package/dist/ai/index.js.map +1 -1
  5. package/dist/ai/index.mjs +2328 -68
  6. package/dist/ai/index.mjs.map +1 -1
  7. package/dist/annotations/index.d.mts +218 -0
  8. package/dist/annotations/index.d.ts +218 -0
  9. package/dist/annotations/index.js +246 -0
  10. package/dist/annotations/index.js.map +1 -0
  11. package/dist/annotations/index.mjs +241 -0
  12. package/dist/annotations/index.mjs.map +1 -0
  13. package/dist/assertions-BSR3afVr.d.ts +161 -0
  14. package/dist/assertions-CTw1hfOx.d.mts +161 -0
  15. package/dist/babel-plugin/index.js +504 -0
  16. package/dist/babel-plugin/index.js.map +1 -0
  17. package/dist/babel-plugin/index.mjs +488 -0
  18. package/dist/babel-plugin/index.mjs.map +1 -0
  19. package/dist/browser-capture-Bms60T6f.d.mts +47 -0
  20. package/dist/browser-capture-CsTU29mb.d.ts +47 -0
  21. package/dist/control/index.d.mts +26 -7
  22. package/dist/control/index.d.ts +26 -7
  23. package/dist/control/index.js +276 -48
  24. package/dist/control/index.js.map +1 -1
  25. package/dist/control/index.mjs +276 -48
  26. package/dist/control/index.mjs.map +1 -1
  27. package/dist/core/index.d.mts +115 -44
  28. package/dist/core/index.d.ts +115 -44
  29. package/dist/core/index.js +0 -1560
  30. package/dist/core/index.js.map +1 -1
  31. package/dist/core/index.mjs +1 -1549
  32. package/dist/core/index.mjs.map +1 -1
  33. package/dist/debug/index.d.mts +5 -3
  34. package/dist/debug/index.d.ts +5 -3
  35. package/dist/debug/index.js +925 -1
  36. package/dist/debug/index.js.map +1 -1
  37. package/dist/debug/index.mjs +924 -2
  38. package/dist/debug/index.mjs.map +1 -1
  39. package/dist/index.d.mts +13 -9
  40. package/dist/index.d.ts +13 -9
  41. package/dist/index.js +8310 -3777
  42. package/dist/index.js.map +1 -1
  43. package/dist/index.mjs +8246 -3766
  44. package/dist/index.mjs.map +1 -1
  45. package/dist/{metrics-NC3csD0R.d.mts → metrics-DuA2qIIz.d.mts} +2 -2
  46. package/dist/{metrics-C9XRi_mL.d.ts → metrics-KFAAKNEB.d.ts} +2 -2
  47. package/dist/native/control/index.js +448 -0
  48. package/dist/native/control/index.js.map +1 -0
  49. package/dist/native/control/index.mjs +445 -0
  50. package/dist/native/control/index.mjs.map +1 -0
  51. package/dist/native/core/index.js +486 -0
  52. package/dist/native/core/index.js.map +1 -0
  53. package/dist/native/core/index.mjs +475 -0
  54. package/dist/native/core/index.mjs.map +1 -0
  55. package/dist/native/debug/index.js +408 -0
  56. package/dist/native/debug/index.js.map +1 -0
  57. package/dist/native/debug/index.mjs +406 -0
  58. package/dist/native/debug/index.mjs.map +1 -0
  59. package/dist/native/index.js +2232 -0
  60. package/dist/native/index.js.map +1 -0
  61. package/dist/native/index.mjs +2204 -0
  62. package/dist/native/index.mjs.map +1 -0
  63. package/dist/native/react/index.js +1377 -0
  64. package/dist/native/react/index.js.map +1 -0
  65. package/dist/native/react/index.mjs +1365 -0
  66. package/dist/native/react/index.mjs.map +1 -0
  67. package/dist/native/server/index.js +440 -0
  68. package/dist/native/server/index.js.map +1 -0
  69. package/dist/native/server/index.mjs +435 -0
  70. package/dist/native/server/index.mjs.map +1 -0
  71. package/dist/react/index.d.mts +121 -9
  72. package/dist/react/index.d.ts +121 -9
  73. package/dist/react/index.js +2239 -91
  74. package/dist/react/index.js.map +1 -1
  75. package/dist/react/index.mjs +2239 -92
  76. package/dist/react/index.mjs.map +1 -1
  77. package/dist/{registry-CIEDjbQ9.d.ts → registry-C6dDtn1v.d.ts} +34 -15
  78. package/dist/{registry-SsSDq46X.d.mts → registry-POtcxnal.d.mts} +34 -15
  79. package/dist/render-log/index.d.mts +1 -1
  80. package/dist/render-log/index.d.ts +1 -1
  81. package/dist/server/express.d.mts +37 -0
  82. package/dist/server/express.d.ts +37 -0
  83. package/dist/server/express.js +298 -0
  84. package/dist/server/express.js.map +1 -0
  85. package/dist/server/express.mjs +294 -0
  86. package/dist/server/express.mjs.map +1 -0
  87. package/dist/server/handlers.d.mts +124 -0
  88. package/dist/server/handlers.d.ts +124 -0
  89. package/dist/server/handlers.js +7183 -0
  90. package/dist/server/handlers.js.map +1 -0
  91. package/dist/server/handlers.mjs +7180 -0
  92. package/dist/server/handlers.mjs.map +1 -0
  93. package/dist/server/index.d.mts +12 -0
  94. package/dist/server/index.d.ts +12 -0
  95. package/dist/server/index.js +8384 -0
  96. package/dist/server/index.js.map +1 -0
  97. package/dist/server/index.mjs +8369 -0
  98. package/dist/server/index.mjs.map +1 -0
  99. package/dist/server/nextjs.d.mts +128 -0
  100. package/dist/server/nextjs.d.ts +128 -0
  101. package/dist/server/nextjs.js +390 -0
  102. package/dist/server/nextjs.js.map +1 -0
  103. package/dist/server/nextjs.mjs +385 -0
  104. package/dist/server/nextjs.mjs.map +1 -0
  105. package/dist/server/standalone.d.mts +7 -0
  106. package/dist/server/standalone.d.ts +7 -0
  107. package/dist/server/standalone.js +845 -0
  108. package/dist/server/standalone.js.map +1 -0
  109. package/dist/server/standalone.mjs +841 -0
  110. package/dist/server/standalone.mjs.map +1 -0
  111. package/dist/specs/index.d.mts +365 -0
  112. package/dist/specs/index.d.ts +365 -0
  113. package/dist/specs/index.js +2809 -0
  114. package/dist/specs/index.js.map +1 -0
  115. package/dist/specs/index.mjs +2786 -0
  116. package/dist/specs/index.mjs.map +1 -0
  117. package/dist/standalone-B6GLIEmR.d.ts +216 -0
  118. package/dist/standalone-CjdYqj3P.d.mts +216 -0
  119. package/dist/swc-plugin/index.d.mts +79 -0
  120. package/dist/swc-plugin/index.d.ts +79 -0
  121. package/dist/swc-plugin/index.js +15 -0
  122. package/dist/swc-plugin/index.js.map +1 -0
  123. package/dist/swc-plugin/index.mjs +9 -0
  124. package/dist/swc-plugin/index.mjs.map +1 -0
  125. package/dist/types-B2EfvEaq.d.ts +236 -0
  126. package/dist/{types-Dr6tH-bm.d.mts → types-C7gVYRnF.d.ts} +72 -2
  127. package/dist/{types-oCTrRxSw.d.ts → types-CJGrBEhC.d.mts} +72 -2
  128. package/dist/types-CebMQj76.d.ts +1275 -0
  129. package/dist/types-D_ypYl3T.d.mts +1275 -0
  130. package/dist/types-UBtp7R0u.d.mts +132 -0
  131. package/dist/types-UBtp7R0u.d.ts +132 -0
  132. package/dist/types-gO696T_t.d.mts +236 -0
  133. package/dist/{types-CPMbN_Iw.d.mts → types-suaYwWWg.d.mts} +519 -152
  134. package/dist/{types-CPMbN_Iw.d.ts → types-suaYwWWg.d.ts} +519 -152
  135. package/package.json +123 -4
  136. package/swc-plugin-wasm/ui_bridge_swc_plugin.wasm +0 -0
  137. package/dist/types-BvCfFuEV.d.ts +0 -534
  138. package/dist/types-CFT3Dnx4.d.mts +0 -534
  139. package/dist/websocket-client-CX4QJesI.d.ts +0 -124
  140. package/dist/websocket-client-C_Na0OSp.d.mts +0 -124
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/server/types.ts","../../src/server/websocket-handler.ts","../../src/server/standalone.ts"],"names":[],"mappings":"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","file":"standalone.mjs","sourcesContent":["/**\n * UI Bridge Server Types\n *\n * Shared types for server adapters.\n */\n\nimport type { UIBridgeConfig } from '../core';\nimport type {\n ControlActionRequest,\n ControlActionResponse,\n ComponentActionRequest,\n ComponentActionResponse,\n FindRequest,\n FindResponse,\n ControlSnapshot,\n WorkflowRunRequest,\n WorkflowRunResponse,\n PageNavigateRequest,\n PageNavigationResponse,\n} from '../control';\nimport type { RenderLogEntry, RenderLogEntryType } from '../render-log';\nimport type {\n SearchCriteria,\n SearchResponse,\n NLActionRequest,\n NLActionResponse,\n AssertionRequest,\n AssertionResult,\n BatchAssertionRequest,\n BatchAssertionResult,\n SemanticSnapshot,\n SemanticDiff,\n SemanticSearchCriteria,\n SemanticSearchResponse,\n Intent,\n IntentSearchResponse,\n IntentExecutionResult,\n RecoveryAttemptRequest,\n RecoveryAttemptResult,\n PageDataMap,\n PageRegionMap,\n StructuredDataExtraction,\n CrossAppComparisonReport,\n ComponentInfo,\n} from '../ai';\nimport type {\n UIState,\n UIStateGroup,\n UITransition,\n PathResult,\n TransitionResult,\n NavigationResult,\n StateSnapshot,\n} from '../core';\nimport type { ElementAnnotation, AnnotationConfig, AnnotationCoverage } from '../annotations';\nimport type { CapturedError } from '../debug/browser-capture-types';\n\n/**\n * Server configuration\n */\nexport interface UIBridgeServerConfig extends UIBridgeConfig {\n /** Base path for API routes */\n basePath?: string;\n /** Enable CORS */\n cors?: boolean | CORSOptions;\n /** Authentication middleware */\n authenticate?: (req: unknown) => boolean | Promise<boolean>;\n /** Rate limiting */\n rateLimit?: RateLimitOptions;\n}\n\n/**\n * CORS options\n */\nexport interface CORSOptions {\n /** Allowed origins */\n origin?: string | string[] | boolean;\n /** Allowed methods */\n methods?: string[];\n /** Allowed headers */\n headers?: string[];\n /** Expose headers */\n exposeHeaders?: string[];\n /** Allow credentials */\n credentials?: boolean;\n /** Max age for preflight cache */\n maxAge?: number;\n}\n\n/**\n * Rate limit options\n */\nexport interface RateLimitOptions {\n /** Time window in milliseconds */\n windowMs?: number;\n /** Max requests per window */\n max?: number;\n /** Message when rate limited */\n message?: string;\n}\n\n/**\n * API response wrapper\n */\nexport interface APIResponse<T = unknown> {\n /** Whether the request succeeded */\n success: boolean;\n /** Response data */\n data?: T;\n /** Error message if failed */\n error?: string;\n /** Error code */\n code?: string;\n /** Request timestamp */\n timestamp: number;\n}\n\n/**\n * Render log query parameters\n */\nexport interface RenderLogQuery {\n /** Filter by entry type */\n type?: RenderLogEntryType;\n /** Filter entries since timestamp */\n since?: number;\n /** Filter entries until timestamp */\n until?: number;\n /** Limit number of results */\n limit?: number;\n}\n\n/**\n * Server handler interface\n *\n * Implementations provide these handlers for different frameworks.\n */\nexport interface UIBridgeServerHandlers {\n // Render log endpoints\n getRenderLog: (query?: RenderLogQuery) => Promise<APIResponse<RenderLogEntry[]>>;\n clearRenderLog: () => Promise<APIResponse<void>>;\n captureSnapshot: () => Promise<APIResponse<unknown>>;\n getRenderLogPath: () => Promise<APIResponse<{ path: string }>>;\n\n // Control endpoints\n getElements: () => Promise<APIResponse<ControlSnapshot['elements']>>;\n getElement: (id: string) => Promise<APIResponse<ControlSnapshot['elements'][0]>>;\n getElementState: (id: string) => Promise<APIResponse<unknown>>;\n executeElementAction: (\n id: string,\n request: ControlActionRequest\n ) => Promise<APIResponse<ControlActionResponse>>;\n\n // Component endpoints\n getComponents: () => Promise<APIResponse<ControlSnapshot['components']>>;\n getComponent: (id: string) => Promise<APIResponse<ControlSnapshot['components'][0]>>;\n getComponentState: (id: string) => Promise<\n APIResponse<{\n state: Record<string, unknown>;\n computed: Record<string, unknown>;\n timestamp: number;\n }>\n >;\n executeComponentAction: (\n id: string,\n request: ComponentActionRequest\n ) => Promise<APIResponse<ComponentActionResponse>>;\n\n // Find endpoints\n find: (request?: FindRequest) => Promise<APIResponse<FindResponse>>;\n /**\n * @deprecated Use find() instead\n */\n discover: (request?: FindRequest) => Promise<APIResponse<FindResponse>>;\n getControlSnapshot: () => Promise<APIResponse<ControlSnapshot>>;\n\n // Workflow endpoints\n getWorkflows: () => Promise<APIResponse<ControlSnapshot['workflows']>>;\n runWorkflow: (\n id: string,\n request?: WorkflowRunRequest\n ) => Promise<APIResponse<WorkflowRunResponse>>;\n getWorkflowStatus: (runId: string) => Promise<APIResponse<WorkflowRunResponse>>;\n\n // Debug endpoints\n getActionHistory: (limit?: number) => Promise<APIResponse<unknown[]>>;\n getMetrics: () => Promise<APIResponse<unknown>>;\n highlightElement: (id: string) => Promise<APIResponse<void>>;\n getElementTree: () => Promise<APIResponse<unknown>>;\n getConsoleErrors: (params?: {\n since?: number;\n limit?: number;\n }) => Promise<APIResponse<{ errors: CapturedError[]; count: number }>>;\n clearConsoleErrors: () => Promise<APIResponse<{ cleared: boolean }>>;\n\n // AI-native endpoints\n aiSearch: (criteria: SearchCriteria) => Promise<APIResponse<SearchResponse>>;\n aiExecute: (request: NLActionRequest) => Promise<APIResponse<NLActionResponse>>;\n aiAssert: (request: AssertionRequest) => Promise<APIResponse<AssertionResult>>;\n aiAssertBatch: (request: BatchAssertionRequest) => Promise<APIResponse<BatchAssertionResult>>;\n getSemanticSnapshot: () => Promise<APIResponse<SemanticSnapshot>>;\n getSemanticDiff: (since?: number) => Promise<APIResponse<SemanticDiff | null>>;\n getPageSummary: () => Promise<APIResponse<string>>;\n\n // Semantic search (embedding-based)\n aiSemanticSearch: (\n criteria: SemanticSearchCriteria\n ) => Promise<APIResponse<SemanticSearchResponse>>;\n\n // State management endpoints\n getStates: () => Promise<APIResponse<UIState[]>>;\n getState: (id: string) => Promise<APIResponse<UIState>>;\n getActiveStates: () => Promise<APIResponse<UIState[]>>;\n activateState: (id: string) => Promise<APIResponse<void>>;\n deactivateState: (id: string) => Promise<APIResponse<void>>;\n getStateGroups: () => Promise<APIResponse<UIStateGroup[]>>;\n activateStateGroup: (id: string) => Promise<APIResponse<void>>;\n deactivateStateGroup: (id: string) => Promise<APIResponse<void>>;\n getTransitions: () => Promise<APIResponse<UITransition[]>>;\n canExecuteTransition: (\n id: string\n ) => Promise<APIResponse<{ canExecute: boolean; reason?: string }>>;\n executeTransition: (id: string) => Promise<APIResponse<TransitionResult>>;\n findPath: (request: { targetStates: string[] }) => Promise<APIResponse<PathResult>>;\n navigateTo: (request: { targetStates: string[] }) => Promise<APIResponse<NavigationResult>>;\n getStateSnapshot: () => Promise<APIResponse<StateSnapshot>>;\n\n // Intent endpoints\n executeIntent: (request: {\n intentId: string;\n params?: Record<string, unknown>;\n }) => Promise<APIResponse<IntentExecutionResult>>;\n findIntent: (request: { query: string }) => Promise<APIResponse<IntentSearchResponse>>;\n listIntents: () => Promise<APIResponse<Intent[]>>;\n registerIntent: (intent: Intent) => Promise<APIResponse<Intent>>;\n executeIntentFromQuery: (request: {\n query: string;\n params?: Record<string, unknown>;\n }) => Promise<APIResponse<IntentExecutionResult>>;\n\n // Recovery endpoints\n attemptRecovery: (request: RecoveryAttemptRequest) => Promise<APIResponse<RecoveryAttemptResult>>;\n\n // Cross-app analysis endpoints\n analyzePageData: () => Promise<APIResponse<PageDataMap>>;\n analyzePageRegions: () => Promise<APIResponse<PageRegionMap>>;\n analyzeStructuredData: () => Promise<APIResponse<StructuredDataExtraction>>;\n crossAppCompare: (request: {\n sourceSnapshot: SemanticSnapshot;\n targetSnapshot: SemanticSnapshot;\n sourceComponents?: ComponentInfo[];\n targetComponents?: ComponentInfo[];\n }) => Promise<APIResponse<CrossAppComparisonReport>>;\n\n // Page navigation endpoints\n pageRefresh: () => Promise<APIResponse<PageNavigationResponse>>;\n pageNavigate: (request: PageNavigateRequest) => Promise<APIResponse<PageNavigationResponse>>;\n pageGoBack: () => Promise<APIResponse<PageNavigationResponse>>;\n pageGoForward: () => Promise<APIResponse<PageNavigationResponse>>;\n\n // Annotation endpoints\n getAnnotations: () => Promise<APIResponse<Record<string, ElementAnnotation>>>;\n getAnnotation: (id: string) => Promise<APIResponse<ElementAnnotation>>;\n setAnnotation: (\n id: string,\n annotation: ElementAnnotation\n ) => Promise<APIResponse<ElementAnnotation>>;\n deleteAnnotation: (id: string) => Promise<APIResponse<void>>;\n importAnnotations: (config: AnnotationConfig) => Promise<APIResponse<{ count: number }>>;\n exportAnnotations: () => Promise<APIResponse<AnnotationConfig>>;\n getAnnotationCoverage: () => Promise<APIResponse<AnnotationCoverage>>;\n\n // Performance diagnostics endpoints\n getPerformanceEntries: () => Promise<APIResponse<unknown>>;\n clearPerformanceEntries: () => Promise<APIResponse<{ cleared: boolean }>>;\n getBrowserEvents: (params?: {\n type?: string;\n since?: number;\n limit?: number;\n }) => Promise<APIResponse<{ events: unknown[]; count: number }>>;\n}\n\n/**\n * Route definition\n */\nexport interface RouteDefinition {\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n path: string;\n handler: string; // Key in UIBridgeServerHandlers\n params?: string[]; // URL params to extract\n bodyRequired?: boolean;\n}\n\n/**\n * All UI Bridge routes\n */\nexport const UI_BRIDGE_ROUTES: RouteDefinition[] = [\n // Render log\n { method: 'GET', path: '/render-log', handler: 'getRenderLog' },\n { method: 'DELETE', path: '/render-log', handler: 'clearRenderLog' },\n { method: 'POST', path: '/render-log/snapshot', handler: 'captureSnapshot' },\n { method: 'GET', path: '/render-log/path', handler: 'getRenderLogPath' },\n\n // Control - Elements\n { method: 'GET', path: '/control/elements', handler: 'getElements' },\n { method: 'GET', path: '/control/element/:id', handler: 'getElement', params: ['id'] },\n { method: 'GET', path: '/control/element/:id/state', handler: 'getElementState', params: ['id'] },\n {\n method: 'POST',\n path: '/control/element/:id/action',\n handler: 'executeElementAction',\n params: ['id'],\n bodyRequired: true,\n },\n\n // Control - Components\n { method: 'GET', path: '/control/components', handler: 'getComponents' },\n { method: 'GET', path: '/control/component/:id', handler: 'getComponent', params: ['id'] },\n {\n method: 'GET',\n path: '/control/component/:id/state',\n handler: 'getComponentState',\n params: ['id'],\n },\n {\n method: 'POST',\n path: '/control/component/:id/action/:actionId',\n handler: 'executeComponentAction',\n params: ['id', 'actionId'],\n bodyRequired: true,\n },\n\n // Find (formerly Discovery)\n { method: 'POST', path: '/control/find', handler: 'find' },\n { method: 'POST', path: '/control/discover', handler: 'discover' }, // @deprecated Use /control/find\n { method: 'GET', path: '/control/snapshot', handler: 'getControlSnapshot' },\n\n // Workflows\n { method: 'GET', path: '/control/workflows', handler: 'getWorkflows' },\n { method: 'POST', path: '/control/workflow/:id/run', handler: 'runWorkflow', params: ['id'] },\n {\n method: 'GET',\n path: '/control/workflow/:runId/status',\n handler: 'getWorkflowStatus',\n params: ['runId'],\n },\n\n // Debug\n { method: 'GET', path: '/debug/action-history', handler: 'getActionHistory' },\n { method: 'GET', path: '/debug/metrics', handler: 'getMetrics' },\n { method: 'POST', path: '/debug/highlight/:id', handler: 'highlightElement', params: ['id'] },\n { method: 'GET', path: '/debug/element-tree', handler: 'getElementTree' },\n { method: 'GET', path: '/control/console-errors', handler: 'getConsoleErrors' },\n { method: 'POST', path: '/control/console-errors/clear', handler: 'clearConsoleErrors' },\n\n // AI-native endpoints\n { method: 'POST', path: '/ai/search', handler: 'aiSearch', bodyRequired: true },\n { method: 'POST', path: '/ai/execute', handler: 'aiExecute', bodyRequired: true },\n { method: 'POST', path: '/ai/assert', handler: 'aiAssert', bodyRequired: true },\n { method: 'POST', path: '/ai/assert/batch', handler: 'aiAssertBatch', bodyRequired: true },\n { method: 'GET', path: '/ai/snapshot', handler: 'getSemanticSnapshot' },\n { method: 'GET', path: '/ai/diff', handler: 'getSemanticDiff' },\n { method: 'GET', path: '/ai/summary', handler: 'getPageSummary' },\n { method: 'POST', path: '/ai/semantic-search', handler: 'aiSemanticSearch', bodyRequired: true },\n\n // State management (static routes before parameterized)\n { method: 'GET', path: '/control/states', handler: 'getStates' },\n { method: 'GET', path: '/control/states/active', handler: 'getActiveStates' },\n { method: 'GET', path: '/control/states/snapshot', handler: 'getStateSnapshot' },\n { method: 'POST', path: '/control/states/find-path', handler: 'findPath', bodyRequired: true },\n { method: 'POST', path: '/control/states/navigate', handler: 'navigateTo', bodyRequired: true },\n { method: 'GET', path: '/control/state/:id', handler: 'getState', params: ['id'] },\n { method: 'POST', path: '/control/state/:id/activate', handler: 'activateState', params: ['id'] },\n {\n method: 'POST',\n path: '/control/state/:id/deactivate',\n handler: 'deactivateState',\n params: ['id'],\n },\n { method: 'GET', path: '/control/state-groups', handler: 'getStateGroups' },\n {\n method: 'POST',\n path: '/control/state-group/:id/activate',\n handler: 'activateStateGroup',\n params: ['id'],\n },\n {\n method: 'POST',\n path: '/control/state-group/:id/deactivate',\n handler: 'deactivateStateGroup',\n params: ['id'],\n },\n { method: 'GET', path: '/control/transitions', handler: 'getTransitions' },\n {\n method: 'GET',\n path: '/control/transition/:id/can-execute',\n handler: 'canExecuteTransition',\n params: ['id'],\n },\n {\n method: 'POST',\n path: '/control/transition/:id/execute',\n handler: 'executeTransition',\n params: ['id'],\n },\n\n // Intent endpoints\n { method: 'GET', path: '/ai/intents', handler: 'listIntents' },\n { method: 'POST', path: '/ai/intents/execute', handler: 'executeIntent', bodyRequired: true },\n { method: 'POST', path: '/ai/intents/find', handler: 'findIntent', bodyRequired: true },\n { method: 'POST', path: '/ai/intents/register', handler: 'registerIntent', bodyRequired: true },\n {\n method: 'POST',\n path: '/ai/intents/execute-from-query',\n handler: 'executeIntentFromQuery',\n bodyRequired: true,\n },\n\n // Recovery endpoints\n {\n method: 'POST',\n path: '/ai/recovery/attempt',\n handler: 'attemptRecovery',\n bodyRequired: true,\n },\n\n // Cross-app analysis endpoints\n { method: 'GET', path: '/ai/analyze/data', handler: 'analyzePageData' },\n { method: 'GET', path: '/ai/analyze/regions', handler: 'analyzePageRegions' },\n { method: 'GET', path: '/ai/analyze/structured-data', handler: 'analyzeStructuredData' },\n {\n method: 'POST',\n path: '/ai/analyze/cross-app-compare',\n handler: 'crossAppCompare',\n bodyRequired: true,\n },\n\n // Page navigation\n { method: 'POST', path: '/control/page/refresh', handler: 'pageRefresh' },\n { method: 'POST', path: '/control/page/navigate', handler: 'pageNavigate', bodyRequired: true },\n { method: 'POST', path: '/control/page/back', handler: 'pageGoBack' },\n { method: 'POST', path: '/control/page/forward', handler: 'pageGoForward' },\n\n // Annotations (static routes before parameterized)\n { method: 'GET', path: '/annotations', handler: 'getAnnotations' },\n { method: 'GET', path: '/annotations/export', handler: 'exportAnnotations' },\n { method: 'GET', path: '/annotations/coverage', handler: 'getAnnotationCoverage' },\n { method: 'POST', path: '/annotations/import', handler: 'importAnnotations', bodyRequired: true },\n { method: 'GET', path: '/annotations/:id', handler: 'getAnnotation', params: ['id'] },\n {\n method: 'PUT',\n path: '/annotations/:id',\n handler: 'setAnnotation',\n params: ['id'],\n bodyRequired: true,\n },\n { method: 'DELETE', path: '/annotations/:id', handler: 'deleteAnnotation', params: ['id'] },\n\n // Performance diagnostics\n { method: 'GET', path: '/control/performance-entries', handler: 'getPerformanceEntries' },\n {\n method: 'POST',\n path: '/control/performance-entries/clear',\n handler: 'clearPerformanceEntries',\n },\n { method: 'GET', path: '/control/browser-events', handler: 'getBrowserEvents' },\n];\n\n/**\n * WebSocket message types\n */\nexport type WebSocketMessageType =\n | 'subscribe'\n | 'unsubscribe'\n | 'event'\n | 'snapshot'\n | 'action'\n | 'error';\n\n/**\n * WebSocket message\n */\nexport interface WebSocketMessage<T = unknown> {\n type: WebSocketMessageType;\n channel?: string;\n data?: T;\n error?: string;\n timestamp: number;\n}\n","/**\n * WebSocket Handler for UI Bridge Server\n *\n * Handles WebSocket connections and message routing.\n */\n\nimport type { UIBridgeServerHandlers } from './types';\nimport type {\n BridgeEvent,\n BridgeEventType,\n WSClientMessage,\n WSServerMessage,\n WSWelcomeMessage,\n WSPongMessage,\n WSSubscribedMessage,\n WSUnsubscribedMessage,\n WSEventMessage,\n WSResponseMessage,\n WSErrorMessage,\n} from '../core';\n\n/**\n * WebSocket-like interface for compatibility\n */\nexport interface WebSocketLike {\n send(data: string): void;\n close(): void;\n readyState: number;\n onmessage?: ((event: { data: string }) => void) | null;\n onclose?: (() => void) | null;\n onerror?: ((error: unknown) => void) | null;\n}\n\n/**\n * Client subscription state\n */\ninterface ClientSubscription {\n events: Set<BridgeEventType>;\n elementIds: Set<string>;\n componentIds: Set<string>;\n}\n\n/**\n * Connected client info\n */\ninterface ConnectedClient {\n id: string;\n ws: WebSocketLike;\n subscription: ClientSubscription;\n connectedAt: number;\n}\n\n/**\n * Generate unique ID\n */\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;\n}\n\n/**\n * UI Bridge server version\n */\nconst VERSION = '0.1.0';\n\n/**\n * WebSocket handler for UI Bridge server\n */\nexport class UIBridgeWSHandler {\n private handlers: UIBridgeServerHandlers;\n private clients = new Map<string, ConnectedClient>();\n private verbose: boolean;\n private log: (message: string) => void;\n\n constructor(\n handlers: UIBridgeServerHandlers,\n options: { verbose?: boolean; log?: (message: string) => void } = {}\n ) {\n this.handlers = handlers;\n this.verbose = options.verbose ?? false;\n this.log = options.log ?? console.log;\n }\n\n /**\n * Handle new WebSocket connection\n */\n handleConnection(ws: WebSocketLike): string {\n const clientId = generateId();\n\n const client: ConnectedClient = {\n id: clientId,\n ws,\n subscription: {\n events: new Set(),\n elementIds: new Set(),\n componentIds: new Set(),\n },\n connectedAt: Date.now(),\n };\n\n this.clients.set(clientId, client);\n\n if (this.verbose) {\n this.log(`[WS] Client connected: ${clientId}`);\n }\n\n // Set up message handler\n ws.onmessage = (event: { data: string }) => {\n this.handleMessage(clientId, event.data);\n };\n\n // Set up close handler\n ws.onclose = () => {\n this.handleDisconnect(clientId);\n };\n\n // Send welcome message\n this.sendToClient(clientId, {\n id: generateId(),\n type: 'welcome',\n timestamp: Date.now(),\n payload: {\n version: VERSION,\n features: {\n renderLog: true,\n control: true,\n debug: true,\n },\n clientId,\n },\n } as WSWelcomeMessage);\n\n return clientId;\n }\n\n /**\n * Handle client disconnect\n */\n handleDisconnect(clientId: string): void {\n this.clients.delete(clientId);\n\n if (this.verbose) {\n this.log(`[WS] Client disconnected: ${clientId}`);\n }\n }\n\n /**\n * Handle incoming message\n */\n private async handleMessage(clientId: string, data: string): Promise<void> {\n const client = this.clients.get(clientId);\n if (!client) return;\n\n let message: WSClientMessage;\n try {\n message = JSON.parse(data) as WSClientMessage;\n } catch (error) {\n this.sendError(clientId, undefined, 'PARSE_ERROR', 'Invalid JSON message');\n return;\n }\n\n if (this.verbose) {\n this.log(`[WS] ${clientId} -> ${message.type}`);\n }\n\n try {\n switch (message.type) {\n case 'ping':\n this.handlePing(clientId, message.id);\n break;\n\n case 'subscribe':\n await this.handleSubscribe(clientId, message);\n break;\n\n case 'unsubscribe':\n await this.handleUnsubscribe(clientId, message);\n break;\n\n case 'find':\n await this.handleFind(clientId, message);\n break;\n\n case 'discover':\n // @deprecated Use 'find' instead\n await this.handleFind(clientId, message as unknown as WSClientMessage & { type: 'find' });\n break;\n\n case 'getElement':\n await this.handleGetElement(clientId, message);\n break;\n\n case 'getSnapshot':\n await this.handleGetSnapshot(clientId, message);\n break;\n\n case 'executeAction':\n await this.handleExecuteAction(clientId, message);\n break;\n\n case 'executeComponentAction':\n await this.handleExecuteComponentAction(clientId, message);\n break;\n\n case 'executeWorkflow':\n await this.handleExecuteWorkflow(clientId, message);\n break;\n\n default:\n this.sendError(\n clientId,\n (message as WSClientMessage).id,\n 'UNKNOWN_MESSAGE',\n `Unknown message type: ${(message as WSClientMessage).type}`\n );\n }\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n this.sendError(clientId, message.id, 'HANDLER_ERROR', err.message);\n }\n }\n\n /**\n * Handle ping message\n */\n private handlePing(clientId: string, _requestId: string): void {\n this.sendToClient(clientId, {\n id: generateId(),\n type: 'pong',\n timestamp: Date.now(),\n } as WSPongMessage);\n }\n\n /**\n * Handle subscribe message\n */\n private async handleSubscribe(\n clientId: string,\n message: WSClientMessage & { type: 'subscribe' }\n ): Promise<void> {\n const client = this.clients.get(clientId);\n if (!client) return;\n\n const { events, elementIds, componentIds } = message.payload;\n\n // Add to subscriptions\n if (events?.length) {\n for (const event of events) {\n client.subscription.events.add(event);\n }\n }\n if (elementIds?.length) {\n for (const id of elementIds) {\n client.subscription.elementIds.add(id);\n }\n }\n if (componentIds?.length) {\n for (const id of componentIds) {\n client.subscription.componentIds.add(id);\n }\n }\n\n this.sendToClient(clientId, {\n id: generateId(),\n type: 'subscribed',\n timestamp: Date.now(),\n payload: {\n events: Array.from(client.subscription.events),\n },\n } as WSSubscribedMessage);\n }\n\n /**\n * Handle unsubscribe message\n */\n private async handleUnsubscribe(\n clientId: string,\n message: WSClientMessage & { type: 'unsubscribe' }\n ): Promise<void> {\n const client = this.clients.get(clientId);\n if (!client) return;\n\n const { events } = message.payload;\n\n let removedEvents: BridgeEventType[];\n if (events?.length) {\n removedEvents = events.filter((e: BridgeEventType) => client.subscription.events.has(e));\n for (const event of events) {\n client.subscription.events.delete(event);\n }\n } else {\n removedEvents = Array.from(client.subscription.events);\n client.subscription.events.clear();\n client.subscription.elementIds.clear();\n client.subscription.componentIds.clear();\n }\n\n this.sendToClient(clientId, {\n id: generateId(),\n type: 'unsubscribed',\n timestamp: Date.now(),\n payload: {\n events: removedEvents,\n },\n } as WSUnsubscribedMessage);\n }\n\n /**\n * Handle find message\n */\n private async handleFind(\n clientId: string,\n message: WSClientMessage & { type: 'find' }\n ): Promise<void> {\n const result = await this.handlers.find(message.payload || {});\n\n if (result.success && result.data) {\n this.sendResponse(clientId, message.id, true, { elements: result.data.elements });\n } else {\n this.sendResponse(clientId, message.id, false, undefined, result.error);\n }\n }\n\n /**\n * Handle getElement message\n */\n private async handleGetElement(\n clientId: string,\n message: WSClientMessage & { type: 'getElement' }\n ): Promise<void> {\n const { elementId } = message.payload;\n const result = await this.handlers.getElement(elementId);\n\n if (result.success) {\n this.sendResponse(clientId, message.id, true, { element: result.data });\n } else {\n this.sendResponse(clientId, message.id, false, undefined, result.error);\n }\n }\n\n /**\n * Handle getSnapshot message\n */\n private async handleGetSnapshot(\n clientId: string,\n message: WSClientMessage & { type: 'getSnapshot' }\n ): Promise<void> {\n const result = await this.handlers.getControlSnapshot();\n\n if (result.success) {\n this.sendResponse(clientId, message.id, true, result.data);\n } else {\n this.sendResponse(clientId, message.id, false, undefined, result.error);\n }\n }\n\n /**\n * Handle executeAction message\n */\n private async handleExecuteAction(\n clientId: string,\n message: WSClientMessage & { type: 'executeAction' }\n ): Promise<void> {\n const { elementId, action } = message.payload;\n const result = await this.handlers.executeElementAction(elementId, action);\n\n this.sendResponse(clientId, message.id, result.success, result.data, result.error);\n }\n\n /**\n * Handle executeComponentAction message\n */\n private async handleExecuteComponentAction(\n clientId: string,\n message: WSClientMessage & { type: 'executeComponentAction' }\n ): Promise<void> {\n const { componentId, action, params } = message.payload;\n const result = await this.handlers.executeComponentAction(componentId, { action, params });\n\n this.sendResponse(clientId, message.id, result.success, result.data, result.error);\n }\n\n /**\n * Handle executeWorkflow message\n */\n private async handleExecuteWorkflow(\n clientId: string,\n message: WSClientMessage & { type: 'executeWorkflow' }\n ): Promise<void> {\n const { workflowId, params } = message.payload;\n\n // Note: Progress streaming would need to be added to the handlers interface\n // For now, we just run the workflow without progress callbacks\n const result = await this.handlers.runWorkflow(workflowId, { params });\n\n this.sendResponse(clientId, message.id, result.success, result.data, result.error);\n }\n\n /**\n * Broadcast event to all subscribed clients\n */\n broadcastEvent(event: BridgeEvent): void {\n for (const [clientId, client] of this.clients) {\n // Check if client is subscribed to this event type\n if (client.subscription.events.size === 0 || client.subscription.events.has(event.type)) {\n // Check element/component filters if applicable\n const eventData = event.data as { elementId?: string; componentId?: string };\n\n if (\n eventData.elementId &&\n client.subscription.elementIds.size > 0 &&\n !client.subscription.elementIds.has(eventData.elementId)\n ) {\n continue;\n }\n\n if (\n eventData.componentId &&\n client.subscription.componentIds.size > 0 &&\n !client.subscription.componentIds.has(eventData.componentId)\n ) {\n continue;\n }\n\n this.sendToClient(clientId, {\n id: generateId(),\n type: 'event',\n timestamp: Date.now(),\n payload: event,\n } as WSEventMessage);\n }\n }\n }\n\n /**\n * Send message to specific client\n */\n private sendToClient(clientId: string, message: WSServerMessage): void {\n const client = this.clients.get(clientId);\n if (!client || client.ws.readyState !== 1) return;\n\n try {\n client.ws.send(JSON.stringify(message));\n\n if (this.verbose && message.type !== 'pong') {\n this.log(`[WS] ${clientId} <- ${message.type}`);\n }\n } catch (error) {\n console.error(`Failed to send message to ${clientId}:`, error);\n }\n }\n\n /**\n * Send response message\n */\n private sendResponse<T>(\n clientId: string,\n requestId: string,\n success: boolean,\n data?: T,\n error?: string\n ): void {\n this.sendToClient(clientId, {\n id: generateId(),\n type: 'response',\n timestamp: Date.now(),\n requestId,\n payload: {\n success,\n data,\n error,\n },\n } as WSResponseMessage<T>);\n }\n\n /**\n * Send error message\n */\n private sendError(\n clientId: string,\n requestId: string | undefined,\n code: string,\n message: string\n ): void {\n this.sendToClient(clientId, {\n id: generateId(),\n type: 'error',\n timestamp: Date.now(),\n requestId,\n payload: {\n code,\n message,\n },\n } as WSErrorMessage);\n }\n\n /**\n * Get connected client count\n */\n get clientCount(): number {\n return this.clients.size;\n }\n\n /**\n * Get all connected client IDs\n */\n get clientIds(): string[] {\n return Array.from(this.clients.keys());\n }\n\n /**\n * Disconnect all clients\n */\n disconnectAll(): void {\n for (const [_clientId, client] of this.clients) {\n try {\n client.ws.close();\n } catch {\n // Ignore close errors\n }\n }\n this.clients.clear();\n }\n}\n","/**\n * Standalone Server\n *\n * Standalone HTTP server for UI Bridge that can run independently.\n * Supports both HTTP and WebSocket connections.\n */\n\nimport type {\n UIBridgeServerConfig,\n UIBridgeServerHandlers,\n APIResponse,\n WebSocketMessage,\n} from './types';\nimport { UI_BRIDGE_ROUTES } from './types';\nimport { UIBridgeWSHandler, type WebSocketLike } from './websocket-handler';\nimport type { BridgeEvent } from '../core';\n\n/**\n * Standalone server configuration\n */\nexport interface StandaloneServerConfig extends UIBridgeServerConfig {\n /** Host to bind to */\n host?: string;\n /** Port to listen on */\n port?: number;\n /** Enable WebSocket support */\n websocket?: boolean;\n /** WebSocket port (defaults to port) */\n websocketPort?: number;\n /** Logging function */\n log?: (message: string) => void;\n}\n\n/**\n * Default configuration\n */\nconst DEFAULT_CONFIG: Required<\n Pick<StandaloneServerConfig, 'host' | 'port' | 'websocket' | 'websocketPort' | 'log'>\n> = {\n host: 'localhost',\n port: 9876,\n websocket: false,\n websocketPort: 9876,\n log: console.log,\n};\n\n/**\n * Wrap error in API format\n */\nfunction wrapError(error: Error | string, code?: string): APIResponse<never> {\n return {\n success: false,\n error: typeof error === 'string' ? error : error.message,\n code,\n timestamp: Date.now(),\n };\n}\n\n/**\n * Simple HTTP server implementation using Node.js built-in http module\n * with optional WebSocket support.\n */\nexport class StandaloneServer {\n private server: import('http').Server | null = null;\n private wsServer: unknown = null; // WebSocket.Server from 'ws' package\n private config: Required<\n Pick<StandaloneServerConfig, 'host' | 'port' | 'websocket' | 'websocketPort' | 'log'>\n > &\n StandaloneServerConfig;\n private handlers: UIBridgeServerHandlers;\n private wsHandler: UIBridgeWSHandler | null = null;\n private wsConnections: Set<WebSocketLike> = new Set();\n\n constructor(handlers: UIBridgeServerHandlers, config: StandaloneServerConfig = {}) {\n this.handlers = handlers;\n this.config = { ...DEFAULT_CONFIG, ...config };\n\n // Create WebSocket handler if enabled\n if (this.config.websocket) {\n this.wsHandler = new UIBridgeWSHandler(handlers, {\n verbose: true,\n log: this.config.log,\n });\n }\n }\n\n /**\n * Get enabled capabilities based on handlers\n */\n private getCapabilities(): string[] {\n return ['elements', 'components', 'actions', 'search', 'workflows'];\n }\n\n /**\n * Start the server\n */\n async start(): Promise<void> {\n const http = await import('http');\n\n this.server = http.createServer(async (req, res) => {\n await this.handleRequest(req, res);\n });\n\n // Start WebSocket server if enabled\n if (this.config.websocket && this.wsHandler) {\n await this.startWebSocketServer();\n }\n\n return new Promise((resolve, reject) => {\n this.server!.listen(this.config.port, this.config.host, () => {\n this.config.log(\n `UI Bridge server listening on http://${this.config.host}:${this.config.port}`\n );\n if (this.config.websocket) {\n const wsPort = this.config.websocketPort || this.config.port;\n this.config.log(\n `UI Bridge WebSocket server listening on ws://${this.config.host}:${wsPort}`\n );\n }\n resolve();\n });\n\n this.server!.on('error', reject);\n });\n }\n\n /**\n * Start WebSocket server\n */\n private async startWebSocketServer(): Promise<void> {\n try {\n // Dynamically import ws package\n const { WebSocketServer } = await import('ws');\n\n const wsPort = this.config.websocketPort || this.config.port;\n const useSamePort = wsPort === this.config.port;\n\n if (useSamePort && this.server) {\n // Attach to same HTTP server (upgrade handling)\n this.wsServer = new WebSocketServer({ server: this.server });\n } else {\n // Create separate WebSocket server\n this.wsServer = new WebSocketServer({\n host: this.config.host,\n port: wsPort,\n });\n }\n\n const wss = this.wsServer as {\n on(event: 'connection', callback: (ws: WebSocketLike) => void): void;\n on(event: 'error', callback: (error: Error) => void): void;\n close(): void;\n };\n\n wss.on('connection', (ws) => {\n this.wsConnections.add(ws);\n this.wsHandler!.handleConnection(ws);\n\n ws.onclose = () => {\n this.wsConnections.delete(ws);\n };\n });\n\n wss.on('error', (error) => {\n this.config.log(`WebSocket server error: ${error.message}`);\n });\n } catch (error) {\n // ws package not installed - WebSocket support disabled\n this.config.log(\n 'Warning: WebSocket support requires the \"ws\" package. Install it with: npm install ws'\n );\n this.wsHandler = null;\n }\n }\n\n /**\n * Stop the server\n */\n async stop(): Promise<void> {\n // Close WebSocket handler\n if (this.wsHandler) {\n this.wsHandler.disconnectAll();\n }\n\n // Close WebSocket server\n if (this.wsServer) {\n const wss = this.wsServer as { close(): void };\n wss.close();\n this.wsServer = null;\n }\n\n // Close WebSocket connections\n for (const ws of this.wsConnections) {\n ws.close();\n }\n this.wsConnections.clear();\n\n return new Promise((resolve, reject) => {\n if (!this.server) {\n resolve();\n return;\n }\n\n this.server.close((err) => {\n if (err) reject(err);\n else resolve();\n });\n });\n }\n\n /**\n * Handle an HTTP request\n */\n private async handleRequest(\n req: import('http').IncomingMessage,\n res: import('http').ServerResponse\n ): Promise<void> {\n const url = new URL(req.url || '/', `http://${req.headers.host}`);\n const method = req.method || 'GET';\n const basePath = this.config.basePath || '/ui-bridge';\n\n // Add CORS headers\n if (this.config.cors) {\n res.setHeader('Access-Control-Allow-Origin', '*');\n res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');\n }\n\n // Handle preflight\n if (method === 'OPTIONS') {\n res.writeHead(204);\n res.end();\n return;\n }\n\n // Health check\n if (url.pathname === '/health') {\n const healthResponse: Record<string, unknown> = { status: 'ok', timestamp: Date.now() };\n\n // Include UI Bridge metadata for app discovery\n if (this.config.appInfo) {\n const uiBridge: Record<string, unknown> = {\n version: '0.3.0',\n ...this.config.appInfo,\n capabilities: this.getCapabilities(),\n };\n\n // Try to get element/component counts from handlers\n try {\n const snapshotResult = await this.handlers.getControlSnapshot?.();\n if (snapshotResult?.success && snapshotResult.data) {\n const data = snapshotResult.data as any;\n uiBridge.elementCount = data.elements?.length ?? 0;\n uiBridge.componentCount = data.components?.length ?? 0;\n }\n } catch {\n // Ignore - counts are optional\n }\n\n healthResponse.uiBridge = uiBridge;\n }\n\n this.sendJSON(res, healthResponse);\n return;\n }\n\n // Remove base path\n let path = url.pathname;\n if (path.startsWith(basePath)) {\n path = path.slice(basePath.length) || '/';\n }\n\n // Find matching route\n const route = this.findRoute(path, method);\n if (!route) {\n this.sendJSON(res, wrapError('Not found', 'NOT_FOUND'), 404);\n return;\n }\n\n try {\n // Parse body for POST/PUT/PATCH requests or when body is required\n let body: unknown = {};\n if (method === 'POST' || method === 'PUT' || method === 'PATCH' || route.bodyRequired) {\n body = await this.parseBody(req);\n }\n\n // Extract params\n const params = this.extractParams(path, route.path);\n\n // Get handler\n const handlerName = route.handler as keyof UIBridgeServerHandlers;\n const handler = this.handlers[handlerName];\n\n if (!handler) {\n this.sendJSON(res, wrapError('Not implemented', 'NOT_IMPLEMENTED'), 501);\n return;\n }\n\n // Build arguments\n const args: unknown[] = [];\n\n if (route.params) {\n for (const param of route.params) {\n args.push(params[param]);\n }\n }\n\n if (route.bodyRequired || method === 'POST' || method === 'PUT' || method === 'PATCH') {\n args.push(body);\n }\n\n if (method === 'GET') {\n const query = Object.fromEntries(url.searchParams);\n if (Object.keys(query).length > 0) {\n args.push(query);\n }\n }\n\n // Call handler\n const result = await (handler as (...args: unknown[]) => Promise<APIResponse<unknown>>)(\n ...args\n );\n this.sendJSON(res, result);\n } catch (error) {\n this.config.log(`Error handling ${method} ${path}: ${error}`);\n this.sendJSON(res, wrapError(error as Error, 'INTERNAL_ERROR'), 500);\n }\n }\n\n /**\n * Find a matching route\n */\n private findRoute(path: string, method: string): (typeof UI_BRIDGE_ROUTES)[0] | null {\n for (const route of UI_BRIDGE_ROUTES) {\n if (route.method !== method) continue;\n\n const routeRegex = route.path.replace(/:[^/]+/g, '([^/]+)').replace(/\\//g, '\\\\/');\n\n const regex = new RegExp(`^${routeRegex}$`);\n if (regex.test(path)) {\n return route;\n }\n }\n return null;\n }\n\n /**\n * Extract params from path\n */\n private extractParams(path: string, routePath: string): Record<string, string> {\n const params: Record<string, string> = {};\n const routeParts = routePath.split('/');\n const pathParts = path.split('/');\n\n for (let i = 0; i < routeParts.length; i++) {\n if (routeParts[i].startsWith(':')) {\n params[routeParts[i].slice(1)] = pathParts[i];\n }\n }\n\n return params;\n }\n\n /**\n * Parse request body\n */\n private parseBody(req: import('http').IncomingMessage): Promise<unknown> {\n return new Promise((resolve, reject) => {\n let data = '';\n req.on('data', (chunk) => (data += chunk));\n req.on('end', () => {\n try {\n resolve(data ? JSON.parse(data) : {});\n } catch {\n resolve({});\n }\n });\n req.on('error', reject);\n });\n }\n\n /**\n * Send JSON response\n */\n private sendJSON(res: import('http').ServerResponse, data: unknown, status = 200): void {\n res.writeHead(status, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify(data));\n }\n\n /**\n * Broadcast a message to all WebSocket connections (legacy)\n */\n broadcast(message: WebSocketMessage): void {\n const data = JSON.stringify(message);\n for (const ws of this.wsConnections) {\n if (ws.readyState === 1) {\n // OPEN\n ws.send(data);\n }\n }\n }\n\n /**\n * Broadcast an event to all subscribed WebSocket clients\n */\n broadcastEvent(event: BridgeEvent): void {\n if (this.wsHandler) {\n this.wsHandler.broadcastEvent(event);\n }\n }\n\n /**\n * Get WebSocket handler for direct access\n */\n getWSHandler(): UIBridgeWSHandler | null {\n return this.wsHandler;\n }\n\n /**\n * Get number of connected WebSocket clients\n */\n get wsClientCount(): number {\n return this.wsHandler?.clientCount ?? 0;\n }\n\n /**\n * Get the server address\n */\n getAddress(): { host: string; port: number } | null {\n const address = this.server?.address();\n if (!address || typeof address === 'string') return null;\n return { host: this.config.host, port: address.port };\n }\n}\n\n/**\n * Create and start a standalone server\n */\nexport async function createStandaloneServer(\n handlers: UIBridgeServerHandlers,\n config?: StandaloneServerConfig\n): Promise<StandaloneServer> {\n const server = new StandaloneServer(handlers, config);\n await server.start();\n return server;\n}\n\n/**\n * CLI entry point\n */\nexport async function startCLI(\n handlers: UIBridgeServerHandlers,\n args: string[] = process.argv.slice(2)\n): Promise<void> {\n const config: StandaloneServerConfig = {};\n\n // Parse CLI args\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n const nextArg = args[i + 1];\n\n if (arg === '--port' || arg === '-p') {\n config.port = parseInt(nextArg);\n i++;\n } else if (arg === '--host' || arg === '-h') {\n config.host = nextArg;\n i++;\n } else if (arg === '--cors') {\n config.cors = true;\n }\n }\n\n const server = await createStandaloneServer(handlers, config);\n\n // Handle shutdown\n process.on('SIGINT', async () => {\n console.log('\\nShutting down...');\n await server.stop();\n process.exit(0);\n });\n\n process.on('SIGTERM', async () => {\n await server.stop();\n process.exit(0);\n });\n}\n"]}
@@ -0,0 +1,365 @@
1
+ import { a8 as SearchCriteria, f as AssertionType, e as AssertionResult, A as AIDiscoveredElement, d as AssertionRequest } from '../types-D_ypYl3T.mjs';
2
+ import { A as AssertionConfig } from '../assertions-CTw1hfOx.mjs';
3
+ import { D as DiscoveredElement } from '../types-CJGrBEhC.mjs';
4
+ import '../types-suaYwWWg.mjs';
5
+
6
+ /**
7
+ * Spec Types
8
+ *
9
+ * Type definitions for the UI Bridge specification system.
10
+ * Specs define declarative assertions about UI elements that can be
11
+ * authored, stored, executed, and used for regression testing.
12
+ */
13
+
14
+ type SpecCategory = 'element-presence' | 'accessibility' | 'form-validation' | 'state-consistency' | 'modal-dialog' | 'navigation' | 'cross-page-consistency' | 'custom';
15
+ type SpecSeverity = 'critical' | 'warning' | 'info';
16
+ type SpecSource = 'auto' | 'manual' | 'ai-generated';
17
+ /**
18
+ * Unified target for spec assertions.
19
+ * Bridges to AssertionRequest.target (string | SearchCriteria).
20
+ */
21
+ type SpecTarget = {
22
+ type: 'elementId';
23
+ elementId: string;
24
+ label?: string;
25
+ } | {
26
+ type: 'search';
27
+ criteria: SearchCriteria;
28
+ label?: string;
29
+ };
30
+ /**
31
+ * A condition that must be met for an assertion to be evaluated.
32
+ * If the condition is not met, the assertion is skipped (passes with no opinion).
33
+ *
34
+ * Use case: "Button is disabled WHEN runner is not connected"
35
+ * - The assertion only has an opinion when the runner is NOT connected
36
+ * - When connected, the assertion should skip (not fail)
37
+ */
38
+ type AssertionCondition = {
39
+ /** Check if a target element exists */
40
+ type: 'exists';
41
+ target: SpecTarget;
42
+ } | {
43
+ /** Check if a target element does NOT exist */
44
+ type: 'notExists';
45
+ target: SpecTarget;
46
+ } | {
47
+ /** Check if a target element has specific text content */
48
+ type: 'hasText';
49
+ target: SpecTarget;
50
+ text: string;
51
+ };
52
+ /**
53
+ * A single spec assertion — wraps an AssertionRequest with metadata.
54
+ */
55
+ interface SpecAssertion {
56
+ id: string;
57
+ description: string;
58
+ category: SpecCategory;
59
+ severity: SpecSeverity;
60
+ target: SpecTarget;
61
+ /** Strongly typed assertion type from ui-bridge/ai */
62
+ assertionType: AssertionType;
63
+ expected?: unknown;
64
+ attributeName?: string;
65
+ propertyName?: string;
66
+ message?: string;
67
+ timeout?: number;
68
+ source: SpecSource;
69
+ reviewed: boolean;
70
+ enabled: boolean;
71
+ notes?: string;
72
+ /**
73
+ * Optional condition that must be met for this assertion to be evaluated.
74
+ * If condition is not met, the assertion is skipped (passes with no opinion).
75
+ *
76
+ * Example: "A is false when B is false" → condition checks if B is false,
77
+ * and only then evaluates whether A is false. If B is true, skip.
78
+ */
79
+ condition?: AssertionCondition;
80
+ }
81
+ /**
82
+ * A named collection of related spec assertions.
83
+ */
84
+ interface SpecGroup {
85
+ id: string;
86
+ name: string;
87
+ description: string;
88
+ category: SpecCategory;
89
+ assertions: SpecAssertion[];
90
+ stateId?: string;
91
+ transitionId?: string;
92
+ source: SpecSource;
93
+ tags?: string[];
94
+ }
95
+ interface SpecMetadata {
96
+ component?: string;
97
+ author?: string;
98
+ createdAt?: string;
99
+ updatedAt?: string;
100
+ pageUrl?: string;
101
+ tags?: string[];
102
+ /** Explicit element source: "control" for runner UI, "external" for browser tab */
103
+ elementSource?: 'control' | 'external';
104
+ [key: string]: unknown;
105
+ }
106
+ /**
107
+ * Top-level spec config — the JSON file format.
108
+ */
109
+ interface SpecConfig {
110
+ version: '1.0.0';
111
+ description?: string;
112
+ groups: SpecGroup[];
113
+ /** Ungrouped assertions (convenience for simple specs) */
114
+ assertions?: SpecAssertion[];
115
+ metadata?: SpecMetadata;
116
+ }
117
+ interface SpecAssertionResult {
118
+ assertionId: string;
119
+ groupId?: string;
120
+ severity: SpecSeverity;
121
+ category: SpecCategory;
122
+ skipped: boolean;
123
+ /** Reason for skipping (if skipped) */
124
+ skipReason?: 'disabled' | 'condition_not_met' | 'filtered';
125
+ /** The underlying assertion result (null if skipped) */
126
+ result: AssertionResult | null;
127
+ }
128
+ interface SpecGroupResult {
129
+ groupId: string;
130
+ groupName: string;
131
+ assertionResults: SpecAssertionResult[];
132
+ passedCount: number;
133
+ failedCount: number;
134
+ skippedCount: number;
135
+ passed: boolean;
136
+ durationMs: number;
137
+ timestamp: number;
138
+ }
139
+ interface SpecExecutionResult {
140
+ specVersion: string;
141
+ groupResults: SpecGroupResult[];
142
+ ungroupedResults: SpecAssertionResult[];
143
+ totalAssertions: number;
144
+ passedCount: number;
145
+ failedCount: number;
146
+ skippedCount: number;
147
+ passed: boolean;
148
+ durationMs: number;
149
+ timestamp: number;
150
+ }
151
+ interface SpecExecutionOptions {
152
+ categories?: SpecCategory[];
153
+ severities?: SpecSeverity[];
154
+ groupIds?: string[];
155
+ assertionIds?: string[];
156
+ stopOnFailure?: boolean;
157
+ skipUnreviewed?: boolean;
158
+ timeout?: number;
159
+ }
160
+ interface SpecCoverage {
161
+ totalElements: number;
162
+ specifiedElements: number;
163
+ coveragePercent: number;
164
+ specifiedIds: string[];
165
+ unspecifiedIds: string[];
166
+ timestamp: number;
167
+ }
168
+ type SpecEventType = 'spec:loaded' | 'spec:unloaded' | 'spec:updated' | 'spec:cleared' | 'spec:assertion-added' | 'spec:assertion-removed' | 'spec:group-added' | 'spec:group-removed';
169
+ interface SpecEvent {
170
+ type: SpecEventType;
171
+ specId?: string;
172
+ groupId?: string;
173
+ assertionId?: string;
174
+ timestamp: number;
175
+ }
176
+ declare const SPEC_CONFIG_VERSION = "1.0.0";
177
+ declare const SPEC_FILE_EXTENSION = ".spec.uibridge.json";
178
+ declare const VALID_ASSERTION_TYPES: readonly AssertionType[];
179
+ declare const VALID_SPEC_CATEGORIES: readonly SpecCategory[];
180
+ declare const VALID_SPEC_SEVERITIES: readonly SpecSeverity[];
181
+ declare const VALID_SPEC_SOURCES: readonly SpecSource[];
182
+
183
+ /**
184
+ * Spec Validator
185
+ *
186
+ * Structural validation for .spec.uibridge.json files.
187
+ * No JSON Schema dependency — validates manually.
188
+ */
189
+
190
+ interface ValidationError {
191
+ path: string;
192
+ message: string;
193
+ }
194
+ interface ValidationResult {
195
+ valid: boolean;
196
+ errors: ValidationError[];
197
+ }
198
+ declare function isValidAssertionType(value: unknown): value is AssertionType;
199
+ declare function isValidSpecCategory(value: unknown): value is SpecCategory;
200
+ declare function isValidSpecSeverity(value: unknown): value is SpecSeverity;
201
+ declare function isValidSpecSource(value: unknown): value is SpecSource;
202
+ declare function validateSpecAssertion(data: unknown, path?: string): ValidationError[];
203
+ declare function validateSpecGroup(data: unknown, path?: string): ValidationError[];
204
+ declare function validateSpecConfig(data: unknown): ValidationResult;
205
+
206
+ /**
207
+ * Spec Migration
208
+ *
209
+ * Converts legacy TestGeneratorOutput format (from qontinui-schemas)
210
+ * to the new SpecConfig format.
211
+ */
212
+
213
+ interface LegacyTestTarget {
214
+ type: 'elementId' | 'formId' | 'modalId';
215
+ elementId?: string;
216
+ formId?: string;
217
+ modalId?: string;
218
+ label?: string;
219
+ }
220
+ interface LegacyTestAssertion {
221
+ id: string;
222
+ description: string;
223
+ category: string;
224
+ severity: string;
225
+ target: LegacyTestTarget;
226
+ assertionType: string;
227
+ expected?: unknown;
228
+ attributeName?: string;
229
+ source: string;
230
+ reviewed: boolean;
231
+ enabled: boolean;
232
+ notes?: string;
233
+ }
234
+ interface LegacyTestSpecification {
235
+ id: string;
236
+ name: string;
237
+ description: string;
238
+ category: string;
239
+ assertions: LegacyTestAssertion[];
240
+ stateId: string;
241
+ transitionId?: string;
242
+ source: string;
243
+ createdAt: string;
244
+ updatedAt: string;
245
+ }
246
+ interface LegacyTestGeneratorOutput {
247
+ version: string;
248
+ projectId?: string;
249
+ generatorType?: string;
250
+ states?: unknown[];
251
+ transitions?: unknown[];
252
+ testSpecifications: LegacyTestSpecification[];
253
+ snapshotMetadata?: Record<string, unknown>;
254
+ explorationMetadata?: Record<string, unknown>;
255
+ createdAt?: string;
256
+ updatedAt?: string;
257
+ }
258
+ /**
259
+ * Coerce a raw string to a valid AssertionType, or return null.
260
+ */
261
+ declare function coerceAssertionType(raw: string): AssertionType | null;
262
+ /**
263
+ * Convert a legacy TestTarget to a SpecTarget.
264
+ */
265
+ declare function migrateLegacyTarget(legacy: LegacyTestTarget): SpecTarget;
266
+ /**
267
+ * Convert a legacy TestAssertion to a SpecAssertion.
268
+ */
269
+ declare function migrateLegacyAssertion(legacy: LegacyTestAssertion): SpecAssertion;
270
+ /**
271
+ * Convert a legacy TestGeneratorOutput to a SpecConfig.
272
+ */
273
+ declare function migrateFromTestGeneratorOutput(legacy: LegacyTestGeneratorOutput): SpecConfig;
274
+
275
+ /**
276
+ * Spec Store
277
+ *
278
+ * In-memory store for spec configs with CRUD operations,
279
+ * import/export, coverage tracking, and event emission.
280
+ * Follows the AnnotationStore pattern.
281
+ */
282
+
283
+ type SpecListener = (event: SpecEvent) => void;
284
+ interface SpecFilterOptions {
285
+ categories?: SpecCategory[];
286
+ severities?: SpecSeverity[];
287
+ enabledOnly?: boolean;
288
+ reviewedOnly?: boolean;
289
+ }
290
+ declare class SpecStore {
291
+ private configs;
292
+ private listeners;
293
+ load(specId: string, config: SpecConfig): void;
294
+ unload(specId: string): boolean;
295
+ get(specId: string): SpecConfig | undefined;
296
+ has(specId: string): boolean;
297
+ getIds(): string[];
298
+ getAll(): Map<string, SpecConfig>;
299
+ get count(): number;
300
+ clear(): void;
301
+ addGroup(specId: string, group: SpecGroup): boolean;
302
+ removeGroup(specId: string, groupId: string): boolean;
303
+ getGroup(specId: string, groupId: string): SpecGroup | undefined;
304
+ addAssertion(specId: string, groupId: string | null, assertion: SpecAssertion): boolean;
305
+ removeAssertion(specId: string, groupId: string | null, assertionId: string): boolean;
306
+ toggleAssertion(specId: string, groupId: string | null, assertionId: string): boolean;
307
+ markReviewed(specId: string, groupId: string | null, assertionId: string): boolean;
308
+ getAllAssertions(): SpecAssertion[];
309
+ filterAssertions(opts: SpecFilterOptions): SpecAssertion[];
310
+ getCoverage(allElementIds: string[]): SpecCoverage;
311
+ importConfig(specId: string, config: SpecConfig): boolean;
312
+ exportConfig(specId: string): SpecConfig | undefined;
313
+ on(listener: SpecListener): () => void;
314
+ private emit;
315
+ private findAssertion;
316
+ }
317
+ declare function getGlobalSpecStore(): SpecStore;
318
+ declare function resetGlobalSpecStore(): void;
319
+
320
+ /**
321
+ * Spec Executor
322
+ *
323
+ * Converts SpecAssertions to AssertionRequests and delegates
324
+ * to the existing AssertionExecutor from ui-bridge/ai.
325
+ */
326
+
327
+ /**
328
+ * Resolve a SpecTarget to an AssertionRequest target.
329
+ *
330
+ * For elementId targets, returns a SearchCriteria with idPattern for exact
331
+ * ID matching rather than a raw string (which would be treated as a text search).
332
+ */
333
+ declare function resolveTarget(target: SpecTarget): string | SearchCriteria;
334
+ declare class SpecExecutor {
335
+ private assertionExecutor;
336
+ constructor(config?: Partial<AssertionConfig>);
337
+ /**
338
+ * Update the element registry (pass-through to AssertionExecutor).
339
+ */
340
+ updateElements(elements: Array<DiscoveredElement | AIDiscoveredElement>): void;
341
+ /**
342
+ * Convert a SpecAssertion to an AssertionRequest.
343
+ */
344
+ toAssertionRequest(assertion: SpecAssertion): AssertionRequest;
345
+ /**
346
+ * Evaluate a condition to determine if an assertion should be executed.
347
+ * Returns true if the condition is met (assertion should run),
348
+ * false if condition is not met (assertion should skip/pass).
349
+ */
350
+ private evaluateCondition;
351
+ /**
352
+ * Execute a single SpecAssertion.
353
+ */
354
+ executeAssertion(assertion: SpecAssertion): Promise<SpecAssertionResult>;
355
+ /**
356
+ * Execute all assertions in a SpecGroup.
357
+ */
358
+ executeGroup(group: SpecGroup, options?: SpecExecutionOptions): Promise<SpecGroupResult>;
359
+ /**
360
+ * Execute a full SpecConfig.
361
+ */
362
+ execute(config: SpecConfig, options?: SpecExecutionOptions): Promise<SpecExecutionResult>;
363
+ }
364
+
365
+ export { type AssertionCondition, AssertionType, type LegacyTestAssertion, type LegacyTestGeneratorOutput, type LegacyTestSpecification, type LegacyTestTarget, SPEC_CONFIG_VERSION, SPEC_FILE_EXTENSION, SearchCriteria, type SpecAssertion, type SpecAssertionResult, type SpecCategory, type SpecConfig, type SpecCoverage, type SpecEvent, type SpecEventType, type SpecExecutionOptions, type SpecExecutionResult, SpecExecutor, type SpecFilterOptions, type SpecGroup, type SpecGroupResult, type SpecListener, type SpecMetadata, type SpecSeverity, type SpecSource, SpecStore, type SpecTarget, VALID_ASSERTION_TYPES, VALID_SPEC_CATEGORIES, VALID_SPEC_SEVERITIES, VALID_SPEC_SOURCES, type ValidationError, type ValidationResult, coerceAssertionType, getGlobalSpecStore, isValidAssertionType, isValidSpecCategory, isValidSpecSeverity, isValidSpecSource, migrateFromTestGeneratorOutput, migrateLegacyAssertion, migrateLegacyTarget, resetGlobalSpecStore, resolveTarget, validateSpecAssertion, validateSpecConfig, validateSpecGroup };