@qontinui/ui-bridge 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/ai/index.d.mts +893 -0
  2. package/dist/ai/index.d.ts +893 -0
  3. package/dist/ai/index.js +3897 -0
  4. package/dist/ai/index.js.map +1 -0
  5. package/dist/ai/index.mjs +3839 -0
  6. package/dist/ai/index.mjs.map +1 -0
  7. package/dist/control/index.d.mts +5 -4
  8. package/dist/control/index.d.ts +5 -4
  9. package/dist/core/index.d.mts +6 -4
  10. package/dist/core/index.d.ts +6 -4
  11. package/dist/core/index.js +581 -4
  12. package/dist/core/index.js.map +1 -1
  13. package/dist/core/index.mjs +581 -4
  14. package/dist/core/index.mjs.map +1 -1
  15. package/dist/debug/index.d.mts +3 -3
  16. package/dist/debug/index.d.ts +3 -3
  17. package/dist/index.d.mts +7 -5
  18. package/dist/index.d.ts +7 -5
  19. package/dist/index.js +4112 -12
  20. package/dist/index.js.map +1 -1
  21. package/dist/index.mjs +4056 -13
  22. package/dist/index.mjs.map +1 -1
  23. package/dist/{metrics-QCnK0EFw.d.ts → metrics-C9XRi_mL.d.ts} +2 -2
  24. package/dist/{metrics-BCG7z7Aq.d.mts → metrics-NC3csD0R.d.mts} +2 -2
  25. package/dist/react/index.d.mts +6 -5
  26. package/dist/react/index.d.ts +6 -5
  27. package/dist/react/index.js +587 -10
  28. package/dist/react/index.js.map +1 -1
  29. package/dist/react/index.mjs +587 -10
  30. package/dist/react/index.mjs.map +1 -1
  31. package/dist/{registry-CT6BVVKr.d.mts → registry-CIEDjbQ9.d.ts} +22 -1
  32. package/dist/{registry-D4mQ01B3.d.ts → registry-SsSDq46X.d.mts} +22 -1
  33. package/dist/render-log/index.d.mts +1 -1
  34. package/dist/render-log/index.d.ts +1 -1
  35. package/dist/types-BvCfFuEV.d.ts +534 -0
  36. package/dist/types-CFT3Dnx4.d.mts +534 -0
  37. package/dist/{types-BpvpStn3.d.mts → types-CPMbN_Iw.d.mts} +8 -0
  38. package/dist/{types-BpvpStn3.d.ts → types-CPMbN_Iw.d.ts} +8 -0
  39. package/dist/{types-DdJD9yw5.d.mts → types-Dr6tH-bm.d.mts} +1 -1
  40. package/dist/{types-BDkXy5si.d.ts → types-oCTrRxSw.d.ts} +1 -1
  41. package/dist/{websocket-client-DupH0X7B.d.ts → websocket-client-CX4QJesI.d.ts} +1 -1
  42. package/dist/{websocket-client-B2LC9CYc.d.mts → websocket-client-C_Na0OSp.d.mts} +1 -1
  43. package/package.json +6 -1
@@ -0,0 +1,534 @@
1
+ import { i as ElementType, h as ElementState } from './types-CPMbN_Iw.mjs';
2
+ import { D as DiscoveredElement } from './types-Dr6tH-bm.mjs';
3
+
4
+ /**
5
+ * AI Module Types
6
+ *
7
+ * Defines types for AI-native UI Bridge functionality including
8
+ * search criteria, natural language actions, assertions, and semantic snapshots.
9
+ */
10
+
11
+ /**
12
+ * Criteria for searching elements using multiple strategies
13
+ */
14
+ interface SearchCriteria {
15
+ /** Exact visible text match: "Start Extraction" */
16
+ text?: string;
17
+ /** Partial text match: "Start" */
18
+ textContains?: string;
19
+ /** Accessible name (aria-label, associated labels) */
20
+ accessibleName?: string;
21
+ /** ARIA role: "button", "input" */
22
+ role?: string;
23
+ /** Element type (more specific than role) */
24
+ type?: ElementType;
25
+ /** Spatial proximity: "near the URL input" */
26
+ near?: string;
27
+ /** Container context: "within the login form" */
28
+ within?: string;
29
+ /** Enable fuzzy matching (default: true) */
30
+ fuzzy?: boolean;
31
+ /** Fuzzy match confidence threshold 0-1 (default: 0.7) */
32
+ fuzzyThreshold?: number;
33
+ /** Element ID pattern (supports wildcards) */
34
+ idPattern?: string;
35
+ /** CSS selector */
36
+ selector?: string;
37
+ /** Placeholder text (for inputs) */
38
+ placeholder?: string;
39
+ /** Title attribute */
40
+ title?: string;
41
+ /** Data attributes to match */
42
+ dataAttributes?: Record<string, string>;
43
+ }
44
+ /**
45
+ * Result from a search operation
46
+ */
47
+ interface SearchResult {
48
+ /** The matched element */
49
+ element: AIDiscoveredElement;
50
+ /** Match confidence 0-1 */
51
+ confidence: number;
52
+ /** Reasons why this element matched */
53
+ matchReasons: string[];
54
+ /** Match scores by strategy */
55
+ scores: {
56
+ text?: number;
57
+ accessibility?: number;
58
+ role?: number;
59
+ spatial?: number;
60
+ fuzzy?: number;
61
+ };
62
+ }
63
+ /**
64
+ * Response from search operations
65
+ */
66
+ interface SearchResponse {
67
+ /** All matching results sorted by confidence */
68
+ results: SearchResult[];
69
+ /** Best match (highest confidence above threshold) */
70
+ bestMatch: SearchResult | null;
71
+ /** Total elements scanned */
72
+ scannedCount: number;
73
+ /** Search duration in milliseconds */
74
+ durationMs: number;
75
+ /** Search criteria used */
76
+ criteria: SearchCriteria;
77
+ /** Timestamp */
78
+ timestamp: number;
79
+ }
80
+ /**
81
+ * Element with AI-generated metadata and descriptions
82
+ */
83
+ interface AIDiscoveredElement extends DiscoveredElement {
84
+ /** Human-readable description: "Blue submit button in the form" */
85
+ description: string;
86
+ /** Auto-generated aliases for natural language matching */
87
+ aliases: string[];
88
+ /** Inferred purpose: "Submits the form" */
89
+ purpose?: string;
90
+ /** Parent context identifier */
91
+ parentContext?: string;
92
+ /** Suggested actions in natural language */
93
+ suggestedActions: string[];
94
+ /** Semantic type (more descriptive than ElementType) */
95
+ semanticType?: string;
96
+ /** Associated label text */
97
+ labelText?: string;
98
+ /** Placeholder text (for inputs) */
99
+ placeholder?: string;
100
+ /** Title attribute */
101
+ title?: string;
102
+ /** ARIA description */
103
+ ariaDescription?: string;
104
+ }
105
+ /**
106
+ * Response from AI find operations
107
+ */
108
+ interface AIFindResponse {
109
+ /** All discovered elements with AI metadata */
110
+ elements: AIDiscoveredElement[];
111
+ /** LLM-friendly text summary of the page */
112
+ summary: string;
113
+ /** Detected forms with their fields */
114
+ forms?: FormAnalysis[];
115
+ /** Page context information */
116
+ pageContext: PageContext;
117
+ /** Find duration */
118
+ durationMs: number;
119
+ /** Timestamp */
120
+ timestamp: number;
121
+ }
122
+ /**
123
+ * Page context information
124
+ */
125
+ interface PageContext {
126
+ /** Current URL */
127
+ url: string;
128
+ /** Page title */
129
+ title: string;
130
+ /** Inferred page type */
131
+ pageType?: 'login' | 'dashboard' | 'form' | 'list' | 'detail' | 'search' | 'checkout' | 'settings' | 'unknown';
132
+ /** Active modals/dialogs */
133
+ activeModals: string[];
134
+ /** Currently focused element */
135
+ focusedElement?: string;
136
+ /** Detected navigation elements */
137
+ navigation?: string[];
138
+ }
139
+ /**
140
+ * Form analysis result
141
+ */
142
+ interface FormAnalysis {
143
+ /** Form element ID */
144
+ id: string;
145
+ /** Form name attribute */
146
+ name?: string;
147
+ /** Detected form purpose */
148
+ purpose?: string;
149
+ /** Form fields */
150
+ fields: FormFieldAnalysis[];
151
+ /** Whether form is valid */
152
+ isValid: boolean;
153
+ /** Submit button ID */
154
+ submitButton?: string;
155
+ /** Cancel/reset button ID */
156
+ cancelButton?: string;
157
+ }
158
+ /**
159
+ * Form field analysis
160
+ */
161
+ interface FormFieldAnalysis {
162
+ /** Field element ID */
163
+ id: string;
164
+ /** Field label */
165
+ label: string;
166
+ /** Input type */
167
+ type: string;
168
+ /** Current value */
169
+ value: string;
170
+ /** Whether field is valid */
171
+ valid: boolean;
172
+ /** Validation error message */
173
+ error?: string;
174
+ /** Whether field is required */
175
+ required: boolean;
176
+ /** Placeholder text */
177
+ placeholder?: string;
178
+ }
179
+ /**
180
+ * Natural language action request
181
+ */
182
+ interface NLActionRequest {
183
+ /** Natural language instruction: "click the Start Extraction button" */
184
+ instruction: string;
185
+ /** Optional context to help disambiguate */
186
+ context?: string;
187
+ /** Timeout for the operation */
188
+ timeout?: number;
189
+ /** Confidence threshold for element matching */
190
+ confidenceThreshold?: number;
191
+ }
192
+ /**
193
+ * Parsed action from natural language
194
+ */
195
+ interface ParsedAction {
196
+ /** Action type */
197
+ action: 'click' | 'type' | 'select' | 'check' | 'uncheck' | 'scroll' | 'wait' | 'assert' | 'hover' | 'focus' | 'clear' | 'doubleClick' | 'rightClick';
198
+ /** Description of the target element */
199
+ targetDescription: string;
200
+ /** Value for type/select actions */
201
+ value?: string;
202
+ /** Key modifiers */
203
+ modifiers?: ('shift' | 'ctrl' | 'alt' | 'meta')[];
204
+ /** Scroll direction for scroll actions */
205
+ scrollDirection?: 'up' | 'down' | 'left' | 'right';
206
+ /** Wait condition for wait actions */
207
+ waitCondition?: string;
208
+ /** Assertion type for assert actions */
209
+ assertionType?: AssertionType;
210
+ /** Raw instruction that was parsed */
211
+ rawInstruction: string;
212
+ /** Parse confidence */
213
+ parseConfidence: number;
214
+ }
215
+ /**
216
+ * Response from executing a natural language action
217
+ */
218
+ interface NLActionResponse {
219
+ /** Whether the action succeeded */
220
+ success: boolean;
221
+ /** Human-readable description of what was done */
222
+ executedAction: string;
223
+ /** The element that was used */
224
+ elementUsed: AIDiscoveredElement;
225
+ /** Match confidence for the element */
226
+ confidence: number;
227
+ /** Element state after the action */
228
+ elementState: ElementState;
229
+ /** Action duration */
230
+ durationMs: number;
231
+ /** Timestamp */
232
+ timestamp: number;
233
+ /** Error message if failed */
234
+ error?: string;
235
+ /** Error code */
236
+ errorCode?: string;
237
+ /** Suggestions for recovery */
238
+ suggestions?: string[];
239
+ /** Alternative elements that could have been used */
240
+ alternatives?: SearchResult[];
241
+ }
242
+ /**
243
+ * Types of assertions that can be made about elements
244
+ */
245
+ type AssertionType = 'visible' | 'hidden' | 'enabled' | 'disabled' | 'focused' | 'checked' | 'unchecked' | 'hasText' | 'containsText' | 'hasValue' | 'hasClass' | 'exists' | 'notExists' | 'count' | 'attribute' | 'cssProperty';
246
+ /**
247
+ * Assertion request
248
+ */
249
+ interface AssertionRequest {
250
+ /** Element target (ID or natural language description) */
251
+ target: string | SearchCriteria;
252
+ /** Type of assertion */
253
+ type: AssertionType;
254
+ /** Expected value (for hasText, hasValue, count, attribute, cssProperty) */
255
+ expected?: unknown;
256
+ /** Attribute name (for attribute assertions) */
257
+ attributeName?: string;
258
+ /** CSS property name (for cssProperty assertions) */
259
+ propertyName?: string;
260
+ /** Timeout for waiting (ms) */
261
+ timeout?: number;
262
+ /** Custom failure message */
263
+ message?: string;
264
+ /** Whether to use fuzzy matching for element search */
265
+ fuzzy?: boolean;
266
+ }
267
+ /**
268
+ * Assertion result
269
+ */
270
+ interface AssertionResult {
271
+ /** Whether the assertion passed */
272
+ passed: boolean;
273
+ /** Element target that was checked */
274
+ target: string;
275
+ /** Human-readable description of the target */
276
+ targetDescription: string;
277
+ /** Expected value */
278
+ expected: unknown;
279
+ /** Actual value */
280
+ actual: unknown;
281
+ /** Failure reason if assertion failed */
282
+ failureReason?: string;
283
+ /** Suggestion for fixing the failure */
284
+ suggestion?: string;
285
+ /** Element state at time of assertion */
286
+ elementState?: ElementState;
287
+ /** Duration of the assertion */
288
+ durationMs: number;
289
+ /** Timestamp */
290
+ timestamp: number;
291
+ }
292
+ /**
293
+ * Batch assertion request
294
+ */
295
+ interface BatchAssertionRequest {
296
+ /** Assertions to execute */
297
+ assertions: AssertionRequest[];
298
+ /** Mode: 'all' requires all to pass, 'any' requires at least one */
299
+ mode: 'all' | 'any';
300
+ /** Stop on first failure */
301
+ stopOnFailure?: boolean;
302
+ }
303
+ /**
304
+ * Batch assertion result
305
+ */
306
+ interface BatchAssertionResult {
307
+ /** Overall pass/fail */
308
+ passed: boolean;
309
+ /** Individual assertion results */
310
+ results: AssertionResult[];
311
+ /** Number of passed assertions */
312
+ passedCount: number;
313
+ /** Number of failed assertions */
314
+ failedCount: number;
315
+ /** Total duration */
316
+ durationMs: number;
317
+ /** Timestamp */
318
+ timestamp: number;
319
+ }
320
+ /**
321
+ * Semantic snapshot of the current page state
322
+ */
323
+ interface SemanticSnapshot {
324
+ /** Snapshot timestamp */
325
+ timestamp: number;
326
+ /** Snapshot ID for diffing */
327
+ snapshotId: string;
328
+ /** Page information */
329
+ page: PageContext;
330
+ /** All elements with AI metadata */
331
+ elements: AIDiscoveredElement[];
332
+ /** Form states */
333
+ forms: FormState[];
334
+ /** Active modals */
335
+ activeModals: ModalState[];
336
+ /** Currently focused element */
337
+ focusedElement?: string;
338
+ /** LLM-readable summary */
339
+ summary: string;
340
+ /** Element count by type */
341
+ elementCounts: Record<string, number>;
342
+ }
343
+ /**
344
+ * Form state in semantic snapshot
345
+ */
346
+ interface FormState {
347
+ /** Form ID */
348
+ id: string;
349
+ /** Form name */
350
+ name?: string;
351
+ /** Form purpose */
352
+ purpose?: string;
353
+ /** Field states */
354
+ fields: FormFieldState[];
355
+ /** Overall validity */
356
+ isValid: boolean;
357
+ /** Submit button */
358
+ submitButton?: string;
359
+ /** Whether form is dirty (has changes) */
360
+ isDirty: boolean;
361
+ }
362
+ /**
363
+ * Form field state
364
+ */
365
+ interface FormFieldState {
366
+ /** Field ID */
367
+ id: string;
368
+ /** Field label */
369
+ label: string;
370
+ /** Input type */
371
+ type: string;
372
+ /** Current value */
373
+ value: string;
374
+ /** Validity */
375
+ valid: boolean;
376
+ /** Error message */
377
+ error?: string;
378
+ /** Required flag */
379
+ required: boolean;
380
+ /** Touched flag */
381
+ touched: boolean;
382
+ }
383
+ /**
384
+ * Modal/dialog state
385
+ */
386
+ interface ModalState {
387
+ /** Modal ID */
388
+ id: string;
389
+ /** Modal title */
390
+ title?: string;
391
+ /** Modal type */
392
+ type: 'dialog' | 'alert' | 'confirm' | 'prompt' | 'drawer' | 'popup';
393
+ /** Whether modal is blocking */
394
+ blocking: boolean;
395
+ /** Close button ID */
396
+ closeButton?: string;
397
+ /** Primary action button */
398
+ primaryAction?: string;
399
+ /** Secondary action button */
400
+ secondaryAction?: string;
401
+ }
402
+ /**
403
+ * Semantic diff between two snapshots
404
+ */
405
+ interface SemanticDiff {
406
+ /** LLM-readable summary of changes */
407
+ summary: string;
408
+ /** From snapshot ID */
409
+ fromSnapshotId: string;
410
+ /** To snapshot ID */
411
+ toSnapshotId: string;
412
+ /** Detailed changes */
413
+ changes: {
414
+ /** Elements that appeared */
415
+ appeared: ElementChange[];
416
+ /** Elements that disappeared */
417
+ disappeared: ElementChange[];
418
+ /** Elements that were modified */
419
+ modified: ElementModification[];
420
+ };
421
+ /** Probable trigger for the changes */
422
+ probableTrigger?: string;
423
+ /** Suggested next actions based on changes */
424
+ suggestedActions?: string[];
425
+ /** Page context changes */
426
+ pageChanges?: {
427
+ urlChanged: boolean;
428
+ titleChanged: boolean;
429
+ newUrl?: string;
430
+ newTitle?: string;
431
+ };
432
+ /** Duration of diff computation */
433
+ durationMs: number;
434
+ /** Timestamp */
435
+ timestamp: number;
436
+ }
437
+ /**
438
+ * Element change (appeared/disappeared)
439
+ */
440
+ interface ElementChange {
441
+ /** Element ID */
442
+ elementId: string;
443
+ /** Element description */
444
+ description: string;
445
+ /** Element type */
446
+ type: string;
447
+ /** Semantic type */
448
+ semanticType?: string;
449
+ }
450
+ /**
451
+ * Element modification
452
+ */
453
+ interface ElementModification {
454
+ /** Element ID */
455
+ elementId: string;
456
+ /** Element description */
457
+ description: string;
458
+ /** Property that changed */
459
+ property: string;
460
+ /** Previous value */
461
+ from: string;
462
+ /** New value */
463
+ to: string;
464
+ /** Whether this is a significant change */
465
+ significant: boolean;
466
+ }
467
+ /**
468
+ * Rich error context for AI agents
469
+ */
470
+ interface AIErrorContext {
471
+ /** Error code */
472
+ code: string;
473
+ /** Human-readable error message */
474
+ message: string;
475
+ /** What action was attempted */
476
+ attemptedAction: string;
477
+ /** Search criteria used (if applicable) */
478
+ searchCriteria?: SearchCriteria;
479
+ /** Information about what was found */
480
+ searchResults: {
481
+ /** Number of candidates found */
482
+ candidatesFound: number;
483
+ /** Nearest match if any */
484
+ nearestMatch?: {
485
+ element: AIDiscoveredElement;
486
+ confidence: number;
487
+ whyNotSelected: string;
488
+ };
489
+ };
490
+ /** Page state at time of error */
491
+ pageContext: {
492
+ url: string;
493
+ title: string;
494
+ visibleElements: number;
495
+ /** Possible blockers like modals */
496
+ possibleBlockers: string[];
497
+ };
498
+ /** Recovery suggestions */
499
+ suggestions: RecoverySuggestion[];
500
+ /** Stack trace if available */
501
+ stack?: string;
502
+ /** Timestamp */
503
+ timestamp: number;
504
+ }
505
+ /**
506
+ * Recovery suggestion for errors
507
+ */
508
+ interface RecoverySuggestion {
509
+ /** Human-readable action description */
510
+ action: string;
511
+ /** Command to execute (if applicable) */
512
+ command?: string;
513
+ /** Confidence that this will help */
514
+ confidence: number;
515
+ /** Priority (lower = try first) */
516
+ priority: number;
517
+ }
518
+ /**
519
+ * Extended element registration options with AI metadata
520
+ */
521
+ interface AIElementRegistrationOptions {
522
+ /** Alternative names for the element */
523
+ aliases?: string[];
524
+ /** Human-readable description */
525
+ description?: string;
526
+ /** Semantic type (more descriptive than ElementType) */
527
+ semanticType?: string;
528
+ /** Purpose of the element */
529
+ purpose?: string;
530
+ /** Whether to auto-generate aliases */
531
+ autoGenerateAliases?: boolean;
532
+ }
533
+
534
+ export type { AIDiscoveredElement as A, BatchAssertionRequest as B, ElementChange as E, FormAnalysis as F, ModalState as M, NLActionRequest as N, PageContext as P, RecoverySuggestion as R, SearchCriteria as S, AIElementRegistrationOptions as a, AIErrorContext as b, AIFindResponse as c, AssertionRequest as d, AssertionResult as e, AssertionType as f, BatchAssertionResult as g, ElementModification as h, FormFieldAnalysis as i, FormFieldState as j, FormState as k, NLActionResponse as l, ParsedAction as m, SearchResponse as n, SearchResult as o, SemanticDiff as p, SemanticSnapshot as q };
@@ -108,6 +108,14 @@ interface RegisteredElement {
108
108
  registeredAt: number;
109
109
  /** Whether this element is currently mounted */
110
110
  mounted: boolean;
111
+ /** Alternative names for natural language matching */
112
+ aliases?: string[];
113
+ /** Human-readable description for AI agents */
114
+ description?: string;
115
+ /** Semantic type (more descriptive than ElementType) */
116
+ semanticType?: string;
117
+ /** Purpose of the element */
118
+ purpose?: string;
111
119
  }
112
120
  /**
113
121
  * Component action definition
@@ -108,6 +108,14 @@ interface RegisteredElement {
108
108
  registeredAt: number;
109
109
  /** Whether this element is currently mounted */
110
110
  mounted: boolean;
111
+ /** Alternative names for natural language matching */
112
+ aliases?: string[];
113
+ /** Human-readable description for AI agents */
114
+ description?: string;
115
+ /** Semantic type (more descriptive than ElementType) */
116
+ semanticType?: string;
117
+ /** Purpose of the element */
118
+ purpose?: string;
111
119
  }
112
120
  /**
113
121
  * Component action definition
@@ -1,4 +1,4 @@
1
- import { a as ActionRequest, b as ActionResponse, a0 as WaitOptions, h as ElementState } from './types-BpvpStn3.mjs';
1
+ import { h as ElementState, a as ActionRequest, b as ActionResponse, a0 as WaitOptions } from './types-CPMbN_Iw.mjs';
2
2
 
3
3
  /**
4
4
  * Control Module Types
@@ -1,4 +1,4 @@
1
- import { a as ActionRequest, b as ActionResponse, a0 as WaitOptions, h as ElementState } from './types-BpvpStn3.js';
1
+ import { h as ElementState, a as ActionRequest, b as ActionResponse, a0 as WaitOptions } from './types-CPMbN_Iw.js';
2
2
 
3
3
  /**
4
4
  * Control Module Types
@@ -1,4 +1,4 @@
1
- import { W as WSClientConfig, t as WSConnectionState, X as WSSubscriptionOptions, e as BridgeEventType, f as BridgeSnapshot, a as ActionRequest, b as ActionResponse, c as BridgeEvent } from './types-BpvpStn3.js';
1
+ import { W as WSClientConfig, t as WSConnectionState, X as WSSubscriptionOptions, e as BridgeEventType, f as BridgeSnapshot, a as ActionRequest, b as ActionResponse, c as BridgeEvent } from './types-CPMbN_Iw.js';
2
2
 
3
3
  /**
4
4
  * WebSocket Client for UI Bridge
@@ -1,4 +1,4 @@
1
- import { W as WSClientConfig, t as WSConnectionState, X as WSSubscriptionOptions, e as BridgeEventType, f as BridgeSnapshot, a as ActionRequest, b as ActionResponse, c as BridgeEvent } from './types-BpvpStn3.mjs';
1
+ import { W as WSClientConfig, t as WSConnectionState, X as WSSubscriptionOptions, e as BridgeEventType, f as BridgeSnapshot, a as ActionRequest, b as ActionResponse, c as BridgeEvent } from './types-CPMbN_Iw.mjs';
2
2
 
3
3
  /**
4
4
  * WebSocket Client for UI Bridge
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qontinui/ui-bridge",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "UI Bridge Framework - React hooks and providers for UI observation, control, and debugging",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -35,6 +35,11 @@
35
35
  "types": "./dist/debug/index.d.ts",
36
36
  "import": "./dist/debug/index.mjs",
37
37
  "require": "./dist/debug/index.js"
38
+ },
39
+ "./ai": {
40
+ "types": "./dist/ai/index.d.ts",
41
+ "import": "./dist/ai/index.mjs",
42
+ "require": "./dist/ai/index.js"
38
43
  }
39
44
  },
40
45
  "files": [