@testdriverai/agent 7.8.0-canary.10

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 (528) hide show
  1. package/.claude/settings.local.json +7 -0
  2. package/.env.example +4 -0
  3. package/.prettierignore +4 -0
  4. package/.prettierrc +1 -0
  5. package/CHANGELOG.md +953 -0
  6. package/README.md +81 -0
  7. package/agent/events.js +135 -0
  8. package/agent/index.js +2450 -0
  9. package/agent/interface.js +35 -0
  10. package/agent/lib/analytics.js +22 -0
  11. package/agent/lib/censorship.js +75 -0
  12. package/agent/lib/commander.js +246 -0
  13. package/agent/lib/commands.js +1684 -0
  14. package/agent/lib/config.js +60 -0
  15. package/agent/lib/generator.js +91 -0
  16. package/agent/lib/http.js +144 -0
  17. package/agent/lib/logger.js +56 -0
  18. package/agent/lib/outputs.js +29 -0
  19. package/agent/lib/parser.js +209 -0
  20. package/agent/lib/redraw.js +386 -0
  21. package/agent/lib/resources/cursor-2.png +0 -0
  22. package/agent/lib/sandbox.js +1104 -0
  23. package/agent/lib/sdk.js +633 -0
  24. package/agent/lib/session.js +25 -0
  25. package/agent/lib/source-mapper.js +342 -0
  26. package/agent/lib/subimage/index.js +77 -0
  27. package/agent/lib/subimage/opencv.js +69 -0
  28. package/agent/lib/system.js +204 -0
  29. package/agent/lib/theme.js +14 -0
  30. package/agent/lib/valid-version.js +21 -0
  31. package/agent/lib/validation.js +169 -0
  32. package/ai/.claude-plugin/plugin.json +9 -0
  33. package/ai/agents/testdriver.md +638 -0
  34. package/ai/skills/testdriver-ai/SKILL.md +204 -0
  35. package/ai/skills/testdriver-assert/SKILL.md +315 -0
  36. package/ai/skills/testdriver-aws-setup/SKILL.md +448 -0
  37. package/ai/skills/testdriver-cache/SKILL.md +221 -0
  38. package/ai/skills/testdriver-caching/SKILL.md +124 -0
  39. package/ai/skills/testdriver-captcha/SKILL.md +158 -0
  40. package/ai/skills/testdriver-ci-cd/SKILL.md +602 -0
  41. package/ai/skills/testdriver-click/SKILL.md +286 -0
  42. package/ai/skills/testdriver-client/SKILL.md +477 -0
  43. package/ai/skills/testdriver-cloud/SKILL.md +119 -0
  44. package/ai/skills/testdriver-customizing-devices/SKILL.md +319 -0
  45. package/ai/skills/testdriver-dashcam/SKILL.md +418 -0
  46. package/ai/skills/testdriver-debugging-with-screenshots/SKILL.md +401 -0
  47. package/ai/skills/testdriver-device-config/SKILL.md +317 -0
  48. package/ai/skills/testdriver-double-click/SKILL.md +102 -0
  49. package/ai/skills/testdriver-elements/SKILL.md +605 -0
  50. package/ai/skills/testdriver-enterprise/SKILL.md +114 -0
  51. package/ai/skills/testdriver-errors/SKILL.md +246 -0
  52. package/ai/skills/testdriver-events/SKILL.md +356 -0
  53. package/ai/skills/testdriver-examples/SKILL.md +7 -0
  54. package/ai/skills/testdriver-exec/SKILL.md +317 -0
  55. package/ai/skills/testdriver-find/SKILL.md +829 -0
  56. package/ai/skills/testdriver-focus-application/SKILL.md +293 -0
  57. package/ai/skills/testdriver-generating-tests/SKILL.md +36 -0
  58. package/ai/skills/testdriver-hover/SKILL.md +278 -0
  59. package/ai/skills/testdriver-locating-elements/SKILL.md +71 -0
  60. package/ai/skills/testdriver-making-assertions/SKILL.md +32 -0
  61. package/ai/skills/testdriver-mcp/SKILL.md +7 -0
  62. package/ai/skills/testdriver-mcp-workflow/SKILL.md +410 -0
  63. package/ai/skills/testdriver-mouse-down/SKILL.md +161 -0
  64. package/ai/skills/testdriver-mouse-up/SKILL.md +164 -0
  65. package/ai/skills/testdriver-parse/SKILL.md +236 -0
  66. package/ai/skills/testdriver-performing-actions/SKILL.md +54 -0
  67. package/ai/skills/testdriver-press-keys/SKILL.md +348 -0
  68. package/ai/skills/testdriver-provision/SKILL.md +331 -0
  69. package/ai/skills/testdriver-quickstart/SKILL.md +144 -0
  70. package/ai/skills/testdriver-redraw/SKILL.md +214 -0
  71. package/ai/skills/testdriver-reusable-code/SKILL.md +249 -0
  72. package/ai/skills/testdriver-right-click/SKILL.md +123 -0
  73. package/ai/skills/testdriver-running-tests/SKILL.md +185 -0
  74. package/ai/skills/testdriver-screenshot/SKILL.md +248 -0
  75. package/ai/skills/testdriver-screenshots/SKILL.md +184 -0
  76. package/ai/skills/testdriver-scroll/SKILL.md +335 -0
  77. package/ai/skills/testdriver-secrets/SKILL.md +115 -0
  78. package/ai/skills/testdriver-self-hosted/SKILL.md +65 -0
  79. package/ai/skills/testdriver-test-writer/SKILL.md +448 -0
  80. package/ai/skills/testdriver-testdriver/SKILL.md +628 -0
  81. package/ai/skills/testdriver-testdriver-mechanic/SKILL.md +165 -0
  82. package/ai/skills/testdriver-type/SKILL.md +357 -0
  83. package/ai/skills/testdriver-variables/SKILL.md +111 -0
  84. package/ai/skills/testdriver-wait/SKILL.md +50 -0
  85. package/ai/skills/testdriver-waiting-for-elements/SKILL.md +90 -0
  86. package/ai/skills/testdriver-what-is-testdriver/SKILL.md +54 -0
  87. package/bin/testdriverai.js +22 -0
  88. package/debugger/bg.png +0 -0
  89. package/debugger/icon.png +0 -0
  90. package/debugger/index.html +469 -0
  91. package/debugger/td.png +0 -0
  92. package/debugger/tray-buffered.png +0 -0
  93. package/debugger/tray.png +0 -0
  94. package/docs/GITHUB_COMMENTS.md +330 -0
  95. package/docs/GITHUB_COMMENTS_ANNOUNCEMENT.md +167 -0
  96. package/docs/QUICK-START-GITHUB-COMMENTS.md +84 -0
  97. package/docs/TEST-GITHUB-COMMENTS.md +129 -0
  98. package/docs/_data/examples-manifest.json +177 -0
  99. package/docs/_data/examples-manifest.schema.json +41 -0
  100. package/docs/_scripts/extract-example-urls.js +165 -0
  101. package/docs/_scripts/generate-examples.js +560 -0
  102. package/docs/_scripts/generate-skills.js +154 -0
  103. package/docs/_scripts/link-replacer.js +164 -0
  104. package/docs/_scripts/upload-docs-to-openai.js +284 -0
  105. package/docs/changelog.mdx +161 -0
  106. package/docs/claude-mcp-plugin.mdx +160 -0
  107. package/docs/docs.json +442 -0
  108. package/docs/github-integration-setup.md +266 -0
  109. package/docs/guide/best-practices-polling.mdx +174 -0
  110. package/docs/images/content/account/newprojectsettings.png +0 -0
  111. package/docs/images/content/account/projectpage.png +0 -0
  112. package/docs/images/content/account/projectreplays.png +0 -0
  113. package/docs/images/content/account/team-manage.png +0 -0
  114. package/docs/images/content/account/teampage.png +0 -0
  115. package/docs/images/content/extension/cursor.svg +1 -0
  116. package/docs/images/content/extension/vscode.svg +57 -0
  117. package/docs/images/content/extension/windsurf.svg +3 -0
  118. package/docs/images/content/parse/output.png +0 -0
  119. package/docs/images/content/self-hosted/launchtemplateid.png +0 -0
  120. package/docs/images/content/side-by-side.png +0 -0
  121. package/docs/images/content/vscode/ide-full.png +0 -0
  122. package/docs/images/content/vscode/running.png +0 -0
  123. package/docs/images/content/vscode/v7-chat.png +0 -0
  124. package/docs/images/content/vscode/v7-choose-agent.png +0 -0
  125. package/docs/images/content/vscode/v7-full.png +0 -0
  126. package/docs/images/content/vscode/v7-onboarding.png +0 -0
  127. package/docs/images/content/vscode/vscode-2-assert.png +0 -0
  128. package/docs/images/content/vscode/vscode-agent-preview.png +0 -0
  129. package/docs/images/content/vscode/vscode-copilot-ask.png +0 -0
  130. package/docs/images/content/vscode/vscode-file-creation.png +0 -0
  131. package/docs/images/content/vscode/vscode-install.png +0 -0
  132. package/docs/images/content/vscode/vscode-overview.png +0 -0
  133. package/docs/images/content/vscode/vscode-setup-walkthrough.png +0 -0
  134. package/docs/images/content/vscode/vscode-stopchat.png +0 -0
  135. package/docs/images/content/vscode/vscode-stoptest.png +0 -0
  136. package/docs/images/content/vscode/vscode-tdservice.png +0 -0
  137. package/docs/images/content/vscode/vscode-test-output.png +0 -0
  138. package/docs/images/content/vscode/vscode-testhistory.png +0 -0
  139. package/docs/images/content/vscode/vscode-testpane-runtests.png +0 -0
  140. package/docs/images/content/vscode/vscode-testpane.png +0 -0
  141. package/docs/images/template/dark.png +0 -0
  142. package/docs/images/template/icon.png +0 -0
  143. package/docs/images/template/light.png +0 -0
  144. package/docs/snippets/calendar-link.mdx +4 -0
  145. package/docs/snippets/gitignore-warning.mdx +7 -0
  146. package/docs/snippets/lifecycle-warning.mdx +6 -0
  147. package/docs/snippets/test-prereqs.mdx +12 -0
  148. package/docs/snippets/tests/assert-replay.mdx +7 -0
  149. package/docs/snippets/tests/assert-yaml.mdx +8 -0
  150. package/docs/snippets/tests/exec-js-replay.mdx +7 -0
  151. package/docs/snippets/tests/exec-js-yaml.mdx +32 -0
  152. package/docs/snippets/tests/exec-shell-replay.mdx +7 -0
  153. package/docs/snippets/tests/exec-shell-yaml.mdx +15 -0
  154. package/docs/snippets/tests/hover-image-replay.mdx +7 -0
  155. package/docs/snippets/tests/hover-image-yaml.mdx +17 -0
  156. package/docs/snippets/tests/hover-text-replay.mdx +7 -0
  157. package/docs/snippets/tests/hover-text-with-description-replay.mdx +7 -0
  158. package/docs/snippets/tests/hover-text-with-description-yaml.mdx +24 -0
  159. package/docs/snippets/tests/hover-text-yaml.mdx +14 -0
  160. package/docs/snippets/tests/match-image-replay.mdx +7 -0
  161. package/docs/snippets/tests/match-image-yaml.mdx +17 -0
  162. package/docs/snippets/tests/press-keys-replay.mdx +7 -0
  163. package/docs/snippets/tests/press-keys-yaml.mdx +36 -0
  164. package/docs/snippets/tests/remember-replay.mdx +7 -0
  165. package/docs/snippets/tests/remember-yaml.mdx +28 -0
  166. package/docs/snippets/tests/scroll-replay.mdx +7 -0
  167. package/docs/snippets/tests/scroll-until-image-replay.mdx +7 -0
  168. package/docs/snippets/tests/scroll-until-image-yaml.mdx +14 -0
  169. package/docs/snippets/tests/scroll-until-text-replay.mdx +7 -0
  170. package/docs/snippets/tests/scroll-until-text-yaml.mdx +17 -0
  171. package/docs/snippets/tests/scroll-yaml.mdx +30 -0
  172. package/docs/snippets/tests/type-repeated-replay.mdx +7 -0
  173. package/docs/snippets/tests/type-repeated-yaml.mdx +22 -0
  174. package/docs/snippets/tests/type-replay.mdx +7 -0
  175. package/docs/snippets/tests/type-yaml.mdx +28 -0
  176. package/docs/snippets/tests/wait-for-image-replay.mdx +7 -0
  177. package/docs/snippets/tests/wait-for-image-yaml.mdx +18 -0
  178. package/docs/snippets/tests/wait-for-text-replay.mdx +7 -0
  179. package/docs/snippets/tests/wait-for-text-yaml.mdx +18 -0
  180. package/docs/snippets/tests/wait-replay.mdx +7 -0
  181. package/docs/snippets/tests/wait-yaml.mdx +13 -0
  182. package/docs/styles.css +65 -0
  183. package/docs/v6/account/dashboard.mdx +16 -0
  184. package/docs/v6/account/enterprise.mdx +110 -0
  185. package/docs/v6/account/pricing.mdx +33 -0
  186. package/docs/v6/account/projects.mdx +33 -0
  187. package/docs/v6/account/team.mdx +35 -0
  188. package/docs/v6/action/ami.mdx +109 -0
  189. package/docs/v6/action/performance.mdx +105 -0
  190. package/docs/v6/action/secrets.mdx +93 -0
  191. package/docs/v6/apps/chrome-extensions.mdx +48 -0
  192. package/docs/v6/apps/desktop-apps.mdx +93 -0
  193. package/docs/v6/apps/mobile-apps.mdx +26 -0
  194. package/docs/v6/apps/static-websites.mdx +54 -0
  195. package/docs/v6/apps/tauri-apps.mdx +361 -0
  196. package/docs/v6/bugs/jira.mdx +232 -0
  197. package/docs/v6/cli/overview.mdx +66 -0
  198. package/docs/v6/commands/assert.mdx +45 -0
  199. package/docs/v6/commands/exec.mdx +276 -0
  200. package/docs/v6/commands/focus-application.mdx +44 -0
  201. package/docs/v6/commands/hover-image.mdx +69 -0
  202. package/docs/v6/commands/hover-text.mdx +47 -0
  203. package/docs/v6/commands/if.mdx +53 -0
  204. package/docs/v6/commands/match-image.mdx +67 -0
  205. package/docs/v6/commands/press-keys.mdx +87 -0
  206. package/docs/v6/commands/remember.mdx +49 -0
  207. package/docs/v6/commands/run.mdx +44 -0
  208. package/docs/v6/commands/scroll-until-image.mdx +66 -0
  209. package/docs/v6/commands/scroll-until-text.mdx +60 -0
  210. package/docs/v6/commands/scroll.mdx +69 -0
  211. package/docs/v6/commands/type.mdx +45 -0
  212. package/docs/v6/commands/wait-for-image.mdx +54 -0
  213. package/docs/v6/commands/wait-for-text.mdx +48 -0
  214. package/docs/v6/commands/wait.mdx +45 -0
  215. package/docs/v6/exporting/junit.mdx +218 -0
  216. package/docs/v6/exporting/playwright.mdx +197 -0
  217. package/docs/v6/features/auto-healing.mdx +144 -0
  218. package/docs/v6/features/generation.mdx +116 -0
  219. package/docs/v6/features/parallel-testing.mdx +151 -0
  220. package/docs/v6/features/reusable-snippets.mdx +131 -0
  221. package/docs/v6/features/selectorless.mdx +80 -0
  222. package/docs/v6/features/visual-assertions.mdx +139 -0
  223. package/docs/v6/getting-started/ci.mdx +146 -0
  224. package/docs/v6/getting-started/cli.mdx +91 -0
  225. package/docs/v6/getting-started/editing.mdx +100 -0
  226. package/docs/v6/getting-started/playwright.mdx +342 -0
  227. package/docs/v6/getting-started/running.mdx +48 -0
  228. package/docs/v6/getting-started/self-hosting.mdx +408 -0
  229. package/docs/v6/getting-started/vscode.mdx +88 -0
  230. package/docs/v6/guide/assertions.mdx +189 -0
  231. package/docs/v6/guide/authentication.mdx +136 -0
  232. package/docs/v6/guide/code.mdx +65 -0
  233. package/docs/v6/guide/dashcam.mdx +118 -0
  234. package/docs/v6/guide/environment-variables.mdx +26 -0
  235. package/docs/v6/guide/lifecycle.mdx +242 -0
  236. package/docs/v6/guide/locating.mdx +141 -0
  237. package/docs/v6/guide/protips.mdx +43 -0
  238. package/docs/v6/guide/variables.mdx +143 -0
  239. package/docs/v6/guide/waiting.mdx +130 -0
  240. package/docs/v6/importing/csv.mdx +196 -0
  241. package/docs/v6/importing/gherkin.mdx +143 -0
  242. package/docs/v6/importing/jira.mdx +164 -0
  243. package/docs/v6/importing/testrail.mdx +162 -0
  244. package/docs/v6/integrations/electron.mdx +146 -0
  245. package/docs/v6/integrations/netlify.mdx +100 -0
  246. package/docs/v6/integrations/vercel.mdx +125 -0
  247. package/docs/v6/interactive/explore.mdx +99 -0
  248. package/docs/v6/interactive/run.mdx +52 -0
  249. package/docs/v6/interactive/save.mdx +63 -0
  250. package/docs/v6/overview/comparison.mdx +101 -0
  251. package/docs/v6/overview/faq.mdx +162 -0
  252. package/docs/v6/overview/performance.mdx +52 -0
  253. package/docs/v6/overview/quickstart.mdx +137 -0
  254. package/docs/v6/overview/what-is-testdriver.mdx +85 -0
  255. package/docs/v6/scenarios/ai-chatbot.mdx +28 -0
  256. package/docs/v6/scenarios/cookie-banner.mdx +32 -0
  257. package/docs/v6/scenarios/file-upload.mdx +33 -0
  258. package/docs/v6/scenarios/form-filling.mdx +32 -0
  259. package/docs/v6/scenarios/log-in.mdx +75 -0
  260. package/docs/v6/scenarios/pdf-generation.mdx +25 -0
  261. package/docs/v6/scenarios/spell-check.mdx +22 -0
  262. package/docs/v6/security/action.mdx +84 -0
  263. package/docs/v6/security/agent.mdx +73 -0
  264. package/docs/v6/security/platform.mdx +77 -0
  265. package/docs/v6/tutorials/advanced-test.mdx +81 -0
  266. package/docs/v6/tutorials/basic-test.mdx +45 -0
  267. package/docs/v7/_drafts/agents.mdx +843 -0
  268. package/docs/v7/_drafts/architecture.mdx +399 -0
  269. package/docs/v7/_drafts/auto-cache-key.mdx +167 -0
  270. package/docs/v7/_drafts/awesome-logs-quick-ref.mdx +100 -0
  271. package/docs/v7/_drafts/best-practices.mdx +486 -0
  272. package/docs/v7/_drafts/caching-ai.mdx +215 -0
  273. package/docs/v7/_drafts/caching-selectors.mdx +424 -0
  274. package/docs/v7/_drafts/caching.mdx +366 -0
  275. package/docs/v7/_drafts/cli-to-sdk-migration.mdx +425 -0
  276. package/docs/v7/_drafts/commands/assert.mdx +45 -0
  277. package/docs/v7/_drafts/commands/exec.mdx +276 -0
  278. package/docs/v7/_drafts/commands/focus-application.mdx +44 -0
  279. package/docs/v7/_drafts/commands/hover-image.mdx +69 -0
  280. package/docs/v7/_drafts/commands/hover-text.mdx +47 -0
  281. package/docs/v7/_drafts/commands/if.mdx +53 -0
  282. package/docs/v7/_drafts/commands/match-image.mdx +67 -0
  283. package/docs/v7/_drafts/commands/press-keys.mdx +87 -0
  284. package/docs/v7/_drafts/commands/remember.mdx +49 -0
  285. package/docs/v7/_drafts/commands/run.mdx +44 -0
  286. package/docs/v7/_drafts/commands/scroll-until-image.mdx +66 -0
  287. package/docs/v7/_drafts/commands/scroll-until-text.mdx +60 -0
  288. package/docs/v7/_drafts/commands/scroll.mdx +69 -0
  289. package/docs/v7/_drafts/commands/type.mdx +45 -0
  290. package/docs/v7/_drafts/commands/wait-for-image.mdx +54 -0
  291. package/docs/v7/_drafts/commands/wait-for-text.mdx +48 -0
  292. package/docs/v7/_drafts/commands/wait.mdx +45 -0
  293. package/docs/v7/_drafts/configuration.mdx +378 -0
  294. package/docs/v7/_drafts/contributing.mdx +174 -0
  295. package/docs/v7/_drafts/core.mdx +458 -0
  296. package/docs/v7/_drafts/dashcam-title-feature.mdx +89 -0
  297. package/docs/v7/_drafts/debugging.mdx +349 -0
  298. package/docs/v7/_drafts/error-handling.mdx +501 -0
  299. package/docs/v7/_drafts/faq.mdx +393 -0
  300. package/docs/v7/_drafts/hooks.mdx +360 -0
  301. package/docs/v7/_drafts/init-command.mdx +95 -0
  302. package/docs/v7/_drafts/installation.mdx +420 -0
  303. package/docs/v7/_drafts/migration.mdx +562 -0
  304. package/docs/v7/_drafts/observable.mdx +604 -0
  305. package/docs/v7/_drafts/playwright.mdx +342 -0
  306. package/docs/v7/_drafts/plugin-migration.mdx +220 -0
  307. package/docs/v7/_drafts/powerful.mdx +419 -0
  308. package/docs/v7/_drafts/presets.mdx +210 -0
  309. package/docs/v7/_drafts/progressive-disclosure.mdx +230 -0
  310. package/docs/v7/_drafts/prompt-cache.mdx +200 -0
  311. package/docs/v7/_drafts/provision.mdx +390 -0
  312. package/docs/v7/_drafts/quick-start-test-recording.mdx +214 -0
  313. package/docs/v7/_drafts/readme.mdx +135 -0
  314. package/docs/v7/_drafts/reports.mdx +414 -0
  315. package/docs/v7/_drafts/scalable.mdx +763 -0
  316. package/docs/v7/_drafts/screenshot.mdx +155 -0
  317. package/docs/v7/_drafts/sdk-awesome-logs.mdx +468 -0
  318. package/docs/v7/_drafts/sdk-browser-rendering.mdx +167 -0
  319. package/docs/v7/_drafts/sdk-migration.mdx +474 -0
  320. package/docs/v7/_drafts/sdk-v7-complete.mdx +345 -0
  321. package/docs/v7/_drafts/self-hosting.mdx +369 -0
  322. package/docs/v7/_drafts/test-recording.mdx +382 -0
  323. package/docs/v7/_drafts/troubleshooting.mdx +526 -0
  324. package/docs/v7/_drafts/vitest-plugin.mdx +477 -0
  325. package/docs/v7/_drafts/vitest.mdx +535 -0
  326. package/docs/v7/_drafts/writing-tests.mdx +25 -0
  327. package/docs/v7/ai.mdx +205 -0
  328. package/docs/v7/assert.mdx +316 -0
  329. package/docs/v7/aws-setup.mdx +449 -0
  330. package/docs/v7/cache.mdx +223 -0
  331. package/docs/v7/caching.mdx +128 -0
  332. package/docs/v7/captcha.mdx +159 -0
  333. package/docs/v7/ci-cd.mdx +603 -0
  334. package/docs/v7/click.mdx +287 -0
  335. package/docs/v7/client.mdx +478 -0
  336. package/docs/v7/copilot/auto-healing.mdx +265 -0
  337. package/docs/v7/copilot/creating-tests.mdx +156 -0
  338. package/docs/v7/copilot/github.mdx +143 -0
  339. package/docs/v7/copilot/running-tests.mdx +149 -0
  340. package/docs/v7/copilot/setup.mdx +143 -0
  341. package/docs/v7/customizing-devices.mdx +319 -0
  342. package/docs/v7/dashcam.mdx +419 -0
  343. package/docs/v7/debugging-with-screenshots.mdx +402 -0
  344. package/docs/v7/device-config.mdx +317 -0
  345. package/docs/v7/double-click.mdx +102 -0
  346. package/docs/v7/elements.mdx +606 -0
  347. package/docs/v7/enterprise.mdx +9 -0
  348. package/docs/v7/errors.mdx +248 -0
  349. package/docs/v7/events.mdx +358 -0
  350. package/docs/v7/examples/ai.mdx +72 -0
  351. package/docs/v7/examples/assert.mdx +72 -0
  352. package/docs/v7/examples/captcha-api.mdx +92 -0
  353. package/docs/v7/examples/chrome-extension.mdx +132 -0
  354. package/docs/v7/examples/drag-and-drop.mdx +100 -0
  355. package/docs/v7/examples/element-not-found.mdx +67 -0
  356. package/docs/v7/examples/exec-output.mdx +85 -0
  357. package/docs/v7/examples/exec-pwsh.mdx +83 -0
  358. package/docs/v7/examples/focus-window.mdx +62 -0
  359. package/docs/v7/examples/hover-image.mdx +94 -0
  360. package/docs/v7/examples/hover-text.mdx +69 -0
  361. package/docs/v7/examples/installer.mdx +91 -0
  362. package/docs/v7/examples/launch-vscode-linux.mdx +101 -0
  363. package/docs/v7/examples/match-image.mdx +96 -0
  364. package/docs/v7/examples/press-keys.mdx +92 -0
  365. package/docs/v7/examples/scroll-keyboard.mdx +79 -0
  366. package/docs/v7/examples/scroll-until-image.mdx +81 -0
  367. package/docs/v7/examples/scroll-until-text.mdx +109 -0
  368. package/docs/v7/examples/scroll.mdx +81 -0
  369. package/docs/v7/examples/type.mdx +92 -0
  370. package/docs/v7/examples/windows-installer.mdx +89 -0
  371. package/docs/v7/exec.mdx +318 -0
  372. package/docs/v7/find.mdx +830 -0
  373. package/docs/v7/focus-application.mdx +294 -0
  374. package/docs/v7/generating-tests.mdx +36 -0
  375. package/docs/v7/hosted.mdx +158 -0
  376. package/docs/v7/hover.mdx +279 -0
  377. package/docs/v7/locating-elements.mdx +71 -0
  378. package/docs/v7/making-assertions.mdx +32 -0
  379. package/docs/v7/mcp.mdx +9 -0
  380. package/docs/v7/mouse-down.mdx +161 -0
  381. package/docs/v7/mouse-up.mdx +164 -0
  382. package/docs/v7/parse.mdx +237 -0
  383. package/docs/v7/performing-actions.mdx +54 -0
  384. package/docs/v7/press-keys.mdx +349 -0
  385. package/docs/v7/provision.mdx +333 -0
  386. package/docs/v7/quickstart.mdx +173 -0
  387. package/docs/v7/redraw.mdx +216 -0
  388. package/docs/v7/reusable-code.mdx +249 -0
  389. package/docs/v7/right-click.mdx +123 -0
  390. package/docs/v7/running-tests.mdx +185 -0
  391. package/docs/v7/screenshot.mdx +249 -0
  392. package/docs/v7/screenshots.mdx +186 -0
  393. package/docs/v7/scroll.mdx +336 -0
  394. package/docs/v7/secrets.mdx +115 -0
  395. package/docs/v7/self-hosted.mdx +149 -0
  396. package/docs/v7/type.mdx +358 -0
  397. package/docs/v7/variables.mdx +111 -0
  398. package/docs/v7/wait.mdx +52 -0
  399. package/docs/v7/waiting-for-elements.mdx +90 -0
  400. package/docs/v7/what-is-testdriver.mdx +54 -0
  401. package/eslint.config.js +67 -0
  402. package/examples/ai.test.mjs +31 -0
  403. package/examples/assert.test.mjs +47 -0
  404. package/examples/chrome-extension.test.mjs +97 -0
  405. package/examples/config.mjs +5 -0
  406. package/examples/element-not-found.test.mjs +27 -0
  407. package/examples/exec-output.test.mjs +60 -0
  408. package/examples/exec-pwsh.test.mjs +58 -0
  409. package/examples/findall-coffee-icons.test.mjs +42 -0
  410. package/examples/focus-window.test.mjs +37 -0
  411. package/examples/formatted-logging.test.mjs +27 -0
  412. package/examples/hover-image.test.mjs +53 -0
  413. package/examples/hover-text-with-description.test.mjs +57 -0
  414. package/examples/hover-text.test.mjs +28 -0
  415. package/examples/installer.test.mjs +50 -0
  416. package/examples/launch-vscode-linux.test.mjs +55 -0
  417. package/examples/match-image.test.mjs +55 -0
  418. package/examples/parse.test.mjs +19 -0
  419. package/examples/press-keys.test.mjs +44 -0
  420. package/examples/prompt.test.mjs +34 -0
  421. package/examples/scroll-keyboard.test.mjs +38 -0
  422. package/examples/scroll-until-image.test.mjs +40 -0
  423. package/examples/scroll.test.mjs +42 -0
  424. package/examples/type.test.mjs +46 -0
  425. package/examples/windows-installer.test.mjs +54 -0
  426. package/index.js +2 -0
  427. package/interfaces/cli/commands/init.js +438 -0
  428. package/interfaces/cli/commands/setup.js +382 -0
  429. package/interfaces/cli/lib/base.js +285 -0
  430. package/interfaces/cli.js +20 -0
  431. package/interfaces/junit-reporter.js +290 -0
  432. package/interfaces/logger.js +388 -0
  433. package/interfaces/readline.js +234 -0
  434. package/interfaces/shared-test-state.mjs +64 -0
  435. package/interfaces/vitest-plugin.d.ts +115 -0
  436. package/interfaces/vitest-plugin.mjs +1698 -0
  437. package/lib/captcha/solver.js +358 -0
  438. package/lib/core/Dashcam.js +533 -0
  439. package/lib/core/index.d.ts +172 -0
  440. package/lib/core/index.js +12 -0
  441. package/lib/environments.json +18 -0
  442. package/lib/github-comment-formatter.js +263 -0
  443. package/lib/github-comment.mjs +452 -0
  444. package/lib/init-project.js +575 -0
  445. package/lib/presets/index.mjs +331 -0
  446. package/lib/resolve-channel.js +46 -0
  447. package/lib/sentry.js +417 -0
  448. package/lib/vitest/hooks.d.ts +57 -0
  449. package/lib/vitest/hooks.mjs +674 -0
  450. package/lib/vitest/setup-aws.mjs +247 -0
  451. package/lib/vitest/setup-self-hosted.mjs +151 -0
  452. package/lib/vitest/setup.mjs +46 -0
  453. package/manual/captcha-api.test.mjs +51 -0
  454. package/manual/drag-and-drop.test.mjs +59 -0
  455. package/manual/flake-diffthreshold-001.test.mjs +9 -0
  456. package/manual/flake-diffthreshold-01.test.mjs +9 -0
  457. package/manual/flake-diffthreshold-05.test.mjs +9 -0
  458. package/manual/flake-noredraw-cache.test.mjs +9 -0
  459. package/manual/flake-noredraw-nocache.test.mjs +9 -0
  460. package/manual/flake-redraw-cache.test.mjs +9 -0
  461. package/manual/flake-redraw-nocache.test.mjs +9 -0
  462. package/manual/flake-rocket-match.test.mjs +30 -0
  463. package/manual/flake-shared.mjs +51 -0
  464. package/manual/no-provision.test.mjs +31 -0
  465. package/manual/packer-hover-image.test.mjs +176 -0
  466. package/manual/scroll-until-text.test.mjs +68 -0
  467. package/manual/test-init-command.js +223 -0
  468. package/mcp-server/README.md +322 -0
  469. package/mcp-server/dist/codegen.d.ts +9 -0
  470. package/mcp-server/dist/codegen.js +165 -0
  471. package/mcp-server/dist/mcp-app.html +114 -0
  472. package/mcp-server/dist/package.json +1 -0
  473. package/mcp-server/dist/provision-types.d.ts +290 -0
  474. package/mcp-server/dist/provision-types.js +174 -0
  475. package/mcp-server/dist/server.d.ts +6 -0
  476. package/mcp-server/dist/server.mjs +1925 -0
  477. package/mcp-server/dist/session.d.ts +85 -0
  478. package/mcp-server/dist/session.js +152 -0
  479. package/mcp-server/mcp-app.html +28 -0
  480. package/mcp-server/mcp-config.example.json +19 -0
  481. package/mcp-server/package-lock.json +4027 -0
  482. package/mcp-server/package.json +31 -0
  483. package/mcp-server/src/codegen.ts +189 -0
  484. package/mcp-server/src/mcp-app.css +360 -0
  485. package/mcp-server/src/mcp-app.ts +547 -0
  486. package/mcp-server/src/provision-types.ts +209 -0
  487. package/mcp-server/src/server.ts +2391 -0
  488. package/mcp-server/src/session.ts +194 -0
  489. package/mcp-server/tsconfig.json +16 -0
  490. package/mcp-server/vite.config.ts +23 -0
  491. package/package.json +158 -0
  492. package/schema.json +1046 -0
  493. package/scripts/generate-skills.js +94 -0
  494. package/sdk-log-formatter.js +1157 -0
  495. package/sdk.d.ts +1486 -0
  496. package/sdk.js +4336 -0
  497. package/setup/aws/cloudformation.yaml +463 -0
  498. package/setup/aws/disable-defender.sh +42 -0
  499. package/setup/aws/install-dev-runner.sh +79 -0
  500. package/setup/aws/spawn-runner.sh +289 -0
  501. package/test/captcha-solver.test.mjs +152 -0
  502. package/test/chrome-remote-debugging.test.mjs +66 -0
  503. package/test/duckduckgo/experiment.test.mjs +28 -0
  504. package/test/duckduckgo/setup.test.mjs +29 -0
  505. package/test/manual/debug-locate-response.js +82 -0
  506. package/test/manual/reconnect-provision.test.mjs +49 -0
  507. package/test/manual/test-console-logs.test.mjs +42 -0
  508. package/test/manual/test-find-api.js +73 -0
  509. package/test/manual/test-init.sh +54 -0
  510. package/test/manual/test-prompt-cache.js +97 -0
  511. package/test/manual/test-provision-auth.mjs +22 -0
  512. package/test/manual/test-sandbox-render.js +29 -0
  513. package/test/manual/test-sdk-methods.js +15 -0
  514. package/test/manual/test-sdk-refactor.js +53 -0
  515. package/test/manual/test-stack-trace.mjs +57 -0
  516. package/test/manual/verify-element-api.js +89 -0
  517. package/test/manual/verify-types.js +0 -0
  518. package/test/manual-unawaited-promise.test.mjs +31 -0
  519. package/vitest.config.mjs +58 -0
  520. package/vitest.runner.config.mjs +33 -0
  521. package/vscode-extension/.vscodeignore +12 -0
  522. package/vscode-extension/README.md +94 -0
  523. package/vscode-extension/media/icon.png +0 -0
  524. package/vscode-extension/package-lock.json +4126 -0
  525. package/vscode-extension/package.json +86 -0
  526. package/vscode-extension/src/extension.ts +829 -0
  527. package/vscode-extension/testdriverai-0.1.0.vsix +0 -0
  528. package/vscode-extension/tsconfig.json +16 -0
@@ -0,0 +1,135 @@
1
+ # TestDriver v7 SDK Documentation
2
+
3
+ This directory contains the documentation for TestDriver v7, which introduces the JavaScript SDK as the primary interface for writing tests.
4
+
5
+ ## Structure
6
+
7
+ ```
8
+ v7/
9
+ ├── getting-started/
10
+ │ └── quickstart.mdx # Quick start guide for the SDK
11
+ ├── api/
12
+ │ ├── client.mdx # TestDriver client initialization and connection
13
+ │ ├── elements.mdx # Element finding and interaction
14
+ │ ├── sandbox.mdx # Sandbox management and script execution
15
+ │ ├── interactions.mdx # Keyboard, mouse, and scrolling
16
+ │ └── assertions.mdx # AI-powered assertions and testing
17
+ └── guides/
18
+ └── migration.mdx # Migration guide from YAML to SDK
19
+ ```
20
+
21
+ ## Documentation Coverage
22
+
23
+ ### Getting Started
24
+ - **Quickstart**: Complete setup and first test example using the `assert.test.mjs` pattern
25
+ - Installation
26
+ - Authentication
27
+ - Basic test structure with Vitest
28
+ - Sandbox connection
29
+
30
+ ### API Reference
31
+
32
+ #### Client (`/v7/api/client.mdx`)
33
+ - Constructor and initialization
34
+ - `auth()` - Authentication
35
+ - `connect()` - Sandbox connection with all options
36
+ - `disconnect()` - Cleanup
37
+ - Instance management (`getInstance()`, `getSessionId()`)
38
+ - Logging and events (`setLogging()`, `getEmitter()`)
39
+
40
+ #### Elements (`/v7/api/elements.mdx`)
41
+ - `find()` - AI-powered element location
42
+ - Element class methods:
43
+ - `found()` - Check if located
44
+ - `click()`, `hover()`, `doubleClick()`, `rightClick()`
45
+ - `mouseDown()`, `mouseUp()` - For drag operations
46
+ - Element properties:
47
+ - Coordinates (`x`, `y`, `centerX`, `centerY`)
48
+ - Visual data (`screenshot`, `width`, `height`, `boundingBox`)
49
+ - Content (`text`, `label`, `confidence`)
50
+ - Polling patterns for dynamic elements
51
+
52
+ #### Sandbox (`/v7/api/sandbox.mdx`)
53
+ - `exec()` - Execute code in sandbox
54
+ - JavaScript execution (browser context)
55
+ - PowerShell execution (Windows commands)
56
+ - `focusApplication()` - Window management
57
+ - Common operations:
58
+ - Software installation
59
+ - File operations
60
+ - Environment variables
61
+ - Network operations
62
+ - Process management
63
+ - Browser automation
64
+
65
+ #### Interactions (`/v7/api/interactions.mdx`)
66
+ - `type()` - Text input
67
+ - `pressKeys()` - Keyboard shortcuts and special keys
68
+ - `click()` / `hover()` - Coordinate-based mouse actions
69
+ - `scroll()` - Page scrolling
70
+ - `scrollUntilText()` / `scrollUntilImage()` - Scroll until found
71
+ - Keyboard key reference
72
+
73
+ #### Assertions (`/v7/api/assertions.mdx`)
74
+ - `assert()` - AI-powered assertions
75
+ - Basic assertions
76
+ - Negative assertions (invert parameter)
77
+ - Async assertions
78
+ - `extract()` - Extract information from screen
79
+ - Testing patterns:
80
+ - Polling assertions
81
+ - Multi-step validation
82
+ - Soft assertions
83
+ - Best practices
84
+
85
+ ### Guides
86
+
87
+ #### Migration (`/v7/guides/migration.mdx`)
88
+ - Why migrate from YAML to SDK
89
+ - Basic structure comparison
90
+ - Complete command mapping:
91
+ - Element location
92
+ - Typing and keyboard
93
+ - Scrolling
94
+ - Assertions
95
+ - Code execution
96
+ - Application focus
97
+ - Advanced patterns:
98
+ - Variables and data reuse
99
+ - Conditional logic
100
+ - Loops
101
+ - Data-driven tests
102
+ - Lifecycle hooks comparison
103
+ - Migration checklist
104
+ - Common pitfalls
105
+ - Complete example migration
106
+
107
+ ## Integration with docs.json
108
+
109
+ The v7 documentation is integrated into `docs/docs.json` under the "Computer-Use SDK" tab with version "7.0.0 (SDK)", distinguishing it from the YAML-based "6.X.X (YAML)" documentation.
110
+
111
+ ## Examples Used
112
+
113
+ The documentation uses examples from:
114
+ - `testdriver/acceptance-sdk/assert.test.mjs` - Basic assertion test
115
+ - `testdriver/acceptance-sdk/type.test.mjs` - Typing and form interaction
116
+ - `testdriver/acceptance-sdk/focus-window.test.mjs` - Application focus
117
+ - Other SDK test files for complete examples
118
+
119
+ ## Key Documentation Features
120
+
121
+ 1. **Practical Examples**: Every method includes working code examples
122
+ 2. **Best Practices**: Accordion sections with tips and patterns
123
+ 3. **Migration Support**: Complete YAML-to-SDK migration guide
124
+ 4. **Type Safety**: Parameter documentation with types
125
+ 5. **Real Test Patterns**: Examples based on actual test files
126
+ 6. **Comprehensive Coverage**: All major SDK features documented
127
+
128
+ ## Next Steps
129
+
130
+ Consider adding:
131
+ - `/v7/guides/best-practices.mdx` - Detailed best practices
132
+ - `/v7/guides/examples.mdx` - Complete test suite examples
133
+ - `/v7/guides/debugging.mdx` - Debugging techniques
134
+ - `/v7/guides/ci-cd.mdx` - CI/CD integration guide
135
+ - `/v7/api/keyboard-keys.mdx` - Complete keyboard key reference
@@ -0,0 +1,414 @@
1
+ ---
2
+ title: "Test Reports & Analytics"
3
+ description: "Comprehensive test reporting and analytics for teams"
4
+ icon: "chart-line"
5
+ ---
6
+
7
+ TestDriver provides detailed test reports and analytics through the web dashboard at [app.testdriver.ai](https://app.testdriver.ai), giving you complete visibility into test runs, failures, and trends.
8
+
9
+ ## Web Dashboard
10
+
11
+ Access comprehensive test analytics and reports:
12
+
13
+ <Card title="TestDriver Dashboard" icon="chart-simple" href="https://app.testdriver.ai">
14
+ View all test runs, replays, and analytics at app.testdriver.ai
15
+ </Card>
16
+
17
+ ### Dashboard Features
18
+
19
+ <CardGroup cols={2}>
20
+ <Card title="Test Runs" icon="list">
21
+ - All test executions
22
+ - Pass/fail status
23
+ - Duration and timing
24
+ - Filter by date, project, or status
25
+ </Card>
26
+
27
+ <Card title="Dashcam Replays" icon="video">
28
+ - Video replays of every test
29
+ - Step-by-step action logs
30
+ - Screenshots at each step
31
+ - Shareable replay links
32
+ </Card>
33
+
34
+ <Card title="Analytics" icon="chart-line">
35
+ - Success rate trends
36
+ - Test duration over time
37
+ - Flaky test detection
38
+ - Cache hit rates
39
+ </Card>
40
+
41
+ <Card title="Team Collaboration" icon="users">
42
+ - Share replays with team
43
+ - Comment on test runs
44
+ - Tag team members
45
+ - Export reports
46
+ </Card>
47
+ </CardGroup>
48
+
49
+ ## Test Run Details
50
+
51
+ Each test run includes comprehensive information:
52
+
53
+ ```javascript
54
+ import { test } from 'vitest';
55
+ import { chrome } from 'testdriverai/presets';
56
+
57
+ test('detailed test run', async (context) => {
58
+ const { testdriver, dashcam } = await chrome(context, {
59
+ url: 'https://example.com'
60
+ });
61
+
62
+ await testdriver.find('login button').click();
63
+ await testdriver.assert('login form is visible');
64
+
65
+ // After test completes, view detailed report at:
66
+ console.log('Replay URL:', dashcam.url);
67
+ // https://app.testdriver.ai/replay/abc123
68
+ });
69
+ ```
70
+
71
+ ### Available Report Data
72
+
73
+ <AccordionGroup>
74
+ <Accordion title="Execution Details">
75
+ - Test name and file
76
+ - Start and end time
77
+ - Total duration
78
+ - Pass/fail status
79
+ - Error messages and stack traces
80
+ - Exit code
81
+ </Accordion>
82
+
83
+ <Accordion title="Action Log">
84
+ - Every TestDriver command executed
85
+ - Timestamp for each action
86
+ - AI vision analysis results
87
+ - Element coordinates found
88
+ - Screenshots before/after each action
89
+ </Accordion>
90
+
91
+ <Accordion title="Performance Metrics">
92
+ - Time per command
93
+ - AI inference latency
94
+ - Cache hit/miss ratio
95
+ - Network request timing
96
+ - Screenshot capture time
97
+ </Accordion>
98
+
99
+ <Accordion title="Environment Info">
100
+ - Operating system
101
+ - Browser version
102
+ - Screen resolution
103
+ - Sandbox ID
104
+ - API version
105
+ </Accordion>
106
+ </AccordionGroup>
107
+
108
+ ## JUnit XML Reports
109
+
110
+ Generate JUnit-compatible XML reports for CI/CD integration:
111
+
112
+ ```bash
113
+ # Generate JUnit report
114
+ vitest run --reporter=junit --outputFile=test-results.xml
115
+ ```
116
+
117
+ ```xml test-results.xml
118
+ <?xml version="1.0" encoding="UTF-8"?>
119
+ <testsuites name="vitest tests" tests="12" failures="1" errors="0" time="125.3">
120
+ <testsuite name="login.test.js" tests="3" failures="1" time="31.2">
121
+ <testcase name="user can login" time="12.4" />
122
+ <testcase name="invalid credentials show error" time="9.8">
123
+ <failure message="AssertionError: expected login to fail">
124
+ Stack trace details...
125
+ </failure>
126
+ </testcase>
127
+ <testcase name="password reset works" time="9.0" />
128
+ </testsuite>
129
+ </testsuites>
130
+ ```
131
+
132
+ <Check>
133
+ JUnit reports integrate with Jenkins, Azure DevOps, TeamCity, CircleCI, and GitHub Actions for test result visualization.
134
+ </Check>
135
+
136
+ ## CI/CD Integration
137
+
138
+ TestDriver reports integrate seamlessly with popular CI/CD platforms:
139
+
140
+ <Tabs>
141
+ <Tab title="GitHub Actions">
142
+ ```yaml .github/workflows/test.yml
143
+ name: E2E Tests
144
+
145
+ on: [push, pull_request]
146
+
147
+ jobs:
148
+ test:
149
+ runs-on: ubuntu-latest
150
+ steps:
151
+ - uses: actions/checkout@v3
152
+ - uses: actions/setup-node@v3
153
+ - run: npm install
154
+ - run: vitest run --reporter=junit --outputFile=test-results.xml
155
+ env:
156
+ TD_API_KEY: ${{ secrets.TD_API_KEY }}
157
+
158
+ # Upload test results
159
+ - uses: actions/upload-artifact@v3
160
+ if: always()
161
+ with:
162
+ name: test-results
163
+ path: test-results.xml
164
+ ```
165
+
166
+ Test results appear in the GitHub Actions UI with pass/fail status.
167
+ </Tab>
168
+
169
+ <Tab title="GitLab CI">
170
+ ```yaml .gitlab-ci.yml
171
+ test:
172
+ image: node:20
173
+ script:
174
+ - npm install
175
+ - vitest run --reporter=junit --outputFile=junit.xml
176
+ artifacts:
177
+ when: always
178
+ reports:
179
+ junit: junit.xml
180
+ variables:
181
+ TD_API_KEY: $TD_API_KEY
182
+ ```
183
+
184
+ GitLab automatically parses JUnit reports and displays test results in merge requests.
185
+ </Tab>
186
+
187
+ <Tab title="CircleCI">
188
+ ```yaml .circleci/config.yml
189
+ version: 2.1
190
+ jobs:
191
+ test:
192
+ docker:
193
+ - image: cimg/node:20.0
194
+ steps:
195
+ - checkout
196
+ - run: npm install
197
+ - run: vitest run --reporter=junit --outputFile=test-results/junit.xml
198
+ - store_test_results:
199
+ path: test-results
200
+ - store_artifacts:
201
+ path: test-results
202
+ ```
203
+
204
+ CircleCI displays test insights on the Tests tab.
205
+ </Tab>
206
+
207
+ <Tab title="Jenkins">
208
+ ```groovy Jenkinsfile
209
+ pipeline {
210
+ agent any
211
+ stages {
212
+ stage('Test') {
213
+ steps {
214
+ sh 'npm install'
215
+ sh 'vitest run --reporter=junit --outputFile=test-results.xml'
216
+ }
217
+ }
218
+ }
219
+ post {
220
+ always {
221
+ junit 'test-results.xml'
222
+ }
223
+ }
224
+ }
225
+ ```
226
+
227
+ Jenkins publishes test results with trends and history.
228
+ </Tab>
229
+ </Tabs>
230
+
231
+ ## Custom Reporting
232
+
233
+ Access raw test data programmatically:
234
+
235
+ ```javascript
236
+ import { test } from 'vitest';
237
+ import { chrome } from 'testdriverai/presets';
238
+ import fs from 'fs';
239
+
240
+ test('custom reporting', async (context) => {
241
+ const { testdriver, dashcam } = await chrome(context, {
242
+ url: 'https://example.com'
243
+ });
244
+
245
+ const startTime = Date.now();
246
+
247
+ await testdriver.find('button').click();
248
+ await testdriver.assert('page loaded');
249
+
250
+ const duration = Date.now() - startTime;
251
+
252
+ // Build custom report
253
+ const report = {
254
+ testName: 'custom reporting',
255
+ duration,
256
+ replayUrl: dashcam.url,
257
+ status: 'passed',
258
+ timestamp: new Date().toISOString()
259
+ };
260
+
261
+ // Save to custom format
262
+ fs.writeFileSync(
263
+ 'custom-report.json',
264
+ JSON.stringify(report, null, 2)
265
+ );
266
+ });
267
+ ```
268
+
269
+ ## Analytics & Trends
270
+
271
+ View historical trends in the web dashboard:
272
+
273
+ <CardGroup cols={2}>
274
+ <Card title="Success Rate" icon="percent">
275
+ Track test stability over time
276
+ - Daily/weekly/monthly success rates
277
+ - Identify flaky tests
278
+ - Compare across branches
279
+ </Card>
280
+
281
+ <Card title="Performance Trends" icon="gauge">
282
+ Monitor test performance
283
+ - Average test duration
284
+ - Slowest tests
285
+ - Cache effectiveness
286
+ </Card>
287
+
288
+ <Card title="Usage Metrics" icon="chart-bar">
289
+ Track team usage
290
+ - Tests run per day
291
+ - Active team members
292
+ - API usage
293
+ </Card>
294
+
295
+ <Card title="Cost Analysis" icon="dollar-sign">
296
+ Optimize spending
297
+ - Cost per test
298
+ - Sandbox usage
299
+ - Cache savings
300
+ </Card>
301
+ </CardGroup>
302
+
303
+ ## Export Options
304
+
305
+ Download reports in multiple formats:
306
+
307
+ <Tabs>
308
+ <Tab title="JSON">
309
+ ```json
310
+ {
311
+ "testRuns": [
312
+ {
313
+ "id": "run_abc123",
314
+ "name": "login test",
315
+ "status": "passed",
316
+ "duration": 12400,
317
+ "timestamp": "2024-12-09T10:30:00Z",
318
+ "replayUrl": "https://app.testdriver.ai/replay/abc123"
319
+ }
320
+ ],
321
+ "summary": {
322
+ "total": 100,
323
+ "passed": 95,
324
+ "failed": 5,
325
+ "successRate": 0.95
326
+ }
327
+ }
328
+ ```
329
+ </Tab>
330
+
331
+ <Tab title="CSV">
332
+ ```csv
333
+ Test Name,Status,Duration (ms),Timestamp,Replay URL
334
+ login test,passed,12400,2024-12-09T10:30:00Z,https://app.testdriver.ai/replay/abc123
335
+ checkout test,passed,18200,2024-12-09T10:31:00Z,https://app.testdriver.ai/replay/def456
336
+ search test,failed,5600,2024-12-09T10:32:00Z,https://app.testdriver.ai/replay/ghi789
337
+ ```
338
+ </Tab>
339
+
340
+ <Tab title="PDF">
341
+ Generate PDF reports with:
342
+ - Executive summary
343
+ - Test results table
344
+ - Embedded screenshots
345
+ - Trend charts
346
+ - Recommendations
347
+ </Tab>
348
+ </Tabs>
349
+
350
+ ## Slack/Teams Integration
351
+
352
+ Get test notifications in your team chat:
353
+
354
+ ```yaml .github/workflows/test.yml
355
+ - name: Notify Slack
356
+ if: failure()
357
+ uses: slackapi/slack-github-action@v1
358
+ with:
359
+ payload: |
360
+ {
361
+ "text": "E2E Tests Failed",
362
+ "blocks": [
363
+ {
364
+ "type": "section",
365
+ "text": {
366
+ "type": "mrkdwn",
367
+ "text": "❌ E2E tests failed on ${{ github.ref }}\n<${{ env.REPLAY_URL }}|View Replay>"
368
+ }
369
+ }
370
+ ]
371
+ }
372
+ env:
373
+ SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}
374
+ ```
375
+
376
+ <Card title="Notifications Setup" icon="bell" href="/v7/guides/notifications">
377
+ Configure Slack, Teams, Discord, and email notifications
378
+ </Card>
379
+
380
+ ## Learn More
381
+
382
+ <CardGroup cols={2}>
383
+ <Card
384
+ title="Observability & Debugging"
385
+ icon="microscope"
386
+ href="/v7/features/observable"
387
+ >
388
+ Learn about Dashcam replays and debugging
389
+ </Card>
390
+
391
+ <Card
392
+ title="Continuous Testing"
393
+ icon="arrows-spin"
394
+ href="/v7/features/continuous-testing"
395
+ >
396
+ CI/CD integration guide
397
+ </Card>
398
+
399
+ <Card
400
+ title="Dashboard"
401
+ icon="chart-simple"
402
+ href="https://app.testdriver.ai"
403
+ >
404
+ View your test reports
405
+ </Card>
406
+
407
+ <Card
408
+ title="API Documentation"
409
+ icon="code"
410
+ href="/v7/api/overview"
411
+ >
412
+ Programmatic access to reports
413
+ </Card>
414
+ </CardGroup>