testeiya 0.2.0 → 0.3.9

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 (412) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +37 -175
  3. package/dist/prompt/context.js +79 -0
  4. package/dist/prompt/context.js.map +1 -0
  5. package/dist/prompt/index.js +56 -0
  6. package/dist/prompt/index.js.map +1 -0
  7. package/dist/prompt/print.js +22 -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} +24 -21
  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 +49 -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 +72 -0
  20. package/dist/src/args.js.map +1 -0
  21. package/dist/src/cli.js +61 -0
  22. package/dist/src/cli.js.map +1 -0
  23. package/dist/src/env.js +69 -0
  24. package/dist/src/env.js.map +1 -0
  25. package/dist/src/mcp-extension.js +9 -0
  26. package/dist/src/mcp-extension.js.map +1 -0
  27. package/dist/src/mcp.js +139 -0
  28. package/dist/src/mcp.js.map +1 -0
  29. package/dist/src/model.js +66 -0
  30. package/dist/src/model.js.map +1 -0
  31. package/dist/src/result.js +41 -0
  32. package/dist/src/result.js.map +1 -0
  33. package/dist/src/run.js +199 -0
  34. package/dist/src/run.js.map +1 -0
  35. package/dist/src/session.js +77 -0
  36. package/dist/src/session.js.map +1 -0
  37. package/dist/vendor/mcp.js +14801 -0
  38. package/mcp-tools.json +2967 -0
  39. package/package.json +29 -41
  40. package/prompt/context.ts +101 -0
  41. package/prompt/index.ts +93 -0
  42. package/prompt/print.ts +23 -0
  43. package/prompt/project-info.ts +30 -0
  44. package/prompt/system-prompt.ts +173 -0
  45. package/{src/prompt → prompt}/testomatio.ts +119 -8
  46. package/{src/prompt → prompt}/tools.ts +30 -8
  47. package/prompt/vocab.ts +7 -0
  48. package/{skills.lock.json → skills/skills.lock.json} +11 -7
  49. package/skills/skills.yaml +34 -0
  50. package/models.catalog.json +0 -6963
  51. package/skills/codeceptjs/ci-fix-tests/SKILL.md +0 -120
  52. package/skills/codeceptjs/codeceptjs-auth/SKILL.md +0 -158
  53. package/skills/codeceptjs/codeceptjs-exploration/SKILL.md +0 -91
  54. package/skills/codeceptjs/codeceptjs-fundamentals/SKILL.md +0 -158
  55. package/skills/codeceptjs/codeceptjs-run-analysis/SKILL.md +0 -90
  56. package/skills/codeceptjs/debugging-codeceptjs-tests/SKILL.md +0 -234
  57. package/skills/codeceptjs/migrate-codeceptjs-4/SKILL.md +0 -110
  58. package/skills/codeceptjs/migrate-cypress-to-codeceptjs/SKILL.md +0 -306
  59. package/skills/codeceptjs/migrate-protractor-to-codeceptjs/SKILL.md +0 -352
  60. package/skills/codeceptjs/migrate-selenium-java-to-codeceptjs/SKILL.md +0 -472
  61. package/skills/codeceptjs/migrate-testcafe-to-codeceptjs/SKILL.md +0 -350
  62. package/skills/codeceptjs/refactoring-codeceptjs-tests/SKILL.md +0 -81
  63. package/skills/codeceptjs/writing-codeceptjs-tests/SKILL.md +0 -206
  64. package/skills/playwright-best-practices-skill/LICENSE.md +0 -7
  65. package/skills/playwright-best-practices-skill/README.md +0 -147
  66. package/skills/playwright-best-practices-skill/SKILL.md +0 -303
  67. package/skills/playwright-best-practices-skill/advanced/authentication-flows.md +0 -360
  68. package/skills/playwright-best-practices-skill/advanced/authentication.md +0 -871
  69. package/skills/playwright-best-practices-skill/advanced/clock-mocking.md +0 -364
  70. package/skills/playwright-best-practices-skill/advanced/mobile-testing.md +0 -409
  71. package/skills/playwright-best-practices-skill/advanced/multi-context.md +0 -288
  72. package/skills/playwright-best-practices-skill/advanced/multi-user.md +0 -393
  73. package/skills/playwright-best-practices-skill/advanced/network-advanced.md +0 -452
  74. package/skills/playwright-best-practices-skill/advanced/third-party.md +0 -464
  75. package/skills/playwright-best-practices-skill/architecture/pom-vs-fixtures.md +0 -363
  76. package/skills/playwright-best-practices-skill/architecture/test-architecture.md +0 -369
  77. package/skills/playwright-best-practices-skill/architecture/when-to-mock.md +0 -383
  78. package/skills/playwright-best-practices-skill/browser-apis/browser-apis.md +0 -391
  79. package/skills/playwright-best-practices-skill/browser-apis/iframes.md +0 -403
  80. package/skills/playwright-best-practices-skill/browser-apis/service-workers.md +0 -504
  81. package/skills/playwright-best-practices-skill/browser-apis/websockets.md +0 -403
  82. package/skills/playwright-best-practices-skill/core/annotations.md +0 -424
  83. package/skills/playwright-best-practices-skill/core/assertions-waiting.md +0 -361
  84. package/skills/playwright-best-practices-skill/core/configuration.md +0 -452
  85. package/skills/playwright-best-practices-skill/core/fixtures-hooks.md +0 -417
  86. package/skills/playwright-best-practices-skill/core/global-setup.md +0 -434
  87. package/skills/playwright-best-practices-skill/core/locators.md +0 -242
  88. package/skills/playwright-best-practices-skill/core/page-object-model.md +0 -315
  89. package/skills/playwright-best-practices-skill/core/projects-dependencies.md +0 -453
  90. package/skills/playwright-best-practices-skill/core/test-data.md +0 -492
  91. package/skills/playwright-best-practices-skill/core/test-suite-structure.md +0 -361
  92. package/skills/playwright-best-practices-skill/core/test-tags.md +0 -298
  93. package/skills/playwright-best-practices-skill/debugging/console-errors.md +0 -420
  94. package/skills/playwright-best-practices-skill/debugging/debugging.md +0 -504
  95. package/skills/playwright-best-practices-skill/debugging/error-testing.md +0 -360
  96. package/skills/playwright-best-practices-skill/debugging/flaky-tests.md +0 -496
  97. package/skills/playwright-best-practices-skill/frameworks/angular.md +0 -530
  98. package/skills/playwright-best-practices-skill/frameworks/nextjs.md +0 -469
  99. package/skills/playwright-best-practices-skill/frameworks/react.md +0 -531
  100. package/skills/playwright-best-practices-skill/frameworks/vue.md +0 -574
  101. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/ci-cd.md +0 -468
  102. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/docker.md +0 -283
  103. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/github-actions.md +0 -546
  104. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/gitlab.md +0 -397
  105. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/other-providers.md +0 -521
  106. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/parallel-sharding.md +0 -371
  107. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/performance.md +0 -453
  108. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/reporting.md +0 -424
  109. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/test-coverage.md +0 -497
  110. package/skills/playwright-best-practices-skill/testing-patterns/accessibility.md +0 -359
  111. package/skills/playwright-best-practices-skill/testing-patterns/api-testing.md +0 -719
  112. package/skills/playwright-best-practices-skill/testing-patterns/browser-extensions.md +0 -506
  113. package/skills/playwright-best-practices-skill/testing-patterns/canvas-webgl.md +0 -493
  114. package/skills/playwright-best-practices-skill/testing-patterns/component-testing.md +0 -500
  115. package/skills/playwright-best-practices-skill/testing-patterns/drag-drop.md +0 -576
  116. package/skills/playwright-best-practices-skill/testing-patterns/electron.md +0 -509
  117. package/skills/playwright-best-practices-skill/testing-patterns/file-operations.md +0 -377
  118. package/skills/playwright-best-practices-skill/testing-patterns/file-upload-download.md +0 -562
  119. package/skills/playwright-best-practices-skill/testing-patterns/forms-validation.md +0 -561
  120. package/skills/playwright-best-practices-skill/testing-patterns/graphql-testing.md +0 -331
  121. package/skills/playwright-best-practices-skill/testing-patterns/i18n.md +0 -508
  122. package/skills/playwright-best-practices-skill/testing-patterns/performance-testing.md +0 -476
  123. package/skills/playwright-best-practices-skill/testing-patterns/security-testing.md +0 -430
  124. package/skills/playwright-best-practices-skill/testing-patterns/visual-regression.md +0 -634
  125. package/skills/playwright-cli/SKILL.md +0 -420
  126. package/skills/playwright-cli/references/element-attributes.md +0 -23
  127. package/skills/playwright-cli/references/playwright-tests.md +0 -39
  128. package/skills/playwright-cli/references/request-mocking.md +0 -87
  129. package/skills/playwright-cli/references/running-code.md +0 -241
  130. package/skills/playwright-cli/references/session-management.md +0 -225
  131. package/skills/playwright-cli/references/storage-state.md +0 -275
  132. package/skills/playwright-cli/references/test-generation.md +0 -433
  133. package/skills/playwright-cli/references/tracing.md +0 -139
  134. package/skills/playwright-cli/references/video-recording.md +0 -143
  135. package/skills/testeiya/README.md +0 -29
  136. package/skills/testeiya/answer-formatting/SKILL.md +0 -30
  137. package/skills/testeiya/check-cucumber/SKILL.md +0 -200
  138. package/skills/testeiya/check-tests/SKILL.md +0 -260
  139. package/skills/testeiya/manual-run-assistant/SKILL.md +0 -61
  140. package/skills/testeiya/testomatio-docs/INDEX.md +0 -175
  141. package/skills/testeiya/testomatio-docs/SKILL.md +0 -102
  142. package/skills/testeiya/testomatio-docs/docs/advanced/ai-powered-features/ai-agents.md +0 -144
  143. package/skills/testeiya/testomatio-docs/docs/advanced/ai-powered-features/ai-powered-features.md +0 -531
  144. package/skills/testeiya/testomatio-docs/docs/advanced/ai-powered-features/ai-requirements.md +0 -437
  145. package/skills/testeiya/testomatio-docs/docs/advanced/api-access/index.md +0 -191
  146. package/skills/testeiya/testomatio-docs/docs/advanced/branches-folder/index.md +0 -277
  147. package/skills/testeiya/testomatio-docs/docs/advanced/bulk-edit-folder/bulk-edit-demos.mdx +0 -39
  148. package/skills/testeiya/testomatio-docs/docs/advanced/bulk-edit-folder/bulk-edit-on-suite-and-test-level.md +0 -122
  149. package/skills/testeiya/testomatio-docs/docs/advanced/bulk-edit-folder/what-is-bulk-edit.md +0 -170
  150. package/skills/testeiya/testomatio-docs/docs/advanced/jira-plugin/branches.md +0 -53
  151. package/skills/testeiya/testomatio-docs/docs/advanced/jira-plugin/index.mdx +0 -98
  152. package/skills/testeiya/testomatio-docs/docs/advanced/jira-plugin/jira-issue.md +0 -151
  153. package/skills/testeiya/testomatio-docs/docs/advanced/jira-plugin/runs-and-reports.md +0 -377
  154. package/skills/testeiya/testomatio-docs/docs/advanced/jira-plugin/work-in-jira.md +0 -267
  155. package/skills/testeiya/testomatio-docs/docs/advanced/living-doc/index.md +0 -138
  156. package/skills/testeiya/testomatio-docs/docs/advanced/milestones/index.md +0 -220
  157. package/skills/testeiya/testomatio-docs/docs/advanced/shortcuts/index.md +0 -48
  158. package/skills/testeiya/testomatio-docs/docs/advanced/tags-labels/labels-and-custom-fields.md +0 -201
  159. package/skills/testeiya/testomatio-docs/docs/advanced/tags-labels/tags-or-labels.md +0 -94
  160. package/skills/testeiya/testomatio-docs/docs/advanced/tags-labels/tags.md +0 -243
  161. package/skills/testeiya/testomatio-docs/docs/advanced/test-artifacts/index.md +0 -135
  162. package/skills/testeiya/testomatio-docs/docs/advanced/tql/index.md +0 -394
  163. package/skills/testeiya/testomatio-docs/docs/getting-started/index.md +0 -290
  164. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/azure.md +0 -96
  165. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/bamboo.md +0 -94
  166. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/bitbucket.md +0 -106
  167. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/circle.md +0 -115
  168. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/github.md +0 -120
  169. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/gitlab.md +0 -88
  170. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/index.mdx +0 -151
  171. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/jenkins.md +0 -121
  172. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/teamcity.md +0 -96
  173. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/azure.md +0 -31
  174. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/clickup.md +0 -54
  175. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/confluence.md +0 -34
  176. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/github.md +0 -31
  177. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/gitlab.md +0 -93
  178. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/index.md +0 -131
  179. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/jira.md +0 -164
  180. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/linear.md +0 -29
  181. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/shortcut.md +0 -67
  182. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/youtrack.md +0 -94
  183. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/azure-devops.md +0 -53
  184. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/email.md +0 -71
  185. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/jira.md +0 -52
  186. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/ms-teams.md +0 -60
  187. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/rules.md +0 -267
  188. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/slack.md +0 -82
  189. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/telegram.md +0 -73
  190. package/skills/testeiya/testomatio-docs/docs/integrations/scim-provisioning/index.mdx +0 -207
  191. package/skills/testeiya/testomatio-docs/docs/integrations/scim-provisioning/okta.md +0 -204
  192. package/skills/testeiya/testomatio-docs/docs/integrations/single-sign-on/azure.md +0 -95
  193. package/skills/testeiya/testomatio-docs/docs/integrations/single-sign-on/google.md +0 -75
  194. package/skills/testeiya/testomatio-docs/docs/integrations/single-sign-on/index.mdx +0 -33
  195. package/skills/testeiya/testomatio-docs/docs/integrations/single-sign-on/okta.md +0 -108
  196. package/skills/testeiya/testomatio-docs/docs/integrations/single-sign-on/saml.md +0 -66
  197. package/skills/testeiya/testomatio-docs/docs/legal/compliance/gdpr.md +0 -95
  198. package/skills/testeiya/testomatio-docs/docs/legal/compliance/index.mdx +0 -94
  199. package/skills/testeiya/testomatio-docs/docs/legal/compliance/privacy.md +0 -26
  200. package/skills/testeiya/testomatio-docs/docs/legal/compliance/terms.md +0 -32
  201. package/skills/testeiya/testomatio-docs/docs/legal/security/index.mdx +0 -242
  202. package/skills/testeiya/testomatio-docs/docs/legal/security/jira.md +0 -140
  203. package/skills/testeiya/testomatio-docs/docs/legal/security/subprocessors.md +0 -76
  204. package/skills/testeiya/testomatio-docs/docs/management/company/administration.md +0 -363
  205. package/skills/testeiya/testomatio-docs/docs/management/company/audit-log.md +0 -41
  206. package/skills/testeiya/testomatio-docs/docs/management/company/plan-features-comparison.md +0 -240
  207. package/skills/testeiya/testomatio-docs/docs/management/company/subscriptions.md +0 -326
  208. package/skills/testeiya/testomatio-docs/docs/management/company/trials.md +0 -75
  209. package/skills/testeiya/testomatio-docs/docs/management/company/users-and-permissions/accountant.md +0 -49
  210. package/skills/testeiya/testomatio-docs/docs/management/company/users-and-permissions/index.mdx +0 -285
  211. package/skills/testeiya/testomatio-docs/docs/management/company/users-and-permissions/read-only-user.md +0 -67
  212. package/skills/testeiya/testomatio-docs/docs/management/company/users-and-permissions/teams.md +0 -138
  213. package/skills/testeiya/testomatio-docs/docs/management/project/settings.md +0 -87
  214. package/skills/testeiya/testomatio-docs/docs/management/project/templates.md +0 -546
  215. package/skills/testeiya/testomatio-docs/docs/project/analytics/index.md +0 -326
  216. package/skills/testeiya/testomatio-docs/docs/project/import-export/export-tests/classical-tests-markdown-format.md +0 -386
  217. package/skills/testeiya/testomatio-docs/docs/project/import-export/export-tests/download-manual-tests-as-files.md +0 -378
  218. package/skills/testeiya/testomatio-docs/docs/project/import-export/export-tests/export-to-obsidian.md +0 -112
  219. package/skills/testeiya/testomatio-docs/docs/project/import-export/export-tests/export-to-spreadsheet.md +0 -127
  220. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/auto-import.md +0 -63
  221. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-Allure-TestOps.md +0 -49
  222. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-QTest.md +0 -41
  223. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-Qase.md +0 -39
  224. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-Zephyr.md +0 -37
  225. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-csv-xlsx.md +0 -117
  226. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-cucumber.md +0 -93
  227. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-qmetry.md +0 -44
  228. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-source-code.md +0 -117
  229. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-testcaselabs.md +0 -44
  230. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-testmo.md +0 -47
  231. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-testrail.md +0 -82
  232. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-xray.md +0 -55
  233. package/skills/testeiya/testomatio-docs/docs/project/plans/index.md +0 -334
  234. package/skills/testeiya/testomatio-docs/docs/project/pulse/index.md +0 -104
  235. package/skills/testeiya/testomatio-docs/docs/project/runs/archive-runs-and-groups.md +0 -176
  236. package/skills/testeiya/testomatio-docs/docs/project/runs/custom-statuses.md +0 -195
  237. package/skills/testeiya/testomatio-docs/docs/project/runs/environments.md +0 -203
  238. package/skills/testeiya/testomatio-docs/docs/project/runs/managing-runs.md +0 -455
  239. package/skills/testeiya/testomatio-docs/docs/project/runs/merge-strategies.md +0 -137
  240. package/skills/testeiya/testomatio-docs/docs/project/runs/reports.md +0 -329
  241. package/skills/testeiya/testomatio-docs/docs/project/runs/rungroups.md +0 -342
  242. package/skills/testeiya/testomatio-docs/docs/project/runs/running-automated-tests.md +0 -256
  243. package/skills/testeiya/testomatio-docs/docs/project/runs/running-manual-and-automated-tests.md +0 -331
  244. package/skills/testeiya/testomatio-docs/docs/project/runs/running-tests-manually.md +0 -633
  245. package/skills/testeiya/testomatio-docs/docs/project/runs/temporary-tests-notes.md +0 -223
  246. package/skills/testeiya/testomatio-docs/docs/project/steps-snippets/snippets.md +0 -68
  247. package/skills/testeiya/testomatio-docs/docs/project/steps-snippets/steps.md +0 -181
  248. package/skills/testeiya/testomatio-docs/docs/project/tests/bdd-test-case-editor.md +0 -98
  249. package/skills/testeiya/testomatio-docs/docs/project/tests/classical-test-case-editor.md +0 -354
  250. package/skills/testeiya/testomatio-docs/docs/project/tests/classical-vs-bdd.md +0 -169
  251. package/skills/testeiya/testomatio-docs/docs/project/tests/copy-and-move-your-tests.md +0 -156
  252. package/skills/testeiya/testomatio-docs/docs/project/tests/other-features-for-test-case-design.md +0 -412
  253. package/skills/testeiya/testomatio-docs/docs/project/tests/test-case-creation-and-editing.md +0 -527
  254. package/skills/testeiya/testomatio-docs/docs/support/index.md +0 -75
  255. package/skills/testeiya/testomatio-docs/docs/test-reporting/artifacts.md +0 -388
  256. package/skills/testeiya/testomatio-docs/docs/test-reporting/cli.md +0 -215
  257. package/skills/testeiya/testomatio-docs/docs/test-reporting/configuration.md +0 -247
  258. package/skills/testeiya/testomatio-docs/docs/test-reporting/frameworks.md +0 -490
  259. package/skills/testeiya/testomatio-docs/docs/test-reporting/functions.md +0 -144
  260. package/skills/testeiya/testomatio-docs/docs/test-reporting/index.mdx +0 -48
  261. package/skills/testeiya/testomatio-docs/docs/test-reporting/junit.md +0 -248
  262. package/skills/testeiya/testomatio-docs/docs/test-reporting/logger.md +0 -138
  263. package/skills/testeiya/testomatio-docs/docs/test-reporting/php.md +0 -77
  264. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/bitbucket.md +0 -72
  265. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/csv.md +0 -23
  266. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/debug.md +0 -18
  267. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/github.md +0 -63
  268. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/gitlab.md +0 -29
  269. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/html.md +0 -80
  270. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/index.mdx +0 -57
  271. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/testomatio.md +0 -331
  272. package/skills/testeiya/testomatio-docs/docs/test-reporting/python.md +0 -229
  273. package/skills/testeiya/testomatio-docs/docs/test-reporting/workflows.md +0 -325
  274. package/skills/testeiya/testomatio-docs/docs/tutorials/Interacting-via-API.md +0 -159
  275. package/skills/testeiya/testomatio-docs/docs/tutorials/Manual-Testing-Classic.md +0 -164
  276. package/skills/testeiya/testomatio-docs/docs/tutorials/Set-Up-Read-Only-Access.md +0 -85
  277. package/skills/testeiya/testomatio-docs/docs/tutorials/Using-AI-in-Testing.md +0 -163
  278. package/skills/testeiya/testomatio-docs/docs/tutorials/Working-with-Jira.md +0 -125
  279. package/skills/testeiya/testomatio-docs/docs/tutorials/java.md +0 -478
  280. package/skills/testeiya/testomatio-docs/docs/tutorials/playwright.md +0 -207
  281. package/skills/testeiya/testomatio-docs/docs/tutorials/webdriver.md +0 -218
  282. package/skills/testeiya/testomatio-docs/docs.lock.json +0 -6
  283. package/skills/testeiya/testomatio-reporter/SKILL.md +0 -307
  284. package/skills/testomatio/explorbot/explorbot-fundamentals/SKILL.md +0 -88
  285. package/skills/testomatio/explorbot/explorbot-plan/SKILL.md +0 -95
  286. package/skills/testomatio/explorbot/explorbot-setup/SKILL.md +0 -334
  287. package/skills/testomatio/test-automation/automate-manual-test-cases/CLAUDE.md +0 -56
  288. package/skills/testomatio/test-automation/automate-manual-test-cases/SKILL.md +0 -242
  289. package/skills/testomatio/test-automation/automate-manual-test-cases/references/CODECEPTJS_BEST_PRACTICES.md +0 -182
  290. package/skills/testomatio/test-automation/automate-manual-test-cases/references/FINAL_SUMMARY_TEMPLATE.md +0 -22
  291. package/skills/testomatio/test-automation/automate-manual-test-cases/references/PLAYWRIGHT_BEST_PRACTICES.md +0 -90
  292. package/skills/testomatio/test-automation/automate-manual-test-cases/references/POM_BEST_PRACTICES.md +0 -53
  293. package/skills/testomatio/test-automation/automate-manual-test-cases/references/TEST_DATA_MANAGEMENT.md +0 -52
  294. package/skills/testomatio/test-automation/debug-fix-failed-flaky-autotests/SKILL.md +0 -107
  295. package/skills/testomatio/test-automation/debug-fix-failed-flaky-autotests/references/DEBUGGING_QUICK_REFERENCE.md +0 -113
  296. package/skills/testomatio/test-automation/qa-automation-test-consolidation/SKILL.md +0 -29
  297. package/skills/testomatio/test-automation/run-tests-with-testomatio-reporter/SKILL.md +0 -151
  298. package/skills/testomatio/test-automation/setup-pr-testing/SKILL.md +0 -199
  299. package/skills/testomatio/test-automation/testomat-allure-adapter/SKILL.md +0 -289
  300. package/skills/testomatio/test-management/detect-duplicate-test-cases/SKILL.md +0 -86
  301. package/skills/testomatio/test-management/detect-duplicate-test-cases/references/DUPLICATE_INSTRUCTIONS.md +0 -54
  302. package/skills/testomatio/test-management/improve-test-cases/SKILL.md +0 -114
  303. package/skills/testomatio/test-management/improve-test-cases/references/TESTOMAT_MARKDOWN_EXAMPLE.md +0 -66
  304. package/skills/testomatio/test-management/pull-request-diff-analyzer/SKILL.md +0 -141
  305. package/skills/testomatio/test-management/qa-e2e-tests-reporting/SKILL.md +0 -354
  306. package/skills/testomatio/test-management/qa-e2e-tests-reporting/references/TESTOMATIO_ARTIFACTS.md +0 -82
  307. package/skills/testomatio/test-management/qa-e2e-tests-reporting/references/TESTOMATIO_HTML_REPORT.md +0 -37
  308. package/skills/testomatio/test-management/qa-e2e-tests-reporting/references/TESTOMATIO_REPORTERS_CONFIG.md +0 -118
  309. package/skills/testomatio/test-management/qa-pr-requirements-analyzer/SKILL.md +0 -149
  310. package/skills/testomatio/test-management/qa-pr-requirements-analyzer/references/summary-example.md +0 -54
  311. package/skills/testomatio/test-management/qa-requirement-reviewer/SKILL.md +0 -126
  312. package/skills/testomatio/test-management/qa-requirement-reviewer/references/requirements_reviewer_examples.md +0 -128
  313. package/skills/testomatio/test-management/qa-test-code-coverage/SKILL.md +0 -174
  314. package/skills/testomatio/test-management/qa-test-code-coverage/references/COVERAGE_FILE_FORMAT.md +0 -138
  315. package/skills/testomatio/test-management/qa-test-code-coverage/references/E2E_FRAMEWORKS.md +0 -65
  316. package/skills/testomatio/test-management/qa-test-code-coverage/scripts/check-coverage.mjs +0 -40
  317. package/skills/testomatio/test-management/qa-thinking/SKILL.md +0 -36
  318. package/skills/testomatio/test-management/qa-write-test-cases/SKILL.md +0 -267
  319. package/skills/testomatio/test-management/qa-write-test-cases/references/test-case-format.md +0 -387
  320. package/skills/testomatio/test-management/qa-write-test-cases/references/testomat-tms-guide.md +0 -72
  321. package/skills/testomatio/test-management/qa-write-test-cases/references/writing-rule.md +0 -159
  322. package/skills/testomatio/test-management/scan-automation-project/SKILL.md +0 -152
  323. package/skills/testomatio/test-management/sync-test-cases-with-tms/SKILL.md +0 -107
  324. package/skills/testomatio/test-management/sync-test-cases-with-tms/references/TESTOMATIO_CLI.md +0 -140
  325. package/skills/testomatio/test-management/testomatio-mcp/SKILL.md +0 -182
  326. package/skills/testomatio/test-management/testomatio-mcp/references/MCP_SETUP.md +0 -169
  327. package/skills.yaml +0 -21
  328. package/src/ai-debug.ts +0 -188
  329. package/src/api/agent-get.ts +0 -22
  330. package/src/api/agent-start.ts +0 -384
  331. package/src/api/client-log.ts +0 -29
  332. package/src/api/context.ts +0 -332
  333. package/src/api/debug-layout.ts +0 -47
  334. package/src/api/debug-report.ts +0 -29
  335. package/src/api/debug-snapshot.ts +0 -30
  336. package/src/api/debug-stream.ts +0 -52
  337. package/src/api/files-delete.ts +0 -184
  338. package/src/api/files-read.ts +0 -41
  339. package/src/api/files-rename.ts +0 -99
  340. package/src/api/files-tree.ts +0 -292
  341. package/src/api/files-write.ts +0 -41
  342. package/src/api/mcp.ts +0 -603
  343. package/src/api/memory.ts +0 -69
  344. package/src/api/open-external.ts +0 -39
  345. package/src/api/playwright-cli.ts +0 -606
  346. package/src/api/providers.ts +0 -457
  347. package/src/api/read-env-token.ts +0 -33
  348. package/src/api/sessions.ts +0 -79
  349. package/src/api/settings.ts +0 -120
  350. package/src/api/skills.ts +0 -58
  351. package/src/api/testomatio-attachment.ts +0 -89
  352. package/src/api/testomatio-auth.ts +0 -284
  353. package/src/api/testomatio-proxy.ts +0 -197
  354. package/src/api/testomatio-run-stats.ts +0 -81
  355. package/src/api/testomatio-target.ts +0 -225
  356. package/src/api/testomatio-transcription.ts +0 -82
  357. package/src/api/workspace-search.ts +0 -96
  358. package/src/api/workspace-sync.ts +0 -151
  359. package/src/api/workspace.ts +0 -165
  360. package/src/app-server.ts +0 -556
  361. package/src/bridge.ts +0 -251
  362. package/src/check-tests.ts +0 -156
  363. package/src/cli.ts +0 -17
  364. package/src/commands.ts +0 -244
  365. package/src/config.ts +0 -183
  366. package/src/connection.ts +0 -658
  367. package/src/context-store.ts +0 -265
  368. package/src/debug-bus.ts +0 -405
  369. package/src/extensions/tool-gate.ts +0 -220
  370. package/src/extensions/webui/ask-channel.ts +0 -52
  371. package/src/extensions/webui/index.ts +0 -184
  372. package/src/extensions/webui/tools/ask-question.ts +0 -88
  373. package/src/extensions/webui/tools/query-result.ts +0 -79
  374. package/src/extensions/webui/tools/render-chart.ts +0 -53
  375. package/src/extensions/webui/tools/render-item.ts +0 -61
  376. package/src/extensions/webui/tools/render-list.ts +0 -170
  377. package/src/extensions/webui/tools/render-result.ts +0 -85
  378. package/src/extensions/webui/tools/render-tree.ts +0 -71
  379. package/src/extensions/webui/tools/ui-widget.ts +0 -54
  380. package/src/extensions/webui/tools/widget-result.ts +0 -13
  381. package/src/extensions/webui/widget-channel.ts +0 -50
  382. package/src/file-log.ts +0 -196
  383. package/src/git-tracked.ts +0 -68
  384. package/src/gitignore.ts +0 -53
  385. package/src/json-store.ts +0 -43
  386. package/src/load-env.ts +0 -70
  387. package/src/loader-style.ts +0 -96
  388. package/src/main.ts +0 -140
  389. package/src/mcp-catalog.ts +0 -96
  390. package/src/models-catalog.ts +0 -72
  391. package/src/permissions.ts +0 -120
  392. package/src/project-dir.ts +0 -189
  393. package/src/project-info.ts +0 -108
  394. package/src/prompt/app-ui.ts +0 -59
  395. package/src/prompt/browser.ts +0 -27
  396. package/src/prompt/index.ts +0 -62
  397. package/src/server-info.ts +0 -62
  398. package/src/session-factory.ts +0 -442
  399. package/src/session-store.ts +0 -115
  400. package/src/shell-env.ts +0 -45
  401. package/src/skills.ts +0 -163
  402. package/src/sync-snapshot.ts +0 -140
  403. package/src/telemetry.ts +0 -239
  404. package/src/testomatio-auth.ts +0 -299
  405. package/src/testomatio.ts +0 -98
  406. package/src/theme.ts +0 -30
  407. package/src/user-env.ts +0 -94
  408. package/src/welcome.ts +0 -127
  409. package/src/workspace/safe-path.ts +0 -85
  410. package/src/workspace/test-md.ts +0 -70
  411. package/src/workspace-model.ts +0 -440
  412. package/testeiya.config.json +0 -14
@@ -1,96 +0,0 @@
1
- /**
2
- * Predefined MCP services Testeiya can install with one click.
3
- *
4
- * This is the backend source of truth for the *config* that gets written into a
5
- * session's `mcp.all.json` / `mcp.json`. Display concerns (logos, blurbs) live
6
- * on the frontend in `lib/mcp-services.ts`, keyed by the same `id`.
7
- *
8
- * All four predefined services are remote OAuth servers — the user clicks
9
- * "Add" and the pi-coding-agent SDK runs the browser OAuth flow on first
10
- * connect, so no API keys are collected. A service that *does* need a secret is
11
- * modeled by adding a `secrets` array: the add flow collects each value and the
12
- * backend stores it in the entry's `env` / `headers` (never returned to the UI).
13
- *
14
- * NOTE: the on-disk transport field the SDK reads is `type` (not `transport`);
15
- * `api/mcp.ts` translates `transport` → `type` when serializing.
16
- */
17
-
18
- export type McpTransport = "http" | "sse" | "stdio";
19
-
20
- export interface CatalogSecret {
21
- /** Env var the server config references (e.g. via `${NAME}`). */
22
- env: string;
23
- /** UI label shown above the input. */
24
- label: string;
25
- /** Optional input placeholder. */
26
- placeholder?: string;
27
- }
28
-
29
- export interface CatalogService {
30
- /** Stable key; also used as the MCP server name written to disk. */
31
- id: string;
32
- /** Human-readable name. */
33
- label: string;
34
- transport: McpTransport;
35
- // Remote transport (http / sse):
36
- url?: string;
37
- headers?: Record<string, string>;
38
- // stdio transport:
39
- command?: string;
40
- args?: string[];
41
- env?: Record<string, string>;
42
- /** Authentication model. `oauth` → SDK runs a browser flow on first connect. */
43
- auth?: "oauth" | "apikey" | "none";
44
- /** Secret inputs to collect before installing (only for apikey/env servers). */
45
- secrets?: CatalogSecret[];
46
- }
47
-
48
- export const MCP_CATALOG: CatalogService[] = [
49
- {
50
- id: "linear",
51
- label: "Linear",
52
- transport: "http",
53
- url: "https://mcp.linear.app/mcp",
54
- auth: "oauth",
55
- },
56
- {
57
- id: "atlassian",
58
- label: "Jira",
59
- transport: "sse",
60
- url: "https://mcp.atlassian.com/v1/sse",
61
- auth: "oauth",
62
- },
63
- {
64
- id: "figma",
65
- label: "Figma",
66
- transport: "http",
67
- url: "https://mcp.figma.com/mcp",
68
- auth: "oauth",
69
- },
70
- {
71
- id: "miro",
72
- label: "Miro",
73
- transport: "http",
74
- url: "https://mcp.miro.com/",
75
- auth: "oauth",
76
- },
77
- ];
78
-
79
- export function getCatalogService(id: string): CatalogService | undefined {
80
- return MCP_CATALOG.find((s) => s.id === id);
81
- }
82
-
83
- /** Public descriptors safe to expose to the UI (no secret *values*). */
84
- export function catalogDescriptors() {
85
- return MCP_CATALOG.map((s) => ({
86
- id: s.id,
87
- label: s.label,
88
- transport: s.transport,
89
- auth: s.auth ?? "none",
90
- secrets: s.secrets?.map(({ env, label, placeholder }) => ({
91
- env,
92
- label,
93
- placeholder,
94
- })),
95
- }));
96
- }
@@ -1,72 +0,0 @@
1
- import { readFileSync } from "node:fs";
2
- import { getBundledModels, type GeneratedProvider } from "@oh-my-pi/pi-ai";
3
- import { resolveModelsCatalogPath } from "./project-dir.js";
4
-
5
- /**
6
- * The vendored models catalog (`cli/models.catalog.json`), produced by
7
- * `bunosh collect:models` (re-run on every release). The SDK's bundled
8
- * models.json is frozen at the SDK's publish date and its registry never
9
- * removes entries, so stale models linger and unauthenticated providers only
10
- * show the old list. The catalog fixes the *listing*: models the provider no
11
- * longer serves are pruned, models newer than the SDK snapshot are added.
12
- * Model *resolution* still goes through the SDK registry (live discovery in
13
- * session-factory), so picking a catalog-only model works as long as the
14
- * provider serves it.
15
- */
16
-
17
- let cache: CatalogFile | null | undefined;
18
-
19
- export function applyModelsCatalog(provider: string, models: ModelListing[]): ModelListing[] {
20
- const catalog = catalogFor(provider);
21
- if (!catalog) return models;
22
- const bundledIds = new Set(
23
- getBundledModels(provider as GeneratedProvider).map((m) => m.id)
24
- );
25
- return mergeModelsCatalog(models, bundledIds, catalog);
26
- }
27
-
28
- /**
29
- * Pure merge: drop models that exist only in the SDK's stale bundled list and
30
- * were pruned from the catalog (live-discovered ones are never bundled-only),
31
- * then append catalog models the registry doesn't know yet.
32
- */
33
- export function mergeModelsCatalog(
34
- models: ModelListing[],
35
- bundledIds: Set<string>,
36
- catalog: Record<string, CatalogEntry>
37
- ): ModelListing[] {
38
- const seen = new Set(models.map((m) => m.id));
39
- const merged = models.filter((m) => catalog[m.id] || !bundledIds.has(m.id));
40
- for (const [id, entry] of Object.entries(catalog)) {
41
- if (seen.has(id)) continue;
42
- merged.push({ id, name: entry.name || id });
43
- }
44
- return merged;
45
- }
46
-
47
- function catalogFor(provider: string): Record<string, CatalogEntry> | null {
48
- if (cache === undefined) cache = readCatalogFile();
49
- return cache?.providers?.[provider] ?? null;
50
- }
51
-
52
- function readCatalogFile(): CatalogFile | null {
53
- try {
54
- return JSON.parse(readFileSync(resolveModelsCatalogPath(), "utf-8")) as CatalogFile;
55
- } catch {
56
- return null;
57
- }
58
- }
59
-
60
- export interface ModelListing {
61
- id: string;
62
- name: string;
63
- }
64
-
65
- interface CatalogEntry {
66
- name?: string;
67
- }
68
-
69
- interface CatalogFile {
70
- collectedAt?: string;
71
- providers?: Record<string, Record<string, CatalogEntry>>;
72
- }
@@ -1,120 +0,0 @@
1
- import { sep } from "node:path";
2
- import { WORKSPACES_DIR } from "./project-dir.js";
3
- import type { TesteiyaConfig } from "./config.js";
4
-
5
- type ExtensionFactory = (pi: any) => void;
6
-
7
- const READ_TOOLS = ["read", "grep", "find", "ls"];
8
- const WRITE_TOOLS = ["write", "edit"];
9
-
10
- // Bash commands that are read-only and safe to auto-allow
11
- const SAFE_BASH_PREFIXES = [
12
- "cat ", "head ", "tail ", "less ", "more ",
13
- "ls ", "ls\n", "ls",
14
- "dir ", "tree ", "tree\n", "tree",
15
- "find ", "grep ", "rg ", "ag ",
16
- "wc ", "wc\n",
17
- "file ", "stat ",
18
- "pwd", "pwd\n",
19
- "echo ", "printf ",
20
- "git log", "git show", "git diff", "git status", "git branch", "git blame", "git rev-parse",
21
- "git remote", "git tag", "git stash list",
22
- "node -e", "node --eval", "npx tsc --noEmit",
23
- "npm list", "npm ls", "npm view", "npm outdated",
24
- "which ", "type ", "env", "printenv",
25
- "date", "whoami", "hostname", "uname",
26
- "jq ", "sed -n", "awk ",
27
- "diff ", "cmp ",
28
- "du ", "df ",
29
- "curl -s", "curl --silent", "wget -q",
30
- ];
31
-
32
- // Patterns that indicate destructive operations - always block
33
- const DANGEROUS_PATTERNS = [
34
- "rm ", "rm\n", "rmdir ",
35
- "mv ", "cp ",
36
- "> ", ">> ", "| tee ",
37
- "chmod ", "chown ", "chgrp ",
38
- "kill ", "pkill ",
39
- "sudo ",
40
- "git push", "git reset", "git checkout", "git clean", "git rebase",
41
- "npm install", "npm uninstall", "npm update", "npm publish",
42
- "mktemp", "mkdir ",
43
- ];
44
-
45
- function isReadOnlyBash(command: string): boolean {
46
- const trimmed = command.trim();
47
-
48
- // Check dangerous patterns first
49
- for (const pattern of DANGEROUS_PATTERNS) {
50
- if (trimmed.includes(pattern)) {
51
- return false;
52
- }
53
- }
54
-
55
- // Check if starts with a safe prefix
56
- for (const prefix of SAFE_BASH_PREFIXES) {
57
- if (trimmed.startsWith(prefix)) {
58
- return true;
59
- }
60
- }
61
-
62
- // Piped commands: check if first command is safe and none are dangerous
63
- if (trimmed.includes("|")) {
64
- const first = trimmed.split("|")[0].trim();
65
- for (const prefix of SAFE_BASH_PREFIXES) {
66
- if (first.startsWith(prefix)) {
67
- return true;
68
- }
69
- }
70
- }
71
-
72
- return false;
73
- }
74
-
75
- export function createPermissionExtension(
76
- config: TesteiyaConfig,
77
- cwd: string,
78
- trusted = false
79
- ): ExtensionFactory {
80
- // Grant full access when the workspace is Testeiya-owned pulled markdown
81
- // (~/.testeiya/workspaces/*) OR the user explicitly opened this folder (the
82
- // folder picker, TESTEIYA_WORKSPACE, or the terminal CLI's own cwd). The
83
- // read-only gating only guards folders the user did not deliberately choose.
84
- const fullAccess = trusted || isManagedWorkspace(cwd);
85
- return (pi) => {
86
- pi.on("tool_call", async (event: any, _ctx: any) => {
87
- if (fullAccess) {
88
- return undefined;
89
- }
90
-
91
- // Read tools: always allow
92
- if (READ_TOOLS.includes(event.toolName)) {
93
- return undefined;
94
- }
95
-
96
- // Write/edit tools: block
97
- if (config.permissions.blockWrites && WRITE_TOOLS.includes(event.toolName)) {
98
- return { block: true, reason: "Write operations are blocked. Testeiya is in read-only mode." };
99
- }
100
-
101
- // Bash: allow read-only commands, block the rest
102
- if (config.permissions.blockBash && event.toolName === "bash") {
103
- const command = event.input?.command || "";
104
- if (isReadOnlyBash(command)) {
105
- return undefined;
106
- }
107
- return {
108
- block: true,
109
- reason: `Bash command blocked (not in read-only allowlist): ${command.slice(0, 100)}`,
110
- };
111
- }
112
-
113
- return undefined;
114
- });
115
- };
116
- }
117
-
118
- function isManagedWorkspace(cwd: string): boolean {
119
- return cwd === WORKSPACES_DIR || cwd.startsWith(WORKSPACES_DIR + sep);
120
- }
@@ -1,189 +0,0 @@
1
- import { existsSync, readFileSync, renameSync, writeFileSync } from "node:fs";
2
- import { homedir } from "node:os";
3
- import { join } from "node:path";
4
-
5
- /**
6
- * The per-project config directory name Testeiya uses inside a workspace.
7
- *
8
- * The pi-coding-agent SDK defaults this to `.omp`, but `session-factory.ts`
9
- * monkey-patches `SOURCE_PATHS.native.projectDir` to this value so MCP / skills
10
- * / rules discovery reads from `<cwd>/.testeiya/*`. Everything that *writes*
11
- * MCP config (agent-start, the MCP settings API) must use the SAME directory or
12
- * the agent won't see it. This constant is the single source of truth.
13
- */
14
- export const PROJECT_DIR = ".testeiya";
15
-
16
- /** Legacy directory used before the project dir was unified on `.testeiya`. */
17
- export const LEGACY_PROJECT_DIR = ".omp";
18
-
19
- /** Testeiya's global state directory in the user's home (`~/.testeiya`). */
20
- export const HOME_DIR = join(homedir(), PROJECT_DIR);
21
-
22
- /** Root of the managed per-project workspaces (`~/.testeiya/workspaces`). */
23
- export const WORKSPACES_DIR = join(HOME_DIR, "workspaces");
24
-
25
- /**
26
- * Where Testeiya caches pulled manual tests when overlaying them onto a folder
27
- * that is *not* a manual-tests-only workspace (a user's code repo). Lives under
28
- * the project dir so it is gitignored and never pollutes the tracked tree.
29
- */
30
- export const MANUAL_TESTS_SUBDIR = "manual-tests";
31
-
32
- /** Folder name that holds user-added custom skills. */
33
- export const CUSTOM_SKILLS_SUBDIR = "skills";
34
-
35
- /**
36
- * Where user-added context lands inside `.testeiya` (see context-store.ts):
37
- * linked folders and cloned repos under `code/`, uploaded documents under
38
- * `requirements/` — the same layout the system prompt teaches the agent.
39
- */
40
- export const CONTEXT_CODE_SUBDIR = "code";
41
- export const CONTEXT_REQUIREMENTS_SUBDIR = "requirements";
42
-
43
- /** Manifest of user-added context entries (what, where from, when). */
44
- export const CONTEXT_MANIFEST_FILE = "context.json";
45
-
46
- /** Global custom-skills folder (`~/.testeiya/skills`), loaded for every session. */
47
- export const CUSTOM_SKILLS_DIR = join(HOME_DIR, CUSTOM_SKILLS_SUBDIR);
48
-
49
- /**
50
- * Folder name (shipped inside the CLI package / desktop bundle) that holds the
51
- * skills tree organized by vendor: `<vendor>/<skill>/SKILL.md`, with an extra
52
- * category level for marketplace repos (`<vendor>/<category>/<skill>/`).
53
- * External vendors are written by `bunosh skills:update` from the `skills.yaml`
54
- * manifest; folders it does not manage (e.g. `testeiya/`) are first-party
55
- * skills authored in this repo.
56
- */
57
- export const BUNDLED_SKILLS_SUBDIR = "skills";
58
-
59
- /** The external-skills manifest file name (source of truth for `bunosh skills:update`). */
60
- export const SKILLS_MANIFEST_FILE = "skills.yaml";
61
-
62
- /** The vendored models catalog produced by `bunosh collect:models` (see models-catalog.ts). */
63
- export const MODELS_CATALOG_FILE = "models.catalog.json";
64
-
65
- /** Records which Testomat.io project a workspace represents (id + base URL). */
66
- export const PROJECT_META_FILE = "testeiya.json";
67
-
68
- /** Cached project configuration from `GET /api/v2/{id}/info` (see project-info.ts). */
69
- export const PROJECT_INFO_FILE = "project-info.json";
70
-
71
- /** Hashes of the manual-test files as of the last Testomat.io sync (pull/push). */
72
- export const SYNC_SNAPSHOT_FILE = "sync-snapshot.json";
73
-
74
- /** Absolute path to the gitignored manual-tests cache inside `cwd`. */
75
- export function manualTestsCachePath(cwd: string): string {
76
- return join(cwd, PROJECT_DIR, MANUAL_TESTS_SUBDIR);
77
- }
78
-
79
- /** Absolute path to a workspace's per-project custom-skills folder. */
80
- export function projectSkillsDir(cwd: string): string {
81
- return join(cwd, PROJECT_DIR, CUSTOM_SKILLS_SUBDIR);
82
- }
83
-
84
- /** Absolute path to the project-association metadata file inside `cwd`. */
85
- export function projectMetaPath(cwd: string): string {
86
- return join(cwd, PROJECT_DIR, PROJECT_META_FILE);
87
- }
88
-
89
- /** Absolute path to the cached project-configuration file inside `cwd`. */
90
- export function projectInfoPath(cwd: string): string {
91
- return join(cwd, PROJECT_DIR, PROJECT_INFO_FILE);
92
- }
93
-
94
- /** Absolute path to the last-sync snapshot file inside `cwd`. */
95
- export function syncSnapshotPath(cwd: string): string {
96
- return join(cwd, PROJECT_DIR, SYNC_SNAPSHOT_FILE);
97
- }
98
-
99
- /** Absolute path to the user-added-context manifest inside `cwd`. */
100
- export function contextManifestPath(cwd: string): string {
101
- return join(cwd, PROJECT_DIR, CONTEXT_MANIFEST_FILE);
102
- }
103
-
104
- /**
105
- * Guard files for the project dir, written idempotently whenever it exists:
106
- * `.gitignore` (`*`) keeps the dir out of the user's repo history, while
107
- * `.ignore` (`!*`) whitelists the contents back for the agent's search tools —
108
- * their walker (ripgrep's ignore crate) honors gitignore, and a same-dir
109
- * `.ignore` outranks the `.gitignore`, so pulled manual tests and added
110
- * context stay searchable. Git never reads `.ignore`.
111
- *
112
- * The whitelist re-ignores `.git/` and `node_modules/` below it (later lines
113
- * win), so cloned repos and installed tools inside the dir don't flood search
114
- * results. The `.ignore` is content-synced — the dir is Testeiya's own, so a
115
- * stale generation of the file is replaced, not preserved.
116
- *
117
- * The whitelist cannot help when the workspace's own `.gitignore` lists the
118
- * project dir — the walker then skips it at the parent level and never reads
119
- * the inner files. That entry is a workspace misconfiguration (redundant for
120
- * git — the dir self-excludes) the system prompt forbids; the prompt's
121
- * explicit-`.testeiya/`-prefix search rule still works there, because a
122
- * search rooted inside the dir bypasses the parent-level skip.
123
- */
124
- export function ensureProjectDirGuards(cwd: string): void {
125
- const dir = join(cwd, PROJECT_DIR);
126
- if (!existsSync(dir)) return;
127
- const gitignore = join(dir, ".gitignore");
128
- if (!existsSync(gitignore)) writeFileSync(gitignore, "*\n", "utf8");
129
- const ignore = join(dir, ".ignore");
130
- const ignoreContent = "!*\n.git/\nnode_modules/\n";
131
- let current = "";
132
- if (existsSync(ignore)) current = readFileSync(ignore, "utf8");
133
- if (current !== ignoreContent) writeFileSync(ignore, ignoreContent, "utf8");
134
- }
135
-
136
- /** The home state dir used before the rename from "testclaw" to "testeiya". */
137
- const LEGACY_HOME_DIR = join(homedir(), ".testclaw");
138
-
139
- /**
140
- * One-shot migration for the rename from "testclaw" to "testeiya": if the old
141
- * `~/.testclaw` state dir exists and the new `~/.testeiya` does not, move it so
142
- * existing sessions, auth tokens, provider keys, and pulled workspaces survive.
143
- * Idempotent — a no-op once `~/.testeiya` exists; any failure is non-fatal.
144
- */
145
- export function migrateLegacyHomeDir(): void {
146
- if (existsSync(HOME_DIR)) return;
147
- if (!existsSync(LEGACY_HOME_DIR)) return;
148
- try {
149
- renameSync(LEGACY_HOME_DIR, HOME_DIR);
150
- } catch {
151
- // ignore — a fresh ~/.testeiya is created on demand if the move fails
152
- }
153
- }
154
-
155
- /**
156
- * Locate the bundled skills tree (`cli/skills/<vendor>/...`).
157
- * Mirrors `resolveStaticDir()` in `src/bun/index.ts`: an env override, then the
158
- * dev / npm-package layout (a sibling of `cli/src`), then the desktop-bundle
159
- * layout where `electrobun.config` copies `cli/skills` to `skills` next to the
160
- * bundled entry. Returns the last candidate as a best-effort fallback so a
161
- * packaging mismatch is inspectable rather than crashing.
162
- */
163
- export function resolveBundledSkillsDir(): string {
164
- return probePath(BUNDLED_SKILLS_SUBDIR);
165
- }
166
-
167
- /** Absolute path to the prebuilt-skills manifest (`skills.yaml`), same probe. */
168
- export function resolveSkillsManifestPath(): string {
169
- return probePath(SKILLS_MANIFEST_FILE);
170
- }
171
-
172
- /** Absolute path to the vendored models catalog (`models.catalog.json`), same probe. */
173
- export function resolveModelsCatalogPath(): string {
174
- return probePath(MODELS_CATALOG_FILE);
175
- }
176
-
177
- function probePath(leaf: string): string {
178
- const candidates: string[] = [];
179
- if (leaf === BUNDLED_SKILLS_SUBDIR && process.env.TESTEIYA_SKILLS_DIR) {
180
- candidates.push(process.env.TESTEIYA_SKILLS_DIR);
181
- }
182
- candidates.push(join(import.meta.dir, "..", leaf));
183
- candidates.push(join(import.meta.dir, leaf));
184
- candidates.push(join(import.meta.dir, "..", "..", leaf));
185
- for (const candidate of candidates) {
186
- if (existsSync(candidate)) return candidate;
187
- }
188
- return candidates[candidates.length - 1];
189
- }
@@ -1,108 +0,0 @@
1
- // Project configuration from `GET /api/v2/{project_id}/info` (framework,
2
- // subscription, environments, labels, tags, feature flags, CI profiles).
3
- //
4
- // Fetched when a project is selected (agent-start) and cached in the
5
- // workspace's `.testeiya/project-info.json`, so the session factory can inject
6
- // a compact summary into the system prompt without a network round-trip. The
7
- // full JSON stays agent-readable on disk — the prompt points at it instead of
8
- // inlining every label/tag when the lists are long.
9
-
10
- import fs from "node:fs";
11
- import path from "node:path";
12
- import { readJson, writeJson } from "./json-store.js";
13
- import { loggedServerFetch } from "./debug-bus.js";
14
- import { PROJECT_DIR, projectInfoPath } from "./project-dir.js";
15
- import { resolveProjectTarget } from "./api/testomatio-target.js";
16
- import type { StoredSession } from "./session-store.js";
17
-
18
- const TTL_MS = 60 * 60 * 1000;
19
-
20
- export async function fetchProjectInfo(
21
- baseUrl: string,
22
- slug: string,
23
- token: string
24
- ): Promise<TestomatioProjectInfo | null> {
25
- const url = new URL(
26
- `/api/v2/${encodeURIComponent(slug)}/info`,
27
- baseUrl.replace(/\/$/, "")
28
- ).toString();
29
- try {
30
- const { res, text } = await loggedServerFetch(
31
- url,
32
- {
33
- headers: { Authorization: `Bearer ${token}`, Accept: "application/json" },
34
- cache: "no-store",
35
- signal: AbortSignal.timeout(10000),
36
- },
37
- null
38
- );
39
- if (!res.ok) return null;
40
- const parsed = JSON.parse(text) as { data?: TestomatioProjectInfo };
41
- return parsed.data ?? null;
42
- } catch {
43
- return null;
44
- }
45
- }
46
-
47
- export function readProjectInfo(cwd: string): StoredProjectInfo | null {
48
- const raw = readJson<Partial<StoredProjectInfo>>(projectInfoPath(cwd), {});
49
- if (!raw?.info?.project_id) return null;
50
- return { fetchedAt: raw.fetchedAt ?? 0, info: raw.info };
51
- }
52
-
53
- export function writeProjectInfo(cwd: string, info: TestomatioProjectInfo): void {
54
- writeJson(projectInfoPath(cwd), { fetchedAt: Date.now(), info });
55
- // Keep the cache out of the user's repo history (same rule as writeProjectMeta).
56
- fs.writeFileSync(path.join(cwd, PROJECT_DIR, ".gitignore"), "*\n", "utf8");
57
- }
58
-
59
- /**
60
- * The workspace's project settings for the system prompt: the cached copy when
61
- * fresh, else re-fetched via the session's resolvable credentials and re-cached.
62
- * Falls back to the stale cache when no credentials resolve or the fetch fails.
63
- * Multi-project sessions have no single settings set, so they resolve to null.
64
- */
65
- export async function resolveProjectInfo(
66
- cwd: string,
67
- session: Pick<StoredSession, "tokens" | "backendUrl" | "projects">
68
- ): Promise<TestomatioProjectInfo | null> {
69
- if ((session.projects?.length ?? 0) > 1) return null;
70
- const cached = readProjectInfo(cwd);
71
- if (cached && Date.now() - cached.fetchedAt < TTL_MS) return cached.info;
72
- const target = await resolveProjectTarget(session, cwd);
73
- if (!target) return cached?.info ?? null;
74
- const info = await fetchProjectInfo(target.baseUrl, target.project, target.token);
75
- if (!info) return cached?.info ?? null;
76
- writeProjectInfo(cwd, info);
77
- return info;
78
- }
79
-
80
- export interface TestomatioCiProfile {
81
- profile_name: string;
82
- service: string | null;
83
- config: Record<string, unknown> | null;
84
- pass_testomatio_key: boolean;
85
- pass_testomatio_url: boolean;
86
- pass_run_id: boolean;
87
- }
88
-
89
- export interface TestomatioProjectInfo {
90
- title: string;
91
- project_id: string;
92
- framework: string | null;
93
- language: string | null;
94
- status: string | null;
95
- repository_url: string | null;
96
- artifacts_storage_enabled: boolean;
97
- environments: string[];
98
- labels: { title: string; slug: string }[];
99
- tags: string[];
100
- subscription: string | null;
101
- features: string[];
102
- ci_profiles: TestomatioCiProfile[];
103
- }
104
-
105
- export interface StoredProjectInfo {
106
- fetchedAt: number;
107
- info: TestomatioProjectInfo;
108
- }
@@ -1,59 +0,0 @@
1
- import dedent from "dedent";
2
-
3
- export const appUiGuidance = dedent`
4
- # Testeiya app interface (UI tools)
5
-
6
- You run inside the Testeiya chat app, which renders rich interactive cards.
7
-
8
- **Data/analysis answers:** read \`skill://answer-formatting/SKILL.md\` first and follow it.
9
-
10
- ## Data-rendering tools
11
-
12
- Each renders as a titled collapsible card — **always pass a \`title\`**.
13
-
14
- | Tool | Use when | Data shape |
15
- |---|---|---|
16
- | \`render_result({call_id, title, columns?})\` | Showing a fetched \`*_list\`/\`*_search\` result — the \`call_id\` is in that result's UI notice. Renders EVERY row; \`columns\` picks fields in order; \`status\`/\`state\`/\`priority\` render as icons. | Just the call reference — no rows. |
17
- | \`render_list({kind, data?, from?, transform?, title, columns?, summary?})\` | A derived or assembled list. Prefer \`from\` (call ids) + \`transform\` (pure JS fn source over those row arrays, returning the rows) — derives server-side, no re-typing rows. \`data\` for rows from elsewhere (e.g. parsed files). \`columns\` picks fields in order. | \`from\`+\`transform\`, or \`{data:[...], meta}\` / raw array. |
18
- | \`render_item({kind, data, title, summary?})\` | One entity in detail — "show run X" — or right after you create/update one. Never paste an entity link instead. | Single entity object (a \`*_get\` / \`*_create\` / \`*_update\` result). |
19
- | \`render_tree({nodes, title})\` | Nested suite/test hierarchy or the workspace tree. | Recursive \`nodes[]\` of \`{name, kind:'suite'|'test'|'folder'|'file', status?, children?}\`; \`status\` renders a colored mark. |
20
- | \`render_chart({type, title, data, series?})\` | Any aggregate — counts, pass rate, distribution, trend, comparison. | \`type\`: bar/line/area/pie. \`data\`: \`[{name, value}]\` or per-series keys + \`series: [{key, label?}]\`. Status names auto-color green/red. |
21
-
22
- **MCP \`*_list\` / \`*_search\` results are NOT shown to the user**, and large ones arrive as a **digest** — \`{call_id, total, fields, sample}\` — while the full rows stay cached server-side under that \`call_id\`. Show them with \`render_result\` (or \`render_list\` \`from\`+\`transform\`); compute counts/filters/grouping/joins with \`query_result({call_id, fn})\` — \`fn\` is pure JS over one row array per call id, written from the digest's \`fields\`/\`sample\`. Never re-type rows from a digest or paste them into your reply; \`title\` = filter + window ("Automated tests created since Jul 1 — 64").
23
-
24
- **Do not repeat rendered data in your text reply** — a headline plus a few insight bullets is enough.
25
-
26
- ## Diagrams (inline fenced block)
27
-
28
- The chat renders \`mermaid\` fenced blocks inline in your reply — flows, sequences, state machines, dependency graphs. Standard syntax:
29
-
30
- \`\`\`\`
31
- \`\`\`mermaid
32
- flowchart TD
33
- A[Login] --> B{Valid?}
34
- B -->|Yes| C[Dashboard]
35
- B -->|No| A
36
- \`\`\`
37
- \`\`\`\`
38
-
39
- ## Questions go through \`ask_question\`
40
-
41
- **Any question to the user — menu, confirmation, disambiguation, pick-a-subset — is an \`ask_question\` call, never reply text ending in "?" or a list of options.** Options render as buttons; the call blocks and returns the pick. Exception: free-form answers (dates, arbitrary text) — ask in plain text.
42
-
43
- - 1–8 options for single choice. Phrase each as the complete message the user would send, not "Option 1"; multi-line descriptions are fine.
44
- - Confirmations: first option a "Yes, …", plus meaningful "No, …" variants.
45
- - Don't restate the question or options in text; never write "Let me know…" / "Reply with 1, 2 or 3".
46
-
47
- ### Pick-a-subset → \`multiSelect: true\`
48
-
49
- A list the user should choose from (proposed test cases, files to sync, runs to rerun) is a checklist, never a markdown list: \`ask_question({question, options, multiSelect: true, recommended})\`. One option per item, up to 50; \`recommended\` = 0-based indices pre-checked. You get the chosen labels back — act on only those. The checklist replaces the "Want me to generate these?" + numbered-list pattern.
50
-
51
- ## Controlling the open widget — \`ui_widget\`
52
-
53
- When the user has a widget open, each turn carries an \`<active_widget>\` block with its id and legal actions. \`ui_widget({widget_id, action, params})\` runs them — the same controls as the user's buttons. No block → nothing to control.
54
-
55
- - **\`get\` first:** returns the widget's full on-screen contents as JSON in one call without moving the user's view — use it before any \`mcp_*\` re-fetch for "explain what I'm looking at" asks.
56
- - \`list({page})\` paginates toward \`meta.total\`; \`list({query})\` filters (\`=\`-prefixed TQL); \`open({id})\` opens an item — the user sees these happen.
57
- - Actions flagged \`[destructive]\` change data — confirm with \`ask_question\` first.
58
- - A \`render_item\` ack names the new card's \`widget_id\` — drive that card in the same turn (e.g. \`render_item(run)\` → \`ui_widget(start_manual_run)\`) instead of retrying the previous widget.
59
- `;
@@ -1,27 +0,0 @@
1
- import dedent from "dedent";
2
-
3
- export const browserControl = dedent`
4
- # Live browser testing
5
-
6
- You can start and drive a real browser yourself via the **playwright-cli** skill (it runs the Playwright CLI through \`bash\`). When the user asks to "start a browser" or to test something in a browser, just do it — read the **playwright-cli** skill for the command set.
7
-
8
- Use the browser to:
9
-
10
- - **Investigate the target page before writing browser automation** — open the exact page/feature under test, walk the flow, and read the real selectors/texts/URLs from the live DOM. Automation written from reading code or manual docs alone is guesswork; verify against the running app first.
11
- - **Execute manual \`*.test.md\` cases** live — perform each step and confirm the expected result before marking anything passed.
12
- - **Assist the user passing manual runs** — follow the **manual-run-assistant** skill (environment prep, per-test handoff, analyzing captured signals into proposed notes).
13
- - **Reproduce and investigate bugs**, capturing screenshots/snapshots as evidence.
14
- - **Explore a running app** when the answer needs real behaviour rather than reading code.
15
-
16
- ## Opening a page for the user — never guess the target
17
-
18
- When the user asks you to open a page (to pass a manual run, review a feature, reproduce a bug) and the exact target is not explicit in their request, **ask before navigating** (via \`ask_question\` when available, otherwise in text). For a manual run, "the corresponding page" means the page of the **application under test** that the run's tests cover — not the run's own page in Testomat.io; when that URL isn't stated, ask. This covers every part of the URL you would otherwise infer: the base URL / environment (production, staging, a local server from \`.env\`), the project or account, and the page path. Offer the candidates you discovered (config files, \`.env\`, project data) as options — opening a target inferred from repo fixtures lands the user on the wrong page.
19
-
20
- ## The browser window is shared with the user
21
-
22
- The headed browser is a real window on the user's screen — they see it and can drive it themselves. When a step is better done by the user (entering credentials, judgment calls, stepping through manual test cases), offer that as an \`ask_question\` option, e.g. *"I'll do it myself — bring the browser to front"*. If chosen, raise the window with \`playwright-cli run-code 'async page => { await page.bringToFront(); }'\`, tell the user what to do, and continue once they report back.
23
-
24
- ## run-code executes in a browser sandbox, not Node
25
-
26
- \`playwright-cli run-code\` snippets get the \`page\` object but no Node globals — \`process.env\` does not exist there. Read values in bash first and interpolate them into the snippet.
27
- `;