@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,155 @@
1
+ ---
2
+ title: "screenshot()"
3
+ sidebarTitle: "screenshot"
4
+ description: "Capture a screenshot of the current screen"
5
+ icon: "camera"
6
+ ---
7
+
8
+ ## Overview
9
+
10
+ Capture a screenshot of the current sandbox screen. Returns a base64 encoded PNG, or saves directly to a file and returns the filepath.
11
+
12
+ ## Syntax
13
+
14
+ ```javascript
15
+ // Options object (recommended)
16
+ await testdriver.screenshot(options)
17
+
18
+ // Legacy positional arguments
19
+ await testdriver.screenshot(scale, silent, mouse)
20
+ ```
21
+
22
+ ## Parameters
23
+
24
+ <ParamField path="options" type="object">
25
+ Options object for screenshot capture
26
+ </ParamField>
27
+
28
+ <ParamField path="options.scale" type="number" default="1">
29
+ Scale factor for the screenshot (1 = original size, 0.5 = half size, etc.)
30
+ </ParamField>
31
+
32
+ <ParamField path="options.silent" type="boolean" default="false">
33
+ Whether to suppress logging output
34
+ </ParamField>
35
+
36
+ <ParamField path="options.mouse" type="boolean" default="false">
37
+ Whether to include the mouse cursor in the screenshot
38
+ </ParamField>
39
+
40
+ <ParamField path="options.path" type="string">
41
+ File path to save the screenshot. If provided, the screenshot is saved to this file and the filepath is returned instead of base64 data. Directories are created automatically if they don't exist.
42
+ </ParamField>
43
+
44
+ ## Returns
45
+
46
+ `Promise<string>` - Base64 encoded PNG screenshot, or the filepath if `options.path` was provided.
47
+
48
+ ## Examples
49
+
50
+ ### Basic Screenshot (Base64)
51
+
52
+ ```javascript
53
+ // Capture a screenshot and get base64 data
54
+ const screenshot = await testdriver.screenshot();
55
+
56
+ // Write to file manually
57
+ import fs from 'fs';
58
+ fs.writeFileSync('screenshot.png', Buffer.from(screenshot, 'base64'));
59
+ ```
60
+
61
+ ### Save Directly to File
62
+
63
+ ```javascript
64
+ // Save screenshot directly to a file (returns filepath)
65
+ const filepath = await testdriver.screenshot({ path: './screenshots/test.png' });
66
+ console.log(`Screenshot saved to: ${filepath}`);
67
+ ```
68
+
69
+ ### With Mouse Cursor
70
+
71
+ ```javascript
72
+ // Include mouse cursor in screenshot
73
+ const screenshot = await testdriver.screenshot({ mouse: true });
74
+
75
+ // Or save to file with mouse cursor
76
+ const filepath = await testdriver.screenshot({
77
+ path: './debug/with-cursor.png',
78
+ mouse: true
79
+ });
80
+ ```
81
+
82
+ ### Scaled Screenshot
83
+
84
+ ```javascript
85
+ // Capture at half size (useful for reducing file size)
86
+ const screenshot = await testdriver.screenshot({ scale: 0.5 });
87
+
88
+ // Capture at double size
89
+ const filepath = await testdriver.screenshot({
90
+ path: './hires.png',
91
+ scale: 2
92
+ });
93
+ ```
94
+
95
+ ### Silent Mode
96
+
97
+ ```javascript
98
+ // Capture without logging output
99
+ const screenshot = await testdriver.screenshot({ silent: true });
100
+ ```
101
+
102
+ ### Legacy Usage
103
+
104
+ ```javascript
105
+ // Legacy positional arguments still work
106
+ const screenshot = await testdriver.screenshot(1, false, true);
107
+ // Equivalent to: screenshot({ scale: 1, silent: false, mouse: true })
108
+ ```
109
+
110
+ ## Use Cases
111
+
112
+ ### Debugging Test Failures
113
+
114
+ ```javascript
115
+ it('should complete checkout', async (context) => {
116
+ const testdriver = TestDriver(context);
117
+ await testdriver.provision.chrome({ url: 'https://shop.example.com' });
118
+
119
+ try {
120
+ await testdriver.find('Checkout button').click();
121
+ await testdriver.assert('Order confirmation is visible');
122
+ } catch (error) {
123
+ // Save screenshot on failure for debugging
124
+ await testdriver.screenshot({ path: './failures/checkout-failed.png' });
125
+ throw error;
126
+ }
127
+ });
128
+ ```
129
+
130
+ ### Visual Documentation
131
+
132
+ ```javascript
133
+ // Capture screenshots at each step for documentation
134
+ await testdriver.screenshot({ path: './docs/step1-login.png' });
135
+ await testdriver.find('Login button').click();
136
+ await testdriver.screenshot({ path: './docs/step2-dashboard.png' });
137
+ ```
138
+
139
+ ### Comparing States
140
+
141
+ ```javascript
142
+ // Capture before and after states
143
+ const before = await testdriver.screenshot();
144
+ await testdriver.find('Toggle dark mode').click();
145
+ const after = await testdriver.screenshot();
146
+
147
+ // Both are base64 - can be compared or stored
148
+ ```
149
+
150
+ ## Notes
151
+
152
+ - Screenshots are captured from the sandbox's virtual display
153
+ - The base64 string does not include a data URI prefix (raw base64)
154
+ - When using `path`, directories are created automatically if they don't exist
155
+ - File format is always PNG regardless of the file extension used
@@ -0,0 +1,468 @@
1
+ # TestDriver SDK - AWESOME Logs 🎨
2
+
3
+ Beautiful, emoji-rich logging with incredible DX that makes your test output a joy to read!
4
+
5
+ ## Features
6
+
7
+ ✨ **Rich Emojis & UTF-8** - Full emoji support now that dashcam supports UTF-8!
8
+ 🎨 **Color-Coded Actions** - Different colors for different action types
9
+ ⚡ **Performance Indicators** - Color-coded duration times (green < 100ms, yellow < 500ms, red > 500ms)
10
+ 📊 **Progress Tracking** - Beautiful progress bars for multi-step operations
11
+ 🔍 **Cache Visualization** - Clear indication of cache hits/misses
12
+ 📍 **Coordinate Display** - See exactly where elements are found
13
+ ⏱️ **Timing Information** - Elapsed time from test start on every log
14
+ 📦 **Beautiful Headers** - Box-drawn section headers for organization
15
+
16
+ ## Log Types
17
+
18
+ ### 🔍 Element Finding
19
+
20
+ ```javascript
21
+ const element = await client.find("submit button");
22
+ ```
23
+
24
+ **Output:**
25
+ ```
26
+ [2.34s] 🔍 Found "submit button" · 📍 (682, 189) · ⏱️ 167ms · ⚡ cached
27
+ ```
28
+
29
+ Features:
30
+ - Green checkmark for successful finds
31
+ - Coordinates with pin emoji
32
+ - Duration with color coding
33
+ - Cache status with lightning bolt
34
+
35
+ ### 👆 User Actions
36
+
37
+ ```javascript
38
+ await element.click();
39
+ await element.hover();
40
+ await client.type("hello world");
41
+ ```
42
+
43
+ **Output:**
44
+ ```
45
+ [2.51s] 👆 Click "submit button"
46
+ [2.67s] 👉 Hover "menu item"
47
+ [2.89s] ⌨️ Type → hello world
48
+ ```
49
+
50
+ Action emojis:
51
+ - 👆 Click
52
+ - 👆👆 Double-click
53
+ - 🖱️ Right-click
54
+ - 👉 Hover
55
+ - ⌨️ Type
56
+ - 🎹 Press Keys
57
+ - 📜 Scroll
58
+
59
+ ### ✅ Assertions
60
+
61
+ ```javascript
62
+ await client.assert("page title is Example Domain");
63
+ ```
64
+
65
+ **Output:**
66
+ ```
67
+ [3.12s] ✅ Assert "page title is Example Domain" · ✓ PASSED · ⏱️ 45ms
68
+ [3.45s] ❌ Assert "login form visible" · ✗ FAILED · ⏱️ 1234ms
69
+ ```
70
+
71
+ Color-coded results:
72
+ - ✅ Green for PASSED
73
+ - ❌ Red for FAILED
74
+ - Performance-based duration coloring
75
+
76
+ ### ⚡ Cache Performance
77
+
78
+ The SDK automatically logs cache performance:
79
+
80
+ **Cache HIT:**
81
+ ```
82
+ ⚡ Cache HIT · 98.5% similar · image strategy
83
+ ```
84
+
85
+ **Cache MISS:**
86
+ ```
87
+ 💤 Cache MISS · text strategy
88
+ ```
89
+
90
+ ### 🔌 Connection Status
91
+
92
+ ```javascript
93
+ await client.connect();
94
+ await client.disconnect();
95
+ ```
96
+
97
+ **Output:**
98
+ ```
99
+ 🔌 Connected · Sandbox: i-0a1b2c3d4e5f6 · OS: windows
100
+ 🔌 Disconnected
101
+ ```
102
+
103
+ ### 📸 Screenshots
104
+
105
+ ```javascript
106
+ await client.screenshot();
107
+ ```
108
+
109
+ **Output:**
110
+ ```
111
+ [5.67s] 📸 Screenshot · /tmp/testdriver-debug/screenshot-123.png · 245 KB
112
+ ```
113
+
114
+ ### 🚨 Errors
115
+
116
+ Errors are beautifully formatted with context:
117
+
118
+ ```
119
+ [8.90s] ❌ Element not found → Timeout after 5000ms
120
+ ```
121
+
122
+ ### 📈 Progress Tracking
123
+
124
+ For multi-step operations:
125
+
126
+ ```
127
+ Progress ████████████████████ 100% 5/5 · Processing complete
128
+ ```
129
+
130
+ ### 📊 Test Summary
131
+
132
+ At the end of your test suite:
133
+
134
+ ```
135
+ ────────────────────────────────────────────────────────────
136
+ ✓ 12 passed │ ✗ 2 failed │ ⊘ 1 skipped │ 15 total │ ⏱️ 45.23s
137
+ ────────────────────────────────────────────────────────────
138
+ ```
139
+
140
+ ### 📦 Section Headers
141
+
142
+ Organize your test output with beautiful headers:
143
+
144
+ ```
145
+ ╭────────────────────────────────────────────────────────────╮
146
+ │ ✨ User Authentication Flow │
147
+ ╰────────────────────────────────────────────────────────────╯
148
+ ```
149
+
150
+ ## Configuration
151
+
152
+ ### Enable/Disable Logging
153
+
154
+ ```javascript
155
+ const client = new TestDriver(apiKey, {
156
+ logging: true, // Enable logging (default)
157
+ });
158
+
159
+ // Or disable later
160
+ client.setLogging(false);
161
+ ```
162
+
163
+ ### Emojis vs Simple Symbols
164
+
165
+ The formatter automatically uses emojis when available. If you need to disable emojis:
166
+
167
+ ```javascript
168
+ const { formatter } = require('testdriverai/sdk-log-formatter');
169
+ formatter.useEmojis = false; // Falls back to simple Unicode symbols
170
+ ```
171
+
172
+ ### Test Context Integration
173
+
174
+ Integrate with Vitest or other test frameworks:
175
+
176
+ ```javascript
177
+ import { describe, it, beforeEach } from 'vitest';
178
+
179
+ describe('Login Tests', () => {
180
+ let client;
181
+
182
+ beforeEach(() => {
183
+ client = new TestDriver(process.env.TD_API_KEY);
184
+
185
+ // Set test context for better logging
186
+ client.setTestContext({
187
+ file: 'login.test.js',
188
+ test: 'should log in successfully',
189
+ startTime: Date.now()
190
+ });
191
+ });
192
+
193
+ it('should log in successfully', async () => {
194
+ // All logs will now include elapsed time from test start
195
+ await client.connect();
196
+ // ...test code...
197
+ });
198
+ });
199
+ ```
200
+
201
+ ## Examples
202
+
203
+ ### Basic Usage
204
+
205
+ ```javascript
206
+ const TestDriver = require('testdriverai');
207
+
208
+ const client = new TestDriver(process.env.TD_API_KEY, {
209
+ logging: true,
210
+ });
211
+
212
+ await client.connect();
213
+
214
+ // Find and click - logs automatically
215
+ const button = await client.find('submit button');
216
+ await button.click();
217
+
218
+ await client.disconnect();
219
+ ```
220
+
221
+ **Output:**
222
+ ```
223
+ 🔌 Connected · Sandbox: i-0a1b2c3d · OS: windows
224
+ 🔍 Found "submit button" · 📍 (682, 189) · ⏱️ 167ms · ⚡ cached
225
+ 👆 Click "submit button"
226
+ 🔌 Disconnected
227
+ ```
228
+
229
+ ### Manual Formatting
230
+
231
+ You can also use the formatter directly for custom logs:
232
+
233
+ ```javascript
234
+ const { formatter } = require('testdriverai/sdk-log-formatter');
235
+
236
+ // Format custom messages
237
+ console.log(formatter.formatHeader('My Test Suite', '🧪'));
238
+ console.log(formatter.formatAction('custom action', 'my element'));
239
+ console.log(formatter.formatProgress(3, 10, 'Processing...'));
240
+ console.log(formatter.formatDivider());
241
+ ```
242
+
243
+ ### Performance Monitoring
244
+
245
+ Duration colors help you spot slow operations:
246
+
247
+ - **🟢 Green** (< 100ms): Fast, optimal
248
+ - **🟡 Yellow** (100-500ms): Acceptable
249
+ - **🔴 Red** (> 500ms): Slow, may need optimization
250
+
251
+ Example output:
252
+ ```
253
+ ⏱️ 45ms ← Green (fast)
254
+ ⏱️ 234ms ← Yellow (acceptable)
255
+ ⏱️ 1.2s ← Red (slow)
256
+ ```
257
+
258
+ ### Cache Monitoring
259
+
260
+ Track cache effectiveness in real-time:
261
+
262
+ ```javascript
263
+ // Enable cache debugging
264
+ process.env.VERBOSE = 'true';
265
+
266
+ // Now you'll see detailed cache info
267
+ const element = await client.find('button');
268
+ ```
269
+
270
+ **Output:**
271
+ ```
272
+ 🔍 find() threshold: 0.05 (cache ENABLED)
273
+ 🔍 Found "button" · 📍 (500, 300) · ⏱️ 89ms · ⚡ cached
274
+
275
+ Element Found:
276
+ Description: button
277
+ Coordinates: (500, 300)
278
+ Duration: 89ms
279
+ Cache Hit: ✅ YES
280
+ Cache Strategy: image
281
+ Similarity: 98.50%
282
+ Cache Age: 2s (created: 2024-11-18T15:30:45.123Z)
283
+ Pixel Diff: 1.23%
284
+ ```
285
+
286
+ ## Advanced Features
287
+
288
+ ### Test Lifecycle Tracking
289
+
290
+ ```javascript
291
+ const { formatter } = require('testdriverai/sdk-log-formatter');
292
+
293
+ // Test start
294
+ console.log(formatter.formatTestStart('Login Flow'));
295
+
296
+ // ... test code ...
297
+
298
+ // Test end
299
+ console.log(formatter.formatTestEnd('Login Flow', true, 2345));
300
+ ```
301
+
302
+ **Output:**
303
+ ```
304
+ ▶️ Running: Login Flow
305
+
306
+ ✅ PASSED Login Flow · 2.35s
307
+ ```
308
+
309
+ ### Multi-Step Workflows
310
+
311
+ ```javascript
312
+ const steps = [
313
+ 'Navigate to login',
314
+ 'Enter credentials',
315
+ 'Submit form',
316
+ 'Verify dashboard',
317
+ 'Logout'
318
+ ];
319
+
320
+ for (let i = 0; i < steps.length; i++) {
321
+ console.log(formatter.formatProgress(i + 1, steps.length, steps[i]));
322
+ // ... perform step ...
323
+ }
324
+ ```
325
+
326
+ **Output:**
327
+ ```
328
+ Progress ████░░░░░░░░░░░░░░░░ 20% 1/5 · Navigate to login
329
+ Progress ████████░░░░░░░░░░░░ 40% 2/5 · Enter credentials
330
+ Progress ████████████░░░░░░░░ 60% 3/5 · Submit form
331
+ Progress ████████████████░░░░ 80% 4/5 · Verify dashboard
332
+ Progress ████████████████████ 100% 5/5 · Logout
333
+ ```
334
+
335
+ ### Error Reporting
336
+
337
+ ```javascript
338
+ try {
339
+ await client.find('non-existent element');
340
+ } catch (error) {
341
+ console.log(formatter.formatError('Element search failed', error));
342
+ }
343
+ ```
344
+
345
+ **Output:**
346
+ ```
347
+ ❌ Element search failed → Element "non-existent element" not found.
348
+
349
+ === Debug Information ===
350
+ Element searched for: "non-existent element"
351
+ Cache threshold: 0.05 (95.0% similarity required)
352
+ Cache: MISS
353
+ Similarity score: 45.23%
354
+ Current screenshot: /tmp/testdriver-debug/screenshot-1234.png
355
+ ```
356
+
357
+ ## Tips for Great Logs
358
+
359
+ 1. **Use descriptive element descriptions** - They appear in the logs!
360
+ ```javascript
361
+ // ✅ Good
362
+ await client.find('blue submit button in login form');
363
+
364
+ // ❌ Less helpful
365
+ await client.find('button');
366
+ ```
367
+
368
+ 2. **Leverage test context** - Set it once, get timestamps on all logs
369
+ ```javascript
370
+ client.setTestContext({
371
+ test: 'User Login',
372
+ startTime: Date.now()
373
+ });
374
+ ```
375
+
376
+ 3. **Monitor cache performance** - Use VERBOSE mode during development
377
+ ```bash
378
+ VERBOSE=true node my-test.js
379
+ ```
380
+
381
+ 4. **Organize with headers** - Make long test output scannable
382
+ ```javascript
383
+ console.log(formatter.formatHeader('Setup Phase', '⚙️'));
384
+ // ... setup code ...
385
+
386
+ console.log(formatter.formatHeader('Test Execution', '🧪'));
387
+ // ... test code ...
388
+ ```
389
+
390
+ 5. **Track progress** - Show users what's happening in long-running tests
391
+ ```javascript
392
+ for (let i = 0; i < items.length; i++) {
393
+ console.log(formatter.formatProgress(i + 1, items.length));
394
+ // ... process item ...
395
+ }
396
+ ```
397
+
398
+ ## Demo
399
+
400
+ Run the comprehensive demo to see all logging features:
401
+
402
+ ```bash
403
+ TD_API_KEY=your_key node examples/sdk-awesome-logs-demo.js
404
+ ```
405
+
406
+ Or check out the cache thresholds example:
407
+
408
+ ```bash
409
+ TD_API_KEY=your_key VERBOSE=true node examples/sdk-cache-thresholds.js
410
+ ```
411
+
412
+ ## Color Reference
413
+
414
+ The logging system uses consistent color coding:
415
+
416
+ - **🔵 Blue**: Info, navigation, system messages
417
+ - **🟢 Green**: Success, passed assertions, fast operations
418
+ - **🟡 Yellow**: Warnings, caching, acceptable performance
419
+ - **🔴 Red**: Errors, failures, slow operations
420
+ - **🟣 Magenta**: Finding/searching operations
421
+ - **🔵 Cyan**: User actions, interactive elements
422
+ - **⚪ Gray**: Debug info, metadata, timestamps
423
+
424
+ ## Emoji Reference
425
+
426
+ ### Actions
427
+ - 👆 Click / Tap
428
+ - 👉 Hover / Point
429
+ - ⌨️ Type / Keyboard input
430
+ - 🎹 Press keys
431
+ - 📜 Scroll
432
+ - 🖱️ Right-click
433
+ - ✊ Drag
434
+
435
+ ### Status
436
+ - ✅ Success / Passed
437
+ - ❌ Error / Failed
438
+ - ⚠️ Warning
439
+ - ℹ️ Info
440
+ - 🔧 Debug
441
+
442
+ ### Operations
443
+ - 🔍 Find / Search
444
+ - 🔎 Find all
445
+ - 📸 Screenshot
446
+ - 🧠 Remember (AI)
447
+ - 🎯 Focus
448
+ - ⚡ Cache hit
449
+ - 💤 Cache miss
450
+
451
+ ### System
452
+ - 🔌 Connect / Disconnect
453
+ - 🚀 Launch / Start
454
+ - 🏁 Finish / End
455
+ - ⏳ Waiting / Loading
456
+ - ⏱️ Duration / Time
457
+ - 📍 Location / Coordinates
458
+ - 📊 Statistics / Summary
459
+ - 📈 Progress
460
+
461
+ ### Organizational
462
+ - ✨ Header / Title
463
+ - 📦 Section / Group
464
+ - ▶️ Running / Active
465
+ - 🎉 Complete / Success
466
+ - 🚨 Alert / Critical
467
+
468
+ Enjoy your AWESOME logs! 🎨✨