donobu 2.23.0 → 2.23.2

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 (371) hide show
  1. package/dist/apis/FlowsApi.d.ts +1 -1
  2. package/dist/apis/FlowsApi.js +1 -1
  3. package/dist/apis/SpecialFlowsApi.js +5 -5
  4. package/dist/apis/SpecialFlowsApi.js.map +1 -1
  5. package/dist/assets/control-panel.js +1 -1
  6. package/dist/assets/generated/version +1 -1
  7. package/dist/assets/playwright-json-to-markdown.js +44 -16
  8. package/dist/esm/apis/FlowsApi.d.ts +1 -1
  9. package/dist/esm/apis/FlowsApi.js +1 -1
  10. package/dist/esm/apis/SpecialFlowsApi.js +5 -5
  11. package/dist/esm/apis/SpecialFlowsApi.js.map +1 -1
  12. package/dist/esm/assets/control-panel.js +1 -1
  13. package/dist/esm/assets/generated/version +1 -1
  14. package/dist/esm/assets/playwright-json-to-markdown.js +44 -16
  15. package/dist/esm/lib/testExtension.d.ts.map +1 -1
  16. package/dist/esm/lib/testExtension.js +2 -4
  17. package/dist/esm/lib/testExtension.js.map +1 -1
  18. package/dist/esm/lib/utils/SelfHealingDebugReporter.d.ts +69 -0
  19. package/dist/esm/lib/utils/SelfHealingDebugReporter.d.ts.map +1 -0
  20. package/dist/esm/lib/utils/SelfHealingDebugReporter.js +486 -0
  21. package/dist/esm/lib/utils/SelfHealingDebugReporter.js.map +1 -0
  22. package/dist/esm/lib/utils/SelfHealingTestUtils.d.ts +55 -0
  23. package/dist/esm/lib/utils/SelfHealingTestUtils.d.ts.map +1 -0
  24. package/dist/esm/lib/utils/SelfHealingTestUtils.js +335 -0
  25. package/dist/esm/lib/utils/SelfHealingTestUtils.js.map +1 -0
  26. package/dist/esm/lib/utils/VideoArtifactManager.d.ts +57 -0
  27. package/dist/esm/lib/utils/VideoArtifactManager.d.ts.map +1 -0
  28. package/dist/esm/lib/utils/VideoArtifactManager.js +343 -0
  29. package/dist/esm/lib/utils/VideoArtifactManager.js.map +1 -0
  30. package/dist/esm/lib/utils/selfHealing.js +1 -1
  31. package/dist/esm/lib/utils/selfHealing.js.map +1 -1
  32. package/dist/esm/managers/DonobuFlow.d.ts.map +1 -1
  33. package/dist/esm/managers/DonobuFlow.js +11 -12
  34. package/dist/esm/managers/DonobuFlow.js.map +1 -1
  35. package/dist/esm/managers/DonobuFlowsManager.d.ts +1 -1
  36. package/dist/esm/managers/DonobuFlowsManager.d.ts.map +1 -1
  37. package/dist/esm/managers/DonobuFlowsManager.js +11 -7
  38. package/dist/esm/managers/DonobuFlowsManager.js.map +1 -1
  39. package/dist/esm/models/CreateDonobuFlow.d.ts +5 -6
  40. package/dist/esm/models/CreateDonobuFlow.d.ts.map +1 -1
  41. package/dist/esm/models/CreateDonobuFlow.js +4 -2
  42. package/dist/esm/models/CreateDonobuFlow.js.map +1 -1
  43. package/dist/esm/models/FlowMetadata.d.ts +3 -6
  44. package/dist/esm/models/FlowMetadata.d.ts.map +1 -1
  45. package/dist/esm/models/FlowMetadata.js +3 -5
  46. package/dist/esm/models/FlowMetadata.js.map +1 -1
  47. package/dist/esm/persistence/DonobuSqliteDb.d.ts.map +1 -1
  48. package/dist/esm/persistence/DonobuSqliteDb.js +42 -0
  49. package/dist/esm/persistence/DonobuSqliteDb.js.map +1 -1
  50. package/dist/esm/tools/ReplayableInteraction.d.ts.map +1 -1
  51. package/dist/esm/tools/ReplayableInteraction.js +1 -3
  52. package/dist/esm/tools/ReplayableInteraction.js.map +1 -1
  53. package/dist/esm/tools/TriggerDonobuFlowTool.d.ts +14 -16
  54. package/dist/esm/tools/TriggerDonobuFlowTool.d.ts.map +1 -1
  55. package/dist/lib/testExtension.d.ts.map +1 -1
  56. package/dist/lib/testExtension.js +2 -4
  57. package/dist/lib/testExtension.js.map +1 -1
  58. package/dist/lib/utils/SelfHealingDebugReporter.d.ts +69 -0
  59. package/dist/lib/utils/SelfHealingDebugReporter.d.ts.map +1 -0
  60. package/dist/lib/utils/SelfHealingDebugReporter.js +486 -0
  61. package/dist/lib/utils/SelfHealingDebugReporter.js.map +1 -0
  62. package/dist/lib/utils/SelfHealingTestUtils.d.ts +55 -0
  63. package/dist/lib/utils/SelfHealingTestUtils.d.ts.map +1 -0
  64. package/dist/lib/utils/SelfHealingTestUtils.js +335 -0
  65. package/dist/lib/utils/SelfHealingTestUtils.js.map +1 -0
  66. package/dist/lib/utils/VideoArtifactManager.d.ts +57 -0
  67. package/dist/lib/utils/VideoArtifactManager.d.ts.map +1 -0
  68. package/dist/lib/utils/VideoArtifactManager.js +343 -0
  69. package/dist/lib/utils/VideoArtifactManager.js.map +1 -0
  70. package/dist/lib/utils/selfHealing.js +1 -1
  71. package/dist/lib/utils/selfHealing.js.map +1 -1
  72. package/dist/managers/DonobuFlow.d.ts.map +1 -1
  73. package/dist/managers/DonobuFlow.js +11 -12
  74. package/dist/managers/DonobuFlow.js.map +1 -1
  75. package/dist/managers/DonobuFlowsManager.d.ts +1 -1
  76. package/dist/managers/DonobuFlowsManager.d.ts.map +1 -1
  77. package/dist/managers/DonobuFlowsManager.js +11 -7
  78. package/dist/managers/DonobuFlowsManager.js.map +1 -1
  79. package/dist/models/CreateDonobuFlow.d.ts +5 -6
  80. package/dist/models/CreateDonobuFlow.d.ts.map +1 -1
  81. package/dist/models/CreateDonobuFlow.js +4 -2
  82. package/dist/models/CreateDonobuFlow.js.map +1 -1
  83. package/dist/models/FlowMetadata.d.ts +3 -6
  84. package/dist/models/FlowMetadata.d.ts.map +1 -1
  85. package/dist/models/FlowMetadata.js +3 -5
  86. package/dist/models/FlowMetadata.js.map +1 -1
  87. package/dist/persistence/DonobuSqliteDb.d.ts.map +1 -1
  88. package/dist/persistence/DonobuSqliteDb.js +42 -0
  89. package/dist/persistence/DonobuSqliteDb.js.map +1 -1
  90. package/dist/tools/ReplayableInteraction.d.ts.map +1 -1
  91. package/dist/tools/ReplayableInteraction.js +1 -3
  92. package/dist/tools/ReplayableInteraction.js.map +1 -1
  93. package/dist/tools/TriggerDonobuFlowTool.d.ts +14 -16
  94. package/dist/tools/TriggerDonobuFlowTool.d.ts.map +1 -1
  95. package/package.json +1 -1
  96. package/dist/apis/EnvironmentDataApi.d.ts +0 -26
  97. package/dist/apis/EnvironmentDataApi.d.ts.map +0 -1
  98. package/dist/apis/EnvironmentDataApi.js +0 -59
  99. package/dist/apis/EnvironmentDataApi.js.map +0 -1
  100. package/dist/assets/donobu-virtual-mouse.svg +0 -11
  101. package/dist/assets/donobu.css +0 -62
  102. package/dist/assets/generated/parameter-schemas.json +0 -2241
  103. package/dist/assets/record.umd.min.cjs +0 -10399
  104. package/dist/bindings/FocusPage.d.ts +0 -23
  105. package/dist/bindings/FocusPage.d.ts.map +0 -1
  106. package/dist/bindings/FocusPage.js +0 -20
  107. package/dist/bindings/FocusPage.js.map +0 -1
  108. package/dist/bindings/ToggleDonobuAnnotations.d.ts +0 -21
  109. package/dist/bindings/ToggleDonobuAnnotations.d.ts.map +0 -1
  110. package/dist/bindings/ToggleDonobuAnnotations.js +0 -51
  111. package/dist/bindings/ToggleDonobuAnnotations.js.map +0 -1
  112. package/dist/esm/apis/EnvironmentDataApi.d.ts +0 -26
  113. package/dist/esm/apis/EnvironmentDataApi.d.ts.map +0 -1
  114. package/dist/esm/apis/EnvironmentDataApi.js +0 -59
  115. package/dist/esm/apis/EnvironmentDataApi.js.map +0 -1
  116. package/dist/esm/assets/donobu-virtual-mouse.svg +0 -11
  117. package/dist/esm/assets/donobu.css +0 -62
  118. package/dist/esm/assets/generated/parameter-schemas.json +0 -2241
  119. package/dist/esm/assets/record.umd.min.cjs +0 -10399
  120. package/dist/esm/bindings/FocusPage.d.ts +0 -23
  121. package/dist/esm/bindings/FocusPage.d.ts.map +0 -1
  122. package/dist/esm/bindings/FocusPage.js +0 -20
  123. package/dist/esm/bindings/FocusPage.js.map +0 -1
  124. package/dist/esm/bindings/ToggleDonobuAnnotations.d.ts +0 -21
  125. package/dist/esm/bindings/ToggleDonobuAnnotations.d.ts.map +0 -1
  126. package/dist/esm/bindings/ToggleDonobuAnnotations.js +0 -51
  127. package/dist/esm/bindings/ToggleDonobuAnnotations.js.map +0 -1
  128. package/dist/esm/lib/constants.d.ts +0 -8
  129. package/dist/esm/lib/constants.d.ts.map +0 -1
  130. package/dist/esm/lib/constants.js +0 -14
  131. package/dist/esm/lib/constants.js.map +0 -1
  132. package/dist/esm/lib/fixtures/testExtension.d.ts +0 -10
  133. package/dist/esm/lib/fixtures/testExtension.d.ts.map +0 -1
  134. package/dist/esm/lib/fixtures/testExtension.js +0 -383
  135. package/dist/esm/lib/fixtures/testExtension.js.map +0 -1
  136. package/dist/esm/lib/types.d.ts +0 -106
  137. package/dist/esm/lib/types.d.ts.map +0 -1
  138. package/dist/esm/lib/types.js +0 -3
  139. package/dist/esm/lib/types.js.map +0 -1
  140. package/dist/esm/managers/EnvironmentDataManager.d.ts +0 -58
  141. package/dist/esm/managers/EnvironmentDataManager.d.ts.map +0 -1
  142. package/dist/esm/managers/EnvironmentDataManager.js +0 -134
  143. package/dist/esm/managers/EnvironmentDataManager.js.map +0 -1
  144. package/dist/esm/managers/ProjectStructureGenerator.d.ts +0 -62
  145. package/dist/esm/managers/ProjectStructureGenerator.d.ts.map +0 -1
  146. package/dist/esm/managers/ProjectStructureGenerator.js +0 -234
  147. package/dist/esm/managers/ProjectStructureGenerator.js.map +0 -1
  148. package/dist/esm/managers/TestFileUpdater.d.ts +0 -56
  149. package/dist/esm/managers/TestFileUpdater.d.ts.map +0 -1
  150. package/dist/esm/managers/TestFileUpdater.js +0 -224
  151. package/dist/esm/managers/TestFileUpdater.js.map +0 -1
  152. package/dist/esm/models/AskAiRequest.d.ts +0 -15
  153. package/dist/esm/models/AskAiRequest.d.ts.map +0 -1
  154. package/dist/esm/models/AskAiRequest.js +0 -3
  155. package/dist/esm/models/AskAiRequest.js.map +0 -1
  156. package/dist/esm/models/BaseToolGptParameters.d.ts +0 -10
  157. package/dist/esm/models/BaseToolGptParameters.d.ts.map +0 -1
  158. package/dist/esm/models/BaseToolGptParameters.js +0 -3
  159. package/dist/esm/models/BaseToolGptParameters.js.map +0 -1
  160. package/dist/esm/models/BrowserFramework.d.ts +0 -61
  161. package/dist/esm/models/BrowserFramework.d.ts.map +0 -1
  162. package/dist/esm/models/BrowserFramework.js +0 -339
  163. package/dist/esm/models/BrowserFramework.js.map +0 -1
  164. package/dist/esm/models/EnvironmentDatum.d.ts +0 -54
  165. package/dist/esm/models/EnvironmentDatum.d.ts.map +0 -1
  166. package/dist/esm/models/EnvironmentDatum.js +0 -57
  167. package/dist/esm/models/EnvironmentDatum.js.map +0 -1
  168. package/dist/esm/models/FlowsQuery.d.ts +0 -12
  169. package/dist/esm/models/FlowsQuery.d.ts.map +0 -1
  170. package/dist/esm/models/FlowsQuery.js +0 -3
  171. package/dist/esm/models/FlowsQuery.js.map +0 -1
  172. package/dist/esm/persistence/AgentsPersistence.d.ts +0 -12
  173. package/dist/esm/persistence/AgentsPersistence.d.ts.map +0 -1
  174. package/dist/esm/persistence/AgentsPersistence.js +0 -3
  175. package/dist/esm/persistence/AgentsPersistence.js.map +0 -1
  176. package/dist/esm/persistence/AgentsPersistenceSqlite.d.ts +0 -15
  177. package/dist/esm/persistence/AgentsPersistenceSqlite.d.ts.map +0 -1
  178. package/dist/esm/persistence/AgentsPersistenceSqlite.js +0 -50
  179. package/dist/esm/persistence/AgentsPersistenceSqlite.js.map +0 -1
  180. package/dist/esm/persistence/AgentsPersistenceVolatile.d.ts +0 -14
  181. package/dist/esm/persistence/AgentsPersistenceVolatile.d.ts.map +0 -1
  182. package/dist/esm/persistence/AgentsPersistenceVolatile.js +0 -26
  183. package/dist/esm/persistence/AgentsPersistenceVolatile.js.map +0 -1
  184. package/dist/esm/persistence/FlowsPersistence.d.ts +0 -104
  185. package/dist/esm/persistence/FlowsPersistence.d.ts.map +0 -1
  186. package/dist/esm/persistence/FlowsPersistence.js +0 -3
  187. package/dist/esm/persistence/FlowsPersistence.js.map +0 -1
  188. package/dist/esm/persistence/FlowsPersistenceAwsS3.d.ts +0 -75
  189. package/dist/esm/persistence/FlowsPersistenceAwsS3.d.ts.map +0 -1
  190. package/dist/esm/persistence/FlowsPersistenceAwsS3.js +0 -525
  191. package/dist/esm/persistence/FlowsPersistenceAwsS3.js.map +0 -1
  192. package/dist/esm/persistence/FlowsPersistenceFactory.d.ts +0 -10
  193. package/dist/esm/persistence/FlowsPersistenceFactory.d.ts.map +0 -1
  194. package/dist/esm/persistence/FlowsPersistenceFactory.js +0 -3
  195. package/dist/esm/persistence/FlowsPersistenceFactory.js.map +0 -1
  196. package/dist/esm/persistence/FlowsPersistenceFactoryImpl.d.ts +0 -57
  197. package/dist/esm/persistence/FlowsPersistenceFactoryImpl.d.ts.map +0 -1
  198. package/dist/esm/persistence/FlowsPersistenceFactoryImpl.js +0 -235
  199. package/dist/esm/persistence/FlowsPersistenceFactoryImpl.js.map +0 -1
  200. package/dist/esm/persistence/FlowsPersistenceFactoryPreset.d.ts +0 -13
  201. package/dist/esm/persistence/FlowsPersistenceFactoryPreset.d.ts.map +0 -1
  202. package/dist/esm/persistence/FlowsPersistenceFactoryPreset.js +0 -24
  203. package/dist/esm/persistence/FlowsPersistenceFactoryPreset.js.map +0 -1
  204. package/dist/esm/persistence/FlowsPersistenceFilesystem.d.ts +0 -69
  205. package/dist/esm/persistence/FlowsPersistenceFilesystem.d.ts.map +0 -1
  206. package/dist/esm/persistence/FlowsPersistenceFilesystem.js +0 -381
  207. package/dist/esm/persistence/FlowsPersistenceFilesystem.js.map +0 -1
  208. package/dist/esm/persistence/FlowsPersistenceGoogleCloudStorage.d.ts +0 -75
  209. package/dist/esm/persistence/FlowsPersistenceGoogleCloudStorage.d.ts.map +0 -1
  210. package/dist/esm/persistence/FlowsPersistenceGoogleCloudStorage.js +0 -485
  211. package/dist/esm/persistence/FlowsPersistenceGoogleCloudStorage.js.map +0 -1
  212. package/dist/esm/persistence/FlowsPersistenceSqlite.d.ts +0 -44
  213. package/dist/esm/persistence/FlowsPersistenceSqlite.d.ts.map +0 -1
  214. package/dist/esm/persistence/FlowsPersistenceSqlite.js +0 -264
  215. package/dist/esm/persistence/FlowsPersistenceSqlite.js.map +0 -1
  216. package/dist/esm/persistence/FlowsPersistenceSupabase.d.ts +0 -44
  217. package/dist/esm/persistence/FlowsPersistenceSupabase.d.ts.map +0 -1
  218. package/dist/esm/persistence/FlowsPersistenceSupabase.js +0 -262
  219. package/dist/esm/persistence/FlowsPersistenceSupabase.js.map +0 -1
  220. package/dist/esm/persistence/FlowsPersistenceVolatile.d.ts +0 -41
  221. package/dist/esm/persistence/FlowsPersistenceVolatile.d.ts.map +0 -1
  222. package/dist/esm/persistence/FlowsPersistenceVolatile.js +0 -171
  223. package/dist/esm/persistence/FlowsPersistenceVolatile.js.map +0 -1
  224. package/dist/esm/persistence/GptConfigsPersistence.d.ts +0 -12
  225. package/dist/esm/persistence/GptConfigsPersistence.d.ts.map +0 -1
  226. package/dist/esm/persistence/GptConfigsPersistence.js +0 -3
  227. package/dist/esm/persistence/GptConfigsPersistence.js.map +0 -1
  228. package/dist/esm/persistence/GptConfigsPersistenceSqlite.d.ts +0 -13
  229. package/dist/esm/persistence/GptConfigsPersistenceSqlite.d.ts.map +0 -1
  230. package/dist/esm/persistence/GptConfigsPersistenceSqlite.js +0 -35
  231. package/dist/esm/persistence/GptConfigsPersistenceSqlite.js.map +0 -1
  232. package/dist/esm/persistence/GptConfigsPersistenceVolatile.d.ts +0 -15
  233. package/dist/esm/persistence/GptConfigsPersistenceVolatile.d.ts.map +0 -1
  234. package/dist/esm/persistence/GptConfigsPersistenceVolatile.js +0 -31
  235. package/dist/esm/persistence/GptConfigsPersistenceVolatile.js.map +0 -1
  236. package/dist/esm/playwrightTestExtensions.d.ts +0 -155
  237. package/dist/esm/playwrightTestExtensions.d.ts.map +0 -1
  238. package/dist/esm/playwrightTestExtensions.js +0 -688
  239. package/dist/esm/playwrightTestExtensions.js.map +0 -1
  240. package/dist/esm/utils/ToolsPluginsLoader.d.ts +0 -52
  241. package/dist/esm/utils/ToolsPluginsLoader.d.ts.map +0 -1
  242. package/dist/esm/utils/ToolsPluginsLoader.js +0 -301
  243. package/dist/esm/utils/ToolsPluginsLoader.js.map +0 -1
  244. package/dist/lib/autoTest.d.ts +0 -2
  245. package/dist/lib/autoTest.d.ts.map +0 -1
  246. package/dist/lib/autoTest.js +0 -17
  247. package/dist/lib/autoTest.js.map +0 -1
  248. package/dist/lib/constants.d.ts +0 -8
  249. package/dist/lib/constants.d.ts.map +0 -1
  250. package/dist/lib/constants.js +0 -14
  251. package/dist/lib/constants.js.map +0 -1
  252. package/dist/lib/fixtures/testExtension.d.ts +0 -10
  253. package/dist/lib/fixtures/testExtension.d.ts.map +0 -1
  254. package/dist/lib/fixtures/testExtension.js +0 -383
  255. package/dist/lib/fixtures/testExtension.js.map +0 -1
  256. package/dist/lib/types.d.ts +0 -106
  257. package/dist/lib/types.d.ts.map +0 -1
  258. package/dist/lib/types.js +0 -3
  259. package/dist/lib/types.js.map +0 -1
  260. package/dist/managers/EnvironmentDataManager.d.ts +0 -58
  261. package/dist/managers/EnvironmentDataManager.d.ts.map +0 -1
  262. package/dist/managers/EnvironmentDataManager.js +0 -134
  263. package/dist/managers/EnvironmentDataManager.js.map +0 -1
  264. package/dist/managers/ProjectStructureGenerator.d.ts +0 -62
  265. package/dist/managers/ProjectStructureGenerator.d.ts.map +0 -1
  266. package/dist/managers/ProjectStructureGenerator.js +0 -234
  267. package/dist/managers/ProjectStructureGenerator.js.map +0 -1
  268. package/dist/managers/TestFileUpdater.d.ts +0 -56
  269. package/dist/managers/TestFileUpdater.d.ts.map +0 -1
  270. package/dist/managers/TestFileUpdater.js +0 -224
  271. package/dist/managers/TestFileUpdater.js.map +0 -1
  272. package/dist/models/AskAiRequest.d.ts +0 -15
  273. package/dist/models/AskAiRequest.d.ts.map +0 -1
  274. package/dist/models/AskAiRequest.js +0 -3
  275. package/dist/models/AskAiRequest.js.map +0 -1
  276. package/dist/models/BaseToolGptParameters.d.ts +0 -10
  277. package/dist/models/BaseToolGptParameters.d.ts.map +0 -1
  278. package/dist/models/BaseToolGptParameters.js +0 -3
  279. package/dist/models/BaseToolGptParameters.js.map +0 -1
  280. package/dist/models/BrowserFramework.d.ts +0 -51
  281. package/dist/models/BrowserFramework.d.ts.map +0 -1
  282. package/dist/models/BrowserFramework.js +0 -364
  283. package/dist/models/BrowserFramework.js.map +0 -1
  284. package/dist/models/EnvironmentDatum.d.ts +0 -54
  285. package/dist/models/EnvironmentDatum.d.ts.map +0 -1
  286. package/dist/models/EnvironmentDatum.js +0 -57
  287. package/dist/models/EnvironmentDatum.js.map +0 -1
  288. package/dist/models/FlowsQuery.d.ts +0 -12
  289. package/dist/models/FlowsQuery.d.ts.map +0 -1
  290. package/dist/models/FlowsQuery.js +0 -3
  291. package/dist/models/FlowsQuery.js.map +0 -1
  292. package/dist/persistence/AgentsPersistence.d.ts +0 -12
  293. package/dist/persistence/AgentsPersistence.d.ts.map +0 -1
  294. package/dist/persistence/AgentsPersistence.js +0 -3
  295. package/dist/persistence/AgentsPersistence.js.map +0 -1
  296. package/dist/persistence/AgentsPersistenceSqlite.d.ts +0 -15
  297. package/dist/persistence/AgentsPersistenceSqlite.d.ts.map +0 -1
  298. package/dist/persistence/AgentsPersistenceSqlite.js +0 -50
  299. package/dist/persistence/AgentsPersistenceSqlite.js.map +0 -1
  300. package/dist/persistence/AgentsPersistenceVolatile.d.ts +0 -14
  301. package/dist/persistence/AgentsPersistenceVolatile.d.ts.map +0 -1
  302. package/dist/persistence/AgentsPersistenceVolatile.js +0 -26
  303. package/dist/persistence/AgentsPersistenceVolatile.js.map +0 -1
  304. package/dist/persistence/FlowsPersistence.d.ts +0 -104
  305. package/dist/persistence/FlowsPersistence.d.ts.map +0 -1
  306. package/dist/persistence/FlowsPersistence.js +0 -3
  307. package/dist/persistence/FlowsPersistence.js.map +0 -1
  308. package/dist/persistence/FlowsPersistenceAwsS3.d.ts +0 -75
  309. package/dist/persistence/FlowsPersistenceAwsS3.d.ts.map +0 -1
  310. package/dist/persistence/FlowsPersistenceAwsS3.js +0 -525
  311. package/dist/persistence/FlowsPersistenceAwsS3.js.map +0 -1
  312. package/dist/persistence/FlowsPersistenceFactory.d.ts +0 -10
  313. package/dist/persistence/FlowsPersistenceFactory.d.ts.map +0 -1
  314. package/dist/persistence/FlowsPersistenceFactory.js +0 -3
  315. package/dist/persistence/FlowsPersistenceFactory.js.map +0 -1
  316. package/dist/persistence/FlowsPersistenceFactoryImpl.d.ts +0 -57
  317. package/dist/persistence/FlowsPersistenceFactoryImpl.d.ts.map +0 -1
  318. package/dist/persistence/FlowsPersistenceFactoryImpl.js +0 -235
  319. package/dist/persistence/FlowsPersistenceFactoryImpl.js.map +0 -1
  320. package/dist/persistence/FlowsPersistenceFactoryPreset.d.ts +0 -13
  321. package/dist/persistence/FlowsPersistenceFactoryPreset.d.ts.map +0 -1
  322. package/dist/persistence/FlowsPersistenceFactoryPreset.js +0 -24
  323. package/dist/persistence/FlowsPersistenceFactoryPreset.js.map +0 -1
  324. package/dist/persistence/FlowsPersistenceFilesystem.d.ts +0 -69
  325. package/dist/persistence/FlowsPersistenceFilesystem.d.ts.map +0 -1
  326. package/dist/persistence/FlowsPersistenceFilesystem.js +0 -381
  327. package/dist/persistence/FlowsPersistenceFilesystem.js.map +0 -1
  328. package/dist/persistence/FlowsPersistenceGoogleCloudStorage.d.ts +0 -75
  329. package/dist/persistence/FlowsPersistenceGoogleCloudStorage.d.ts.map +0 -1
  330. package/dist/persistence/FlowsPersistenceGoogleCloudStorage.js +0 -485
  331. package/dist/persistence/FlowsPersistenceGoogleCloudStorage.js.map +0 -1
  332. package/dist/persistence/FlowsPersistenceSqlite.d.ts +0 -44
  333. package/dist/persistence/FlowsPersistenceSqlite.d.ts.map +0 -1
  334. package/dist/persistence/FlowsPersistenceSqlite.js +0 -264
  335. package/dist/persistence/FlowsPersistenceSqlite.js.map +0 -1
  336. package/dist/persistence/FlowsPersistenceSupabase.d.ts +0 -44
  337. package/dist/persistence/FlowsPersistenceSupabase.d.ts.map +0 -1
  338. package/dist/persistence/FlowsPersistenceSupabase.js +0 -262
  339. package/dist/persistence/FlowsPersistenceSupabase.js.map +0 -1
  340. package/dist/persistence/FlowsPersistenceVolatile.d.ts +0 -41
  341. package/dist/persistence/FlowsPersistenceVolatile.d.ts.map +0 -1
  342. package/dist/persistence/FlowsPersistenceVolatile.js +0 -171
  343. package/dist/persistence/FlowsPersistenceVolatile.js.map +0 -1
  344. package/dist/persistence/GptConfigsPersistence.d.ts +0 -12
  345. package/dist/persistence/GptConfigsPersistence.d.ts.map +0 -1
  346. package/dist/persistence/GptConfigsPersistence.js +0 -3
  347. package/dist/persistence/GptConfigsPersistence.js.map +0 -1
  348. package/dist/persistence/GptConfigsPersistenceSqlite.d.ts +0 -13
  349. package/dist/persistence/GptConfigsPersistenceSqlite.d.ts.map +0 -1
  350. package/dist/persistence/GptConfigsPersistenceSqlite.js +0 -35
  351. package/dist/persistence/GptConfigsPersistenceSqlite.js.map +0 -1
  352. package/dist/persistence/GptConfigsPersistenceVolatile.d.ts +0 -15
  353. package/dist/persistence/GptConfigsPersistenceVolatile.d.ts.map +0 -1
  354. package/dist/persistence/GptConfigsPersistenceVolatile.js +0 -31
  355. package/dist/persistence/GptConfigsPersistenceVolatile.js.map +0 -1
  356. package/dist/playwrightTestExtensions.d.ts +0 -155
  357. package/dist/playwrightTestExtensions.d.ts.map +0 -1
  358. package/dist/playwrightTestExtensions.js +0 -688
  359. package/dist/playwrightTestExtensions.js.map +0 -1
  360. package/dist/tools/CreatePageObjectModel.d.ts +0 -16
  361. package/dist/tools/CreatePageObjectModel.d.ts.map +0 -1
  362. package/dist/tools/CreatePageObjectModel.js +0 -33
  363. package/dist/tools/CreatePageObjectModel.js.map +0 -1
  364. package/dist/utils/ToolsPluginsLoader.d.ts +0 -52
  365. package/dist/utils/ToolsPluginsLoader.d.ts.map +0 -1
  366. package/dist/utils/ToolsPluginsLoader.js +0 -301
  367. package/dist/utils/ToolsPluginsLoader.js.map +0 -1
  368. /package/dist/utils/{jsonSchemaUtils.d.ts → JsonSchemaUtils.d.ts} +0 -0
  369. /package/dist/utils/{jsonSchemaUtils.d.ts.map → JsonSchemaUtils.d.ts.map} +0 -0
  370. /package/dist/utils/{jsonSchemaUtils.js → JsonSchemaUtils.js} +0 -0
  371. /package/dist/utils/{jsonSchemaUtils.js.map → JsonSchemaUtils.js.map} +0 -0
@@ -1,688 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.test = void 0;
18
- exports.getOrCreateDonobuStack = getOrCreateDonobuStack;
19
- exports.getOrCreateDefaultGptClient = getOrCreateDefaultGptClient;
20
- exports.getBrowserStorageState = getBrowserStorageState;
21
- exports.getBrowserStorageStateFixture = getBrowserStorageStateFixture;
22
- exports.anthropicClient = anthropicClient;
23
- exports.anthropicClientFixture = anthropicClientFixture;
24
- exports.anthropicAwsBedrockClient = anthropicAwsBedrockClient;
25
- exports.anthropicAwsBedrockClientFixture = anthropicAwsBedrockClientFixture;
26
- exports.googleGeminiClient = googleGeminiClient;
27
- exports.googleGeminiClientFixture = googleGeminiClientFixture;
28
- exports.openAiClient = openAiClient;
29
- exports.openAiClientFixture = openAiClientFixture;
30
- exports.vercelAiClientFixture = vercelAiClientFixture;
31
- exports.createGptClient = createGptClient;
32
- exports.gptClientFixture = gptClientFixture;
33
- /**
34
- * This code extends the Playwright Page object and test fixture with
35
- * test-related Donobu methods.
36
- */
37
- const uuid_1 = require("uuid");
38
- const test_1 = require("@playwright/test");
39
- const RequestContextHolder_1 = require("./managers/RequestContextHolder");
40
- const ToolManager_1 = require("./managers/ToolManager");
41
- const InteractionVisualizer_1 = require("./managers/InteractionVisualizer");
42
- const PlaywrightUtils_1 = require("./utils/PlaywrightUtils");
43
- const MiscUtils_1 = require("./utils/MiscUtils");
44
- const DonobuDeploymentEnvironment_1 = require("./models/DonobuDeploymentEnvironment");
45
- const AnalyzePageTextTool_1 = require("./tools/AnalyzePageTextTool");
46
- const AssertTool_1 = require("./tools/AssertTool");
47
- const GptClient_1 = require("./clients/GptClient");
48
- const ChooseSelectOptionTool_1 = require("./tools/ChooseSelectOptionTool");
49
- const InputRandomizedEmailAddressTool_1 = require("./tools/InputRandomizedEmailAddressTool");
50
- const InputTextTool_1 = require("./tools/InputTextTool");
51
- const PressKeyTool_1 = require("./tools/PressKeyTool");
52
- const ScrollPageTool_1 = require("./tools/ScrollPageTool");
53
- const HoverOverElementTool_1 = require("./tools/HoverOverElementTool");
54
- const GptClientFactory_1 = require("./clients/GptClientFactory");
55
- const ClickTool_1 = require("./tools/ClickTool");
56
- const VercelAiGptClient_1 = require("./clients/VercelAiGptClient");
57
- const AssertPageTextTool_1 = require("./tools/AssertPageTextTool");
58
- const GoToWebpageTool_1 = require("./tools/GoToWebpageTool");
59
- const DonobuStack_1 = require("./managers/DonobuStack");
60
- const DonobuFlow_1 = require("./managers/DonobuFlow");
61
- const Logger_1 = require("./utils/Logger");
62
- const envVars_1 = require("./envVars");
63
- const TestFileUpdater_1 = require("./managers/TestFileUpdater");
64
- const PageInspector_1 = require("./managers/PageInspector");
65
- const ChangeWebBrowserTabTool_1 = require("./tools/ChangeWebBrowserTabTool");
66
- const CreateBrowserCookieReportTool_1 = require("./tools/CreateBrowserCookieReportTool");
67
- const RunAccessibilityTestTool_1 = require("./tools/RunAccessibilityTestTool");
68
- const ControlPanel_1 = require("./managers/ControlPanel");
69
- const EnvPersistenceVolatile_1 = require("./persistence/env/EnvPersistenceVolatile");
70
- const DonobuFlowsManager_1 = require("./managers/DonobuFlowsManager");
71
- const PLACEHOLDER_FLOW_URL = 'https://example.com';
72
- const DEFAULT_GPT_MODEL_FOR_PLATFORM = {
73
- ANTHROPIC: process.env[envVars_1.ENV_VAR_NAMES.ANTHROPIC_MODEL_NAME] ||
74
- 'claude-3-5-sonnet-latest',
75
- ANTHROPIC_AWS_BEDROCK: process.env[envVars_1.ENV_VAR_NAMES.AWS_BEDROCK_MODEL_NAME] ||
76
- // TODO: This value needs to be updated.
77
- undefined,
78
- GOOGLE_GEMINI: process.env[envVars_1.ENV_VAR_NAMES.GOOGLE_GENERATIVE_AI_MODEL_NAME] ||
79
- 'gemini-2.0-flash',
80
- OPENAI: process.env[envVars_1.ENV_VAR_NAMES.OPENAI_API_MODEL_NAME] || 'gpt-4o',
81
- };
82
- let donobuStack = undefined;
83
- let defaultGptClient = undefined;
84
- /**
85
- * Self-heals a test that has failed by creating and running a new autonomous
86
- * flow using the same objective of the failed test. If the new flow is
87
- * successful, it uses the TestFileUpdater to update the specific failed test case
88
- * in the original test file.
89
- *
90
- * @param testInfo The test information object that contains the failed test's
91
- * annotations and other metadata.
92
- * @param donobuFlowMetadata The metadata of the flow that is being self-healed.
93
- */
94
- async function selfHeal(gptClient, testInfo, donobuFlowMetadata) {
95
- if (!donobuFlowMetadata || !donobuFlowMetadata.overallObjective) {
96
- // We cannot self-heal without an flow metadata or objective.
97
- Logger_1.appLogger.warn('Will not self-heal due to no test flow metadata and/or objective being provided.');
98
- return;
99
- }
100
- try {
101
- const donobu = await getOrCreateDonobuStack();
102
- const selfHealTimeoutMs = 300000; // 5 minutes
103
- testInfo.setTimeout(testInfo.timeout + selfHealTimeoutMs);
104
- Logger_1.appLogger.info(`Extending the test timeout ${selfHealTimeoutMs}ms for self-healing...`);
105
- Logger_1.appLogger.info('Attempting to self-heal by creating a new autonomous flow...');
106
- const newFlow = await donobu.flowsManager.createFlow({
107
- targetWebsite: donobuFlowMetadata.targetWebsite,
108
- overallObjective: donobuFlowMetadata.overallObjective,
109
- name: donobuFlowMetadata.name ?? undefined,
110
- browser: donobuFlowMetadata.browser,
111
- envVars: donobuFlowMetadata.envVars ?? undefined,
112
- callbackUrl: undefined,
113
- customTools: donobuFlowMetadata.customTools ?? undefined,
114
- maxIterations: 25,
115
- gptConfigNameOverride: undefined,
116
- defaultMessageDuration: undefined,
117
- initialRunMode: 'AUTONOMOUS',
118
- isControlPanelEnabled: false,
119
- allowedTools: undefined,
120
- toolCallsOnStart: undefined,
121
- resultJsonSchema: undefined,
122
- }, gptClient);
123
- Logger_1.appLogger.info('Running the new autonomous flow...');
124
- await newFlow.job;
125
- if (newFlow.donobuFlow.metadata.state === 'SUCCESS') {
126
- Logger_1.appLogger.info('Self-heal succeeded! The new autonomous flow completed successfully. Generating revised test...');
127
- const newTestCode = await donobu.flowsManager.getFlowAsPlaywrightScript(newFlow.donobuFlow.metadata.id);
128
- // Save the fixed test as an attachment
129
- await testInfo.attach('fixed-test.ts', {
130
- body: newTestCode,
131
- contentType: 'application/typescript',
132
- });
133
- testInfo.annotations.push({
134
- type: 'self-healed',
135
- });
136
- // Get the failed test file path
137
- const testFilePath = testInfo.file;
138
- if (testFilePath) {
139
- try {
140
- Logger_1.appLogger.info(`Updating test file: ${testFilePath}`);
141
- const updateSuccess = await TestFileUpdater_1.TestFileUpdater.updateTestCase(testFilePath, testInfo.title, newTestCode);
142
- if (updateSuccess) {
143
- Logger_1.appLogger.info(`Successfully updated test file with fixed test code.`);
144
- }
145
- else {
146
- Logger_1.appLogger.warn(`Test file update did not complete successfully.`);
147
- }
148
- }
149
- catch (fileUpdateError) {
150
- Logger_1.appLogger.error(`Error updating test file ${testFilePath}:`, fileUpdateError);
151
- }
152
- }
153
- else {
154
- Logger_1.appLogger.warn('Could not update test file: test file path is not available.');
155
- }
156
- }
157
- else {
158
- Logger_1.appLogger.error('Self-heal failed! The new autonomous flow did not complete successfully.');
159
- }
160
- }
161
- catch (error) {
162
- Logger_1.appLogger.error('Error creating new flow when attempting to self heal:', error);
163
- return;
164
- }
165
- }
166
- /**
167
- * Creates a snapshot of process.env as a Record<string, string>
168
- */
169
- function getEnvSnapshot() {
170
- const envRecord = {};
171
- Object.entries(process.env).forEach(([key, value]) => {
172
- if (value !== undefined) {
173
- envRecord[key] = value;
174
- }
175
- });
176
- return envRecord;
177
- }
178
- async function getOrCreateDonobuStack() {
179
- if (!donobuStack) {
180
- donobuStack = await (0, DonobuStack_1.setupDonobuStack)(DonobuDeploymentEnvironment_1.DonobuDeploymentEnvironment.LOCAL, new RequestContextHolder_1.RequestContextHolder(), new EnvPersistenceVolatile_1.EnvPersistenceVolatile(getEnvSnapshot()));
181
- return donobuStack;
182
- }
183
- else {
184
- return donobuStack;
185
- }
186
- }
187
- async function getOrCreateDefaultGptClient() {
188
- if (!defaultGptClient) {
189
- defaultGptClient = await createGptClient();
190
- return defaultGptClient;
191
- }
192
- else {
193
- return defaultGptClient;
194
- }
195
- }
196
- async function getBrowserStorageState(flowIdOrName) {
197
- return (await getOrCreateDonobuStack()).flowsManager.getBrowserStorageState(flowIdOrName);
198
- }
199
- function getBrowserStorageStateFixture(flowIdOrName) {
200
- return async ({}, use) => {
201
- const storage = await (await getOrCreateDonobuStack()).flowsManager.getBrowserStorageState(flowIdOrName);
202
- await use(storage);
203
- };
204
- }
205
- async function anthropicClient(modelName, apiKey) {
206
- const divinedApiKey = apiKey || process.env[envVars_1.ENV_VAR_NAMES.ANTHROPIC_API_KEY];
207
- if (!divinedApiKey) {
208
- throw new Error('An API key is required to use the Anthropic API. Please provide one as an argument or set it using the ANTHROPIC_API_KEY environment variable.');
209
- }
210
- return GptClientFactory_1.GptClientFactory.createFromGptConfig({
211
- type: 'ANTHROPIC',
212
- apiKey: divinedApiKey,
213
- modelName: modelName,
214
- });
215
- }
216
- function anthropicClientFixture(modelName, apiKey) {
217
- return async ({}, use) => {
218
- const client = await anthropicClient(modelName, apiKey);
219
- await use(client);
220
- };
221
- }
222
- async function anthropicAwsBedrockClient(modelName, region, accessKeyId, secretAccessKey) {
223
- const divinedAccessKeyId = accessKeyId || process.env[envVars_1.ENV_VAR_NAMES.AWS_ACCESS_KEY_ID];
224
- const divinedSecretAccessKey = secretAccessKey || process.env[envVars_1.ENV_VAR_NAMES.AWS_SECRET_ACCESS_KEY];
225
- if (!divinedAccessKeyId || !divinedSecretAccessKey) {
226
- throw new Error('AWS access key ID and secret access key are required to use the Anthropic AWS Bedrock API. Please provide them as arguments or set them using the AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables.');
227
- }
228
- return GptClientFactory_1.GptClientFactory.createFromGptConfig({
229
- type: 'ANTHROPIC_AWS_BEDROCK',
230
- region: region,
231
- modelName: modelName,
232
- accessKeyId: divinedAccessKeyId,
233
- secretAccessKey: divinedSecretAccessKey,
234
- });
235
- }
236
- function anthropicAwsBedrockClientFixture(modelName, region, accessKeyId, secretAccessKey) {
237
- return async ({}, use) => {
238
- const client = await anthropicAwsBedrockClient(modelName, region, accessKeyId, secretAccessKey);
239
- await use(client);
240
- };
241
- }
242
- async function googleGeminiClient(modelName, apiKey) {
243
- const divinedApiKey = apiKey || process.env[envVars_1.ENV_VAR_NAMES.GOOGLE_GENERATIVE_AI_API_KEY];
244
- if (!divinedApiKey) {
245
- throw new Error('An API key is required to use the Google Gemini API. Please provide one as an argument or set it using the GOOGLE_GENERATIVE_AI_API_KEY environment variable.');
246
- }
247
- return GptClientFactory_1.GptClientFactory.createFromGptConfig({
248
- type: 'GOOGLE_GEMINI',
249
- apiKey: divinedApiKey,
250
- modelName: modelName,
251
- });
252
- }
253
- function googleGeminiClientFixture(modelName, apiKey) {
254
- return async ({}, use) => {
255
- const client = await googleGeminiClient(modelName, apiKey);
256
- await use(client);
257
- };
258
- }
259
- async function openAiClient(modelName, apiKey) {
260
- const divinedApiKey = apiKey || process.env[envVars_1.ENV_VAR_NAMES.OPENAI_API_KEY];
261
- if (!divinedApiKey) {
262
- throw new Error('An API key is required to use the OpenAI API. Please provide one as an argument or set it using the OPENAI_API_KEY environment variable.');
263
- }
264
- return GptClientFactory_1.GptClientFactory.createFromGptConfig({
265
- type: 'OPENAI',
266
- apiKey: divinedApiKey,
267
- modelName: modelName,
268
- });
269
- }
270
- function openAiClientFixture(modelName, apiKey) {
271
- return async ({}, use) => {
272
- const client = await openAiClient(modelName, apiKey);
273
- await use(client);
274
- };
275
- }
276
- function vercelAiClientFixture(model) {
277
- return async ({}, use) => {
278
- const client = new VercelAiGptClient_1.VercelAiGptClient(model);
279
- await use(client);
280
- };
281
- }
282
- /**
283
- * This fixture resolves a GPT client based on environment variables.
284
- * Supplying different environment variables will result in different GPT
285
- * clients being created. Here is a mapping of client type to environment
286
- * variables for how to create the various types of clients...
287
- *
288
- * Anthropic AWS Bedrock GPT client requires:
289
- * - AWS_BEDROCK_MODEL_NAME
290
- * - AWS_REGION
291
- * - AWS_ACCESS_KEY_ID
292
- * - AWS_SECRET_ACCESS_KEY
293
- *
294
- * Anthropic GPT client requires:
295
- * - ANTHROPIC_API_KEY
296
- *
297
- * Google GPT client requires:
298
- * - GOOGLE_GENERATIVE_AI_API_KEY
299
- *
300
- * OpenAI GPT client requires:
301
- * - OPENAI_API_KEY
302
- *
303
- * If the modelName is not specified, it will be defaulted according to the
304
- * DEFAULT_GPT_MODEL_FOR_PLATFORM mapping.
305
- */
306
- async function createGptClient(modelName) {
307
- // Check which API keys are available
308
- const hasAwsCredentials = !!DEFAULT_GPT_MODEL_FOR_PLATFORM.ANTHROPIC_AWS_BEDROCK &&
309
- !!process.env[envVars_1.ENV_VAR_NAMES.AWS_ACCESS_KEY_ID] &&
310
- !!process.env[envVars_1.ENV_VAR_NAMES.AWS_SECRET_ACCESS_KEY];
311
- const hasAnthropicKey = !!process.env[envVars_1.ENV_VAR_NAMES.ANTHROPIC_API_KEY];
312
- const hasGoogleKey = !!process.env[envVars_1.ENV_VAR_NAMES.GOOGLE_GENERATIVE_AI_API_KEY];
313
- const hasOpenAiKey = !!process.env[envVars_1.ENV_VAR_NAMES.OPENAI_API_KEY];
314
- // Priority order: Anthropic AWS Bedrock, Anthropic, Google, OpenAI
315
- if (hasAwsCredentials) {
316
- const model = modelName || DEFAULT_GPT_MODEL_FOR_PLATFORM.ANTHROPIC_AWS_BEDROCK;
317
- const region = process.env[envVars_1.ENV_VAR_NAMES.AWS_REGION];
318
- const accessKeyId = process.env[envVars_1.ENV_VAR_NAMES.AWS_ACCESS_KEY_ID];
319
- const secretAccessKey = process.env[envVars_1.ENV_VAR_NAMES.AWS_SECRET_ACCESS_KEY];
320
- return anthropicAwsBedrockClient(model, region, accessKeyId, secretAccessKey);
321
- }
322
- else if (hasAnthropicKey) {
323
- const model = modelName || DEFAULT_GPT_MODEL_FOR_PLATFORM.ANTHROPIC;
324
- return anthropicClient(model);
325
- }
326
- else if (hasGoogleKey) {
327
- const model = modelName || DEFAULT_GPT_MODEL_FOR_PLATFORM.GOOGLE_GEMINI;
328
- return googleGeminiClient(model);
329
- }
330
- else if (hasOpenAiKey) {
331
- const model = modelName || DEFAULT_GPT_MODEL_FOR_PLATFORM.OPENAI;
332
- return openAiClient(model);
333
- }
334
- else {
335
- const donobu = await getOrCreateDonobuStack();
336
- const defaultClient = (await donobu.flowsManager.createGptClient(null))
337
- .gptClient;
338
- if (defaultClient) {
339
- return defaultClient;
340
- }
341
- else {
342
- // No API keys are available and there is not flow-runner set up, throw an error.
343
- throw new Error(`No API keys found for any supported GPT providers.
344
- Please set one of the following environment variables: ANTHROPIC_API_KEY, GOOGLE_GENERATIVE_AI_API_KEY, or OPENAI_API_KEY.
345
- Alternatively, set a flow-runner agent via POST /api/agents/flow-runner or via the Donobu app.`);
346
- }
347
- }
348
- }
349
- function gptClientFixture(modelName) {
350
- return async ({}, use) => {
351
- const client = await createGptClient(modelName);
352
- await use(client);
353
- };
354
- }
355
- __exportStar(require("playwright/test"), exports);
356
- exports.test = test_1.test.extend({
357
- // 1) Declare `gptClient` as an "option" fixture with a default of `undefined`.
358
- gptClient: [
359
- undefined, // default
360
- { option: true }, // so that test.use({ gptClient: ... }) can override
361
- ],
362
- // Override the default page fixture
363
- page: async ({ page, gptClient }, use, testInfo) => {
364
- if (!gptClient) {
365
- try {
366
- gptClient = await getOrCreateDefaultGptClient();
367
- }
368
- catch (_error) {
369
- // Do nothing since we may not need a GPT client at all anyway.
370
- // If something later on requires a GPT client, it will throw an error.
371
- }
372
- }
373
- // Patch the page with "run", but do it lazily
374
- const donobu = await getOrCreateDonobuStack();
375
- await PlaywrightUtils_1.PlaywrightUtils.setupBasicBrowserContext(page.context());
376
- let isTestRunInitialized = false;
377
- let isTestRunFailed = false;
378
- async function maybeInitDonobu() {
379
- if (isTestRunInitialized) {
380
- return;
381
- }
382
- const overallObjective = testInfo.annotations.find((v) => {
383
- return v.type === 'objective';
384
- })?.description ?? null;
385
- // Get the implied allowed environment variables by inspecting the objective.
386
- const allowedEnvVarsByName = DonobuFlowsManager_1.DonobuFlowsManager.distillAllowedEnvVariableNames(overallObjective, null);
387
- const donobuTestFlowMetadata = {
388
- id: (0, uuid_1.v4)(),
389
- name: testInfo.title,
390
- createdWithDonobuVersion: MiscUtils_1.MiscUtils.DONOBU_VERSION,
391
- browser: {
392
- using: {
393
- type: 'device',
394
- deviceName: 'Desktop Chromium',
395
- headless: true,
396
- },
397
- },
398
- envVars: allowedEnvVarsByName,
399
- gptConfigName: null,
400
- hasGptConfigNameOverride: false,
401
- customTools: null,
402
- defaultMessageDuration: 0,
403
- runMode: 'DETERMINISTIC',
404
- isControlPanelEnabled: false,
405
- callbackUrl: null,
406
- targetWebsite: PLACEHOLDER_FLOW_URL,
407
- overallObjective: overallObjective,
408
- allowedTools: [],
409
- resultJsonSchema: null,
410
- result: null,
411
- inputTokensUsed: 0,
412
- completionTokensUsed: 0,
413
- iterations: 0,
414
- maxIterations: 0,
415
- startedAt: new Date().getTime(),
416
- completedAt: null,
417
- state: 'RUNNING_ACTION',
418
- nextState: null,
419
- };
420
- const persistenceLayer = await donobu.flowsPersistenceFactory.createPersistenceLayer();
421
- await persistenceLayer.setMetadata(donobuTestFlowMetadata);
422
- page._donobuFlowMetadata = donobuTestFlowMetadata;
423
- isTestRunInitialized = true;
424
- }
425
- const originalGoto = page.goto;
426
- // Intercept 'page.goto' so that Donobu can later re-run it as a standard
427
- // Donobu action if necessary. This can happen if you run a Playwright
428
- // test using npx, but later decide to rerun that run using the Donobu UI.
429
- page.goto = async (url, options) => {
430
- await maybeInitDonobu();
431
- const startedAt = new Date().getTime();
432
- const flowId = page._donobuFlowMetadata.id;
433
- const persistenceLayer = await donobu.flowsPersistenceFactory.createPersistenceLayer();
434
- // Update the target website to whatever the first place we are
435
- // navigating to is.
436
- if (page._donobuFlowMetadata.targetWebsite === PLACEHOLDER_FLOW_URL) {
437
- page._donobuFlowMetadata = {
438
- ...page._donobuFlowMetadata,
439
- targetWebsite: url,
440
- };
441
- await persistenceLayer.setMetadata(page._donobuFlowMetadata);
442
- }
443
- try {
444
- const resp = await originalGoto.call(page, url, options);
445
- await PlaywrightUtils_1.PlaywrightUtils.waitForPageStability(page);
446
- const pageTitle = await page.title();
447
- const postCallImage = await PlaywrightUtils_1.PlaywrightUtils.takeScreenshot(page);
448
- const postCallImageId = await persistenceLayer.saveScreenShot(flowId, postCallImage);
449
- const completedAt = new Date().getTime();
450
- await persistenceLayer.saveToolCall(flowId, {
451
- id: MiscUtils_1.MiscUtils.createAdHocToolCallId(),
452
- toolName: GoToWebpageTool_1.GoToWebpageTool.NAME,
453
- parameters: {
454
- url: url,
455
- },
456
- outcome: {
457
- isSuccessful: true,
458
- forLlm: `Successfully navigated to ${url}`,
459
- metadata: {
460
- pageTitle: pageTitle,
461
- resolvedUrl: page.url(),
462
- },
463
- },
464
- postCallImageId: postCallImageId,
465
- page: url,
466
- startedAt: startedAt,
467
- completedAt: completedAt,
468
- });
469
- return resp;
470
- }
471
- catch (error) {
472
- const postCallImage = await PlaywrightUtils_1.PlaywrightUtils.takeScreenshot(page);
473
- const postCallImageId = await persistenceLayer.saveScreenShot(flowId, postCallImage);
474
- const completedAt = new Date().getTime();
475
- await persistenceLayer.saveToolCall(flowId, {
476
- id: MiscUtils_1.MiscUtils.createAdHocToolCallId(),
477
- toolName: 'goToWebpage',
478
- parameters: {
479
- url: url,
480
- },
481
- outcome: {
482
- isSuccessful: false,
483
- forLlm: `FAILED! ${typeof error}: ${error.message}`,
484
- metadata: null,
485
- },
486
- postCallImageId: postCallImageId,
487
- page: url,
488
- startedAt: startedAt,
489
- completedAt: completedAt,
490
- });
491
- // Mark test as failed for later callback
492
- isTestRunFailed = true;
493
- throw error;
494
- }
495
- };
496
- page.run = async (toolName, toolParams, gptClientOverride) => {
497
- await maybeInitDonobu();
498
- let finalGptClient = null;
499
- if (gptClientOverride) {
500
- if (!(gptClientOverride instanceof GptClient_1.GptClient)) {
501
- finalGptClient = new VercelAiGptClient_1.VercelAiGptClient(gptClientOverride);
502
- }
503
- else {
504
- finalGptClient = gptClientOverride;
505
- }
506
- }
507
- else if (gptClient) {
508
- finalGptClient = gptClient;
509
- }
510
- const pageInspector = new PageInspector_1.PageInspector();
511
- const controlPanel = new ControlPanel_1.ControlPanel(page._donobuFlowMetadata);
512
- const persistenceLayer = await donobu.flowsPersistenceFactory.createPersistenceLayer();
513
- const clonedParams = toolParams
514
- ? JSON.parse(JSON.stringify(toolParams))
515
- : {};
516
- clonedParams.rationale || (clonedParams.rationale = '');
517
- const envData = await donobu.flowsManager.buildEnvData(page._donobuFlowMetadata.envVars ?? []);
518
- const toolCallContext = {
519
- flowsManager: donobu.flowsManager,
520
- envData: envData,
521
- pageInspector: pageInspector,
522
- controlPanel: controlPanel,
523
- persistence: persistenceLayer,
524
- gptClient: finalGptClient,
525
- interactionVisualizer: new InteractionVisualizer_1.InteractionVisualizer(0),
526
- proposedToolCalls: [],
527
- invokedToolCalls: [],
528
- page: { current: page },
529
- metadata: page._donobuFlowMetadata,
530
- toolCallId: clonedParams.toolCallId ?? MiscUtils_1.MiscUtils.createAdHocToolCallId(),
531
- };
532
- try {
533
- const result = await new ToolManager_1.ToolManager(ToolManager_1.ToolManager.ALL_TOOLS).invokeTool(toolCallContext, toolName, clonedParams, false);
534
- await persistenceLayer.setMetadata(page._donobuFlowMetadata);
535
- await persistenceLayer.saveToolCall(page._donobuFlowMetadata.id, result);
536
- // Check if tool execution was successful
537
- if (!result.outcome.isSuccessful) {
538
- throw new Error(`${toolName} execution failed: ${JSON.stringify(result, null, 2)}`);
539
- }
540
- return result.outcome;
541
- }
542
- catch (error) {
543
- // Mark test as failed if an exception occurs during tool execution
544
- isTestRunFailed = true;
545
- throw error;
546
- }
547
- };
548
- page.analyzePageText = async (params, gptClientOverride) => {
549
- return page.run(AnalyzePageTextTool_1.AnalyzePageTextTool.NAME, params, gptClientOverride);
550
- };
551
- page.assertPageText = async (params, gptClientOverride) => {
552
- return page.run(AssertPageTextTool_1.AssertPageTextTool.NAME, params, gptClientOverride);
553
- };
554
- page.changeTab = async (url) => {
555
- // The underlying tool call is mostly performative. We do it so we can
556
- // record the operation occurred, but the actual page reassignment happens
557
- // at the call site of this function.
558
- const result = await page.run(ChangeWebBrowserTabTool_1.ChangeWebBrowserTabTool.NAME, {
559
- tabUrl: url,
560
- });
561
- if (result.isSuccessful) {
562
- // We need to return a real Page object, not just the raw URL, so we
563
- // loop through the pages of the current context, knowing we will find
564
- // a match.
565
- return page
566
- .context()
567
- .pages()
568
- .find((tab) => tab.url() === url);
569
- }
570
- else {
571
- throw Error(result.forLlm);
572
- }
573
- };
574
- page.chooseSelectOption = async (params) => {
575
- return page.run(ChooseSelectOptionTool_1.ChooseSelectOptionTool.NAME, params);
576
- };
577
- page.clickElement = async (params) => {
578
- return page.run(ClickTool_1.ClickTool.NAME, params);
579
- };
580
- page.createCookieReport = async (gptClientOverride) => {
581
- return page.run(CreateBrowserCookieReportTool_1.CreateBrowserCookieReportTool.NAME, gptClientOverride);
582
- };
583
- page.extract = async (params, gptClientOverride) => {
584
- await maybeInitDonobu();
585
- let finalGptClient = null;
586
- if (gptClientOverride) {
587
- if (!(gptClientOverride instanceof GptClient_1.GptClient)) {
588
- finalGptClient = new VercelAiGptClient_1.VercelAiGptClient(gptClientOverride);
589
- }
590
- else {
591
- finalGptClient = gptClientOverride;
592
- }
593
- }
594
- else if (gptClient) {
595
- finalGptClient = gptClient;
596
- }
597
- if (!finalGptClient) {
598
- isTestRunFailed = true;
599
- throw Error('Cannot extract an object from page without a GPT client set up!');
600
- }
601
- try {
602
- const persistenceLayer = await donobu.flowsPersistenceFactory.createPersistenceLayer();
603
- const toolCallHistory = await persistenceLayer.getToolCalls(page._donobuFlowMetadata.id);
604
- const structuredOutputMessage = await (0, DonobuFlow_1.extractFromPage)(params.instruction ??
605
- 'Generate an object conforming to the given JSON-schema', params.schema, page, toolCallHistory, finalGptClient);
606
- page._donobuFlowMetadata.resultJsonSchema = params.schema;
607
- page._donobuFlowMetadata.result = structuredOutputMessage.output;
608
- await persistenceLayer.setMetadata(page._donobuFlowMetadata);
609
- return structuredOutputMessage.output;
610
- }
611
- catch (error) {
612
- isTestRunFailed = true;
613
- throw error;
614
- }
615
- };
616
- page.hoverOverElement = async (params) => {
617
- return page.run(HoverOverElementTool_1.HoverOverElementTool.NAME, params);
618
- };
619
- page.inputRandomizedEmailAddress = async (params) => {
620
- return page.run(InputRandomizedEmailAddressTool_1.InputRandomizedEmailAddressTool.NAME, params);
621
- };
622
- page.inputText = async (params) => {
623
- return page.run(InputTextTool_1.InputTextTool.NAME, params);
624
- };
625
- page.pressKey = async (params) => {
626
- return page.run(PressKeyTool_1.PressKeyTool.NAME, params);
627
- };
628
- page.runAccessibilityTest = async () => {
629
- return page.run(RunAccessibilityTestTool_1.RunAccessibilityTestTool.NAME);
630
- };
631
- page.scroll = async (params) => {
632
- return page.run(ScrollPageTool_1.ScrollPageTool.NAME, params);
633
- };
634
- page.visuallyAssert = async (params, gptClientOverride) => {
635
- return page.run(AssertTool_1.AssertTool.NAME, params, gptClientOverride);
636
- };
637
- try {
638
- // Let Playwright continue and give tests the patched page.
639
- await use(page);
640
- // Check if the test status is failed in the testInfo
641
- // This catches failures that were marked by Playwright itself
642
- if (testInfo.status === 'failed' || testInfo.status === 'timedOut') {
643
- isTestRunFailed = true;
644
- }
645
- }
646
- catch (error) {
647
- // Mark test as failed if an uncaught exception occurs during the test
648
- isTestRunFailed = true;
649
- throw error;
650
- }
651
- finally {
652
- try {
653
- const persistenceLayer = await donobu.flowsPersistenceFactory.createPersistenceLayer();
654
- if (page._donobuFlowMetadata) {
655
- // Update metadata with final status
656
- page._donobuFlowMetadata.state = isTestRunFailed
657
- ? 'FAILED'
658
- : 'SUCCESS';
659
- page._donobuFlowMetadata.completedAt = new Date().getTime();
660
- await persistenceLayer.setMetadata(page._donobuFlowMetadata);
661
- await testInfo.attach('test-flow-metadata.json', {
662
- body: JSON.stringify(page._donobuFlowMetadata, null, 2),
663
- contentType: 'application/json',
664
- });
665
- }
666
- }
667
- catch (error) {
668
- // Log but don't throw, to ensure cleanup continues.
669
- Logger_1.appLogger.error('Error during test cleanup:', error);
670
- }
671
- const isSelfHealEnabledEnvVar = process.env[envVars_1.ENV_VAR_NAMES.SELF_HEAL_TESTS_ENABLED]?.trim();
672
- if (isTestRunFailed &&
673
- (isSelfHealEnabledEnvVar === 'true' || isSelfHealEnabledEnvVar === '1')) {
674
- if (!gptClient) {
675
- Logger_1.appLogger.warn('Will not self-heal due to no GPT client being set up.');
676
- return;
677
- }
678
- try {
679
- await selfHeal(gptClient, testInfo, page._donobuFlowMetadata);
680
- }
681
- catch (selfHealError) {
682
- Logger_1.appLogger.error('Error when attempting to self heal:', selfHealError);
683
- }
684
- }
685
- }
686
- },
687
- });
688
- //# sourceMappingURL=playwrightTestExtensions.js.map