donobu 2.15.1 → 2.16.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 (294) hide show
  1. package/dist/assets/control-panel.js +30 -3
  2. package/dist/assets/generated/parameter-schemas.json +33 -33
  3. package/dist/assets/generated/version +1 -1
  4. package/dist/assets/interactive-elements-tracker.js +351 -0
  5. package/dist/assets/page-interactions-tracker.js +39 -20
  6. package/dist/assets/smart-selector-generator.js +38 -15
  7. package/dist/bindings/FocusPage.d.ts +6 -1
  8. package/dist/bindings/FocusPage.d.ts.map +1 -1
  9. package/dist/bindings/FocusPage.js +2 -8
  10. package/dist/bindings/FocusPage.js.map +1 -1
  11. package/dist/bindings/PageInteractionTracker.d.ts +9 -2
  12. package/dist/bindings/PageInteractionTracker.d.ts.map +1 -1
  13. package/dist/bindings/PageInteractionTracker.js +27 -3
  14. package/dist/bindings/PageInteractionTracker.js.map +1 -1
  15. package/dist/bindings/ProposeToolCall.d.ts +20 -0
  16. package/dist/bindings/ProposeToolCall.d.ts.map +1 -0
  17. package/dist/bindings/ProposeToolCall.js +29 -0
  18. package/dist/bindings/ProposeToolCall.js.map +1 -0
  19. package/dist/bindings/ToggleDonobuAnnotations.d.ts +5 -2
  20. package/dist/bindings/ToggleDonobuAnnotations.d.ts.map +1 -1
  21. package/dist/bindings/ToggleDonobuAnnotations.js +12 -6
  22. package/dist/bindings/ToggleDonobuAnnotations.js.map +1 -1
  23. package/dist/esm/assets/control-panel.js +30 -3
  24. package/dist/esm/assets/generated/parameter-schemas.json +33 -33
  25. package/dist/esm/assets/generated/version +1 -1
  26. package/dist/esm/assets/interactive-elements-tracker.js +351 -0
  27. package/dist/esm/assets/page-interactions-tracker.js +39 -20
  28. package/dist/esm/assets/smart-selector-generator.js +38 -15
  29. package/dist/esm/bindings/FocusPage.d.ts +6 -1
  30. package/dist/esm/bindings/FocusPage.d.ts.map +1 -1
  31. package/dist/esm/bindings/FocusPage.js +2 -8
  32. package/dist/esm/bindings/FocusPage.js.map +1 -1
  33. package/dist/esm/bindings/PageInteractionTracker.d.ts +9 -2
  34. package/dist/esm/bindings/PageInteractionTracker.d.ts.map +1 -1
  35. package/dist/esm/bindings/PageInteractionTracker.js +27 -3
  36. package/dist/esm/bindings/PageInteractionTracker.js.map +1 -1
  37. package/dist/esm/bindings/ProposeToolCall.d.ts +20 -0
  38. package/dist/esm/bindings/ProposeToolCall.d.ts.map +1 -0
  39. package/dist/esm/bindings/ProposeToolCall.js +29 -0
  40. package/dist/esm/bindings/ProposeToolCall.js.map +1 -0
  41. package/dist/esm/bindings/ToggleDonobuAnnotations.d.ts +5 -2
  42. package/dist/esm/bindings/ToggleDonobuAnnotations.d.ts.map +1 -1
  43. package/dist/esm/bindings/ToggleDonobuAnnotations.js +12 -6
  44. package/dist/esm/bindings/ToggleDonobuAnnotations.js.map +1 -1
  45. package/dist/esm/managers/CodeGenerator.d.ts.map +1 -1
  46. package/dist/esm/managers/CodeGenerator.js +2 -1
  47. package/dist/esm/managers/CodeGenerator.js.map +1 -1
  48. package/dist/esm/managers/ControlPanel.d.ts +124 -0
  49. package/dist/esm/managers/ControlPanel.d.ts.map +1 -0
  50. package/dist/esm/managers/ControlPanel.js +282 -0
  51. package/dist/esm/managers/ControlPanel.js.map +1 -0
  52. package/dist/esm/managers/DonobuFlow.d.ts +4 -12
  53. package/dist/esm/managers/DonobuFlow.d.ts.map +1 -1
  54. package/dist/esm/managers/DonobuFlow.js +35 -140
  55. package/dist/esm/managers/DonobuFlow.js.map +1 -1
  56. package/dist/esm/managers/InteractionVisualizer.d.ts +9 -15
  57. package/dist/esm/managers/InteractionVisualizer.d.ts.map +1 -1
  58. package/dist/esm/managers/InteractionVisualizer.js +44 -44
  59. package/dist/esm/managers/InteractionVisualizer.js.map +1 -1
  60. package/dist/esm/managers/PageInspector.d.ts +242 -0
  61. package/dist/esm/managers/PageInspector.d.ts.map +1 -0
  62. package/dist/esm/managers/PageInspector.js +783 -0
  63. package/dist/esm/managers/PageInspector.js.map +1 -0
  64. package/dist/esm/managers/ToolManager.d.ts.map +1 -1
  65. package/dist/esm/managers/ToolManager.js +3 -5
  66. package/dist/esm/managers/ToolManager.js.map +1 -1
  67. package/dist/esm/models/InteractableElement.d.ts +2 -2
  68. package/dist/esm/models/ToolCallContext.d.ts +6 -2
  69. package/dist/esm/models/ToolCallContext.d.ts.map +1 -1
  70. package/dist/esm/playwrightTestExtensions.d.ts +5 -0
  71. package/dist/esm/playwrightTestExtensions.d.ts.map +1 -1
  72. package/dist/esm/playwrightTestExtensions.js +52 -13
  73. package/dist/esm/playwrightTestExtensions.js.map +1 -1
  74. package/dist/esm/tools/AnalyzePageTextTool.js +1 -1
  75. package/dist/esm/tools/AnalyzePageTextTool.js.map +1 -1
  76. package/dist/esm/tools/AssertPageTextTool.js +1 -1
  77. package/dist/esm/tools/AssertPageTextTool.js.map +1 -1
  78. package/dist/esm/tools/AssertTool.d.ts.map +1 -1
  79. package/dist/esm/tools/AssertTool.js +4 -4
  80. package/dist/esm/tools/AssertTool.js.map +1 -1
  81. package/dist/esm/tools/ChangeWebBrowserTabTool.d.ts.map +1 -1
  82. package/dist/esm/tools/ChangeWebBrowserTabTool.js +8 -7
  83. package/dist/esm/tools/ChangeWebBrowserTabTool.js.map +1 -1
  84. package/dist/esm/tools/ClickTool.js +1 -1
  85. package/dist/esm/tools/ClickTool.js.map +1 -1
  86. package/dist/esm/tools/CreateBrowserCookieReportTool.js +1 -1
  87. package/dist/esm/tools/CreateBrowserCookieReportTool.js.map +1 -1
  88. package/dist/esm/tools/CustomToolRunnerTool.d.ts.map +1 -1
  89. package/dist/esm/tools/CustomToolRunnerTool.js +1 -1
  90. package/dist/esm/tools/CustomToolRunnerTool.js.map +1 -1
  91. package/dist/esm/tools/DetectBrokenLinksTool.js +1 -1
  92. package/dist/esm/tools/DetectBrokenLinksTool.js.map +1 -1
  93. package/dist/esm/tools/ExtractGoogleStreetviewEntityDataTool.js +1 -1
  94. package/dist/esm/tools/ExtractGoogleStreetviewEntityDataTool.js.map +1 -1
  95. package/dist/esm/tools/ExtractPaymentProviderKeyTool.js +1 -1
  96. package/dist/esm/tools/ExtractPaymentProviderKeyTool.js.map +1 -1
  97. package/dist/esm/tools/ExtractPublicFacebookEntityDataTool.js +1 -1
  98. package/dist/esm/tools/ExtractPublicFacebookEntityDataTool.js.map +1 -1
  99. package/dist/esm/tools/GoForwardOrBackTool.js +1 -1
  100. package/dist/esm/tools/GoForwardOrBackTool.js.map +1 -1
  101. package/dist/esm/tools/GoToGoogleMapsStreetViewTool.js +1 -1
  102. package/dist/esm/tools/GoToGoogleMapsStreetViewTool.js.map +1 -1
  103. package/dist/esm/tools/GoToWebpageTool.js +1 -1
  104. package/dist/esm/tools/GoToWebpageTool.js.map +1 -1
  105. package/dist/esm/tools/HoverOverElementTool.d.ts.map +1 -1
  106. package/dist/esm/tools/HoverOverElementTool.js +1 -1
  107. package/dist/esm/tools/HoverOverElementTool.js.map +1 -1
  108. package/dist/esm/tools/NavigateWithinStreetView.js +1 -1
  109. package/dist/esm/tools/NavigateWithinStreetView.js.map +1 -1
  110. package/dist/esm/tools/PressKeyTool.js +1 -1
  111. package/dist/esm/tools/PressKeyTool.js.map +1 -1
  112. package/dist/esm/tools/ReloadPageTool.js +1 -1
  113. package/dist/esm/tools/ReloadPageTool.js.map +1 -1
  114. package/dist/esm/tools/ReplayableInteraction.d.ts +16 -1
  115. package/dist/esm/tools/ReplayableInteraction.d.ts.map +1 -1
  116. package/dist/esm/tools/ReplayableInteraction.js +169 -16
  117. package/dist/esm/tools/ReplayableInteraction.js.map +1 -1
  118. package/dist/esm/tools/RunAccessibilityTestTool.d.ts +8 -0
  119. package/dist/esm/tools/RunAccessibilityTestTool.d.ts.map +1 -1
  120. package/dist/esm/tools/RunAccessibilityTestTool.js +15 -2
  121. package/dist/esm/tools/RunAccessibilityTestTool.js.map +1 -1
  122. package/dist/esm/tools/RunInlineJavaScriptCodeTool.d.ts.map +1 -1
  123. package/dist/esm/tools/RunInlineJavaScriptCodeTool.js +1 -1
  124. package/dist/esm/tools/RunInlineJavaScriptCodeTool.js.map +1 -1
  125. package/dist/esm/tools/SaveWebpageAsPdfTool.js +1 -1
  126. package/dist/esm/tools/SaveWebpageAsPdfTool.js.map +1 -1
  127. package/dist/esm/tools/ScrollPageTool.d.ts +1 -1
  128. package/dist/esm/tools/ScrollPageTool.d.ts.map +1 -1
  129. package/dist/esm/tools/ScrollPageTool.js +47 -4
  130. package/dist/esm/tools/ScrollPageTool.js.map +1 -1
  131. package/dist/esm/tools/WaitTool.js +1 -1
  132. package/dist/esm/tools/WaitTool.js.map +1 -1
  133. package/dist/esm/utils/MiscUtils.d.ts +2 -2
  134. package/dist/esm/utils/MiscUtils.js +2 -2
  135. package/dist/esm/utils/PlaywrightUtils.d.ts +26 -127
  136. package/dist/esm/utils/PlaywrightUtils.d.ts.map +1 -1
  137. package/dist/esm/utils/PlaywrightUtils.js +133 -935
  138. package/dist/esm/utils/PlaywrightUtils.js.map +1 -1
  139. package/dist/managers/CodeGenerator.d.ts.map +1 -1
  140. package/dist/managers/CodeGenerator.js +2 -1
  141. package/dist/managers/CodeGenerator.js.map +1 -1
  142. package/dist/managers/ControlPanel.d.ts +124 -0
  143. package/dist/managers/ControlPanel.d.ts.map +1 -0
  144. package/dist/managers/ControlPanel.js +282 -0
  145. package/dist/managers/ControlPanel.js.map +1 -0
  146. package/dist/managers/DonobuFlow.d.ts +4 -12
  147. package/dist/managers/DonobuFlow.d.ts.map +1 -1
  148. package/dist/managers/DonobuFlow.js +35 -140
  149. package/dist/managers/DonobuFlow.js.map +1 -1
  150. package/dist/managers/InteractionVisualizer.d.ts +9 -15
  151. package/dist/managers/InteractionVisualizer.d.ts.map +1 -1
  152. package/dist/managers/InteractionVisualizer.js +44 -44
  153. package/dist/managers/InteractionVisualizer.js.map +1 -1
  154. package/dist/managers/PageInspector.d.ts +242 -0
  155. package/dist/managers/PageInspector.d.ts.map +1 -0
  156. package/dist/managers/PageInspector.js +783 -0
  157. package/dist/managers/PageInspector.js.map +1 -0
  158. package/dist/managers/ToolManager.d.ts.map +1 -1
  159. package/dist/managers/ToolManager.js +3 -5
  160. package/dist/managers/ToolManager.js.map +1 -1
  161. package/dist/models/InteractableElement.d.ts +2 -2
  162. package/dist/models/ToolCallContext.d.ts +6 -2
  163. package/dist/models/ToolCallContext.d.ts.map +1 -1
  164. package/dist/playwrightTestExtensions.d.ts +5 -0
  165. package/dist/playwrightTestExtensions.d.ts.map +1 -1
  166. package/dist/playwrightTestExtensions.js +52 -13
  167. package/dist/playwrightTestExtensions.js.map +1 -1
  168. package/dist/tools/AnalyzePageTextTool.js +1 -1
  169. package/dist/tools/AnalyzePageTextTool.js.map +1 -1
  170. package/dist/tools/AssertPageTextTool.js +1 -1
  171. package/dist/tools/AssertPageTextTool.js.map +1 -1
  172. package/dist/tools/AssertTool.d.ts.map +1 -1
  173. package/dist/tools/AssertTool.js +4 -4
  174. package/dist/tools/AssertTool.js.map +1 -1
  175. package/dist/tools/ChangeWebBrowserTabTool.d.ts.map +1 -1
  176. package/dist/tools/ChangeWebBrowserTabTool.js +8 -7
  177. package/dist/tools/ChangeWebBrowserTabTool.js.map +1 -1
  178. package/dist/tools/ClickTool.js +1 -1
  179. package/dist/tools/ClickTool.js.map +1 -1
  180. package/dist/tools/CreateBrowserCookieReportTool.js +1 -1
  181. package/dist/tools/CreateBrowserCookieReportTool.js.map +1 -1
  182. package/dist/tools/CustomToolRunnerTool.d.ts.map +1 -1
  183. package/dist/tools/CustomToolRunnerTool.js +1 -1
  184. package/dist/tools/CustomToolRunnerTool.js.map +1 -1
  185. package/dist/tools/DetectBrokenLinksTool.js +1 -1
  186. package/dist/tools/DetectBrokenLinksTool.js.map +1 -1
  187. package/dist/tools/ExtractGoogleStreetviewEntityDataTool.js +1 -1
  188. package/dist/tools/ExtractGoogleStreetviewEntityDataTool.js.map +1 -1
  189. package/dist/tools/ExtractPaymentProviderKeyTool.js +1 -1
  190. package/dist/tools/ExtractPaymentProviderKeyTool.js.map +1 -1
  191. package/dist/tools/ExtractPublicFacebookEntityDataTool.js +1 -1
  192. package/dist/tools/ExtractPublicFacebookEntityDataTool.js.map +1 -1
  193. package/dist/tools/GoForwardOrBackTool.js +1 -1
  194. package/dist/tools/GoForwardOrBackTool.js.map +1 -1
  195. package/dist/tools/GoToGoogleMapsStreetViewTool.js +1 -1
  196. package/dist/tools/GoToGoogleMapsStreetViewTool.js.map +1 -1
  197. package/dist/tools/GoToWebpageTool.js +1 -1
  198. package/dist/tools/GoToWebpageTool.js.map +1 -1
  199. package/dist/tools/HoverOverElementTool.d.ts.map +1 -1
  200. package/dist/tools/HoverOverElementTool.js +1 -1
  201. package/dist/tools/HoverOverElementTool.js.map +1 -1
  202. package/dist/tools/NavigateWithinStreetView.js +1 -1
  203. package/dist/tools/NavigateWithinStreetView.js.map +1 -1
  204. package/dist/tools/PressKeyTool.js +1 -1
  205. package/dist/tools/PressKeyTool.js.map +1 -1
  206. package/dist/tools/ReloadPageTool.js +1 -1
  207. package/dist/tools/ReloadPageTool.js.map +1 -1
  208. package/dist/tools/ReplayableInteraction.d.ts +16 -1
  209. package/dist/tools/ReplayableInteraction.d.ts.map +1 -1
  210. package/dist/tools/ReplayableInteraction.js +169 -16
  211. package/dist/tools/ReplayableInteraction.js.map +1 -1
  212. package/dist/tools/RunAccessibilityTestTool.d.ts +8 -0
  213. package/dist/tools/RunAccessibilityTestTool.d.ts.map +1 -1
  214. package/dist/tools/RunAccessibilityTestTool.js +15 -2
  215. package/dist/tools/RunAccessibilityTestTool.js.map +1 -1
  216. package/dist/tools/RunInlineJavaScriptCodeTool.d.ts.map +1 -1
  217. package/dist/tools/RunInlineJavaScriptCodeTool.js +1 -1
  218. package/dist/tools/RunInlineJavaScriptCodeTool.js.map +1 -1
  219. package/dist/tools/SaveWebpageAsPdfTool.js +1 -1
  220. package/dist/tools/SaveWebpageAsPdfTool.js.map +1 -1
  221. package/dist/tools/ScrollPageTool.d.ts +1 -1
  222. package/dist/tools/ScrollPageTool.d.ts.map +1 -1
  223. package/dist/tools/ScrollPageTool.js +47 -4
  224. package/dist/tools/ScrollPageTool.js.map +1 -1
  225. package/dist/tools/WaitTool.js +1 -1
  226. package/dist/tools/WaitTool.js.map +1 -1
  227. package/dist/utils/MiscUtils.d.ts +2 -2
  228. package/dist/utils/MiscUtils.js +2 -2
  229. package/dist/utils/PlaywrightUtils.d.ts +26 -127
  230. package/dist/utils/PlaywrightUtils.d.ts.map +1 -1
  231. package/dist/utils/PlaywrightUtils.js +133 -935
  232. package/dist/utils/PlaywrightUtils.js.map +1 -1
  233. package/package.json +1 -1
  234. package/dist/assets/clickable-elements-tracker.js +0 -63
  235. package/dist/assets/zaru-eyes.html +0 -141
  236. package/dist/esm/assets/clickable-elements-tracker.js +0 -63
  237. package/dist/esm/assets/zaru-eyes.html +0 -141
  238. package/dist/esm/managers/TemplateInterpolator.d.ts +0 -19
  239. package/dist/esm/managers/TemplateInterpolator.d.ts.map +0 -1
  240. package/dist/esm/managers/TemplateInterpolator.js +0 -86
  241. package/dist/esm/managers/TemplateInterpolator.js.map +0 -1
  242. package/dist/esm/managers/ToolTipper.d.ts +0 -32
  243. package/dist/esm/managers/ToolTipper.d.ts.map +0 -1
  244. package/dist/esm/managers/ToolTipper.js +0 -229
  245. package/dist/esm/managers/ToolTipper.js.map +0 -1
  246. package/dist/esm/models/BrowserState.d.ts +0 -26
  247. package/dist/esm/models/BrowserState.d.ts.map +0 -1
  248. package/dist/esm/models/BrowserState.js +0 -3
  249. package/dist/esm/models/BrowserState.js.map +0 -1
  250. package/dist/esm/models/ResolverContext.d.ts +0 -7
  251. package/dist/esm/models/ResolverContext.d.ts.map +0 -1
  252. package/dist/esm/models/ResolverContext.js +0 -3
  253. package/dist/esm/models/ResolverContext.js.map +0 -1
  254. package/dist/esm/models/ToolTemplateDataSource.d.ts +0 -36
  255. package/dist/esm/models/ToolTemplateDataSource.d.ts.map +0 -1
  256. package/dist/esm/models/ToolTemplateDataSource.js +0 -3
  257. package/dist/esm/models/ToolTemplateDataSource.js.map +0 -1
  258. package/dist/esm/test.d.ts +0 -78
  259. package/dist/esm/test.d.ts.map +0 -1
  260. package/dist/esm/test.js +0 -423
  261. package/dist/esm/test.js.map +0 -1
  262. package/dist/esm/utils/TemplateInterpolator.d.ts +0 -29
  263. package/dist/esm/utils/TemplateInterpolator.d.ts.map +0 -1
  264. package/dist/esm/utils/TemplateInterpolator.js +0 -206
  265. package/dist/esm/utils/TemplateInterpolator.js.map +0 -1
  266. package/dist/managers/TemplateInterpolator.d.ts +0 -19
  267. package/dist/managers/TemplateInterpolator.d.ts.map +0 -1
  268. package/dist/managers/TemplateInterpolator.js +0 -86
  269. package/dist/managers/TemplateInterpolator.js.map +0 -1
  270. package/dist/managers/ToolTipper.d.ts +0 -32
  271. package/dist/managers/ToolTipper.d.ts.map +0 -1
  272. package/dist/managers/ToolTipper.js +0 -229
  273. package/dist/managers/ToolTipper.js.map +0 -1
  274. package/dist/models/BrowserState.d.ts +0 -26
  275. package/dist/models/BrowserState.d.ts.map +0 -1
  276. package/dist/models/BrowserState.js +0 -3
  277. package/dist/models/BrowserState.js.map +0 -1
  278. package/dist/models/ResolverContext.d.ts +0 -7
  279. package/dist/models/ResolverContext.d.ts.map +0 -1
  280. package/dist/models/ResolverContext.js +0 -3
  281. package/dist/models/ResolverContext.js.map +0 -1
  282. package/dist/models/ToolTemplateDataSource.d.ts +0 -36
  283. package/dist/models/ToolTemplateDataSource.d.ts.map +0 -1
  284. package/dist/models/ToolTemplateDataSource.js +0 -3
  285. package/dist/models/ToolTemplateDataSource.js.map +0 -1
  286. package/dist/test.d.ts +0 -78
  287. package/dist/test.d.ts.map +0 -1
  288. package/dist/test.js +0 -423
  289. package/dist/test.js.map +0 -1
  290. package/dist/tsconfig.esm.tsbuildinfo +0 -1
  291. package/dist/utils/TemplateInterpolator.d.ts +0 -29
  292. package/dist/utils/TemplateInterpolator.d.ts.map +0 -1
  293. package/dist/utils/TemplateInterpolator.js +0 -211
  294. package/dist/utils/TemplateInterpolator.js.map +0 -1
@@ -1,4 +1,31 @@
1
1
  (() => {
2
+ if (!window.__donobu) {
3
+ Object.defineProperty(window, '__donobu', {
4
+ value: {},
5
+ enumerable: false,
6
+ writable: true,
7
+ configurable: false,
8
+ });
9
+ }
10
+
11
+ if (!window.__donobu.controlPanelRegistered) {
12
+ Object.defineProperty(window.__donobu, 'controlPanelRegistered', {
13
+ value: true,
14
+ enumerable: false,
15
+ writable: false,
16
+ configurable: false,
17
+ });
18
+ }
19
+
20
+ if (!window.__donobu.nextState) {
21
+ Object.defineProperty(window.__donobu, 'nextState', {
22
+ value: null,
23
+ enumerable: false,
24
+ writable: true,
25
+ configurable: false,
26
+ });
27
+ }
28
+
2
29
  /**
3
30
  * Wait until document.body is available, then call `init()`.
4
31
  */
@@ -358,7 +385,7 @@
358
385
  isTransitioningToPause = false;
359
386
 
360
387
  // Expose next state so external script can pick it up
361
- window.donobuNextState = 'RESUMING';
388
+ window.__donobu.nextState = 'RESUMING';
362
389
 
363
390
  updateButtonStates();
364
391
  }
@@ -371,7 +398,7 @@
371
398
  isTransitioningToPause = true;
372
399
 
373
400
  // Expose next state
374
- window.donobuNextState = 'PAUSED';
401
+ window.__donobu.nextState = 'PAUSED';
375
402
 
376
403
  updateButtonStates();
377
404
  }
@@ -384,7 +411,7 @@
384
411
  isTransitioningToEnd = true;
385
412
 
386
413
  // Expose next state
387
- window.donobuNextState = 'SUCCESS';
414
+ window.__donobu.nextState = 'SUCCESS';
388
415
 
389
416
  updateButtonStates();
390
417
  }
@@ -14,6 +14,35 @@
14
14
  "additionalProperties": false,
15
15
  "required": ["targetId", "bindingName"]
16
16
  },
17
+ "BaseToolGptParameters": {
18
+ "description": "This interface is intended to be the base for all tool parameters that are generated by a GPT.",
19
+ "type": "object",
20
+ "properties": {
21
+ "rationale": {
22
+ "description": "The reason why this particular action is being taken. It MUST relate to the overall objective.",
23
+ "type": "string"
24
+ }
25
+ },
26
+ "additionalProperties": false,
27
+ "required": ["rationale"]
28
+ },
29
+ "RunAccessibilityTestToolCoreParameters": {
30
+ "type": "object",
31
+ "additionalProperties": false,
32
+ "required": [],
33
+ "properties": {}
34
+ },
35
+ "RunAccessibilityTestToolGptParameters": {
36
+ "type": "object",
37
+ "properties": {
38
+ "rationale": {
39
+ "description": "The reason why this particular action is being taken. It MUST relate to the overall objective.",
40
+ "type": "string"
41
+ }
42
+ },
43
+ "additionalProperties": false,
44
+ "required": ["rationale"]
45
+ },
17
46
  "ToolParameters": {
18
47
  "anyOf": [
19
48
  {
@@ -88,7 +117,7 @@
88
117
  "type": "object",
89
118
  "additionalProperties": false
90
119
  },
91
- "__@validatorSymbol@9457": {
120
+ "__@validatorSymbol@9578": {
92
121
  "description": "Used to mark validator functions so we can support both Zod and custom schemas.",
93
122
  "type": "boolean",
94
123
  "const": true
@@ -100,33 +129,21 @@
100
129
  "$ref": "#/definitions/JSONSchema7",
101
130
  "description": "The JSON Schema for the schema. It is passed to the providers."
102
131
  },
103
- "__@schemaSymbol@9462": {
132
+ "__@schemaSymbol@9583": {
104
133
  "description": "Used to mark schemas so we can support both Zod and custom schemas.",
105
134
  "type": "boolean",
106
135
  "const": true
107
136
  }
108
137
  },
109
138
  "required": [
110
- "__@schemaSymbol@9462",
111
- "__@validatorSymbol@9457",
139
+ "__@schemaSymbol@9583",
140
+ "__@validatorSymbol@9578",
112
141
  "_type",
113
142
  "jsonSchema"
114
143
  ]
115
144
  }
116
145
  ]
117
146
  },
118
- "BaseToolGptParameters": {
119
- "description": "This interface is intended to be the base for all tool parameters that are generated by a GPT.",
120
- "type": "object",
121
- "properties": {
122
- "rationale": {
123
- "description": "The reason why this particular action is being taken. It MUST relate to the overall objective.",
124
- "type": "string"
125
- }
126
- },
127
- "additionalProperties": false,
128
- "required": ["rationale"]
129
- },
130
147
  "ChooseSelectOptionToolCoreParameters": {
131
148
  "type": "object",
132
149
  "properties": {
@@ -555,23 +572,6 @@
555
572
  "additionalProperties": false,
556
573
  "required": ["rationale", "url"]
557
574
  },
558
- "RunAccessibilityTestToolCoreParameters": {
559
- "type": "object",
560
- "additionalProperties": false,
561
- "required": [],
562
- "properties": {}
563
- },
564
- "RunAccessibilityTestToolGptParameters": {
565
- "type": "object",
566
- "properties": {
567
- "rationale": {
568
- "description": "The reason why this particular action is being taken. It MUST relate to the overall objective.",
569
- "type": "string"
570
- }
571
- },
572
- "additionalProperties": false,
573
- "required": ["rationale"]
574
- },
575
575
  "ScrollPageToolCoreParameters": {
576
576
  "type": "object",
577
577
  "properties": {
@@ -1 +1 @@
1
- 1114
1
+ 1131
@@ -0,0 +1,351 @@
1
+ // interactive-elements-tracker.js
2
+ (() => {
3
+ // Store all elements deemed to be interactive
4
+ const interactiveElements = new Set();
5
+
6
+ // Original method references for monkey patching
7
+ const originalAddEventListener = EventTarget.prototype.addEventListener;
8
+ const originalRemoveEventListener = EventTarget.prototype.removeEventListener;
9
+
10
+ // Events that indicate interactivity
11
+ const pointerEvents = [
12
+ 'click',
13
+ 'mousedown',
14
+ 'pointerdown',
15
+ 'mouseup',
16
+ 'pointerup',
17
+ 'touchstart',
18
+ 'focus',
19
+ 'blur',
20
+ 'change',
21
+ 'input',
22
+ 'submit',
23
+ ];
24
+
25
+ // Helper function to check if an element is in shadow DOM
26
+ const isInShadowDOM = (element) => {
27
+ return (
28
+ element instanceof Element && element.getRootNode() instanceof ShadowRoot
29
+ );
30
+ };
31
+
32
+ // Function to check if an element has interactive CSS properties
33
+ const hasInteractiveStyling = (element) => {
34
+ if (!(element instanceof Element)) return false;
35
+
36
+ try {
37
+ const computedStyle = window.getComputedStyle(element);
38
+
39
+ // Check for style properties that suggest interactivity
40
+ return (
41
+ computedStyle.cursor === 'pointer' ||
42
+ computedStyle.cursor === 'hand' ||
43
+ element.getAttribute('role') === 'button' ||
44
+ element.getAttribute('role') === 'link' ||
45
+ element.getAttribute('aria-haspopup') === 'true' ||
46
+ element.getAttribute('tabindex') === '0' ||
47
+ element.getAttribute('contenteditable') === 'true'
48
+ );
49
+ } catch (error) {
50
+ return false; // Handle potential errors in computed style
51
+ }
52
+ };
53
+
54
+ // Function to check for React-specific attributes that suggest interactivity
55
+ const hasReactInteractiveProps = (element) => {
56
+ if (!(element instanceof Element)) return false;
57
+
58
+ try {
59
+ // Check for React event handler attributes and data attributes
60
+ const reactEventAttrs = [
61
+ 'data-donobu-interactable',
62
+ 'onClick',
63
+ 'onMouseDown',
64
+ 'onMouseUp',
65
+ 'onPointerDown',
66
+ 'onPointerUp',
67
+ 'onTouchStart',
68
+ 'onChange',
69
+ 'onInput',
70
+ 'onFocus',
71
+ 'onBlur',
72
+ 'onSubmit',
73
+ ];
74
+
75
+ // Check for React component CSS classes that suggest interactivity
76
+ const interactiveClasses = [
77
+ 'cursor-pointer',
78
+ 'hover:bg-', // Common Tailwind hover classes
79
+ 'active:bg-',
80
+ 'focus:outline-',
81
+ 'hover:text-',
82
+ ];
83
+
84
+ // Check for attributes
85
+ for (const attr of reactEventAttrs) {
86
+ if (
87
+ element.hasAttribute(attr) ||
88
+ element.getAttribute(attr.toLowerCase()) !== null ||
89
+ (element.dataset && attr in element.dataset)
90
+ ) {
91
+ return true;
92
+ }
93
+ }
94
+
95
+ // Check for class names suggesting interactivity
96
+ const className = element.className || '';
97
+ if (typeof className === 'string') {
98
+ for (const cls of interactiveClasses) {
99
+ if (className.includes(cls)) {
100
+ return true;
101
+ }
102
+ }
103
+ }
104
+
105
+ return false;
106
+ } catch (error) {
107
+ return false; // Handle any potential errors
108
+ }
109
+ };
110
+
111
+ // Monkey patch addEventListener to track elements with event listeners
112
+ EventTarget.prototype.addEventListener = function (type, listener, options) {
113
+ if (pointerEvents.includes(type) && this !== window && this !== document) {
114
+ interactiveElements.add(this);
115
+
116
+ // If this element is in shadow DOM, ensure it's accessible
117
+ if (isInShadowDOM(this)) {
118
+ try {
119
+ const shadowRoot = this.getRootNode();
120
+ if (shadowRoot.host) {
121
+ interactiveElements.add(shadowRoot.host);
122
+ }
123
+ } catch (error) {
124
+ // Ignore errors if getRootNode fails
125
+ }
126
+ }
127
+ }
128
+ return originalAddEventListener.call(this, type, listener, options);
129
+ };
130
+
131
+ // Restore original removeEventListener behavior
132
+ EventTarget.prototype.removeEventListener = function (
133
+ type,
134
+ listener,
135
+ options,
136
+ ) {
137
+ if (pointerEvents.includes(type) && this !== window && this !== document) {
138
+ interactiveElements.delete(this);
139
+ }
140
+ return originalRemoveEventListener.call(this, type, listener, options);
141
+ };
142
+
143
+ // Scan DOM for potentially interactive elements
144
+ const scanForInteractiveElements = () => {
145
+ try {
146
+ // Common interactive element selectors
147
+ const interactiveSelectors = [
148
+ 'a',
149
+ 'button',
150
+ 'input',
151
+ 'select',
152
+ 'textarea',
153
+ 'summary',
154
+ '[role="button"]',
155
+ '[role="link"]',
156
+ '[role="menuitem"]',
157
+ '[role="tab"]',
158
+ '[tabindex]',
159
+ '[contenteditable="true"]',
160
+ '[data-donobu-interactable]',
161
+ '.cursor-pointer',
162
+ ];
163
+
164
+ // Only proceed if document is available
165
+ if (document && document.body) {
166
+ // Query for potential interactive elements
167
+ const potentialElements = document.querySelectorAll(
168
+ interactiveSelectors.join(','),
169
+ );
170
+
171
+ potentialElements.forEach((element) => {
172
+ // Add element if it has interactive styling or React props
173
+ if (
174
+ hasInteractiveStyling(element) ||
175
+ hasReactInteractiveProps(element)
176
+ ) {
177
+ interactiveElements.add(element);
178
+ }
179
+ });
180
+
181
+ // Handle shadow DOM
182
+ document.querySelectorAll('*').forEach((element) => {
183
+ if (element.shadowRoot) {
184
+ try {
185
+ const shadowElements = element.shadowRoot.querySelectorAll(
186
+ interactiveSelectors.join(','),
187
+ );
188
+ shadowElements.forEach((shadowEl) => {
189
+ if (
190
+ hasInteractiveStyling(shadowEl) ||
191
+ hasReactInteractiveProps(shadowEl)
192
+ ) {
193
+ interactiveElements.add(shadowEl);
194
+ interactiveElements.add(element); // Add the host element as well
195
+ }
196
+ });
197
+ } catch (error) {
198
+ // Continue if there's an error with a particular shadow root
199
+ }
200
+ }
201
+ });
202
+ }
203
+ } catch (error) {
204
+ console.error('Error scanning for interactive elements:', error);
205
+ }
206
+ };
207
+
208
+ // Initialize MutationObserver safely
209
+ let observer = null;
210
+
211
+ const initializeMutationObserver = () => {
212
+ if (!document || !document.body) return;
213
+
214
+ try {
215
+ observer = new MutationObserver((mutations) => {
216
+ let shouldRescan = false;
217
+
218
+ for (const mutation of mutations) {
219
+ if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {
220
+ shouldRescan = true;
221
+ break;
222
+ }
223
+ }
224
+
225
+ if (shouldRescan) {
226
+ scanForInteractiveElements();
227
+ }
228
+ });
229
+
230
+ // Start observing the document body
231
+ observer.observe(document.body, {
232
+ childList: true,
233
+ subtree: true,
234
+ });
235
+ } catch (error) {
236
+ console.error('Error initializing MutationObserver:', error);
237
+ }
238
+ };
239
+
240
+ if (!window.__donobu) {
241
+ Object.defineProperty(window, '__donobu', {
242
+ value: {},
243
+ enumerable: false,
244
+ writable: true,
245
+ configurable: false,
246
+ });
247
+ }
248
+
249
+ // Add components without overwriting the namespace
250
+ if (!window.__donobu.getInteractiveElements) {
251
+ Object.defineProperty(window.__donobu, 'getInteractiveElements', {
252
+ value: () => {
253
+ // Trigger a scan to ensure we have the latest elements
254
+ scanForInteractiveElements();
255
+
256
+ const allInteractiveElements = [];
257
+
258
+ interactiveElements.forEach((element) => {
259
+ if (element instanceof Element) {
260
+ allInteractiveElements.push(element);
261
+
262
+ // Include shadow DOM elements
263
+ if (element.shadowRoot) {
264
+ try {
265
+ const shadowElements = Array.from(
266
+ element.shadowRoot.querySelectorAll('*'),
267
+ ).filter((el) => interactiveElements.has(el));
268
+
269
+ allInteractiveElements.push(...shadowElements);
270
+ } catch (error) {
271
+ // Continue if there's an error with a particular shadow element
272
+ }
273
+ }
274
+ }
275
+ });
276
+
277
+ return allInteractiveElements;
278
+ },
279
+ enumerable: false,
280
+ writable: false,
281
+ configurable: false,
282
+ });
283
+ }
284
+
285
+ if (!window.__donobu.debugInteractiveElement) {
286
+ Object.defineProperty(window.__donobu, 'debugInteractiveElement', {
287
+ value: (element) => {
288
+ if (!(element instanceof Element)) {
289
+ return { isInteractive: false, reason: 'Not a DOM element' };
290
+ }
291
+
292
+ const reasons = [];
293
+
294
+ if (hasInteractiveStyling(element)) {
295
+ reasons.push('Has interactive CSS styling');
296
+ }
297
+
298
+ if (hasReactInteractiveProps(element)) {
299
+ reasons.push('Has React interactive props or classes');
300
+ }
301
+
302
+ // Check common interactive elements
303
+ if (
304
+ element.tagName === 'A' ||
305
+ element.tagName === 'BUTTON' ||
306
+ element.tagName === 'INPUT' ||
307
+ element.tagName === 'SELECT'
308
+ ) {
309
+ reasons.push(`Is a ${element.tagName} element`);
310
+ }
311
+
312
+ // Check if element has an explicit event listener
313
+ if (interactiveElements.has(element)) {
314
+ reasons.push('Has registered event listener');
315
+ }
316
+
317
+ return {
318
+ isInteractive: reasons.length > 0,
319
+ reasons: reasons,
320
+ };
321
+ },
322
+ enumerable: false,
323
+ writable: false,
324
+ configurable: false,
325
+ });
326
+ }
327
+
328
+ // Initialize things safely after DOM content is loaded
329
+ const initialize = () => {
330
+ scanForInteractiveElements();
331
+ initializeMutationObserver();
332
+ };
333
+
334
+ // Set up a safer initialization approach
335
+ if (document.readyState === 'loading') {
336
+ document.addEventListener('DOMContentLoaded', initialize);
337
+ } else {
338
+ // DOM already ready, initialize now
339
+ initialize();
340
+ }
341
+
342
+ // Periodically scan for interactive elements (React/SPA behavior)
343
+ const rescanInterval = 2000; // milliseconds
344
+ setInterval(() => {
345
+ try {
346
+ scanForInteractiveElements();
347
+ } catch (error) {
348
+ console.error('Error during periodic scan:', error);
349
+ }
350
+ }, rescanInterval);
351
+ })();
@@ -1,16 +1,37 @@
1
1
  /**
2
2
  * Donobu script for tracking interactions with the current page. This scripts assumes the
3
3
  * following:
4
- * 1. There is an exposed binding to call back to Java named "donobuTrackInteraction".
5
- * 2. The smart-selector-generator.js script has defined the "donobuGenerateSmartSelectors"
4
+ * 1. There is an exposed binding to call back to NodeJS named "__donobuTrackInteraction".
5
+ * 2. The smart-selector-generator.js script has defined the "__donobu.generateSmartSelectors"
6
6
  * method on the window object.
7
7
  */
8
8
  (() => {
9
- if (window.donobuListenersRegistered) {
10
- return;
9
+ if (!window.__donobu) {
10
+ Object.defineProperty(window, '__donobu', {
11
+ value: {},
12
+ enumerable: false,
13
+ writable: true,
14
+ configurable: false,
15
+ });
11
16
  }
12
17
 
13
- window.donobuStartDragPosition = { x: 0, y: 0 };
18
+ if (!window.__donobu.interactionListenersRegistered) {
19
+ Object.defineProperty(window.__donobu, 'interactionListenersRegistered', {
20
+ value: true,
21
+ enumerable: false,
22
+ writable: false,
23
+ configurable: false,
24
+ });
25
+ }
26
+
27
+ if (!window.__donobu.startDragPosition) {
28
+ Object.defineProperty(window.__donobu, 'startDragPosition', {
29
+ value: { x: 0, y: 0 },
30
+ enumerable: false,
31
+ writable: true,
32
+ configurable: false,
33
+ });
34
+ }
14
35
 
15
36
  // Helper function to check if an event target is inside the Donobu control panel.
16
37
  const isDonobuControlPanelInteraction = (element) => {
@@ -40,20 +61,20 @@
40
61
  type: eventType,
41
62
  x: e.clientX,
42
63
  y: e.clientY,
43
- selectors: window.donobuGenerateSmartSelectors(e.target),
64
+ selectors: window.__donobu.generateSmartSelectors(e.target),
44
65
  timestamp: new Date().getTime(),
45
66
  };
46
67
 
47
68
  if (eventType === 'mousedown') {
48
- donobuStartDragPosition = { x: e.clientX, y: e.clientY };
69
+ window.__donobu.startDragPosition = { x: e.clientX, y: e.clientY };
49
70
  } else if (eventType === 'mouseup') {
50
71
  eventData.dragDistance = Math.sqrt(
51
- Math.pow(e.clientX - donobuStartDragPosition.x, 2) +
52
- Math.pow(e.clientY - donobuStartDragPosition.y, 2),
72
+ Math.pow(e.clientX - window.__donobu.startDragPosition.x, 2) +
73
+ Math.pow(e.clientY - window.__donobu.startDragPosition.y, 2),
53
74
  );
54
75
  }
55
76
 
56
- donobuTrackInteraction(eventData);
77
+ __donobuTrackInteraction(eventData);
57
78
  },
58
79
  true,
59
80
  );
@@ -70,7 +91,7 @@
70
91
  return;
71
92
  }
72
93
 
73
- donobuTrackInteraction({
94
+ __donobuTrackInteraction({
74
95
  type: eventType,
75
96
  key: e.key,
76
97
  keyCode: e.keyCode,
@@ -78,7 +99,7 @@
78
99
  ctrlKey: e.ctrlKey,
79
100
  metaKey: e.metaKey,
80
101
  shiftKey: e.shiftKey,
81
- selectors: window.donobuGenerateSmartSelectors(e.target),
102
+ selectors: window.__donobu.generateSmartSelectors(e.target),
82
103
  timestamp: new Date().getTime(),
83
104
  });
84
105
  },
@@ -98,7 +119,7 @@
98
119
 
99
120
  const eventData = {
100
121
  type: eventType,
101
- selectors: window.donobuGenerateSmartSelectors(e.target),
122
+ selectors: window.__donobu.generateSmartSelectors(e.target),
102
123
  timestamp: new Date().getTime(),
103
124
  };
104
125
 
@@ -115,7 +136,7 @@
115
136
  }
116
137
  }
117
138
 
118
- donobuTrackInteraction(eventData);
139
+ __donobuTrackInteraction(eventData);
119
140
  },
120
141
  true,
121
142
  );
@@ -127,7 +148,7 @@
127
148
  // window.addEventListener(
128
149
  // "scroll",
129
150
  // function (e) {
130
- // donobuTrackInteraction({
151
+ // __donobuTrackInteraction({
131
152
  // type: "scroll",
132
153
  // scrollX: window.scrollX,
133
154
  // scrollY: window.scrollY,
@@ -141,7 +162,7 @@
141
162
  // window.addEventListener(
142
163
  // "resize",
143
164
  // function (e) {
144
- // donobuTrackInteraction({
165
+ // __donobuTrackInteraction({
145
166
  // type: "resize",
146
167
  // width: window.innerWidth,
147
168
  // height: window.innerHeight,
@@ -168,10 +189,10 @@
168
189
  identifier: touch.identifier,
169
190
  }));
170
191
 
171
- donobuTrackInteraction({
192
+ __donobuTrackInteraction({
172
193
  type: eventType,
173
194
  touches: touches,
174
- selectors: window.donobuGenerateSmartSelectors(e.target),
195
+ selectors: window.__donobu.generateSmartSelectors(e.target),
175
196
  timestamp: new Date().getTime(),
176
197
  });
177
198
  },
@@ -179,6 +200,4 @@
179
200
  );
180
201
  },
181
202
  );
182
-
183
- window.donobuListenersRegistered = true;
184
203
  })();