testdriverai 7.2.64 → 7.2.69

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 (369) hide show
  1. package/agent/index.js +4 -3
  2. package/agent/interface.js +11 -251
  3. package/agent/lib/debugger-server.js +2 -1
  4. package/agent/lib/logger.js +56 -0
  5. package/agent/lib/sandbox.js +6 -7
  6. package/ai/agents/test-writer.md +457 -0
  7. package/{docs/v7/ai.mdx → ai/skills/testdriver:ai/SKILL.md} +3 -5
  8. package/{docs/v7/assert.mdx → ai/skills/testdriver:assert/SKILL.md} +3 -4
  9. package/{docs/v7/aws-setup.mdx → ai/skills/testdriver:aws-setup/SKILL.md} +3 -4
  10. package/{docs/v7/caching.mdx → ai/skills/testdriver:caching/SKILL.md} +3 -7
  11. package/{docs/v7/captcha.mdx → ai/skills/testdriver:captcha/SKILL.md} +4 -5
  12. package/{docs/v7/ci-cd.mdx → ai/skills/testdriver:ci-cd/SKILL.md} +3 -4
  13. package/{docs/v7/click.mdx → ai/skills/testdriver:click/SKILL.md} +3 -4
  14. package/{docs/v7/client.mdx → ai/skills/testdriver:client/SKILL.md} +11 -5
  15. package/{docs/v7/cloud.mdx → ai/skills/testdriver:cloud/SKILL.md} +3 -4
  16. package/{docs/v7/customizing-devices.mdx → ai/skills/testdriver:customizing-devices/SKILL.md} +36 -26
  17. package/{docs/v7/dashcam.mdx → ai/skills/testdriver:dashcam/SKILL.md} +3 -4
  18. package/{docs/v7/device-config.mdx → ai/skills/testdriver:device-config/SKILL.md} +3 -3
  19. package/{docs/v7/double-click.mdx → ai/skills/testdriver:double-click/SKILL.md} +3 -3
  20. package/{docs/v7/elements.mdx → ai/skills/testdriver:elements/SKILL.md} +3 -4
  21. package/{docs/v7/enterprise.mdx → ai/skills/testdriver:enterprise/SKILL.md} +3 -5
  22. package/ai/skills/testdriver:examples/SKILL.md +7 -0
  23. package/{docs/v7/exec.mdx → ai/skills/testdriver:exec/SKILL.md} +3 -4
  24. package/{docs/v7/find.mdx → ai/skills/testdriver:find/SKILL.md} +81 -4
  25. package/{docs/v7/focus-application.mdx → ai/skills/testdriver:focus-application/SKILL.md} +3 -4
  26. package/{docs/v7/generating-tests.mdx → ai/skills/testdriver:generating-tests/SKILL.md} +3 -3
  27. package/{docs/v7/hover.mdx → ai/skills/testdriver:hover/SKILL.md} +3 -4
  28. package/{docs/v7/locating-elements.mdx → ai/skills/testdriver:locating-elements/SKILL.md} +3 -3
  29. package/{docs/v7/making-assertions.mdx → ai/skills/testdriver:making-assertions/SKILL.md} +3 -3
  30. package/ai/skills/testdriver:mcp-workflow/SKILL.md +410 -0
  31. package/{docs/v7/mouse-down.mdx → ai/skills/testdriver:mouse-down/SKILL.md} +3 -3
  32. package/{docs/v7/mouse-up.mdx → ai/skills/testdriver:mouse-up/SKILL.md} +3 -3
  33. package/{docs/v7/performing-actions.mdx → ai/skills/testdriver:performing-actions/SKILL.md} +3 -3
  34. package/{docs/v7/press-keys.mdx → ai/skills/testdriver:press-keys/SKILL.md} +3 -4
  35. package/{docs/v7/quickstart.mdx → ai/skills/testdriver:quickstart/SKILL.md} +3 -4
  36. package/{docs/v7/reusable-code.mdx → ai/skills/testdriver:reusable-code/SKILL.md} +3 -3
  37. package/{docs/v7/right-click.mdx → ai/skills/testdriver:right-click/SKILL.md} +3 -3
  38. package/{docs/v7/running-tests.mdx → ai/skills/testdriver:running-tests/SKILL.md} +3 -3
  39. package/{docs/v7/screenshot.mdx → ai/skills/testdriver:screenshot/SKILL.md} +3 -4
  40. package/{docs/v7/scroll.mdx → ai/skills/testdriver:scroll/SKILL.md} +3 -4
  41. package/{docs/v7/secrets.mdx → ai/skills/testdriver:secrets/SKILL.md} +3 -3
  42. package/{docs/v7/self-hosted.mdx → ai/skills/testdriver:self-hosted/SKILL.md} +3 -4
  43. package/ai/skills/testdriver:testdriver/SKILL.md +31 -0
  44. package/{docs/v7/type.mdx → ai/skills/testdriver:type/SKILL.md} +3 -4
  45. package/{docs/v7/variables.mdx → ai/skills/testdriver:variables/SKILL.md} +3 -3
  46. package/{docs/v7/waiting-for-elements.mdx → ai/skills/testdriver:waiting-for-elements/SKILL.md} +3 -3
  47. package/{docs/v7/what-is-testdriver.mdx → ai/skills/testdriver:what-is-testdriver/SKILL.md} +3 -3
  48. package/interfaces/cli/commands/init.js +278 -1
  49. package/interfaces/cli/commands/setup.js +382 -0
  50. package/interfaces/vitest-plugin.mjs +190 -122
  51. package/lib/sentry.js +4 -3
  52. package/lib/vitest/hooks.mjs +70 -16
  53. package/mcp-server/dist/codegen.d.ts +9 -0
  54. package/mcp-server/dist/codegen.js +165 -0
  55. package/mcp-server/dist/mcp-app.html +114 -0
  56. package/mcp-server/dist/provision-types.d.ts +290 -0
  57. package/mcp-server/dist/provision-types.js +174 -0
  58. package/mcp-server/dist/server.d.ts +6 -0
  59. package/mcp-server/dist/server.js +1441 -0
  60. package/mcp-server/dist/session.d.ts +85 -0
  61. package/mcp-server/dist/session.js +152 -0
  62. package/package.json +30 -9
  63. package/sdk.d.ts +29 -2
  64. package/sdk.js +1 -0
  65. package/.env.example +0 -4
  66. package/.github/workflows/acceptance-linux-scheduled.yaml +0 -45
  67. package/.github/workflows/acceptance-windows-scheduled.yaml +0 -54
  68. package/.github/workflows/acceptance.yaml +0 -87
  69. package/.github/workflows/publish.yaml +0 -68
  70. package/.github/workflows/test-init.yml +0 -145
  71. package/.github/workflows/testdriver.yml +0 -170
  72. package/.github/workflows/windows-self-hosted.yaml +0 -82
  73. package/.prettierignore +0 -4
  74. package/.prettierrc +0 -1
  75. package/CHANGELOG.md +0 -34
  76. package/agents.md +0 -455
  77. package/debugger/bg.png +0 -0
  78. package/debugger/icon.png +0 -0
  79. package/debugger/index.html +0 -797
  80. package/debugger/td.png +0 -0
  81. package/debugger/tray-buffered.png +0 -0
  82. package/debugger/tray.png +0 -0
  83. package/docs/GITHUB_COMMENTS.md +0 -330
  84. package/docs/GITHUB_COMMENTS_ANNOUNCEMENT.md +0 -167
  85. package/docs/QUICK-START-GITHUB-COMMENTS.md +0 -84
  86. package/docs/TEST-GITHUB-COMMENTS.md +0 -129
  87. package/docs/_scripts/link-replacer.js +0 -164
  88. package/docs/_scripts/upload-docs-to-openai.js +0 -284
  89. package/docs/docs.json +0 -393
  90. package/docs/github-integration-setup.md +0 -266
  91. package/docs/guide/best-practices-polling.mdx +0 -154
  92. package/docs/images/content/account/newprojectsettings.png +0 -0
  93. package/docs/images/content/account/projectpage.png +0 -0
  94. package/docs/images/content/account/projectreplays.png +0 -0
  95. package/docs/images/content/account/team-manage.png +0 -0
  96. package/docs/images/content/account/teampage.png +0 -0
  97. package/docs/images/content/extension/cursor.svg +0 -1
  98. package/docs/images/content/extension/vscode.svg +0 -57
  99. package/docs/images/content/extension/windsurf.svg +0 -3
  100. package/docs/images/content/self-hosted/launchtemplateid.png +0 -0
  101. package/docs/images/content/side-by-side.png +0 -0
  102. package/docs/images/content/vscode/ide-full.png +0 -0
  103. package/docs/images/content/vscode/running.png +0 -0
  104. package/docs/images/content/vscode/vscode-2-assert.png +0 -0
  105. package/docs/images/content/vscode/vscode-agent-preview.png +0 -0
  106. package/docs/images/content/vscode/vscode-copilot-ask.png +0 -0
  107. package/docs/images/content/vscode/vscode-file-creation.png +0 -0
  108. package/docs/images/content/vscode/vscode-install.png +0 -0
  109. package/docs/images/content/vscode/vscode-overview.png +0 -0
  110. package/docs/images/content/vscode/vscode-setup-walkthrough.png +0 -0
  111. package/docs/images/content/vscode/vscode-stopchat.png +0 -0
  112. package/docs/images/content/vscode/vscode-stoptest.png +0 -0
  113. package/docs/images/content/vscode/vscode-tdservice.png +0 -0
  114. package/docs/images/content/vscode/vscode-test-output.png +0 -0
  115. package/docs/images/content/vscode/vscode-testhistory.png +0 -0
  116. package/docs/images/content/vscode/vscode-testpane-runtests.png +0 -0
  117. package/docs/images/content/vscode/vscode-testpane.png +0 -0
  118. package/docs/images/template/dark.png +0 -0
  119. package/docs/images/template/icon.png +0 -0
  120. package/docs/images/template/light.png +0 -0
  121. package/docs/snippets/calendar-link.mdx +0 -4
  122. package/docs/snippets/gitignore-warning.mdx +0 -7
  123. package/docs/snippets/lifecycle-warning.mdx +0 -6
  124. package/docs/snippets/test-prereqs.mdx +0 -12
  125. package/docs/snippets/tests/assert-replay.mdx +0 -7
  126. package/docs/snippets/tests/assert-yaml.mdx +0 -8
  127. package/docs/snippets/tests/exec-js-replay.mdx +0 -7
  128. package/docs/snippets/tests/exec-js-yaml.mdx +0 -32
  129. package/docs/snippets/tests/exec-shell-replay.mdx +0 -7
  130. package/docs/snippets/tests/exec-shell-yaml.mdx +0 -15
  131. package/docs/snippets/tests/hover-image-replay.mdx +0 -7
  132. package/docs/snippets/tests/hover-image-yaml.mdx +0 -17
  133. package/docs/snippets/tests/hover-text-replay.mdx +0 -7
  134. package/docs/snippets/tests/hover-text-with-description-replay.mdx +0 -7
  135. package/docs/snippets/tests/hover-text-with-description-yaml.mdx +0 -24
  136. package/docs/snippets/tests/hover-text-yaml.mdx +0 -14
  137. package/docs/snippets/tests/match-image-replay.mdx +0 -7
  138. package/docs/snippets/tests/match-image-yaml.mdx +0 -17
  139. package/docs/snippets/tests/press-keys-replay.mdx +0 -7
  140. package/docs/snippets/tests/press-keys-yaml.mdx +0 -36
  141. package/docs/snippets/tests/remember-replay.mdx +0 -7
  142. package/docs/snippets/tests/remember-yaml.mdx +0 -28
  143. package/docs/snippets/tests/scroll-replay.mdx +0 -7
  144. package/docs/snippets/tests/scroll-until-image-replay.mdx +0 -7
  145. package/docs/snippets/tests/scroll-until-image-yaml.mdx +0 -14
  146. package/docs/snippets/tests/scroll-until-text-replay.mdx +0 -7
  147. package/docs/snippets/tests/scroll-until-text-yaml.mdx +0 -17
  148. package/docs/snippets/tests/scroll-yaml.mdx +0 -30
  149. package/docs/snippets/tests/type-repeated-replay.mdx +0 -7
  150. package/docs/snippets/tests/type-repeated-yaml.mdx +0 -22
  151. package/docs/snippets/tests/type-replay.mdx +0 -7
  152. package/docs/snippets/tests/type-yaml.mdx +0 -28
  153. package/docs/snippets/tests/wait-for-image-replay.mdx +0 -7
  154. package/docs/snippets/tests/wait-for-image-yaml.mdx +0 -18
  155. package/docs/snippets/tests/wait-for-text-replay.mdx +0 -7
  156. package/docs/snippets/tests/wait-for-text-yaml.mdx +0 -18
  157. package/docs/snippets/tests/wait-replay.mdx +0 -7
  158. package/docs/snippets/tests/wait-yaml.mdx +0 -13
  159. package/docs/styles.css +0 -65
  160. package/docs/v6/account/dashboard.mdx +0 -16
  161. package/docs/v6/account/enterprise.mdx +0 -110
  162. package/docs/v6/account/pricing.mdx +0 -33
  163. package/docs/v6/account/projects.mdx +0 -33
  164. package/docs/v6/account/team.mdx +0 -35
  165. package/docs/v6/action/ami.mdx +0 -109
  166. package/docs/v6/action/performance.mdx +0 -105
  167. package/docs/v6/action/secrets.mdx +0 -93
  168. package/docs/v6/apps/chrome-extensions.mdx +0 -48
  169. package/docs/v6/apps/desktop-apps.mdx +0 -93
  170. package/docs/v6/apps/mobile-apps.mdx +0 -26
  171. package/docs/v6/apps/static-websites.mdx +0 -54
  172. package/docs/v6/apps/tauri-apps.mdx +0 -361
  173. package/docs/v6/bugs/jira.mdx +0 -232
  174. package/docs/v6/cli/overview.mdx +0 -66
  175. package/docs/v6/commands/assert.mdx +0 -45
  176. package/docs/v6/commands/exec.mdx +0 -282
  177. package/docs/v6/commands/focus-application.mdx +0 -44
  178. package/docs/v6/commands/hover-image.mdx +0 -69
  179. package/docs/v6/commands/hover-text.mdx +0 -47
  180. package/docs/v6/commands/if.mdx +0 -53
  181. package/docs/v6/commands/match-image.mdx +0 -67
  182. package/docs/v6/commands/press-keys.mdx +0 -87
  183. package/docs/v6/commands/remember.mdx +0 -49
  184. package/docs/v6/commands/run.mdx +0 -44
  185. package/docs/v6/commands/scroll-until-image.mdx +0 -66
  186. package/docs/v6/commands/scroll-until-text.mdx +0 -60
  187. package/docs/v6/commands/scroll.mdx +0 -69
  188. package/docs/v6/commands/type.mdx +0 -45
  189. package/docs/v6/commands/wait-for-image.mdx +0 -54
  190. package/docs/v6/commands/wait-for-text.mdx +0 -48
  191. package/docs/v6/commands/wait.mdx +0 -45
  192. package/docs/v6/exporting/junit.mdx +0 -218
  193. package/docs/v6/exporting/playwright.mdx +0 -197
  194. package/docs/v6/features/auto-healing.mdx +0 -144
  195. package/docs/v6/features/generation.mdx +0 -116
  196. package/docs/v6/features/parallel-testing.mdx +0 -151
  197. package/docs/v6/features/reusable-snippets.mdx +0 -131
  198. package/docs/v6/features/selectorless.mdx +0 -80
  199. package/docs/v6/features/visual-assertions.mdx +0 -139
  200. package/docs/v6/getting-started/ci.mdx +0 -146
  201. package/docs/v6/getting-started/cli.mdx +0 -91
  202. package/docs/v6/getting-started/editing.mdx +0 -100
  203. package/docs/v6/getting-started/playwright.mdx +0 -342
  204. package/docs/v6/getting-started/running.mdx +0 -48
  205. package/docs/v6/getting-started/self-hosting.mdx +0 -408
  206. package/docs/v6/getting-started/vscode.mdx +0 -89
  207. package/docs/v6/guide/assertions.mdx +0 -189
  208. package/docs/v6/guide/authentication.mdx +0 -136
  209. package/docs/v6/guide/code.mdx +0 -65
  210. package/docs/v6/guide/dashcam.mdx +0 -118
  211. package/docs/v6/guide/environment-variables.mdx +0 -26
  212. package/docs/v6/guide/lifecycle.mdx +0 -242
  213. package/docs/v6/guide/locating.mdx +0 -141
  214. package/docs/v6/guide/protips.mdx +0 -43
  215. package/docs/v6/guide/variables.mdx +0 -143
  216. package/docs/v6/guide/waiting.mdx +0 -130
  217. package/docs/v6/importing/csv.mdx +0 -196
  218. package/docs/v6/importing/gherkin.mdx +0 -143
  219. package/docs/v6/importing/jira.mdx +0 -164
  220. package/docs/v6/importing/testrail.mdx +0 -162
  221. package/docs/v6/integrations/electron.mdx +0 -146
  222. package/docs/v6/integrations/netlify.mdx +0 -100
  223. package/docs/v6/integrations/vercel.mdx +0 -125
  224. package/docs/v6/interactive/explore.mdx +0 -99
  225. package/docs/v6/interactive/run.mdx +0 -52
  226. package/docs/v6/interactive/save.mdx +0 -63
  227. package/docs/v6/overview/comparison.mdx +0 -101
  228. package/docs/v6/overview/faq.mdx +0 -162
  229. package/docs/v6/overview/performance.mdx +0 -52
  230. package/docs/v6/overview/quickstart.mdx +0 -137
  231. package/docs/v6/overview/what-is-testdriver.mdx +0 -85
  232. package/docs/v6/scenarios/ai-chatbot.mdx +0 -28
  233. package/docs/v6/scenarios/cookie-banner.mdx +0 -32
  234. package/docs/v6/scenarios/file-upload.mdx +0 -33
  235. package/docs/v6/scenarios/form-filling.mdx +0 -32
  236. package/docs/v6/scenarios/log-in.mdx +0 -75
  237. package/docs/v6/scenarios/pdf-generation.mdx +0 -25
  238. package/docs/v6/scenarios/spell-check.mdx +0 -22
  239. package/docs/v6/security/action.mdx +0 -84
  240. package/docs/v6/security/agent.mdx +0 -73
  241. package/docs/v6/security/platform.mdx +0 -77
  242. package/docs/v6/tutorials/advanced-test.mdx +0 -81
  243. package/docs/v6/tutorials/basic-test.mdx +0 -45
  244. package/docs/v7/_drafts/agents.mdx +0 -852
  245. package/docs/v7/_drafts/architecture.mdx +0 -399
  246. package/docs/v7/_drafts/auto-cache-key.mdx +0 -167
  247. package/docs/v7/_drafts/awesome-logs-quick-ref.mdx +0 -100
  248. package/docs/v7/_drafts/best-practices.mdx +0 -486
  249. package/docs/v7/_drafts/caching-ai.mdx +0 -215
  250. package/docs/v7/_drafts/caching-selectors.mdx +0 -424
  251. package/docs/v7/_drafts/caching.mdx +0 -366
  252. package/docs/v7/_drafts/cli-to-sdk-migration.mdx +0 -425
  253. package/docs/v7/_drafts/commands/assert.mdx +0 -45
  254. package/docs/v7/_drafts/commands/exec.mdx +0 -282
  255. package/docs/v7/_drafts/commands/focus-application.mdx +0 -44
  256. package/docs/v7/_drafts/commands/hover-image.mdx +0 -69
  257. package/docs/v7/_drafts/commands/hover-text.mdx +0 -47
  258. package/docs/v7/_drafts/commands/if.mdx +0 -53
  259. package/docs/v7/_drafts/commands/match-image.mdx +0 -67
  260. package/docs/v7/_drafts/commands/press-keys.mdx +0 -87
  261. package/docs/v7/_drafts/commands/remember.mdx +0 -49
  262. package/docs/v7/_drafts/commands/run.mdx +0 -44
  263. package/docs/v7/_drafts/commands/scroll-until-image.mdx +0 -66
  264. package/docs/v7/_drafts/commands/scroll-until-text.mdx +0 -60
  265. package/docs/v7/_drafts/commands/scroll.mdx +0 -69
  266. package/docs/v7/_drafts/commands/type.mdx +0 -45
  267. package/docs/v7/_drafts/commands/wait-for-image.mdx +0 -54
  268. package/docs/v7/_drafts/commands/wait-for-text.mdx +0 -48
  269. package/docs/v7/_drafts/commands/wait.mdx +0 -45
  270. package/docs/v7/_drafts/configuration.mdx +0 -378
  271. package/docs/v7/_drafts/contributing.mdx +0 -174
  272. package/docs/v7/_drafts/core.mdx +0 -458
  273. package/docs/v7/_drafts/dashcam-title-feature.mdx +0 -89
  274. package/docs/v7/_drafts/debugging.mdx +0 -349
  275. package/docs/v7/_drafts/error-handling.mdx +0 -501
  276. package/docs/v7/_drafts/faq.mdx +0 -393
  277. package/docs/v7/_drafts/hooks.mdx +0 -360
  278. package/docs/v7/_drafts/init-command.mdx +0 -95
  279. package/docs/v7/_drafts/installation.mdx +0 -420
  280. package/docs/v7/_drafts/migration.mdx +0 -562
  281. package/docs/v7/_drafts/observable.mdx +0 -604
  282. package/docs/v7/_drafts/playwright.mdx +0 -342
  283. package/docs/v7/_drafts/plugin-migration.mdx +0 -220
  284. package/docs/v7/_drafts/powerful.mdx +0 -419
  285. package/docs/v7/_drafts/presets.mdx +0 -210
  286. package/docs/v7/_drafts/progressive-disclosure.mdx +0 -230
  287. package/docs/v7/_drafts/prompt-cache.mdx +0 -200
  288. package/docs/v7/_drafts/provision.mdx +0 -390
  289. package/docs/v7/_drafts/quick-start-test-recording.mdx +0 -214
  290. package/docs/v7/_drafts/readme.mdx +0 -135
  291. package/docs/v7/_drafts/reports.mdx +0 -414
  292. package/docs/v7/_drafts/scalable.mdx +0 -754
  293. package/docs/v7/_drafts/screenshot.mdx +0 -155
  294. package/docs/v7/_drafts/sdk-awesome-logs.mdx +0 -468
  295. package/docs/v7/_drafts/sdk-browser-rendering.mdx +0 -167
  296. package/docs/v7/_drafts/sdk-migration.mdx +0 -474
  297. package/docs/v7/_drafts/sdk-v7-complete.mdx +0 -345
  298. package/docs/v7/_drafts/self-hosting.mdx +0 -369
  299. package/docs/v7/_drafts/test-recording.mdx +0 -382
  300. package/docs/v7/_drafts/troubleshooting.mdx +0 -526
  301. package/docs/v7/_drafts/vitest-plugin.mdx +0 -477
  302. package/docs/v7/_drafts/vitest.mdx +0 -535
  303. package/docs/v7/_drafts/writing-tests.mdx +0 -25
  304. package/docs/v7/examples.mdx +0 -5
  305. package/eslint.config.js +0 -67
  306. package/examples/ai.test.mjs +0 -30
  307. package/examples/assert.test.mjs +0 -46
  308. package/examples/captcha-api.test.mjs +0 -50
  309. package/examples/chrome-extension.test.mjs +0 -94
  310. package/examples/drag-and-drop.test.mjs +0 -58
  311. package/examples/element-not-found.test.mjs +0 -26
  312. package/examples/exec-output.test.mjs +0 -59
  313. package/examples/exec-pwsh.test.mjs +0 -57
  314. package/examples/focus-window.test.mjs +0 -36
  315. package/examples/formatted-logging.test.mjs +0 -26
  316. package/examples/hover-image.test.mjs +0 -52
  317. package/examples/hover-text-with-description.test.mjs +0 -56
  318. package/examples/hover-text.test.mjs +0 -27
  319. package/examples/installer.test.mjs +0 -49
  320. package/examples/launch-vscode-linux.test.mjs +0 -54
  321. package/examples/match-image.test.mjs +0 -54
  322. package/examples/no-provision.test.mjs +0 -23
  323. package/examples/press-keys.test.mjs +0 -50
  324. package/examples/prompt.test.mjs +0 -33
  325. package/examples/scroll-keyboard.test.mjs +0 -37
  326. package/examples/scroll-until-image.test.mjs +0 -39
  327. package/examples/scroll-until-text.test.mjs +0 -67
  328. package/examples/scroll.test.mjs +0 -41
  329. package/examples/type.test.mjs +0 -45
  330. package/examples/windows-installer.test.mjs +0 -53
  331. package/interfaces/cli/commands/edit.js +0 -3
  332. package/interfaces/cli/commands/generate.js +0 -3
  333. package/interfaces/cli/commands/run.js +0 -3
  334. package/interfaces/cli/utils/factory.js +0 -71
  335. package/jsconfig.json +0 -26
  336. package/manual/test-init-command.js +0 -223
  337. package/sdk-log-formatter.js +0 -930
  338. package/setup/aws/cloudformation.yaml +0 -470
  339. package/setup/aws/spawn-runner.sh +0 -190
  340. package/test/api-resilience.test.mjs +0 -0
  341. package/test/captcha-solver.test.mjs +0 -70
  342. package/test/chrome-remote-debugging.test.mjs +0 -66
  343. package/test/manual/debug-locate-response.js +0 -82
  344. package/test/manual/reconnect-provision.test.mjs +0 -49
  345. package/test/manual/test-console-logs.test.mjs +0 -42
  346. package/test/manual/test-find-api.js +0 -73
  347. package/test/manual/test-init.sh +0 -54
  348. package/test/manual/test-prompt-cache.js +0 -96
  349. package/test/manual/test-provision-auth.mjs +0 -22
  350. package/test/manual/test-sandbox-render.js +0 -28
  351. package/test/manual/test-sdk-methods.js +0 -15
  352. package/test/manual/test-sdk-refactor.js +0 -53
  353. package/test/manual/test-stack-trace.mjs +0 -57
  354. package/test/manual/verify-element-api.js +0 -89
  355. package/test/manual/verify-types.js +0 -0
  356. package/test/manual-unawaited-promise.test.mjs +0 -31
  357. package/testdriver-plugin/skills/actions/SKILL.md +0 -93
  358. package/testdriver-plugin/skills/assertions/SKILL.md +0 -77
  359. package/testdriver-plugin/skills/caching/SKILL.md +0 -66
  360. package/testdriver-plugin/skills/creating-tests/SKILL.md +0 -104
  361. package/testdriver-plugin/skills/finding-elements/SKILL.md +0 -77
  362. package/testdriver-plugin/skills/github-actions/SKILL.md +0 -100
  363. package/testdriver-plugin/skills/running-tests/SKILL.md +0 -77
  364. package/testdriver-plugin/skills/secrets/SKILL.md +0 -87
  365. package/testdriver-plugin/skills/self-hosting/SKILL.md +0 -89
  366. package/testdriver-plugin/skills/setup/SKILL.md +0 -76
  367. package/testdriver-plugin/skills/variables/SKILL.md +0 -88
  368. package/testdriver-plugin/skills/waiting/SKILL.md +0 -72
  369. package/vitest.config.mjs +0 -29
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Session state management for TestDriver MCP Server
3
+ * Tracks sandbox sessions for MCP server
4
+ */
5
+ export interface SessionState {
6
+ sessionId: string;
7
+ sandboxId: string | null;
8
+ status: "initializing" | "active" | "expired" | "error";
9
+ os: "linux" | "windows";
10
+ resolution: string;
11
+ createdAt: number;
12
+ expiresAt: number;
13
+ keepAlive: number;
14
+ testFile: string | null;
15
+ lastScreenshot: string | null;
16
+ errorMessage?: string;
17
+ }
18
+ /**
19
+ * Session Manager - handles session state for MCP server
20
+ */
21
+ export declare class SessionManager {
22
+ private sessions;
23
+ private currentSessionId;
24
+ /**
25
+ * Create a new session
26
+ */
27
+ createSession(options: {
28
+ sandboxId?: string;
29
+ os?: "linux" | "windows";
30
+ resolution?: string;
31
+ keepAlive?: number;
32
+ testFile?: string;
33
+ }): SessionState;
34
+ /**
35
+ * Get the current active session
36
+ */
37
+ getCurrentSession(): SessionState | null;
38
+ /**
39
+ * Get a session by ID
40
+ */
41
+ getSession(sessionId: string): SessionState | null;
42
+ /**
43
+ * Update session state
44
+ */
45
+ updateSession(sessionId: string, updates: Partial<SessionState>): SessionState | null;
46
+ /**
47
+ * Mark session as active with sandbox ID
48
+ */
49
+ activateSession(sessionId: string, sandboxId: string): SessionState | null;
50
+ /**
51
+ * Extend session expiry time by adding additional milliseconds
52
+ */
53
+ extendSession(sessionId: string, additionalMs: number): SessionState | null;
54
+ /**
55
+ * Refresh session expiry to reset the keepAlive timer from now
56
+ * Called on each command to keep session alive during active use
57
+ */
58
+ refreshSession(sessionId: string): SessionState | null;
59
+ /**
60
+ * Check if session is still valid
61
+ */
62
+ isSessionValid(sessionId: string): boolean;
63
+ /**
64
+ * Get time remaining until session expires
65
+ */
66
+ getTimeRemaining(sessionId: string): number;
67
+ /**
68
+ * Mark session as expired/ended
69
+ */
70
+ endSession(sessionId: string): void;
71
+ /**
72
+ * Delete a session
73
+ */
74
+ deleteSession(sessionId: string): boolean;
75
+ /**
76
+ * Get session summary for status reporting
77
+ */
78
+ getSessionSummary(sessionId: string): {
79
+ sessionId: string;
80
+ status: string;
81
+ sandboxId: string | null;
82
+ timeRemaining: number;
83
+ } | null;
84
+ }
85
+ export declare const sessionManager: SessionManager;
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Session state management for TestDriver MCP Server
3
+ * Tracks sandbox sessions for MCP server
4
+ */
5
+ // Generate unique session ID
6
+ function generateSessionId() {
7
+ return `td-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
8
+ }
9
+ /**
10
+ * Session Manager - handles session state for MCP server
11
+ */
12
+ export class SessionManager {
13
+ sessions = new Map();
14
+ currentSessionId = null;
15
+ /**
16
+ * Create a new session
17
+ */
18
+ createSession(options) {
19
+ const sessionId = generateSessionId();
20
+ const keepAlive = options.keepAlive ?? 300000; // Default 5 minutes
21
+ const session = {
22
+ sessionId,
23
+ sandboxId: options.sandboxId ?? null,
24
+ status: "initializing",
25
+ os: options.os ?? "linux",
26
+ resolution: options.resolution ?? "1366x768",
27
+ createdAt: Date.now(),
28
+ expiresAt: Date.now() + keepAlive,
29
+ keepAlive,
30
+ testFile: options.testFile ?? null,
31
+ lastScreenshot: null,
32
+ };
33
+ this.sessions.set(sessionId, session);
34
+ this.currentSessionId = sessionId;
35
+ return session;
36
+ }
37
+ /**
38
+ * Get the current active session
39
+ */
40
+ getCurrentSession() {
41
+ if (!this.currentSessionId)
42
+ return null;
43
+ return this.sessions.get(this.currentSessionId) ?? null;
44
+ }
45
+ /**
46
+ * Get a session by ID
47
+ */
48
+ getSession(sessionId) {
49
+ return this.sessions.get(sessionId) ?? null;
50
+ }
51
+ /**
52
+ * Update session state
53
+ */
54
+ updateSession(sessionId, updates) {
55
+ const session = this.sessions.get(sessionId);
56
+ if (!session)
57
+ return null;
58
+ const updated = { ...session, ...updates };
59
+ this.sessions.set(sessionId, updated);
60
+ return updated;
61
+ }
62
+ /**
63
+ * Mark session as active with sandbox ID
64
+ */
65
+ activateSession(sessionId, sandboxId) {
66
+ return this.updateSession(sessionId, {
67
+ sandboxId,
68
+ status: "active",
69
+ });
70
+ }
71
+ /**
72
+ * Extend session expiry time by adding additional milliseconds
73
+ */
74
+ extendSession(sessionId, additionalMs) {
75
+ const session = this.sessions.get(sessionId);
76
+ if (!session)
77
+ return null;
78
+ return this.updateSession(sessionId, {
79
+ expiresAt: session.expiresAt + additionalMs,
80
+ });
81
+ }
82
+ /**
83
+ * Refresh session expiry to reset the keepAlive timer from now
84
+ * Called on each command to keep session alive during active use
85
+ */
86
+ refreshSession(sessionId) {
87
+ const session = this.sessions.get(sessionId);
88
+ if (!session)
89
+ return null;
90
+ return this.updateSession(sessionId, {
91
+ expiresAt: Date.now() + session.keepAlive,
92
+ });
93
+ }
94
+ /**
95
+ * Check if session is still valid
96
+ */
97
+ isSessionValid(sessionId) {
98
+ const session = this.sessions.get(sessionId);
99
+ if (!session)
100
+ return false;
101
+ if (session.status === "expired" || session.status === "error")
102
+ return false;
103
+ if (Date.now() > session.expiresAt) {
104
+ this.updateSession(sessionId, { status: "expired" });
105
+ return false;
106
+ }
107
+ return true;
108
+ }
109
+ /**
110
+ * Get time remaining until session expires
111
+ */
112
+ getTimeRemaining(sessionId) {
113
+ const session = this.sessions.get(sessionId);
114
+ if (!session)
115
+ return 0;
116
+ return Math.max(0, session.expiresAt - Date.now());
117
+ }
118
+ /**
119
+ * Mark session as expired/ended
120
+ */
121
+ endSession(sessionId) {
122
+ this.updateSession(sessionId, { status: "expired" });
123
+ if (this.currentSessionId === sessionId) {
124
+ this.currentSessionId = null;
125
+ }
126
+ }
127
+ /**
128
+ * Delete a session
129
+ */
130
+ deleteSession(sessionId) {
131
+ if (this.currentSessionId === sessionId) {
132
+ this.currentSessionId = null;
133
+ }
134
+ return this.sessions.delete(sessionId);
135
+ }
136
+ /**
137
+ * Get session summary for status reporting
138
+ */
139
+ getSessionSummary(sessionId) {
140
+ const session = this.sessions.get(sessionId);
141
+ if (!session)
142
+ return null;
143
+ return {
144
+ sessionId: session.sessionId,
145
+ status: session.status,
146
+ sandboxId: session.sandboxId,
147
+ timeRemaining: this.getTimeRemaining(sessionId),
148
+ };
149
+ }
150
+ }
151
+ // Singleton instance
152
+ export const sessionManager = new SessionManager();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "testdriverai",
3
- "version": "7.2.64",
3
+ "version": "7.2.69",
4
4
  "description": "Next generation autonomous AI agent for end-to-end testing of web & desktop",
5
5
  "main": "sdk.js",
6
6
  "types": "sdk.d.ts",
@@ -30,16 +30,18 @@
30
30
  "./presets": "./lib/presets/index.mjs"
31
31
  },
32
32
  "bin": {
33
- "testdriverai": "bin/testdriverai.js"
33
+ "testdriverai": "bin/testdriverai.js",
34
+ "testdriverai-mcp": "mcp-server/dist/server.js"
34
35
  },
35
36
  "scripts": {
36
37
  "start": "node bin/testdriverai.js",
37
38
  "dev": "DEV=true node bin/testdriverai.js",
38
39
  "debug": "DEV=true VERBOSE=true node bin/testdriverai.js",
39
- "docs": "cd docs && npx mint@latest dev",
40
+ "docs": "npm run docs:skills && cd docs && npx mint@latest dev",
40
41
  "docs:dev": "cd docs && npx mint dev",
41
- "docs:build": "cd docs && npx mint@latest build",
42
+ "docs:build": "npm run docs:skills && cd docs && npx mint@latest build",
42
43
  "docs:links": "node docs/_scripts/link-replacer.js",
44
+ "docs:skills": "node docs/_scripts/generate-skills.js",
43
45
  "bundle": "node build.mjs",
44
46
  "test": "mocha test/*",
45
47
  "test:sdk": "vitest run",
@@ -58,11 +60,15 @@
58
60
  "test-assert": "node index.js run --path=testdriver/acceptance/assert.yaml",
59
61
  "generate-report": "junit-viewer --results=out.xml --save=report.html",
60
62
  "serve-report": "npx http-server . -p 8080 -o report.html",
61
- "report": "npm run generate-report && npm run serve-report"
63
+ "report": "npm run generate-report && npm run serve-report",
64
+ "generate:skills": "node scripts/generate-skills.js",
65
+ "prepack": "cd mcp-server && npm ci && npm run build"
62
66
  },
63
67
  "author": "",
64
68
  "license": "ISC",
65
69
  "dependencies": {
70
+ "@modelcontextprotocol/ext-apps": "^1.0.0",
71
+ "@modelcontextprotocol/sdk": "^1.24.0",
66
72
  "@npmcli/redact": "^3.2.2",
67
73
  "@oclif/core": "^4.5.0",
68
74
  "@oclif/plugin-commands": "^4.1.28",
@@ -96,7 +102,8 @@
96
102
  "tmp": "^0.2.3",
97
103
  "winston": "^3.13.0",
98
104
  "winston-transport": "^4.9.0",
99
- "ws": "^8.18.1"
105
+ "ws": "^8.18.1",
106
+ "zod": "^3.24.0"
100
107
  },
101
108
  "overrides": {
102
109
  "glob": "^11.0.1",
@@ -124,7 +131,8 @@
124
131
  "mocha": "^10.8.2",
125
132
  "node-addon-api": "^8.0.0",
126
133
  "prettier": "3.3.3",
127
- "vitest": "^4.0.16"
134
+ "testdriverai": "^7.2.60",
135
+ "vitest": "^4.0.18"
128
136
  },
129
137
  "optionalDependencies": {
130
138
  "@esbuild/linux-x64": "^0.21.5"
@@ -137,6 +145,19 @@
137
145
  "@oclif/plugin-*"
138
146
  ],
139
147
  "topicSeparator": " ",
140
- "default": "edit"
141
- }
148
+ "default": "init"
149
+ },
150
+ "files": [
151
+ "agent/",
152
+ "bin/",
153
+ "ai/skills/",
154
+ "ai/agents/",
155
+ "interfaces/",
156
+ "lib/",
157
+ "mcp-server/dist/",
158
+ "sdk.js",
159
+ "sdk.d.ts",
160
+ "index.js",
161
+ "schema.json"
162
+ ]
142
163
  }
package/sdk.d.ts CHANGED
@@ -14,6 +14,13 @@ export type ScrollDirection = "up" | "down" | "left" | "right";
14
14
  export type ScrollMethod = "keyboard" | "mouse";
15
15
  export type TextMatchMethod = "ai" | "turbo";
16
16
  export type ExecLanguage = "js" | "pwsh" | "sh";
17
+ /**
18
+ * Preview mode for live test visualization
19
+ * - "browser": Opens debugger in default browser (default)
20
+ * - "ide": Opens preview in IDE panel (VSCode, Cursor, etc.)
21
+ * - "none": Headless mode, no visual preview
22
+ */
23
+ export type PreviewMode = "browser" | "ide" | "none";
17
24
  export type KeyboardKey =
18
25
  | "\t"
19
26
  | "\n"
@@ -232,7 +239,17 @@ export interface TestDriverOptions {
232
239
  };
233
240
  /** Force creation of a new sandbox (default: true) */
234
241
  newSandbox?: boolean;
235
- /** Run in headless mode (default: false) */
242
+ /**
243
+ * Preview mode for live test visualization (default: "browser")
244
+ * - "browser": Opens debugger in default browser
245
+ * - "ide": Opens preview in IDE panel (VSCode, Cursor, etc.)
246
+ * - "none": Headless mode, no visual preview
247
+ */
248
+ preview?: PreviewMode;
249
+ /**
250
+ * @deprecated Use `preview: "none"` instead. Run in headless mode (default: false)
251
+ * For backward compatibility: headless: true maps to preview: "none"
252
+ */
236
253
  headless?: boolean;
237
254
  /** Direct IP address to connect to a running sandbox instance */
238
255
  ip?: string;
@@ -280,7 +297,17 @@ export interface ConnectOptions {
280
297
  sandboxInstance?: string;
281
298
  /** Operating system for the sandbox (default: 'linux') */
282
299
  os?: "windows" | "linux";
283
- /** Run in headless mode (default: false) */
300
+ /**
301
+ * Preview mode for live test visualization (default: "browser")
302
+ * - "browser": Opens debugger in default browser
303
+ * - "ide": Opens preview in IDE panel (VSCode, Cursor, etc.)
304
+ * - "none": Headless mode, no visual preview
305
+ */
306
+ preview?: PreviewMode;
307
+ /**
308
+ * @deprecated Use `preview: "none"` instead. Run in headless mode (default: false)
309
+ * For backward compatibility: headless: true maps to preview: "none"
310
+ */
284
311
  headless?: boolean;
285
312
  /** Reuse recent connection if available (default: true) */
286
313
  reuseConnection?: boolean;
package/sdk.js CHANGED
@@ -3,6 +3,7 @@ const path = require("path");
3
3
  const os = require("os");
4
4
  const crypto = require("crypto");
5
5
  const { formatter } = require("./sdk-log-formatter");
6
+ const logger = require("./agent/lib/logger");
6
7
 
7
8
  /**
8
9
  * Get the file path of the caller (the file that called TestDriver)
package/.env.example DELETED
@@ -1,4 +0,0 @@
1
- TD_API_KEY=
2
- TD_API_ROOT=
3
-
4
- TWOCAPTCHA_API_KEY=
@@ -1,45 +0,0 @@
1
- name: Scheduled Acceptance Tests (Linux)
2
-
3
- permissions:
4
- id-token: write
5
- contents: read
6
-
7
- on:
8
- schedule:
9
- # Every 6 hours
10
- - cron: "0 */6 * * *"
11
- workflow_dispatch: # Allow manual trigger
12
-
13
- jobs:
14
- test-linux:
15
- runs-on: ubuntu-latest
16
-
17
- steps:
18
- - uses: actions/checkout@v4
19
-
20
- - name: Setup Node.js
21
- uses: actions/setup-node@v4
22
- with:
23
- node-version: "20"
24
- cache: "npm"
25
-
26
- - name: Install dependencies
27
- run: npm ci
28
-
29
- - name: Install Sentry CLI
30
- run: npm install -g @sentry/cli
31
-
32
- - name: Run Linux tests with Sentry Cron monitoring
33
- run: |
34
- sentry-cli monitors run testdriver-linux-acceptance -- npx vitest run examples/*.test.mjs
35
- env:
36
- SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
37
- TD_API_KEY: ${{ secrets.TD_API_KEY }}
38
- TD_OS: linux
39
- TWOCAPTCHA_API_KEY: ${{ secrets.TWOCAPTCHA_API_KEY }}
40
-
41
- - name: Upload test results to Sentry Prevent
42
- if: ${{ !cancelled() }}
43
- uses: getsentry/prevent-action@v0
44
- with:
45
- token: ${{ secrets.SENTRY_PREVENT_TOKEN }}
@@ -1,54 +0,0 @@
1
- name: Scheduled Acceptance Tests (Windows)
2
-
3
- permissions:
4
- id-token: write
5
- contents: read
6
-
7
- on:
8
- schedule:
9
- # Every day at midnight UTC
10
- - cron: "0 0 * * *"
11
- workflow_dispatch: # Allow manual trigger
12
-
13
- jobs:
14
- test-windows:
15
- uses: ./.github/workflows/windows-self-hosted.yaml
16
- secrets:
17
- TD_API_KEY: ${{ secrets.TD_API_KEY }}
18
- TWOCAPTCHA_API_KEY: ${{ secrets.TWOCAPTCHA_API_KEY }}
19
- TD_WEBSITE: ${{ secrets.TD_WEBSITE }}
20
- AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
21
- AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
22
-
23
- sentry-and-publish:
24
- needs: test-windows
25
- runs-on: ubuntu-latest
26
- if: always()
27
-
28
- steps:
29
- - name: Install Sentry CLI
30
- run: npm install -g @sentry/cli
31
-
32
- - name: Report to Sentry Cron
33
- run: |
34
- sentry-cli monitors run testdriver-windows-acceptance -- echo "Windows tests completed"
35
- env:
36
- SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
37
-
38
- - name: Download test results
39
- uses: actions/download-artifact@v4
40
- with:
41
- name: test-results-windows
42
-
43
- - name: Upload test results to Sentry Prevent
44
- if: ${{ !cancelled() }}
45
- uses: getsentry/prevent-action@v0
46
- with:
47
- token: ${{ secrets.SENTRY_PREVENT_TOKEN }}
48
-
49
- - name: Publish Test Results
50
- uses: EnricoMi/publish-unit-test-result-action@v2
51
- if: always()
52
- with:
53
- files: test-report.junit.xml
54
- check_name: Test Results (Windows Scheduled)
@@ -1,87 +0,0 @@
1
- name: Acceptance Tests
2
- permissions:
3
- id-token: write
4
- contents: write
5
- pull-requests: write
6
- checks: write
7
- on:
8
- pull_request:
9
- branches: [main]
10
-
11
- concurrency:
12
- group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
13
- cancel-in-progress: true
14
-
15
- jobs:
16
- test-linux:
17
- runs-on: ubuntu-latest
18
-
19
- steps:
20
- - uses: actions/checkout@v4
21
-
22
- - name: Setup Node.js
23
- uses: actions/setup-node@v4
24
- with:
25
- node-version: "20"
26
- cache: "npm"
27
-
28
- - name: Install dependencies
29
- run: npm ci
30
-
31
- - name: Run Linux tests
32
- run: npx vitest run examples/*.test.mjs
33
- env:
34
- TD_API_KEY: ${{ secrets.TD_API_KEY }}
35
- TWOCAPTCHA_API_KEY: ${{ secrets.TWOCAPTCHA_API_KEY }}
36
- TD_OS: linux
37
-
38
- - name: Upload test results to Sentry Prevent
39
- if: ${{ !cancelled() }}
40
- uses: getsentry/prevent-action@v0
41
- with:
42
- token: ${{ secrets.SENTRY_PREVENT_TOKEN }}
43
-
44
- - name: Publish Test Results
45
- uses: EnricoMi/publish-unit-test-result-action@v2
46
- if: always()
47
- with:
48
- files: test-report.junit.xml
49
- comment_mode: always
50
- check_name: Test Results (Linux)
51
-
52
- test-windows:
53
- if: contains(github.event.pull_request.labels.*.name, 'test-windows')
54
- uses: ./.github/workflows/windows-self-hosted.yaml
55
- with:
56
- test_pattern: "examples/*.test.mjs"
57
- secrets:
58
- TD_API_KEY: ${{ secrets.TD_API_KEY }}
59
- TWOCAPTCHA_API_KEY: ${{ secrets.TWOCAPTCHA_API_KEY }}
60
- TD_WEBSITE: ${{ secrets.TD_WEBSITE }}
61
- AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
62
- AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
63
-
64
- publish-windows-results:
65
- needs: test-windows
66
- runs-on: ubuntu-latest
67
- if: always() && contains(github.event.pull_request.labels.*.name, 'test-windows')
68
-
69
- steps:
70
- - name: Download test results
71
- uses: actions/download-artifact@v4
72
- with:
73
- name: test-results-windows
74
-
75
- - name: Upload test results to Sentry Prevent
76
- if: ${{ !cancelled() }}
77
- uses: getsentry/prevent-action@v0
78
- with:
79
- token: ${{ secrets.SENTRY_PREVENT_TOKEN }}
80
-
81
- - name: Publish Test Results
82
- uses: EnricoMi/publish-unit-test-result-action@v2
83
- if: always()
84
- with:
85
- files: test-report.junit.xml
86
- comment_mode: always
87
- check_name: Test Results (Windows)
@@ -1,68 +0,0 @@
1
- name: Publish
2
- permissions:
3
- contents: write
4
- id-token: write # Required for OIDC
5
- on:
6
- push:
7
- branches: [main]
8
-
9
- jobs:
10
- publish:
11
- runs-on: ubuntu-latest
12
-
13
- steps:
14
- - uses: actions/checkout@v4
15
- with:
16
- fetch-depth: 0
17
- token: ${{ secrets.GITHUB_TOKEN }}
18
-
19
- - name: Setup Node.js
20
- uses: actions/setup-node@v4
21
- with:
22
- node-version: "20"
23
- registry-url: "https://registry.npmjs.org/"
24
-
25
- - name: Configure Git
26
- run: |
27
- git config user.name "github-actions[bot]"
28
- git config user.email "github-actions[bot]@users.noreply.github.com"
29
-
30
- - name: Install dependencies
31
- run: npm ci
32
-
33
- - name: Bump version (patch)
34
- run: npm version patch --no-git-tag-version
35
-
36
- - name: Generate Changelog
37
- run: |
38
- npx conventional-changelog-cli -p angular -i CHANGELOG.md -s
39
- git add CHANGELOG.md
40
-
41
- - name: Commit and push version bump
42
- run: |
43
- git add package.json package-lock.json
44
- VERSION=$(node -p "require('./package.json').version")
45
- git commit -m "chore(release): ${VERSION}"
46
- git tag "v${VERSION}"
47
- git push origin main
48
- git push origin "v${VERSION}"
49
- echo "VERSION=${VERSION}" >> $GITHUB_ENV
50
-
51
- - name: Create GitHub Release
52
- uses: softprops/action-gh-release@v1
53
- with:
54
- tag_name: v${{ env.VERSION }}
55
- generate_release_notes: true
56
- prerelease: false
57
-
58
- - name: Debug NPM Token
59
- run: |
60
- echo "NPM_TOKEN is set: ${{ secrets.NPM_TOKEN != '' }}"
61
- echo "NPM_TOKEN first 4 chars: ${NPM_TOKEN:0:4}..."
62
- env:
63
- NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
64
-
65
- - name: Publish to npm
66
- run: npm publish --tag beta
67
- env:
68
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}