testdriverai 7.2.64 → 7.2.69

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 (369) 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/mcp-server/dist/codegen.d.ts +9 -0
  54. package/mcp-server/dist/codegen.js +165 -0
  55. package/mcp-server/dist/mcp-app.html +114 -0
  56. package/mcp-server/dist/provision-types.d.ts +290 -0
  57. package/mcp-server/dist/provision-types.js +174 -0
  58. package/mcp-server/dist/server.d.ts +6 -0
  59. package/mcp-server/dist/server.js +1441 -0
  60. package/mcp-server/dist/session.d.ts +85 -0
  61. package/mcp-server/dist/session.js +152 -0
  62. package/package.json +30 -9
  63. package/sdk.d.ts +29 -2
  64. package/sdk.js +1 -0
  65. package/.env.example +0 -4
  66. package/.github/workflows/acceptance-linux-scheduled.yaml +0 -45
  67. package/.github/workflows/acceptance-windows-scheduled.yaml +0 -54
  68. package/.github/workflows/acceptance.yaml +0 -87
  69. package/.github/workflows/publish.yaml +0 -68
  70. package/.github/workflows/test-init.yml +0 -145
  71. package/.github/workflows/testdriver.yml +0 -170
  72. package/.github/workflows/windows-self-hosted.yaml +0 -82
  73. package/.prettierignore +0 -4
  74. package/.prettierrc +0 -1
  75. package/CHANGELOG.md +0 -34
  76. package/agents.md +0 -455
  77. package/debugger/bg.png +0 -0
  78. package/debugger/icon.png +0 -0
  79. package/debugger/index.html +0 -797
  80. package/debugger/td.png +0 -0
  81. package/debugger/tray-buffered.png +0 -0
  82. package/debugger/tray.png +0 -0
  83. package/docs/GITHUB_COMMENTS.md +0 -330
  84. package/docs/GITHUB_COMMENTS_ANNOUNCEMENT.md +0 -167
  85. package/docs/QUICK-START-GITHUB-COMMENTS.md +0 -84
  86. package/docs/TEST-GITHUB-COMMENTS.md +0 -129
  87. package/docs/_scripts/link-replacer.js +0 -164
  88. package/docs/_scripts/upload-docs-to-openai.js +0 -284
  89. package/docs/docs.json +0 -393
  90. package/docs/github-integration-setup.md +0 -266
  91. package/docs/guide/best-practices-polling.mdx +0 -154
  92. package/docs/images/content/account/newprojectsettings.png +0 -0
  93. package/docs/images/content/account/projectpage.png +0 -0
  94. package/docs/images/content/account/projectreplays.png +0 -0
  95. package/docs/images/content/account/team-manage.png +0 -0
  96. package/docs/images/content/account/teampage.png +0 -0
  97. package/docs/images/content/extension/cursor.svg +0 -1
  98. package/docs/images/content/extension/vscode.svg +0 -57
  99. package/docs/images/content/extension/windsurf.svg +0 -3
  100. package/docs/images/content/self-hosted/launchtemplateid.png +0 -0
  101. package/docs/images/content/side-by-side.png +0 -0
  102. package/docs/images/content/vscode/ide-full.png +0 -0
  103. package/docs/images/content/vscode/running.png +0 -0
  104. package/docs/images/content/vscode/vscode-2-assert.png +0 -0
  105. package/docs/images/content/vscode/vscode-agent-preview.png +0 -0
  106. package/docs/images/content/vscode/vscode-copilot-ask.png +0 -0
  107. package/docs/images/content/vscode/vscode-file-creation.png +0 -0
  108. package/docs/images/content/vscode/vscode-install.png +0 -0
  109. package/docs/images/content/vscode/vscode-overview.png +0 -0
  110. package/docs/images/content/vscode/vscode-setup-walkthrough.png +0 -0
  111. package/docs/images/content/vscode/vscode-stopchat.png +0 -0
  112. package/docs/images/content/vscode/vscode-stoptest.png +0 -0
  113. package/docs/images/content/vscode/vscode-tdservice.png +0 -0
  114. package/docs/images/content/vscode/vscode-test-output.png +0 -0
  115. package/docs/images/content/vscode/vscode-testhistory.png +0 -0
  116. package/docs/images/content/vscode/vscode-testpane-runtests.png +0 -0
  117. package/docs/images/content/vscode/vscode-testpane.png +0 -0
  118. package/docs/images/template/dark.png +0 -0
  119. package/docs/images/template/icon.png +0 -0
  120. package/docs/images/template/light.png +0 -0
  121. package/docs/snippets/calendar-link.mdx +0 -4
  122. package/docs/snippets/gitignore-warning.mdx +0 -7
  123. package/docs/snippets/lifecycle-warning.mdx +0 -6
  124. package/docs/snippets/test-prereqs.mdx +0 -12
  125. package/docs/snippets/tests/assert-replay.mdx +0 -7
  126. package/docs/snippets/tests/assert-yaml.mdx +0 -8
  127. package/docs/snippets/tests/exec-js-replay.mdx +0 -7
  128. package/docs/snippets/tests/exec-js-yaml.mdx +0 -32
  129. package/docs/snippets/tests/exec-shell-replay.mdx +0 -7
  130. package/docs/snippets/tests/exec-shell-yaml.mdx +0 -15
  131. package/docs/snippets/tests/hover-image-replay.mdx +0 -7
  132. package/docs/snippets/tests/hover-image-yaml.mdx +0 -17
  133. package/docs/snippets/tests/hover-text-replay.mdx +0 -7
  134. package/docs/snippets/tests/hover-text-with-description-replay.mdx +0 -7
  135. package/docs/snippets/tests/hover-text-with-description-yaml.mdx +0 -24
  136. package/docs/snippets/tests/hover-text-yaml.mdx +0 -14
  137. package/docs/snippets/tests/match-image-replay.mdx +0 -7
  138. package/docs/snippets/tests/match-image-yaml.mdx +0 -17
  139. package/docs/snippets/tests/press-keys-replay.mdx +0 -7
  140. package/docs/snippets/tests/press-keys-yaml.mdx +0 -36
  141. package/docs/snippets/tests/remember-replay.mdx +0 -7
  142. package/docs/snippets/tests/remember-yaml.mdx +0 -28
  143. package/docs/snippets/tests/scroll-replay.mdx +0 -7
  144. package/docs/snippets/tests/scroll-until-image-replay.mdx +0 -7
  145. package/docs/snippets/tests/scroll-until-image-yaml.mdx +0 -14
  146. package/docs/snippets/tests/scroll-until-text-replay.mdx +0 -7
  147. package/docs/snippets/tests/scroll-until-text-yaml.mdx +0 -17
  148. package/docs/snippets/tests/scroll-yaml.mdx +0 -30
  149. package/docs/snippets/tests/type-repeated-replay.mdx +0 -7
  150. package/docs/snippets/tests/type-repeated-yaml.mdx +0 -22
  151. package/docs/snippets/tests/type-replay.mdx +0 -7
  152. package/docs/snippets/tests/type-yaml.mdx +0 -28
  153. package/docs/snippets/tests/wait-for-image-replay.mdx +0 -7
  154. package/docs/snippets/tests/wait-for-image-yaml.mdx +0 -18
  155. package/docs/snippets/tests/wait-for-text-replay.mdx +0 -7
  156. package/docs/snippets/tests/wait-for-text-yaml.mdx +0 -18
  157. package/docs/snippets/tests/wait-replay.mdx +0 -7
  158. package/docs/snippets/tests/wait-yaml.mdx +0 -13
  159. package/docs/styles.css +0 -65
  160. package/docs/v6/account/dashboard.mdx +0 -16
  161. package/docs/v6/account/enterprise.mdx +0 -110
  162. package/docs/v6/account/pricing.mdx +0 -33
  163. package/docs/v6/account/projects.mdx +0 -33
  164. package/docs/v6/account/team.mdx +0 -35
  165. package/docs/v6/action/ami.mdx +0 -109
  166. package/docs/v6/action/performance.mdx +0 -105
  167. package/docs/v6/action/secrets.mdx +0 -93
  168. package/docs/v6/apps/chrome-extensions.mdx +0 -48
  169. package/docs/v6/apps/desktop-apps.mdx +0 -93
  170. package/docs/v6/apps/mobile-apps.mdx +0 -26
  171. package/docs/v6/apps/static-websites.mdx +0 -54
  172. package/docs/v6/apps/tauri-apps.mdx +0 -361
  173. package/docs/v6/bugs/jira.mdx +0 -232
  174. package/docs/v6/cli/overview.mdx +0 -66
  175. package/docs/v6/commands/assert.mdx +0 -45
  176. package/docs/v6/commands/exec.mdx +0 -282
  177. package/docs/v6/commands/focus-application.mdx +0 -44
  178. package/docs/v6/commands/hover-image.mdx +0 -69
  179. package/docs/v6/commands/hover-text.mdx +0 -47
  180. package/docs/v6/commands/if.mdx +0 -53
  181. package/docs/v6/commands/match-image.mdx +0 -67
  182. package/docs/v6/commands/press-keys.mdx +0 -87
  183. package/docs/v6/commands/remember.mdx +0 -49
  184. package/docs/v6/commands/run.mdx +0 -44
  185. package/docs/v6/commands/scroll-until-image.mdx +0 -66
  186. package/docs/v6/commands/scroll-until-text.mdx +0 -60
  187. package/docs/v6/commands/scroll.mdx +0 -69
  188. package/docs/v6/commands/type.mdx +0 -45
  189. package/docs/v6/commands/wait-for-image.mdx +0 -54
  190. package/docs/v6/commands/wait-for-text.mdx +0 -48
  191. package/docs/v6/commands/wait.mdx +0 -45
  192. package/docs/v6/exporting/junit.mdx +0 -218
  193. package/docs/v6/exporting/playwright.mdx +0 -197
  194. package/docs/v6/features/auto-healing.mdx +0 -144
  195. package/docs/v6/features/generation.mdx +0 -116
  196. package/docs/v6/features/parallel-testing.mdx +0 -151
  197. package/docs/v6/features/reusable-snippets.mdx +0 -131
  198. package/docs/v6/features/selectorless.mdx +0 -80
  199. package/docs/v6/features/visual-assertions.mdx +0 -139
  200. package/docs/v6/getting-started/ci.mdx +0 -146
  201. package/docs/v6/getting-started/cli.mdx +0 -91
  202. package/docs/v6/getting-started/editing.mdx +0 -100
  203. package/docs/v6/getting-started/playwright.mdx +0 -342
  204. package/docs/v6/getting-started/running.mdx +0 -48
  205. package/docs/v6/getting-started/self-hosting.mdx +0 -408
  206. package/docs/v6/getting-started/vscode.mdx +0 -89
  207. package/docs/v6/guide/assertions.mdx +0 -189
  208. package/docs/v6/guide/authentication.mdx +0 -136
  209. package/docs/v6/guide/code.mdx +0 -65
  210. package/docs/v6/guide/dashcam.mdx +0 -118
  211. package/docs/v6/guide/environment-variables.mdx +0 -26
  212. package/docs/v6/guide/lifecycle.mdx +0 -242
  213. package/docs/v6/guide/locating.mdx +0 -141
  214. package/docs/v6/guide/protips.mdx +0 -43
  215. package/docs/v6/guide/variables.mdx +0 -143
  216. package/docs/v6/guide/waiting.mdx +0 -130
  217. package/docs/v6/importing/csv.mdx +0 -196
  218. package/docs/v6/importing/gherkin.mdx +0 -143
  219. package/docs/v6/importing/jira.mdx +0 -164
  220. package/docs/v6/importing/testrail.mdx +0 -162
  221. package/docs/v6/integrations/electron.mdx +0 -146
  222. package/docs/v6/integrations/netlify.mdx +0 -100
  223. package/docs/v6/integrations/vercel.mdx +0 -125
  224. package/docs/v6/interactive/explore.mdx +0 -99
  225. package/docs/v6/interactive/run.mdx +0 -52
  226. package/docs/v6/interactive/save.mdx +0 -63
  227. package/docs/v6/overview/comparison.mdx +0 -101
  228. package/docs/v6/overview/faq.mdx +0 -162
  229. package/docs/v6/overview/performance.mdx +0 -52
  230. package/docs/v6/overview/quickstart.mdx +0 -137
  231. package/docs/v6/overview/what-is-testdriver.mdx +0 -85
  232. package/docs/v6/scenarios/ai-chatbot.mdx +0 -28
  233. package/docs/v6/scenarios/cookie-banner.mdx +0 -32
  234. package/docs/v6/scenarios/file-upload.mdx +0 -33
  235. package/docs/v6/scenarios/form-filling.mdx +0 -32
  236. package/docs/v6/scenarios/log-in.mdx +0 -75
  237. package/docs/v6/scenarios/pdf-generation.mdx +0 -25
  238. package/docs/v6/scenarios/spell-check.mdx +0 -22
  239. package/docs/v6/security/action.mdx +0 -84
  240. package/docs/v6/security/agent.mdx +0 -73
  241. package/docs/v6/security/platform.mdx +0 -77
  242. package/docs/v6/tutorials/advanced-test.mdx +0 -81
  243. package/docs/v6/tutorials/basic-test.mdx +0 -45
  244. package/docs/v7/_drafts/agents.mdx +0 -852
  245. package/docs/v7/_drafts/architecture.mdx +0 -399
  246. package/docs/v7/_drafts/auto-cache-key.mdx +0 -167
  247. package/docs/v7/_drafts/awesome-logs-quick-ref.mdx +0 -100
  248. package/docs/v7/_drafts/best-practices.mdx +0 -486
  249. package/docs/v7/_drafts/caching-ai.mdx +0 -215
  250. package/docs/v7/_drafts/caching-selectors.mdx +0 -424
  251. package/docs/v7/_drafts/caching.mdx +0 -366
  252. package/docs/v7/_drafts/cli-to-sdk-migration.mdx +0 -425
  253. package/docs/v7/_drafts/commands/assert.mdx +0 -45
  254. package/docs/v7/_drafts/commands/exec.mdx +0 -282
  255. package/docs/v7/_drafts/commands/focus-application.mdx +0 -44
  256. package/docs/v7/_drafts/commands/hover-image.mdx +0 -69
  257. package/docs/v7/_drafts/commands/hover-text.mdx +0 -47
  258. package/docs/v7/_drafts/commands/if.mdx +0 -53
  259. package/docs/v7/_drafts/commands/match-image.mdx +0 -67
  260. package/docs/v7/_drafts/commands/press-keys.mdx +0 -87
  261. package/docs/v7/_drafts/commands/remember.mdx +0 -49
  262. package/docs/v7/_drafts/commands/run.mdx +0 -44
  263. package/docs/v7/_drafts/commands/scroll-until-image.mdx +0 -66
  264. package/docs/v7/_drafts/commands/scroll-until-text.mdx +0 -60
  265. package/docs/v7/_drafts/commands/scroll.mdx +0 -69
  266. package/docs/v7/_drafts/commands/type.mdx +0 -45
  267. package/docs/v7/_drafts/commands/wait-for-image.mdx +0 -54
  268. package/docs/v7/_drafts/commands/wait-for-text.mdx +0 -48
  269. package/docs/v7/_drafts/commands/wait.mdx +0 -45
  270. package/docs/v7/_drafts/configuration.mdx +0 -378
  271. package/docs/v7/_drafts/contributing.mdx +0 -174
  272. package/docs/v7/_drafts/core.mdx +0 -458
  273. package/docs/v7/_drafts/dashcam-title-feature.mdx +0 -89
  274. package/docs/v7/_drafts/debugging.mdx +0 -349
  275. package/docs/v7/_drafts/error-handling.mdx +0 -501
  276. package/docs/v7/_drafts/faq.mdx +0 -393
  277. package/docs/v7/_drafts/hooks.mdx +0 -360
  278. package/docs/v7/_drafts/init-command.mdx +0 -95
  279. package/docs/v7/_drafts/installation.mdx +0 -420
  280. package/docs/v7/_drafts/migration.mdx +0 -562
  281. package/docs/v7/_drafts/observable.mdx +0 -604
  282. package/docs/v7/_drafts/playwright.mdx +0 -342
  283. package/docs/v7/_drafts/plugin-migration.mdx +0 -220
  284. package/docs/v7/_drafts/powerful.mdx +0 -419
  285. package/docs/v7/_drafts/presets.mdx +0 -210
  286. package/docs/v7/_drafts/progressive-disclosure.mdx +0 -230
  287. package/docs/v7/_drafts/prompt-cache.mdx +0 -200
  288. package/docs/v7/_drafts/provision.mdx +0 -390
  289. package/docs/v7/_drafts/quick-start-test-recording.mdx +0 -214
  290. package/docs/v7/_drafts/readme.mdx +0 -135
  291. package/docs/v7/_drafts/reports.mdx +0 -414
  292. package/docs/v7/_drafts/scalable.mdx +0 -754
  293. package/docs/v7/_drafts/screenshot.mdx +0 -155
  294. package/docs/v7/_drafts/sdk-awesome-logs.mdx +0 -468
  295. package/docs/v7/_drafts/sdk-browser-rendering.mdx +0 -167
  296. package/docs/v7/_drafts/sdk-migration.mdx +0 -474
  297. package/docs/v7/_drafts/sdk-v7-complete.mdx +0 -345
  298. package/docs/v7/_drafts/self-hosting.mdx +0 -369
  299. package/docs/v7/_drafts/test-recording.mdx +0 -382
  300. package/docs/v7/_drafts/troubleshooting.mdx +0 -526
  301. package/docs/v7/_drafts/vitest-plugin.mdx +0 -477
  302. package/docs/v7/_drafts/vitest.mdx +0 -535
  303. package/docs/v7/_drafts/writing-tests.mdx +0 -25
  304. package/docs/v7/examples.mdx +0 -5
  305. package/eslint.config.js +0 -67
  306. package/examples/ai.test.mjs +0 -30
  307. package/examples/assert.test.mjs +0 -46
  308. package/examples/captcha-api.test.mjs +0 -50
  309. package/examples/chrome-extension.test.mjs +0 -94
  310. package/examples/drag-and-drop.test.mjs +0 -58
  311. package/examples/element-not-found.test.mjs +0 -26
  312. package/examples/exec-output.test.mjs +0 -59
  313. package/examples/exec-pwsh.test.mjs +0 -57
  314. package/examples/focus-window.test.mjs +0 -36
  315. package/examples/formatted-logging.test.mjs +0 -26
  316. package/examples/hover-image.test.mjs +0 -52
  317. package/examples/hover-text-with-description.test.mjs +0 -56
  318. package/examples/hover-text.test.mjs +0 -27
  319. package/examples/installer.test.mjs +0 -49
  320. package/examples/launch-vscode-linux.test.mjs +0 -54
  321. package/examples/match-image.test.mjs +0 -54
  322. package/examples/no-provision.test.mjs +0 -23
  323. package/examples/press-keys.test.mjs +0 -50
  324. package/examples/prompt.test.mjs +0 -33
  325. package/examples/scroll-keyboard.test.mjs +0 -37
  326. package/examples/scroll-until-image.test.mjs +0 -39
  327. package/examples/scroll-until-text.test.mjs +0 -67
  328. package/examples/scroll.test.mjs +0 -41
  329. package/examples/type.test.mjs +0 -45
  330. package/examples/windows-installer.test.mjs +0 -53
  331. package/interfaces/cli/commands/edit.js +0 -3
  332. package/interfaces/cli/commands/generate.js +0 -3
  333. package/interfaces/cli/commands/run.js +0 -3
  334. package/interfaces/cli/utils/factory.js +0 -71
  335. package/jsconfig.json +0 -26
  336. package/manual/test-init-command.js +0 -223
  337. package/sdk-log-formatter.js +0 -930
  338. package/setup/aws/cloudformation.yaml +0 -470
  339. package/setup/aws/spawn-runner.sh +0 -190
  340. package/test/api-resilience.test.mjs +0 -0
  341. package/test/captcha-solver.test.mjs +0 -70
  342. package/test/chrome-remote-debugging.test.mjs +0 -66
  343. package/test/manual/debug-locate-response.js +0 -82
  344. package/test/manual/reconnect-provision.test.mjs +0 -49
  345. package/test/manual/test-console-logs.test.mjs +0 -42
  346. package/test/manual/test-find-api.js +0 -73
  347. package/test/manual/test-init.sh +0 -54
  348. package/test/manual/test-prompt-cache.js +0 -96
  349. package/test/manual/test-provision-auth.mjs +0 -22
  350. package/test/manual/test-sandbox-render.js +0 -28
  351. package/test/manual/test-sdk-methods.js +0 -15
  352. package/test/manual/test-sdk-refactor.js +0 -53
  353. package/test/manual/test-stack-trace.mjs +0 -57
  354. package/test/manual/verify-element-api.js +0 -89
  355. package/test/manual/verify-types.js +0 -0
  356. package/test/manual-unawaited-promise.test.mjs +0 -31
  357. package/testdriver-plugin/skills/actions/SKILL.md +0 -93
  358. package/testdriver-plugin/skills/assertions/SKILL.md +0 -77
  359. package/testdriver-plugin/skills/caching/SKILL.md +0 -66
  360. package/testdriver-plugin/skills/creating-tests/SKILL.md +0 -104
  361. package/testdriver-plugin/skills/finding-elements/SKILL.md +0 -77
  362. package/testdriver-plugin/skills/github-actions/SKILL.md +0 -100
  363. package/testdriver-plugin/skills/running-tests/SKILL.md +0 -77
  364. package/testdriver-plugin/skills/secrets/SKILL.md +0 -87
  365. package/testdriver-plugin/skills/self-hosting/SKILL.md +0 -89
  366. package/testdriver-plugin/skills/setup/SKILL.md +0 -76
  367. package/testdriver-plugin/skills/variables/SKILL.md +0 -88
  368. package/testdriver-plugin/skills/waiting/SKILL.md +0 -72
  369. 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
- };