@supernal/interface 1.0.9 → 1.0.11

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 (147) hide show
  1. package/dist/cjs/src/browser.js +42 -1
  2. package/dist/cjs/src/browser.js.map +1 -1
  3. package/dist/cjs/src/decorators/ContainerHelpers.js +16 -1
  4. package/dist/cjs/src/decorators/ContainerHelpers.js.map +1 -1
  5. package/dist/cjs/src/decorators/Tool.js +2 -3
  6. package/dist/cjs/src/decorators/Tool.js.map +1 -1
  7. package/dist/cjs/src/testing/graph-tester/core/GraphTester.js +339 -0
  8. package/dist/cjs/src/testing/graph-tester/core/GraphTester.js.map +1 -0
  9. package/dist/cjs/src/testing/graph-tester/core/TestFunction.js +189 -0
  10. package/dist/cjs/src/testing/graph-tester/core/TestFunction.js.map +1 -0
  11. package/dist/cjs/src/testing/graph-tester/core/types.js +24 -0
  12. package/dist/cjs/src/testing/graph-tester/core/types.js.map +1 -0
  13. package/dist/cjs/src/testing/graph-tester/fixtures/index.js +13 -0
  14. package/dist/cjs/src/testing/graph-tester/fixtures/index.js.map +1 -0
  15. package/dist/cjs/src/testing/graph-tester/fixtures/portPool.js +184 -0
  16. package/dist/cjs/src/testing/graph-tester/fixtures/portPool.js.map +1 -0
  17. package/dist/cjs/src/testing/graph-tester/index.js +98 -0
  18. package/dist/cjs/src/testing/graph-tester/index.js.map +1 -0
  19. package/dist/cjs/src/testing/graph-tester/modes/AccessibilityMode.js +230 -0
  20. package/dist/cjs/src/testing/graph-tester/modes/AccessibilityMode.js.map +1 -0
  21. package/dist/cjs/src/testing/graph-tester/modes/PerformanceMode.js +168 -0
  22. package/dist/cjs/src/testing/graph-tester/modes/PerformanceMode.js.map +1 -0
  23. package/dist/cjs/src/testing/graph-tester/modes/SEOMode.js +264 -0
  24. package/dist/cjs/src/testing/graph-tester/modes/SEOMode.js.map +1 -0
  25. package/dist/cjs/src/testing/graph-tester/modes/VisualRegressionMode.js +199 -0
  26. package/dist/cjs/src/testing/graph-tester/modes/VisualRegressionMode.js.map +1 -0
  27. package/dist/cjs/src/testing/graph-tester/modes/index.js +17 -0
  28. package/dist/cjs/src/testing/graph-tester/modes/index.js.map +1 -0
  29. package/dist/cjs/src/testing/graph-tester/reporters/HTMLReporter.js +411 -0
  30. package/dist/cjs/src/testing/graph-tester/reporters/HTMLReporter.js.map +1 -0
  31. package/dist/cjs/src/testing/graph-tester/reporters/JSONReporter.js +127 -0
  32. package/dist/cjs/src/testing/graph-tester/reporters/JSONReporter.js.map +1 -0
  33. package/dist/cjs/src/testing/graph-tester/reporters/MarkdownReporter.js +169 -0
  34. package/dist/cjs/src/testing/graph-tester/reporters/MarkdownReporter.js.map +1 -0
  35. package/dist/cjs/src/testing/graph-tester/reporters/UnifiedReporter.js +118 -0
  36. package/dist/cjs/src/testing/graph-tester/reporters/UnifiedReporter.js.map +1 -0
  37. package/dist/cjs/src/testing/graph-tester/reporters/index.js +17 -0
  38. package/dist/cjs/src/testing/graph-tester/reporters/index.js.map +1 -0
  39. package/dist/cjs/src/testing/graph-tester/screenshot/CanvasAnnotationRenderer.js +47 -0
  40. package/dist/cjs/src/testing/graph-tester/screenshot/CanvasAnnotationRenderer.js.map +1 -0
  41. package/dist/cjs/src/testing/graph-tester/screenshot/HTMLAnnotationRenderer.js +584 -0
  42. package/dist/cjs/src/testing/graph-tester/screenshot/HTMLAnnotationRenderer.js.map +1 -0
  43. package/dist/cjs/src/testing/graph-tester/screenshot/ScreenshotAnnotator.js +376 -0
  44. package/dist/cjs/src/testing/graph-tester/screenshot/ScreenshotAnnotator.js.map +1 -0
  45. package/dist/cjs/src/testing/graph-tester/screenshot/index.js +15 -0
  46. package/dist/cjs/src/testing/graph-tester/screenshot/index.js.map +1 -0
  47. package/dist/cjs/src/testing/graph-tester/screenshot/types.js +11 -0
  48. package/dist/cjs/src/testing/graph-tester/screenshot/types.js.map +1 -0
  49. package/dist/cjs/src/testing/selectors.js +1 -1
  50. package/dist/esm/src/browser.d.ts +9 -0
  51. package/dist/esm/src/browser.d.ts.map +1 -1
  52. package/dist/esm/src/browser.js +14 -0
  53. package/dist/esm/src/browser.js.map +1 -1
  54. package/dist/esm/src/decorators/ContainerHelpers.d.ts +2 -1
  55. package/dist/esm/src/decorators/ContainerHelpers.d.ts.map +1 -1
  56. package/dist/esm/src/decorators/ContainerHelpers.js +16 -1
  57. package/dist/esm/src/decorators/ContainerHelpers.js.map +1 -1
  58. package/dist/esm/src/decorators/Tool.d.ts.map +1 -1
  59. package/dist/esm/src/decorators/Tool.js +2 -3
  60. package/dist/esm/src/decorators/Tool.js.map +1 -1
  61. package/dist/esm/src/testing/graph-tester/core/GraphTester.d.ts +110 -0
  62. package/dist/esm/src/testing/graph-tester/core/GraphTester.d.ts.map +1 -0
  63. package/dist/esm/src/testing/graph-tester/core/GraphTester.js +335 -0
  64. package/dist/esm/src/testing/graph-tester/core/GraphTester.js.map +1 -0
  65. package/dist/esm/src/testing/graph-tester/core/TestFunction.d.ts +120 -0
  66. package/dist/esm/src/testing/graph-tester/core/TestFunction.d.ts.map +1 -0
  67. package/dist/esm/src/testing/graph-tester/core/TestFunction.js +184 -0
  68. package/dist/esm/src/testing/graph-tester/core/TestFunction.js.map +1 -0
  69. package/dist/esm/src/testing/graph-tester/core/types.d.ts +331 -0
  70. package/dist/esm/src/testing/graph-tester/core/types.d.ts.map +1 -0
  71. package/dist/esm/src/testing/graph-tester/core/types.js +21 -0
  72. package/dist/esm/src/testing/graph-tester/core/types.js.map +1 -0
  73. package/dist/esm/src/testing/graph-tester/fixtures/index.d.ts +8 -0
  74. package/dist/esm/src/testing/graph-tester/fixtures/index.d.ts.map +1 -0
  75. package/dist/esm/src/testing/graph-tester/fixtures/index.js +7 -0
  76. package/dist/esm/src/testing/graph-tester/fixtures/index.js.map +1 -0
  77. package/dist/esm/src/testing/graph-tester/fixtures/portPool.d.ts +40 -0
  78. package/dist/esm/src/testing/graph-tester/fixtures/portPool.d.ts.map +1 -0
  79. package/dist/esm/src/testing/graph-tester/fixtures/portPool.js +147 -0
  80. package/dist/esm/src/testing/graph-tester/fixtures/portPool.js.map +1 -0
  81. package/dist/esm/src/testing/graph-tester/index.d.ts +84 -0
  82. package/dist/esm/src/testing/graph-tester/index.d.ts.map +1 -0
  83. package/dist/esm/src/testing/graph-tester/index.js +77 -0
  84. package/dist/esm/src/testing/graph-tester/index.js.map +1 -0
  85. package/dist/esm/src/testing/graph-tester/modes/AccessibilityMode.d.ts +40 -0
  86. package/dist/esm/src/testing/graph-tester/modes/AccessibilityMode.d.ts.map +1 -0
  87. package/dist/esm/src/testing/graph-tester/modes/AccessibilityMode.js +193 -0
  88. package/dist/esm/src/testing/graph-tester/modes/AccessibilityMode.js.map +1 -0
  89. package/dist/esm/src/testing/graph-tester/modes/PerformanceMode.d.ts +42 -0
  90. package/dist/esm/src/testing/graph-tester/modes/PerformanceMode.d.ts.map +1 -0
  91. package/dist/esm/src/testing/graph-tester/modes/PerformanceMode.js +131 -0
  92. package/dist/esm/src/testing/graph-tester/modes/PerformanceMode.js.map +1 -0
  93. package/dist/esm/src/testing/graph-tester/modes/SEOMode.d.ts +39 -0
  94. package/dist/esm/src/testing/graph-tester/modes/SEOMode.d.ts.map +1 -0
  95. package/dist/esm/src/testing/graph-tester/modes/SEOMode.js +227 -0
  96. package/dist/esm/src/testing/graph-tester/modes/SEOMode.js.map +1 -0
  97. package/dist/esm/src/testing/graph-tester/modes/VisualRegressionMode.d.ts +83 -0
  98. package/dist/esm/src/testing/graph-tester/modes/VisualRegressionMode.d.ts.map +1 -0
  99. package/dist/esm/src/testing/graph-tester/modes/VisualRegressionMode.js +162 -0
  100. package/dist/esm/src/testing/graph-tester/modes/VisualRegressionMode.js.map +1 -0
  101. package/dist/esm/src/testing/graph-tester/modes/index.d.ts +14 -0
  102. package/dist/esm/src/testing/graph-tester/modes/index.d.ts.map +1 -0
  103. package/dist/esm/src/testing/graph-tester/modes/index.js +10 -0
  104. package/dist/esm/src/testing/graph-tester/modes/index.js.map +1 -0
  105. package/dist/esm/src/testing/graph-tester/reporters/HTMLReporter.d.ts +38 -0
  106. package/dist/esm/src/testing/graph-tester/reporters/HTMLReporter.d.ts.map +1 -0
  107. package/dist/esm/src/testing/graph-tester/reporters/HTMLReporter.js +374 -0
  108. package/dist/esm/src/testing/graph-tester/reporters/HTMLReporter.js.map +1 -0
  109. package/dist/esm/src/testing/graph-tester/reporters/JSONReporter.d.ts +50 -0
  110. package/dist/esm/src/testing/graph-tester/reporters/JSONReporter.d.ts.map +1 -0
  111. package/dist/esm/src/testing/graph-tester/reporters/JSONReporter.js +90 -0
  112. package/dist/esm/src/testing/graph-tester/reporters/JSONReporter.js.map +1 -0
  113. package/dist/esm/src/testing/graph-tester/reporters/MarkdownReporter.d.ts +33 -0
  114. package/dist/esm/src/testing/graph-tester/reporters/MarkdownReporter.d.ts.map +1 -0
  115. package/dist/esm/src/testing/graph-tester/reporters/MarkdownReporter.js +132 -0
  116. package/dist/esm/src/testing/graph-tester/reporters/MarkdownReporter.js.map +1 -0
  117. package/dist/esm/src/testing/graph-tester/reporters/UnifiedReporter.d.ts +30 -0
  118. package/dist/esm/src/testing/graph-tester/reporters/UnifiedReporter.d.ts.map +1 -0
  119. package/dist/esm/src/testing/graph-tester/reporters/UnifiedReporter.js +81 -0
  120. package/dist/esm/src/testing/graph-tester/reporters/UnifiedReporter.js.map +1 -0
  121. package/dist/esm/src/testing/graph-tester/reporters/index.d.ts +14 -0
  122. package/dist/esm/src/testing/graph-tester/reporters/index.d.ts.map +1 -0
  123. package/dist/esm/src/testing/graph-tester/reporters/index.js +10 -0
  124. package/dist/esm/src/testing/graph-tester/reporters/index.js.map +1 -0
  125. package/dist/esm/src/testing/graph-tester/screenshot/CanvasAnnotationRenderer.d.ts +33 -0
  126. package/dist/esm/src/testing/graph-tester/screenshot/CanvasAnnotationRenderer.d.ts.map +1 -0
  127. package/dist/esm/src/testing/graph-tester/screenshot/CanvasAnnotationRenderer.js +43 -0
  128. package/dist/esm/src/testing/graph-tester/screenshot/CanvasAnnotationRenderer.js.map +1 -0
  129. package/dist/esm/src/testing/graph-tester/screenshot/HTMLAnnotationRenderer.d.ts +70 -0
  130. package/dist/esm/src/testing/graph-tester/screenshot/HTMLAnnotationRenderer.d.ts.map +1 -0
  131. package/dist/esm/src/testing/graph-tester/screenshot/HTMLAnnotationRenderer.js +547 -0
  132. package/dist/esm/src/testing/graph-tester/screenshot/HTMLAnnotationRenderer.js.map +1 -0
  133. package/dist/esm/src/testing/graph-tester/screenshot/ScreenshotAnnotator.d.ts +83 -0
  134. package/dist/esm/src/testing/graph-tester/screenshot/ScreenshotAnnotator.d.ts.map +1 -0
  135. package/dist/esm/src/testing/graph-tester/screenshot/ScreenshotAnnotator.js +339 -0
  136. package/dist/esm/src/testing/graph-tester/screenshot/ScreenshotAnnotator.js.map +1 -0
  137. package/dist/esm/src/testing/graph-tester/screenshot/index.d.ts +11 -0
  138. package/dist/esm/src/testing/graph-tester/screenshot/index.d.ts.map +1 -0
  139. package/dist/esm/src/testing/graph-tester/screenshot/index.js +9 -0
  140. package/dist/esm/src/testing/graph-tester/screenshot/index.js.map +1 -0
  141. package/dist/esm/src/testing/graph-tester/screenshot/types.d.ts +331 -0
  142. package/dist/esm/src/testing/graph-tester/screenshot/types.d.ts.map +1 -0
  143. package/dist/esm/src/testing/graph-tester/screenshot/types.js +10 -0
  144. package/dist/esm/src/testing/graph-tester/screenshot/types.js.map +1 -0
  145. package/dist/esm/src/testing/selectors.d.ts +1 -1
  146. package/dist/esm/src/testing/selectors.js +1 -1
  147. package/package.json +19 -6
@@ -0,0 +1,376 @@
1
+ "use strict";
2
+ /**
3
+ * Core screenshot annotation capture logic.
4
+ *
5
+ * Captures full-page screenshots with element annotations including:
6
+ * - Bounding boxes (viewport and page coordinates)
7
+ * - Element metadata (testid, tag, attributes, styles)
8
+ * - Interaction capabilities
9
+ * - Element hierarchy (parent/child relationships)
10
+ * - ARIA attributes for accessibility analysis
11
+ *
12
+ * Uses single-pass DOM traversal for efficiency.
13
+ *
14
+ * @packageDocumentation
15
+ */
16
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ var desc = Object.getOwnPropertyDescriptor(m, k);
19
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20
+ desc = { enumerable: true, get: function() { return m[k]; } };
21
+ }
22
+ Object.defineProperty(o, k2, desc);
23
+ }) : (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ o[k2] = m[k];
26
+ }));
27
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
28
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
29
+ }) : function(o, v) {
30
+ o["default"] = v;
31
+ });
32
+ var __importStar = (this && this.__importStar) || (function () {
33
+ var ownKeys = function(o) {
34
+ ownKeys = Object.getOwnPropertyNames || function (o) {
35
+ var ar = [];
36
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
37
+ return ar;
38
+ };
39
+ return ownKeys(o);
40
+ };
41
+ return function (mod) {
42
+ if (mod && mod.__esModule) return mod;
43
+ var result = {};
44
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
45
+ __setModuleDefault(result, mod);
46
+ return result;
47
+ };
48
+ })();
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.ScreenshotAnnotator = void 0;
51
+ const fs = __importStar(require("fs/promises"));
52
+ const path = __importStar(require("path"));
53
+ /**
54
+ * Screenshot annotator.
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * const annotator = new ScreenshotAnnotator({
59
+ * outputDir: './screenshots',
60
+ * fullPage: true
61
+ * });
62
+ *
63
+ * const result = await annotator.capture(page, '/dashboard');
64
+ * console.log(`Captured ${result.annotations.length} annotations`);
65
+ * ```
66
+ */
67
+ class ScreenshotAnnotator {
68
+ constructor(config) {
69
+ this.config = {
70
+ fullPage: true,
71
+ includeInvisible: false,
72
+ minElementSize: 5,
73
+ detectNavigation: true,
74
+ captureLoadMetrics: true,
75
+ ...config,
76
+ };
77
+ }
78
+ /**
79
+ * Capture annotated screenshot for a page.
80
+ *
81
+ * @param page - Playwright page instance
82
+ * @param route - Route being captured
83
+ * @param viewportName - Optional viewport name for responsive testing
84
+ * @returns Annotated screenshot
85
+ */
86
+ async capture(page, route, viewportName) {
87
+ const startTime = Date.now();
88
+ // Ensure output directory exists
89
+ await fs.mkdir(this.config.outputDir, { recursive: true });
90
+ // Capture screenshot
91
+ const screenshotFilename = this.generateScreenshotFilename(route, viewportName);
92
+ const screenshotPath = path.join(this.config.outputDir, screenshotFilename);
93
+ const screenshot = await page.screenshot({
94
+ path: screenshotPath,
95
+ fullPage: this.config.fullPage,
96
+ type: 'png',
97
+ });
98
+ // Extract element annotations (single-pass DOM traversal)
99
+ const annotations = await this.extractAnnotations(page);
100
+ // Extract page metadata
101
+ const pageMetadata = await this.extractPageMetadata(page);
102
+ const result = {
103
+ route,
104
+ screenshot: Buffer.from(screenshot),
105
+ screenshotPath,
106
+ annotations,
107
+ pageMetadata,
108
+ timestamp: new Date(),
109
+ };
110
+ // Save annotation JSON
111
+ const annotationFilename = screenshotFilename.replace('.png', '.json');
112
+ const annotationPath = path.join(this.config.outputDir, annotationFilename);
113
+ await fs.writeFile(annotationPath, JSON.stringify(result, null, 2));
114
+ console.log(`Captured screenshot in ${Date.now() - startTime}ms: ${screenshotPath}`);
115
+ console.log(` Annotations: ${annotations.length}`);
116
+ console.log(` Annotation JSON: ${annotationPath}`);
117
+ return result;
118
+ }
119
+ /**
120
+ * Extract element annotations via single-pass DOM traversal.
121
+ *
122
+ * @param page - Playwright page instance
123
+ * @returns Array of element annotations
124
+ */
125
+ async extractAnnotations(page) {
126
+ const config = this.config;
127
+ // Single-pass DOM traversal in browser context
128
+ const rawAnnotations = await page.evaluate(({ includeInvisible, minElementSize, detectNavigation }) => {
129
+ const annotations = [];
130
+ const elementMap = new Map(); // Element -> ID mapping
131
+ let idCounter = 0;
132
+ // Get all elements
133
+ const allElements = Array.from(document.querySelectorAll('*'));
134
+ for (const element of allElements) {
135
+ // Generate unique ID
136
+ const elementId = `elem-${idCounter++}`;
137
+ elementMap.set(element, elementId);
138
+ // Get bounding box
139
+ const rect = element.getBoundingClientRect();
140
+ // Skip elements below minimum size
141
+ if (rect.width < minElementSize || rect.height < minElementSize) {
142
+ continue;
143
+ }
144
+ // Get computed styles
145
+ const computedStyle = window.getComputedStyle(element);
146
+ // Check visibility
147
+ const isVisible = computedStyle.visibility !== 'hidden' &&
148
+ computedStyle.display !== 'none' &&
149
+ parseFloat(computedStyle.opacity) > 0 &&
150
+ rect.width > 0 &&
151
+ rect.height > 0;
152
+ // Skip invisible elements if configured
153
+ if (!includeInvisible && !isVisible) {
154
+ continue;
155
+ }
156
+ // Get viewport bounding box
157
+ const boundingBox = {
158
+ x: rect.left,
159
+ y: rect.top,
160
+ width: rect.width,
161
+ height: rect.height,
162
+ };
163
+ // Get page bounding box (for full-page screenshots)
164
+ const pageBoundingBox = {
165
+ x: rect.left + window.scrollX,
166
+ y: rect.top + window.scrollY,
167
+ width: rect.width,
168
+ height: rect.height,
169
+ };
170
+ // Get attributes
171
+ const attributes = {};
172
+ for (const attr of Array.from(element.attributes)) {
173
+ attributes[attr.name] = attr.value;
174
+ }
175
+ // Get ARIA attributes
176
+ const ariaAttributes = {};
177
+ for (const attr of Array.from(element.attributes)) {
178
+ if (attr.name.startsWith('aria-')) {
179
+ ariaAttributes[attr.name] = attr.value;
180
+ }
181
+ }
182
+ // Detect interaction capabilities
183
+ const interactions = [];
184
+ const tagName = element.tagName.toLowerCase();
185
+ // Clickable elements
186
+ if (tagName === 'button' ||
187
+ tagName === 'a' ||
188
+ attributes.role === 'button' ||
189
+ attributes.onclick ||
190
+ computedStyle.cursor === 'pointer') {
191
+ interactions.push({ type: 'click', hasHandler: !!attributes.onclick });
192
+ }
193
+ // Input elements
194
+ if (tagName === 'input' ||
195
+ tagName === 'textarea' ||
196
+ attributes.contenteditable === 'true') {
197
+ interactions.push({ type: 'input', hasHandler: true });
198
+ }
199
+ // Select elements
200
+ if (tagName === 'select') {
201
+ interactions.push({ type: 'select', hasHandler: true });
202
+ }
203
+ // Focusable elements
204
+ if (element.hasAttribute('tabindex') ||
205
+ ['input', 'button', 'a', 'select', 'textarea'].includes(tagName)) {
206
+ interactions.push({ type: 'focus', hasHandler: true });
207
+ }
208
+ // Hoverable elements (with hover effects)
209
+ const hoverSelector = `:hover`;
210
+ if (attributes.onmouseover || attributes.onmouseenter) {
211
+ interactions.push({ type: 'hover', hasHandler: true });
212
+ }
213
+ // Detect navigation targets
214
+ let navigationTarget = undefined;
215
+ if (detectNavigation && tagName === 'a' && attributes.href) {
216
+ navigationTarget = {
217
+ target: attributes.href,
218
+ method: 'link',
219
+ href: attributes.href,
220
+ opensInNewTab: attributes.target === '_blank',
221
+ };
222
+ }
223
+ // Get parent ID
224
+ let parentId = undefined;
225
+ if (element.parentElement) {
226
+ parentId = elementMap.get(element.parentElement);
227
+ }
228
+ // Get child IDs
229
+ const childIds = [];
230
+ for (const child of Array.from(element.children)) {
231
+ const childId = elementMap.get(child);
232
+ if (childId) {
233
+ childIds.push(childId);
234
+ }
235
+ }
236
+ // Build annotation
237
+ const annotation = {
238
+ id: elementId,
239
+ selector: getCssSelector(element),
240
+ testId: attributes['data-testid'],
241
+ tagName,
242
+ boundingBox,
243
+ pageBoundingBox,
244
+ computedStyles: {
245
+ backgroundColor: computedStyle.backgroundColor,
246
+ color: computedStyle.color,
247
+ fontFamily: computedStyle.fontFamily,
248
+ fontSize: computedStyle.fontSize,
249
+ fontWeight: computedStyle.fontWeight,
250
+ display: computedStyle.display,
251
+ position: computedStyle.position,
252
+ opacity: computedStyle.opacity,
253
+ visibility: computedStyle.visibility,
254
+ border: computedStyle.border,
255
+ borderRadius: computedStyle.borderRadius,
256
+ padding: computedStyle.padding,
257
+ margin: computedStyle.margin,
258
+ },
259
+ textContent: element.textContent?.trim().substring(0, 200) || undefined,
260
+ attributes,
261
+ isInteractive: interactions.length > 0,
262
+ interactions,
263
+ navigationTarget,
264
+ parentId,
265
+ childIds,
266
+ ariaAttributes,
267
+ isVisible,
268
+ zIndex: parseInt(computedStyle.zIndex) || 0,
269
+ };
270
+ annotations.push(annotation);
271
+ }
272
+ // Helper: Generate CSS selector for element
273
+ function getCssSelector(element) {
274
+ if (element.id) {
275
+ return `#${element.id}`;
276
+ }
277
+ if (element.getAttribute('data-testid')) {
278
+ return `[data-testid="${element.getAttribute('data-testid')}"]`;
279
+ }
280
+ const path = [];
281
+ let current = element;
282
+ while (current && current.nodeType === Node.ELEMENT_NODE) {
283
+ let selector = current.tagName.toLowerCase();
284
+ if (current.id) {
285
+ selector += `#${current.id}`;
286
+ path.unshift(selector);
287
+ break;
288
+ }
289
+ const siblings = current.parentElement
290
+ ? Array.from(current.parentElement.children)
291
+ : [];
292
+ if (siblings.length > 1) {
293
+ const index = siblings.indexOf(current) + 1;
294
+ selector += `:nth-child(${index})`;
295
+ }
296
+ path.unshift(selector);
297
+ current = current.parentElement;
298
+ }
299
+ return path.join(' > ');
300
+ }
301
+ return annotations;
302
+ }, {
303
+ includeInvisible: this.config.includeInvisible || false,
304
+ minElementSize: this.config.minElementSize || 5,
305
+ detectNavigation: this.config.detectNavigation !== false,
306
+ });
307
+ return rawAnnotations;
308
+ }
309
+ /**
310
+ * Extract page metadata.
311
+ *
312
+ * @param page - Playwright page instance
313
+ * @returns Page metadata
314
+ */
315
+ async extractPageMetadata(page) {
316
+ const pageData = await page.evaluate(() => {
317
+ // Get meta tags
318
+ const metaTags = {};
319
+ const metaElements = Array.from(document.querySelectorAll('meta'));
320
+ for (const meta of metaElements) {
321
+ const name = meta.getAttribute('name') || meta.getAttribute('property') || '';
322
+ const content = meta.getAttribute('content') || '';
323
+ if (name) {
324
+ metaTags[name] = content;
325
+ }
326
+ }
327
+ // Get page size
328
+ const pageSize = {
329
+ width: Math.max(document.body.scrollWidth, document.documentElement.scrollWidth, document.body.offsetWidth, document.documentElement.offsetWidth, document.documentElement.clientWidth),
330
+ height: Math.max(document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.offsetHeight, document.documentElement.clientHeight),
331
+ };
332
+ // Get load metrics
333
+ const perfData = performance.getEntriesByType('navigation')[0];
334
+ const loadMetrics = perfData
335
+ ? {
336
+ domContentLoaded: perfData.domContentLoadedEventEnd - perfData.domContentLoadedEventStart,
337
+ loadComplete: perfData.loadEventEnd - perfData.loadEventStart,
338
+ }
339
+ : undefined;
340
+ return {
341
+ title: document.title,
342
+ url: window.location.href,
343
+ metaTags,
344
+ pageSize,
345
+ loadMetrics,
346
+ };
347
+ });
348
+ const viewport = page.viewportSize() || { width: 1280, height: 720 };
349
+ return {
350
+ ...pageData,
351
+ viewport,
352
+ };
353
+ }
354
+ /**
355
+ * Generate screenshot filename from route and viewport.
356
+ *
357
+ * @param route - Route path
358
+ * @param viewportName - Optional viewport name
359
+ * @returns Sanitized filename
360
+ */
361
+ generateScreenshotFilename(route, viewportName) {
362
+ // Sanitize route for filename
363
+ let filename = route.replace(/^\//, '').replace(/\//g, '-') || 'home';
364
+ // Remove query params and hash
365
+ filename = filename.split('?')[0].split('#')[0];
366
+ // Add viewport name if provided
367
+ if (viewportName) {
368
+ filename = `${filename}-${viewportName}`;
369
+ }
370
+ // Add timestamp
371
+ const timestamp = Date.now();
372
+ return `${filename}-${timestamp}.png`;
373
+ }
374
+ }
375
+ exports.ScreenshotAnnotator = ScreenshotAnnotator;
376
+ //# sourceMappingURL=ScreenshotAnnotator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScreenshotAnnotator.js","sourceRoot":"","sources":["../../../../../../src/testing/graph-tester/screenshot/ScreenshotAnnotator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ /**
3
+ * Screenshot annotation system exports.
4
+ *
5
+ * @packageDocumentation
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.CanvasAnnotationRenderer = exports.HTMLAnnotationRenderer = exports.ScreenshotAnnotator = void 0;
9
+ var ScreenshotAnnotator_1 = require("./ScreenshotAnnotator");
10
+ Object.defineProperty(exports, "ScreenshotAnnotator", { enumerable: true, get: function () { return ScreenshotAnnotator_1.ScreenshotAnnotator; } });
11
+ var HTMLAnnotationRenderer_1 = require("./HTMLAnnotationRenderer");
12
+ Object.defineProperty(exports, "HTMLAnnotationRenderer", { enumerable: true, get: function () { return HTMLAnnotationRenderer_1.HTMLAnnotationRenderer; } });
13
+ var CanvasAnnotationRenderer_1 = require("./CanvasAnnotationRenderer");
14
+ Object.defineProperty(exports, "CanvasAnnotationRenderer", { enumerable: true, get: function () { return CanvasAnnotationRenderer_1.CanvasAnnotationRenderer; } });
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/testing/graph-tester/screenshot/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAG5B,mEAAkE;AAAzD,gIAAA,sBAAsB,OAAA;AAC/B,uEAAsE;AAA7D,oIAAA,wBAAwB,OAAA"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ /**
3
+ * Types for screenshot annotation system.
4
+ *
5
+ * This defines the structure of annotated screenshots with element metadata,
6
+ * bounding boxes, and AI-ready output format.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/testing/graph-tester/screenshot/types.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG"}
@@ -17,7 +17,7 @@ exports.testIdEndsWith = testIdEndsWith;
17
17
  *
18
18
  * @example
19
19
  * ```typescript
20
- * import { Chat } from '../architecture/DemoComponentNames';
20
+ * import { Chat } from '../architecture/ComponentNames';
21
21
  * import { testId } from '@supernal-interface/core/testing';
22
22
  *
23
23
  * const input = page.locator(testId(Chat.input));
@@ -8,6 +8,10 @@ export { Tool, ToolConfig, ToolMetadata, setDefaultToolReporter } from './decora
8
8
  export { ToolProvider, ToolProviderConfig } from './decorators/ToolProvider';
9
9
  export { ClickTool, ChangeTool, TypeTool, HoverTool, MultiActionTool, FormTool, setGlobalToolReporter, type ToolExecutionReporter } from './decorators/ToolHelpers';
10
10
  export { ToolRegistry } from './background/registry/ToolRegistry';
11
+ export { Component, ComponentConfig } from './decorators/Component';
12
+ export { AITool, TestTool, OnboardingTool, DangerousTool, DestructiveTool, DataReadTool, DataWriteTool, NavigationTool, AIAndTestTool, OnboardingAndTestTool, } from './decorators/SpecializedTools';
13
+ export { ToolPreset, getToolPreset, applyPreset, registerPendingPreset, clearToolPresets, PresetTemplates, createPreset, componentPreset, pathPreset, } from './decorators/ToolPreset';
14
+ export { ToolCategory } from './types/Tool';
11
15
  export { useContainer } from './decorators/ContainerHelpers';
12
16
  export { getContainer, getAllContainers, isComponentInContainer, findComponentContainers, ContainerRegistry, type ContainerDefinition, type ContainerId } from './background/architecture';
13
17
  export { ExposureCollector } from './exposure/ExposureCollector';
@@ -24,4 +28,9 @@ export { createNames, getComponentIds, isComponentId } from './names/createNames
24
28
  export type { ComponentId } from './names/createNames';
25
29
  export { DOMExecutor } from './execution/DOMExecutor';
26
30
  export { useToolBinding } from './react';
31
+ export { AIInterface, type AICommand, type AIResponse } from './ai/AIInterface';
32
+ export { ToolMatcher, type MatchContext } from './ai/ToolMatcher';
33
+ export { ParameterExtractor } from './ai/ParameterExtractor';
34
+ export { ToolExecutor } from './ai/ToolExecutor';
35
+ export { SuggestionEngine } from './ai/SuggestionEngine';
27
36
  //# sourceMappingURL=browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,SAAS,EACT,eAAe,EACf,QAAQ,EACR,qBAAqB,EACrB,KAAK,qBAAqB,EAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAGlE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAG7D,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EACjB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AACzE,YAAY,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACpF,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,yCAAyC,CAAC;AAGjD,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,YAAY,EAAE,WAAW,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAG7G,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG/F,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClF,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAKtD,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,SAAS,EACT,eAAe,EACf,QAAQ,EACR,qBAAqB,EACrB,KAAK,qBAAqB,EAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAGlE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGpE,OAAO,EACL,MAAM,EACN,QAAQ,EACR,cAAc,EACd,aAAa,EACb,eAAe,EACf,YAAY,EACZ,aAAa,EACb,cAAc,EACd,aAAa,EACb,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,UAAU,EACV,aAAa,EACb,WAAW,EACX,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,UAAU,GACX,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAG7D,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EACjB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AACzE,YAAY,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACpF,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,yCAAyC,CAAC;AAGjD,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,YAAY,EAAE,WAAW,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAG7G,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG/F,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClF,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAKtD,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGzC,OAAO,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -9,6 +9,14 @@ export { Tool, setDefaultToolReporter } from './decorators/Tool.js';
9
9
  export { ToolProvider } from './decorators/ToolProvider.js';
10
10
  export { ClickTool, ChangeTool, TypeTool, HoverTool, MultiActionTool, FormTool, setGlobalToolReporter } from './decorators/ToolHelpers.js';
11
11
  export { ToolRegistry } from './background/registry/ToolRegistry.js';
12
+ // Component decorator
13
+ export { Component } from './decorators/Component.js';
14
+ // Specialized decorators
15
+ export { AITool, TestTool, OnboardingTool, DangerousTool, DestructiveTool, DataReadTool, DataWriteTool, NavigationTool, AIAndTestTool, OnboardingAndTestTool, } from './decorators/SpecializedTools.js';
16
+ // Tool presets
17
+ export { ToolPreset, getToolPreset, applyPreset, registerPendingPreset, clearToolPresets, PresetTemplates, createPreset, componentPreset, pathPreset, } from './decorators/ToolPreset.js';
18
+ // Tool categories
19
+ export { ToolCategory } from './types/Tool.js';
12
20
  // Container HOC
13
21
  export { useContainer } from './decorators/ContainerHelpers.js';
14
22
  // Architecture (generic types and utilities)
@@ -32,6 +40,12 @@ export { DOMExecutor } from './execution/DOMExecutor.js';
32
40
  // Note: usePersistedState excluded due to fs/promises dependency in StorageAdapter
33
41
  // export { usePersistedState } from './react/usePersistedState.js';
34
42
  export { useToolBinding } from './react/index.js';
43
+ // AI (browser-safe)
44
+ export { AIInterface } from './ai/AIInterface.js';
45
+ export { ToolMatcher } from './ai/ToolMatcher.js';
46
+ export { ParameterExtractor } from './ai/ParameterExtractor.js';
47
+ export { ToolExecutor } from './ai/ToolExecutor.js';
48
+ export { SuggestionEngine } from './ai/SuggestionEngine.js';
35
49
  // Note: CLI tools, generators, and Node.js-specific functionality
36
50
  // are excluded from browser builds
37
51
  //# sourceMappingURL=browser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+BAA+B;AAC/B,OAAO,EAAE,IAAI,EAA4B,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAsB,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,SAAS,EACT,eAAe,EACf,QAAQ,EACR,qBAAqB,EAEtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAElE,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,6CAA6C;AAC7C,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EAGlB,MAAM,2BAA2B,CAAC;AAEnC,oBAAoB;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAEzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AAQpF,+CAA+C;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAGxE,2BAA2B;AAC3B,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE/F,uBAAuB;AACvB,cAAc,SAAS,CAAC;AAExB,iCAAiC;AACjC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGlF,2BAA2B;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,6BAA6B;AAC7B,mFAAmF;AACnF,iEAAiE;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,kEAAkE;AAClE,mCAAmC"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+BAA+B;AAC/B,OAAO,EAAE,IAAI,EAA4B,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAsB,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,SAAS,EACT,eAAe,EACf,QAAQ,EACR,qBAAqB,EAEtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAElE,sBAAsB;AACtB,OAAO,EAAE,SAAS,EAAmB,MAAM,wBAAwB,CAAC;AAEpE,yBAAyB;AACzB,OAAO,EACL,MAAM,EACN,QAAQ,EACR,cAAc,EACd,aAAa,EACb,eAAe,EACf,YAAY,EACZ,aAAa,EACb,cAAc,EACd,aAAa,EACb,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AAEvC,eAAe;AACf,OAAO,EACL,UAAU,EACV,aAAa,EACb,WAAW,EACX,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,UAAU,GACX,MAAM,yBAAyB,CAAC;AAEjC,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,6CAA6C;AAC7C,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EAGlB,MAAM,2BAA2B,CAAC;AAEnC,oBAAoB;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAEzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AAQpF,+CAA+C;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAGxE,2BAA2B;AAC3B,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE/F,uBAAuB;AACvB,cAAc,SAAS,CAAC;AAExB,iCAAiC;AACjC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGlF,2BAA2B;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,6BAA6B;AAC7B,mFAAmF;AACnF,iEAAiE;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,oBAAoB;AACpB,OAAO,EAAE,WAAW,EAAmC,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,WAAW,EAAqB,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,kEAAkE;AAClE,mCAAmC"}
@@ -4,7 +4,8 @@
4
4
  * Wraps a React component to automatically:
5
5
  * 1. Register in RuntimeTreeBuilder component hierarchy
6
6
  * 2. Update NavigationGraph current context
7
- * 3. Track container lifecycle (mount/unmount)
7
+ * 3. Update LocationContext with visible elements
8
+ * 4. Track container lifecycle (mount/unmount)
8
9
  *
9
10
  * Zero boilerplate - just wrap your page/modal component.
10
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ContainerHelpers.d.ts","sourceRoot":"","sources":["../../../../src/decorators/ContainerHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAexD"}
1
+ {"version":3,"file":"ContainerHelpers.d.ts","sourceRoot":"","sources":["../../../../src/decorators/ContainerHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAmBH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAmBxD"}
@@ -4,13 +4,25 @@
4
4
  * Wraps a React component to automatically:
5
5
  * 1. Register in RuntimeTreeBuilder component hierarchy
6
6
  * 2. Update NavigationGraph current context
7
- * 3. Track container lifecycle (mount/unmount)
7
+ * 3. Update LocationContext with visible elements
8
+ * 4. Track container lifecycle (mount/unmount)
8
9
  *
9
10
  * Zero boilerplate - just wrap your page/modal component.
10
11
  */
11
12
  import { useEffect } from 'react';
12
13
  import { TreeBuilder } from '../background/navigation/RuntimeTreeBuilder.js';
13
14
  import { NavigationGraph } from '../background/navigation/NavigationGraph.js';
15
+ /**
16
+ * Scan the DOM for visible elements with data-testid attributes
17
+ */
18
+ function getVisibleElements() {
19
+ if (typeof document === 'undefined')
20
+ return [];
21
+ const elements = document.querySelectorAll('[data-testid]');
22
+ return Array.from(elements)
23
+ .map(el => el.getAttribute('data-testid'))
24
+ .filter(Boolean);
25
+ }
14
26
  /**
15
27
  * Hook to mark a component as a container
16
28
  * Call this at the top of your component function
@@ -31,6 +43,9 @@ export function useContainer(containerName) {
31
43
  TreeBuilder.enterComponent(containerName);
32
44
  const graph = NavigationGraph.getInstance();
33
45
  graph.setCurrentContext(containerName);
46
+ // DO NOT touch LocationContext here - let useLocationTracking handle it
47
+ // Calling LocationContext.setCurrent() here creates a race condition
48
+ // that clears the elements array populated by useLocationTracking
34
49
  console.log(`📦 [Container] Registered: ${containerName}`);
35
50
  // Cleanup on unmount
36
51
  return () => {
@@ -1 +1 @@
1
- {"version":3,"file":"ContainerHelpers.js","sourceRoot":"","sources":["../../../../src/decorators/ContainerHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAE3E;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,YAAY,CAAC,aAAqB;IAChD,SAAS,CAAC,GAAG,EAAE;QACb,qBAAqB;QACrB,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;QAC5C,KAAK,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAEvC,OAAO,CAAC,GAAG,CAAC,8BAA8B,aAAa,EAAE,CAAC,CAAC;QAE3D,qBAAqB;QACrB,OAAO,GAAG,EAAE;YACV,WAAW,CAAC,aAAa,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,gCAAgC,aAAa,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"ContainerHelpers.js","sourceRoot":"","sources":["../../../../src/decorators/ContainerHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAG3E;;GAEG;AACH,SAAS,kBAAkB;IACzB,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC;IAE/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;SACxB,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;SACzC,MAAM,CAAC,OAAO,CAAa,CAAC;AACjC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,YAAY,CAAC,aAAqB;IAChD,SAAS,CAAC,GAAG,EAAE;QACb,qBAAqB;QACrB,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;QAC5C,KAAK,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAEvC,wEAAwE;QACxE,qEAAqE;QACrE,kEAAkE;QAElE,OAAO,CAAC,GAAG,CAAC,8BAA8B,aAAa,EAAE,CAAC,CAAC;QAE3D,qBAAqB;QACrB,OAAO,GAAG,EAAE;YACV,WAAW,CAAC,aAAa,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,gCAAgC,aAAa,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;AACtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Tool.d.ts","sourceRoot":"","sources":["../../../../src/decorators/Tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Tool.d.ts","sourceRoot":"","sources":["../../../../src/decorators/Tool.ts"],"names":[],"mappings":"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"}
@@ -117,10 +117,9 @@ function decorateStandaloneFunction(func, config) {
117
117
  ToolRegistry.registerTool(providerName, uniqueFunctionId, toolMetadata);
118
118
  }
119
119
  catch (error) {
120
- console.error('Failed to register tool:', toolMetadata.name, error);
120
+ DEBUG && console.error('Failed to register tool:', toolMetadata.name, error);
121
121
  }
122
- DEBUG &&
123
- console.log(`[Tool] Registered function: ${toolMetadata.name} (${toolMetadata.category})`);
122
+ DEBUG && console.log(`[Tool] Registered function: ${toolMetadata.name} (${toolMetadata.category})`);
124
123
  // Return a wrapped function that preserves the original's return value
125
124
  // This ensures the function's return value is properly propagated to callers
126
125
  const wrappedFunction = async function (...args) {