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
@@ -1,164 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- const fs = require("fs");
4
- const path = require("path");
5
-
6
- /**
7
- * Script to replace command references in Mintlify docs with proper links
8
- *
9
- * This script finds instances of command names like `hover-text`, `wait-for-text`, etc.
10
- * and replaces them with proper Mintlify links to their documentation pages.
11
- */
12
-
13
- // Get all command files from the commands directory
14
- function getCommandNames() {
15
- const commandsDir = path.join(__dirname, "../", "commands");
16
-
17
- if (!fs.existsSync(commandsDir)) {
18
- console.error("Commands directory not found:", commandsDir);
19
- process.exit(1);
20
- }
21
-
22
- const files = fs.readdirSync(commandsDir);
23
- const commands = files
24
- .filter((file) => file.endsWith(".mdx"))
25
- .map((file) => file.replace(".mdx", ""));
26
-
27
- console.log("Found commands:", commands);
28
- return commands;
29
- }
30
-
31
- // Process a single file
32
- function processFile(filePath, commands) {
33
- const content = fs.readFileSync(filePath, "utf-8");
34
- let modified = content;
35
- let changes = 0;
36
-
37
- commands.forEach((command) => {
38
- // Create regex pattern to match `command-name` but not already linked commands
39
- // This pattern looks for backtick-wrapped command names that are NOT:
40
- // 1. Already inside a link: [` or preceded by ]( or ](/
41
- // 2. Part of an existing link structure
42
- const pattern = new RegExp(
43
- `(?<!\\[)\`(${command.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&")})\`(?!\\]\\(|\\)\\]|\\]\\(/commands/)`,
44
- "g",
45
- );
46
-
47
- const replacement = `[\`$1\`](/commands/$1)`;
48
- const newContent = modified.replace(pattern, replacement);
49
-
50
- if (newContent !== modified) {
51
- const matchCount = (modified.match(pattern) || []).length;
52
- console.log(` - Replaced ${matchCount} instances of \`${command}\``);
53
- changes += matchCount;
54
- modified = newContent;
55
- }
56
- });
57
-
58
- return { content: modified, changes };
59
- }
60
-
61
- // Process all .mdx files in a directory recursively
62
- function processDirectory(dirPath, commands, exclude = []) {
63
- const items = fs.readdirSync(dirPath);
64
- let totalChanges = 0;
65
-
66
- items.forEach((item) => {
67
- const itemPath = path.join(dirPath, item);
68
- const relativePath = path.relative(process.cwd(), itemPath);
69
-
70
- // Skip excluded directories
71
- if (exclude.some((ex) => relativePath.includes(ex))) {
72
- return;
73
- }
74
-
75
- const stat = fs.statSync(itemPath);
76
-
77
- if (stat.isDirectory()) {
78
- totalChanges += processDirectory(itemPath, commands, exclude);
79
- } else if (item.endsWith(".mdx")) {
80
- console.log(`Processing: ${relativePath}`);
81
- const result = processFile(itemPath, commands);
82
-
83
- if (result.changes > 0) {
84
- fs.writeFileSync(itemPath, result.content, "utf-8");
85
- console.log(` ✅ Updated with ${result.changes} changes`);
86
- totalChanges += result.changes;
87
- } else {
88
- console.log(` ⏭️ No changes needed`);
89
- }
90
- }
91
- });
92
-
93
- return totalChanges;
94
- }
95
-
96
- // Main function
97
- function main() {
98
- console.log("🚀 Starting TestDriver AI docs link replacer...\n");
99
-
100
- // Get command names from the commands directory
101
- const commands = getCommandNames();
102
-
103
- if (commands.length === 0) {
104
- console.log("No commands found. Exiting.");
105
- return;
106
- }
107
-
108
- console.log(`\n📝 Processing documentation files...\n`);
109
-
110
- // Process all .mdx files in the docs directory, excluding the commands directory itself
111
- const docsDir = path.join(__dirname, "../");
112
- const exclude = ["commands"]; // Don't modify the command docs themselves
113
-
114
- const totalChanges = processDirectory(docsDir, commands, exclude);
115
-
116
- console.log(`\n✨ Complete! Made ${totalChanges} total replacements.`);
117
-
118
- if (totalChanges > 0) {
119
- console.log("\n📋 Summary:");
120
- console.log(
121
- "- Command references like `hover-text` have been replaced with [`hover-text`](/commands/hover-text)",
122
- );
123
- console.log("- Only changed files that needed updates");
124
- console.log(
125
- "- Excluded the /commands directory to avoid self-referencing issues",
126
- );
127
- console.log("\nYou may want to review the changes before committing.");
128
- } else {
129
- console.log("\n🎉 All files are already properly linked!");
130
- }
131
- }
132
-
133
- // Handle command line arguments
134
- if (process.argv.includes("--help") || process.argv.includes("-h")) {
135
- console.log(`
136
- TestDriver AI Documentation Link Replacer
137
-
138
- Usage: node link-replacer.js [options]
139
-
140
- Options:
141
- --help, -h Show this help message
142
- --dry-run Show what would be changed without making actual changes (TODO)
143
-
144
- Description:
145
- This script finds command references like \`hover-text\` in your Mintlify
146
- documentation and replaces them with proper links to the command reference
147
- pages like [\`hover-text\`](/commands/hover-text).
148
-
149
- The script:
150
- - Scans all .mdx files in the /docs directory
151
- - Excludes the /commands directory to avoid self-references
152
- - Only replaces \`command-name\` patterns that aren't already linked
153
- - Preserves existing links and formatting
154
- `);
155
- process.exit(0);
156
- }
157
-
158
- // Run the script
159
- try {
160
- main();
161
- } catch (error) {
162
- console.error("❌ Error:", error.message);
163
- process.exit(1);
164
- }
@@ -1,284 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- const fs = require("fs");
4
- const path = require("path");
5
- const OpenAI = require("openai");
6
- const { glob } = require("glob");
7
-
8
- // Configuration
9
- const DOCS_DIR = path.join(__dirname, "docs");
10
- const OPENAI_API_KEY = process.env.OPENAI_API_KEY;
11
- const VECTOR_STORE_NAME = "testdriverai-docs";
12
-
13
- if (!OPENAI_API_KEY) {
14
- console.error("Error: OPENAI_API_KEY environment variable is required");
15
- process.exit(1);
16
- }
17
-
18
- // Initialize OpenAI client
19
- const openai = new OpenAI({
20
- apiKey: OPENAI_API_KEY,
21
- });
22
-
23
- /**
24
- * Parse MDX file to extract frontmatter and content
25
- */
26
- function parseMdxFile(filePath) {
27
- const content = fs.readFileSync(filePath, "utf8");
28
-
29
- // Extract frontmatter
30
- const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
31
-
32
- if (!frontmatterMatch) {
33
- return {
34
- metadata: {},
35
- content: content,
36
- title: path.basename(filePath, ".mdx"),
37
- filePath: path.relative(DOCS_DIR, filePath),
38
- };
39
- }
40
-
41
- const frontmatter = frontmatterMatch[1];
42
- const mainContent = frontmatterMatch[2];
43
-
44
- // Parse frontmatter (simple YAML-like parsing)
45
- const metadata = {};
46
- frontmatter.split("\n").forEach((line) => {
47
- const match = line.match(/^([^:]+):\s*"?([^"]*)"?$/);
48
- if (match) {
49
- metadata[match[1].trim()] = match[2].trim();
50
- }
51
- });
52
-
53
- return {
54
- metadata,
55
- content: mainContent,
56
- title: metadata.title || path.basename(filePath, ".mdx"),
57
- filePath: path.relative(DOCS_DIR, filePath),
58
- };
59
- }
60
-
61
- /**
62
- * Get all MDX files in the docs directory
63
- */
64
- async function getAllMdxFiles() {
65
- const pattern = path.join(DOCS_DIR, "**/*.mdx");
66
- const files = await glob(pattern);
67
- return files;
68
- }
69
-
70
- /**
71
- * Create a vector store
72
- */
73
- async function createVectorStore() {
74
- try {
75
- const vectorStore = await openai.vectorStores.create({
76
- name: VECTOR_STORE_NAME,
77
- expires_after: {
78
- anchor: "last_active_at",
79
- days: 365,
80
- },
81
- });
82
-
83
- console.log(`✅ Created vector store: ${vectorStore.id}`);
84
- return vectorStore;
85
- } catch (error) {
86
- console.error("Error creating vector store:", error);
87
- throw error;
88
- }
89
- }
90
-
91
- /**
92
- * Upload a single file to the vector store
93
- */
94
- async function uploadSingleFile(vectorStoreId, file) {
95
- try {
96
- console.log(`📁 Processing: ${file.filePath}`);
97
-
98
- // Create a temporary file with processed content
99
- const tempFilePath = `/tmp/testdriverai-${Date.now()}-${Math.random()}-${path.basename(file.filePath)}.txt`;
100
-
101
- // Format the content for better vector search
102
- const formattedContent = `Title: ${file.title}
103
- File: ${file.filePath}
104
- ${file.metadata.description ? `Description: ${file.metadata.description}` : ""}
105
- ${file.metadata.sidebarTitle ? `Sidebar Title: ${file.metadata.sidebarTitle}` : ""}
106
-
107
- ${file.content}`;
108
-
109
- fs.writeFileSync(tempFilePath, formattedContent);
110
-
111
- // Upload to OpenAI and add to vector store
112
- const vectorStoreFile = await openai.vectorStores.files.createAndPoll(
113
- vectorStoreId,
114
- {
115
- file_id: (
116
- await openai.files.create({
117
- file: fs.createReadStream(tempFilePath),
118
- purpose: "assistants",
119
- })
120
- ).id,
121
- },
122
- );
123
-
124
- // Clean up temp file
125
- fs.unlinkSync(tempFilePath);
126
-
127
- console.log(`✅ Uploaded: ${file.title} (${vectorStoreFile.id})`);
128
-
129
- return {
130
- vectorStoreFileId: vectorStoreFile.id,
131
- originalPath: file.filePath,
132
- title: file.title,
133
- };
134
- } catch (error) {
135
- console.error(`❌ Error uploading ${file.filePath}:`, error);
136
- return null;
137
- }
138
- }
139
-
140
- /**
141
- * Upload files to the vector store in parallel
142
- */
143
- async function uploadFilesToVectorStore(vectorStoreId, files) {
144
- console.log(`📤 Uploading ${files.length} files in parallel...`);
145
-
146
- // Process files in parallel with a concurrency limit
147
- const BATCH_SIZE = 10; // Process 10 files at a time to avoid overwhelming the API
148
- const uploadedFiles = [];
149
-
150
- for (let i = 0; i < files.length; i += BATCH_SIZE) {
151
- const batch = files.slice(i, i + BATCH_SIZE);
152
- console.log(
153
- `Processing batch ${Math.floor(i / BATCH_SIZE) + 1}/${Math.ceil(files.length / BATCH_SIZE)} (${batch.length} files)`,
154
- );
155
-
156
- const batchPromises = batch.map((file) =>
157
- uploadSingleFile(vectorStoreId, file),
158
- );
159
- const batchResults = await Promise.all(batchPromises);
160
-
161
- // Filter out failed uploads (null results)
162
- const successfulUploads = batchResults.filter((result) => result !== null);
163
- uploadedFiles.push(...successfulUploads);
164
-
165
- console.log(
166
- `✅ Batch complete: ${successfulUploads.length}/${batch.length} files uploaded successfully`,
167
- );
168
- }
169
-
170
- return uploadedFiles;
171
- }
172
-
173
- /**
174
- * Wait for vector store to be ready
175
- */
176
- async function waitForVectorStoreReady(vectorStoreId) {
177
- console.log("⏳ Waiting for vector store to process files...");
178
-
179
- let attempts = 0;
180
- const maxAttempts = 30;
181
-
182
- while (attempts < maxAttempts) {
183
- try {
184
- const vectorStore = await openai.vectorStores.retrieve(vectorStoreId);
185
-
186
- if (vectorStore.status === "completed") {
187
- console.log("✅ Vector store is ready!");
188
- return vectorStore;
189
- }
190
-
191
- if (vectorStore.status === "failed") {
192
- throw new Error("Vector store processing failed");
193
- }
194
-
195
- console.log(
196
- `⏳ Status: ${vectorStore.status}, Files: ${vectorStore.file_counts.completed}/${vectorStore.file_counts.total}`,
197
- );
198
-
199
- await new Promise((resolve) => setTimeout(resolve, 2000));
200
- attempts++;
201
- } catch (error) {
202
- console.error("Error checking vector store status:", error);
203
- attempts++;
204
- await new Promise((resolve) => setTimeout(resolve, 2000));
205
- }
206
- }
207
-
208
- throw new Error("Timeout waiting for vector store to be ready");
209
- }
210
-
211
- /**
212
- * Main function
213
- */
214
- async function main() {
215
- try {
216
- console.log(
217
- "🚀 Starting TestDriver.ai docs upload to OpenAI Vector Store...\n",
218
- );
219
-
220
- // Get all MDX files
221
- console.log("📂 Finding MDX files...");
222
- const mdxFilePaths = await getAllMdxFiles();
223
- console.log(`Found ${mdxFilePaths.length} MDX files\n`);
224
-
225
- // Parse all MDX files
226
- console.log("📝 Parsing MDX files...");
227
- const parsedFiles = mdxFilePaths.map((filePath) => parseMdxFile(filePath));
228
- console.log(`Parsed ${parsedFiles.length} files\n`);
229
-
230
- // Create vector store
231
- console.log("🗂️ Creating vector store...");
232
- const vectorStore = await createVectorStore();
233
- console.log("");
234
-
235
- // Upload files to vector store
236
- console.log("📤 Uploading files to OpenAI Vector Store...");
237
- const uploadedFiles = await uploadFilesToVectorStore(
238
- vectorStore.id,
239
- parsedFiles,
240
- );
241
- console.log("");
242
-
243
- // Wait for processing
244
- await waitForVectorStoreReady(vectorStore.id);
245
-
246
- console.log("\n🎉 Upload complete!");
247
- console.log(`Vector Store ID: ${vectorStore.id}`);
248
- console.log(`Files uploaded: ${uploadedFiles.length}`);
249
- console.log(
250
- "\nYou can now use this vector store ID in your OpenAI Assistant or for retrieval.",
251
- );
252
-
253
- // Save results to file
254
- const results = {
255
- vectorStoreId: vectorStore.id,
256
- uploadedFiles: uploadedFiles,
257
- timestamp: new Date().toISOString(),
258
- };
259
-
260
- fs.writeFileSync(
261
- path.join(__dirname, "openai-vector-store-results.json"),
262
- JSON.stringify(results, null, 2),
263
- );
264
-
265
- console.log("\n📄 Results saved to openai-vector-store-results.json");
266
- } catch (error) {
267
- console.error("\n❌ Error:", error);
268
- process.exit(1);
269
- }
270
- }
271
-
272
- // Run the script
273
- if (require.main === module) {
274
- main();
275
- }
276
-
277
- module.exports = {
278
- main,
279
- parseMdxFile,
280
- getAllMdxFiles,
281
- createVectorStore,
282
- uploadSingleFile,
283
- uploadFilesToVectorStore,
284
- };