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
@@ -1,11 +0,0 @@
1
- extends: repetition
2
- message: "'%s' is repeated!"
3
- level: warning
4
- alpha: true
5
- action:
6
- name: edit
7
- params:
8
- - truncate
9
- - " "
10
- tokens:
11
- - '[^\s]+'
@@ -1,183 +0,0 @@
1
- extends: existence
2
- message: "'%s' may be passive voice. Use active voice if you can."
3
- ignorecase: true
4
- level: warning
5
- raw:
6
- - \b(am|are|were|being|is|been|was|be)\b\s*
7
- tokens:
8
- - '[\w]+ed'
9
- - awoken
10
- - beat
11
- - become
12
- - been
13
- - begun
14
- - bent
15
- - beset
16
- - bet
17
- - bid
18
- - bidden
19
- - bitten
20
- - bled
21
- - blown
22
- - born
23
- - bought
24
- - bound
25
- - bred
26
- - broadcast
27
- - broken
28
- - brought
29
- - built
30
- - burnt
31
- - burst
32
- - cast
33
- - caught
34
- - chosen
35
- - clung
36
- - come
37
- - cost
38
- - crept
39
- - cut
40
- - dealt
41
- - dived
42
- - done
43
- - drawn
44
- - dreamt
45
- - driven
46
- - drunk
47
- - dug
48
- - eaten
49
- - fallen
50
- - fed
51
- - felt
52
- - fit
53
- - fled
54
- - flown
55
- - flung
56
- - forbidden
57
- - foregone
58
- - forgiven
59
- - forgotten
60
- - forsaken
61
- - fought
62
- - found
63
- - frozen
64
- - given
65
- - gone
66
- - gotten
67
- - ground
68
- - grown
69
- - heard
70
- - held
71
- - hidden
72
- - hit
73
- - hung
74
- - hurt
75
- - kept
76
- - knelt
77
- - knit
78
- - known
79
- - laid
80
- - lain
81
- - leapt
82
- - learnt
83
- - led
84
- - left
85
- - lent
86
- - let
87
- - lighted
88
- - lost
89
- - made
90
- - meant
91
- - met
92
- - misspelt
93
- - mistaken
94
- - mown
95
- - overcome
96
- - overdone
97
- - overtaken
98
- - overthrown
99
- - paid
100
- - pled
101
- - proven
102
- - put
103
- - quit
104
- - read
105
- - rid
106
- - ridden
107
- - risen
108
- - run
109
- - rung
110
- - said
111
- - sat
112
- - sawn
113
- - seen
114
- - sent
115
- - set
116
- - sewn
117
- - shaken
118
- - shaven
119
- - shed
120
- - shod
121
- - shone
122
- - shorn
123
- - shot
124
- - shown
125
- - shrunk
126
- - shut
127
- - slain
128
- - slept
129
- - slid
130
- - slit
131
- - slung
132
- - smitten
133
- - sold
134
- - sought
135
- - sown
136
- - sped
137
- - spent
138
- - spilt
139
- - spit
140
- - split
141
- - spoken
142
- - spread
143
- - sprung
144
- - spun
145
- - stolen
146
- - stood
147
- - stridden
148
- - striven
149
- - struck
150
- - strung
151
- - stuck
152
- - stung
153
- - stunk
154
- - sung
155
- - sunk
156
- - swept
157
- - swollen
158
- - sworn
159
- - swum
160
- - swung
161
- - taken
162
- - taught
163
- - thought
164
- - thrived
165
- - thrown
166
- - thrust
167
- - told
168
- - torn
169
- - trodden
170
- - understood
171
- - upheld
172
- - upset
173
- - wed
174
- - wept
175
- - withheld
176
- - withstood
177
- - woken
178
- - won
179
- - worn
180
- - wound
181
- - woven
182
- - written
183
- - wrung
@@ -1,27 +0,0 @@
1
- Based on [write-good](https://github.com/btford/write-good).
2
-
3
- > Naive linter for English prose for developers who can't write good and wanna learn to do other stuff good too.
4
-
5
- ```
6
- The MIT License (MIT)
7
-
8
- Copyright (c) 2014 Brian Ford
9
-
10
- Permission is hereby granted, free of charge, to any person obtaining a copy
11
- of this software and associated documentation files (the "Software"), to deal
12
- in the Software without restriction, including without limitation the rights
13
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
- copies of the Software, and to permit persons to whom the Software is
15
- furnished to do so, subject to the following conditions:
16
-
17
- The above copyright notice and this permission notice shall be included in all
18
- copies or substantial portions of the Software.
19
-
20
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
- SOFTWARE.
27
- ```
@@ -1,5 +0,0 @@
1
- extends: existence
2
- message: "Don't start a sentence with '%s'."
3
- level: error
4
- raw:
5
- - '(?:[;-]\s)so[\s,]|\bSo[\s,]'
@@ -1,6 +0,0 @@
1
- extends: existence
2
- message: "Don't start a sentence with '%s'."
3
- ignorecase: false
4
- level: error
5
- raw:
6
- - '(?:[;-]\s)There\s(is|are)|\bThere\s(is|are)\b'
@@ -1,221 +0,0 @@
1
- extends: existence
2
- message: "'%s' is too wordy."
3
- ignorecase: true
4
- level: warning
5
- tokens:
6
- - a number of
7
- - abundance
8
- - accede to
9
- - accelerate
10
- - accentuate
11
- - accompany
12
- - accomplish
13
- - accorded
14
- - accrue
15
- - acquiesce
16
- - acquire
17
- - additional
18
- - adjacent to
19
- - adjustment
20
- - admissible
21
- - advantageous
22
- - adversely impact
23
- - advise
24
- - aforementioned
25
- - aggregate
26
- - aircraft
27
- - all of
28
- - all things considered
29
- - alleviate
30
- - allocate
31
- - along the lines of
32
- - already existing
33
- - alternatively
34
- - amazing
35
- - ameliorate
36
- - anticipate
37
- - apparent
38
- - appreciable
39
- - as a matter of fact
40
- - as a means of
41
- - as far as I'm concerned
42
- - as of yet
43
- - as to
44
- - as yet
45
- - ascertain
46
- - assistance
47
- - at the present time
48
- - at this time
49
- - attain
50
- - attributable to
51
- - authorize
52
- - because of the fact that
53
- - belated
54
- - benefit from
55
- - bestow
56
- - by means of
57
- - by virtue of
58
- - by virtue of the fact that
59
- - cease
60
- - close proximity
61
- - commence
62
- - comply with
63
- - concerning
64
- - consequently
65
- - consolidate
66
- - constitutes
67
- - demonstrate
68
- - depart
69
- - designate
70
- - discontinue
71
- - due to the fact that
72
- - each and every
73
- - economical
74
- - eliminate
75
- - elucidate
76
- - employ
77
- - endeavor
78
- - enumerate
79
- - equitable
80
- - equivalent
81
- - evaluate
82
- - evidenced
83
- - exclusively
84
- - expedite
85
- - expend
86
- - expiration
87
- - facilitate
88
- - factual evidence
89
- - feasible
90
- - finalize
91
- - first and foremost
92
- - for all intents and purposes
93
- - for the most part
94
- - for the purpose of
95
- - forfeit
96
- - formulate
97
- - have a tendency to
98
- - honest truth
99
- - however
100
- - if and when
101
- - impacted
102
- - implement
103
- - in a manner of speaking
104
- - in a timely manner
105
- - in a very real sense
106
- - in accordance with
107
- - in addition
108
- - in all likelihood
109
- - in an effort to
110
- - in between
111
- - in excess of
112
- - in lieu of
113
- - in light of the fact that
114
- - in many cases
115
- - in my opinion
116
- - in order to
117
- - in regard to
118
- - in some instances
119
- - in terms of
120
- - in the case of
121
- - in the event that
122
- - in the final analysis
123
- - in the nature of
124
- - in the near future
125
- - in the process of
126
- - inception
127
- - incumbent upon
128
- - indicate
129
- - indication
130
- - initiate
131
- - irregardless
132
- - is applicable to
133
- - is authorized to
134
- - is responsible for
135
- - it is
136
- - it is essential
137
- - it seems that
138
- - it was
139
- - magnitude
140
- - maximum
141
- - methodology
142
- - minimize
143
- - minimum
144
- - modify
145
- - monitor
146
- - multiple
147
- - necessitate
148
- - nevertheless
149
- - not certain
150
- - not many
151
- - not often
152
- - not unless
153
- - not unlike
154
- - notwithstanding
155
- - null and void
156
- - numerous
157
- - objective
158
- - obligate
159
- - obtain
160
- - on the contrary
161
- - on the other hand
162
- - one particular
163
- - optimum
164
- - overall
165
- - owing to the fact that
166
- - participate
167
- - particulars
168
- - pass away
169
- - pertaining to
170
- - point in time
171
- - portion
172
- - possess
173
- - preclude
174
- - previously
175
- - prior to
176
- - prioritize
177
- - procure
178
- - proficiency
179
- - provided that
180
- - purchase
181
- - put simply
182
- - readily apparent
183
- - refer back
184
- - regarding
185
- - relocate
186
- - remainder
187
- - remuneration
188
- - requirement
189
- - reside
190
- - residence
191
- - retain
192
- - satisfy
193
- - shall
194
- - should you wish
195
- - similar to
196
- - solicit
197
- - span across
198
- - strategize
199
- - subsequent
200
- - substantial
201
- - successfully complete
202
- - sufficient
203
- - terminate
204
- - the month of
205
- - the point I am trying to make
206
- - therefore
207
- - time period
208
- - took advantage of
209
- - transmit
210
- - transpire
211
- - type of
212
- - until such time as
213
- - utilization
214
- - utilize
215
- - validate
216
- - various different
217
- - what I mean to say is
218
- - whether or not
219
- - with respect to
220
- - with the exception of
221
- - witnessed
@@ -1,29 +0,0 @@
1
- extends: existence
2
- message: "'%s' is a weasel word!"
3
- ignorecase: true
4
- level: warning
5
- tokens:
6
- - clearly
7
- - completely
8
- - exceedingly
9
- - excellent
10
- - extremely
11
- - fairly
12
- - huge
13
- - interestingly
14
- - is a number
15
- - largely
16
- - mostly
17
- - obviously
18
- - quite
19
- - relatively
20
- - remarkably
21
- - several
22
- - significantly
23
- - substantially
24
- - surprisingly
25
- - tiny
26
- - usually
27
- - various
28
- - vast
29
- - very
@@ -1,4 +0,0 @@
1
- {
2
- "feed": "https://github.com/errata-ai/write-good/releases.atom",
3
- "vale_version": ">=1.0.0"
4
- }
@@ -1,137 +0,0 @@
1
- /**
2
- * Dashcam Class - Unit Tests
3
- * Tests for the new Dashcam class
4
- */
5
-
6
- const { Dashcam } = require('../src/core');
7
-
8
- // Mock TestDriver client
9
- class MockTestDriver {
10
- constructor(os = 'linux') {
11
- this.os = os;
12
- this.commands = [];
13
- }
14
-
15
- async exec(shell, command, timeout, silent) {
16
- this.commands.push({ shell, command, timeout, silent });
17
-
18
- // Mock responses
19
- if (command.includes('npm prefix -g')) {
20
- return this.os === 'windows'
21
- ? 'C:\\Users\\testdriver\\AppData\\Roaming\\npm'
22
- : '/usr/local';
23
- }
24
-
25
- if (command.includes('stop')) {
26
- return 'Recording stopped\nReplay URL: https://app.testdriver.ai/replay/abc123?share=xyz';
27
- }
28
-
29
- return 'OK';
30
- }
31
-
32
- wait(ms) {
33
- return new Promise(resolve => setTimeout(resolve, ms));
34
- }
35
- }
36
-
37
- async function testDashcamCreation() {
38
- console.log('🧪 Test: Dashcam creation');
39
-
40
- const client = new MockTestDriver();
41
- const dashcam = new Dashcam(client);
42
-
43
- console.assert(dashcam.client === client, 'Client should be stored');
44
- console.assert(dashcam.recording === false, 'Should not be recording initially');
45
- console.assert(dashcam._authenticated === false, 'Should not be authenticated initially');
46
-
47
- console.log('✅ Dashcam creation test passed');
48
- }
49
-
50
- async function testDashcamWithOptions() {
51
- console.log('\n🧪 Test: Dashcam with options');
52
-
53
- const client = new MockTestDriver();
54
- const dashcam = new Dashcam(client, {
55
- apiKey: 'custom-key',
56
- autoStart: true,
57
- logs: [
58
- { type: 'file', path: '/tmp/test.log', name: 'Test Log' }
59
- ]
60
- });
61
-
62
- console.assert(dashcam.apiKey === 'custom-key', 'Custom API key should be used');
63
- console.assert(dashcam.autoStart === true, 'Auto start should be enabled');
64
- console.assert(dashcam.logs.length === 1, 'Logs should be stored');
65
-
66
- console.log('✅ Dashcam options test passed');
67
- }
68
-
69
- async function testErrorOnMissingClient() {
70
- console.log('\n🧪 Test: Error when client missing');
71
-
72
- try {
73
- new Dashcam();
74
- console.error('❌ Should have thrown error');
75
- process.exit(1);
76
- } catch (error) {
77
- console.assert(
78
- error.message.includes('TestDriver client'),
79
- 'Error message should mention TestDriver client'
80
- );
81
- }
82
-
83
- console.log('✅ Missing client error test passed');
84
- }
85
-
86
- async function testStopReturnsUrl() {
87
- console.log('\n🧪 Test: Stop returns URL');
88
-
89
- const client = new MockTestDriver();
90
- const dashcam = new Dashcam(client);
91
-
92
- dashcam.recording = true; // Simulate recording state
93
- const url = await dashcam.stop();
94
-
95
- console.assert(url !== null, 'URL should be returned');
96
- console.assert(url.includes('replay'), 'URL should contain replay');
97
- console.assert(dashcam.recording === false, 'Should stop recording');
98
-
99
- console.log('✅ Stop returns URL test passed');
100
- console.log(' URL:', url);
101
- }
102
-
103
- async function testIsRecording() {
104
- console.log('\n🧪 Test: isRecording method');
105
-
106
- const client = new MockTestDriver();
107
- const dashcam = new Dashcam(client);
108
-
109
- let recording = await dashcam.isRecording();
110
- console.assert(recording === false, 'Should not be recording initially');
111
-
112
- dashcam.recording = true;
113
- recording = await dashcam.isRecording();
114
- console.assert(recording === true, 'Should return recording state');
115
-
116
- console.log('✅ isRecording test passed');
117
- }
118
-
119
- async function runAllTests() {
120
- console.log('🚀 Running Dashcam class tests...\n');
121
-
122
- try {
123
- await testDashcamCreation();
124
- await testDashcamWithOptions();
125
- await testErrorOnMissingClient();
126
- await testStopReturnsUrl();
127
- await testIsRecording();
128
-
129
- console.log('\n✅ All tests passed!');
130
- } catch (error) {
131
- console.error('\n❌ Test failed:', error.message);
132
- console.error(error.stack);
133
- process.exit(1);
134
- }
135
- }
136
-
137
- runAllTests();
@@ -1,27 +0,0 @@
1
- name: MCP Example Test
2
- description: Test created using TestDriver MCP to navigate example.com
3
-
4
- steps:
5
- # Open Chrome browser and navigate to example.com
6
- - exec:
7
- code: Start-Process chrome "https://example.com"
8
- language: pwsh
9
- timeout: 5000
10
-
11
- # Wait for the page to load
12
- - wait-for-text:
13
- text: Example Domain
14
- timeout: 10000
15
-
16
- # Assert that the Example Domain heading is visible
17
- - assert:
18
- expect: The text "Example Domain" is visible on the page
19
-
20
- # Click on the "Learn more" link
21
- - hover-text:
22
- text: Learn more
23
- action: click
24
-
25
- # Wait for navigation to complete
26
- - wait:
27
- timeout: 2000
@@ -1,47 +0,0 @@
1
- const chai = require("chai");
2
- const expect = chai.expect;
3
- const { interpolate } = require("../agent/lib/parser");
4
-
5
- describe("interpolate", function () {
6
- it("should replace variables in the string with values from the dictionary", function () {
7
- const template = "Hello, ${name}!";
8
- const vars = { name: "World" };
9
- const result = interpolate(template, vars);
10
- expect(result).to.equal("Hello, World!");
11
- });
12
-
13
- it("should replace multiple variables in the string", function () {
14
- const template = "Hi, ${firstName} ${lastName}!";
15
- const vars = { firstName: "Marcy", lastName: "the Dog" };
16
- const result = interpolate(template, vars);
17
- expect(result).to.equal("Hi, Marcy the Dog!");
18
- });
19
-
20
- it("should leave variables unchanged if they are not in the dictionary", function () {
21
- const template = "Hi, ${name} ${surname}!";
22
- const vars = { name: "John" };
23
- const result = interpolate(template, vars);
24
- expect(result).to.equal("Hi, John ${surname}!");
25
- });
26
-
27
- it("should return the original string if no variables are present", function () {
28
- const template = "Hello, World!";
29
- const vars = { name: "John" };
30
- const result = interpolate(template, vars);
31
- expect(result).to.equal("Hello, World!");
32
- });
33
-
34
- it("should handle an empty dictionary gracefully", function () {
35
- const template = "Hi, ${name}!";
36
- const vars = {};
37
- const result = interpolate(template, vars);
38
- expect(result).to.equal("Hi, ${name}!");
39
- });
40
-
41
- it("should not replace escaped variables", function () {
42
- const template = "Hello, \\${name}!";
43
- const vars = { name: "World" };
44
- const result = interpolate(template, vars);
45
- expect(result).to.equal("Hello, ${name}!");
46
- });
47
- });