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