testdriverai 7.2.64 → 7.2.65

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 (360) hide show
  1. package/agent/index.js +4 -3
  2. package/agent/interface.js +11 -251
  3. package/agent/lib/debugger-server.js +2 -1
  4. package/agent/lib/logger.js +56 -0
  5. package/agent/lib/sandbox.js +6 -7
  6. package/ai/agents/test-writer.md +457 -0
  7. package/{docs/v7/ai.mdx → ai/skills/testdriver:ai/SKILL.md} +3 -5
  8. package/{docs/v7/assert.mdx → ai/skills/testdriver:assert/SKILL.md} +3 -4
  9. package/{docs/v7/aws-setup.mdx → ai/skills/testdriver:aws-setup/SKILL.md} +3 -4
  10. package/{docs/v7/caching.mdx → ai/skills/testdriver:caching/SKILL.md} +3 -7
  11. package/{docs/v7/captcha.mdx → ai/skills/testdriver:captcha/SKILL.md} +4 -5
  12. package/{docs/v7/ci-cd.mdx → ai/skills/testdriver:ci-cd/SKILL.md} +3 -4
  13. package/{docs/v7/click.mdx → ai/skills/testdriver:click/SKILL.md} +3 -4
  14. package/{docs/v7/client.mdx → ai/skills/testdriver:client/SKILL.md} +11 -5
  15. package/{docs/v7/cloud.mdx → ai/skills/testdriver:cloud/SKILL.md} +3 -4
  16. package/{docs/v7/customizing-devices.mdx → ai/skills/testdriver:customizing-devices/SKILL.md} +36 -26
  17. package/{docs/v7/dashcam.mdx → ai/skills/testdriver:dashcam/SKILL.md} +3 -4
  18. package/{docs/v7/device-config.mdx → ai/skills/testdriver:device-config/SKILL.md} +3 -3
  19. package/{docs/v7/double-click.mdx → ai/skills/testdriver:double-click/SKILL.md} +3 -3
  20. package/{docs/v7/elements.mdx → ai/skills/testdriver:elements/SKILL.md} +3 -4
  21. package/{docs/v7/enterprise.mdx → ai/skills/testdriver:enterprise/SKILL.md} +3 -5
  22. package/ai/skills/testdriver:examples/SKILL.md +7 -0
  23. package/{docs/v7/exec.mdx → ai/skills/testdriver:exec/SKILL.md} +3 -4
  24. package/{docs/v7/find.mdx → ai/skills/testdriver:find/SKILL.md} +81 -4
  25. package/{docs/v7/focus-application.mdx → ai/skills/testdriver:focus-application/SKILL.md} +3 -4
  26. package/{docs/v7/generating-tests.mdx → ai/skills/testdriver:generating-tests/SKILL.md} +3 -3
  27. package/{docs/v7/hover.mdx → ai/skills/testdriver:hover/SKILL.md} +3 -4
  28. package/{docs/v7/locating-elements.mdx → ai/skills/testdriver:locating-elements/SKILL.md} +3 -3
  29. package/{docs/v7/making-assertions.mdx → ai/skills/testdriver:making-assertions/SKILL.md} +3 -3
  30. package/ai/skills/testdriver:mcp-workflow/SKILL.md +410 -0
  31. package/{docs/v7/mouse-down.mdx → ai/skills/testdriver:mouse-down/SKILL.md} +3 -3
  32. package/{docs/v7/mouse-up.mdx → ai/skills/testdriver:mouse-up/SKILL.md} +3 -3
  33. package/{docs/v7/performing-actions.mdx → ai/skills/testdriver:performing-actions/SKILL.md} +3 -3
  34. package/{docs/v7/press-keys.mdx → ai/skills/testdriver:press-keys/SKILL.md} +3 -4
  35. package/{docs/v7/quickstart.mdx → ai/skills/testdriver:quickstart/SKILL.md} +3 -4
  36. package/{docs/v7/reusable-code.mdx → ai/skills/testdriver:reusable-code/SKILL.md} +3 -3
  37. package/{docs/v7/right-click.mdx → ai/skills/testdriver:right-click/SKILL.md} +3 -3
  38. package/{docs/v7/running-tests.mdx → ai/skills/testdriver:running-tests/SKILL.md} +3 -3
  39. package/{docs/v7/screenshot.mdx → ai/skills/testdriver:screenshot/SKILL.md} +3 -4
  40. package/{docs/v7/scroll.mdx → ai/skills/testdriver:scroll/SKILL.md} +3 -4
  41. package/{docs/v7/secrets.mdx → ai/skills/testdriver:secrets/SKILL.md} +3 -3
  42. package/{docs/v7/self-hosted.mdx → ai/skills/testdriver:self-hosted/SKILL.md} +3 -4
  43. package/ai/skills/testdriver:testdriver/SKILL.md +31 -0
  44. package/{docs/v7/type.mdx → ai/skills/testdriver:type/SKILL.md} +3 -4
  45. package/{docs/v7/variables.mdx → ai/skills/testdriver:variables/SKILL.md} +3 -3
  46. package/{docs/v7/waiting-for-elements.mdx → ai/skills/testdriver:waiting-for-elements/SKILL.md} +3 -3
  47. package/{docs/v7/what-is-testdriver.mdx → ai/skills/testdriver:what-is-testdriver/SKILL.md} +3 -3
  48. package/interfaces/cli/commands/init.js +278 -1
  49. package/interfaces/cli/commands/setup.js +382 -0
  50. package/interfaces/vitest-plugin.mjs +190 -122
  51. package/lib/sentry.js +4 -3
  52. package/lib/vitest/hooks.mjs +70 -16
  53. package/package.json +29 -9
  54. package/sdk.d.ts +29 -2
  55. package/sdk.js +1 -0
  56. package/.env.example +0 -4
  57. package/.github/workflows/acceptance-linux-scheduled.yaml +0 -45
  58. package/.github/workflows/acceptance-windows-scheduled.yaml +0 -54
  59. package/.github/workflows/acceptance.yaml +0 -87
  60. package/.github/workflows/publish.yaml +0 -68
  61. package/.github/workflows/test-init.yml +0 -145
  62. package/.github/workflows/testdriver.yml +0 -170
  63. package/.github/workflows/windows-self-hosted.yaml +0 -82
  64. package/.prettierignore +0 -4
  65. package/.prettierrc +0 -1
  66. package/CHANGELOG.md +0 -34
  67. package/agents.md +0 -455
  68. package/debugger/bg.png +0 -0
  69. package/debugger/icon.png +0 -0
  70. package/debugger/index.html +0 -797
  71. package/debugger/td.png +0 -0
  72. package/debugger/tray-buffered.png +0 -0
  73. package/debugger/tray.png +0 -0
  74. package/docs/GITHUB_COMMENTS.md +0 -330
  75. package/docs/GITHUB_COMMENTS_ANNOUNCEMENT.md +0 -167
  76. package/docs/QUICK-START-GITHUB-COMMENTS.md +0 -84
  77. package/docs/TEST-GITHUB-COMMENTS.md +0 -129
  78. package/docs/_scripts/link-replacer.js +0 -164
  79. package/docs/_scripts/upload-docs-to-openai.js +0 -284
  80. package/docs/docs.json +0 -393
  81. package/docs/github-integration-setup.md +0 -266
  82. package/docs/guide/best-practices-polling.mdx +0 -154
  83. package/docs/images/content/account/newprojectsettings.png +0 -0
  84. package/docs/images/content/account/projectpage.png +0 -0
  85. package/docs/images/content/account/projectreplays.png +0 -0
  86. package/docs/images/content/account/team-manage.png +0 -0
  87. package/docs/images/content/account/teampage.png +0 -0
  88. package/docs/images/content/extension/cursor.svg +0 -1
  89. package/docs/images/content/extension/vscode.svg +0 -57
  90. package/docs/images/content/extension/windsurf.svg +0 -3
  91. package/docs/images/content/self-hosted/launchtemplateid.png +0 -0
  92. package/docs/images/content/side-by-side.png +0 -0
  93. package/docs/images/content/vscode/ide-full.png +0 -0
  94. package/docs/images/content/vscode/running.png +0 -0
  95. package/docs/images/content/vscode/vscode-2-assert.png +0 -0
  96. package/docs/images/content/vscode/vscode-agent-preview.png +0 -0
  97. package/docs/images/content/vscode/vscode-copilot-ask.png +0 -0
  98. package/docs/images/content/vscode/vscode-file-creation.png +0 -0
  99. package/docs/images/content/vscode/vscode-install.png +0 -0
  100. package/docs/images/content/vscode/vscode-overview.png +0 -0
  101. package/docs/images/content/vscode/vscode-setup-walkthrough.png +0 -0
  102. package/docs/images/content/vscode/vscode-stopchat.png +0 -0
  103. package/docs/images/content/vscode/vscode-stoptest.png +0 -0
  104. package/docs/images/content/vscode/vscode-tdservice.png +0 -0
  105. package/docs/images/content/vscode/vscode-test-output.png +0 -0
  106. package/docs/images/content/vscode/vscode-testhistory.png +0 -0
  107. package/docs/images/content/vscode/vscode-testpane-runtests.png +0 -0
  108. package/docs/images/content/vscode/vscode-testpane.png +0 -0
  109. package/docs/images/template/dark.png +0 -0
  110. package/docs/images/template/icon.png +0 -0
  111. package/docs/images/template/light.png +0 -0
  112. package/docs/snippets/calendar-link.mdx +0 -4
  113. package/docs/snippets/gitignore-warning.mdx +0 -7
  114. package/docs/snippets/lifecycle-warning.mdx +0 -6
  115. package/docs/snippets/test-prereqs.mdx +0 -12
  116. package/docs/snippets/tests/assert-replay.mdx +0 -7
  117. package/docs/snippets/tests/assert-yaml.mdx +0 -8
  118. package/docs/snippets/tests/exec-js-replay.mdx +0 -7
  119. package/docs/snippets/tests/exec-js-yaml.mdx +0 -32
  120. package/docs/snippets/tests/exec-shell-replay.mdx +0 -7
  121. package/docs/snippets/tests/exec-shell-yaml.mdx +0 -15
  122. package/docs/snippets/tests/hover-image-replay.mdx +0 -7
  123. package/docs/snippets/tests/hover-image-yaml.mdx +0 -17
  124. package/docs/snippets/tests/hover-text-replay.mdx +0 -7
  125. package/docs/snippets/tests/hover-text-with-description-replay.mdx +0 -7
  126. package/docs/snippets/tests/hover-text-with-description-yaml.mdx +0 -24
  127. package/docs/snippets/tests/hover-text-yaml.mdx +0 -14
  128. package/docs/snippets/tests/match-image-replay.mdx +0 -7
  129. package/docs/snippets/tests/match-image-yaml.mdx +0 -17
  130. package/docs/snippets/tests/press-keys-replay.mdx +0 -7
  131. package/docs/snippets/tests/press-keys-yaml.mdx +0 -36
  132. package/docs/snippets/tests/remember-replay.mdx +0 -7
  133. package/docs/snippets/tests/remember-yaml.mdx +0 -28
  134. package/docs/snippets/tests/scroll-replay.mdx +0 -7
  135. package/docs/snippets/tests/scroll-until-image-replay.mdx +0 -7
  136. package/docs/snippets/tests/scroll-until-image-yaml.mdx +0 -14
  137. package/docs/snippets/tests/scroll-until-text-replay.mdx +0 -7
  138. package/docs/snippets/tests/scroll-until-text-yaml.mdx +0 -17
  139. package/docs/snippets/tests/scroll-yaml.mdx +0 -30
  140. package/docs/snippets/tests/type-repeated-replay.mdx +0 -7
  141. package/docs/snippets/tests/type-repeated-yaml.mdx +0 -22
  142. package/docs/snippets/tests/type-replay.mdx +0 -7
  143. package/docs/snippets/tests/type-yaml.mdx +0 -28
  144. package/docs/snippets/tests/wait-for-image-replay.mdx +0 -7
  145. package/docs/snippets/tests/wait-for-image-yaml.mdx +0 -18
  146. package/docs/snippets/tests/wait-for-text-replay.mdx +0 -7
  147. package/docs/snippets/tests/wait-for-text-yaml.mdx +0 -18
  148. package/docs/snippets/tests/wait-replay.mdx +0 -7
  149. package/docs/snippets/tests/wait-yaml.mdx +0 -13
  150. package/docs/styles.css +0 -65
  151. package/docs/v6/account/dashboard.mdx +0 -16
  152. package/docs/v6/account/enterprise.mdx +0 -110
  153. package/docs/v6/account/pricing.mdx +0 -33
  154. package/docs/v6/account/projects.mdx +0 -33
  155. package/docs/v6/account/team.mdx +0 -35
  156. package/docs/v6/action/ami.mdx +0 -109
  157. package/docs/v6/action/performance.mdx +0 -105
  158. package/docs/v6/action/secrets.mdx +0 -93
  159. package/docs/v6/apps/chrome-extensions.mdx +0 -48
  160. package/docs/v6/apps/desktop-apps.mdx +0 -93
  161. package/docs/v6/apps/mobile-apps.mdx +0 -26
  162. package/docs/v6/apps/static-websites.mdx +0 -54
  163. package/docs/v6/apps/tauri-apps.mdx +0 -361
  164. package/docs/v6/bugs/jira.mdx +0 -232
  165. package/docs/v6/cli/overview.mdx +0 -66
  166. package/docs/v6/commands/assert.mdx +0 -45
  167. package/docs/v6/commands/exec.mdx +0 -282
  168. package/docs/v6/commands/focus-application.mdx +0 -44
  169. package/docs/v6/commands/hover-image.mdx +0 -69
  170. package/docs/v6/commands/hover-text.mdx +0 -47
  171. package/docs/v6/commands/if.mdx +0 -53
  172. package/docs/v6/commands/match-image.mdx +0 -67
  173. package/docs/v6/commands/press-keys.mdx +0 -87
  174. package/docs/v6/commands/remember.mdx +0 -49
  175. package/docs/v6/commands/run.mdx +0 -44
  176. package/docs/v6/commands/scroll-until-image.mdx +0 -66
  177. package/docs/v6/commands/scroll-until-text.mdx +0 -60
  178. package/docs/v6/commands/scroll.mdx +0 -69
  179. package/docs/v6/commands/type.mdx +0 -45
  180. package/docs/v6/commands/wait-for-image.mdx +0 -54
  181. package/docs/v6/commands/wait-for-text.mdx +0 -48
  182. package/docs/v6/commands/wait.mdx +0 -45
  183. package/docs/v6/exporting/junit.mdx +0 -218
  184. package/docs/v6/exporting/playwright.mdx +0 -197
  185. package/docs/v6/features/auto-healing.mdx +0 -144
  186. package/docs/v6/features/generation.mdx +0 -116
  187. package/docs/v6/features/parallel-testing.mdx +0 -151
  188. package/docs/v6/features/reusable-snippets.mdx +0 -131
  189. package/docs/v6/features/selectorless.mdx +0 -80
  190. package/docs/v6/features/visual-assertions.mdx +0 -139
  191. package/docs/v6/getting-started/ci.mdx +0 -146
  192. package/docs/v6/getting-started/cli.mdx +0 -91
  193. package/docs/v6/getting-started/editing.mdx +0 -100
  194. package/docs/v6/getting-started/playwright.mdx +0 -342
  195. package/docs/v6/getting-started/running.mdx +0 -48
  196. package/docs/v6/getting-started/self-hosting.mdx +0 -408
  197. package/docs/v6/getting-started/vscode.mdx +0 -89
  198. package/docs/v6/guide/assertions.mdx +0 -189
  199. package/docs/v6/guide/authentication.mdx +0 -136
  200. package/docs/v6/guide/code.mdx +0 -65
  201. package/docs/v6/guide/dashcam.mdx +0 -118
  202. package/docs/v6/guide/environment-variables.mdx +0 -26
  203. package/docs/v6/guide/lifecycle.mdx +0 -242
  204. package/docs/v6/guide/locating.mdx +0 -141
  205. package/docs/v6/guide/protips.mdx +0 -43
  206. package/docs/v6/guide/variables.mdx +0 -143
  207. package/docs/v6/guide/waiting.mdx +0 -130
  208. package/docs/v6/importing/csv.mdx +0 -196
  209. package/docs/v6/importing/gherkin.mdx +0 -143
  210. package/docs/v6/importing/jira.mdx +0 -164
  211. package/docs/v6/importing/testrail.mdx +0 -162
  212. package/docs/v6/integrations/electron.mdx +0 -146
  213. package/docs/v6/integrations/netlify.mdx +0 -100
  214. package/docs/v6/integrations/vercel.mdx +0 -125
  215. package/docs/v6/interactive/explore.mdx +0 -99
  216. package/docs/v6/interactive/run.mdx +0 -52
  217. package/docs/v6/interactive/save.mdx +0 -63
  218. package/docs/v6/overview/comparison.mdx +0 -101
  219. package/docs/v6/overview/faq.mdx +0 -162
  220. package/docs/v6/overview/performance.mdx +0 -52
  221. package/docs/v6/overview/quickstart.mdx +0 -137
  222. package/docs/v6/overview/what-is-testdriver.mdx +0 -85
  223. package/docs/v6/scenarios/ai-chatbot.mdx +0 -28
  224. package/docs/v6/scenarios/cookie-banner.mdx +0 -32
  225. package/docs/v6/scenarios/file-upload.mdx +0 -33
  226. package/docs/v6/scenarios/form-filling.mdx +0 -32
  227. package/docs/v6/scenarios/log-in.mdx +0 -75
  228. package/docs/v6/scenarios/pdf-generation.mdx +0 -25
  229. package/docs/v6/scenarios/spell-check.mdx +0 -22
  230. package/docs/v6/security/action.mdx +0 -84
  231. package/docs/v6/security/agent.mdx +0 -73
  232. package/docs/v6/security/platform.mdx +0 -77
  233. package/docs/v6/tutorials/advanced-test.mdx +0 -81
  234. package/docs/v6/tutorials/basic-test.mdx +0 -45
  235. package/docs/v7/_drafts/agents.mdx +0 -852
  236. package/docs/v7/_drafts/architecture.mdx +0 -399
  237. package/docs/v7/_drafts/auto-cache-key.mdx +0 -167
  238. package/docs/v7/_drafts/awesome-logs-quick-ref.mdx +0 -100
  239. package/docs/v7/_drafts/best-practices.mdx +0 -486
  240. package/docs/v7/_drafts/caching-ai.mdx +0 -215
  241. package/docs/v7/_drafts/caching-selectors.mdx +0 -424
  242. package/docs/v7/_drafts/caching.mdx +0 -366
  243. package/docs/v7/_drafts/cli-to-sdk-migration.mdx +0 -425
  244. package/docs/v7/_drafts/commands/assert.mdx +0 -45
  245. package/docs/v7/_drafts/commands/exec.mdx +0 -282
  246. package/docs/v7/_drafts/commands/focus-application.mdx +0 -44
  247. package/docs/v7/_drafts/commands/hover-image.mdx +0 -69
  248. package/docs/v7/_drafts/commands/hover-text.mdx +0 -47
  249. package/docs/v7/_drafts/commands/if.mdx +0 -53
  250. package/docs/v7/_drafts/commands/match-image.mdx +0 -67
  251. package/docs/v7/_drafts/commands/press-keys.mdx +0 -87
  252. package/docs/v7/_drafts/commands/remember.mdx +0 -49
  253. package/docs/v7/_drafts/commands/run.mdx +0 -44
  254. package/docs/v7/_drafts/commands/scroll-until-image.mdx +0 -66
  255. package/docs/v7/_drafts/commands/scroll-until-text.mdx +0 -60
  256. package/docs/v7/_drafts/commands/scroll.mdx +0 -69
  257. package/docs/v7/_drafts/commands/type.mdx +0 -45
  258. package/docs/v7/_drafts/commands/wait-for-image.mdx +0 -54
  259. package/docs/v7/_drafts/commands/wait-for-text.mdx +0 -48
  260. package/docs/v7/_drafts/commands/wait.mdx +0 -45
  261. package/docs/v7/_drafts/configuration.mdx +0 -378
  262. package/docs/v7/_drafts/contributing.mdx +0 -174
  263. package/docs/v7/_drafts/core.mdx +0 -458
  264. package/docs/v7/_drafts/dashcam-title-feature.mdx +0 -89
  265. package/docs/v7/_drafts/debugging.mdx +0 -349
  266. package/docs/v7/_drafts/error-handling.mdx +0 -501
  267. package/docs/v7/_drafts/faq.mdx +0 -393
  268. package/docs/v7/_drafts/hooks.mdx +0 -360
  269. package/docs/v7/_drafts/init-command.mdx +0 -95
  270. package/docs/v7/_drafts/installation.mdx +0 -420
  271. package/docs/v7/_drafts/migration.mdx +0 -562
  272. package/docs/v7/_drafts/observable.mdx +0 -604
  273. package/docs/v7/_drafts/playwright.mdx +0 -342
  274. package/docs/v7/_drafts/plugin-migration.mdx +0 -220
  275. package/docs/v7/_drafts/powerful.mdx +0 -419
  276. package/docs/v7/_drafts/presets.mdx +0 -210
  277. package/docs/v7/_drafts/progressive-disclosure.mdx +0 -230
  278. package/docs/v7/_drafts/prompt-cache.mdx +0 -200
  279. package/docs/v7/_drafts/provision.mdx +0 -390
  280. package/docs/v7/_drafts/quick-start-test-recording.mdx +0 -214
  281. package/docs/v7/_drafts/readme.mdx +0 -135
  282. package/docs/v7/_drafts/reports.mdx +0 -414
  283. package/docs/v7/_drafts/scalable.mdx +0 -754
  284. package/docs/v7/_drafts/screenshot.mdx +0 -155
  285. package/docs/v7/_drafts/sdk-awesome-logs.mdx +0 -468
  286. package/docs/v7/_drafts/sdk-browser-rendering.mdx +0 -167
  287. package/docs/v7/_drafts/sdk-migration.mdx +0 -474
  288. package/docs/v7/_drafts/sdk-v7-complete.mdx +0 -345
  289. package/docs/v7/_drafts/self-hosting.mdx +0 -369
  290. package/docs/v7/_drafts/test-recording.mdx +0 -382
  291. package/docs/v7/_drafts/troubleshooting.mdx +0 -526
  292. package/docs/v7/_drafts/vitest-plugin.mdx +0 -477
  293. package/docs/v7/_drafts/vitest.mdx +0 -535
  294. package/docs/v7/_drafts/writing-tests.mdx +0 -25
  295. package/docs/v7/examples.mdx +0 -5
  296. package/eslint.config.js +0 -67
  297. package/examples/ai.test.mjs +0 -30
  298. package/examples/assert.test.mjs +0 -46
  299. package/examples/captcha-api.test.mjs +0 -50
  300. package/examples/chrome-extension.test.mjs +0 -94
  301. package/examples/drag-and-drop.test.mjs +0 -58
  302. package/examples/element-not-found.test.mjs +0 -26
  303. package/examples/exec-output.test.mjs +0 -59
  304. package/examples/exec-pwsh.test.mjs +0 -57
  305. package/examples/focus-window.test.mjs +0 -36
  306. package/examples/formatted-logging.test.mjs +0 -26
  307. package/examples/hover-image.test.mjs +0 -52
  308. package/examples/hover-text-with-description.test.mjs +0 -56
  309. package/examples/hover-text.test.mjs +0 -27
  310. package/examples/installer.test.mjs +0 -49
  311. package/examples/launch-vscode-linux.test.mjs +0 -54
  312. package/examples/match-image.test.mjs +0 -54
  313. package/examples/no-provision.test.mjs +0 -23
  314. package/examples/press-keys.test.mjs +0 -50
  315. package/examples/prompt.test.mjs +0 -33
  316. package/examples/scroll-keyboard.test.mjs +0 -37
  317. package/examples/scroll-until-image.test.mjs +0 -39
  318. package/examples/scroll-until-text.test.mjs +0 -67
  319. package/examples/scroll.test.mjs +0 -41
  320. package/examples/type.test.mjs +0 -45
  321. package/examples/windows-installer.test.mjs +0 -53
  322. package/interfaces/cli/commands/edit.js +0 -3
  323. package/interfaces/cli/commands/generate.js +0 -3
  324. package/interfaces/cli/commands/run.js +0 -3
  325. package/interfaces/cli/utils/factory.js +0 -71
  326. package/jsconfig.json +0 -26
  327. package/manual/test-init-command.js +0 -223
  328. package/sdk-log-formatter.js +0 -930
  329. package/setup/aws/cloudformation.yaml +0 -470
  330. package/setup/aws/spawn-runner.sh +0 -190
  331. package/test/api-resilience.test.mjs +0 -0
  332. package/test/captcha-solver.test.mjs +0 -70
  333. package/test/chrome-remote-debugging.test.mjs +0 -66
  334. package/test/manual/debug-locate-response.js +0 -82
  335. package/test/manual/reconnect-provision.test.mjs +0 -49
  336. package/test/manual/test-console-logs.test.mjs +0 -42
  337. package/test/manual/test-find-api.js +0 -73
  338. package/test/manual/test-init.sh +0 -54
  339. package/test/manual/test-prompt-cache.js +0 -96
  340. package/test/manual/test-provision-auth.mjs +0 -22
  341. package/test/manual/test-sandbox-render.js +0 -28
  342. package/test/manual/test-sdk-methods.js +0 -15
  343. package/test/manual/test-sdk-refactor.js +0 -53
  344. package/test/manual/test-stack-trace.mjs +0 -57
  345. package/test/manual/verify-element-api.js +0 -89
  346. package/test/manual/verify-types.js +0 -0
  347. package/test/manual-unawaited-promise.test.mjs +0 -31
  348. package/testdriver-plugin/skills/actions/SKILL.md +0 -93
  349. package/testdriver-plugin/skills/assertions/SKILL.md +0 -77
  350. package/testdriver-plugin/skills/caching/SKILL.md +0 -66
  351. package/testdriver-plugin/skills/creating-tests/SKILL.md +0 -104
  352. package/testdriver-plugin/skills/finding-elements/SKILL.md +0 -77
  353. package/testdriver-plugin/skills/github-actions/SKILL.md +0 -100
  354. package/testdriver-plugin/skills/running-tests/SKILL.md +0 -77
  355. package/testdriver-plugin/skills/secrets/SKILL.md +0 -87
  356. package/testdriver-plugin/skills/self-hosting/SKILL.md +0 -89
  357. package/testdriver-plugin/skills/setup/SKILL.md +0 -76
  358. package/testdriver-plugin/skills/variables/SKILL.md +0 -88
  359. package/testdriver-plugin/skills/waiting/SKILL.md +0 -72
  360. package/vitest.config.mjs +0 -29
package/lib/sentry.js CHANGED
@@ -14,6 +14,7 @@ const Sentry = require("@sentry/node");
14
14
  const crypto = require("crypto");
15
15
  const os = require("os");
16
16
  const { version } = require("../package.json");
17
+ const logger = require("../agent/lib/logger");
17
18
 
18
19
  // Store the current session's trace context
19
20
  let currentTraceId = null;
@@ -31,7 +32,7 @@ const isEnabled = () => {
31
32
  };
32
33
 
33
34
  if (isEnabled()) {
34
- console.log("Analytics enabled. Set TD_TELEMETRY=false to disable.");
35
+ logger.log("Analytics enabled. Set TD_TELEMETRY=false to disable.");
35
36
  Sentry.init({
36
37
  dsn:
37
38
  process.env.SENTRY_DSN ||
@@ -174,7 +175,7 @@ function setSessionTraceContext(sessionId) {
174
175
  }
175
176
  } catch (e) {
176
177
  // Ignore errors - propagation context may not be supported
177
- console.log("Could not set propagation context:", e.message);
178
+ logger.log("Could not set propagation context:", e.message);
178
179
  }
179
180
  }
180
181
 
@@ -203,7 +204,7 @@ function attachLogListeners(emitter) {
203
204
 
204
205
  // Check if Sentry.logger is available
205
206
  if (!Sentry.logger) {
206
- console.log("Sentry.logger not available, skipping log listeners");
207
+ logger.log("Sentry.logger not available, skipping log listeners");
207
208
  return;
208
209
  }
209
210
 
@@ -248,6 +248,7 @@ export function TestDriver(context, options = {}) {
248
248
 
249
249
  const testdriver = new TestDriverSDK(apiKey, config);
250
250
  testdriver.__vitestContext = context.task;
251
+ testdriver._debugOnFailure = mergedOptions.debugOnFailure || false;
251
252
  testDriverInstances.set(context.task, testdriver);
252
253
 
253
254
  // Set platform metadata early so the reporter can show the correct OS from the start
@@ -298,29 +299,29 @@ export function TestDriver(context, options = {}) {
298
299
  );
299
300
  }
300
301
 
301
- // Set up console spy using vi.spyOn (test-isolated)
302
- setupConsoleSpy(testdriver, context.task.id);
302
+ // Only set up dashcam-related infrastructure if enabled (default: true)
303
+ if (testdriver.dashcamEnabled) {
304
+ // Set up console spy for dashcam visibility
305
+ setupConsoleSpy(testdriver, context.task.id);
303
306
 
304
- // Create the log file on the remote machine
305
- const shell = testdriver.os === "windows" ? "pwsh" : "sh";
306
- const logPath =
307
- testdriver.os === "windows"
308
- ? "C:\\Users\\testdriver\\Documents\\testdriver.log"
309
- : "/tmp/testdriver.log";
307
+ // Create the log file on the remote machine
308
+ const shell = testdriver.os === "windows" ? "pwsh" : "sh";
309
+ const logPath =
310
+ testdriver.os === "windows"
311
+ ? "C:\\Users\\testdriver\\Documents\\testdriver.log"
312
+ : "/tmp/testdriver.log";
310
313
 
311
- const createLogCmd =
312
- testdriver.os === "windows"
313
- ? `New-Item -ItemType File -Path "${logPath}" -Force | Out-Null`
314
- : `touch ${logPath}`;
314
+ const createLogCmd =
315
+ testdriver.os === "windows"
316
+ ? `New-Item -ItemType File -Path "${logPath}" -Force | Out-Null`
317
+ : `touch ${logPath}`;
315
318
 
316
- await testdriver.exec(shell, createLogCmd, 10000, true);
319
+ await testdriver.exec(shell, createLogCmd, 10000, true);
317
320
 
318
- // Only set up dashcam if enabled (default: true)
319
- if (testdriver.dashcamEnabled) {
320
321
  // Add testdriver log to dashcam tracking
321
322
  await testdriver.dashcam.addFileLog(logPath, "TestDriver Log");
322
323
 
323
- // Start dashcam recording (always, regardless of provision method)
324
+ // Start dashcam recording
324
325
  await testdriver.dashcam.start();
325
326
  }
326
327
  })();
@@ -335,6 +336,59 @@ export function TestDriver(context, options = {}) {
335
336
  return; // Already cleaned up
336
337
  }
337
338
 
339
+ // Check if debug-on-failure mode is enabled and test failed
340
+ const debugOnFailure = currentInstance._debugOnFailure;
341
+ const testFailed = context.task.result?.state === "fail";
342
+
343
+ if (debugOnFailure && testFailed) {
344
+ // Get sandbox ID before we skip cleanup
345
+ const instance = currentInstance.getInstance?.();
346
+ const sandboxId = instance?.sandboxId || instance?.instanceId;
347
+
348
+ console.log("");
349
+ console.log(
350
+ chalk.yellow(
351
+ "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━",
352
+ ),
353
+ );
354
+ console.log(
355
+ chalk.yellow(" DEBUG MODE: Sandbox kept alive for debugging"),
356
+ );
357
+ console.log(
358
+ chalk.yellow(
359
+ "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━",
360
+ ),
361
+ );
362
+ console.log("");
363
+ console.log(" To connect via MCP:");
364
+ console.log(
365
+ chalk.cyan(` session_start({ sandboxId: "${sandboxId}" })`),
366
+ );
367
+ console.log("");
368
+ console.log(chalk.dim(" Sandbox will expire in 5 minutes."));
369
+ console.log(
370
+ chalk.yellow(
371
+ "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━",
372
+ ),
373
+ );
374
+ console.log("");
375
+
376
+ // Still stop dashcam to save the recording
377
+ if (currentInstance._dashcam && currentInstance._dashcam.recording) {
378
+ try {
379
+ await currentInstance.dashcam.stop();
380
+ } catch {
381
+ // Ignore dashcam stop errors in debug mode
382
+ }
383
+ }
384
+
385
+ // Clean up console spies
386
+ cleanupConsoleSpy(currentInstance);
387
+
388
+ // DO NOT disconnect or terminate - keep sandbox alive for debugging
389
+ return;
390
+ }
391
+
338
392
  try {
339
393
  // Ensure meta object exists
340
394
  if (!context.task.meta) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "testdriverai",
3
- "version": "7.2.64",
3
+ "version": "7.2.65",
4
4
  "description": "Next generation autonomous AI agent for end-to-end testing of web & desktop",
5
5
  "main": "sdk.js",
6
6
  "types": "sdk.d.ts",
@@ -30,16 +30,18 @@
30
30
  "./presets": "./lib/presets/index.mjs"
31
31
  },
32
32
  "bin": {
33
- "testdriverai": "bin/testdriverai.js"
33
+ "testdriverai": "bin/testdriverai.js",
34
+ "testdriverai-mcp": "mcp-server/dist/server.js"
34
35
  },
35
36
  "scripts": {
36
37
  "start": "node bin/testdriverai.js",
37
38
  "dev": "DEV=true node bin/testdriverai.js",
38
39
  "debug": "DEV=true VERBOSE=true node bin/testdriverai.js",
39
- "docs": "cd docs && npx mint@latest dev",
40
+ "docs": "npm run docs:skills && cd docs && npx mint@latest dev",
40
41
  "docs:dev": "cd docs && npx mint dev",
41
- "docs:build": "cd docs && npx mint@latest build",
42
+ "docs:build": "npm run docs:skills && cd docs && npx mint@latest build",
42
43
  "docs:links": "node docs/_scripts/link-replacer.js",
44
+ "docs:skills": "node docs/_scripts/generate-skills.js",
43
45
  "bundle": "node build.mjs",
44
46
  "test": "mocha test/*",
45
47
  "test:sdk": "vitest run",
@@ -58,11 +60,14 @@
58
60
  "test-assert": "node index.js run --path=testdriver/acceptance/assert.yaml",
59
61
  "generate-report": "junit-viewer --results=out.xml --save=report.html",
60
62
  "serve-report": "npx http-server . -p 8080 -o report.html",
61
- "report": "npm run generate-report && npm run serve-report"
63
+ "report": "npm run generate-report && npm run serve-report",
64
+ "generate:skills": "node scripts/generate-skills.js"
62
65
  },
63
66
  "author": "",
64
67
  "license": "ISC",
65
68
  "dependencies": {
69
+ "@modelcontextprotocol/ext-apps": "^1.0.0",
70
+ "@modelcontextprotocol/sdk": "^1.24.0",
66
71
  "@npmcli/redact": "^3.2.2",
67
72
  "@oclif/core": "^4.5.0",
68
73
  "@oclif/plugin-commands": "^4.1.28",
@@ -96,7 +101,8 @@
96
101
  "tmp": "^0.2.3",
97
102
  "winston": "^3.13.0",
98
103
  "winston-transport": "^4.9.0",
99
- "ws": "^8.18.1"
104
+ "ws": "^8.18.1",
105
+ "zod": "^3.24.0"
100
106
  },
101
107
  "overrides": {
102
108
  "glob": "^11.0.1",
@@ -124,7 +130,8 @@
124
130
  "mocha": "^10.8.2",
125
131
  "node-addon-api": "^8.0.0",
126
132
  "prettier": "3.3.3",
127
- "vitest": "^4.0.16"
133
+ "testdriverai": "^7.2.60",
134
+ "vitest": "^4.0.18"
128
135
  },
129
136
  "optionalDependencies": {
130
137
  "@esbuild/linux-x64": "^0.21.5"
@@ -137,6 +144,19 @@
137
144
  "@oclif/plugin-*"
138
145
  ],
139
146
  "topicSeparator": " ",
140
- "default": "edit"
141
- }
147
+ "default": "init"
148
+ },
149
+ "files": [
150
+ "agent/",
151
+ "bin/",
152
+ "ai/skills/",
153
+ "ai/agents/",
154
+ "interfaces/",
155
+ "lib/",
156
+ "mcp-server/dist/",
157
+ "sdk.js",
158
+ "sdk.d.ts",
159
+ "index.js",
160
+ "schema.json"
161
+ ]
142
162
  }
package/sdk.d.ts CHANGED
@@ -14,6 +14,13 @@ export type ScrollDirection = "up" | "down" | "left" | "right";
14
14
  export type ScrollMethod = "keyboard" | "mouse";
15
15
  export type TextMatchMethod = "ai" | "turbo";
16
16
  export type ExecLanguage = "js" | "pwsh" | "sh";
17
+ /**
18
+ * Preview mode for live test visualization
19
+ * - "browser": Opens debugger in default browser (default)
20
+ * - "ide": Opens preview in IDE panel (VSCode, Cursor, etc.)
21
+ * - "none": Headless mode, no visual preview
22
+ */
23
+ export type PreviewMode = "browser" | "ide" | "none";
17
24
  export type KeyboardKey =
18
25
  | "\t"
19
26
  | "\n"
@@ -232,7 +239,17 @@ export interface TestDriverOptions {
232
239
  };
233
240
  /** Force creation of a new sandbox (default: true) */
234
241
  newSandbox?: boolean;
235
- /** Run in headless mode (default: false) */
242
+ /**
243
+ * Preview mode for live test visualization (default: "browser")
244
+ * - "browser": Opens debugger in default browser
245
+ * - "ide": Opens preview in IDE panel (VSCode, Cursor, etc.)
246
+ * - "none": Headless mode, no visual preview
247
+ */
248
+ preview?: PreviewMode;
249
+ /**
250
+ * @deprecated Use `preview: "none"` instead. Run in headless mode (default: false)
251
+ * For backward compatibility: headless: true maps to preview: "none"
252
+ */
236
253
  headless?: boolean;
237
254
  /** Direct IP address to connect to a running sandbox instance */
238
255
  ip?: string;
@@ -280,7 +297,17 @@ export interface ConnectOptions {
280
297
  sandboxInstance?: string;
281
298
  /** Operating system for the sandbox (default: 'linux') */
282
299
  os?: "windows" | "linux";
283
- /** Run in headless mode (default: false) */
300
+ /**
301
+ * Preview mode for live test visualization (default: "browser")
302
+ * - "browser": Opens debugger in default browser
303
+ * - "ide": Opens preview in IDE panel (VSCode, Cursor, etc.)
304
+ * - "none": Headless mode, no visual preview
305
+ */
306
+ preview?: PreviewMode;
307
+ /**
308
+ * @deprecated Use `preview: "none"` instead. Run in headless mode (default: false)
309
+ * For backward compatibility: headless: true maps to preview: "none"
310
+ */
284
311
  headless?: boolean;
285
312
  /** Reuse recent connection if available (default: true) */
286
313
  reuseConnection?: boolean;
package/sdk.js CHANGED
@@ -3,6 +3,7 @@ const path = require("path");
3
3
  const os = require("os");
4
4
  const crypto = require("crypto");
5
5
  const { formatter } = require("./sdk-log-formatter");
6
+ const logger = require("./agent/lib/logger");
6
7
 
7
8
  /**
8
9
  * Get the file path of the caller (the file that called TestDriver)
package/.env.example DELETED
@@ -1,4 +0,0 @@
1
- TD_API_KEY=
2
- TD_API_ROOT=
3
-
4
- TWOCAPTCHA_API_KEY=
@@ -1,45 +0,0 @@
1
- name: Scheduled Acceptance Tests (Linux)
2
-
3
- permissions:
4
- id-token: write
5
- contents: read
6
-
7
- on:
8
- schedule:
9
- # Every 6 hours
10
- - cron: "0 */6 * * *"
11
- workflow_dispatch: # Allow manual trigger
12
-
13
- jobs:
14
- test-linux:
15
- runs-on: ubuntu-latest
16
-
17
- steps:
18
- - uses: actions/checkout@v4
19
-
20
- - name: Setup Node.js
21
- uses: actions/setup-node@v4
22
- with:
23
- node-version: "20"
24
- cache: "npm"
25
-
26
- - name: Install dependencies
27
- run: npm ci
28
-
29
- - name: Install Sentry CLI
30
- run: npm install -g @sentry/cli
31
-
32
- - name: Run Linux tests with Sentry Cron monitoring
33
- run: |
34
- sentry-cli monitors run testdriver-linux-acceptance -- npx vitest run examples/*.test.mjs
35
- env:
36
- SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
37
- TD_API_KEY: ${{ secrets.TD_API_KEY }}
38
- TD_OS: linux
39
- TWOCAPTCHA_API_KEY: ${{ secrets.TWOCAPTCHA_API_KEY }}
40
-
41
- - name: Upload test results to Sentry Prevent
42
- if: ${{ !cancelled() }}
43
- uses: getsentry/prevent-action@v0
44
- with:
45
- token: ${{ secrets.SENTRY_PREVENT_TOKEN }}
@@ -1,54 +0,0 @@
1
- name: Scheduled Acceptance Tests (Windows)
2
-
3
- permissions:
4
- id-token: write
5
- contents: read
6
-
7
- on:
8
- schedule:
9
- # Every day at midnight UTC
10
- - cron: "0 0 * * *"
11
- workflow_dispatch: # Allow manual trigger
12
-
13
- jobs:
14
- test-windows:
15
- uses: ./.github/workflows/windows-self-hosted.yaml
16
- secrets:
17
- TD_API_KEY: ${{ secrets.TD_API_KEY }}
18
- TWOCAPTCHA_API_KEY: ${{ secrets.TWOCAPTCHA_API_KEY }}
19
- TD_WEBSITE: ${{ secrets.TD_WEBSITE }}
20
- AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
21
- AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
22
-
23
- sentry-and-publish:
24
- needs: test-windows
25
- runs-on: ubuntu-latest
26
- if: always()
27
-
28
- steps:
29
- - name: Install Sentry CLI
30
- run: npm install -g @sentry/cli
31
-
32
- - name: Report to Sentry Cron
33
- run: |
34
- sentry-cli monitors run testdriver-windows-acceptance -- echo "Windows tests completed"
35
- env:
36
- SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
37
-
38
- - name: Download test results
39
- uses: actions/download-artifact@v4
40
- with:
41
- name: test-results-windows
42
-
43
- - name: Upload test results to Sentry Prevent
44
- if: ${{ !cancelled() }}
45
- uses: getsentry/prevent-action@v0
46
- with:
47
- token: ${{ secrets.SENTRY_PREVENT_TOKEN }}
48
-
49
- - name: Publish Test Results
50
- uses: EnricoMi/publish-unit-test-result-action@v2
51
- if: always()
52
- with:
53
- files: test-report.junit.xml
54
- check_name: Test Results (Windows Scheduled)
@@ -1,87 +0,0 @@
1
- name: Acceptance Tests
2
- permissions:
3
- id-token: write
4
- contents: write
5
- pull-requests: write
6
- checks: write
7
- on:
8
- pull_request:
9
- branches: [main]
10
-
11
- concurrency:
12
- group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
13
- cancel-in-progress: true
14
-
15
- jobs:
16
- test-linux:
17
- runs-on: ubuntu-latest
18
-
19
- steps:
20
- - uses: actions/checkout@v4
21
-
22
- - name: Setup Node.js
23
- uses: actions/setup-node@v4
24
- with:
25
- node-version: "20"
26
- cache: "npm"
27
-
28
- - name: Install dependencies
29
- run: npm ci
30
-
31
- - name: Run Linux tests
32
- run: npx vitest run examples/*.test.mjs
33
- env:
34
- TD_API_KEY: ${{ secrets.TD_API_KEY }}
35
- TWOCAPTCHA_API_KEY: ${{ secrets.TWOCAPTCHA_API_KEY }}
36
- TD_OS: linux
37
-
38
- - name: Upload test results to Sentry Prevent
39
- if: ${{ !cancelled() }}
40
- uses: getsentry/prevent-action@v0
41
- with:
42
- token: ${{ secrets.SENTRY_PREVENT_TOKEN }}
43
-
44
- - name: Publish Test Results
45
- uses: EnricoMi/publish-unit-test-result-action@v2
46
- if: always()
47
- with:
48
- files: test-report.junit.xml
49
- comment_mode: always
50
- check_name: Test Results (Linux)
51
-
52
- test-windows:
53
- if: contains(github.event.pull_request.labels.*.name, 'test-windows')
54
- uses: ./.github/workflows/windows-self-hosted.yaml
55
- with:
56
- test_pattern: "examples/*.test.mjs"
57
- secrets:
58
- TD_API_KEY: ${{ secrets.TD_API_KEY }}
59
- TWOCAPTCHA_API_KEY: ${{ secrets.TWOCAPTCHA_API_KEY }}
60
- TD_WEBSITE: ${{ secrets.TD_WEBSITE }}
61
- AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
62
- AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
63
-
64
- publish-windows-results:
65
- needs: test-windows
66
- runs-on: ubuntu-latest
67
- if: always() && contains(github.event.pull_request.labels.*.name, 'test-windows')
68
-
69
- steps:
70
- - name: Download test results
71
- uses: actions/download-artifact@v4
72
- with:
73
- name: test-results-windows
74
-
75
- - name: Upload test results to Sentry Prevent
76
- if: ${{ !cancelled() }}
77
- uses: getsentry/prevent-action@v0
78
- with:
79
- token: ${{ secrets.SENTRY_PREVENT_TOKEN }}
80
-
81
- - name: Publish Test Results
82
- uses: EnricoMi/publish-unit-test-result-action@v2
83
- if: always()
84
- with:
85
- files: test-report.junit.xml
86
- comment_mode: always
87
- check_name: Test Results (Windows)
@@ -1,68 +0,0 @@
1
- name: Publish
2
- permissions:
3
- contents: write
4
- id-token: write # Required for OIDC
5
- on:
6
- push:
7
- branches: [main]
8
-
9
- jobs:
10
- publish:
11
- runs-on: ubuntu-latest
12
-
13
- steps:
14
- - uses: actions/checkout@v4
15
- with:
16
- fetch-depth: 0
17
- token: ${{ secrets.GITHUB_TOKEN }}
18
-
19
- - name: Setup Node.js
20
- uses: actions/setup-node@v4
21
- with:
22
- node-version: "20"
23
- registry-url: "https://registry.npmjs.org/"
24
-
25
- - name: Configure Git
26
- run: |
27
- git config user.name "github-actions[bot]"
28
- git config user.email "github-actions[bot]@users.noreply.github.com"
29
-
30
- - name: Install dependencies
31
- run: npm ci
32
-
33
- - name: Bump version (patch)
34
- run: npm version patch --no-git-tag-version
35
-
36
- - name: Generate Changelog
37
- run: |
38
- npx conventional-changelog-cli -p angular -i CHANGELOG.md -s
39
- git add CHANGELOG.md
40
-
41
- - name: Commit and push version bump
42
- run: |
43
- git add package.json package-lock.json
44
- VERSION=$(node -p "require('./package.json').version")
45
- git commit -m "chore(release): ${VERSION}"
46
- git tag "v${VERSION}"
47
- git push origin main
48
- git push origin "v${VERSION}"
49
- echo "VERSION=${VERSION}" >> $GITHUB_ENV
50
-
51
- - name: Create GitHub Release
52
- uses: softprops/action-gh-release@v1
53
- with:
54
- tag_name: v${{ env.VERSION }}
55
- generate_release_notes: true
56
- prerelease: false
57
-
58
- - name: Debug NPM Token
59
- run: |
60
- echo "NPM_TOKEN is set: ${{ secrets.NPM_TOKEN != '' }}"
61
- echo "NPM_TOKEN first 4 chars: ${NPM_TOKEN:0:4}..."
62
- env:
63
- NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
64
-
65
- - name: Publish to npm
66
- run: npm publish --tag beta
67
- env:
68
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}