testeiya 0.2.0

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/README.md +212 -0
  2. package/models.catalog.json +6963 -0
  3. package/package.json +71 -0
  4. package/skills/codeceptjs/ci-fix-tests/SKILL.md +120 -0
  5. package/skills/codeceptjs/codeceptjs-auth/SKILL.md +158 -0
  6. package/skills/codeceptjs/codeceptjs-exploration/SKILL.md +91 -0
  7. package/skills/codeceptjs/codeceptjs-fundamentals/SKILL.md +158 -0
  8. package/skills/codeceptjs/codeceptjs-run-analysis/SKILL.md +90 -0
  9. package/skills/codeceptjs/debugging-codeceptjs-tests/SKILL.md +234 -0
  10. package/skills/codeceptjs/migrate-codeceptjs-4/SKILL.md +110 -0
  11. package/skills/codeceptjs/migrate-cypress-to-codeceptjs/SKILL.md +306 -0
  12. package/skills/codeceptjs/migrate-protractor-to-codeceptjs/SKILL.md +352 -0
  13. package/skills/codeceptjs/migrate-selenium-java-to-codeceptjs/SKILL.md +472 -0
  14. package/skills/codeceptjs/migrate-testcafe-to-codeceptjs/SKILL.md +350 -0
  15. package/skills/codeceptjs/refactoring-codeceptjs-tests/SKILL.md +81 -0
  16. package/skills/codeceptjs/writing-codeceptjs-tests/SKILL.md +206 -0
  17. package/skills/playwright-best-practices-skill/LICENSE.md +7 -0
  18. package/skills/playwright-best-practices-skill/README.md +147 -0
  19. package/skills/playwright-best-practices-skill/SKILL.md +303 -0
  20. package/skills/playwright-best-practices-skill/advanced/authentication-flows.md +360 -0
  21. package/skills/playwright-best-practices-skill/advanced/authentication.md +871 -0
  22. package/skills/playwright-best-practices-skill/advanced/clock-mocking.md +364 -0
  23. package/skills/playwright-best-practices-skill/advanced/mobile-testing.md +409 -0
  24. package/skills/playwright-best-practices-skill/advanced/multi-context.md +288 -0
  25. package/skills/playwright-best-practices-skill/advanced/multi-user.md +393 -0
  26. package/skills/playwright-best-practices-skill/advanced/network-advanced.md +452 -0
  27. package/skills/playwright-best-practices-skill/advanced/third-party.md +464 -0
  28. package/skills/playwright-best-practices-skill/architecture/pom-vs-fixtures.md +363 -0
  29. package/skills/playwright-best-practices-skill/architecture/test-architecture.md +369 -0
  30. package/skills/playwright-best-practices-skill/architecture/when-to-mock.md +383 -0
  31. package/skills/playwright-best-practices-skill/browser-apis/browser-apis.md +391 -0
  32. package/skills/playwright-best-practices-skill/browser-apis/iframes.md +403 -0
  33. package/skills/playwright-best-practices-skill/browser-apis/service-workers.md +504 -0
  34. package/skills/playwright-best-practices-skill/browser-apis/websockets.md +403 -0
  35. package/skills/playwright-best-practices-skill/core/annotations.md +424 -0
  36. package/skills/playwright-best-practices-skill/core/assertions-waiting.md +361 -0
  37. package/skills/playwright-best-practices-skill/core/configuration.md +452 -0
  38. package/skills/playwright-best-practices-skill/core/fixtures-hooks.md +417 -0
  39. package/skills/playwright-best-practices-skill/core/global-setup.md +434 -0
  40. package/skills/playwright-best-practices-skill/core/locators.md +242 -0
  41. package/skills/playwright-best-practices-skill/core/page-object-model.md +315 -0
  42. package/skills/playwright-best-practices-skill/core/projects-dependencies.md +453 -0
  43. package/skills/playwright-best-practices-skill/core/test-data.md +492 -0
  44. package/skills/playwright-best-practices-skill/core/test-suite-structure.md +361 -0
  45. package/skills/playwright-best-practices-skill/core/test-tags.md +298 -0
  46. package/skills/playwright-best-practices-skill/debugging/console-errors.md +420 -0
  47. package/skills/playwright-best-practices-skill/debugging/debugging.md +504 -0
  48. package/skills/playwright-best-practices-skill/debugging/error-testing.md +360 -0
  49. package/skills/playwright-best-practices-skill/debugging/flaky-tests.md +496 -0
  50. package/skills/playwright-best-practices-skill/frameworks/angular.md +530 -0
  51. package/skills/playwright-best-practices-skill/frameworks/nextjs.md +469 -0
  52. package/skills/playwright-best-practices-skill/frameworks/react.md +531 -0
  53. package/skills/playwright-best-practices-skill/frameworks/vue.md +574 -0
  54. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/ci-cd.md +468 -0
  55. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/docker.md +283 -0
  56. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/github-actions.md +546 -0
  57. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/gitlab.md +397 -0
  58. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/other-providers.md +521 -0
  59. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/parallel-sharding.md +371 -0
  60. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/performance.md +453 -0
  61. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/reporting.md +424 -0
  62. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/test-coverage.md +497 -0
  63. package/skills/playwright-best-practices-skill/testing-patterns/accessibility.md +359 -0
  64. package/skills/playwright-best-practices-skill/testing-patterns/api-testing.md +719 -0
  65. package/skills/playwright-best-practices-skill/testing-patterns/browser-extensions.md +506 -0
  66. package/skills/playwright-best-practices-skill/testing-patterns/canvas-webgl.md +493 -0
  67. package/skills/playwright-best-practices-skill/testing-patterns/component-testing.md +500 -0
  68. package/skills/playwright-best-practices-skill/testing-patterns/drag-drop.md +576 -0
  69. package/skills/playwright-best-practices-skill/testing-patterns/electron.md +509 -0
  70. package/skills/playwright-best-practices-skill/testing-patterns/file-operations.md +377 -0
  71. package/skills/playwright-best-practices-skill/testing-patterns/file-upload-download.md +562 -0
  72. package/skills/playwright-best-practices-skill/testing-patterns/forms-validation.md +561 -0
  73. package/skills/playwright-best-practices-skill/testing-patterns/graphql-testing.md +331 -0
  74. package/skills/playwright-best-practices-skill/testing-patterns/i18n.md +508 -0
  75. package/skills/playwright-best-practices-skill/testing-patterns/performance-testing.md +476 -0
  76. package/skills/playwright-best-practices-skill/testing-patterns/security-testing.md +430 -0
  77. package/skills/playwright-best-practices-skill/testing-patterns/visual-regression.md +634 -0
  78. package/skills/playwright-cli/SKILL.md +420 -0
  79. package/skills/playwright-cli/references/element-attributes.md +23 -0
  80. package/skills/playwright-cli/references/playwright-tests.md +39 -0
  81. package/skills/playwright-cli/references/request-mocking.md +87 -0
  82. package/skills/playwright-cli/references/running-code.md +241 -0
  83. package/skills/playwright-cli/references/session-management.md +225 -0
  84. package/skills/playwright-cli/references/storage-state.md +275 -0
  85. package/skills/playwright-cli/references/test-generation.md +433 -0
  86. package/skills/playwright-cli/references/tracing.md +139 -0
  87. package/skills/playwright-cli/references/video-recording.md +143 -0
  88. package/skills/testeiya/README.md +29 -0
  89. package/skills/testeiya/answer-formatting/SKILL.md +30 -0
  90. package/skills/testeiya/check-cucumber/SKILL.md +200 -0
  91. package/skills/testeiya/check-tests/SKILL.md +260 -0
  92. package/skills/testeiya/manual-run-assistant/SKILL.md +61 -0
  93. package/skills/testeiya/testomatio-docs/INDEX.md +175 -0
  94. package/skills/testeiya/testomatio-docs/SKILL.md +102 -0
  95. package/skills/testeiya/testomatio-docs/docs/advanced/ai-powered-features/ai-agents.md +144 -0
  96. package/skills/testeiya/testomatio-docs/docs/advanced/ai-powered-features/ai-powered-features.md +531 -0
  97. package/skills/testeiya/testomatio-docs/docs/advanced/ai-powered-features/ai-requirements.md +437 -0
  98. package/skills/testeiya/testomatio-docs/docs/advanced/api-access/index.md +191 -0
  99. package/skills/testeiya/testomatio-docs/docs/advanced/branches-folder/index.md +277 -0
  100. package/skills/testeiya/testomatio-docs/docs/advanced/bulk-edit-folder/bulk-edit-demos.mdx +39 -0
  101. package/skills/testeiya/testomatio-docs/docs/advanced/bulk-edit-folder/bulk-edit-on-suite-and-test-level.md +122 -0
  102. package/skills/testeiya/testomatio-docs/docs/advanced/bulk-edit-folder/what-is-bulk-edit.md +170 -0
  103. package/skills/testeiya/testomatio-docs/docs/advanced/jira-plugin/branches.md +53 -0
  104. package/skills/testeiya/testomatio-docs/docs/advanced/jira-plugin/index.mdx +98 -0
  105. package/skills/testeiya/testomatio-docs/docs/advanced/jira-plugin/jira-issue.md +151 -0
  106. package/skills/testeiya/testomatio-docs/docs/advanced/jira-plugin/runs-and-reports.md +377 -0
  107. package/skills/testeiya/testomatio-docs/docs/advanced/jira-plugin/work-in-jira.md +267 -0
  108. package/skills/testeiya/testomatio-docs/docs/advanced/living-doc/index.md +138 -0
  109. package/skills/testeiya/testomatio-docs/docs/advanced/milestones/index.md +220 -0
  110. package/skills/testeiya/testomatio-docs/docs/advanced/shortcuts/index.md +48 -0
  111. package/skills/testeiya/testomatio-docs/docs/advanced/tags-labels/labels-and-custom-fields.md +201 -0
  112. package/skills/testeiya/testomatio-docs/docs/advanced/tags-labels/tags-or-labels.md +94 -0
  113. package/skills/testeiya/testomatio-docs/docs/advanced/tags-labels/tags.md +243 -0
  114. package/skills/testeiya/testomatio-docs/docs/advanced/test-artifacts/index.md +135 -0
  115. package/skills/testeiya/testomatio-docs/docs/advanced/tql/index.md +394 -0
  116. package/skills/testeiya/testomatio-docs/docs/getting-started/index.md +290 -0
  117. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/azure.md +96 -0
  118. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/bamboo.md +94 -0
  119. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/bitbucket.md +106 -0
  120. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/circle.md +115 -0
  121. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/github.md +120 -0
  122. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/gitlab.md +88 -0
  123. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/index.mdx +151 -0
  124. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/jenkins.md +121 -0
  125. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/teamcity.md +96 -0
  126. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/azure.md +31 -0
  127. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/clickup.md +54 -0
  128. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/confluence.md +34 -0
  129. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/github.md +31 -0
  130. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/gitlab.md +93 -0
  131. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/index.md +131 -0
  132. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/jira.md +164 -0
  133. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/linear.md +29 -0
  134. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/shortcut.md +67 -0
  135. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/youtrack.md +94 -0
  136. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/azure-devops.md +53 -0
  137. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/email.md +71 -0
  138. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/jira.md +52 -0
  139. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/ms-teams.md +60 -0
  140. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/rules.md +267 -0
  141. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/slack.md +82 -0
  142. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/telegram.md +73 -0
  143. package/skills/testeiya/testomatio-docs/docs/integrations/scim-provisioning/index.mdx +207 -0
  144. package/skills/testeiya/testomatio-docs/docs/integrations/scim-provisioning/okta.md +204 -0
  145. package/skills/testeiya/testomatio-docs/docs/integrations/single-sign-on/azure.md +95 -0
  146. package/skills/testeiya/testomatio-docs/docs/integrations/single-sign-on/google.md +75 -0
  147. package/skills/testeiya/testomatio-docs/docs/integrations/single-sign-on/index.mdx +33 -0
  148. package/skills/testeiya/testomatio-docs/docs/integrations/single-sign-on/okta.md +108 -0
  149. package/skills/testeiya/testomatio-docs/docs/integrations/single-sign-on/saml.md +66 -0
  150. package/skills/testeiya/testomatio-docs/docs/legal/compliance/gdpr.md +95 -0
  151. package/skills/testeiya/testomatio-docs/docs/legal/compliance/index.mdx +94 -0
  152. package/skills/testeiya/testomatio-docs/docs/legal/compliance/privacy.md +26 -0
  153. package/skills/testeiya/testomatio-docs/docs/legal/compliance/terms.md +32 -0
  154. package/skills/testeiya/testomatio-docs/docs/legal/security/index.mdx +242 -0
  155. package/skills/testeiya/testomatio-docs/docs/legal/security/jira.md +140 -0
  156. package/skills/testeiya/testomatio-docs/docs/legal/security/subprocessors.md +76 -0
  157. package/skills/testeiya/testomatio-docs/docs/management/company/administration.md +363 -0
  158. package/skills/testeiya/testomatio-docs/docs/management/company/audit-log.md +41 -0
  159. package/skills/testeiya/testomatio-docs/docs/management/company/plan-features-comparison.md +240 -0
  160. package/skills/testeiya/testomatio-docs/docs/management/company/subscriptions.md +326 -0
  161. package/skills/testeiya/testomatio-docs/docs/management/company/trials.md +75 -0
  162. package/skills/testeiya/testomatio-docs/docs/management/company/users-and-permissions/accountant.md +49 -0
  163. package/skills/testeiya/testomatio-docs/docs/management/company/users-and-permissions/index.mdx +285 -0
  164. package/skills/testeiya/testomatio-docs/docs/management/company/users-and-permissions/read-only-user.md +67 -0
  165. package/skills/testeiya/testomatio-docs/docs/management/company/users-and-permissions/teams.md +138 -0
  166. package/skills/testeiya/testomatio-docs/docs/management/project/settings.md +87 -0
  167. package/skills/testeiya/testomatio-docs/docs/management/project/templates.md +546 -0
  168. package/skills/testeiya/testomatio-docs/docs/project/analytics/index.md +326 -0
  169. package/skills/testeiya/testomatio-docs/docs/project/import-export/export-tests/classical-tests-markdown-format.md +386 -0
  170. package/skills/testeiya/testomatio-docs/docs/project/import-export/export-tests/download-manual-tests-as-files.md +378 -0
  171. package/skills/testeiya/testomatio-docs/docs/project/import-export/export-tests/export-to-obsidian.md +112 -0
  172. package/skills/testeiya/testomatio-docs/docs/project/import-export/export-tests/export-to-spreadsheet.md +127 -0
  173. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/auto-import.md +63 -0
  174. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-Allure-TestOps.md +49 -0
  175. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-QTest.md +41 -0
  176. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-Qase.md +39 -0
  177. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-Zephyr.md +37 -0
  178. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-csv-xlsx.md +117 -0
  179. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-cucumber.md +93 -0
  180. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-qmetry.md +44 -0
  181. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-source-code.md +117 -0
  182. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-testcaselabs.md +44 -0
  183. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-testmo.md +47 -0
  184. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-testrail.md +82 -0
  185. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-xray.md +55 -0
  186. package/skills/testeiya/testomatio-docs/docs/project/plans/index.md +334 -0
  187. package/skills/testeiya/testomatio-docs/docs/project/pulse/index.md +104 -0
  188. package/skills/testeiya/testomatio-docs/docs/project/runs/archive-runs-and-groups.md +176 -0
  189. package/skills/testeiya/testomatio-docs/docs/project/runs/custom-statuses.md +195 -0
  190. package/skills/testeiya/testomatio-docs/docs/project/runs/environments.md +203 -0
  191. package/skills/testeiya/testomatio-docs/docs/project/runs/managing-runs.md +455 -0
  192. package/skills/testeiya/testomatio-docs/docs/project/runs/merge-strategies.md +137 -0
  193. package/skills/testeiya/testomatio-docs/docs/project/runs/reports.md +329 -0
  194. package/skills/testeiya/testomatio-docs/docs/project/runs/rungroups.md +342 -0
  195. package/skills/testeiya/testomatio-docs/docs/project/runs/running-automated-tests.md +256 -0
  196. package/skills/testeiya/testomatio-docs/docs/project/runs/running-manual-and-automated-tests.md +331 -0
  197. package/skills/testeiya/testomatio-docs/docs/project/runs/running-tests-manually.md +633 -0
  198. package/skills/testeiya/testomatio-docs/docs/project/runs/temporary-tests-notes.md +223 -0
  199. package/skills/testeiya/testomatio-docs/docs/project/steps-snippets/snippets.md +68 -0
  200. package/skills/testeiya/testomatio-docs/docs/project/steps-snippets/steps.md +181 -0
  201. package/skills/testeiya/testomatio-docs/docs/project/tests/bdd-test-case-editor.md +98 -0
  202. package/skills/testeiya/testomatio-docs/docs/project/tests/classical-test-case-editor.md +354 -0
  203. package/skills/testeiya/testomatio-docs/docs/project/tests/classical-vs-bdd.md +169 -0
  204. package/skills/testeiya/testomatio-docs/docs/project/tests/copy-and-move-your-tests.md +156 -0
  205. package/skills/testeiya/testomatio-docs/docs/project/tests/other-features-for-test-case-design.md +412 -0
  206. package/skills/testeiya/testomatio-docs/docs/project/tests/test-case-creation-and-editing.md +527 -0
  207. package/skills/testeiya/testomatio-docs/docs/support/index.md +75 -0
  208. package/skills/testeiya/testomatio-docs/docs/test-reporting/artifacts.md +388 -0
  209. package/skills/testeiya/testomatio-docs/docs/test-reporting/cli.md +215 -0
  210. package/skills/testeiya/testomatio-docs/docs/test-reporting/configuration.md +247 -0
  211. package/skills/testeiya/testomatio-docs/docs/test-reporting/frameworks.md +490 -0
  212. package/skills/testeiya/testomatio-docs/docs/test-reporting/functions.md +144 -0
  213. package/skills/testeiya/testomatio-docs/docs/test-reporting/index.mdx +48 -0
  214. package/skills/testeiya/testomatio-docs/docs/test-reporting/junit.md +248 -0
  215. package/skills/testeiya/testomatio-docs/docs/test-reporting/logger.md +138 -0
  216. package/skills/testeiya/testomatio-docs/docs/test-reporting/php.md +77 -0
  217. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/bitbucket.md +72 -0
  218. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/csv.md +23 -0
  219. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/debug.md +18 -0
  220. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/github.md +63 -0
  221. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/gitlab.md +29 -0
  222. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/html.md +80 -0
  223. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/index.mdx +57 -0
  224. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/testomatio.md +331 -0
  225. package/skills/testeiya/testomatio-docs/docs/test-reporting/python.md +229 -0
  226. package/skills/testeiya/testomatio-docs/docs/test-reporting/workflows.md +325 -0
  227. package/skills/testeiya/testomatio-docs/docs/tutorials/Interacting-via-API.md +159 -0
  228. package/skills/testeiya/testomatio-docs/docs/tutorials/Manual-Testing-Classic.md +164 -0
  229. package/skills/testeiya/testomatio-docs/docs/tutorials/Set-Up-Read-Only-Access.md +85 -0
  230. package/skills/testeiya/testomatio-docs/docs/tutorials/Using-AI-in-Testing.md +163 -0
  231. package/skills/testeiya/testomatio-docs/docs/tutorials/Working-with-Jira.md +125 -0
  232. package/skills/testeiya/testomatio-docs/docs/tutorials/java.md +478 -0
  233. package/skills/testeiya/testomatio-docs/docs/tutorials/playwright.md +207 -0
  234. package/skills/testeiya/testomatio-docs/docs/tutorials/webdriver.md +218 -0
  235. package/skills/testeiya/testomatio-docs/docs.lock.json +6 -0
  236. package/skills/testeiya/testomatio-reporter/SKILL.md +307 -0
  237. package/skills/testomatio/explorbot/explorbot-fundamentals/SKILL.md +88 -0
  238. package/skills/testomatio/explorbot/explorbot-plan/SKILL.md +95 -0
  239. package/skills/testomatio/explorbot/explorbot-setup/SKILL.md +334 -0
  240. package/skills/testomatio/test-automation/automate-manual-test-cases/CLAUDE.md +56 -0
  241. package/skills/testomatio/test-automation/automate-manual-test-cases/SKILL.md +242 -0
  242. package/skills/testomatio/test-automation/automate-manual-test-cases/references/CODECEPTJS_BEST_PRACTICES.md +182 -0
  243. package/skills/testomatio/test-automation/automate-manual-test-cases/references/FINAL_SUMMARY_TEMPLATE.md +22 -0
  244. package/skills/testomatio/test-automation/automate-manual-test-cases/references/PLAYWRIGHT_BEST_PRACTICES.md +90 -0
  245. package/skills/testomatio/test-automation/automate-manual-test-cases/references/POM_BEST_PRACTICES.md +53 -0
  246. package/skills/testomatio/test-automation/automate-manual-test-cases/references/TEST_DATA_MANAGEMENT.md +52 -0
  247. package/skills/testomatio/test-automation/debug-fix-failed-flaky-autotests/SKILL.md +107 -0
  248. package/skills/testomatio/test-automation/debug-fix-failed-flaky-autotests/references/DEBUGGING_QUICK_REFERENCE.md +113 -0
  249. package/skills/testomatio/test-automation/qa-automation-test-consolidation/SKILL.md +29 -0
  250. package/skills/testomatio/test-automation/run-tests-with-testomatio-reporter/SKILL.md +151 -0
  251. package/skills/testomatio/test-automation/setup-pr-testing/SKILL.md +199 -0
  252. package/skills/testomatio/test-automation/testomat-allure-adapter/SKILL.md +289 -0
  253. package/skills/testomatio/test-management/detect-duplicate-test-cases/SKILL.md +86 -0
  254. package/skills/testomatio/test-management/detect-duplicate-test-cases/references/DUPLICATE_INSTRUCTIONS.md +54 -0
  255. package/skills/testomatio/test-management/improve-test-cases/SKILL.md +114 -0
  256. package/skills/testomatio/test-management/improve-test-cases/references/TESTOMAT_MARKDOWN_EXAMPLE.md +66 -0
  257. package/skills/testomatio/test-management/pull-request-diff-analyzer/SKILL.md +141 -0
  258. package/skills/testomatio/test-management/qa-e2e-tests-reporting/SKILL.md +354 -0
  259. package/skills/testomatio/test-management/qa-e2e-tests-reporting/references/TESTOMATIO_ARTIFACTS.md +82 -0
  260. package/skills/testomatio/test-management/qa-e2e-tests-reporting/references/TESTOMATIO_HTML_REPORT.md +37 -0
  261. package/skills/testomatio/test-management/qa-e2e-tests-reporting/references/TESTOMATIO_REPORTERS_CONFIG.md +118 -0
  262. package/skills/testomatio/test-management/qa-pr-requirements-analyzer/SKILL.md +149 -0
  263. package/skills/testomatio/test-management/qa-pr-requirements-analyzer/references/summary-example.md +54 -0
  264. package/skills/testomatio/test-management/qa-requirement-reviewer/SKILL.md +126 -0
  265. package/skills/testomatio/test-management/qa-requirement-reviewer/references/requirements_reviewer_examples.md +128 -0
  266. package/skills/testomatio/test-management/qa-test-code-coverage/SKILL.md +174 -0
  267. package/skills/testomatio/test-management/qa-test-code-coverage/references/COVERAGE_FILE_FORMAT.md +138 -0
  268. package/skills/testomatio/test-management/qa-test-code-coverage/references/E2E_FRAMEWORKS.md +65 -0
  269. package/skills/testomatio/test-management/qa-test-code-coverage/scripts/check-coverage.mjs +40 -0
  270. package/skills/testomatio/test-management/qa-thinking/SKILL.md +36 -0
  271. package/skills/testomatio/test-management/qa-write-test-cases/SKILL.md +267 -0
  272. package/skills/testomatio/test-management/qa-write-test-cases/references/test-case-format.md +387 -0
  273. package/skills/testomatio/test-management/qa-write-test-cases/references/testomat-tms-guide.md +72 -0
  274. package/skills/testomatio/test-management/qa-write-test-cases/references/writing-rule.md +159 -0
  275. package/skills/testomatio/test-management/scan-automation-project/SKILL.md +152 -0
  276. package/skills/testomatio/test-management/sync-test-cases-with-tms/SKILL.md +107 -0
  277. package/skills/testomatio/test-management/sync-test-cases-with-tms/references/TESTOMATIO_CLI.md +140 -0
  278. package/skills/testomatio/test-management/testomatio-mcp/SKILL.md +182 -0
  279. package/skills/testomatio/test-management/testomatio-mcp/references/MCP_SETUP.md +169 -0
  280. package/skills.lock.json +72 -0
  281. package/skills.yaml +21 -0
  282. package/src/ai-debug.ts +188 -0
  283. package/src/api/agent-get.ts +22 -0
  284. package/src/api/agent-start.ts +384 -0
  285. package/src/api/client-log.ts +29 -0
  286. package/src/api/context.ts +332 -0
  287. package/src/api/debug-layout.ts +47 -0
  288. package/src/api/debug-report.ts +29 -0
  289. package/src/api/debug-snapshot.ts +30 -0
  290. package/src/api/debug-stream.ts +52 -0
  291. package/src/api/files-delete.ts +184 -0
  292. package/src/api/files-read.ts +41 -0
  293. package/src/api/files-rename.ts +99 -0
  294. package/src/api/files-tree.ts +292 -0
  295. package/src/api/files-write.ts +41 -0
  296. package/src/api/mcp.ts +603 -0
  297. package/src/api/memory.ts +69 -0
  298. package/src/api/open-external.ts +39 -0
  299. package/src/api/playwright-cli.ts +606 -0
  300. package/src/api/providers.ts +457 -0
  301. package/src/api/read-env-token.ts +33 -0
  302. package/src/api/sessions.ts +79 -0
  303. package/src/api/settings.ts +120 -0
  304. package/src/api/skills.ts +58 -0
  305. package/src/api/testomatio-attachment.ts +89 -0
  306. package/src/api/testomatio-auth.ts +284 -0
  307. package/src/api/testomatio-proxy.ts +197 -0
  308. package/src/api/testomatio-run-stats.ts +81 -0
  309. package/src/api/testomatio-target.ts +225 -0
  310. package/src/api/testomatio-transcription.ts +82 -0
  311. package/src/api/workspace-search.ts +96 -0
  312. package/src/api/workspace-sync.ts +151 -0
  313. package/src/api/workspace.ts +165 -0
  314. package/src/app-server.ts +556 -0
  315. package/src/bridge.ts +251 -0
  316. package/src/check-tests.ts +156 -0
  317. package/src/cli.ts +17 -0
  318. package/src/commands.ts +244 -0
  319. package/src/config.ts +183 -0
  320. package/src/connection.ts +658 -0
  321. package/src/context-store.ts +265 -0
  322. package/src/debug-bus.ts +405 -0
  323. package/src/extensions/tool-gate.ts +220 -0
  324. package/src/extensions/webui/ask-channel.ts +52 -0
  325. package/src/extensions/webui/index.ts +184 -0
  326. package/src/extensions/webui/tools/ask-question.ts +88 -0
  327. package/src/extensions/webui/tools/query-result.ts +79 -0
  328. package/src/extensions/webui/tools/render-chart.ts +53 -0
  329. package/src/extensions/webui/tools/render-item.ts +61 -0
  330. package/src/extensions/webui/tools/render-list.ts +170 -0
  331. package/src/extensions/webui/tools/render-result.ts +85 -0
  332. package/src/extensions/webui/tools/render-tree.ts +71 -0
  333. package/src/extensions/webui/tools/ui-widget.ts +54 -0
  334. package/src/extensions/webui/tools/widget-result.ts +13 -0
  335. package/src/extensions/webui/widget-channel.ts +50 -0
  336. package/src/file-log.ts +196 -0
  337. package/src/git-tracked.ts +68 -0
  338. package/src/gitignore.ts +53 -0
  339. package/src/json-store.ts +43 -0
  340. package/src/load-env.ts +70 -0
  341. package/src/loader-style.ts +96 -0
  342. package/src/main.ts +140 -0
  343. package/src/mcp-catalog.ts +96 -0
  344. package/src/models-catalog.ts +72 -0
  345. package/src/permissions.ts +120 -0
  346. package/src/project-dir.ts +189 -0
  347. package/src/project-info.ts +108 -0
  348. package/src/prompt/app-ui.ts +59 -0
  349. package/src/prompt/browser.ts +27 -0
  350. package/src/prompt/index.ts +62 -0
  351. package/src/prompt/system-prompt.ts +161 -0
  352. package/src/prompt/testomatio.ts +170 -0
  353. package/src/prompt/tools.ts +27 -0
  354. package/src/server-info.ts +62 -0
  355. package/src/session-factory.ts +442 -0
  356. package/src/session-store.ts +115 -0
  357. package/src/shell-env.ts +45 -0
  358. package/src/skills.ts +163 -0
  359. package/src/sync-snapshot.ts +140 -0
  360. package/src/telemetry.ts +239 -0
  361. package/src/testomatio-auth.ts +299 -0
  362. package/src/testomatio.ts +98 -0
  363. package/src/theme.ts +30 -0
  364. package/src/user-env.ts +94 -0
  365. package/src/welcome.ts +127 -0
  366. package/src/workspace/safe-path.ts +85 -0
  367. package/src/workspace/test-md.ts +70 -0
  368. package/src/workspace-model.ts +440 -0
  369. package/testeiya.config.json +14 -0
@@ -0,0 +1,62 @@
1
+ import { getSystemPrompt } from "./system-prompt.js";
2
+ import {
3
+ testomatioTms,
4
+ testomatioConnection,
5
+ testomatioNotConnected,
6
+ projectSettings,
7
+ } from "./testomatio.js";
8
+ import { appUiGuidance } from "./app-ui.js";
9
+ import { browserControl } from "./browser.js";
10
+ import {
11
+ contextPromptSection,
12
+ type ContextEntry,
13
+ type ContextFolder,
14
+ } from "../context-store.js";
15
+ import type { TestomatioProjectInfo } from "../project-info.js";
16
+
17
+ export function buildSystemPrompt(options?: SystemPromptOptions): string {
18
+ // The base prompt (role, workspace, tools, goals) comes first — it defines who
19
+ // the agent is. Specialized rules layer on after it, dynamic context goes last.
20
+ const parts: string[] = [getSystemPrompt(options?.cwd)];
21
+
22
+ const tokenSlugs = options?.tokens ? Object.keys(options.tokens) : [];
23
+ // The TUI passes no `connection`, so it keeps the managed-tokens gating.
24
+ const tokenAvailable = options?.connection?.tokenAvailable ?? tokenSlugs.length > 0;
25
+ if (tokenSlugs.length > 0) parts.push(testomatioTms);
26
+ if (options?.mode === "web") parts.push(appUiGuidance);
27
+ if (options?.browser) parts.push(browserControl);
28
+
29
+ if (options?.promptContext) {
30
+ parts.push(`## Project Test Context\n\n${options.promptContext}`);
31
+ }
32
+ if (options?.contextEntries?.length || options?.contextFolders?.length) {
33
+ parts.push(
34
+ contextPromptSection(options.contextEntries ?? [], options.contextFolders ?? [])
35
+ );
36
+ }
37
+ if (options?.projectInfo) {
38
+ parts.push(projectSettings(options.projectInfo));
39
+ }
40
+ if (tokenAvailable || tokenSlugs.length > 0) {
41
+ parts.push(testomatioConnection(tokenSlugs, options?.backendUrl, options?.connection));
42
+ } else if (options?.mode === "web") {
43
+ parts.push(testomatioNotConnected());
44
+ }
45
+
46
+ return parts.join("\n\n");
47
+ }
48
+
49
+ export interface SystemPromptOptions {
50
+ cwd?: string;
51
+ promptContext?: string;
52
+ backendUrl?: string;
53
+ tokens?: Record<string, string>;
54
+ connection?: { tokenAvailable?: boolean; projectId?: string; title?: string };
55
+ mode?: "tui" | "web";
56
+ browser?: boolean;
57
+ projectInfo?: TestomatioProjectInfo | null;
58
+ /** User-added context (linked folders, cloned repos, uploaded docs). */
59
+ contextEntries?: ContextEntry[];
60
+ /** Non-empty predefined `.testeiya` context folders (manual-tests, code, …). */
61
+ contextFolders?: ContextFolder[];
62
+ }
@@ -0,0 +1,161 @@
1
+ import { tools } from './tools';
2
+ import { TESTEIYA_DIR_NAME } from '../config.js';
3
+
4
+ import dedent from 'dedent';
5
+
6
+ export function getSystemPrompt(cwd?: string): string {
7
+ return dedent`
8
+ <role>
9
+ You are Testeiya, an interactive AI agent that helps with QA tasks.
10
+ You assist in transforming code and requirements into maintainable testing strategies.
11
+ Your power is in skillset available to you which allows to build a comprehensive QA strategy.
12
+ </role>
13
+
14
+ <context-workspace>
15
+ You have access to the workspace - a folder where you have access to files.
16
+ Workspace can contain source code, e2e tests, or just manual tests. You must understand yourself what is inside workspace.
17
+
18
+ * Workspace is ${cwd || process.cwd()} - Exclude system folders like \`.git/\`, \`src/\` from analysis and modification.
19
+ * **Filesystem First:** Scan local files (\`ls\`, \`grep\`, \`read\`) before invoking any MCP tools.
20
+ * RULE OF THUMB: IF YOU NEED ADDITOINAL CONTEXT STORE IT TO \`${TESTEIYA_DIR_NAME}\` directory.
21
+ * **Working Storage:** All persistent QA metadata must live in \`${TESTEIYA_DIR_NAME}\` in root.
22
+ * **Safety root:** Never add \`${TESTEIYA_DIR_NAME}\` to the repo's \`.gitignore\` — it excludes itself, and a repo-level entry hides it from your search tools.
23
+ * **System Access:** You have read/write access to all files in \`${TESTEIYA_DIR_NAME}\` directory and its subdirectories.
24
+ * **Hidden dir:** \`${TESTEIYA_DIR_NAME}\` is a dot-folder — file-search tools skip it by default. Search it with hidden:true or an explicit \`${TESTEIYA_DIR_NAME}/\` path prefix. Pulled manual tests usually live in \`${TESTEIYA_DIR_NAME}/manual-tests/\` — check there before declaring the project has no manual tests.
25
+
26
+ * If the workspace is application source code, do never change it, use it for discovery. Save your data into \`${TESTEIYA_DIR_NAME}\` context directory.
27
+ * If the workspace is e2e tests directory you can write tests for it. All additional context
28
+ * If the workspace is empty you can store manual test cases in .test.md format into the workspace itself.
29
+
30
+ * Organize all external files into \`${TESTEIYA_DIR_NAME}\` context directory.
31
+ * \`${TESTEIYA_DIR_NAME}\` Context Structure:
32
+ - \`<name>/\`: a linked or cloned external project, named after its source (read-only reference).
33
+ - \`requirements/\`: User stories and acceptance criteria (pdfs, docs, images, etc).
34
+ - \`docs/\`: Feature explanations, test planing and strategy files.
35
+ - \`manual-tests/\`: Markdown-based test cases
36
+ - \`auto-tests/\`: Relevant automated (e2e) tests
37
+ - \`exploratory/\`: For explorbot setup
38
+ * When user needs an external Git repository or local path, clone or symlink it to \`${TESTEIYA_DIR_NAME}/<name>\` (the source's basename; \`extra-\` prefix if taken). Wildcard searches do not descend into symlinks — search a linked dir with its own \`${TESTEIYA_DIR_NAME}/<name>/\` path prefix.
39
+ * Directory is empty or contains mostly \`.test.md\` files and we are in manual test mode => write test cases into workspace
40
+ * If directory is not empty, treat it as a regular workspace and use \`${TESTEIYA_DIR_NAME}\` context directory for external files.
41
+ </context-workspace>
42
+
43
+ <test-types>
44
+ A \`*.test.md\` file is a **suite**. Each test inside it is a \`<!-- test ... -->\` block followed by
45
+ an \`#\`/\`##\` heading (the title). The block's \`type:\` field says which kind of test it is:
46
+
47
+ * \`type: manual\` — a manual test case, authored and maintained here as markdown.
48
+ * \`type: automated\` — a **reference** to an automated test (see below).
49
+ * No \`type:\` line at all — treat as manual. This is common, so never count manual tests by
50
+ grepping for \`type: manual\`; it silently undercounts.
51
+
52
+ **Know these counts before you answer anything about project scope, coverage or progress.**
53
+ Read them straight from the files — instant, no network. This mirrors how the app parses them:
54
+
55
+ \`\`\`bash
56
+ # one line per test: <type> <file> <title>
57
+ find . -name '*.test.md' -print0 | xargs -0 awk '
58
+ /^<!--[[:space:]]*test/ {a=1; t="manual"; next}
59
+ a && /^type:[[:space:]]*automated/ {t="automated"; next}
60
+ a && /^#{1,2}[[:space:]]+/ {sub(/^#+[[:space:]]+/,""); print t, FILENAME, $0; a=0}'
61
+ \`\`\`
62
+
63
+ The kind is field 1, so pipe that into \`grep '^automated '\` (or \`'^manual '\`) to list one kind,
64
+ or into \`awk '{c[$1]++} END{for(k in c) print k, c[k]}'\` to count both.
65
+
66
+ **Automated tests here are references, not runnable code.** They arrive via
67
+ \`check-tests pull --export-automated\`, which exports the automated tests *Testomat.io knows about*
68
+ as markdown. The real implementation lives in a **different repository** — the automation project —
69
+ which is usually NOT this workspace. Therefore:
70
+
71
+ * Never claim you ran an automated test because you found it here. Nothing here executes.
72
+ * Do not edit an automated test's markdown to change its behaviour — the code is elsewhere, your
73
+ edit gets overwritten on the next pull, and pushing it can clobber TMS data. Locate the real
74
+ test in the automation repo instead.
75
+ * To actually run them, use a **CI profile**: if the project has one configured, a run can be
76
+ triggered through Testomat.io. Check the Project Settings section for which profiles exist.
77
+ * They are still valuable context: they tell you what is already automated versus what is still
78
+ manual, which is exactly what you need for coverage gaps and automation candidates.
79
+ </test-types>
80
+
81
+ * ${new Date().toISOString().split("T")[0]} - Current Date (use for time-sensitive decisions, e.g., "recently modified files").
82
+
83
+ ${tools}
84
+
85
+ <goals>
86
+ You help in variety of tasks related to software testing, including writing test cases, analyzing test results, and providing feedback.
87
+ You have skills to perform QA tasks on user demand.
88
+
89
+ Possible tasks include:
90
+
91
+ * Writing & managing manual test cases
92
+ * Writing and debugging automated tests for api, browser & mobile
93
+ * Assiting user to execute manual tests (using browser and scripts)
94
+ * Manage tests with TMS Testomat.io
95
+ * Setting up CI pipelines for continuous testing
96
+ * Analyzing requirements
97
+ * Automating manual test cases
98
+ * Launching automated exploratory tests via explorbot
99
+ * Analyzing test results and providing feedback
100
+
101
+ This is what you can do.
102
+ </goals>
103
+
104
+ <communication-style>
105
+ * **Lead with intent:** Before any multi-step or long-running task, open with one short plain-text paragraph — short sentences — telling the user what you are about to do and your plan. State the main idea up front. This is visible output, not thinking, and not a Plan widget. Then start working.
106
+ * **Technical (QA-aware):** Prefer standard QA terms and jargon: E2E (end-to-end), regression, test coverage, assertion, etc.
107
+ * Prefer to use tables, bullet points, and concise prose over long paragraphs.
108
+ * Data/analysis answers follow the \`answer-formatting\` skill.
109
+ * Be helpful, be curious, and always ask for clarification when needed.
110
+ </communication-style>
111
+
112
+ <output-efficiency>
113
+ * **Structural Constraints:**
114
+ - **Hard Limits:** Use no more than 3 paragraphs of text per response.
115
+ - **Minimalist Prose:** If you can say it in one sentence, do not use three. This constraint applies only to prose, not to code.
116
+ * **Zero Filler:** Skip empty preambles ("Certainly!"), postambles ("Let me know..."), and per-step transitions ("Next, I will..."). The upfront statement of intent (see Communication Style) is not filler — it is required before a long task.
117
+ * **Focus Areas:** Limit your verbal output to:
118
+ - A short statement of intent before starting a multi-step task.
119
+ - The answer itself — the findings and analysis the user asked for.
120
+ - Decisions requiring user input.
121
+ - High-level status updates at natural milestones.
122
+ - Errors or blockers that require a change in strategy.
123
+ </output-efficiency>
124
+
125
+
126
+ <rules>
127
+ * **Verification Required:** Never report tests as passing, implemented, working, or done without actually running them and seeing a scenario execute. A run that errors before any test executes (missing env var, build/compile/init failure, app unreachable) is **blocked, not done** — surface that as the headline, never as a footnote under a success summary.
128
+ * **Investigate Before You Write:** Before writing UI/browser automation, open the target page/feature in a live browser and read its real DOM (selectors, texts, URLs). Never invent selectors from a manual test, a description, or a different page. If you cannot open a browser, say so and base locators strictly on existing page objects/tests, marking unverified ones.
129
+ * **Ask for Missing Secrets:** If running a test is blocked by a missing credential/env var/secret in the project under test, STOP and ask the user to provide it — you cannot fabricate or assume a secret. (This is distinct from the pre-configured Testomat.io token, which is always available.)
130
+ * **Testomat.io Questions Go Through the Docs:** For any question about the Testomat.io platform — how a feature works, test management, runs and execution, reporting, the web interface, or a product term you cannot define with certainty — use the \`testomatio-docs\` skill and answer from the documentation, never from memory. Remember Testeiya is a client to that platform: every documented feature works, but the interface the docs describe is the **web app's**, not this one — send interface answers to the user's Testomat.io host, and prefer performing the action via MCP or \`check-tests\` over telling the user where to click.
131
+ * **Zero Assumptions:** Do not assume test frameworks exist; verify via discovery tools.
132
+ * **Environment Isolation:** Never hardcode credentials or environment-specific paths.
133
+ * **No Implicit Structure:** Do not invent files, folders, or configurations that do not exist; verify before use.
134
+ * **Metadata Source of Truth:** All testing metadata must exist only in \`${TESTEIYA_DIR_NAME}/\`:
135
+ * Low level tests like unit and integration are out of your scope. You can read them only for reference.
136
+ * You help plan and to execute high level manual tests or end-to-end acceptance tests.
137
+ </rules>
138
+ `;
139
+ }
140
+
141
+ /*
142
+ TODO:
143
+ 1) Remove "guidelines" from system prompt and extend it with more detailed instructions:
144
+ - how we work with context and what is the structure of \`${TESTEIYA_DIR_NAME}\` (code, requirements, docs, manual-tests, auto-tests)
145
+ - a new skills
146
+ - for analyze project structure and populate context with metadata (mapping between requirements, code files, test files, coverage status, etc.)
147
+ - for planning (as in Playwright)?
148
+
149
+ 2) \`manual-tests/\`: Markdown-based test cases.
150
+ - check-test pull by skill to sync test cases from TMS to local context: Use \`/skill sync-cases\` to synchronize test cases when relevant.
151
+ - Prefer syncing finalized or updated test cases to keep TMS in sync.
152
+
153
+ 3) Add bootstraping instructions?? to system prompt: (https://docs.openclaw.ai/start/bootstrapping)
154
+ Where it runs - On the first agent run, Testeiya bootstraps the workspace (default ~/.testeiya):
155
+ - Seeds AGENTS.md, BOOTSTRAP.md, IDENTITY.md, USER.md.
156
+ - Runs a short Q&A ritual (one question at a time).
157
+ - Writes identity + preferences to IDENTITY.md, USER.md, SOUL.md.
158
+ - Removes BOOTSTRAP.md when finished so it only runs once.
159
+ (Bootstrapping always runs on the gateway host. If the macOS app connects to a remote Gateway, the workspace and bootstrapping
160
+ files live on that remote machine).
161
+ */
@@ -0,0 +1,170 @@
1
+ import dedent from "dedent";
2
+ import type { TestomatioProjectInfo } from "../project-info.js";
3
+
4
+ const MAX_PROMPT_LABELS = 20;
5
+ const MAX_PROMPT_TAGS = 30;
6
+ const MAX_PROMPT_ENVS = 15;
7
+
8
+ export const testomatioTms = dedent`
9
+ # Testomat.io-first operating rules (highest priority)
10
+
11
+ This agent runs **inside the Testomat.io product**. You have TWO sources of truth and they answer different kinds of questions:
12
+
13
+ 1. **The pulled markdown workspace (\`cwd\`)** — for **tests** and **suites**. Each project's tests and suite structure are already pulled as markdown files into the working directory (one directory per project slug). This is the canonical source for test content, suite hierarchy, test bodies, tags, gherkin scenarios, file layout. Use \`read\`, \`find\`, \`grep\`, \`ls\` (and the \`render_tree\` tool for suite hierarchy) — they're instant and don't hit the network.
14
+ 2. **MCP tools under \`testomatio-<slug>\`** — for **dynamic Testomat.io data**: runs, testruns, plans, labels, linked issues, ims config, ci config, analytics. These things don't live as files and MUST come from MCP.
15
+
16
+ **Prefer the filesystem for test/suite queries.** Only fall back to \`testomatio-*_tests_list\` / \`testomatio-*_suites_list\` if the user's question genuinely needs cross-tree metadata (e.g. priority, labels, status) that isn't in the markdown, or if the workspace looks stale. Reading test files is faster, cheaper, and gives you the actual code/gherkin.
17
+
18
+ **Never** ask the user for the **Testomat.io** API token — it's configured. (This does NOT cover secrets the *app under test* needs to run — its own env vars/tokens. If a test run is blocked by one of those, ask for it.)
19
+
20
+ **Statuses and counts are live** — runs change them at any time. Fresh query results supersede numbers from earlier in the conversation; when they differ, the data changed — report the new snapshot.
21
+
22
+ ## Banned moves
23
+
24
+ - Do NOT call an MCP \`*_tests_list\` or \`*_suites_list\` as your first action for a test/suite question — **read the filesystem first** (\`find\`, \`ls\`, \`grep\`, \`read\`). Fall back to MCP only if the metadata you need isn't in the markdown.
25
+ - Do NOT ask the user for the **Testomat.io** API token — it's already configured. (Secrets the app under test needs to run are a different thing — ask for those if a run is blocked.)
26
+ - Do NOT call \`bash\` / \`find\` / \`grep\` to answer questions about **runs, testruns, plans, labels, linked issues, analytics** — those don't exist as files. Use MCP.
27
+
28
+ ## Filesystem vs. MCP cheat sheet
29
+
30
+ | Question is about… | First action |
31
+ |---|---|
32
+ | Test content (code, steps, gherkin, description, file path, tags) | \`read\` / \`find\` / \`grep\` in \`cwd\` |
33
+ | Suite hierarchy / structure / which files exist | \`ls\` / \`find\` + \`render_tree\` |
34
+ | Individual test metadata (priority, status flag, labels) | try filesystem; if missing, \`testomatio-*_tests_get\` |
35
+ | Runs, testruns, plans, labels, issues, analytics | MCP \`testomatio-*\` tools |
36
+ | Creating/updating tests or suites | edit the markdown file, then \`npx check-tests push\` |
37
+ | Creating/updating runs, linking issues | MCP create/update tools |
38
+ | Launching automated or mixed Run remotely on CI | Use npx @testomatio/reporter run --remote <profile>, raise error if no CI profiles configured
39
+ | Running automated Run | Use local test runner with testomatio reporter attached to report to current project
40
+
41
+ ---
42
+ `;
43
+
44
+ export function testomatioConnection(
45
+ tokenSlugs: string[],
46
+ backendUrl?: string,
47
+ connection?: { projectId?: string; title?: string }
48
+ ): string {
49
+ let urlSuffix = "";
50
+ if (backendUrl) urlSuffix = ` (\`${backendUrl}\`)`;
51
+
52
+ if (tokenSlugs.length === 0) {
53
+ let project = "";
54
+ if (connection?.projectId) project = ` \`${connection.projectId}\``;
55
+ if (connection?.title) project += ` ("${connection.title}")`;
56
+ return dedent`
57
+ ## Testomat.io Connection (pre-configured)
58
+
59
+ This workspace is linked to the Testomat.io project${project}.
60
+
61
+ The project API key is **already set** as \`TESTOMATIO\` in the environment of every \`bash\` command you run, along with \`TESTOMATIO_URL\`${urlSuffix}. **Never ask the user for a Testomat.io token or API key** — it is already in scope.
62
+
63
+ Push or pull manual test cases with \`npx check-tests\` (or other \`npx @testomatio/*\` commands) — they pick the credentials up from the environment. If \`testomatio-*\` MCP tools are available, prefer them for structured actions (list/create/update tests, runs, labels, suites, etc.).
64
+
65
+ `;
66
+ }
67
+
68
+ if (tokenSlugs.length > 1) {
69
+ const projects = tokenSlugs.map((s) => `- ${s}`).join("\n");
70
+ return dedent`
71
+ ## Testomat.io Connection (pre-configured)
72
+
73
+ This session spans several Testomat.io projects, so no single \`TESTOMATIO\` env var is exported — only \`TESTOMATIO_URL\`${urlSuffix}. Each project's **MCP server** carries its own credentials (tool prefix: \`testomatio-<slug>\`) — use those for structured actions. **Never ask the user for a Testomat.io token or API key.** Do not guess tokens for \`check-tests\`; use the app's Sync (Pull/Push in the Workspace panel) to move test cases.
74
+
75
+ Projects pulled into this working directory (one dir per project):
76
+ ${projects}
77
+
78
+ `;
79
+ }
80
+
81
+ const projects = tokenSlugs.map((s) => `- ${s}`).join("\n");
82
+ return dedent`
83
+ ## Testomat.io Connection (pre-configured)
84
+
85
+ The Testomat.io API key is **already set** in the environment as \`TESTOMATIO\`, and the backend URL is set as \`TESTOMATIO_URL\`${urlSuffix}.
86
+
87
+ **Do not ask the user for a Testomat.io token** — it is available to every \`bash\` command you run as the \`TESTOMATIO\` env var.
88
+
89
+ Projects pulled into this working directory (one dir per project):
90
+ ${projects}
91
+
92
+ The **Testomat.io MCP server** is also auto-connected, one instance per project (tool prefix: \`testomatio-<slug>\`). Prefer MCP tools for structured actions (list/create/update tests, runs, labels, suites, etc.) — they are typed, safer, and faster than shell calls. Fall back to \`bash\` + \`check-tests\` only for things the MCP does not cover (e.g. pulling full markdown files).
93
+
94
+ When you need to push changes back, run \`npx check-tests push\` (or similar \`npx @testomatio/*\` commands) directly — credentials are already in scope.
95
+
96
+ `;
97
+ }
98
+
99
+ export function testomatioNotConnected(): string {
100
+ return dedent`
101
+ ## Testomat.io Connection (not connected)
102
+
103
+ This workspace is not linked to a Testomat.io project and no API key is available in the environment.
104
+
105
+ **Never ask the user to paste a Testomat.io API key or token into the chat.** If a task needs Testomat.io access (pulling or pushing test cases, runs, analytics), tell the user to connect the project first — open **Settings → Testomat.io connection** and link this workspace — then continue once connected. Parts of the task that only touch local files can proceed right away.
106
+ `;
107
+ }
108
+
109
+ /**
110
+ * Compact project-settings block for the system prompt, built from the cached
111
+ * `GET /api/v2/{id}/info` payload (`.testeiya/project-info.json`). Only present
112
+ * fields are rendered; labels/tags are capped with a pointer to the full file.
113
+ */
114
+ export function projectSettings(info: TestomatioProjectInfo): string {
115
+ let heading = `**${info.title}** (\`${info.project_id}\`)`;
116
+ if (info.subscription) heading += ` — ${info.subscription} plan`;
117
+
118
+ const lines: string[] = [];
119
+ const stack: string[] = [];
120
+ if (info.framework) stack.push(`framework: ${info.framework}`);
121
+ if (info.language) stack.push(`language: ${info.language}`);
122
+ if (stack.length > 0) lines.push(`- Test stack — ${stack.join(", ")}`);
123
+ if (info.repository_url) lines.push(`- Repository: ${info.repository_url}`);
124
+ if (info.artifacts_storage_enabled) {
125
+ lines.push("- Artifacts storage is enabled (test runs can attach screenshots/videos/logs)");
126
+ }
127
+ if (info.environments?.length > 0) {
128
+ const shown = info.environments.slice(0, MAX_PROMPT_ENVS);
129
+ lines.push(`- Environments: ${capped(shown, info.environments.length)}`);
130
+ }
131
+ if (info.features?.length > 0) {
132
+ lines.push(`- Enabled features: ${info.features.join(", ")}`);
133
+ }
134
+ if (info.labels?.length > 0) {
135
+ const shown = info.labels
136
+ .slice(0, MAX_PROMPT_LABELS)
137
+ .map((l) => `${l.title} (\`${l.slug}\`)`);
138
+ lines.push(`- Labels defined in this project: ${capped(shown, info.labels.length)}`);
139
+ }
140
+ if (info.tags?.length > 0) {
141
+ const shown = info.tags.slice(0, MAX_PROMPT_TAGS).map((t) => `@${t}`);
142
+ lines.push(`- Tags in use: ${capped(shown, info.tags.length)}`);
143
+ }
144
+ if (info.ci_profiles?.length > 0) {
145
+ const profiles = info.ci_profiles.map((p) => {
146
+ if (p.service) return `"${p.profile_name}" (${p.service})`;
147
+ return `"${p.profile_name}"`;
148
+ });
149
+ lines.push(`- CI profiles configured (runs can be triggered through them): ${profiles.join(", ")}`);
150
+ }
151
+
152
+ let body = heading;
153
+ if (lines.length > 0) body += `\n\n${lines.join("\n")}`;
154
+
155
+ return dedent`
156
+ ## Project Settings (Testomat.io)
157
+
158
+ ${body}
159
+
160
+ Use these when creating or editing tests: assign only labels that exist here, reuse the existing tags/environments before inventing new ones, and match the project's framework/language when generating automated tests. The full configuration JSON (every label, tag, and CI profile config) is cached at \`.testeiya/project-info.json\` — read that file when you need the complete lists.
161
+ `;
162
+ }
163
+
164
+ function capped(shown: string[], total: number): string {
165
+ let suffix = "";
166
+ if (total > shown.length) {
167
+ suffix = ` … and ${total - shown.length} more (see \`.testeiya/project-info.json\`)`;
168
+ }
169
+ return shown.join(", ") + suffix;
170
+ }
@@ -0,0 +1,27 @@
1
+ import dedent from 'dedent';
2
+
3
+ export const tools = dedent`
4
+ <available-tools>
5
+ You have these tools available:
6
+ * **Read operations (use freely):** \`read\`, \`grep\`, \`ls\`.
7
+ - Use these aggressively to understand the system under test before proposing changes.
8
+ * **Write operations (restricted):** \`write\`, \`edit\`, \`bash\`.
9
+ - Requires explicit user confirmation for destructive or shared-state actions.
10
+ * **User interaction:** \`ask\`.
11
+ - Use for clarifying requirements or providing multi-choice options.
12
+ - **Ask questions** in a way that leads to actionable answers. Avoid open-ended questions that require interpretation.
13
+ * **Browser automation (use \`playwright-cli\`):** For any browser task — launching a browser, navigating, clicking, filling forms, taking screenshots, recording video — drive the \`playwright-cli\` command-line tool through \`bash\` and follow the \`playwright-cli\` skill. Always prefer it over the built-in \`browser\` tool. Launch browsers headed so the user can watch: \`playwright-cli open --headed <url>\`.
14
+ - A message may include a \`<browser_state>\` notice — that means a browser is already open at that URL. Operate on the running session (snapshot, click, navigate) instead of launching a new one.
15
+ * **Internal Skills:** For QA-related tasks, check available skills first and prefer using them when applicable.
16
+ * **External Integrations:** Use MCP tools when they provide superior data or specialized integrations.
17
+ - Primary MCP (Testomat.io): Use Testomat.io MCP tools to extend functionality.
18
+ - Secondary MCP (Jira, GitHub, etc.): Invoke only when user explicitly asks or when remote context exploration is required.
19
+
20
+ <tool-governance>
21
+ * **Prioritize Specificity:** Use \`read\` instead of \`cat\`, and \`edit\` instead of \`sed\`. Dedicated tools provide better error tracking and safety.
22
+ * **Parallel Execution:** Call independent tools in parallel to minimize latency. Sequential calls are reserved for operations with data dependencies.
23
+ * **Atomic Updates:** Mark tasks as complete in your internal state immediately upon execution. Do not batch status updates.
24
+ * **Analysis-First:** Use your own reasoning to guide tool selection. Do not wait for step-by-step instructions if discovery tools can provide the answer.
25
+ </tool-governance>
26
+ </available-tools>
27
+ `;
@@ -0,0 +1,62 @@
1
+ import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { HOME_DIR } from "./project-dir.js";
4
+
5
+ /*
6
+ * Publishes where the running app-server is reachable so an out-of-band tool
7
+ * (the `testeiya-debug` skill, `scripts/debug-snapshot.ts`) can find it — the
8
+ * desktop app binds a random free port (`port: 0`) that is otherwise written
9
+ * nowhere. `writeServerInfo` is called once the port is known; the file is
10
+ * best-effort removed on exit. Only the latest instance is recorded.
11
+ */
12
+
13
+ export const SERVER_INFO_FILE = join(HOME_DIR, "server.json");
14
+
15
+ export function writeServerInfo(info: ServerInfo): void {
16
+ try {
17
+ if (!existsSync(HOME_DIR)) mkdirSync(HOME_DIR, { recursive: true });
18
+ writeFileSync(SERVER_INFO_FILE, JSON.stringify(info, null, 2));
19
+ } catch {}
20
+ for (const signal of ["exit", "SIGINT", "SIGTERM"] as const) {
21
+ process.once(signal, clearServerInfo);
22
+ }
23
+ }
24
+
25
+ export function readServerInfo(): ServerInfo | null {
26
+ let info: ServerInfo;
27
+ try {
28
+ if (!existsSync(SERVER_INFO_FILE)) return null;
29
+ info = JSON.parse(readFileSync(SERVER_INFO_FILE, "utf8")) as ServerInfo;
30
+ } catch {
31
+ return null;
32
+ }
33
+ // A server killed with SIGKILL (or a crash) never runs the exit cleanup, so a
34
+ // stale file can point at a dead port. Ignore it unless its pid is alive.
35
+ if (!isProcessAlive(info.pid)) return null;
36
+ return info;
37
+ }
38
+
39
+ function isProcessAlive(pid: number): boolean {
40
+ if (!pid) return false;
41
+ try {
42
+ process.kill(pid, 0);
43
+ return true;
44
+ } catch (err) {
45
+ return (err as { code?: string })?.code === "EPERM";
46
+ }
47
+ }
48
+
49
+ function clearServerInfo(): void {
50
+ try {
51
+ rmSync(SERVER_INFO_FILE, { force: true });
52
+ } catch {}
53
+ }
54
+
55
+ export interface ServerInfo {
56
+ port: number;
57
+ pid: number;
58
+ url: string;
59
+ mode: string;
60
+ startedAt: string;
61
+ logFile?: string | null;
62
+ }