@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,399 @@
1
+ # TestDriver Test Recording Architecture
2
+
3
+ ## Overview
4
+
5
+ This system provides comprehensive test execution tracking, linking test runs with dashcam screen recordings and CI/CD pipelines in the TestDriver dashboard.
6
+
7
+ ## Architecture Diagram
8
+
9
+ ```
10
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
11
+ โ”‚ Developer's Machine / CI โ”‚
12
+ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
13
+ โ”‚ โ”‚
14
+ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
15
+ โ”‚ โ”‚ Vitest โ”‚โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถโ”‚ TD Vitest โ”‚ โ”‚
16
+ โ”‚ โ”‚ Test Runner โ”‚ โ”‚ Plugin โ”‚ โ”‚
17
+ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
18
+ โ”‚ โ”‚ โ”‚
19
+ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚
20
+ โ”‚ โ”‚ Dashcam โ”‚ โ”‚ โ”‚
21
+ โ”‚ โ”‚ Recording โ”‚ โ”‚ โ”‚
22
+ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚
23
+ โ”‚ โ”‚ โ”‚ โ”‚
24
+ โ”‚ โ”‚ (records screen) โ”‚ (reports results) โ”‚
25
+ โ”‚ โ”‚ โ”‚ โ”‚
26
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
27
+ โ”‚ โ”‚
28
+ โ”‚ โ”‚
29
+ โ–ผ โ–ผ
30
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
31
+ โ”‚ TestDriver API Server โ”‚
32
+ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
33
+ โ”‚ โ”‚
34
+ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
35
+ โ”‚ โ”‚ Replay API โ”‚ โ”‚ Test Run API โ”‚ โ”‚
36
+ โ”‚ โ”‚ (dashcam) โ”‚ โ”‚ (new) โ”‚ โ”‚
37
+ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
38
+ โ”‚ โ”‚ โ”‚ โ”‚
39
+ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
40
+ โ”‚ โ”‚ โ”‚
41
+ โ”‚ โ–ผ โ”‚
42
+ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
43
+ โ”‚ โ”‚ MongoDB โ”‚ โ”‚
44
+ โ”‚ โ”‚ โ”‚ โ”‚
45
+ โ”‚ โ”‚ โ€ข TdTestRun โ”‚ โ”‚
46
+ โ”‚ โ”‚ โ€ข TdTestCase โ”‚ โ”‚
47
+ โ”‚ โ”‚ โ€ข Replay โ”‚ โ”‚
48
+ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
49
+ โ”‚ โ”‚
50
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
51
+ โ”‚
52
+ โ”‚
53
+ โ–ผ
54
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
55
+ โ”‚ TestDriver Web Dashboard โ”‚
56
+ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
57
+ โ”‚ โ”‚
58
+ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
59
+ โ”‚ โ”‚ Test Runs View (NEW) โ”‚ โ”‚
60
+ โ”‚ โ”‚ โ”‚ โ”‚
61
+ โ”‚ โ”‚ โ€ข List all test runs โ”‚ โ”‚
62
+ โ”‚ โ”‚ โ€ข Filter by status, date, CI โ”‚ โ”‚
63
+ โ”‚ โ”‚ โ€ข Show pass/fail statistics โ”‚ โ”‚
64
+ โ”‚ โ”‚ โ€ข Link to CI/CD runs โ”‚ โ”‚
65
+ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
66
+ โ”‚ โ”‚
67
+ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
68
+ โ”‚ โ”‚ Test Run Detail View (NEW) โ”‚ โ”‚
69
+ โ”‚ โ”‚ โ”‚ โ”‚
70
+ โ”‚ โ”‚ โ€ข Test case list with status โ”‚ โ”‚
71
+ โ”‚ โ”‚ โ€ข Dashcam replay player (embedded) โ”‚ โ”‚
72
+ โ”‚ โ”‚ โ€ข Error messages and stack traces โ”‚ โ”‚
73
+ โ”‚ โ”‚ โ€ข Sandbox details โ”‚ โ”‚
74
+ โ”‚ โ”‚ โ€ข Git commit info โ”‚ โ”‚
75
+ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
76
+ โ”‚ โ”‚
77
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
78
+ ```
79
+
80
+ ## Data Models
81
+
82
+ ### TdTestRun
83
+ Represents a complete test suite execution (e.g., `vitest run`).
84
+
85
+ **Key Fields:**
86
+ - `runId`: Unique identifier
87
+ - `suiteName`: Name of the test suite
88
+ - `status`: running | passed | failed | cancelled
89
+ - `totalTests`, `passedTests`, `failedTests`: Statistics
90
+ - `platform`: windows | mac | linux
91
+ - CI/CD metadata (provider, runId, url)
92
+ - Git metadata (repo, branch, commit)
93
+ - `dashcamSessionId`: Links to dashcam recordings
94
+
95
+ **Relationships:**
96
+ - `team`: Owner team
97
+ - `testCases`: Collection of TdTestCase
98
+ - `replays`: Associated Replay records
99
+
100
+ ### TdTestCase
101
+ Represents an individual test within a test run.
102
+
103
+ **Key Fields:**
104
+ - `testName`: Test name from `test('...')`
105
+ - `testFile`: Path to test file
106
+ - `suiteName`: Describe block name
107
+ - `status`: passed | failed | skipped | pending
108
+ - `duration`: Test duration in ms
109
+ - `errorMessage`, `errorStack`: Failure details
110
+ - `replayUrl`: Direct link to dashcam replay
111
+ - `replayStartTime`, `replayEndTime`: Timestamps within replay
112
+
113
+ **Relationships:**
114
+ - `testRun`: Parent TdTestRun
115
+ - `replay`: Associated Replay recor
116
+ ### Replay (Extended)
117
+ Existing model extended with test run associations.
118
+
119
+ **New Fields:**
120
+ - `tdTestRun`: Associated test run
121
+ - `tdTestCase`: Associated test case
122
+
123
+ ## API Endpoints
124
+
125
+ ### POST /api/v1/testdriver/test-run-create
126
+ Create a new test run.
127
+
128
+ **Auth:** Required (Bearer token)
129
+
130
+ **Request:**
131
+ ```json
132
+ {
133
+ "runId": "vitest-1234567890-abc123",
134
+ "suiteName": "Integration Tests",
135
+ "platform": "windows",
136
+ "sandboxId": "sandbox-xyz",
137
+ "ciProvider": "GitHub Actions",
138
+ "ciRunId": "12345",
139
+ "repo": "myorg/myrepo",
140
+ "branch": "main",
141
+ "commit": "abc123def456"
142
+ }
143
+ ```
144
+
145
+ **Response:**
146
+ ```json
147
+ {
148
+ "data": {
149
+ "id": "...",
150
+ "runId": "vitest-1234567890-abc123",
151
+ "status": "running",
152
+ "startTime": 1700000000000
153
+ }
154
+ }
155
+ ```
156
+
157
+ ### POST /api/v1/testdriver/test-run-complete
158
+ Mark a test run as complete.
159
+
160
+ **Auth:** Required
161
+
162
+ **Request:**
163
+ ```json
164
+ {
165
+ "runId": "vitest-1234567890-abc123",
166
+ "status": "passed",
167
+ "totalTests": 25,
168
+ "passedTests": 24,
169
+ "failedTests": 1,
170
+ "skippedTests": 0
171
+ }
172
+ ```
173
+
174
+ ### POST /api/v1/testdriver/test-case-create
175
+ Record a test case result (create or update).
176
+
177
+ **Auth:** Required
178
+
179
+ **Request:**
180
+ ```json
181
+ {
182
+ "runId": "vitest-1234567890-abc123",
183
+ "testName": "should login successfully",
184
+ "testFile": "tests/auth/login.test.js",
185
+ "suiteName": "Authentication Tests",
186
+ "status": "passed",
187
+ "startTime": 1700000001000,
188
+ "endTime": 1700000002500,
189
+ "duration": 1500,
190
+ "replayUrl": "https://app.dashcam.io/replay/abc123"
191
+ }
192
+ ```
193
+
194
+ ## Components
195
+
196
+ ### Vitest Plugin (`interfaces/vitest-plugin.mjs`)
197
+ Automatically integrates with Vitest test runs.
198
+
199
+ **Features:**
200
+ - Auto-detects CI/CD environment (GitHub Actions, GitLab, etc.)
201
+ - Extracts Git metadata from environment or git commands
202
+ - Creates test run at start
203
+ - Records each test case result
204
+ - Associates with dashcam session if `DASHCAM_SESSION_ID` is set
205
+ - Completes test run with statistics
206
+ - Uses plugin architecture for better global state management
207
+
208
+ **Usage:**
209
+ ```javascript
210
+ // vitest.config.mjs
211
+ import testDriverPlugin from './interfaces/vitest-plugin.mjs';
212
+
213
+ export default {
214
+ plugins: [
215
+ testDriverPlugin({
216
+ apiKey: process.env.TD_API_KEY,
217
+ apiRoot: process.env.TD_API_ROOT || 'https://api.testdriver.ai',
218
+ }),
219
+ ],
220
+ }
221
+ ```
222
+
223
+ ### SDK Methods (`sdk.js`)
224
+
225
+ #### `client.createTestRun(options)`
226
+ Create a test run programmatically.
227
+
228
+ #### `client.recordTestCase(options)`
229
+ Record a test case result.
230
+
231
+ #### `client.completeTestRun(options)`
232
+ Mark test run as complete.
233
+
234
+ ## Integration Flows
235
+
236
+ ### Flow 1: Automated with Vitest Reporter
237
+
238
+ ```
239
+ 1. Developer runs: vitest run
240
+ 2. Vitest starts, reporter initializes
241
+ 3. Reporter creates TdTestRun
242
+ 4. For each test:
243
+ - Vitest runs test
244
+ - Reporter records TdTestCase (passed/failed)
245
+ 5. All tests complete
246
+ 6. Reporter calls completeTestRun()
247
+ 7. Results visible in dashboard
248
+ ```
249
+
250
+ ### Flow 2: With Dashcam Recording
251
+
252
+ ```
253
+ 1. Start dashcam: dashcam start
254
+ 2. Set session ID: export DASHCAM_SESSION_ID=$(dashcam session-id)
255
+ 3. Run tests: vitest run
256
+ 4. Reporter creates test run with dashcamSessionId
257
+ 5. Tests execute, dashcam records
258
+ 6. Stop dashcam: dashcam stop
259
+ 7. Publish: dashcam publish -p PROJECT_ID
260
+ 8. Replay URL returned
261
+ 9. Dashboard shows test results + replay link
262
+ ```
263
+
264
+ ### Flow 3: CI/CD Pipeline (GitHub Actions)
265
+
266
+ ```yaml
267
+ jobs:
268
+ test:
269
+ runs-on: windows-latest
270
+ steps:
271
+ - uses: actions/checkout@v3
272
+ - run: npm install
273
+ - name: Start Dashcam
274
+ run: |
275
+ dashcam start
276
+ echo "DASHCAM_SESSION_ID=$(dashcam session-id)" >> $GITHUB_ENV
277
+ - name: Run Tests
278
+ env:
279
+ TD_API_KEY: ${{ secrets.TD_API_KEY }}
280
+ run: vitest run
281
+ - name: Publish Recording
282
+ if: always()
283
+ run: |
284
+ dashcam stop
285
+ dashcam publish -p ${{ secrets.DASHCAM_PROJECT_ID }}
286
+ ```
287
+
288
+ Reporter auto-detects:
289
+ - GitHub repo, branch, commit
290
+ - Workflow run ID and URL
291
+ - Job ID
292
+ - Actor (who triggered)
293
+
294
+ ## Dashcam Association Strategies
295
+
296
+ ### Strategy 1: Session ID (Implemented)
297
+ - Set `DASHCAM_SESSION_ID` environment variable
298
+ - Reporter includes in test run creation
299
+ - Dashboard queries replays by session ID
300
+ - Shows all replays from that session
301
+
302
+ ### Strategy 2: Explicit URL (Implemented)
303
+ - Dashcam publishes, returns URL
304
+ - Pass URL to `recordTestCase()`
305
+ - Direct 1:1 link between test and replay
306
+
307
+ ### Strategy 3: Timestamp Matching (Future)
308
+ - Parse dashcam logs for replay timestamps
309
+ - Match test start/end times with replay markers
310
+ - Automatically associate without manual linking
311
+ - Allows seeking to exact test within long replay
312
+
313
+ ### Strategy 4: Log Parsing (Future)
314
+ - Dashcam logs test names/files during recording
315
+ - Parse logs to extract test-to-timestamp mapping
316
+ - Generate replay URLs with timestamp seek parameters
317
+ - Example: `https://app.dashcam.io/replay/abc123?t=45000` (seek to 45s)
318
+
319
+ ## Dashboard Views (To Be Built)
320
+
321
+ ### Test Runs List
322
+ - Table of all test runs
323
+ - Columns: Suite Name, Status, Tests (passed/failed), Duration, Date, CI Link
324
+ - Filters: Status, Date range, CI provider, Platform
325
+ - Search: By suite name, repo, branch
326
+
327
+ ### Test Run Detail
328
+ - Header: Suite name, status, duration, platform
329
+ - Statistics card: Total/passed/failed/skipped
330
+ - Test cases table: Name, Status, Duration, Replay link
331
+ - Sidebar: Git info, CI info, Sandbox details
332
+ - Dashcam replay player (embedded iframe)
333
+ - Click test case โ†’ seek replay to that test's time range
334
+
335
+ ### Sandbox Management
336
+ - List of active/terminated sandboxes
337
+ - Lifecycle timeline visualization
338
+ - Cost tracking (duration ร— instance type)
339
+ - Associated test runs
340
+
341
+ ## Environment Variables
342
+
343
+ | Variable | Required | Description |
344
+ |----------|----------|-------------|
345
+ | `TD_API_KEY` | Yes | TestDriver API key for authentication |
346
+ | `DASHCAM_SESSION_ID` | No | Links test run to dashcam session |
347
+ | `TD_SANDBOX_ID` | No | Sandbox ID if running in TestDriver sandbox |
348
+ | `GITHUB_ACTIONS` | Auto | Detected for GitHub Actions integration |
349
+ | `GITLAB_CI` | Auto | Detected for GitLab CI integration |
350
+ | `CIRCLECI` | Auto | Detected for CircleCI integration |
351
+
352
+ ## Future Enhancements
353
+
354
+ 1. **Real-time Test Streaming**
355
+ - WebSocket connection from reporter
356
+ - Live test progress in dashboard
357
+ - See tests pass/fail as they run
358
+
359
+ 2. **Flaky Test Detection**
360
+ - Track test history across runs
361
+ - Identify tests that intermittently fail
362
+ - Suggest fixes based on error patterns
363
+
364
+ 3. **Performance Regression Detection**
365
+ - Compare test durations across runs
366
+ - Alert on significant slowdowns
367
+ - Visualize performance trends
368
+
369
+ 4. **Advanced Dashcam Integration**
370
+ - Automatic timestamp extraction from logs
371
+ - AI-powered test failure analysis from replays
372
+ - Highlight exact moment of failure in replay
373
+
374
+ 5. **Multi-Framework Support**
375
+ - Jest reporter
376
+ - Mocha reporter
377
+ - Playwright reporter
378
+ - Cypress plugin
379
+
380
+ 6. **Cost Analytics**
381
+ - Track sandbox costs per test run
382
+ - Optimize instance types
383
+ - Budget alerts
384
+
385
+ ## Security Considerations
386
+
387
+ - API keys stored securely (environment variables)
388
+ - Bearer token authentication for all API calls
389
+ - Team-based access control (tests only visible to team members)
390
+ - Replay access control (dashcam's existing permissions)
391
+ - No sensitive data in test metadata (sanitize error messages)
392
+
393
+ ## Performance Considerations
394
+
395
+ - Async test case recording (doesn't slow tests)
396
+ - Batch updates for large test suites
397
+ - Efficient database indexing (runId, testFile, status)
398
+ - Replay association is lazy (doesn't block test recording)
399
+ - Optional reporter (disable in local development)
@@ -0,0 +1,167 @@
1
+ # Auto-Generated Cache Keys from File Hash
2
+
3
+ ## Overview
4
+
5
+ When you create a TestDriver instance without providing an explicit `cacheKey`, the SDK will automatically generate one based on the SHA-256 hash of the calling file. This provides automatic cache invalidation when your test file changes, while enabling cache hits for identical test runs.
6
+
7
+ ## How It Works
8
+
9
+ 1. **Stack Trace Analysis**: When `TestDriver()` is called, the SDK analyzes the call stack to find the caller file
10
+ 2. **File Hashing**: The content of the caller file is hashed using SHA-256
11
+ 3. **Cache Key Generation**: The first 16 characters of the hash are used as the cache key
12
+ 4. **Automatic Updates**: When the test file is modified, the hash changes, automatically invalidating the cache
13
+
14
+ ## Benefits
15
+
16
+ - โœ… **No Manual Cache Management**: Cache keys are automatically generated and updated
17
+ - โœ… **File-Scoped Caching**: All tests in the same file share the same cache
18
+ - โœ… **Automatic Invalidation**: Cache is invalidated when the test file changes
19
+ - โœ… **Explicit Override**: You can still provide a manual `cacheKey` if needed
20
+
21
+ ## Usage Examples
22
+
23
+ ### Automatic Cache Key (Recommended)
24
+
25
+ ```javascript
26
+ import { TestDriver } from 'testdriverai/vitest/hooks';
27
+
28
+ test('login test', async (context) => {
29
+ // No cacheKey provided - will be auto-generated from this file's hash
30
+ const testdriver = TestDriver(context, {
31
+ headless: true
32
+ });
33
+
34
+ // Cache key is automatically set based on this file
35
+ console.log(testdriver.options.cacheKey); // e.g., "4cae7be040f293b9"
36
+
37
+ const button = await testdriver.find('login button');
38
+ // Subsequent calls in this test file will use the same cache
39
+ });
40
+ ```
41
+
42
+ ### Explicit Cache Key (Override)
43
+
44
+ ```javascript
45
+ import { TestDriver } from 'testdriverai/vitest/hooks';
46
+
47
+ test('login test', async (context) => {
48
+ // Explicit cacheKey provided - auto-generation is skipped
49
+ const testdriver = TestDriver(context, {
50
+ headless: true,
51
+ cacheKey: 'my-custom-key-v1'
52
+ });
53
+
54
+ console.log(testdriver.options.cacheKey); // "my-custom-key-v1"
55
+
56
+ const button = await testdriver.find('login button');
57
+ });
58
+ ```
59
+
60
+ ## Cache Behavior
61
+
62
+ ### With Auto-Generated Key
63
+
64
+ 1. **First Run**: Creates cache entries with key = hash of test file
65
+ 2. **Subsequent Runs** (file unchanged): Cache hits
66
+ 3. **After File Modification**: New hash = new cache key = cache miss
67
+
68
+ ### Cache Hit Example
69
+
70
+ ```javascript
71
+ // File: login.test.mjs (hash: 4cae7be040f293b9)
72
+
73
+ const testdriver = TestDriver(context);
74
+ // Auto-generated cacheKey: "4cae7be040f293b9"
75
+
76
+ const button1 = await testdriver.find('login button'); // Cache MISS (first time)
77
+ const button2 = await testdriver.find('login button'); // Cache HIT (same file, same test run)
78
+ ```
79
+
80
+ After modifying the file (adding a comment, changing test logic, etc.):
81
+
82
+ ```javascript
83
+ // File: login.test.mjs (hash: 7f3d9a2b1c5e8f6a) <- changed!
84
+
85
+ const testdriver = TestDriver(context);
86
+ // Auto-generated cacheKey: "7f3d9a2b1c5e8f6a" <- different from before
87
+
88
+ const button1 = await testdriver.find('login button'); // Cache MISS (new hash)
89
+ ```
90
+
91
+ ## Debug Mode
92
+
93
+ To see the auto-generated cache key in debug logs:
94
+
95
+ ```bash
96
+ # Set environment variable
97
+ export TD_DEBUG=1
98
+
99
+ # Or in your test
100
+ process.env.TD_DEBUG = '1';
101
+ ```
102
+
103
+ With debug mode enabled, you'll see:
104
+ ```
105
+ ๐Ÿ” find() threshold: 0.05 (cache ENABLED, cacheKey: 4cae7be040f293b9 (auto-generated from file hash))
106
+ ```
107
+
108
+ ## Implementation Details
109
+
110
+ ### Stack Trace Filtering
111
+
112
+ The auto-generation skips the following in the stack trace to find the actual test file:
113
+ - `sdk.js` (TestDriver SDK)
114
+ - `hooks.mjs` / `hooks.js` (Vitest hooks)
115
+ - `node_modules` (dependencies)
116
+ - `node:internal` (Node.js internals)
117
+
118
+ ### File Path Handling
119
+
120
+ The implementation handles both:
121
+ - Regular file paths: `/Users/you/project/test.mjs`
122
+ - File URL format: `file:///Users/you/project/test.mjs`
123
+
124
+ ### Hash Format
125
+
126
+ - Algorithm: SHA-256
127
+ - Output: First 16 hexadecimal characters (e.g., `4cae7be040f293b9`)
128
+ - Collision probability: Effectively zero for practical purposes
129
+
130
+ ## When to Use Manual Cache Keys
131
+
132
+ Consider using manual `cacheKey` values when:
133
+
134
+ 1. **Cross-File Caching**: You want to share cache across multiple test files
135
+ 2. **Version-Based Caching**: You want explicit control over cache invalidation
136
+ 3. **CI/CD Integration**: You want to tie caching to build numbers or git commits
137
+
138
+ Example:
139
+
140
+ ```javascript
141
+ const cacheKey = \`test-suite-\${process.env.GIT_COMMIT}\`;
142
+ const testdriver = TestDriver(context, { cacheKey });
143
+ ```
144
+
145
+ ## Migration from Manual Keys
146
+
147
+ If you currently use manual cache keys:
148
+
149
+ ### Before
150
+ ```javascript
151
+ const testdriver = TestDriver(context, {
152
+ cacheKey: 'login-test-v1'
153
+ });
154
+ ```
155
+
156
+ ### After (automatic)
157
+ ```javascript
158
+ // Just remove the cacheKey - it will be auto-generated!
159
+ const testdriver = TestDriver(context);
160
+ ```
161
+
162
+ The cache will automatically invalidate when the test file changes, which is usually the desired behavior.
163
+
164
+ ## See Also
165
+
166
+ - [SDK_README.md](./SDK_README.md) - Cache configuration options
167
+ - [CACHE_ARCHITECTURE.md](../api/CACHE_ARCHITECTURE.md) - Cache system architecture
@@ -0,0 +1,100 @@
1
+ # AWESOME Logs - Quick Reference ๐ŸŽจ
2
+
3
+ ## At a Glance
4
+
5
+ Your TestDriver SDK now has **beautiful, emoji-rich logs** with great DX!
6
+
7
+ ### What You'll See
8
+
9
+ ```
10
+ [2.34s] ๐Ÿ” Found "submit button" ยท ๐Ÿ“ (682, 189) ยท โฑ๏ธ 167ms ยท โšก cached
11
+ [2.51s] ๐Ÿ‘† Click "submit button"
12
+ [2.67s] ๐Ÿ‘‰ Hover "menu item"
13
+ [2.89s] โŒจ๏ธ Type โ†’ hello world
14
+ [3.12s] โœ… Assert "page title correct" ยท โœ“ PASSED ยท โฑ๏ธ 45ms
15
+ ```
16
+
17
+ ## Quick Emoji Guide
18
+
19
+ | Emoji | Meaning |
20
+ |-------|---------|
21
+ | ๐Ÿ” | Finding element |
22
+ | ๐Ÿ‘† | Click |
23
+ | ๐Ÿ‘‰ | Hover |
24
+ | โŒจ๏ธ | Type |
25
+ | ๐Ÿ“œ | Scroll |
26
+ | โœ… | Success/Passed |
27
+ | โŒ | Error/Failed |
28
+ | โšก | Cache hit |
29
+ | ๐Ÿ’ค | Cache miss |
30
+ | ๐Ÿ“ | Coordinates |
31
+ | โฑ๏ธ | Duration |
32
+ | ๐Ÿ”Œ | Connect/Disconnect |
33
+ | ๐Ÿ“ธ | Screenshot |
34
+
35
+ ## Performance Colors
36
+
37
+ Duration times are color-coded:
38
+
39
+ - **๐ŸŸข < 100ms** - Fast
40
+ - **๐ŸŸก 100-500ms** - Acceptable
41
+ - **๐Ÿ”ด > 500ms** - Slow
42
+
43
+ ## Enable/Disable
44
+
45
+ ```javascript
46
+ // Enabled by default
47
+ const client = new TestDriver(apiKey, {
48
+ logging: true
49
+ });
50
+
51
+ // Disable if needed
52
+ client.setLogging(false);
53
+ ```
54
+
55
+ ## Debug Mode
56
+
57
+ For detailed cache information:
58
+
59
+ ```bash
60
+ VERBOSE=true node your-test.js
61
+ ```
62
+
63
+ You'll see:
64
+ - Cache strategy (image/text)
65
+ - Similarity scores
66
+ - Pixel diff percentages
67
+ - Cache age
68
+
69
+ ## Examples
70
+
71
+ Try these:
72
+
73
+ ```bash
74
+ # Simple example
75
+ TD_API_KEY=your_key node examples/sdk-simple-example.js
76
+
77
+ # Full demo
78
+ TD_API_KEY=your_key node examples/sdk-awesome-logs-demo.js
79
+
80
+ # Cache demo with debug info
81
+ TD_API_KEY=your_key VERBOSE=true node examples/sdk-cache-thresholds.js
82
+ ```
83
+
84
+ ## Custom Formatting
85
+
86
+ ```javascript
87
+ const { formatter } = require('testdriverai/sdk-log-formatter');
88
+
89
+ console.log(formatter.formatHeader('My Test', '๐Ÿงช'));
90
+ console.log(formatter.formatAction('click', 'button'));
91
+ console.log(formatter.formatProgress(3, 10, 'Processing'));
92
+ ```
93
+
94
+ ## Full Documentation
95
+
96
+ See [SDK_AWESOME_LOGS.md](./SDK_AWESOME_LOGS.md) for complete documentation.
97
+
98
+ ---
99
+
100
+ **Enjoy your AWESOME logs! ๐ŸŽจโœจ**