@qontinui/ui-bridge 0.3.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.
- package/dist/ai/index.d.mts +312 -155
- package/dist/ai/index.d.ts +312 -155
- package/dist/ai/index.js +2363 -67
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/index.mjs +2328 -68
- package/dist/ai/index.mjs.map +1 -1
- package/dist/annotations/index.d.mts +218 -0
- package/dist/annotations/index.d.ts +218 -0
- package/dist/annotations/index.js +246 -0
- package/dist/annotations/index.js.map +1 -0
- package/dist/annotations/index.mjs +241 -0
- package/dist/annotations/index.mjs.map +1 -0
- package/dist/assertions-BSR3afVr.d.ts +161 -0
- package/dist/assertions-CTw1hfOx.d.mts +161 -0
- package/dist/babel-plugin/index.js +23 -34
- package/dist/babel-plugin/index.js.map +1 -1
- package/dist/babel-plugin/index.mjs +23 -34
- package/dist/babel-plugin/index.mjs.map +1 -1
- package/dist/browser-capture-Bms60T6f.d.mts +47 -0
- package/dist/browser-capture-CsTU29mb.d.ts +47 -0
- package/dist/control/index.d.mts +26 -7
- package/dist/control/index.d.ts +26 -7
- package/dist/control/index.js +276 -48
- package/dist/control/index.js.map +1 -1
- package/dist/control/index.mjs +276 -48
- package/dist/control/index.mjs.map +1 -1
- package/dist/core/index.d.mts +2 -2
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.mjs.map +1 -1
- package/dist/debug/index.d.mts +5 -3
- package/dist/debug/index.d.ts +5 -3
- package/dist/debug/index.js +925 -1
- package/dist/debug/index.js.map +1 -1
- package/dist/debug/index.mjs +924 -2
- package/dist/debug/index.mjs.map +1 -1
- package/dist/index.d.mts +12 -7
- package/dist/index.d.ts +12 -7
- package/dist/index.js +4720 -173
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4656 -174
- package/dist/index.mjs.map +1 -1
- package/dist/{metrics-DTA2bwG7.d.mts → metrics-DuA2qIIz.d.mts} +2 -2
- package/dist/{metrics-BfiT_rhZ.d.ts → metrics-KFAAKNEB.d.ts} +2 -2
- package/dist/native/control/index.js +2 -7
- package/dist/native/control/index.js.map +1 -1
- package/dist/native/control/index.mjs +2 -7
- package/dist/native/control/index.mjs.map +1 -1
- package/dist/native/core/index.js.map +1 -1
- package/dist/native/core/index.mjs.map +1 -1
- package/dist/native/debug/index.js +23 -66
- package/dist/native/debug/index.js.map +1 -1
- package/dist/native/debug/index.mjs +23 -66
- package/dist/native/debug/index.mjs.map +1 -1
- package/dist/native/index.js +89 -131
- package/dist/native/index.js.map +1 -1
- package/dist/native/index.mjs +89 -131
- package/dist/native/index.mjs.map +1 -1
- package/dist/native/react/index.js +28 -52
- package/dist/native/react/index.js.map +1 -1
- package/dist/native/react/index.mjs +28 -52
- package/dist/native/react/index.mjs.map +1 -1
- package/dist/native/server/index.js +38 -13
- package/dist/native/server/index.js.map +1 -1
- package/dist/native/server/index.mjs +38 -13
- package/dist/native/server/index.mjs.map +1 -1
- package/dist/react/index.d.mts +107 -8
- package/dist/react/index.d.ts +107 -8
- package/dist/react/index.js +2194 -84
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +2194 -85
- package/dist/react/index.mjs.map +1 -1
- package/dist/{registry-BKLEm-yk.d.ts → registry-C6dDtn1v.d.ts} +27 -2
- package/dist/{registry-BmZgyCz8.d.mts → registry-POtcxnal.d.mts} +27 -2
- package/dist/render-log/index.d.mts +1 -1
- package/dist/render-log/index.d.ts +1 -1
- package/dist/server/express.d.mts +5 -4
- package/dist/server/express.d.ts +5 -4
- package/dist/server/express.js +104 -2
- package/dist/server/express.js.map +1 -1
- package/dist/server/express.mjs +104 -2
- package/dist/server/express.mjs.map +1 -1
- package/dist/server/handlers.d.mts +36 -5
- package/dist/server/handlers.d.ts +36 -5
- package/dist/server/handlers.js +3129 -224
- package/dist/server/handlers.js.map +1 -1
- package/dist/server/handlers.mjs +3129 -224
- package/dist/server/handlers.mjs.map +1 -1
- package/dist/server/index.d.mts +7 -5
- package/dist/server/index.d.ts +7 -5
- package/dist/server/index.js +3215 -183
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +3215 -183
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/nextjs.d.mts +6 -4
- package/dist/server/nextjs.d.ts +6 -4
- package/dist/server/nextjs.js +106 -3
- package/dist/server/nextjs.js.map +1 -1
- package/dist/server/nextjs.mjs +106 -3
- package/dist/server/nextjs.mjs.map +1 -1
- package/dist/server/standalone.d.mts +6 -5
- package/dist/server/standalone.d.ts +6 -5
- package/dist/server/standalone.js +131 -5
- package/dist/server/standalone.js.map +1 -1
- package/dist/server/standalone.mjs +131 -5
- package/dist/server/standalone.mjs.map +1 -1
- package/dist/specs/index.d.mts +365 -0
- package/dist/specs/index.d.ts +365 -0
- package/dist/specs/index.js +2809 -0
- package/dist/specs/index.js.map +1 -0
- package/dist/specs/index.mjs +2786 -0
- package/dist/specs/index.mjs.map +1 -0
- package/dist/{standalone-BURj8J3G.d.ts → standalone-B6GLIEmR.d.ts} +6 -2
- package/dist/{standalone-Dwmel29d.d.mts → standalone-CjdYqj3P.d.mts} +6 -2
- package/dist/{types-CHnlwiTK.d.ts → types-B2EfvEaq.d.ts} +83 -3
- package/dist/{types-B7J7noLK.d.mts → types-C7gVYRnF.d.ts} +72 -2
- package/dist/{types-BkNRILUa.d.ts → types-CJGrBEhC.d.mts} +72 -2
- package/dist/types-CebMQj76.d.ts +1275 -0
- package/dist/types-D_ypYl3T.d.mts +1275 -0
- package/dist/types-UBtp7R0u.d.mts +132 -0
- package/dist/types-UBtp7R0u.d.ts +132 -0
- package/dist/{types-CEQLnFMv.d.mts → types-gO696T_t.d.mts} +83 -3
- package/dist/{types-jKVgTI6_.d.mts → types-suaYwWWg.d.mts} +173 -2
- package/dist/{types-jKVgTI6_.d.ts → types-suaYwWWg.d.ts} +173 -2
- package/package.json +18 -2
- package/dist/types-B5Q0GVo0.d.mts +0 -646
- package/dist/types-DfPqwU-i.d.ts +0 -646
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/server/types.ts","../../src/server/express.ts"],"names":[],"mappings":"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","file":"express.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} 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} from '../ai';\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<APIResponse<{ state: Record<string, unknown>; computed: Record<string, unknown>; timestamp: number }>>;\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\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: (criteria: SemanticSearchCriteria) => Promise<APIResponse<SemanticSearchResponse>>;\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 { method: 'GET', path: '/control/component/:id/state', handler: 'getComponentState', params: ['id'] },\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\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\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 * Express Adapter\n *\n * Express.js middleware for UI Bridge server.\n */\n\nimport type { Router, Request, Response, NextFunction } from 'express';\nimport type {\n UIBridgeServerConfig,\n UIBridgeServerHandlers,\n APIResponse,\n RouteDefinition,\n CORSOptions,\n} from './types';\nimport { UI_BRIDGE_ROUTES } from './types';\n\n/**\n * Express-specific configuration\n */\nexport interface ExpressAdapterConfig extends UIBridgeServerConfig {\n /** Use JSON body parser (if not already configured) */\n useBodyParser?: boolean;\n}\n\n/**\n * Create CORS middleware\n */\nfunction createCORSMiddleware(options: CORSOptions | boolean) {\n const corsOptions: CORSOptions =\n typeof options === 'boolean'\n ? { origin: options, methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'] }\n : options;\n\n return (req: Request, res: Response, next: NextFunction) => {\n // Origin\n if (corsOptions.origin === true) {\n res.setHeader('Access-Control-Allow-Origin', '*');\n } else if (typeof corsOptions.origin === 'string') {\n res.setHeader('Access-Control-Allow-Origin', corsOptions.origin);\n } else if (Array.isArray(corsOptions.origin)) {\n const origin = req.headers.origin;\n if (origin && corsOptions.origin.includes(origin)) {\n res.setHeader('Access-Control-Allow-Origin', origin);\n }\n }\n\n // Methods\n if (corsOptions.methods) {\n res.setHeader('Access-Control-Allow-Methods', corsOptions.methods.join(', '));\n }\n\n // Headers\n if (corsOptions.headers) {\n res.setHeader('Access-Control-Allow-Headers', corsOptions.headers.join(', '));\n } else {\n res.setHeader(\n 'Access-Control-Allow-Headers',\n 'Content-Type, Authorization, X-Requested-With'\n );\n }\n\n // Credentials\n if (corsOptions.credentials) {\n res.setHeader('Access-Control-Allow-Credentials', 'true');\n }\n\n // Max age\n if (corsOptions.maxAge) {\n res.setHeader('Access-Control-Max-Age', String(corsOptions.maxAge));\n }\n\n // Handle preflight\n if (req.method === 'OPTIONS') {\n res.status(204).end();\n return;\n }\n\n next();\n };\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 * Create Express router with UI Bridge routes\n */\nexport function createExpressRouter(\n handlers: UIBridgeServerHandlers,\n config: ExpressAdapterConfig = {}\n): Router {\n // Dynamic import to avoid bundling Express if not used\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const express = require('express');\n const router: Router = express.Router();\n\n // Add CORS middleware if configured\n if (config.cors) {\n router.use(createCORSMiddleware(config.cors));\n }\n\n // Add body parser if requested\n if (config.useBodyParser) {\n router.use(express.json());\n }\n\n // Add authentication middleware if configured\n if (config.authenticate) {\n router.use(async (req: Request, res: Response, next: NextFunction) => {\n try {\n const authenticated = await config.authenticate!(req);\n if (!authenticated) {\n res.status(401).json(wrapError('Unauthorized', 'UNAUTHORIZED'));\n return;\n }\n next();\n } catch (error) {\n res.status(500).json(wrapError(error as Error, 'AUTH_ERROR'));\n }\n });\n }\n\n // Register routes\n for (const route of UI_BRIDGE_ROUTES) {\n const method = route.method.toLowerCase() as 'get' | 'post' | 'put' | 'delete' | 'patch';\n const path = route.path;\n const handlerName = route.handler as keyof UIBridgeServerHandlers;\n const handler = handlers[handlerName];\n\n if (!handler) {\n console.warn(`Handler not found for route: ${route.method} ${route.path}`);\n continue;\n }\n\n router[method](\n path,\n createRouteHandler(route, handler as (...args: unknown[]) => Promise<APIResponse<unknown>>)\n );\n }\n\n return router;\n}\n\n/**\n * Create a route handler from a route definition\n */\nfunction createRouteHandler(\n route: RouteDefinition,\n handler: (...args: unknown[]) => Promise<APIResponse<unknown>>\n) {\n return async (req: Request, res: Response) => {\n try {\n // Extract params\n const args: unknown[] = [];\n\n if (route.params) {\n for (const param of route.params) {\n args.push(req.params[param]);\n }\n }\n\n // Add body if required\n if (route.bodyRequired || route.method === 'POST') {\n args.push(req.body);\n }\n\n // Add query params for GET requests\n if (route.method === 'GET' && Object.keys(req.query).length > 0) {\n args.push(req.query);\n }\n\n const result = await handler(...args);\n res.json(result);\n } catch (error) {\n res.status(500).json(wrapError(error as Error, 'INTERNAL_ERROR'));\n }\n };\n}\n\n/**\n * Create Express app with UI Bridge routes\n *\n * Convenience function that creates a complete Express app with UI Bridge.\n */\nexport function createExpressApp(\n handlers: UIBridgeServerHandlers,\n config: ExpressAdapterConfig = {}\n): unknown {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const express = require('express');\n const app = express();\n\n app.use(express.json());\n\n const basePath = config.basePath || '/ui-bridge';\n const router = createExpressRouter(handlers, { ...config, useBodyParser: false });\n\n app.use(basePath, router);\n\n // Health check\n app.get('/health', (_req: Request, res: Response) => {\n res.json({ status: 'ok', timestamp: Date.now() });\n });\n\n return app;\n}\n\n/**\n * Express middleware that adds UI Bridge to an existing app\n */\nexport function uiBridgeMiddleware(\n handlers: UIBridgeServerHandlers,\n config: ExpressAdapterConfig = {}\n): Router {\n return createExpressRouter(handlers, config);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/server/types.ts","../../src/server/express.ts"],"names":[],"mappings":"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","file":"express.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 * Express Adapter\n *\n * Express.js middleware for UI Bridge server.\n */\n\nimport type { Router, Request, Response, NextFunction } from 'express';\nimport type {\n UIBridgeServerConfig,\n UIBridgeServerHandlers,\n APIResponse,\n RouteDefinition,\n CORSOptions,\n} from './types';\nimport { UI_BRIDGE_ROUTES } from './types';\n\n/**\n * Express-specific configuration\n */\nexport interface ExpressAdapterConfig extends UIBridgeServerConfig {\n /** Use JSON body parser (if not already configured) */\n useBodyParser?: boolean;\n}\n\n/**\n * Create CORS middleware\n */\nfunction createCORSMiddleware(options: CORSOptions | boolean) {\n const corsOptions: CORSOptions =\n typeof options === 'boolean'\n ? { origin: options, methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'] }\n : options;\n\n return (req: Request, res: Response, next: NextFunction) => {\n // Origin\n if (corsOptions.origin === true) {\n res.setHeader('Access-Control-Allow-Origin', '*');\n } else if (typeof corsOptions.origin === 'string') {\n res.setHeader('Access-Control-Allow-Origin', corsOptions.origin);\n } else if (Array.isArray(corsOptions.origin)) {\n const origin = req.headers.origin;\n if (origin && corsOptions.origin.includes(origin)) {\n res.setHeader('Access-Control-Allow-Origin', origin);\n }\n }\n\n // Methods\n if (corsOptions.methods) {\n res.setHeader('Access-Control-Allow-Methods', corsOptions.methods.join(', '));\n }\n\n // Headers\n if (corsOptions.headers) {\n res.setHeader('Access-Control-Allow-Headers', corsOptions.headers.join(', '));\n } else {\n res.setHeader(\n 'Access-Control-Allow-Headers',\n 'Content-Type, Authorization, X-Requested-With'\n );\n }\n\n // Credentials\n if (corsOptions.credentials) {\n res.setHeader('Access-Control-Allow-Credentials', 'true');\n }\n\n // Max age\n if (corsOptions.maxAge) {\n res.setHeader('Access-Control-Max-Age', String(corsOptions.maxAge));\n }\n\n // Handle preflight\n if (req.method === 'OPTIONS') {\n res.status(204).end();\n return;\n }\n\n next();\n };\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 * Create Express router with UI Bridge routes\n */\nexport function createExpressRouter(\n handlers: UIBridgeServerHandlers,\n config: ExpressAdapterConfig = {}\n): Router {\n // Dynamic import to avoid bundling Express if not used\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const express = require('express');\n const router: Router = express.Router();\n\n // Add CORS middleware if configured\n if (config.cors) {\n router.use(createCORSMiddleware(config.cors));\n }\n\n // Add body parser if requested\n if (config.useBodyParser) {\n router.use(express.json());\n }\n\n // Add authentication middleware if configured\n if (config.authenticate) {\n router.use(async (req: Request, res: Response, next: NextFunction) => {\n try {\n const authenticated = await config.authenticate!(req);\n if (!authenticated) {\n res.status(401).json(wrapError('Unauthorized', 'UNAUTHORIZED'));\n return;\n }\n next();\n } catch (error) {\n res.status(500).json(wrapError(error as Error, 'AUTH_ERROR'));\n }\n });\n }\n\n // Register routes\n for (const route of UI_BRIDGE_ROUTES) {\n const method = route.method.toLowerCase() as 'get' | 'post' | 'put' | 'delete' | 'patch';\n const path = route.path;\n const handlerName = route.handler as keyof UIBridgeServerHandlers;\n const handler = handlers[handlerName];\n\n if (!handler) {\n console.warn(`Handler not found for route: ${route.method} ${route.path}`);\n continue;\n }\n\n router[method](\n path,\n createRouteHandler(route, handler as (...args: unknown[]) => Promise<APIResponse<unknown>>)\n );\n }\n\n return router;\n}\n\n/**\n * Create a route handler from a route definition\n */\nfunction createRouteHandler(\n route: RouteDefinition,\n handler: (...args: unknown[]) => Promise<APIResponse<unknown>>\n) {\n return async (req: Request, res: Response) => {\n try {\n // Extract params\n const args: unknown[] = [];\n\n if (route.params) {\n for (const param of route.params) {\n args.push(req.params[param]);\n }\n }\n\n // Add body if required\n if (route.bodyRequired || route.method === 'POST') {\n args.push(req.body);\n }\n\n // Add query params for GET requests\n if (route.method === 'GET' && Object.keys(req.query).length > 0) {\n args.push(req.query);\n }\n\n const result = await handler(...args);\n res.json(result);\n } catch (error) {\n res.status(500).json(wrapError(error as Error, 'INTERNAL_ERROR'));\n }\n };\n}\n\n/**\n * Create Express app with UI Bridge routes\n *\n * Convenience function that creates a complete Express app with UI Bridge.\n */\nexport function createExpressApp(\n handlers: UIBridgeServerHandlers,\n config: ExpressAdapterConfig = {}\n): unknown {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const express = require('express');\n const app = express();\n\n app.use(express.json());\n\n const basePath = config.basePath || '/ui-bridge';\n const router = createExpressRouter(handlers, { ...config, useBodyParser: false });\n\n app.use(basePath, router);\n\n // Health check\n app.get('/health', (_req: Request, res: Response) => {\n res.json({ status: 'ok', timestamp: Date.now() });\n });\n\n return app;\n}\n\n/**\n * Express middleware that adds UI Bridge to an existing app\n */\nexport function uiBridgeMiddleware(\n handlers: UIBridgeServerHandlers,\n config: ExpressAdapterConfig = {}\n): Router {\n return createExpressRouter(handlers, config);\n}\n"]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { c as UIBridgeServerHandlers } from '../types-
|
|
2
|
-
import { d as ControlSnapshot } from '../types-
|
|
1
|
+
import { c as UIBridgeServerHandlers } from '../types-gO696T_t.mjs';
|
|
2
|
+
import { d as ControlSnapshot } from '../types-CJGrBEhC.mjs';
|
|
3
|
+
import { C as CapturedError, a3 as UIState, a4 as UIStateGroup, a5 as UITransition, a0 as TransitionResult, T as PathResult, O as NavigationResult, $ as StateSnapshot } from '../types-suaYwWWg.mjs';
|
|
3
4
|
import { RenderLogEntry } from '../render-log/index.mjs';
|
|
4
|
-
import '../
|
|
5
|
-
import '../types-
|
|
5
|
+
import { AnnotationStore } from '../annotations/index.mjs';
|
|
6
|
+
import '../types-D_ypYl3T.mjs';
|
|
7
|
+
import '../types-UBtp7R0u.mjs';
|
|
6
8
|
|
|
7
9
|
/**
|
|
8
10
|
* UI Bridge Server Handlers
|
|
@@ -34,6 +36,23 @@ interface RegistryLike {
|
|
|
34
36
|
getMetrics?(): unknown;
|
|
35
37
|
highlightElement?(id: string): void;
|
|
36
38
|
getElementTree?(): unknown;
|
|
39
|
+
getStates?(): UIState[];
|
|
40
|
+
getState?(id: string): UIState | undefined;
|
|
41
|
+
getActiveStates?(): UIState[];
|
|
42
|
+
activateState?(id: string): void;
|
|
43
|
+
deactivateState?(id: string): void;
|
|
44
|
+
getStateGroups?(): UIStateGroup[];
|
|
45
|
+
activateStateGroup?(id: string): void;
|
|
46
|
+
deactivateStateGroup?(id: string): void;
|
|
47
|
+
getTransitions?(): UITransition[];
|
|
48
|
+
canExecuteTransition?(id: string): {
|
|
49
|
+
canExecute: boolean;
|
|
50
|
+
reason?: string;
|
|
51
|
+
};
|
|
52
|
+
executeTransition?(id: string): Promise<TransitionResult>;
|
|
53
|
+
findPath?(targetStates: string[]): PathResult;
|
|
54
|
+
navigateTo?(targetStates: string[]): Promise<NavigationResult>;
|
|
55
|
+
getStateSnapshot?(): StateSnapshot;
|
|
37
56
|
}
|
|
38
57
|
/**
|
|
39
58
|
* Action executor interface - minimal contract for handler usage
|
|
@@ -49,6 +68,14 @@ interface ActionExecutorLike {
|
|
|
49
68
|
params?: Record<string, unknown>;
|
|
50
69
|
}): Promise<unknown>;
|
|
51
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Console capture interface — minimal contract for handler usage
|
|
73
|
+
*/
|
|
74
|
+
interface ConsoleCapturelike {
|
|
75
|
+
getConsoleSince(ts: number): CapturedError[];
|
|
76
|
+
getConsoleRecent(n?: number): CapturedError[];
|
|
77
|
+
clear(): void;
|
|
78
|
+
}
|
|
52
79
|
/**
|
|
53
80
|
* Configuration for creating handlers
|
|
54
81
|
*/
|
|
@@ -57,6 +84,10 @@ interface CreateHandlersConfig {
|
|
|
57
84
|
renderLogPath?: string;
|
|
58
85
|
/** Verbose logging */
|
|
59
86
|
verbose?: boolean;
|
|
87
|
+
/** Optional annotation store (defaults to global singleton) */
|
|
88
|
+
annotationStore?: AnnotationStore;
|
|
89
|
+
/** Optional console capture instance for error monitoring */
|
|
90
|
+
consoleCapture?: ConsoleCapturelike;
|
|
60
91
|
}
|
|
61
92
|
/**
|
|
62
93
|
* Create server handlers for UI Bridge
|
|
@@ -90,4 +121,4 @@ declare function createHandlers(registry: RegistryLike, actionExecutor: ActionEx
|
|
|
90
121
|
*/
|
|
91
122
|
declare function createAIHandlers(registry: RegistryLike, actionExecutor: ActionExecutorLike): Pick<UIBridgeServerHandlers, 'aiSearch' | 'aiExecute' | 'aiAssert' | 'aiAssertBatch' | 'getSemanticSnapshot' | 'getSemanticDiff' | 'getPageSummary'>;
|
|
92
123
|
|
|
93
|
-
export { type ActionExecutorLike, type CreateHandlersConfig, type RegistryLike, createAIHandlers, createHandlers };
|
|
124
|
+
export { type ActionExecutorLike, type ConsoleCapturelike, type CreateHandlersConfig, type RegistryLike, createAIHandlers, createHandlers };
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { c as UIBridgeServerHandlers } from '../types-
|
|
2
|
-
import { d as ControlSnapshot } from '../types-
|
|
1
|
+
import { c as UIBridgeServerHandlers } from '../types-B2EfvEaq.js';
|
|
2
|
+
import { d as ControlSnapshot } from '../types-C7gVYRnF.js';
|
|
3
|
+
import { C as CapturedError, a3 as UIState, a4 as UIStateGroup, a5 as UITransition, a0 as TransitionResult, T as PathResult, O as NavigationResult, $ as StateSnapshot } from '../types-suaYwWWg.js';
|
|
3
4
|
import { RenderLogEntry } from '../render-log/index.js';
|
|
4
|
-
import '../
|
|
5
|
-
import '../types-
|
|
5
|
+
import { AnnotationStore } from '../annotations/index.js';
|
|
6
|
+
import '../types-CebMQj76.js';
|
|
7
|
+
import '../types-UBtp7R0u.js';
|
|
6
8
|
|
|
7
9
|
/**
|
|
8
10
|
* UI Bridge Server Handlers
|
|
@@ -34,6 +36,23 @@ interface RegistryLike {
|
|
|
34
36
|
getMetrics?(): unknown;
|
|
35
37
|
highlightElement?(id: string): void;
|
|
36
38
|
getElementTree?(): unknown;
|
|
39
|
+
getStates?(): UIState[];
|
|
40
|
+
getState?(id: string): UIState | undefined;
|
|
41
|
+
getActiveStates?(): UIState[];
|
|
42
|
+
activateState?(id: string): void;
|
|
43
|
+
deactivateState?(id: string): void;
|
|
44
|
+
getStateGroups?(): UIStateGroup[];
|
|
45
|
+
activateStateGroup?(id: string): void;
|
|
46
|
+
deactivateStateGroup?(id: string): void;
|
|
47
|
+
getTransitions?(): UITransition[];
|
|
48
|
+
canExecuteTransition?(id: string): {
|
|
49
|
+
canExecute: boolean;
|
|
50
|
+
reason?: string;
|
|
51
|
+
};
|
|
52
|
+
executeTransition?(id: string): Promise<TransitionResult>;
|
|
53
|
+
findPath?(targetStates: string[]): PathResult;
|
|
54
|
+
navigateTo?(targetStates: string[]): Promise<NavigationResult>;
|
|
55
|
+
getStateSnapshot?(): StateSnapshot;
|
|
37
56
|
}
|
|
38
57
|
/**
|
|
39
58
|
* Action executor interface - minimal contract for handler usage
|
|
@@ -49,6 +68,14 @@ interface ActionExecutorLike {
|
|
|
49
68
|
params?: Record<string, unknown>;
|
|
50
69
|
}): Promise<unknown>;
|
|
51
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Console capture interface — minimal contract for handler usage
|
|
73
|
+
*/
|
|
74
|
+
interface ConsoleCapturelike {
|
|
75
|
+
getConsoleSince(ts: number): CapturedError[];
|
|
76
|
+
getConsoleRecent(n?: number): CapturedError[];
|
|
77
|
+
clear(): void;
|
|
78
|
+
}
|
|
52
79
|
/**
|
|
53
80
|
* Configuration for creating handlers
|
|
54
81
|
*/
|
|
@@ -57,6 +84,10 @@ interface CreateHandlersConfig {
|
|
|
57
84
|
renderLogPath?: string;
|
|
58
85
|
/** Verbose logging */
|
|
59
86
|
verbose?: boolean;
|
|
87
|
+
/** Optional annotation store (defaults to global singleton) */
|
|
88
|
+
annotationStore?: AnnotationStore;
|
|
89
|
+
/** Optional console capture instance for error monitoring */
|
|
90
|
+
consoleCapture?: ConsoleCapturelike;
|
|
60
91
|
}
|
|
61
92
|
/**
|
|
62
93
|
* Create server handlers for UI Bridge
|
|
@@ -90,4 +121,4 @@ declare function createHandlers(registry: RegistryLike, actionExecutor: ActionEx
|
|
|
90
121
|
*/
|
|
91
122
|
declare function createAIHandlers(registry: RegistryLike, actionExecutor: ActionExecutorLike): Pick<UIBridgeServerHandlers, 'aiSearch' | 'aiExecute' | 'aiAssert' | 'aiAssertBatch' | 'getSemanticSnapshot' | 'getSemanticDiff' | 'getPageSummary'>;
|
|
92
123
|
|
|
93
|
-
export { type ActionExecutorLike, type CreateHandlersConfig, type RegistryLike, createAIHandlers, createHandlers };
|
|
124
|
+
export { type ActionExecutorLike, type ConsoleCapturelike, type CreateHandlersConfig, type RegistryLike, createAIHandlers, createHandlers };
|