testdriverai 7.1.0 → 7.1.2

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 (325) hide show
  1. package/.env.example +2 -0
  2. package/.github/workflows/linux-tests.yml +28 -0
  3. package/agent/index.js +18 -45
  4. package/agent/interface.js +13 -2
  5. package/agent/lib/commands.js +1 -1
  6. package/agent/lib/redraw.js +1 -1
  7. package/agent/lib/sandbox.js +30 -2
  8. package/agent/lib/valid-version.js +2 -2
  9. package/debugger/index.html +1 -1
  10. package/docs/docs.json +140 -131
  11. package/docs/v6/getting-started/self-hosting.mdx +3 -2
  12. package/docs/v7/_drafts/agents.mdx +852 -0
  13. package/docs/v7/_drafts/auto-cache-key.mdx +167 -0
  14. package/docs/v7/{guides → _drafts}/caching-selectors.mdx +125 -17
  15. package/docs/v7/_drafts/dashcam-title-feature.mdx +89 -0
  16. package/docs/v7/_drafts/error-handling.mdx +501 -0
  17. package/docs/v7/_drafts/implementation-plan.mdx +994 -0
  18. package/docs/v7/_drafts/init-command.mdx +95 -0
  19. package/docs/v7/_drafts/optimal-sdk-design.mdx +1348 -0
  20. package/docs/v7/_drafts/plugin-migration.mdx +222 -0
  21. package/docs/v7/_drafts/prompt-cache.mdx +200 -0
  22. package/docs/{QUICK_START_TEST_RECORDING.md → v7/_drafts/quick-start-test-recording.mdx} +3 -3
  23. package/docs/v7/_drafts/sdk-logging.mdx +222 -0
  24. package/docs/v7/_drafts/sdk-migration.mdx +474 -0
  25. package/docs/v7/_drafts/sdk-v7-complete.mdx +345 -0
  26. package/docs/v7/{guides → _drafts}/self-hosting.mdx +1 -1
  27. package/docs/v7/{guides → _drafts}/troubleshooting.mdx +2 -2
  28. package/docs/v7/{guides → _drafts}/vitest-plugin.mdx +4 -4
  29. package/docs/v7/api/{ai.mdx → act.mdx} +24 -24
  30. package/docs/v7/api/client.mdx +1 -1
  31. package/docs/v7/api/dashcam.mdx +2 -2
  32. package/docs/v7/api/elements.mdx +143 -41
  33. package/docs/v7/api/find.mdx +258 -0
  34. package/docs/v7/api/type.mdx +51 -7
  35. package/docs/v7/features/ai-native.mdx +427 -0
  36. package/docs/v7/features/easy-to-write.mdx +351 -0
  37. package/docs/v7/features/enterprise.mdx +540 -0
  38. package/docs/v7/features/fast.mdx +424 -0
  39. package/docs/v7/features/observable.mdx +623 -0
  40. package/docs/v7/features/powerful.mdx +531 -0
  41. package/docs/v7/features/scalable.mdx +417 -0
  42. package/docs/v7/features/stable.mdx +514 -0
  43. package/docs/v7/getting-started/configuration.mdx +1 -1
  44. package/docs/v7/getting-started/generating-tests.mdx +525 -0
  45. package/docs/v7/getting-started/installation.mdx +486 -0
  46. package/docs/v7/getting-started/quickstart.mdx +51 -5
  47. package/docs/v7/getting-started/running-and-debugging.mdx +511 -0
  48. package/docs/v7/getting-started/setting-up-in-ci.mdx +612 -0
  49. package/docs/v7/getting-started/writing-tests.mdx +535 -0
  50. package/docs/v7/overview/what-is-testdriver.mdx +398 -0
  51. package/docs/v7/playwright.mdx +3 -3
  52. package/docs/v7/presets/chrome.mdx +16 -0
  53. package/docs/v7/presets/electron.mdx +18 -0
  54. package/docs/v7/presets/vscode.mdx +19 -0
  55. package/examples/run-tests-with-recording.sh +70 -0
  56. package/examples/screenshot-example.js +63 -0
  57. package/examples/sdk-awesome-logs-demo.js +177 -0
  58. package/examples/sdk-cache-thresholds.js +96 -0
  59. package/examples/sdk-element-properties.js +155 -0
  60. package/examples/sdk-simple-example.js +65 -0
  61. package/examples/test-recording-example.test.js +166 -0
  62. package/interfaces/cli/commands/init.js +358 -0
  63. package/interfaces/vitest-plugin.mjs +214 -10
  64. package/{src → lib}/core/Dashcam.js +41 -4
  65. package/{src → lib}/vitest/hooks.mjs +118 -100
  66. package/lib/vitest/setup.mjs +44 -0
  67. package/package.json +9 -10
  68. package/sdk.d.ts +15 -2
  69. package/sdk.js +72 -17
  70. package/{self-hosted.yml → setup/aws/self-hosted.yml} +1 -1
  71. package/{testdriver/acceptance-sdk → test/manual}/test-console-logs.test.mjs +1 -1
  72. package/test/manual/test-find-api.js +73 -0
  73. package/test/manual/test-init.sh +54 -0
  74. package/test/manual/test-prompt-cache.js +96 -0
  75. package/test/manual/test-provision-auth.mjs +22 -0
  76. package/test/manual/test-sandbox-render.js +28 -0
  77. package/test/manual/test-sdk-methods.js +15 -0
  78. package/test/manual/test-sdk-refactor.js +53 -0
  79. package/test/manual/test-stack-trace.mjs +57 -0
  80. package/test/testdriver/assert.test.mjs +41 -0
  81. package/{testdriver/acceptance-sdk → test/testdriver}/auto-cache-key-demo.test.mjs +1 -1
  82. package/{testdriver/acceptance-sdk → test/testdriver}/drag-and-drop.test.mjs +1 -1
  83. package/{testdriver/acceptance-sdk → test/testdriver}/element-not-found.test.mjs +1 -1
  84. package/{testdriver/acceptance-sdk → test/testdriver}/exec-js.test.mjs +1 -1
  85. package/{testdriver/acceptance-sdk → test/testdriver}/exec-output.test.mjs +3 -3
  86. package/{testdriver/acceptance-sdk → test/testdriver}/exec-pwsh.test.mjs +3 -3
  87. package/{testdriver/acceptance-sdk → test/testdriver}/focus-window.test.mjs +1 -1
  88. package/{testdriver/acceptance-sdk → test/testdriver}/formatted-logging.test.mjs +1 -1
  89. package/{testdriver/acceptance-sdk → test/testdriver}/hover-image.test.mjs +1 -1
  90. package/{testdriver/acceptance-sdk → test/testdriver}/hover-text-with-description.test.mjs +1 -1
  91. package/{testdriver/acceptance-sdk → test/testdriver}/hover-text.test.mjs +1 -1
  92. package/{testdriver/acceptance-sdk → test/testdriver}/match-image.test.mjs +1 -1
  93. package/{testdriver/acceptance-sdk → test/testdriver}/press-keys.test.mjs +1 -1
  94. package/{testdriver/acceptance-sdk → test/testdriver}/prompt.test.mjs +2 -2
  95. package/{testdriver/acceptance-sdk → test/testdriver}/scroll-keyboard.test.mjs +1 -1
  96. package/{testdriver/acceptance-sdk → test/testdriver}/scroll-until-image.test.mjs +1 -1
  97. package/{testdriver/acceptance-sdk → test/testdriver}/scroll-until-text.test.mjs +1 -1
  98. package/{testdriver/acceptance-sdk → test/testdriver}/scroll.test.mjs +1 -1
  99. package/{src/vitest/lifecycle.mjs → test/testdriver/setup/lifecycleHelpers.mjs} +84 -99
  100. package/test/testdriver/setup/testHelpers.mjs +653 -0
  101. package/{testdriver/acceptance-sdk → test/testdriver}/type.test.mjs +1 -1
  102. package/vitest.config.mjs +8 -59
  103. package/.github/dependabot.yml +0 -11
  104. package/.github/workflows/acceptance-linux.yml +0 -75
  105. package/.github/workflows/acceptance-sdk-tests.yml +0 -133
  106. package/.github/workflows/acceptance-tests.yml +0 -130
  107. package/.github/workflows/lint.yml +0 -27
  108. package/.github/workflows/publish-canary.yml +0 -40
  109. package/.github/workflows/publish-latest.yml +0 -61
  110. package/.github/workflows/test-install.yml +0 -29
  111. package/.vscode/extensions.json +0 -3
  112. package/.vscode/launch.json +0 -22
  113. package/.vscode/settings.json +0 -14
  114. package/AGENTS.md +0 -550
  115. package/CODEOWNERS +0 -2
  116. package/_testdriver/acceptance/assert.yaml +0 -7
  117. package/_testdriver/acceptance/dashcam.yaml +0 -9
  118. package/_testdriver/acceptance/drag-and-drop.yaml +0 -49
  119. package/_testdriver/acceptance/embed.yaml +0 -9
  120. package/_testdriver/acceptance/exec-js.yaml +0 -29
  121. package/_testdriver/acceptance/exec-output.yaml +0 -43
  122. package/_testdriver/acceptance/exec-shell.yaml +0 -40
  123. package/_testdriver/acceptance/focus-window.yaml +0 -16
  124. package/_testdriver/acceptance/hover-image.yaml +0 -18
  125. package/_testdriver/acceptance/hover-text-with-description.yaml +0 -29
  126. package/_testdriver/acceptance/hover-text.yaml +0 -14
  127. package/_testdriver/acceptance/if-else.yaml +0 -31
  128. package/_testdriver/acceptance/match-image.yaml +0 -15
  129. package/_testdriver/acceptance/press-keys.yaml +0 -35
  130. package/_testdriver/acceptance/prompt.yaml +0 -11
  131. package/_testdriver/acceptance/remember.yaml +0 -27
  132. package/_testdriver/acceptance/screenshots/cart.png +0 -0
  133. package/_testdriver/acceptance/scroll-keyboard.yaml +0 -34
  134. package/_testdriver/acceptance/scroll-until-image.yaml +0 -26
  135. package/_testdriver/acceptance/scroll-until-text.yaml +0 -20
  136. package/_testdriver/acceptance/scroll.yaml +0 -33
  137. package/_testdriver/acceptance/snippets/login.yaml +0 -29
  138. package/_testdriver/acceptance/snippets/match-cart.yaml +0 -8
  139. package/_testdriver/acceptance/type.yaml +0 -29
  140. package/_testdriver/behavior/failure.yaml +0 -7
  141. package/_testdriver/behavior/hover-text.yaml +0 -13
  142. package/_testdriver/behavior/lifecycle/postrun.yaml +0 -10
  143. package/_testdriver/behavior/lifecycle/prerun.yaml +0 -8
  144. package/_testdriver/behavior/lifecycle/provision.yaml +0 -8
  145. package/_testdriver/behavior/secrets.yaml +0 -7
  146. package/_testdriver/edge-cases/dashcam-chrome.yaml +0 -8
  147. package/_testdriver/edge-cases/exec-pwsh-multiline.yaml +0 -10
  148. package/_testdriver/edge-cases/js-exception.yaml +0 -8
  149. package/_testdriver/edge-cases/js-promise.yaml +0 -19
  150. package/_testdriver/edge-cases/lifecycle/postrun.yaml +0 -10
  151. package/_testdriver/edge-cases/prompt-in-middle.yaml +0 -23
  152. package/_testdriver/edge-cases/prompt-nested.yaml +0 -7
  153. package/_testdriver/edge-cases/success-test.yaml +0 -9
  154. package/_testdriver/examples/android/example.yaml +0 -12
  155. package/_testdriver/examples/android/lifecycle/postrun.yaml +0 -11
  156. package/_testdriver/examples/android/lifecycle/provision.yaml +0 -47
  157. package/_testdriver/examples/android/readme.md +0 -7
  158. package/_testdriver/examples/chrome-extension/lifecycle/provision.yaml +0 -74
  159. package/_testdriver/examples/desktop/lifecycle/prerun.yaml +0 -0
  160. package/_testdriver/examples/desktop/lifecycle/provision.yaml +0 -64
  161. package/_testdriver/examples/vscode-extension/lifecycle/provision.yaml +0 -73
  162. package/_testdriver/examples/web/lifecycle/postrun.yaml +0 -7
  163. package/_testdriver/examples/web/lifecycle/prerun.yaml +0 -22
  164. package/_testdriver/lifecycle/postrun.yaml +0 -8
  165. package/_testdriver/lifecycle/prerun.yaml +0 -15
  166. package/_testdriver/lifecycle/provision.yaml +0 -25
  167. package/docs/v7/guides/ci-cd/azure.mdx +0 -587
  168. package/docs/v7/guides/ci-cd/circleci.mdx +0 -523
  169. package/docs/v7/guides/ci-cd/github-actions.mdx +0 -457
  170. package/docs/v7/guides/ci-cd/gitlab.mdx +0 -498
  171. package/docs/v7/guides/ci-cd/jenkins.mdx +0 -664
  172. package/docs/v7/guides/ci-cd/travis.mdx +0 -438
  173. package/scripts/view-test-results.mjs +0 -96
  174. package/src/vitest/extended.mjs +0 -108
  175. package/src/vitest/index.mjs +0 -64
  176. package/src/vitest/utils.mjs +0 -150
  177. package/styles/.vale-config/2-MDX.ini +0 -5
  178. package/styles/Microsoft/AMPM.yml +0 -9
  179. package/styles/Microsoft/Accessibility.yml +0 -30
  180. package/styles/Microsoft/Acronyms.yml +0 -64
  181. package/styles/Microsoft/Adverbs.yml +0 -272
  182. package/styles/Microsoft/Auto.yml +0 -11
  183. package/styles/Microsoft/Avoid.yml +0 -14
  184. package/styles/Microsoft/Contractions.yml +0 -50
  185. package/styles/Microsoft/Dashes.yml +0 -13
  186. package/styles/Microsoft/DateFormat.yml +0 -8
  187. package/styles/Microsoft/DateNumbers.yml +0 -40
  188. package/styles/Microsoft/DateOrder.yml +0 -8
  189. package/styles/Microsoft/Ellipses.yml +0 -9
  190. package/styles/Microsoft/FirstPerson.yml +0 -16
  191. package/styles/Microsoft/Foreign.yml +0 -13
  192. package/styles/Microsoft/Gender.yml +0 -8
  193. package/styles/Microsoft/GenderBias.yml +0 -42
  194. package/styles/Microsoft/GeneralURL.yml +0 -11
  195. package/styles/Microsoft/HeadingAcronyms.yml +0 -7
  196. package/styles/Microsoft/HeadingColons.yml +0 -8
  197. package/styles/Microsoft/HeadingPunctuation.yml +0 -13
  198. package/styles/Microsoft/Headings.yml +0 -28
  199. package/styles/Microsoft/Hyphens.yml +0 -14
  200. package/styles/Microsoft/Negative.yml +0 -13
  201. package/styles/Microsoft/Ordinal.yml +0 -13
  202. package/styles/Microsoft/OxfordComma.yml +0 -8
  203. package/styles/Microsoft/Passive.yml +0 -183
  204. package/styles/Microsoft/Percentages.yml +0 -7
  205. package/styles/Microsoft/Plurals.yml +0 -7
  206. package/styles/Microsoft/Quotes.yml +0 -7
  207. package/styles/Microsoft/RangeTime.yml +0 -13
  208. package/styles/Microsoft/Semicolon.yml +0 -8
  209. package/styles/Microsoft/SentenceLength.yml +0 -6
  210. package/styles/Microsoft/Spacing.yml +0 -8
  211. package/styles/Microsoft/Suspended.yml +0 -7
  212. package/styles/Microsoft/Terms.yml +0 -42
  213. package/styles/Microsoft/URLFormat.yml +0 -9
  214. package/styles/Microsoft/Units.yml +0 -16
  215. package/styles/Microsoft/Vocab.yml +0 -25
  216. package/styles/Microsoft/We.yml +0 -11
  217. package/styles/Microsoft/Wordiness.yml +0 -127
  218. package/styles/Microsoft/meta.json +0 -4
  219. package/styles/alex/Ablist.yml +0 -274
  220. package/styles/alex/Condescending.yml +0 -16
  221. package/styles/alex/Gendered.yml +0 -110
  222. package/styles/alex/LGBTQ.yml +0 -55
  223. package/styles/alex/OCD.yml +0 -10
  224. package/styles/alex/Press.yml +0 -12
  225. package/styles/alex/ProfanityLikely.yml +0 -1289
  226. package/styles/alex/ProfanityMaybe.yml +0 -282
  227. package/styles/alex/ProfanityUnlikely.yml +0 -251
  228. package/styles/alex/README.md +0 -27
  229. package/styles/alex/Race.yml +0 -85
  230. package/styles/alex/Suicide.yml +0 -26
  231. package/styles/alex/meta.json +0 -4
  232. package/styles/config/vocabularies/Docs/accept.txt +0 -47
  233. package/styles/config/vocabularies/Docs/reject.txt +0 -4
  234. package/styles/proselint/Airlinese.yml +0 -8
  235. package/styles/proselint/AnimalLabels.yml +0 -48
  236. package/styles/proselint/Annotations.yml +0 -9
  237. package/styles/proselint/Apologizing.yml +0 -8
  238. package/styles/proselint/Archaisms.yml +0 -52
  239. package/styles/proselint/But.yml +0 -8
  240. package/styles/proselint/Cliches.yml +0 -782
  241. package/styles/proselint/CorporateSpeak.yml +0 -30
  242. package/styles/proselint/Currency.yml +0 -5
  243. package/styles/proselint/Cursing.yml +0 -15
  244. package/styles/proselint/DateCase.yml +0 -7
  245. package/styles/proselint/DateMidnight.yml +0 -7
  246. package/styles/proselint/DateRedundancy.yml +0 -10
  247. package/styles/proselint/DateSpacing.yml +0 -7
  248. package/styles/proselint/DenizenLabels.yml +0 -52
  249. package/styles/proselint/Diacritical.yml +0 -95
  250. package/styles/proselint/GenderBias.yml +0 -45
  251. package/styles/proselint/GroupTerms.yml +0 -39
  252. package/styles/proselint/Hedging.yml +0 -8
  253. package/styles/proselint/Hyperbole.yml +0 -6
  254. package/styles/proselint/Jargon.yml +0 -11
  255. package/styles/proselint/LGBTOffensive.yml +0 -13
  256. package/styles/proselint/LGBTTerms.yml +0 -15
  257. package/styles/proselint/Malapropisms.yml +0 -8
  258. package/styles/proselint/Needless.yml +0 -358
  259. package/styles/proselint/Nonwords.yml +0 -38
  260. package/styles/proselint/Oxymorons.yml +0 -22
  261. package/styles/proselint/P-Value.yml +0 -6
  262. package/styles/proselint/RASSyndrome.yml +0 -30
  263. package/styles/proselint/README.md +0 -12
  264. package/styles/proselint/Skunked.yml +0 -13
  265. package/styles/proselint/Spelling.yml +0 -17
  266. package/styles/proselint/Typography.yml +0 -11
  267. package/styles/proselint/Uncomparables.yml +0 -50
  268. package/styles/proselint/Very.yml +0 -6
  269. package/styles/proselint/meta.json +0 -15
  270. package/styles/write-good/Cliches.yml +0 -702
  271. package/styles/write-good/E-Prime.yml +0 -32
  272. package/styles/write-good/Illusions.yml +0 -11
  273. package/styles/write-good/Passive.yml +0 -183
  274. package/styles/write-good/README.md +0 -27
  275. package/styles/write-good/So.yml +0 -5
  276. package/styles/write-good/ThereIs.yml +0 -6
  277. package/styles/write-good/TooWordy.yml +0 -221
  278. package/styles/write-good/Weasel.yml +0 -29
  279. package/styles/write-good/meta.json +0 -4
  280. package/test/dashcam.test.js +0 -137
  281. package/test/mcp-example-test.yaml +0 -27
  282. package/test/test_parser.js +0 -47
  283. package/testdriver/acceptance-sdk/QUICK_REFERENCE.md +0 -61
  284. package/testdriver/acceptance-sdk/README.md +0 -128
  285. package/testdriver/acceptance-sdk/TEST_REPORTING.md +0 -245
  286. package/testdriver/acceptance-sdk/assert.test.mjs +0 -26
  287. package/testdriver/acceptance-sdk/hooks-example.test.mjs +0 -38
  288. package/testdriver/acceptance-sdk/presets-example.test.mjs +0 -87
  289. package/testdriver/acceptance-sdk/setup/testHelpers.mjs +0 -420
  290. package/testdriver/acceptance-sdk/sully-ai.test.mjs +0 -234
  291. package/testdriver/acceptance-sdk/type-checking-demo.js +0 -49
  292. package/vale.ini +0 -18
  293. package/vitest.config.example.js +0 -19
  294. package/vitest.config.mjs.bak +0 -44
  295. /package/docs/{ARCHITECTURE.md → v7/_drafts/architecture.mdx} +0 -0
  296. /package/docs/{AWESOME_LOGS_QUICK_REF.md → v7/_drafts/awesome-logs-quick-ref.mdx} +0 -0
  297. /package/docs/v7/{guides → _drafts}/best-practices.mdx +0 -0
  298. /package/docs/v7/{guides → _drafts}/caching-ai.mdx +0 -0
  299. /package/docs/v7/{guides → _drafts}/caching.mdx +0 -0
  300. /package/docs/{MIGRATION.md → v7/_drafts/cli-to-sdk-migration.mdx} +0 -0
  301. /package/{CONTRIBUTING.md → docs/v7/_drafts/contributing.mdx} +0 -0
  302. /package/docs/v7/{progressive-apis/CORE.md → _drafts/core.mdx} +0 -0
  303. /package/docs/v7/{guides → _drafts}/debugging.mdx +0 -0
  304. /package/docs/v7/{guides → _drafts}/faq.mdx +0 -0
  305. /package/docs/v7/{progressive-apis/HOOKS.md → _drafts/hooks.mdx} +0 -0
  306. /package/docs/v7/{guides → _drafts}/migration.mdx +0 -0
  307. /package/docs/v7/{guides → _drafts}/performance.mdx +0 -0
  308. /package/docs/{PRESETS.md → v7/_drafts/presets.mdx} +0 -0
  309. /package/docs/v7/{progressive-apis/PROGRESSIVE_DISCLOSURE.md → _drafts/progressive-disclosure.mdx} +0 -0
  310. /package/docs/v7/{progressive-apis/PROVISION.md → _drafts/provision.mdx} +0 -0
  311. /package/docs/{SDK_AWESOME_LOGS.md → v7/_drafts/sdk-awesome-logs.mdx} +0 -0
  312. /package/docs/{sdk-browser-rendering.md → v7/_drafts/sdk-browser-rendering.mdx} +0 -0
  313. /package/docs/{TEST_RECORDING.md → v7/_drafts/test-recording.mdx} +0 -0
  314. /package/docs/v7/{guides → _drafts}/vitest.mdx +0 -0
  315. /package/docs/v7/{README.md → overview/readme.mdx} +0 -0
  316. /package/{src → lib}/core/index.d.ts +0 -0
  317. /package/{src → lib}/core/index.js +0 -0
  318. /package/{src → lib}/presets/index.mjs +0 -0
  319. /package/{src → lib}/vitest/hooks.d.ts +0 -0
  320. /package/{debug-locate-response.js → test/manual/debug-locate-response.js} +0 -0
  321. /package/{verify-element-api.js → test/manual/verify-element-api.js} +0 -0
  322. /package/{verify-types.js → test/manual/verify-types.js} +0 -0
  323. /package/{testdriver/acceptance-sdk → test/testdriver}/chrome-extension.test.mjs +0 -0
  324. /package/{testdriver/acceptance-sdk → test/testdriver}/setup/globalTeardown.mjs +0 -0
  325. /package/{testdriver/acceptance-sdk → test/testdriver}/setup/vitestSetup.mjs +0 -0
package/vitest.config.mjs CHANGED
@@ -1,66 +1,15 @@
1
- import { config } from "dotenv";
2
- import { defineConfig } from "vitest/config";
3
- import testDriverPlugin from "./interfaces/vitest-plugin.mjs";
4
-
5
- // Load environment variables from .env file
6
- config();
1
+ import TestDriver from 'testdriverai/vitest';
2
+ import { defineConfig } from 'vitest/config';
7
3
 
8
4
  export default defineConfig({
9
- plugins: [
10
- testDriverPlugin({
11
- apiKey: process.env.TD_API_KEY,
12
- apiRoot: process.env.TD_API_ROOT || "https://testdriver-api.onrender.com",
13
- newSandbox: true,
14
- }),
15
- ],
16
-
17
5
  test: {
18
- // Test file patterns
19
- include: ["**/testdriver/acceptance-sdk/*.test.mjs"],
20
-
21
- // Setup file to initialize plugin in worker processes
22
- setupFiles: ["./testdriver/acceptance-sdk/setup/vitestSetup.mjs"],
23
-
24
- // Timeout settings
25
- testTimeout: 600000, // 10 minutes per test
26
- hookTimeout: 600000, // 10 minutes for setup/teardown
27
- teardownTimeout: 120000, // 2 minutes for teardown specifically
28
-
29
- globalTeardown: "./testdriver/acceptance-sdk/setup/globalTeardown.mjs",
30
-
31
- // Reporter configuration
6
+ testTimeout: 120000,
7
+ hookTimeout: 120000,
32
8
  reporters: [
33
- "verbose", // Detailed console output with full logs
34
- ["junit", { outputFile: "test-results/junit.xml" }],
35
- ["json", { outputFile: "test-results/results.json" }],
36
- ["html", { outputFile: "test-results/index.html" }],
37
- [
38
- "./interfaces/vitest-plugin.mjs",
39
- {
40
- apiKey: process.env.TD_API_KEY,
41
- apiRoot:
42
- process.env.TD_API_ROOT || "https://testdriver-api.onrender.com",
43
- },
44
- ], // TestDriver test recording
9
+ 'default',
10
+ // Don't pass apiKey/apiRoot here - they'll be read from env at runtime
11
+ TestDriver(),
45
12
  ],
46
-
47
- // Use forks for isolation, run tests in parallel
48
- pool: "forks",
49
- poolOptions: {
50
- forks: {
51
- singleFork: false,
52
- maxForks: 5, // Reduced from 10 to prevent resource contention
53
- minForks: 1,
54
- },
55
- },
56
-
57
- // Enable parallel execution
58
- sequence: {
59
- concurrent: true,
60
- shuffle: false,
61
- },
62
-
63
- fileParallelism: true,
64
- maxConcurrency: 5, // Reduced from 10 to match maxForks
13
+ setupFiles: ['testdriverai/vitest/setup'],
65
14
  },
66
15
  });
@@ -1,11 +0,0 @@
1
- # To get started with Dependabot version updates, you'll need to specify which
2
- # package ecosystems to update and where the package manifests are located.
3
- # Please see the documentation for all configuration options:
4
- # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yaml-file
5
-
6
- version: 2
7
- updates:
8
- - package-ecosystem: "npm" # See documentation for possible values
9
- directory: "/" # Location of package manifests
10
- schedule:
11
- interval: "weekly"
@@ -1,75 +0,0 @@
1
- name: v6 Linux
2
-
3
- on:
4
- workflow_dispatch:
5
- push:
6
- branches:
7
- - main
8
- paths-ignore:
9
- - "docs/**"
10
- pull_request:
11
- branches:
12
- - main
13
-
14
- schedule:
15
- - cron: "0 0 * * *"
16
-
17
- jobs:
18
- # Job to gather all test files
19
- test-setup:
20
- runs-on: ubuntu-latest
21
- steps:
22
- - uses: actions/checkout@v3
23
- - uses: actions/setup-node@v3
24
- with:
25
- node-version: 22
26
- cache: npm
27
- - run: npm ci
28
-
29
- gather:
30
- name: Gather Test Files
31
- runs-on: ubuntu-latest
32
- outputs:
33
- test_files: ${{ steps.test_list.outputs.files }}
34
- steps:
35
- - name: Check out repository
36
- uses: actions/checkout@v2
37
-
38
- - name: Find all test files
39
- id: test_list
40
- run: |
41
- FILES=$(ls ./testdriver/acceptance/*.yaml)
42
- FILENAMES=$(basename -a $FILES)
43
- FILES_JSON=$(echo "$FILENAMES" | jq -R -s -c 'split("\n")[:-1]')
44
- echo "files=$FILES_JSON" >> $GITHUB_OUTPUT
45
- test:
46
- needs:
47
- - gather
48
- runs-on: ubuntu-latest
49
- strategy:
50
- matrix:
51
- test: ${{ fromJson(needs.gather.outputs.test_files) }}
52
- max-parallel: 8
53
- fail-fast: false
54
- steps:
55
- - name: Checkout repository
56
- uses: actions/checkout@v4
57
- with:
58
- fetch-depth: 0
59
-
60
- - name: Set up Node.js
61
- uses: actions/setup-node@v4
62
- with:
63
- node-version: "20"
64
- cache: "npm"
65
-
66
- - name: Install dependencies
67
- run: NODE_ENV=production npm ci
68
- - name: Run test in headless mode
69
- run: node bin/testdriverai.js run testdriver/acceptance/${{ matrix.test }} --junit=out.xml
70
- env:
71
- FORCE_COLOR: 3
72
- TD_API_KEY: 49c2996c-0687-40bf-9f2c-5d2e55b2a2c6
73
- TD_WEBSITE: https://testdriver-sandbox.vercel.app
74
- TD_THIS_FILE: ${{ matrix.test }}
75
- TD_API_ROOT: "https://replayable-dev-ian-mac-m1-16.ngrok.io"
@@ -1,133 +0,0 @@
1
- name: Acceptance SDK Tests
2
-
3
- on:
4
- pull_request:
5
- branches:
6
- - main
7
- push:
8
- branches: [main]
9
- paths-ignore:
10
- - "docs/**"
11
- # So that we can manually trigger tests when there's flake
12
- workflow_dispatch:
13
-
14
- jobs:
15
- test-workflow:
16
- name: Run SDK Tests - ${{ matrix.platform }}
17
- runs-on: ubuntu-latest
18
- timeout-minutes: 30
19
- strategy:
20
- fail-fast: false
21
- matrix:
22
- platform: [linux, windows]
23
- steps:
24
- - name: Checkout repository
25
- uses: actions/checkout@v4
26
- with:
27
- fetch-depth: 0
28
-
29
- - name: Set up Node.js
30
- uses: actions/setup-node@v4
31
- with:
32
- node-version: "20"
33
- cache: "npm"
34
-
35
- - name: Install dependencies
36
- run: npm ci
37
-
38
- - name: Run ESLint
39
- run: npx eslint . --max-warnings 0
40
-
41
- - name: Run Prettier
42
- run: npx prettier --check .
43
-
44
- - name: Run SDK tests with Vitest - ${{ matrix.platform }}
45
- run: npx vitest run testdriver/acceptance-sdk/*.test.mjs
46
- env:
47
- FORCE_COLOR: 3
48
- TD_API_KEY: ${{ secrets.TESTDRIVER_API_KEY }}
49
- TEST_PLATFORM: ${{ matrix.platform }}
50
- VERBOSE: true
51
- LOGGING: true
52
- continue-on-error: true
53
-
54
- - name: Generate GitHub Summary
55
- if: always()
56
- run: |
57
- echo "# 🧪 TestDriver SDK Test Results" >> $GITHUB_STEP_SUMMARY
58
- echo "" >> $GITHUB_STEP_SUMMARY
59
-
60
- if [ -f test-results/results.json ]; then
61
- node -e "
62
- const fs = require('fs');
63
- const results = JSON.parse(fs.readFileSync('test-results/results.json', 'utf8'));
64
-
65
- const total = results.numTotalTests || 0;
66
- const passed = results.numPassedTests || 0;
67
- const failed = results.numFailedTests || 0;
68
- const skipped = results.numPendingTests || 0;
69
- const duration = ((results.testResults?.[0]?.endTime - results.testResults?.[0]?.startTime) / 1000 || 0).toFixed(2);
70
-
71
- console.log('## 📊 Overview\n');
72
- console.log('| Metric | Count |');
73
- console.log('|--------|-------|');
74
- console.log('| ✅ Passed | ' + passed + ' |');
75
- console.log('| ❌ Failed | ' + failed + ' |');
76
- console.log('| ⏭️ Skipped | ' + skipped + ' |');
77
- console.log('| 📝 Total | ' + total + ' |');
78
- console.log('| ⏱️ Duration | ' + duration + 's |');
79
- console.log('');
80
-
81
- if (failed > 0) {
82
- console.log('## ❌ Failed Tests\n');
83
- results.testResults?.forEach(file => {
84
- file.assertionResults?.filter(test => test.status === 'failed').forEach(test => {
85
- console.log('### ' + test.fullName);
86
- console.log('**File:** \`' + file.name + '\`');
87
- console.log('');
88
- if (test.failureMessages?.length > 0) {
89
- console.log('**Error:**');
90
- console.log('\`\`\`');
91
- console.log(test.failureMessages.join('\n').substring(0, 1000));
92
- console.log('\`\`\`');
93
- console.log('');
94
- }
95
- });
96
- });
97
- }
98
-
99
- if (passed > 0) {
100
- console.log('## ✅ Passed Tests\n');
101
- results.testResults?.forEach(file => {
102
- const passedTests = file.assertionResults?.filter(test => test.status === 'passed') || [];
103
- if (passedTests.length > 0) {
104
- console.log('### ' + file.name.split('/').pop());
105
- passedTests.forEach(test => {
106
- console.log('- ✅ ' + test.title);
107
- });
108
- console.log('');
109
- }
110
- });
111
- }
112
- " >> $GITHUB_STEP_SUMMARY
113
- else
114
- echo "⚠️ No test results found" >> $GITHUB_STEP_SUMMARY
115
- fi
116
-
117
- - name: Test Summary (JUnit)
118
- uses: test-summary/action@v2
119
- with:
120
- paths: "test-results/junit.xml"
121
- if: always()
122
-
123
- - name: Upload test results
124
- if: always()
125
- uses: actions/upload-artifact@v4
126
- with:
127
- name: test-results-${{ matrix.platform }}
128
- path: |
129
- test-results/junit.xml
130
- test-results/results.json
131
- test-results/index.html
132
- retention-days: 7
133
- if-no-files-found: ignore
@@ -1,130 +0,0 @@
1
- name: Acceptance Tests
2
-
3
- on:
4
- # So that we do a final check before publishing
5
- pull_request_review:
6
- types: [submitted]
7
- # So that we don't do expensive tests until approved
8
- push:
9
- branches: [main]
10
- paths-ignore:
11
- - "docs/**"
12
- # So that we can manually trigger tests when there's flake
13
- workflow_dispatch:
14
-
15
- jobs:
16
- gather-test-files:
17
- name: Gather Test Files
18
- runs-on: ubuntu-latest
19
- if: >
20
- (github.event_name == 'workflow_dispatch') ||
21
- (github.ref == 'refs/heads/main') ||
22
- (github.event_name == 'pull_request_review' &&
23
- (github.event.review.state == 'approved' || github.event.review.state == 'changes_requested'))
24
- outputs:
25
- test_files: ${{ steps.test_list.outputs.files }}
26
- steps:
27
- - name: Check out repository
28
- uses: actions/checkout@v2
29
-
30
- - name: Find all test files
31
- id: test_list
32
- run: |
33
- FILES=$(ls ./testdriver/acceptance/*.yaml)
34
- FILENAMES=$(basename -a $FILES)
35
- FILES_JSON=$(echo "$FILENAMES" | jq -R -s -c 'split("\n")[:-1]')
36
- echo "files=$FILES_JSON" >> $GITHUB_OUTPUT
37
- test-workflow:
38
- needs:
39
- - gather-test-files
40
- runs-on: ubuntu-latest
41
- timeout-minutes: 10
42
-
43
- strategy:
44
- matrix:
45
- test: ${{ fromJson(needs.gather-test-files.outputs.test_files) }}
46
- max-parallel: 8
47
- fail-fast: false
48
-
49
- steps:
50
- - name: Checkout repository
51
- uses: actions/checkout@v4
52
- with:
53
- fetch-depth: 0
54
-
55
- - name: Set up Node.js
56
- uses: actions/setup-node@v4
57
- with:
58
- node-version: "20"
59
- cache: "npm"
60
-
61
- - name: Install dependencies
62
- run: NODE_ENV=production npm ci
63
-
64
- - name: Run test in headless mode
65
- run: node bin/testdriverai.js run testdriver/acceptance/${{ matrix.test }}
66
- env:
67
- FORCE_COLOR: 3
68
- TD_API_KEY: ${{ secrets.TESTDRIVER_API_KEY }}
69
- TD_WEBSITE: https://testdriver-sandbox.vercel.app
70
- TD_THIS_FILE: ${{ matrix.test }}
71
- #
72
- # TODO: Add snippets back, but this should only happen on `main`
73
- # - name: Write MDX snippets separately
74
- # run: |
75
- # mkdir -p snippets
76
- # FILE_NAME=$(basename "${{ matrix.test }}" .yaml)
77
- # TEST_FILE="testdriver/${FILE_NAME}.yaml"
78
-
79
- # EMBED_URL="${{ steps.testdriver.outputs.link }}"
80
- # PARAMS="embed=true&timestamp=90000&playbackRate=5"
81
-
82
- # if [[ "$EMBED_URL" == *\?* ]]; then
83
- # EMBED_URL="${EMBED_URL}&${PARAMS}"
84
- # else
85
- # EMBED_URL="${EMBED_URL}?${PARAMS}"
86
- # fi
87
-
88
- # # Write iframe MDX
89
- # echo "<iframe src=\"$EMBED_URL\" width=\"100%\" height=\"300\" />" > "snippets/${FILE_NAME}-replay.mdx"
90
-
91
- # # Write YAML MDX
92
- # echo '```yaml' > "snippets/${FILE_NAME}-yaml.mdx"
93
- # cat "$TEST_FILE" >> "snippets/${FILE_NAME}-yaml.mdx"
94
- # echo '```' >> "snippets/${FILE_NAME}-yaml.mdx"
95
-
96
- # - name: Upload snippets artifact
97
- # uses: actions/upload-artifact@v4
98
- # with:
99
- # name: snippets-${{ matrix.os }}-${{ matrix.test }}
100
- # path: snippets/
101
- # retention-days: 1
102
-
103
- # create-snippets-commit:
104
- # name: Commit Snippets
105
- # needs: run-tests
106
- # runs-on: ubuntu-latest
107
- # env:
108
- # BASE_BRANCH: ${{ github.ref_name }}
109
- # steps:
110
- # - name: Check out current branch
111
- # uses: actions/checkout@v3
112
- # with:
113
- # token: ${{ secrets.GH_TOKEN }}
114
- # ref: ${{ github.head_ref }}
115
- # - name: Download all snippets artifacts
116
- # uses: actions/download-artifact@v4
117
- # with:
118
- # path: docs/snippets/tests
119
- # pattern: snippets-*
120
- # merge-multiple: true
121
-
122
- # - name: Commit updated snippets
123
- # uses: EndBug/add-and-commit@v9
124
- # with:
125
- # author_name: github-actions[bot]
126
- # author_email: github-actions[bot]@users.noreply.github.com
127
- # message: "Update test snippets [skip ci]"
128
- # add: "docs/snippets/tests"
129
- # new_branch: ${{ github.head_ref }}
130
- # tag_push: "--force-with-lease"
@@ -1,27 +0,0 @@
1
- # Ensure affected code follows standards and is formatted correctly. Otherwise, automatic formatting in future changes will cause larger diffs.
2
- name: Lint + Prettier
3
-
4
- on:
5
- push:
6
- paths-ignore:
7
- - "docs/**"
8
-
9
- jobs:
10
- lint:
11
- runs-on: ubuntu-latest
12
- steps:
13
- - uses: actions/checkout@v2
14
- with:
15
- # We need to fetch the full history to check for changes since `main`
16
- fetch-depth: 0
17
- - name: Set up Node.js
18
- uses: actions/setup-node@v2
19
- with:
20
- node-version: 20
21
- - name: npm ci
22
- run: npm ci --ignore-scripts
23
- - name: Run ESLint
24
- run: npx eslint . --max-warnings 0
25
- # Only check files that have been Added/Created/Modified/Renamed/Type-changed since `main`
26
- - name: Run Prettier
27
- run: git diff --name-only --diff-filter=ACMRT origin/main HEAD | xargs -r npx prettier --check --ignore-unknown
@@ -1,40 +0,0 @@
1
- name: Publish @canary to NPM
2
-
3
- permissions:
4
- contents: write
5
- pull-requests: write
6
- actions: read
7
- statuses: write
8
-
9
- on:
10
- # So that we publish for every push to `main`, despite tests
11
- push:
12
- branches: [main]
13
- paths-ignore:
14
- - "docs/**"
15
- workflow_dispatch:
16
-
17
- jobs:
18
- publish-canary:
19
- name: Publish testdriverai@canary
20
- runs-on: ubuntu-latest
21
- permissions:
22
- contents: read
23
- id-token: write
24
- steps:
25
- - name: Check out the repository
26
- uses: actions/checkout@v4
27
- - name: Set up Node.js
28
- uses: actions/setup-node@v3
29
- with:
30
- node-version: "20"
31
- registry-url: "https://registry.npmjs.org"
32
-
33
- - name: Version the package
34
- run: npm version --no-git-tag-version prerelease --preid=canary.$(git rev-parse --short HEAD)
35
-
36
- - name: Publish to canary and beta tags
37
- run: |
38
- npm publish --tag canary
39
- env:
40
- NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}
@@ -1,61 +0,0 @@
1
- # `main` is always published to `testdriverai@latest`. Checks are performed in PRs and the Merge Queue to ensure a healthy `main` branch."
2
- name: Publish @latest to NPM
3
-
4
- on:
5
- workflow_dispatch:
6
- workflow_run:
7
- workflows: ["Acceptance Tests"]
8
- branches: [main]
9
- types: [completed]
10
-
11
- jobs:
12
- bump_version:
13
- name: "Bump Version"
14
- if: ${{ github.event.workflow_run.conclusion == 'success' && !contains(github.event.workflow_run.head_commit.message, '[skip ci]') }}
15
- runs-on: ubuntu-latest
16
- steps:
17
- - name: Checkout code
18
- uses: actions/checkout@v4
19
- with:
20
- ref: ${{ github.ref }}
21
- persist-credentials: false
22
- - name: Set up Node.js
23
- uses: actions/setup-node@v3
24
- with:
25
- node-version: "20"
26
- - name: Configure Git user
27
- run: |
28
- git config --global user.name "github-actions[bot]"
29
- git config --global user.email "github-actions[bot]@users.noreply.github.com"
30
- - name: "Bump version"
31
- run: npm version patch -m "Bump version to %s [skip ci]"
32
-
33
- - name: Push changes to main
34
- run: |
35
- git push https://${{ secrets.GH_TOKEN }}@github.com/testdriverai/testdriverai.git HEAD:main --force
36
-
37
- publish-latest:
38
- name: Publish testdriverai@latest
39
- needs: bump_version
40
- runs-on: ubuntu-latest
41
- steps:
42
- - uses: actions/checkout@v4
43
- with:
44
- ref: ${{ github.ref }}
45
- - uses: actions/setup-node@v3
46
- with:
47
- node-version: "20"
48
- - uses: JS-DevTools/npm-publish@v3
49
- with:
50
- token: ${{ secrets.NPM_AUTH_TOKEN }}
51
-
52
- trigger-vscode-build:
53
- runs-on: ubuntu-latest
54
- needs: publish-latest
55
- steps:
56
- - name: Trigger VSCode Build + Publish
57
- uses: peter-evans/repository-dispatch@v3
58
- with:
59
- repository: testdriverai/vscode
60
- event-type: cli-publish
61
- token: ${{ secrets.GH_TOKEN }}
@@ -1,29 +0,0 @@
1
- # Ensure that the published `testdriverai` package is installable on multiple version of Node.js across multiple operating systems.
2
- name: Test TestDriverAI Installation
3
-
4
- on:
5
- schedule:
6
- - cron: "0 * * * *" # Runs every hour
7
- workflow_dispatch:
8
- merge_group:
9
-
10
- jobs:
11
- install-testdriverai:
12
- runs-on: ${{ matrix.runner }}
13
- strategy:
14
- fail-fast: false
15
- matrix:
16
- runner: [macos-latest, windows-latest]
17
- node-version: ["18", "20", "22"]
18
-
19
- steps:
20
- - name: Checkout repository
21
- uses: actions/checkout@v4
22
-
23
- - name: Set up Node.js ${{ matrix.node-version }}
24
- uses: actions/setup-node@v4
25
- with:
26
- node-version: ${{ matrix.node-version }}
27
-
28
- - name: Verify `testdriverai` is executable
29
- run: npx testdriverai@latest -y --help
@@ -1,3 +0,0 @@
1
- {
2
- "recommendations": ["esbenp.prettier-vscode", "dbaeumer.vscode-eslint"]
3
- }
@@ -1,22 +0,0 @@
1
- {
2
- // Use IntelliSense to learn about possible attributes.
3
- // Hover to view descriptions of existing attributes.
4
- // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5
- "version": "0.2.0",
6
- "configurations": [
7
- {
8
- "name": "Attach",
9
- "port": 9229,
10
- "request": "attach",
11
- "skipFiles": ["<node_internals>/**"],
12
- "type": "node"
13
- },
14
- {
15
- "type": "node",
16
- "request": "launch",
17
- "name": "Launch Program",
18
- "skipFiles": ["<node_internals>/**"],
19
- "program": "${workspaceFolder}/index.js"
20
- }
21
- ]
22
- }
@@ -1,14 +0,0 @@
1
- {
2
- "editor.codeActionsOnSave": {
3
- "source.organizeImports": "explicit"
4
- },
5
- "editor.formatOnSave": true,
6
- "editor.defaultFormatter": "esbenp.prettier-vscode",
7
- "yaml.schemas": {
8
- "https://raw.githubusercontent.com/testdriverai/testdriverai/main/schema.json": "file:///Users/kid/Desktop/td/internal/testdriverai/testdriver.yaml"
9
- },
10
- "vitest.enable": true,
11
- "vitest.commandLine": "npx vitest --watch",
12
- "vitest.include": ["**/testdriver/acceptance-sdk/*.test.mjs"],
13
- "vitest.exclude": []
14
- }