testeiya 0.2.0 → 0.3.1-0.1

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 (402) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +304 -132
  3. package/dist/prompt/context.js +79 -0
  4. package/dist/prompt/context.js.map +1 -0
  5. package/dist/prompt/index.js +60 -0
  6. package/dist/prompt/index.js.map +1 -0
  7. package/dist/prompt/print.js +30 -0
  8. package/dist/prompt/print.js.map +1 -0
  9. package/dist/prompt/project-info.js +2 -0
  10. package/dist/prompt/project-info.js.map +1 -0
  11. package/{src/prompt/system-prompt.ts → dist/prompt/system-prompt.js} +38 -25
  12. package/dist/prompt/system-prompt.js.map +1 -0
  13. package/dist/prompt/testomatio.js +264 -0
  14. package/dist/prompt/testomatio.js.map +1 -0
  15. package/dist/prompt/tools.js +70 -0
  16. package/dist/prompt/tools.js.map +1 -0
  17. package/dist/prompt/vocab.js +8 -0
  18. package/dist/prompt/vocab.js.map +1 -0
  19. package/dist/src/args.js +207 -0
  20. package/dist/src/args.js.map +1 -0
  21. package/dist/src/cli.js +114 -0
  22. package/dist/src/cli.js.map +1 -0
  23. package/dist/src/doctor.js +171 -0
  24. package/dist/src/doctor.js.map +1 -0
  25. package/dist/src/env.js +93 -0
  26. package/dist/src/env.js.map +1 -0
  27. package/dist/src/mcp-extension.js +9 -0
  28. package/dist/src/mcp-extension.js.map +1 -0
  29. package/dist/src/mcp.js +139 -0
  30. package/dist/src/mcp.js.map +1 -0
  31. package/dist/src/model.js +71 -0
  32. package/dist/src/model.js.map +1 -0
  33. package/dist/src/models.js +38 -0
  34. package/dist/src/models.js.map +1 -0
  35. package/dist/src/output.js +194 -0
  36. package/dist/src/output.js.map +1 -0
  37. package/dist/src/result.js +41 -0
  38. package/dist/src/result.js.map +1 -0
  39. package/dist/src/run.js +295 -0
  40. package/dist/src/run.js.map +1 -0
  41. package/dist/src/session.js +98 -0
  42. package/dist/src/session.js.map +1 -0
  43. package/dist/src/sessions.js +72 -0
  44. package/dist/src/sessions.js.map +1 -0
  45. package/dist/src/skills.js +88 -0
  46. package/dist/src/skills.js.map +1 -0
  47. package/dist/vendor/mcp.js +14801 -0
  48. package/mcp-tools.json +2967 -0
  49. package/package.json +34 -42
  50. package/prompt/context.ts +101 -0
  51. package/prompt/index.ts +102 -0
  52. package/prompt/print.ts +32 -0
  53. package/prompt/project-info.ts +30 -0
  54. package/prompt/system-prompt.ts +187 -0
  55. package/{src/prompt → prompt}/testomatio.ts +120 -9
  56. package/prompt/tools.ts +72 -0
  57. package/prompt/vocab.ts +7 -0
  58. package/skills/codeceptjs/ci-fix-tests/SKILL.md +7 -8
  59. package/skills/codeceptjs/codeceptjs-auth/SKILL.md +47 -64
  60. package/skills/codeceptjs/codeceptjs-exploration/SKILL.md +56 -47
  61. package/skills/codeceptjs/codeceptjs-fundamentals/SKILL.md +144 -106
  62. package/skills/codeceptjs/codeceptjs-run-analysis/SKILL.md +50 -57
  63. package/skills/codeceptjs/debugging-codeceptjs-tests/SKILL.md +88 -196
  64. package/skills/codeceptjs/migrate-codeceptjs-4/SKILL.md +4 -5
  65. package/skills/codeceptjs/migrate-cypress-to-codeceptjs/SKILL.md +25 -36
  66. package/skills/codeceptjs/migrate-protractor-to-codeceptjs/SKILL.md +23 -36
  67. package/skills/codeceptjs/migrate-selenium-java-to-codeceptjs/SKILL.md +23 -36
  68. package/skills/codeceptjs/migrate-testcafe-to-codeceptjs/SKILL.md +23 -35
  69. package/skills/codeceptjs/refactoring-codeceptjs-tests/SKILL.md +50 -53
  70. package/skills/codeceptjs/writing-codeceptjs-tests/SKILL.md +87 -191
  71. package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/SKILL.md +1 -1
  72. package/{skills.lock.json → skills/skills.lock.json} +43 -36
  73. package/skills/skills.yaml +34 -0
  74. package/skills/testomatio/explorbot/explorbot-fundamentals/SKILL.md +49 -61
  75. package/skills/testomatio/explorbot/explorbot-fundamentals/references/no-install.md +36 -0
  76. package/skills/testomatio/explorbot/explorbot-plan/SKILL.md +20 -7
  77. package/skills/testomatio/explorbot/explorbot-setup/SKILL.md +41 -289
  78. package/skills/testomatio/qa-process/qa-explain-behavior/SKILL.md +111 -0
  79. package/skills/testomatio/qa-process/qa-explain-behavior/references/answer-shapes.md +116 -0
  80. package/skills/testomatio/qa-process/qa-explain-behavior/references/examples.md +157 -0
  81. package/skills/testomatio/qa-process/qa-lead-strategy-advisor/SKILL.md +91 -0
  82. package/skills/testomatio/qa-process/qa-lead-strategy-advisor/references/output-format.md +71 -0
  83. package/skills/testomatio/qa-process/testing-workflow/SKILL.md +227 -0
  84. package/skills/testomatio/test-automation/qa-data-seeder/SKILL.md +83 -0
  85. package/skills/testomatio/test-automation/run-tests-with-testomatio-reporter/SKILL.md +5 -3
  86. package/skills/testomatio/test-automation/setup-change-aware-pr-testing/SKILL.md +190 -0
  87. package/skills/testomatio/test-automation/setup-ci-automation/SKILL.md +76 -0
  88. package/skills/testomatio/test-management/qa-split-testing-levels-pyramid/SKILL.md +55 -0
  89. package/skills/testomatio/test-management/qa-sprint-report-by-testomatio/SKILL.md +220 -0
  90. package/skills/testomatio/test-management/qa-sprint-report-by-testomatio/references/qa-sprint-report.md +126 -0
  91. package/skills/testomatio/test-management/qa-test-code-coverage/SKILL.md +1 -1
  92. package/skills/testomatio/test-management/qa-thinking/SKILL.md +25 -25
  93. package/skills/testomatio/test-management/testomatio-mcp/SKILL.md +14 -1
  94. package/skills/testomatio/test-management/testomatio-mcp/references/MCP_SETUP.md +8 -0
  95. package/models.catalog.json +0 -6963
  96. package/skills/playwright-best-practices-skill/LICENSE.md +0 -7
  97. package/skills/playwright-best-practices-skill/README.md +0 -147
  98. package/skills/testeiya/README.md +0 -29
  99. package/skills/testeiya/answer-formatting/SKILL.md +0 -30
  100. package/skills/testeiya/check-cucumber/SKILL.md +0 -200
  101. package/skills/testeiya/check-tests/SKILL.md +0 -260
  102. package/skills/testeiya/manual-run-assistant/SKILL.md +0 -61
  103. package/skills/testeiya/testomatio-docs/INDEX.md +0 -175
  104. package/skills/testeiya/testomatio-docs/SKILL.md +0 -102
  105. package/skills/testeiya/testomatio-docs/docs/advanced/ai-powered-features/ai-agents.md +0 -144
  106. package/skills/testeiya/testomatio-docs/docs/advanced/ai-powered-features/ai-powered-features.md +0 -531
  107. package/skills/testeiya/testomatio-docs/docs/advanced/ai-powered-features/ai-requirements.md +0 -437
  108. package/skills/testeiya/testomatio-docs/docs/advanced/api-access/index.md +0 -191
  109. package/skills/testeiya/testomatio-docs/docs/advanced/branches-folder/index.md +0 -277
  110. package/skills/testeiya/testomatio-docs/docs/advanced/bulk-edit-folder/bulk-edit-demos.mdx +0 -39
  111. package/skills/testeiya/testomatio-docs/docs/advanced/bulk-edit-folder/bulk-edit-on-suite-and-test-level.md +0 -122
  112. package/skills/testeiya/testomatio-docs/docs/advanced/bulk-edit-folder/what-is-bulk-edit.md +0 -170
  113. package/skills/testeiya/testomatio-docs/docs/advanced/jira-plugin/branches.md +0 -53
  114. package/skills/testeiya/testomatio-docs/docs/advanced/jira-plugin/index.mdx +0 -98
  115. package/skills/testeiya/testomatio-docs/docs/advanced/jira-plugin/jira-issue.md +0 -151
  116. package/skills/testeiya/testomatio-docs/docs/advanced/jira-plugin/runs-and-reports.md +0 -377
  117. package/skills/testeiya/testomatio-docs/docs/advanced/jira-plugin/work-in-jira.md +0 -267
  118. package/skills/testeiya/testomatio-docs/docs/advanced/living-doc/index.md +0 -138
  119. package/skills/testeiya/testomatio-docs/docs/advanced/milestones/index.md +0 -220
  120. package/skills/testeiya/testomatio-docs/docs/advanced/shortcuts/index.md +0 -48
  121. package/skills/testeiya/testomatio-docs/docs/advanced/tags-labels/labels-and-custom-fields.md +0 -201
  122. package/skills/testeiya/testomatio-docs/docs/advanced/tags-labels/tags-or-labels.md +0 -94
  123. package/skills/testeiya/testomatio-docs/docs/advanced/tags-labels/tags.md +0 -243
  124. package/skills/testeiya/testomatio-docs/docs/advanced/test-artifacts/index.md +0 -135
  125. package/skills/testeiya/testomatio-docs/docs/advanced/tql/index.md +0 -394
  126. package/skills/testeiya/testomatio-docs/docs/getting-started/index.md +0 -290
  127. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/azure.md +0 -96
  128. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/bamboo.md +0 -94
  129. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/bitbucket.md +0 -106
  130. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/circle.md +0 -115
  131. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/github.md +0 -120
  132. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/gitlab.md +0 -88
  133. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/index.mdx +0 -151
  134. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/jenkins.md +0 -121
  135. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/teamcity.md +0 -96
  136. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/azure.md +0 -31
  137. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/clickup.md +0 -54
  138. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/confluence.md +0 -34
  139. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/github.md +0 -31
  140. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/gitlab.md +0 -93
  141. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/index.md +0 -131
  142. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/jira.md +0 -164
  143. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/linear.md +0 -29
  144. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/shortcut.md +0 -67
  145. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/youtrack.md +0 -94
  146. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/azure-devops.md +0 -53
  147. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/email.md +0 -71
  148. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/jira.md +0 -52
  149. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/ms-teams.md +0 -60
  150. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/rules.md +0 -267
  151. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/slack.md +0 -82
  152. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/telegram.md +0 -73
  153. package/skills/testeiya/testomatio-docs/docs/integrations/scim-provisioning/index.mdx +0 -207
  154. package/skills/testeiya/testomatio-docs/docs/integrations/scim-provisioning/okta.md +0 -204
  155. package/skills/testeiya/testomatio-docs/docs/integrations/single-sign-on/azure.md +0 -95
  156. package/skills/testeiya/testomatio-docs/docs/integrations/single-sign-on/google.md +0 -75
  157. package/skills/testeiya/testomatio-docs/docs/integrations/single-sign-on/index.mdx +0 -33
  158. package/skills/testeiya/testomatio-docs/docs/integrations/single-sign-on/okta.md +0 -108
  159. package/skills/testeiya/testomatio-docs/docs/integrations/single-sign-on/saml.md +0 -66
  160. package/skills/testeiya/testomatio-docs/docs/legal/compliance/gdpr.md +0 -95
  161. package/skills/testeiya/testomatio-docs/docs/legal/compliance/index.mdx +0 -94
  162. package/skills/testeiya/testomatio-docs/docs/legal/compliance/privacy.md +0 -26
  163. package/skills/testeiya/testomatio-docs/docs/legal/compliance/terms.md +0 -32
  164. package/skills/testeiya/testomatio-docs/docs/legal/security/index.mdx +0 -242
  165. package/skills/testeiya/testomatio-docs/docs/legal/security/jira.md +0 -140
  166. package/skills/testeiya/testomatio-docs/docs/legal/security/subprocessors.md +0 -76
  167. package/skills/testeiya/testomatio-docs/docs/management/company/administration.md +0 -363
  168. package/skills/testeiya/testomatio-docs/docs/management/company/audit-log.md +0 -41
  169. package/skills/testeiya/testomatio-docs/docs/management/company/plan-features-comparison.md +0 -240
  170. package/skills/testeiya/testomatio-docs/docs/management/company/subscriptions.md +0 -326
  171. package/skills/testeiya/testomatio-docs/docs/management/company/trials.md +0 -75
  172. package/skills/testeiya/testomatio-docs/docs/management/company/users-and-permissions/accountant.md +0 -49
  173. package/skills/testeiya/testomatio-docs/docs/management/company/users-and-permissions/index.mdx +0 -285
  174. package/skills/testeiya/testomatio-docs/docs/management/company/users-and-permissions/read-only-user.md +0 -67
  175. package/skills/testeiya/testomatio-docs/docs/management/company/users-and-permissions/teams.md +0 -138
  176. package/skills/testeiya/testomatio-docs/docs/management/project/settings.md +0 -87
  177. package/skills/testeiya/testomatio-docs/docs/management/project/templates.md +0 -546
  178. package/skills/testeiya/testomatio-docs/docs/project/analytics/index.md +0 -326
  179. package/skills/testeiya/testomatio-docs/docs/project/import-export/export-tests/classical-tests-markdown-format.md +0 -386
  180. package/skills/testeiya/testomatio-docs/docs/project/import-export/export-tests/download-manual-tests-as-files.md +0 -378
  181. package/skills/testeiya/testomatio-docs/docs/project/import-export/export-tests/export-to-obsidian.md +0 -112
  182. package/skills/testeiya/testomatio-docs/docs/project/import-export/export-tests/export-to-spreadsheet.md +0 -127
  183. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/auto-import.md +0 -63
  184. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-Allure-TestOps.md +0 -49
  185. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-QTest.md +0 -41
  186. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-Qase.md +0 -39
  187. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-Zephyr.md +0 -37
  188. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-csv-xlsx.md +0 -117
  189. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-cucumber.md +0 -93
  190. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-qmetry.md +0 -44
  191. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-source-code.md +0 -117
  192. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-testcaselabs.md +0 -44
  193. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-testmo.md +0 -47
  194. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-testrail.md +0 -82
  195. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-xray.md +0 -55
  196. package/skills/testeiya/testomatio-docs/docs/project/plans/index.md +0 -334
  197. package/skills/testeiya/testomatio-docs/docs/project/pulse/index.md +0 -104
  198. package/skills/testeiya/testomatio-docs/docs/project/runs/archive-runs-and-groups.md +0 -176
  199. package/skills/testeiya/testomatio-docs/docs/project/runs/custom-statuses.md +0 -195
  200. package/skills/testeiya/testomatio-docs/docs/project/runs/environments.md +0 -203
  201. package/skills/testeiya/testomatio-docs/docs/project/runs/managing-runs.md +0 -455
  202. package/skills/testeiya/testomatio-docs/docs/project/runs/merge-strategies.md +0 -137
  203. package/skills/testeiya/testomatio-docs/docs/project/runs/reports.md +0 -329
  204. package/skills/testeiya/testomatio-docs/docs/project/runs/rungroups.md +0 -342
  205. package/skills/testeiya/testomatio-docs/docs/project/runs/running-automated-tests.md +0 -256
  206. package/skills/testeiya/testomatio-docs/docs/project/runs/running-manual-and-automated-tests.md +0 -331
  207. package/skills/testeiya/testomatio-docs/docs/project/runs/running-tests-manually.md +0 -633
  208. package/skills/testeiya/testomatio-docs/docs/project/runs/temporary-tests-notes.md +0 -223
  209. package/skills/testeiya/testomatio-docs/docs/project/steps-snippets/snippets.md +0 -68
  210. package/skills/testeiya/testomatio-docs/docs/project/steps-snippets/steps.md +0 -181
  211. package/skills/testeiya/testomatio-docs/docs/project/tests/bdd-test-case-editor.md +0 -98
  212. package/skills/testeiya/testomatio-docs/docs/project/tests/classical-test-case-editor.md +0 -354
  213. package/skills/testeiya/testomatio-docs/docs/project/tests/classical-vs-bdd.md +0 -169
  214. package/skills/testeiya/testomatio-docs/docs/project/tests/copy-and-move-your-tests.md +0 -156
  215. package/skills/testeiya/testomatio-docs/docs/project/tests/other-features-for-test-case-design.md +0 -412
  216. package/skills/testeiya/testomatio-docs/docs/project/tests/test-case-creation-and-editing.md +0 -527
  217. package/skills/testeiya/testomatio-docs/docs/support/index.md +0 -75
  218. package/skills/testeiya/testomatio-docs/docs/test-reporting/artifacts.md +0 -388
  219. package/skills/testeiya/testomatio-docs/docs/test-reporting/cli.md +0 -215
  220. package/skills/testeiya/testomatio-docs/docs/test-reporting/configuration.md +0 -247
  221. package/skills/testeiya/testomatio-docs/docs/test-reporting/frameworks.md +0 -490
  222. package/skills/testeiya/testomatio-docs/docs/test-reporting/functions.md +0 -144
  223. package/skills/testeiya/testomatio-docs/docs/test-reporting/index.mdx +0 -48
  224. package/skills/testeiya/testomatio-docs/docs/test-reporting/junit.md +0 -248
  225. package/skills/testeiya/testomatio-docs/docs/test-reporting/logger.md +0 -138
  226. package/skills/testeiya/testomatio-docs/docs/test-reporting/php.md +0 -77
  227. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/bitbucket.md +0 -72
  228. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/csv.md +0 -23
  229. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/debug.md +0 -18
  230. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/github.md +0 -63
  231. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/gitlab.md +0 -29
  232. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/html.md +0 -80
  233. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/index.mdx +0 -57
  234. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/testomatio.md +0 -331
  235. package/skills/testeiya/testomatio-docs/docs/test-reporting/python.md +0 -229
  236. package/skills/testeiya/testomatio-docs/docs/test-reporting/workflows.md +0 -325
  237. package/skills/testeiya/testomatio-docs/docs/tutorials/Interacting-via-API.md +0 -159
  238. package/skills/testeiya/testomatio-docs/docs/tutorials/Manual-Testing-Classic.md +0 -164
  239. package/skills/testeiya/testomatio-docs/docs/tutorials/Set-Up-Read-Only-Access.md +0 -85
  240. package/skills/testeiya/testomatio-docs/docs/tutorials/Using-AI-in-Testing.md +0 -163
  241. package/skills/testeiya/testomatio-docs/docs/tutorials/Working-with-Jira.md +0 -125
  242. package/skills/testeiya/testomatio-docs/docs/tutorials/java.md +0 -478
  243. package/skills/testeiya/testomatio-docs/docs/tutorials/playwright.md +0 -207
  244. package/skills/testeiya/testomatio-docs/docs/tutorials/webdriver.md +0 -218
  245. package/skills/testeiya/testomatio-docs/docs.lock.json +0 -6
  246. package/skills/testeiya/testomatio-reporter/SKILL.md +0 -307
  247. package/skills/testomatio/test-automation/setup-pr-testing/SKILL.md +0 -199
  248. package/skills.yaml +0 -21
  249. package/src/ai-debug.ts +0 -188
  250. package/src/api/agent-get.ts +0 -22
  251. package/src/api/agent-start.ts +0 -384
  252. package/src/api/client-log.ts +0 -29
  253. package/src/api/context.ts +0 -332
  254. package/src/api/debug-layout.ts +0 -47
  255. package/src/api/debug-report.ts +0 -29
  256. package/src/api/debug-snapshot.ts +0 -30
  257. package/src/api/debug-stream.ts +0 -52
  258. package/src/api/files-delete.ts +0 -184
  259. package/src/api/files-read.ts +0 -41
  260. package/src/api/files-rename.ts +0 -99
  261. package/src/api/files-tree.ts +0 -292
  262. package/src/api/files-write.ts +0 -41
  263. package/src/api/mcp.ts +0 -603
  264. package/src/api/memory.ts +0 -69
  265. package/src/api/open-external.ts +0 -39
  266. package/src/api/playwright-cli.ts +0 -606
  267. package/src/api/providers.ts +0 -457
  268. package/src/api/read-env-token.ts +0 -33
  269. package/src/api/sessions.ts +0 -79
  270. package/src/api/settings.ts +0 -120
  271. package/src/api/skills.ts +0 -58
  272. package/src/api/testomatio-attachment.ts +0 -89
  273. package/src/api/testomatio-auth.ts +0 -284
  274. package/src/api/testomatio-proxy.ts +0 -197
  275. package/src/api/testomatio-run-stats.ts +0 -81
  276. package/src/api/testomatio-target.ts +0 -225
  277. package/src/api/testomatio-transcription.ts +0 -82
  278. package/src/api/workspace-search.ts +0 -96
  279. package/src/api/workspace-sync.ts +0 -151
  280. package/src/api/workspace.ts +0 -165
  281. package/src/app-server.ts +0 -556
  282. package/src/bridge.ts +0 -251
  283. package/src/check-tests.ts +0 -156
  284. package/src/cli.ts +0 -17
  285. package/src/commands.ts +0 -244
  286. package/src/config.ts +0 -183
  287. package/src/connection.ts +0 -658
  288. package/src/context-store.ts +0 -265
  289. package/src/debug-bus.ts +0 -405
  290. package/src/extensions/tool-gate.ts +0 -220
  291. package/src/extensions/webui/ask-channel.ts +0 -52
  292. package/src/extensions/webui/index.ts +0 -184
  293. package/src/extensions/webui/tools/ask-question.ts +0 -88
  294. package/src/extensions/webui/tools/query-result.ts +0 -79
  295. package/src/extensions/webui/tools/render-chart.ts +0 -53
  296. package/src/extensions/webui/tools/render-item.ts +0 -61
  297. package/src/extensions/webui/tools/render-list.ts +0 -170
  298. package/src/extensions/webui/tools/render-result.ts +0 -85
  299. package/src/extensions/webui/tools/render-tree.ts +0 -71
  300. package/src/extensions/webui/tools/ui-widget.ts +0 -54
  301. package/src/extensions/webui/tools/widget-result.ts +0 -13
  302. package/src/extensions/webui/widget-channel.ts +0 -50
  303. package/src/file-log.ts +0 -196
  304. package/src/git-tracked.ts +0 -68
  305. package/src/gitignore.ts +0 -53
  306. package/src/json-store.ts +0 -43
  307. package/src/load-env.ts +0 -70
  308. package/src/loader-style.ts +0 -96
  309. package/src/main.ts +0 -140
  310. package/src/mcp-catalog.ts +0 -96
  311. package/src/models-catalog.ts +0 -72
  312. package/src/permissions.ts +0 -120
  313. package/src/project-dir.ts +0 -189
  314. package/src/project-info.ts +0 -108
  315. package/src/prompt/app-ui.ts +0 -59
  316. package/src/prompt/browser.ts +0 -27
  317. package/src/prompt/index.ts +0 -62
  318. package/src/prompt/tools.ts +0 -27
  319. package/src/server-info.ts +0 -62
  320. package/src/session-factory.ts +0 -442
  321. package/src/session-store.ts +0 -115
  322. package/src/shell-env.ts +0 -45
  323. package/src/skills.ts +0 -163
  324. package/src/sync-snapshot.ts +0 -140
  325. package/src/telemetry.ts +0 -239
  326. package/src/testomatio-auth.ts +0 -299
  327. package/src/testomatio.ts +0 -98
  328. package/src/theme.ts +0 -30
  329. package/src/user-env.ts +0 -94
  330. package/src/welcome.ts +0 -127
  331. package/src/workspace/safe-path.ts +0 -85
  332. package/src/workspace/test-md.ts +0 -70
  333. package/src/workspace-model.ts +0 -440
  334. package/testeiya.config.json +0 -14
  335. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/advanced/authentication-flows.md +0 -0
  336. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/advanced/authentication.md +0 -0
  337. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/advanced/clock-mocking.md +0 -0
  338. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/advanced/mobile-testing.md +0 -0
  339. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/advanced/multi-context.md +0 -0
  340. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/advanced/multi-user.md +0 -0
  341. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/advanced/network-advanced.md +0 -0
  342. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/advanced/third-party.md +0 -0
  343. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/architecture/pom-vs-fixtures.md +0 -0
  344. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/architecture/test-architecture.md +0 -0
  345. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/architecture/when-to-mock.md +0 -0
  346. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/browser-apis/browser-apis.md +0 -0
  347. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/browser-apis/iframes.md +0 -0
  348. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/browser-apis/service-workers.md +0 -0
  349. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/browser-apis/websockets.md +0 -0
  350. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/core/annotations.md +0 -0
  351. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/core/assertions-waiting.md +0 -0
  352. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/core/configuration.md +0 -0
  353. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/core/fixtures-hooks.md +0 -0
  354. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/core/global-setup.md +0 -0
  355. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/core/locators.md +0 -0
  356. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/core/page-object-model.md +0 -0
  357. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/core/projects-dependencies.md +0 -0
  358. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/core/test-data.md +0 -0
  359. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/core/test-suite-structure.md +0 -0
  360. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/core/test-tags.md +0 -0
  361. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/debugging/console-errors.md +0 -0
  362. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/debugging/debugging.md +0 -0
  363. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/debugging/error-testing.md +0 -0
  364. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/debugging/flaky-tests.md +0 -0
  365. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/frameworks/angular.md +0 -0
  366. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/frameworks/nextjs.md +0 -0
  367. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/frameworks/react.md +0 -0
  368. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/frameworks/vue.md +0 -0
  369. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/infrastructure-ci-cd/ci-cd.md +0 -0
  370. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/infrastructure-ci-cd/docker.md +0 -0
  371. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/infrastructure-ci-cd/github-actions.md +0 -0
  372. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/infrastructure-ci-cd/gitlab.md +0 -0
  373. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/infrastructure-ci-cd/other-providers.md +0 -0
  374. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/infrastructure-ci-cd/parallel-sharding.md +0 -0
  375. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/infrastructure-ci-cd/performance.md +0 -0
  376. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/infrastructure-ci-cd/reporting.md +0 -0
  377. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/infrastructure-ci-cd/test-coverage.md +0 -0
  378. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/testing-patterns/accessibility.md +0 -0
  379. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/testing-patterns/api-testing.md +0 -0
  380. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/testing-patterns/browser-extensions.md +0 -0
  381. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/testing-patterns/canvas-webgl.md +0 -0
  382. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/testing-patterns/component-testing.md +0 -0
  383. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/testing-patterns/drag-drop.md +0 -0
  384. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/testing-patterns/electron.md +0 -0
  385. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/testing-patterns/file-operations.md +0 -0
  386. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/testing-patterns/file-upload-download.md +0 -0
  387. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/testing-patterns/forms-validation.md +0 -0
  388. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/testing-patterns/graphql-testing.md +0 -0
  389. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/testing-patterns/i18n.md +0 -0
  390. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/testing-patterns/performance-testing.md +0 -0
  391. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/testing-patterns/security-testing.md +0 -0
  392. /package/skills/{playwright-best-practices-skill → playwright/playwright-best-practices}/testing-patterns/visual-regression.md +0 -0
  393. /package/skills/{playwright-cli → playwright/playwright-cli}/SKILL.md +0 -0
  394. /package/skills/{playwright-cli → playwright/playwright-cli}/references/element-attributes.md +0 -0
  395. /package/skills/{playwright-cli → playwright/playwright-cli}/references/playwright-tests.md +0 -0
  396. /package/skills/{playwright-cli → playwright/playwright-cli}/references/request-mocking.md +0 -0
  397. /package/skills/{playwright-cli → playwright/playwright-cli}/references/running-code.md +0 -0
  398. /package/skills/{playwright-cli → playwright/playwright-cli}/references/session-management.md +0 -0
  399. /package/skills/{playwright-cli → playwright/playwright-cli}/references/storage-state.md +0 -0
  400. /package/skills/{playwright-cli → playwright/playwright-cli}/references/test-generation.md +0 -0
  401. /package/skills/{playwright-cli → playwright/playwright-cli}/references/tracing.md +0 -0
  402. /package/skills/{playwright-cli → playwright/playwright-cli}/references/video-recording.md +0 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Testomat.io
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,212 +1,384 @@
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/testomatio/testeiya-app/main/assets/testeiya-cli-logo.png" alt="Testeiya" width="220">
3
+ </p>
4
+
1
5
  # Testeiya
2
6
 
3
- AI-powered testing agent for QA teams, built on top of the [oh-my-pi](https://github.com/can1357/oh-my-pi) coding-agent SDK (a fork of [Pi](https://github.com/badlogic/pi-mono) by Mario Zechner).
7
+ [![npm](https://img.shields.io/npm/v/testeiya)](https://www.npmjs.com/package/testeiya)
8
+ [![licence](https://img.shields.io/npm/l/testeiya)](LICENSE)
9
+
10
+ An agent, app, and the goddess of testing.
11
+
12
+ Testeiya is an autonomous QA agent. It reacts to triggers — a pull request, a new
13
+ issue, a failed test run, a deploy — runs exactly one analysis, and delivers its
14
+ verdict where your team works: a PR comment, a markdown report, or a Testomat.io
15
+ project. There is no interactive mode and no human in the loop. That is the point:
16
+ you wire it into CI once, and every event that should get QA thinking gets it.
17
+
18
+ It ships as a desktop app, a web app, and the command-line agent in this repository.
19
+
20
+ | Folder | What it is |
21
+ |---|---|
22
+ | `prompt/` | System-prompt fragments: the agent's role, rules, tool guidance, Testomat.io operating rules, and the report contract |
23
+ | `skills/` | The manifest of skills the agent can invoke. Every folder is fetched from its own upstream repository |
24
+ | `src/` | The `testeiya` command-line agent (Node) |
25
+
26
+ The desktop and web harness is not open source. That covers the servers, session management, sync, and UI.
4
27
 
5
- ## About
28
+ ## Install
6
29
 
7
- Testeiya is an interactive terminal agent that helps developers analyze test suites, find coverage gaps, and plan testing strategies. It reads your codebase aggressively while keeping write operations locked down, so you can safely point it at any project.
30
+ Requires Node 22.19 or newer, an LLM provider key, and a model.
8
31
 
9
- It ships with [Testomat.io](https://testomat.io) skills for test case management and connects to any OpenAI-compatible API (default: [OpenRouter](https://openrouter.ai)).
32
+ ```bash
33
+ npx testeiya doctor
34
+ ```
10
35
 
11
- ## Features
36
+ `doctor` reports which key won, which skills loaded, and whether Testomat.io is reachable — without spending a token.
12
37
 
13
- - QA-focused system prompt tuned for test analysis
14
- - Read-permissive / write-restricted permission model
15
- - Safe bash commands (git log, cat, grep...) auto-allowed; destructive commands blocked
16
- - Testomat.io skills: test generation, duplicate detection, test improvement, reporter setup
17
- - Markdown-rendered output in terminal
18
- - Multi-line paste support
19
- - Configurable LLM provider and model (OpenRouter by default; any OpenAI-compatible endpoint)
38
+ The key comes from the environment (`OPENROUTER_API_KEY`, `ANTHROPIC_API_KEY`,
39
+ `OPENAI_API_KEY`, `GEMINI_API_KEY`), from `~/.testeiya/.env`, or from
40
+ `~/.testeiya/auth.json`. That last file is the one the desktop app's Settings
41
+ dialog writes, so configuring it once covers both.
20
42
 
21
- ## Installation
43
+ There is no default model. Name one with `--model <provider>/<id>` or
44
+ `TESTEIYA_MODEL`. CI usually has neither set, so a run that resolves no model
45
+ exits `2` rather than picking one for you.
22
46
 
23
47
  ```bash
24
- npm install -g testeiya # requires Bun (https://bun.sh) on your PATH
25
- testeiya
48
+ export TESTEIYA_MODEL=openrouter/anthropic/claude-sonnet-5
49
+ testeiya models anthropic # list what your key can reach
26
50
  ```
27
51
 
28
- Or run from source. This package lives in the [`cli/`](https://github.com/testomatio/testeiya-app/tree/main/cli) directory of the Testeiya monorepo:
52
+ ## How it runs
29
53
 
30
54
  ```bash
31
- git clone git@github.com:testomatio/testeiya-app.git
32
- cd testeiya-app/cli
33
- bun install
34
- bun src/cli.ts
55
+ testeiya task "<task>" # run one task, deliver a report, exit
56
+ testeiya ask "<question>" # answer a question, no report
57
+ testeiya skills # list the skills bundled with this package
58
+ testeiya sessions # list saved sessions for this folder
35
59
  ```
36
60
 
37
- ### Requirements
61
+ The agent runs one task and exits. Progress goes to stderr, so a run drops into CI as-is:
38
62
 
39
- - [Bun](https://bun.sh) the CLI runs under Bun (its `testeiya` bin uses a `#!/usr/bin/env bun` shebang and runs the TypeScript directly)
40
- - An API key for whatever you set as `provider.name` in config (default is OpenRouter; see [API keys](#api-keys) below)
63
+ | Exit code | Meaning |
64
+ |---|---|
65
+ | `0` | pass, or a positive verdict from the agent |
66
+ | `1` | failed run, or a negative verdict — findings that need a human |
67
+ | `2` | bad usage |
68
+ | `130` | interrupted |
41
69
 
42
- ## Running in Container (Optional)
70
+ Pass `--exit-zero` when a negative verdict must not fail the job. A broken run
71
+ still exits `1`, bad usage still exits `2`, and the verdict is still in the
72
+ report and in the run envelope for anything that wants to gate on it.
43
73
 
44
- Instead of installing locally, you can run Testeiya in Docker. Requires [Docker](https://docker.com) to be installed.
74
+ A task can come from stdin too:
45
75
 
46
76
  ```bash
47
- # Build the container
48
- make build
77
+ cat issue-42.md | testeiya task --output report.md
78
+ ```
49
79
 
50
- # Configure environment (copy example and edit)
51
- cp .env.example .env
52
- # Edit .env with your API keys
80
+ Every command takes `--json` for machine-readable output of the run envelope
81
+ (verdict, reason, tokens, session id). `testeiya --help` lists all options;
82
+ `testeiya help` is the full guide.
53
83
 
54
- # Run the container
55
- make run
84
+ ## Scenarios
56
85
 
57
- # Stop the container
58
- make stop
86
+ Each scenario below is a single unattended run. Nobody answers questions; the
87
+ agent reads what the trigger gives it and acts on its own judgement. If its
88
+ verdict is negative, the job fails — that failure *is* the signal.
59
89
 
60
- # Clean up containers
61
- make clean
90
+ ### Grill a pull request
91
+
92
+ Every PR gets a QA review before merge. The agent loads the branch's diff,
93
+ analyzes it through the `qa-thinking` skill — edge cases, negative flows,
94
+ abuses, data-consistency risks — and posts the findings as a PR comment:
95
+
96
+ ```bash
97
+ git fetch origin "$PR_BRANCH"
98
+ git checkout "$PR_BRANCH"
99
+ testeiya task "Review this pull request as a QA engineer. What could go wrong?" \
100
+ --output gh:pr-comment --output review.json
62
101
  ```
63
102
 
64
- The container mounts `./src` to `/app/src`, so you can edit code locally and run it inside the container.
103
+ Exit code `1` means the agent found real risk, so you can gate the merge on it.
65
104
 
66
- ### MCP (Testomat.io Integration)
105
+ ### Write test cases from a pull request
67
106
 
68
- Testeiya includes MCP server for Testomat.io. To enable:
107
+ Same trigger, different deliverable: the `qa-write-test-cases` skill turns the
108
+ change into test cases in Testomat.io markdown format, written as a build
109
+ artifact ready to commit or import:
69
110
 
70
- 1. Copy `.env.example` to `.env`
71
- 2. Add your Testomat.io credentials:
111
+ ```bash
112
+ testeiya task "Create test cases covering the changes in this pull request" \
113
+ --output testcases/
114
+ ```
115
+
116
+ With `TESTOMATIO` and the project id set, add
117
+ `sync them to Testomat.io` to the task and they land straight in the TMS via
118
+ `sync-test-cases-with-tms`.
119
+
120
+ ### Create test cases from a new issue
121
+
122
+ A requirements text arrives from the issue tracker — piped in, no human
123
+ summarizing it first. The agent writes a checklist and test cases from it:
72
124
 
73
125
  ```bash
74
- # In .env file
75
- OPENROUTER_API_KEY=sk-or-your-key
76
- TESTOMATIO_PROJECT_TOKEN=tstmt_xxx
77
- TESTOMATIO_PROJECT_ID=your-project-id
78
- TESTOMATIO_BASE_URL=https://app.testomat.io # or any anoher one
126
+ gh issue view 57 --json title,body -q '.title + "\n\n" + .body' \
127
+ | testeiya task --output testcases/issue-57.md
79
128
  ```
80
129
 
81
- 3. Run `make run` - MCP will auto-connect
130
+ ### Explore a deployed app with Explorbot
82
131
 
83
- ## Usage
132
+ After a deploy, point [Explorbot](https://github.com/testomatio/explorbot) — the
133
+ autonomous browser-testing CLI the agent drives through the `explorbot-*`
134
+ skills — at the staging URL. It researches, plans, and tests the live app in
135
+ its own browser, then reports what broke:
84
136
 
85
137
  ```bash
86
- export OPENROUTER_API_KEY=sk-or-your-key-here
87
- bun src/cli.ts
138
+ testeiya task "Run explorbot against https://staging.example.com, max 10 tests, report failures" \
139
+ --output explorbot-report.md
88
140
  ```
89
141
 
90
- Or build and run with Node:
142
+ ### Repair failing tests after a red build
143
+
144
+ On a failed CodeceptJS run, the `ci-fix-tests` skill attempts safe fixes only —
145
+ locator drift, missing waits — reruns just the failing scenarios, rolls back any
146
+ edit that did not help, and always writes `output/ci-fix.md` for the next job:
91
147
 
92
148
  ```bash
93
- npm run build
94
- node dist/cli.js
149
+ testeiya task "Fix the failed CodeceptJS tests using ci-fix-tests. No refactors." \
150
+ --no-session
95
151
  ```
96
152
 
97
- You'll see:
153
+ ### Audit the test suite on a schedule
98
154
 
155
+ Nightly, the agent walks the Testomat.io project and reports gaps — suites with
156
+ no tests, cases gone stale against the current code, coverage holes:
157
+
158
+ ```bash
159
+ TESTOMATIO=tstmt_xxx testeiya task \
160
+ "Audit this project: which suites have no automated tests, and which manual cases look automatable?" \
161
+ --output audits/$(date +%F).md
99
162
  ```
100
- Model: openrouter/anthropic/claude-sonnet-4
101
- Skills: analyze-tests, find-duplicate-cases, generate-test-cases, ...
102
163
 
103
- Testeiya - AI Testing Agent
164
+ ## CI setup
165
+
166
+ Testeiya needs three things in any CI system: a provider key, a model name, and
167
+ the checkout of whatever the task reads. Everything else is standard.
168
+
169
+ ### GitHub Actions
170
+
171
+ GitHub runners ship the [GitHub CLI](https://cli.github.com), so posting back to
172
+ the PR is one flag. `GITHUB_TOKEN` authenticates it; keep the LLM key in
173
+ repository secrets.
174
+
175
+ ```yaml
176
+ name: qa-review
177
+ on:
178
+ pull_request:
179
+ types: [opened, synchronize]
180
+
181
+ permissions:
182
+ pull-requests: write
183
+ contents: read
184
+
185
+ jobs:
186
+ grill:
187
+ runs-on: ubuntu-latest
188
+ env:
189
+ GH_TOKEN: ${{ github.token }}
190
+ OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
191
+ TESTEIYA_MODEL: openrouter/anthropic/claude-sonnet-5
192
+ # optional, for scenarios that touch Testomat.io
193
+ TESTOMATIO: ${{ secrets.TESTOMATIO }}
194
+ TESTOMATIO_PROJECT_ID: my-project
195
+ steps:
196
+ - uses: actions/checkout@v4
197
+ with:
198
+ fetch-depth: 0
199
+ - uses: actions/setup-node@v4
200
+ with:
201
+ node-version: 22
202
+ - run: npx testeiya@latest doctor
203
+ - run: |
204
+ npx testeiya@latest task \
205
+ "Review this pull request as a QA engineer. What could go wrong?" \
206
+ --output gh:pr-comment --output review.json
207
+ - uses: actions/upload-artifact@v4
208
+ if: always()
209
+ with:
210
+ name: review
211
+ path: review.json
212
+ ```
104
213
 
105
- What can I do for you?
214
+ The same shape works for the other scenarios: trigger on `issues` and pipe the
215
+ body in for test-case generation, or run on a `schedule` for the nightly audit.
216
+
217
+ ### GitLab CI
218
+
219
+ GitLab runners do not ship `gh`, so the report goes to job artifacts — visible
220
+ in the merge request pipeline page. Exit code `1` fails the job and blocks the
221
+ merge when you mark it required.
222
+
223
+ ```yaml
224
+ qa-review:
225
+ image: node:22
226
+ rules:
227
+ - if: $CI_PIPELINE_SOURCE == "merge_request_event"
228
+ variables:
229
+ TESTEIYA_MODEL: openrouter/anthropic/claude-sonnet-5
230
+ TESTOMATIO_PROJECT_ID: my-project
231
+ script:
232
+ - git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
233
+ - npx testeiya@latest doctor
234
+ - npx testeiya@latest task
235
+ "Review this merge request as a QA engineer. What could go wrong?"
236
+ --output review/report.md --output review/envelope.json
237
+ artifacts:
238
+ when: always
239
+ paths:
240
+ - review/
241
+ parallel:
242
+ # secrets go to Settings > CI/CD > Variables:
243
+ # OPENROUTER_API_KEY (masked), TESTOMATIO (masked, protected)
106
244
  ```
107
245
 
108
- Type a request like:
246
+ For posting back to the merge request, hand the envelope's report to GitLab's
247
+ API in a follow-up step, or install `gh` plus a token mirror if the project is
248
+ also on GitHub.
109
249
 
110
- - "Analyze the test suite in this project"
111
- - "Find untested code paths in src/controllers"
112
- - "Generate test cases for the auth module"
250
+ ### Anywhere else
113
251
 
114
- Paste multi-line text (API docs, specs, requirements) directly into the prompt.
252
+ Any scheduler that can run a container works the contract is just stdin,
253
+ stdout, and an exit code:
254
+
255
+ ```bash
256
+ echo "Audit the checkout suite for gaps" | testeiya task --output audit.md
257
+ case $? in
258
+ 0) echo "clean" ;;
259
+ 1) echo "findings need review" ;;
260
+ esac
261
+ ```
115
262
 
116
- ## Configuration
263
+ ## Where the report goes
117
264
 
118
- Edit `testeiya.config.json` in the project root:
265
+ `--output` names a destination and can repeat. Without one the report goes to stdout.
119
266
 
120
- ```json
121
- {
122
- "provider": {
123
- "name": "openrouter",
124
- "baseUrl": "https://openrouter.ai/api/v1",
125
- "model": "anthropic/claude-sonnet-4",
126
- "contextWindow": 200000,
127
- "maxTokens": 16384
128
- },
129
- "permissions": {
130
- "autoAllowRead": true,
131
- "blockWrites": true,
132
- "blockBash": true
133
- }
134
- }
267
+ ```bash
268
+ testeiya task "<task>" --output report.md --output run.json --output gh:pr-comment
135
269
  ```
136
270
 
137
- - **provider.model** - Any model available on OpenRouter (e.g. `anthropic/claude-sonnet-4`, `openai/gpt-4o`, `google/gemini-2.5-pro`)
138
- - **permissions.blockWrites** - When `true`, edit/write tools are blocked
139
- - **permissions.blockBash** - When `true`, only read-only bash commands are allowed
271
+ | Destination | What happens |
272
+ |---|---|
273
+ | `report.md` | the agent writes the report there |
274
+ | `run.json` | the run envelope: verdict, reason, report, tokens, session id |
275
+ | `gh:pr-comment` | posted on this branch's pull request |
276
+ | `gh:pr#123` | posted on that pull request |
277
+
278
+ Posting uses the GitHub CLI and resolves the PR number from `GITHUB_EVENT_PATH`,
279
+ `GITHUB_REF`, or `gh pr view` — so inside Actions it just works. Every
280
+ destination is checked before the run starts, so a missing `gh` costs no tokens.
140
281
 
141
- Config is also loaded from `~/.testeiya/config.json` as a fallback.
282
+ `--footer "<text>"` adds a line under a posted comment, and nowhere else. It is
283
+ what turns a report into a conversation: tell the reader how to answer, and let
284
+ the workflow feed their reply back into the same session.
142
285
 
143
- ### API keys
286
+ ```bash
287
+ testeiya task "Review this pull request" \
288
+ --output gh:pr-comment \
289
+ --footer "> You can reply to this comment by typing /testeiya"
290
+ ```
144
291
 
145
- Read the API key from `process.env.<PROVIDER_NAME>_API_KEY`, where `<PROVIDER_NAME>` is your `provider.name` (uppercase) from config (e.g. `openrouter` in `testeiya.config.json`).
292
+ ## Sessions
146
293
 
147
- Example: if `provider.name` is `openrouter`, read the API key from `process.env.OPENROUTER_API_KEY`.
294
+ Runs are saved under `~/.testeiya`, so a follow-up picks up where the last one
295
+ stopped. A resumed run reuses its session's model.
148
296
 
149
- | `provider.name` | Environment variable |
150
- | --------------- | ---------------------- |
151
- | `openrouter` | `OPENROUTER_API_KEY` |
152
- | `openai` | `OPENAI_API_KEY` |
153
- | `anthropic` | `ANTHROPIC_API_KEY` |
154
- | `groq` | `GROQ_API_KEY` |
297
+ ```bash
298
+ testeiya task "Review the checkout suite" --name checkout-review --output report.md
299
+ testeiya task "Now write the missing cases" -c
300
+ testeiya sessions
301
+ testeiya task "<task>" --resume <id>
302
+ ```
155
303
 
156
- Or set any environment variable name depending of provider name.
304
+ Pass `--name` to label a session and `--no-session` to save nothing.
157
305
 
158
- ## Skills
306
+ In CI, `--session <label>` is the one to reach for: it continues the session
307
+ with that label, and starts it the first time, so a job that runs again and
308
+ again needs no "does it exist yet" branch. Give each thread its own label, and
309
+ carry `~/.testeiya` between rounds with the runner's cache. `--no-session` keeps
310
+ runners stateless when continuity is not wanted.
159
311
 
160
- Testeiya loads skills from [@testomatio/skills](https://github.com/testomatio/skills) plus a built-in `analyze-tests` skill:
312
+ ```bash
313
+ testeiya task "Review the new commits" --session "pr-42" --output gh:pr-comment
314
+ ```
161
315
 
162
- | Skill | Purpose |
163
- | -------------------- | ---------------------------------------- |
164
- | analyze-tests | Analyze test coverage, quality, and gaps |
165
- | generate-test-cases | Create test cases from specs or code |
166
- | find-duplicate-cases | Locate duplicate tests |
167
- | improve-test-cases | Enhance existing test quality |
168
- | reporter-setup | Configure test reporters |
169
- | sync-cases | Synchronize test cases with Testomat.io |
316
+ ## Testomat.io
170
317
 
171
- Update skills to latest:
318
+ Set `TESTOMATIO` to a project API key. The agent can then read and write that
319
+ project's tests, suites, runs and plans through `check-tests` and the REST API.
172
320
 
173
321
  ```bash
174
- npm update @testomatio/skills
322
+ TESTOMATIO=tstmt_xxx testeiya task --project my-project "Which suites have no tests?"
175
323
  ```
176
324
 
177
- ## Architecture
325
+ Add the project id and the agent also gets the Testomat.io MCP tools. The id
326
+ comes from `--project` or from `TESTOMATIO_PROJECT_ID`; the MCP server needs it,
327
+ because a token alone does not say which project to talk to. `TESTOMATIO_URL`
328
+ points at a self-hosted instance.
178
329
 
179
- Built on top of the [oh-my-pi coding-agent SDK](https://github.com/can1357/oh-my-pi) (a fork of [Pi](https://github.com/badlogic/pi-mono)):
330
+ ## Skills
180
331
 
181
- - **`@oh-my-pi/pi-coding-agent`** - Agent session, tools (read/write/bash/grep/find), extensions
182
- - **`@oh-my-pi/pi-ai`** - Multi-provider LLM abstraction
183
- - **`@oh-my-pi/pi-tui`** - Markdown rendering
332
+ A skill is a folder with a `SKILL.md`. The agent loads them all and invokes the
333
+ ones a task calls for — you never pick a skill explicitly, the task phrasing
334
+ does.
184
335
 
185
- ```
186
- src/
187
- cli.ts # Entry point
188
- main.ts # Bootstrap: config, auth, model, skills, session
189
- config.ts # Load testeiya.config.json
190
- system-prompt.ts # QA/testing system prompt
191
- permissions.ts # Read-allow / write-block permission gate
192
- repl.ts # Interactive REPL with markdown + paste support
193
- skills/
194
- analyze-tests.ts # Built-in test analysis skill
336
+ The set is vendored from upstream repositories and moves with every release, so
337
+ ask your own install rather than a list in a README:
338
+
339
+ ```bash
340
+ testeiya skills # every bundled skill: name and what it is for
341
+ testeiya skills playwright # filter by name, category or description
342
+ testeiya skills --json # [{name, group, description}]
195
343
  ```
196
344
 
197
- ## Development
345
+ Categories today: QA process, test management, test automation, Explorbot,
346
+ Playwright, CodeceptJS.
198
347
 
199
- ```bash
200
- # Run directly (no build needed)
201
- bun src/cli.ts
348
+ Sources are declared in `skills/skills.yaml` and pinned in
349
+ `skills/skills.lock.json`. The vendored folders are deliberately not committed —
350
+ they belong to their authors, under their own licences. A clone has the manifest
351
+ and nothing else; `node scripts/vendor-skills.js` fills the tree. Every release
352
+ runs it, so the published `testeiya` package ships each skill as current on
353
+ release day.
202
354
 
203
- # Type-check
204
- npx tsc --noEmit
355
+ `skillsOverride` in `src/session.ts` keeps only what is found under that tree,
356
+ so an arbitrary clone cannot hand the model its own skills. To add yours, point
357
+ `additionalSkillPaths` at your folder. [EXTENDING.md](EXTENDING.md) covers both hooks.
205
358
 
206
- # Build for Node
207
- npm run build
208
- ```
359
+ To propose a new source, add its line to `skills/skills.yaml`. See [CONTRIBUTING.md](CONTRIBUTING.md).
360
+
361
+ ## Building your own agent
362
+
363
+ The CLI is a thin composition over [pi](https://pi.dev): about 1,500 lines wiring
364
+ the SDK to the prompt and skills here. A fork can add pi extensions and custom
365
+ tools, or swap the one-shot run loop for pi's full interactive TUI.
366
+ [EXTENDING.md](EXTENDING.md) walks through both.
367
+
368
+ ## Contributing
369
+
370
+ Prompt wording is exactly what an outside contributor can improve, and a change
371
+ to it changes how the agent behaves for everyone. Read
372
+ [CONTRIBUTING.md](CONTRIBUTING.md) first. It covers what belongs here and what
373
+ belongs upstream, in the repository that owns a given skill.
374
+
375
+ ## Issues
376
+
377
+ This repository is also the public issue tracker for both surfaces:
378
+
379
+ - Testeiya Desktop app, the packaged desktop application
380
+ - Testeiya CLI, the command-line agent in `src/`
209
381
 
210
- ## License
382
+ ## Licence
211
383
 
212
- ISC
384
+ [MIT](LICENSE).
@@ -0,0 +1,79 @@
1
+ import dedent from "dedent";
2
+ import { TESTEIYA_DIR_NAME } from "./vocab.js";
3
+ /** System-prompt section describing the workspace context; "" when none. */
4
+ export function contextPromptSection(entries, folders = []) {
5
+ if (entries.length === 0 && folders.length === 0)
6
+ return "";
7
+ return dedent `
8
+ <workspace-context>
9
+ This workspace has context attached — the user (or you, earlier) put it there for a purpose. Consult it before answering, and prefer it over assumptions about the project.
10
+
11
+ ${contextLines(entries, folders)}
12
+
13
+ ALL of it lives under the hidden \`${TESTEIYA_DIR_NAME}/\` dir: file-search tools skip hidden dirs by default, so search it explicitly (pass hidden:true, or prefix the path with \`${TESTEIYA_DIR_NAME}/\`). Linked folders and cloned repositories are reference material: read them, never modify them. A linked folder is a symlink — wildcard searches do not descend into it; search it with its own path prefix (e.g. \`${TESTEIYA_DIR_NAME}/<name>/\`). Documents under \`${TESTEIYA_DIR_NAME}/requirements\` and \`${TESTEIYA_DIR_NAME}/docs\` are specs and plans — use them when writing or reviewing tests.
14
+ </workspace-context>
15
+ `;
16
+ }
17
+ /** Per-prompt notice when the context changed mid-session; appended to the next prompt. */
18
+ export function contextUpdateNotice(entries, folders = []) {
19
+ if (entries.length === 0 && folders.length === 0) {
20
+ return dedent `
21
+ <workspace-context-update>
22
+ All extra workspace context was removed. Do not rely on it anymore.
23
+ </workspace-context-update>
24
+ `;
25
+ }
26
+ return dedent `
27
+ <workspace-context-update>
28
+ The workspace context just changed. It now contains:
29
+
30
+ ${contextLines(entries, folders)}
31
+
32
+ This was done for a purpose — take it into account for this and future requests. Remember \`${TESTEIYA_DIR_NAME}/\` is hidden: search it with hidden:true or an explicit path prefix.
33
+ </workspace-context-update>
34
+ `;
35
+ }
36
+ function contextLines(entries, folders) {
37
+ const lines = [];
38
+ const covered = new Set(entries.map((e) => parentDir(e.path)));
39
+ for (const f of folders) {
40
+ if (covered.has(f.path))
41
+ continue;
42
+ lines.push(`- \`${f.path}/\` — ${folderPurpose(f.name)}`);
43
+ }
44
+ for (const e of entries)
45
+ lines.push(`- ${describeEntry(e)}`);
46
+ return lines.join("\n");
47
+ }
48
+ function folderPurpose(name) {
49
+ if (name === "manual-tests") {
50
+ return "the project's manual test suites pulled from Testomat.io (*.test.md — THE manual tests of this project)";
51
+ }
52
+ if (name === "code")
53
+ return "reference code added as context";
54
+ if (name === "requirements")
55
+ return "requirements and specs";
56
+ if (name === "docs")
57
+ return "test planning and strategy documents";
58
+ if (name === "auto-tests")
59
+ return "automated test references";
60
+ return "exploratory testing setup";
61
+ }
62
+ function parentDir(rel) {
63
+ const idx = rel.lastIndexOf("/");
64
+ if (idx < 0)
65
+ return "";
66
+ return rel.slice(0, idx);
67
+ }
68
+ function describeEntry(e) {
69
+ const date = e.addedAt?.split("T")[0] ?? "";
70
+ let from = "";
71
+ if (e.origin && e.origin !== e.name)
72
+ from = ` from ${e.origin}`;
73
+ if (e.kind === "repo")
74
+ return `\`${e.path}\` — git repository${from} (${date})`;
75
+ if (e.kind === "folder")
76
+ return `\`${e.path}\` — local folder${from} (${date})`;
77
+ return `\`${e.path}\` — document${from} (${date})`;
78
+ }
79
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../prompt/context.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,4EAA4E;AAC5E,MAAM,UAAU,oBAAoB,CAClC,OAAuB,EACvB,UAA2B,EAAE;IAE7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC5D,OAAO,MAAM,CAAA;;;;IAIX,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC;;yCAEO,iBAAiB,gIAAgI,iBAAiB,0NAA0N,iBAAiB,kCAAkC,iBAAiB,yBAAyB,iBAAiB;;GAEhhB,CAAC;AACJ,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,mBAAmB,CACjC,OAAuB,EACvB,UAA2B,EAAE;IAE7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,MAAM,CAAA;;;;KAIZ,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAA;;;;IAIX,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC;;kGAEgE,iBAAiB;;GAEhH,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,OAAuB,EAAE,OAAwB;IACrE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,SAAS;QAClC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,SAAS,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QAC5B,OAAO,yGAAyG,CAAC;IACnH,CAAC;IACD,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,iCAAiC,CAAC;IAC9D,IAAI,IAAI,KAAK,cAAc;QAAE,OAAO,wBAAwB,CAAC;IAC7D,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,sCAAsC,CAAC;IACnE,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,2BAA2B,CAAC;IAC9D,OAAO,2BAA2B,CAAC;AACrC,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACvB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,aAAa,CAAC,CAAe;IACpC,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5C,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI;QAAE,IAAI,GAAG,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;IAChE,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC,CAAC,IAAI,sBAAsB,IAAI,KAAK,IAAI,GAAG,CAAC;IAChF,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,CAAC,IAAI,oBAAoB,IAAI,KAAK,IAAI,GAAG,CAAC;IAChF,OAAO,KAAK,CAAC,CAAC,IAAI,gBAAgB,IAAI,KAAK,IAAI,GAAG,CAAC;AACrD,CAAC"}