testeiya 0.2.1 → 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 (414) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +41 -213
  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 -42
  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/assets/testeiya-logo-dark.svg +0 -16
  51. package/assets/testeiya-logo.svg +0 -15
  52. package/models.catalog.json +0 -6963
  53. package/skills/codeceptjs/ci-fix-tests/SKILL.md +0 -120
  54. package/skills/codeceptjs/codeceptjs-auth/SKILL.md +0 -158
  55. package/skills/codeceptjs/codeceptjs-exploration/SKILL.md +0 -91
  56. package/skills/codeceptjs/codeceptjs-fundamentals/SKILL.md +0 -158
  57. package/skills/codeceptjs/codeceptjs-run-analysis/SKILL.md +0 -90
  58. package/skills/codeceptjs/debugging-codeceptjs-tests/SKILL.md +0 -234
  59. package/skills/codeceptjs/migrate-codeceptjs-4/SKILL.md +0 -110
  60. package/skills/codeceptjs/migrate-cypress-to-codeceptjs/SKILL.md +0 -306
  61. package/skills/codeceptjs/migrate-protractor-to-codeceptjs/SKILL.md +0 -352
  62. package/skills/codeceptjs/migrate-selenium-java-to-codeceptjs/SKILL.md +0 -472
  63. package/skills/codeceptjs/migrate-testcafe-to-codeceptjs/SKILL.md +0 -350
  64. package/skills/codeceptjs/refactoring-codeceptjs-tests/SKILL.md +0 -81
  65. package/skills/codeceptjs/writing-codeceptjs-tests/SKILL.md +0 -206
  66. package/skills/playwright-best-practices-skill/LICENSE.md +0 -7
  67. package/skills/playwright-best-practices-skill/README.md +0 -147
  68. package/skills/playwright-best-practices-skill/SKILL.md +0 -303
  69. package/skills/playwright-best-practices-skill/advanced/authentication-flows.md +0 -360
  70. package/skills/playwright-best-practices-skill/advanced/authentication.md +0 -871
  71. package/skills/playwright-best-practices-skill/advanced/clock-mocking.md +0 -364
  72. package/skills/playwright-best-practices-skill/advanced/mobile-testing.md +0 -409
  73. package/skills/playwright-best-practices-skill/advanced/multi-context.md +0 -288
  74. package/skills/playwright-best-practices-skill/advanced/multi-user.md +0 -393
  75. package/skills/playwright-best-practices-skill/advanced/network-advanced.md +0 -452
  76. package/skills/playwright-best-practices-skill/advanced/third-party.md +0 -464
  77. package/skills/playwright-best-practices-skill/architecture/pom-vs-fixtures.md +0 -363
  78. package/skills/playwright-best-practices-skill/architecture/test-architecture.md +0 -369
  79. package/skills/playwright-best-practices-skill/architecture/when-to-mock.md +0 -383
  80. package/skills/playwright-best-practices-skill/browser-apis/browser-apis.md +0 -391
  81. package/skills/playwright-best-practices-skill/browser-apis/iframes.md +0 -403
  82. package/skills/playwright-best-practices-skill/browser-apis/service-workers.md +0 -504
  83. package/skills/playwright-best-practices-skill/browser-apis/websockets.md +0 -403
  84. package/skills/playwright-best-practices-skill/core/annotations.md +0 -424
  85. package/skills/playwright-best-practices-skill/core/assertions-waiting.md +0 -361
  86. package/skills/playwright-best-practices-skill/core/configuration.md +0 -452
  87. package/skills/playwright-best-practices-skill/core/fixtures-hooks.md +0 -417
  88. package/skills/playwright-best-practices-skill/core/global-setup.md +0 -434
  89. package/skills/playwright-best-practices-skill/core/locators.md +0 -242
  90. package/skills/playwright-best-practices-skill/core/page-object-model.md +0 -315
  91. package/skills/playwright-best-practices-skill/core/projects-dependencies.md +0 -453
  92. package/skills/playwright-best-practices-skill/core/test-data.md +0 -492
  93. package/skills/playwright-best-practices-skill/core/test-suite-structure.md +0 -361
  94. package/skills/playwright-best-practices-skill/core/test-tags.md +0 -298
  95. package/skills/playwright-best-practices-skill/debugging/console-errors.md +0 -420
  96. package/skills/playwright-best-practices-skill/debugging/debugging.md +0 -504
  97. package/skills/playwright-best-practices-skill/debugging/error-testing.md +0 -360
  98. package/skills/playwright-best-practices-skill/debugging/flaky-tests.md +0 -496
  99. package/skills/playwright-best-practices-skill/frameworks/angular.md +0 -530
  100. package/skills/playwright-best-practices-skill/frameworks/nextjs.md +0 -469
  101. package/skills/playwright-best-practices-skill/frameworks/react.md +0 -531
  102. package/skills/playwright-best-practices-skill/frameworks/vue.md +0 -574
  103. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/ci-cd.md +0 -468
  104. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/docker.md +0 -283
  105. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/github-actions.md +0 -546
  106. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/gitlab.md +0 -397
  107. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/other-providers.md +0 -521
  108. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/parallel-sharding.md +0 -371
  109. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/performance.md +0 -453
  110. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/reporting.md +0 -424
  111. package/skills/playwright-best-practices-skill/infrastructure-ci-cd/test-coverage.md +0 -497
  112. package/skills/playwright-best-practices-skill/testing-patterns/accessibility.md +0 -359
  113. package/skills/playwright-best-practices-skill/testing-patterns/api-testing.md +0 -719
  114. package/skills/playwright-best-practices-skill/testing-patterns/browser-extensions.md +0 -506
  115. package/skills/playwright-best-practices-skill/testing-patterns/canvas-webgl.md +0 -493
  116. package/skills/playwright-best-practices-skill/testing-patterns/component-testing.md +0 -500
  117. package/skills/playwright-best-practices-skill/testing-patterns/drag-drop.md +0 -576
  118. package/skills/playwright-best-practices-skill/testing-patterns/electron.md +0 -509
  119. package/skills/playwright-best-practices-skill/testing-patterns/file-operations.md +0 -377
  120. package/skills/playwright-best-practices-skill/testing-patterns/file-upload-download.md +0 -562
  121. package/skills/playwright-best-practices-skill/testing-patterns/forms-validation.md +0 -561
  122. package/skills/playwright-best-practices-skill/testing-patterns/graphql-testing.md +0 -331
  123. package/skills/playwright-best-practices-skill/testing-patterns/i18n.md +0 -508
  124. package/skills/playwright-best-practices-skill/testing-patterns/performance-testing.md +0 -476
  125. package/skills/playwright-best-practices-skill/testing-patterns/security-testing.md +0 -430
  126. package/skills/playwright-best-practices-skill/testing-patterns/visual-regression.md +0 -634
  127. package/skills/playwright-cli/SKILL.md +0 -420
  128. package/skills/playwright-cli/references/element-attributes.md +0 -23
  129. package/skills/playwright-cli/references/playwright-tests.md +0 -39
  130. package/skills/playwright-cli/references/request-mocking.md +0 -87
  131. package/skills/playwright-cli/references/running-code.md +0 -241
  132. package/skills/playwright-cli/references/session-management.md +0 -225
  133. package/skills/playwright-cli/references/storage-state.md +0 -275
  134. package/skills/playwright-cli/references/test-generation.md +0 -433
  135. package/skills/playwright-cli/references/tracing.md +0 -139
  136. package/skills/playwright-cli/references/video-recording.md +0 -143
  137. package/skills/testeiya/README.md +0 -29
  138. package/skills/testeiya/answer-formatting/SKILL.md +0 -30
  139. package/skills/testeiya/check-cucumber/SKILL.md +0 -200
  140. package/skills/testeiya/check-tests/SKILL.md +0 -260
  141. package/skills/testeiya/manual-run-assistant/SKILL.md +0 -61
  142. package/skills/testeiya/testomatio-docs/INDEX.md +0 -175
  143. package/skills/testeiya/testomatio-docs/SKILL.md +0 -102
  144. package/skills/testeiya/testomatio-docs/docs/advanced/ai-powered-features/ai-agents.md +0 -144
  145. package/skills/testeiya/testomatio-docs/docs/advanced/ai-powered-features/ai-powered-features.md +0 -531
  146. package/skills/testeiya/testomatio-docs/docs/advanced/ai-powered-features/ai-requirements.md +0 -437
  147. package/skills/testeiya/testomatio-docs/docs/advanced/api-access/index.md +0 -191
  148. package/skills/testeiya/testomatio-docs/docs/advanced/branches-folder/index.md +0 -277
  149. package/skills/testeiya/testomatio-docs/docs/advanced/bulk-edit-folder/bulk-edit-demos.mdx +0 -39
  150. package/skills/testeiya/testomatio-docs/docs/advanced/bulk-edit-folder/bulk-edit-on-suite-and-test-level.md +0 -122
  151. package/skills/testeiya/testomatio-docs/docs/advanced/bulk-edit-folder/what-is-bulk-edit.md +0 -170
  152. package/skills/testeiya/testomatio-docs/docs/advanced/jira-plugin/branches.md +0 -53
  153. package/skills/testeiya/testomatio-docs/docs/advanced/jira-plugin/index.mdx +0 -98
  154. package/skills/testeiya/testomatio-docs/docs/advanced/jira-plugin/jira-issue.md +0 -151
  155. package/skills/testeiya/testomatio-docs/docs/advanced/jira-plugin/runs-and-reports.md +0 -377
  156. package/skills/testeiya/testomatio-docs/docs/advanced/jira-plugin/work-in-jira.md +0 -267
  157. package/skills/testeiya/testomatio-docs/docs/advanced/living-doc/index.md +0 -138
  158. package/skills/testeiya/testomatio-docs/docs/advanced/milestones/index.md +0 -220
  159. package/skills/testeiya/testomatio-docs/docs/advanced/shortcuts/index.md +0 -48
  160. package/skills/testeiya/testomatio-docs/docs/advanced/tags-labels/labels-and-custom-fields.md +0 -201
  161. package/skills/testeiya/testomatio-docs/docs/advanced/tags-labels/tags-or-labels.md +0 -94
  162. package/skills/testeiya/testomatio-docs/docs/advanced/tags-labels/tags.md +0 -243
  163. package/skills/testeiya/testomatio-docs/docs/advanced/test-artifacts/index.md +0 -135
  164. package/skills/testeiya/testomatio-docs/docs/advanced/tql/index.md +0 -394
  165. package/skills/testeiya/testomatio-docs/docs/getting-started/index.md +0 -290
  166. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/azure.md +0 -96
  167. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/bamboo.md +0 -94
  168. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/bitbucket.md +0 -106
  169. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/circle.md +0 -115
  170. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/github.md +0 -120
  171. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/gitlab.md +0 -88
  172. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/index.mdx +0 -151
  173. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/jenkins.md +0 -121
  174. package/skills/testeiya/testomatio-docs/docs/integrations/continuous-integration/teamcity.md +0 -96
  175. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/azure.md +0 -31
  176. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/clickup.md +0 -54
  177. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/confluence.md +0 -34
  178. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/github.md +0 -31
  179. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/gitlab.md +0 -93
  180. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/index.md +0 -131
  181. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/jira.md +0 -164
  182. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/linear.md +0 -29
  183. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/shortcut.md +0 -67
  184. package/skills/testeiya/testomatio-docs/docs/integrations/issues-management/youtrack.md +0 -94
  185. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/azure-devops.md +0 -53
  186. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/email.md +0 -71
  187. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/jira.md +0 -52
  188. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/ms-teams.md +0 -60
  189. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/rules.md +0 -267
  190. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/slack.md +0 -82
  191. package/skills/testeiya/testomatio-docs/docs/integrations/report-notifications/telegram.md +0 -73
  192. package/skills/testeiya/testomatio-docs/docs/integrations/scim-provisioning/index.mdx +0 -207
  193. package/skills/testeiya/testomatio-docs/docs/integrations/scim-provisioning/okta.md +0 -204
  194. package/skills/testeiya/testomatio-docs/docs/integrations/single-sign-on/azure.md +0 -95
  195. package/skills/testeiya/testomatio-docs/docs/integrations/single-sign-on/google.md +0 -75
  196. package/skills/testeiya/testomatio-docs/docs/integrations/single-sign-on/index.mdx +0 -33
  197. package/skills/testeiya/testomatio-docs/docs/integrations/single-sign-on/okta.md +0 -108
  198. package/skills/testeiya/testomatio-docs/docs/integrations/single-sign-on/saml.md +0 -66
  199. package/skills/testeiya/testomatio-docs/docs/legal/compliance/gdpr.md +0 -95
  200. package/skills/testeiya/testomatio-docs/docs/legal/compliance/index.mdx +0 -94
  201. package/skills/testeiya/testomatio-docs/docs/legal/compliance/privacy.md +0 -26
  202. package/skills/testeiya/testomatio-docs/docs/legal/compliance/terms.md +0 -32
  203. package/skills/testeiya/testomatio-docs/docs/legal/security/index.mdx +0 -242
  204. package/skills/testeiya/testomatio-docs/docs/legal/security/jira.md +0 -140
  205. package/skills/testeiya/testomatio-docs/docs/legal/security/subprocessors.md +0 -76
  206. package/skills/testeiya/testomatio-docs/docs/management/company/administration.md +0 -363
  207. package/skills/testeiya/testomatio-docs/docs/management/company/audit-log.md +0 -41
  208. package/skills/testeiya/testomatio-docs/docs/management/company/plan-features-comparison.md +0 -240
  209. package/skills/testeiya/testomatio-docs/docs/management/company/subscriptions.md +0 -326
  210. package/skills/testeiya/testomatio-docs/docs/management/company/trials.md +0 -75
  211. package/skills/testeiya/testomatio-docs/docs/management/company/users-and-permissions/accountant.md +0 -49
  212. package/skills/testeiya/testomatio-docs/docs/management/company/users-and-permissions/index.mdx +0 -285
  213. package/skills/testeiya/testomatio-docs/docs/management/company/users-and-permissions/read-only-user.md +0 -67
  214. package/skills/testeiya/testomatio-docs/docs/management/company/users-and-permissions/teams.md +0 -138
  215. package/skills/testeiya/testomatio-docs/docs/management/project/settings.md +0 -87
  216. package/skills/testeiya/testomatio-docs/docs/management/project/templates.md +0 -546
  217. package/skills/testeiya/testomatio-docs/docs/project/analytics/index.md +0 -326
  218. package/skills/testeiya/testomatio-docs/docs/project/import-export/export-tests/classical-tests-markdown-format.md +0 -386
  219. package/skills/testeiya/testomatio-docs/docs/project/import-export/export-tests/download-manual-tests-as-files.md +0 -378
  220. package/skills/testeiya/testomatio-docs/docs/project/import-export/export-tests/export-to-obsidian.md +0 -112
  221. package/skills/testeiya/testomatio-docs/docs/project/import-export/export-tests/export-to-spreadsheet.md +0 -127
  222. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/auto-import.md +0 -63
  223. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-Allure-TestOps.md +0 -49
  224. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-QTest.md +0 -41
  225. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-Qase.md +0 -39
  226. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-Zephyr.md +0 -37
  227. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-csv-xlsx.md +0 -117
  228. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-cucumber.md +0 -93
  229. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-qmetry.md +0 -44
  230. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-source-code.md +0 -117
  231. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-testcaselabs.md +0 -44
  232. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-testmo.md +0 -47
  233. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-testrail.md +0 -82
  234. package/skills/testeiya/testomatio-docs/docs/project/import-export/import/import-tests-from-xray.md +0 -55
  235. package/skills/testeiya/testomatio-docs/docs/project/plans/index.md +0 -334
  236. package/skills/testeiya/testomatio-docs/docs/project/pulse/index.md +0 -104
  237. package/skills/testeiya/testomatio-docs/docs/project/runs/archive-runs-and-groups.md +0 -176
  238. package/skills/testeiya/testomatio-docs/docs/project/runs/custom-statuses.md +0 -195
  239. package/skills/testeiya/testomatio-docs/docs/project/runs/environments.md +0 -203
  240. package/skills/testeiya/testomatio-docs/docs/project/runs/managing-runs.md +0 -455
  241. package/skills/testeiya/testomatio-docs/docs/project/runs/merge-strategies.md +0 -137
  242. package/skills/testeiya/testomatio-docs/docs/project/runs/reports.md +0 -329
  243. package/skills/testeiya/testomatio-docs/docs/project/runs/rungroups.md +0 -342
  244. package/skills/testeiya/testomatio-docs/docs/project/runs/running-automated-tests.md +0 -256
  245. package/skills/testeiya/testomatio-docs/docs/project/runs/running-manual-and-automated-tests.md +0 -331
  246. package/skills/testeiya/testomatio-docs/docs/project/runs/running-tests-manually.md +0 -633
  247. package/skills/testeiya/testomatio-docs/docs/project/runs/temporary-tests-notes.md +0 -223
  248. package/skills/testeiya/testomatio-docs/docs/project/steps-snippets/snippets.md +0 -68
  249. package/skills/testeiya/testomatio-docs/docs/project/steps-snippets/steps.md +0 -181
  250. package/skills/testeiya/testomatio-docs/docs/project/tests/bdd-test-case-editor.md +0 -98
  251. package/skills/testeiya/testomatio-docs/docs/project/tests/classical-test-case-editor.md +0 -354
  252. package/skills/testeiya/testomatio-docs/docs/project/tests/classical-vs-bdd.md +0 -169
  253. package/skills/testeiya/testomatio-docs/docs/project/tests/copy-and-move-your-tests.md +0 -156
  254. package/skills/testeiya/testomatio-docs/docs/project/tests/other-features-for-test-case-design.md +0 -412
  255. package/skills/testeiya/testomatio-docs/docs/project/tests/test-case-creation-and-editing.md +0 -527
  256. package/skills/testeiya/testomatio-docs/docs/support/index.md +0 -75
  257. package/skills/testeiya/testomatio-docs/docs/test-reporting/artifacts.md +0 -388
  258. package/skills/testeiya/testomatio-docs/docs/test-reporting/cli.md +0 -215
  259. package/skills/testeiya/testomatio-docs/docs/test-reporting/configuration.md +0 -247
  260. package/skills/testeiya/testomatio-docs/docs/test-reporting/frameworks.md +0 -490
  261. package/skills/testeiya/testomatio-docs/docs/test-reporting/functions.md +0 -144
  262. package/skills/testeiya/testomatio-docs/docs/test-reporting/index.mdx +0 -48
  263. package/skills/testeiya/testomatio-docs/docs/test-reporting/junit.md +0 -248
  264. package/skills/testeiya/testomatio-docs/docs/test-reporting/logger.md +0 -138
  265. package/skills/testeiya/testomatio-docs/docs/test-reporting/php.md +0 -77
  266. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/bitbucket.md +0 -72
  267. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/csv.md +0 -23
  268. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/debug.md +0 -18
  269. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/github.md +0 -63
  270. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/gitlab.md +0 -29
  271. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/html.md +0 -80
  272. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/index.mdx +0 -57
  273. package/skills/testeiya/testomatio-docs/docs/test-reporting/pipes/testomatio.md +0 -331
  274. package/skills/testeiya/testomatio-docs/docs/test-reporting/python.md +0 -229
  275. package/skills/testeiya/testomatio-docs/docs/test-reporting/workflows.md +0 -325
  276. package/skills/testeiya/testomatio-docs/docs/tutorials/Interacting-via-API.md +0 -159
  277. package/skills/testeiya/testomatio-docs/docs/tutorials/Manual-Testing-Classic.md +0 -164
  278. package/skills/testeiya/testomatio-docs/docs/tutorials/Set-Up-Read-Only-Access.md +0 -85
  279. package/skills/testeiya/testomatio-docs/docs/tutorials/Using-AI-in-Testing.md +0 -163
  280. package/skills/testeiya/testomatio-docs/docs/tutorials/Working-with-Jira.md +0 -125
  281. package/skills/testeiya/testomatio-docs/docs/tutorials/java.md +0 -478
  282. package/skills/testeiya/testomatio-docs/docs/tutorials/playwright.md +0 -207
  283. package/skills/testeiya/testomatio-docs/docs/tutorials/webdriver.md +0 -218
  284. package/skills/testeiya/testomatio-docs/docs.lock.json +0 -6
  285. package/skills/testeiya/testomatio-reporter/SKILL.md +0 -307
  286. package/skills/testomatio/explorbot/explorbot-fundamentals/SKILL.md +0 -88
  287. package/skills/testomatio/explorbot/explorbot-plan/SKILL.md +0 -95
  288. package/skills/testomatio/explorbot/explorbot-setup/SKILL.md +0 -334
  289. package/skills/testomatio/test-automation/automate-manual-test-cases/CLAUDE.md +0 -56
  290. package/skills/testomatio/test-automation/automate-manual-test-cases/SKILL.md +0 -242
  291. package/skills/testomatio/test-automation/automate-manual-test-cases/references/CODECEPTJS_BEST_PRACTICES.md +0 -182
  292. package/skills/testomatio/test-automation/automate-manual-test-cases/references/FINAL_SUMMARY_TEMPLATE.md +0 -22
  293. package/skills/testomatio/test-automation/automate-manual-test-cases/references/PLAYWRIGHT_BEST_PRACTICES.md +0 -90
  294. package/skills/testomatio/test-automation/automate-manual-test-cases/references/POM_BEST_PRACTICES.md +0 -53
  295. package/skills/testomatio/test-automation/automate-manual-test-cases/references/TEST_DATA_MANAGEMENT.md +0 -52
  296. package/skills/testomatio/test-automation/debug-fix-failed-flaky-autotests/SKILL.md +0 -107
  297. package/skills/testomatio/test-automation/debug-fix-failed-flaky-autotests/references/DEBUGGING_QUICK_REFERENCE.md +0 -113
  298. package/skills/testomatio/test-automation/qa-automation-test-consolidation/SKILL.md +0 -29
  299. package/skills/testomatio/test-automation/run-tests-with-testomatio-reporter/SKILL.md +0 -151
  300. package/skills/testomatio/test-automation/setup-pr-testing/SKILL.md +0 -199
  301. package/skills/testomatio/test-automation/testomat-allure-adapter/SKILL.md +0 -289
  302. package/skills/testomatio/test-management/detect-duplicate-test-cases/SKILL.md +0 -86
  303. package/skills/testomatio/test-management/detect-duplicate-test-cases/references/DUPLICATE_INSTRUCTIONS.md +0 -54
  304. package/skills/testomatio/test-management/improve-test-cases/SKILL.md +0 -114
  305. package/skills/testomatio/test-management/improve-test-cases/references/TESTOMAT_MARKDOWN_EXAMPLE.md +0 -66
  306. package/skills/testomatio/test-management/pull-request-diff-analyzer/SKILL.md +0 -141
  307. package/skills/testomatio/test-management/qa-e2e-tests-reporting/SKILL.md +0 -354
  308. package/skills/testomatio/test-management/qa-e2e-tests-reporting/references/TESTOMATIO_ARTIFACTS.md +0 -82
  309. package/skills/testomatio/test-management/qa-e2e-tests-reporting/references/TESTOMATIO_HTML_REPORT.md +0 -37
  310. package/skills/testomatio/test-management/qa-e2e-tests-reporting/references/TESTOMATIO_REPORTERS_CONFIG.md +0 -118
  311. package/skills/testomatio/test-management/qa-pr-requirements-analyzer/SKILL.md +0 -149
  312. package/skills/testomatio/test-management/qa-pr-requirements-analyzer/references/summary-example.md +0 -54
  313. package/skills/testomatio/test-management/qa-requirement-reviewer/SKILL.md +0 -126
  314. package/skills/testomatio/test-management/qa-requirement-reviewer/references/requirements_reviewer_examples.md +0 -128
  315. package/skills/testomatio/test-management/qa-test-code-coverage/SKILL.md +0 -174
  316. package/skills/testomatio/test-management/qa-test-code-coverage/references/COVERAGE_FILE_FORMAT.md +0 -138
  317. package/skills/testomatio/test-management/qa-test-code-coverage/references/E2E_FRAMEWORKS.md +0 -65
  318. package/skills/testomatio/test-management/qa-test-code-coverage/scripts/check-coverage.mjs +0 -40
  319. package/skills/testomatio/test-management/qa-thinking/SKILL.md +0 -36
  320. package/skills/testomatio/test-management/qa-write-test-cases/SKILL.md +0 -267
  321. package/skills/testomatio/test-management/qa-write-test-cases/references/test-case-format.md +0 -387
  322. package/skills/testomatio/test-management/qa-write-test-cases/references/testomat-tms-guide.md +0 -72
  323. package/skills/testomatio/test-management/qa-write-test-cases/references/writing-rule.md +0 -159
  324. package/skills/testomatio/test-management/scan-automation-project/SKILL.md +0 -152
  325. package/skills/testomatio/test-management/sync-test-cases-with-tms/SKILL.md +0 -107
  326. package/skills/testomatio/test-management/sync-test-cases-with-tms/references/TESTOMATIO_CLI.md +0 -140
  327. package/skills/testomatio/test-management/testomatio-mcp/SKILL.md +0 -182
  328. package/skills/testomatio/test-management/testomatio-mcp/references/MCP_SETUP.md +0 -169
  329. package/skills.yaml +0 -21
  330. package/src/ai-debug.ts +0 -188
  331. package/src/api/agent-get.ts +0 -22
  332. package/src/api/agent-start.ts +0 -384
  333. package/src/api/client-log.ts +0 -29
  334. package/src/api/context.ts +0 -332
  335. package/src/api/debug-layout.ts +0 -47
  336. package/src/api/debug-report.ts +0 -29
  337. package/src/api/debug-snapshot.ts +0 -30
  338. package/src/api/debug-stream.ts +0 -52
  339. package/src/api/files-delete.ts +0 -184
  340. package/src/api/files-read.ts +0 -41
  341. package/src/api/files-rename.ts +0 -99
  342. package/src/api/files-tree.ts +0 -292
  343. package/src/api/files-write.ts +0 -41
  344. package/src/api/mcp.ts +0 -603
  345. package/src/api/memory.ts +0 -69
  346. package/src/api/open-external.ts +0 -39
  347. package/src/api/playwright-cli.ts +0 -606
  348. package/src/api/providers.ts +0 -457
  349. package/src/api/read-env-token.ts +0 -33
  350. package/src/api/sessions.ts +0 -79
  351. package/src/api/settings.ts +0 -120
  352. package/src/api/skills.ts +0 -58
  353. package/src/api/testomatio-attachment.ts +0 -89
  354. package/src/api/testomatio-auth.ts +0 -284
  355. package/src/api/testomatio-proxy.ts +0 -197
  356. package/src/api/testomatio-run-stats.ts +0 -81
  357. package/src/api/testomatio-target.ts +0 -225
  358. package/src/api/testomatio-transcription.ts +0 -82
  359. package/src/api/workspace-search.ts +0 -96
  360. package/src/api/workspace-sync.ts +0 -151
  361. package/src/api/workspace.ts +0 -165
  362. package/src/app-server.ts +0 -556
  363. package/src/bridge.ts +0 -251
  364. package/src/check-tests.ts +0 -156
  365. package/src/cli.ts +0 -17
  366. package/src/commands.ts +0 -244
  367. package/src/config.ts +0 -183
  368. package/src/connection.ts +0 -658
  369. package/src/context-store.ts +0 -265
  370. package/src/debug-bus.ts +0 -405
  371. package/src/extensions/tool-gate.ts +0 -220
  372. package/src/extensions/webui/ask-channel.ts +0 -52
  373. package/src/extensions/webui/index.ts +0 -184
  374. package/src/extensions/webui/tools/ask-question.ts +0 -88
  375. package/src/extensions/webui/tools/query-result.ts +0 -79
  376. package/src/extensions/webui/tools/render-chart.ts +0 -53
  377. package/src/extensions/webui/tools/render-item.ts +0 -61
  378. package/src/extensions/webui/tools/render-list.ts +0 -170
  379. package/src/extensions/webui/tools/render-result.ts +0 -85
  380. package/src/extensions/webui/tools/render-tree.ts +0 -71
  381. package/src/extensions/webui/tools/ui-widget.ts +0 -54
  382. package/src/extensions/webui/tools/widget-result.ts +0 -13
  383. package/src/extensions/webui/widget-channel.ts +0 -50
  384. package/src/file-log.ts +0 -196
  385. package/src/git-tracked.ts +0 -68
  386. package/src/gitignore.ts +0 -53
  387. package/src/json-store.ts +0 -43
  388. package/src/load-env.ts +0 -70
  389. package/src/loader-style.ts +0 -96
  390. package/src/main.ts +0 -140
  391. package/src/mcp-catalog.ts +0 -96
  392. package/src/models-catalog.ts +0 -72
  393. package/src/permissions.ts +0 -120
  394. package/src/project-dir.ts +0 -189
  395. package/src/project-info.ts +0 -108
  396. package/src/prompt/app-ui.ts +0 -59
  397. package/src/prompt/browser.ts +0 -27
  398. package/src/prompt/index.ts +0 -62
  399. package/src/server-info.ts +0 -62
  400. package/src/session-factory.ts +0 -442
  401. package/src/session-store.ts +0 -115
  402. package/src/shell-env.ts +0 -45
  403. package/src/skills.ts +0 -163
  404. package/src/sync-snapshot.ts +0 -140
  405. package/src/telemetry.ts +0 -239
  406. package/src/testomatio-auth.ts +0 -299
  407. package/src/testomatio.ts +0 -98
  408. package/src/theme.ts +0 -30
  409. package/src/user-env.ts +0 -94
  410. package/src/welcome.ts +0 -194
  411. package/src/workspace/safe-path.ts +0 -85
  412. package/src/workspace/test-md.ts +0 -70
  413. package/src/workspace-model.ts +0 -440
  414. 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
- `;