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
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: setup-pr-testing
|
|
3
|
-
description: Set up CI so pull requests drive selective testing with Testomat.io. When a PR opens, a test run scoped to its changes is created for testers. The affected automated tests launch after a preview deploy or on merge. Use when the user wants to integrate Testomat.io runs into a CI pipeline, create test runs per pull request, or trigger affected tests from CI events.
|
|
4
|
-
license: MIT
|
|
5
|
-
metadata:
|
|
6
|
-
author: Testomat.io
|
|
7
|
-
version: 2.1.0
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Setup PR Testing
|
|
11
|
-
|
|
12
|
-
I set up a project's CI for PR-driven testing. What gets wired depends on the project's tests:
|
|
13
|
-
|
|
14
|
-
- manual — testers get a run to start on Testomat.io the moment the PR opens; nothing to execute.
|
|
15
|
-
- automated — an execution mode must be chosen: inline in the pipeline, a Testomat.io CI profile, or another workflow/repo.
|
|
16
|
-
- mixed — both, sharing one run per PR.
|
|
17
|
-
|
|
18
|
-
Every reporter command the jobs execute is documented in `run-tests-with-testomatio-reporter` — read it before wiring.
|
|
19
|
-
|
|
20
|
-
> **GOAL: a working pipeline committed to the project's own CI system.** That CI configuration is the one and only finished result. I run locally to author it — I am never part of CI. Do not execute reporter commands while authoring; the one exception is the final battle-test (Step 7), on a PR the user picked.
|
|
21
|
-
|
|
22
|
-
## Possible flows
|
|
23
|
-
|
|
24
|
-
Post this diagram as a chat message before the first question — never open with a question; it frames everything that follows. When questions go through a form or tool, the diagram must already be on screen in an earlier message. Render diagrams as Mermaid when the environment displays it; fall back to ASCII otherwise.
|
|
25
|
-
|
|
26
|
-
Never post a diagram bare — follow it immediately with one short paragraph explaining it: this is the general schema of PR testing, for the user to examine before anything is implemented; a run is created when a PR opens, and the user will now choose which types of tests execute (manual, automated, or both) and how the automated ones run — inline in the pipeline, through a Testomat.io CI profile, or by dispatching another repo — and when they launch (preview deploy or merge).
|
|
27
|
-
|
|
28
|
-
```mermaid
|
|
29
|
-
flowchart LR
|
|
30
|
-
PR([PR opened]) --> RUN[Create a run scoped<br/>to the PR changes]
|
|
31
|
-
RUN -->|manual / mixed| TESTERS[Testers execute manual cases<br/>on Testomat.io]
|
|
32
|
-
RUN -->|automated / mixed| SCHED[Schedule automated tests —<br/>nothing runs yet]
|
|
33
|
-
SCHED --> TRIG{When to launch?}
|
|
34
|
-
TRIG -->|preview deployed| MODE{How to execute?}
|
|
35
|
-
TRIG -->|PR merged| MODE
|
|
36
|
-
MODE -->|via a Testomat.io CI profile| RES
|
|
37
|
-
MODE -->|inline in this pipeline| RES
|
|
38
|
-
MODE -->|by dispatching another repo| RES
|
|
39
|
-
RES[Run the affected automated tests —<br/>results land in the PR run]
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
Keep every diagram clear: verb-first action blocks ("Create a run", "Testers execute manual cases"), decisions as questions, configuration details in the text below — never as blocks, and end at an outcome.
|
|
43
|
-
|
|
44
|
-
- Manual-only project → only the top branch: the run is complete at creation, testers execute it on Testomat.io, nothing launches.
|
|
45
|
-
- Automated-only project → only the bottom branch: the scheduled run launches on a trigger through the chosen mode.
|
|
46
|
-
- Mixed project → both branches share one run per PR.
|
|
47
|
-
|
|
48
|
-
## The coverage map drives everything
|
|
49
|
-
|
|
50
|
-
A coverage map maps source files/globs to test identifiers; the reporter filters it by the diff so only impacted tests are prepared and run. It is produced by the `qa-test-code-coverage` skill — default `coverage.tests.yml`, one file serving both manual and automated tests. Missing map → delegate to `qa-test-code-coverage`; never hand-write one here. Without a map nothing can be filtered and no pipeline can be wired.
|
|
51
|
-
|
|
52
|
-
## Method, not snippets
|
|
53
|
-
|
|
54
|
-
The valuable knowledge here is the flow model and the decisions to confirm with the user. The reporter commands come from `run-tests-with-testomatio-reporter`; translating triggers into a specific CI's YAML/Groovy is yours — you already know how every CI expresses "on PR open", "after deploy finished", "on merge", "carry a value between pipelines", and "don't fail the pipeline". Write that config for the CI in front of you; never bake per-CI workflow files into this skill.
|
|
55
|
-
|
|
56
|
-
## Critical Constraints
|
|
57
|
-
|
|
58
|
-
- **Never execute the reporter while authoring — the deliverable is committed CI config.** Sole exception: the user-approved battle-test (Step 7).
|
|
59
|
-
- **Battle-test executes tests only for an already-merged PR**; an open PR only gets a run created.
|
|
60
|
-
- **Only touch CI config files** — never source or test files.
|
|
61
|
-
- Diagrams gate the dialogue: flows diagram before the first question, selected-flow diagram approved before wiring (Step 3), every diagram followed by a one-paragraph explanation.
|
|
62
|
-
- Discovery first — delegate to `scan-automation-project` before writing anything.
|
|
63
|
-
- Never assume or hardcode the CI system; read the repo, ask if unclear.
|
|
64
|
-
- Never guess a Testomat.io CI profile name — pick from a list (Testomat.io MCP) confirmed by the user, or ask.
|
|
65
|
-
- Say "Testomat.io CI profile" in full, never bare "profile"; every question option explains itself in plain words.
|
|
66
|
-
- Avoid presenting the project's full test inventory as the run scope; never print full test lists.
|
|
67
|
-
- No coverage map → no pipeline; delegate map creation to `qa-test-code-coverage`.
|
|
68
|
-
- The PR-open job creates the run and executes nothing.
|
|
69
|
-
- Preview launches gate on the deploy-finished signal, never on the push.
|
|
70
|
-
- Launch jobs never block a PR and never fail a merge/release pipeline.
|
|
71
|
-
- PR comments come from the reporter's own pipes — never script a PR-comment API call.
|
|
72
|
-
- Every run gets a PR-based title and a rungroup.
|
|
73
|
-
|
|
74
|
-
## Workflow
|
|
75
|
-
|
|
76
|
-
### Step 1 — Discover
|
|
77
|
-
|
|
78
|
-
- Delegate to `scan-automation-project`: are there manual `.test.md` cases, which e2e framework exists (unit/integration don't count), do automated tests live in this repo or elsewhere.
|
|
79
|
-
- The result fixes the project kind — manual, automated, or mixed — and with it which flows apply.
|
|
80
|
-
- Read the repo's CI config files to identify the CI system. Several CIs or none → ask which one runs PRs.
|
|
81
|
-
- Locate the coverage map (default `coverage.tests.yml`). Missing → propose creating it and delegate to `qa-test-code-coverage`.
|
|
82
|
-
|
|
83
|
-
### Step 2 — Present the flows and ask the unknowns
|
|
84
|
-
|
|
85
|
-
Post the possible-flows diagram, trimmed to the kinds found in Step 1, as its own message with its one-paragraph explanation (what the schema is, which choices the user is about to make) — then ask only what applies. Read the CI files first so you don't ask what's already answered.
|
|
86
|
-
|
|
87
|
-
Manual tests found — nothing to choose: their part of the run is complete at creation, testers start on Testomat.io immediately.
|
|
88
|
-
|
|
89
|
-
Automated tests found — ❓ choose the execution mode. Each option in the question must explain itself in plain words — what runs where and who triggers it. In particular spell out what a Testomat.io CI profile is: a CI workflow configuration saved on the Testomat.io project (Settings → CI) that Testomat.io dispatches to execute the tests, with results reporting back into the run.
|
|
90
|
-
|
|
91
|
-
| Mode | When it fits |
|
|
92
|
-
| ------------------------------- | ------------------------------------------------------------------------------------------------------------- |
|
|
93
|
-
| Remote — Testomat.io CI profile | a Testomat.io CI profile for the e2e suite exists (Settings → CI); Testomat.io owns runner, env, secrets |
|
|
94
|
-
| Inline — this pipeline | mobile/simulators, services this pipeline spins up, or an e2e job that already works in this repo |
|
|
95
|
-
| Cross-repo dispatch | the e2e suite lives in another repo and no Testomat.io CI profile covers it |
|
|
96
|
-
|
|
97
|
-
- Remote chosen → identify the Testomat.io CI profile, never guess it: Testomat.io MCP connected → fetch the list, present it, ❓ ask the user to choose (profiles differ by workflow and job names); no MCP → ❓ ask for the exact profile name; none exists yet → creating one in Testomat.io (Settings → CI) is a prerequisite; wire the launch step ready to enable.
|
|
98
|
-
- No e2e suite anywhere → wire only the manual flow; never fabricate an e2e job.
|
|
99
|
-
|
|
100
|
-
Then the launch triggers (automated/mixed only):
|
|
101
|
-
|
|
102
|
-
1. Preview environments — is every commit deployed to a preview server? If yes: what is the observable deploy-finished signal, and where does the preview URL surface?
|
|
103
|
-
2. Post-merge timing — launch right on merge, or wait for a staging/production deploy to finish? A deploy gate needs its own observable signal.
|
|
104
|
-
|
|
105
|
-
And for every kind:
|
|
106
|
-
|
|
107
|
-
3. Rungroup strategy — week / day / release / milestone.
|
|
108
|
-
4. Diff base — the PR's target branch for PR jobs; post-merge jobs need the previous mainline tip (diff-base rules in `run-tests-with-testomatio-reporter`).
|
|
109
|
-
|
|
110
|
-
### Step 3 — Confirm the selected flow
|
|
111
|
-
|
|
112
|
-
- Draw the flow the answers produced — only the chosen kind, triggers, and execution mode. Mermaid when supported, ASCII otherwise.
|
|
113
|
-
- ❓ Present the diagram and get approval; wire nothing until the user accepts it.
|
|
114
|
-
|
|
115
|
-
Example — mixed project, Testomat.io CI profile, previews confirmed:
|
|
116
|
-
|
|
117
|
-
```mermaid
|
|
118
|
-
flowchart LR
|
|
119
|
-
PR([PR opened]) --> RUN[Create one mixed run<br/>scoped to the diff]
|
|
120
|
-
RUN --> TESTERS[Testers execute manual cases<br/>on Testomat.io]
|
|
121
|
-
RUN --> SCHED[Schedule automated tests —<br/>nothing runs yet]
|
|
122
|
-
PREV([Preview deployed]) --> L1[Launch automated tests via the<br/>Testomat.io CI profile, against the preview]
|
|
123
|
-
MERGE([PR merged]) --> L2[Launch automated tests<br/>with the final diff]
|
|
124
|
-
SCHED -.-> L1
|
|
125
|
-
SCHED -.-> L2
|
|
126
|
-
L1 --> RES[Results land in the PR run]
|
|
127
|
-
L2 --> RES
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
### Step 4 — Wire the phases into CI
|
|
131
|
-
|
|
132
|
-
Write the jobs in the CI's own syntax; take every command and env var from `run-tests-with-testomatio-reporter`. Manual-only projects get phase (a) alone.
|
|
133
|
-
|
|
134
|
-
**(a) PR opened → create the run.**
|
|
135
|
-
|
|
136
|
-
- Use `start` with the coverage filter; pick the run kind matching the project's tests.
|
|
137
|
-
- Persist the printed run id with the CI's native value-passing mechanism (artifact, variable, output); fallback is shared-run title matching.
|
|
138
|
-
- Run once per PR (on open); pushes to the PR don't recreate runs.
|
|
139
|
-
- A diff affecting zero tests creates no run — the job still succeeds.
|
|
140
|
-
|
|
141
|
-
**(b) Preview deployed → launch against the preview** (only when Step 2 confirmed previews).
|
|
142
|
-
|
|
143
|
-
- Trigger on the deploy-finished signal, never on the push.
|
|
144
|
-
- Remote mode forwards the preview URL as a remote param; inline mode points the runner's own base-URL env at it.
|
|
145
|
-
- Manual cases need no launch — testers work through them against the preview by hand.
|
|
146
|
-
|
|
147
|
-
**(c) PR merged → launch with the final diff.**
|
|
148
|
-
|
|
149
|
-
- Target the persisted run id; pass a fresh coverage filter with the post-merge diff base so the final merged diff decides what runs.
|
|
150
|
-
- Cross-repo mode: trigger the e2e repo's pipeline with the CI's native mechanism, passing the run id, API key, and title env into it.
|
|
151
|
-
- Keep the job non-blocking and off the release's critical path.
|
|
152
|
-
|
|
153
|
-
### Step 5 — Ensure secrets are set
|
|
154
|
-
|
|
155
|
-
- Store the project API key as `TESTOMATIO_<project_slug>` in the CI's secret store; map it to the `TESTOMATIO` env var in every job that calls the reporter. ❓ Slug unknown → ask the user.
|
|
156
|
-
- Tell the user exactly where to add it: name the secret-store location the CI at hand uses for this repo/pipeline and the exact secret name to type.
|
|
157
|
-
- Provision the PR-comment pipe token the same way (tokens per platform in `run-tests-with-testomatio-reporter`).
|
|
158
|
-
- ❓ Ask the user to confirm the secrets are in place before the pipeline PR merges — a pipeline with missing secrets fails on its first PR.
|
|
159
|
-
- The Testomat.io CI profile for remote launches is configured in Testomat.io (Settings → CI), not stored as a repo secret.
|
|
160
|
-
|
|
161
|
-
### Step 6 — Suggest a PR with the new workflow
|
|
162
|
-
|
|
163
|
-
- Commit the CI config on a branch and suggest opening a PR through the project's normal flow — the pipeline lands reviewed, never pushed straight to the default branch.
|
|
164
|
-
- Put in the PR description: the approved flow diagram, the phases wired, the execution mode chosen, and the secrets/prerequisites the reviewers must provision before merging.
|
|
165
|
-
- Where the CI runs PR-triggered workflows from the branch itself, point out that this very PR will exercise the PR-opened phase.
|
|
166
|
-
|
|
167
|
-
### Step 7 — Battle-test the setup (on approval)
|
|
168
|
-
|
|
169
|
-
Prove the pipeline's commands work before the CI ever runs them — by running them once, locally, on a real change.
|
|
170
|
-
|
|
171
|
-
- ❓ Ask the user for a real PR to validate with — open or already merged — and for approval to create real runs.
|
|
172
|
-
- Reproduce the pipeline's diff locally: open PR → check out its branch and diff against the target branch; merged PR → check out the merge commit and diff against the pre-merge tip.
|
|
173
|
-
- Create the run exactly as phase (a) does — same kind, same filter — with a title that marks it as a battle-test.
|
|
174
|
-
- Open PR → stop here: the run stays scheduled, nothing executes.
|
|
175
|
-
- Merged PR → the change is already in mainline, so launching is safe: run the phase (c) launch against the created run.
|
|
176
|
-
- Report every run created — id, kind, and the tests it scoped — and ask the user to review it in Testomat.io: does the scope match what that diff should affect?
|
|
177
|
-
- Zero tests matched → report it as a finding, then pick a PR that touches mapped source files together with the user.
|
|
178
|
-
|
|
179
|
-
### Step 8 — Summarize and hand off
|
|
180
|
-
|
|
181
|
-
Present the approved flow diagram once more, now marked as wired. Report: the CI targeted and files written; which phases are wired and which were skipped (no previews / no e2e / no Testomat.io CI profile); the chosen execution mode; title scheme and rungroup; how the launch steps find the prepared run (run id carrier or shared title); the battle-test outcome and the runs awaiting the user's review; secrets and prerequisites still to provision; assumptions to confirm. Recommend committing the coverage map alongside the CI config.
|
|
182
|
-
|
|
183
|
-
## Examples
|
|
184
|
-
|
|
185
|
-
**Example 1 — mixed project, previews, Testomat.io CI profile**
|
|
186
|
-
Discovery finds manual cases and an e2e suite; MCP lists the Testomat.io CI profiles and the user picks the one running the e2e suite; previews confirmed. → Diagram approved, then all three phases wired: mixed run on PR open, preview launch gated on the deployment-success event with the preview URL as a remote param, merge launch with a fresh post-merge filter. Comment pipe enabled.
|
|
187
|
-
|
|
188
|
-
**Example 2 — e2e lives in another repo, no Testomat.io CI profile**
|
|
189
|
-
The user picks cross-repo dispatch from the mode table: the merge job triggers the e2e repo's pipeline via the CI's native mechanism, passing the run id so results land in the prepared run. Note the Testomat.io CI profile option as the simpler future path.
|
|
190
|
-
|
|
191
|
-
**Example 3 — no coverage map yet**
|
|
192
|
-
No `coverage*.yml` found → explain nothing can be filtered without a map; delegate to `qa-test-code-coverage`; wire CI only after the map exists.
|
|
193
|
-
|
|
194
|
-
**Example 4 — manual-only project**
|
|
195
|
-
`scan-automation-project` finds `.test.md` cases and no e2e framework → the flows diagram shows only the manual branch; no execution-mode or trigger questions asked. One phase wired: a manual run per PR, complete at creation — testers start on Testomat.io. Explain that launch phases need an e2e suite first.
|
|
196
|
-
|
|
197
|
-
## Related skills
|
|
198
|
-
|
|
199
|
-
`run-tests-with-testomatio-reporter` (the reporter commands every job executes), `qa-test-code-coverage` (creates the coverage map this skill consumes), `scan-automation-project` (mandatory discovery), `qa-e2e-tests-reporting` (install the reporter if the project has no Testomat.io integration yet), `sync-test-cases-with-tms` (manual cases not yet in Testomat.io).
|
package/skills.yaml
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# External skills for Testeiya. ONE rule: every line is a GitHub repo.
|
|
2
|
-
#
|
|
3
|
-
# owner/repo a skill repo (one skill, or many)
|
|
4
|
-
# owner/repo/tree/<ref>/<subdir> pin a branch/tag/commit, or point at a subfolder
|
|
5
|
-
#
|
|
6
|
-
# Each source owns one vendor folder in cli/skills/ — the repo name, or the
|
|
7
|
-
# owner when the repo is just "skills" (testomatio/skills -> testomatio/).
|
|
8
|
-
# Updates replace only that folder; any folder this file does not own
|
|
9
|
-
# (e.g. cli/skills/testeiya/) holds first-party skills and is never touched.
|
|
10
|
-
#
|
|
11
|
-
# Categories are decided by the repo, never by this file:
|
|
12
|
-
# - repo with a Claude-plugin marketplace (.claude-plugin/marketplace.json)
|
|
13
|
-
# -> one category subfolder per plugin (testomatio/ -> test-management / test-automation / explorbot)
|
|
14
|
-
# - repo without one -> skills sit right under the vendor folder (the vendor is the category)
|
|
15
|
-
#
|
|
16
|
-
# Edit the list, then run: bunosh skills:update [vendor] See the result: bunosh skills:list
|
|
17
|
-
|
|
18
|
-
- testomatio/skills
|
|
19
|
-
- codeceptjs/skills
|
|
20
|
-
- currents-dev/playwright-best-practices-skill
|
|
21
|
-
- microsoft/playwright-cli/tree/main/skills/playwright-cli
|
package/src/ai-debug.ts
DELETED
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
import { publish, type AiEventEntry } from "./debug-bus.js";
|
|
2
|
-
|
|
3
|
-
/*
|
|
4
|
-
* Pluggable PI → Debug-panel recorder. `attachAiDebug(session)` adds one
|
|
5
|
-
* independent listener to a pi-coding-agent session and maps the LLM-level
|
|
6
|
-
* events the WS bridge never forwards — per-turn model responses, the errors a
|
|
7
|
-
* failed turn hides behind a plain `finish`, and auto-retry/fallback/compaction
|
|
8
|
-
* — into the panel's `ai` channel via `debug-bus`'s `publish`. The returned
|
|
9
|
-
* unsubscribe is called from `connection.ts` when the session is torn down.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
const MAX_DETAIL = 16000;
|
|
13
|
-
|
|
14
|
-
export function attachAiDebug(session: any, conversationId?: string | null): () => void {
|
|
15
|
-
return session.subscribe((event: any) => {
|
|
16
|
-
const entry = mapAiEvent(event);
|
|
17
|
-
if (!entry) return;
|
|
18
|
-
if (conversationId) entry.summary = withSession(entry.summary, conversationId);
|
|
19
|
-
publish(entry);
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
function mapAiEvent(event: any): AiEventInput | null {
|
|
24
|
-
if (event.type === "turn_end") return turnEntry(event.message);
|
|
25
|
-
if (event.type === "auto_retry_start") return retryStart(event);
|
|
26
|
-
if (event.type === "auto_retry_end") return retryEnd(event);
|
|
27
|
-
if (event.type === "retry_fallback_applied")
|
|
28
|
-
return fallback(`${event.from} → ${event.to} (${event.role})`, event.to, event);
|
|
29
|
-
if (event.type === "retry_fallback_succeeded")
|
|
30
|
-
return fallback(`${event.model} (${event.role})`, event.model, event);
|
|
31
|
-
if (event.type === "auto_compaction_start")
|
|
32
|
-
return compaction(`${event.reason} → ${event.action}`, true, event);
|
|
33
|
-
if (event.type === "auto_compaction_end") return compactionEnd(event);
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function turnEntry(message: any): AiEventInput | null {
|
|
38
|
-
if (!message || message.role !== "assistant") return null;
|
|
39
|
-
const text = assistantText(message.content);
|
|
40
|
-
const tokens = tokensOf(message.usage);
|
|
41
|
-
const entry: AiEventInput = {
|
|
42
|
-
kind: "ai",
|
|
43
|
-
channel: "ai",
|
|
44
|
-
name: "response",
|
|
45
|
-
summary:
|
|
46
|
-
`${message.model} · ${message.stopReason} · ${text.length} chars` +
|
|
47
|
-
`${tokenSummary(tokens)}${cacheSummary(message.usage)}${durSummary(message.duration)}`,
|
|
48
|
-
ok: true,
|
|
49
|
-
model: message.model ?? null,
|
|
50
|
-
durationMs: numberOrNull(message.duration),
|
|
51
|
-
tokens,
|
|
52
|
-
detail: detail({
|
|
53
|
-
model: message.model,
|
|
54
|
-
provider: message.provider,
|
|
55
|
-
stopReason: message.stopReason,
|
|
56
|
-
errorMessage: message.errorMessage,
|
|
57
|
-
usage: message.usage,
|
|
58
|
-
ttft: message.ttft,
|
|
59
|
-
duration: message.duration,
|
|
60
|
-
text,
|
|
61
|
-
}),
|
|
62
|
-
};
|
|
63
|
-
if (message.stopReason !== "error") return entry;
|
|
64
|
-
entry.name = "error";
|
|
65
|
-
entry.ok = false;
|
|
66
|
-
entry.summary = message.errorMessage ?? "error";
|
|
67
|
-
return entry;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
function tokenSummary(tokens: AiEventEntry["tokens"]): string {
|
|
71
|
-
if (!tokens) return "";
|
|
72
|
-
return ` · ${tokens.input}/${tokens.output} tok`;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
function cacheSummary(usage: any): string {
|
|
76
|
-
if (!usage?.cacheRead) return "";
|
|
77
|
-
return ` · cached=${usage.cacheRead}`;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
function durSummary(duration: any): string {
|
|
81
|
-
if (typeof duration !== "number") return "";
|
|
82
|
-
return ` · dur=${(duration / 1000).toFixed(1)}s`;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
function withSession(summary: string | null, conversationId: string): string {
|
|
86
|
-
if (!summary) return `session:${conversationId}`;
|
|
87
|
-
return `${summary} · session:${conversationId}`;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
function retryStart(event: any): AiEventInput {
|
|
91
|
-
return {
|
|
92
|
-
kind: "ai",
|
|
93
|
-
channel: "ai",
|
|
94
|
-
name: "retry",
|
|
95
|
-
ok: false,
|
|
96
|
-
summary: `attempt ${event.attempt}/${event.maxAttempts} — ${event.errorMessage}`,
|
|
97
|
-
model: null,
|
|
98
|
-
durationMs: numberOrNull(event.delayMs),
|
|
99
|
-
tokens: null,
|
|
100
|
-
detail: detail(event),
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
function retryEnd(event: any): AiEventInput {
|
|
105
|
-
const entry: AiEventInput = {
|
|
106
|
-
kind: "ai",
|
|
107
|
-
channel: "ai",
|
|
108
|
-
name: "retry",
|
|
109
|
-
ok: true,
|
|
110
|
-
summary: `recovered on attempt ${event.attempt}`,
|
|
111
|
-
model: null,
|
|
112
|
-
durationMs: null,
|
|
113
|
-
tokens: null,
|
|
114
|
-
detail: detail(event),
|
|
115
|
-
};
|
|
116
|
-
if (event.success) return entry;
|
|
117
|
-
entry.name = "error";
|
|
118
|
-
entry.ok = false;
|
|
119
|
-
entry.summary = event.finalError ?? "retries exhausted";
|
|
120
|
-
return entry;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
function fallback(summary: string, model: string | undefined, event: any): AiEventInput {
|
|
124
|
-
return {
|
|
125
|
-
kind: "ai",
|
|
126
|
-
channel: "ai",
|
|
127
|
-
name: "fallback",
|
|
128
|
-
ok: true,
|
|
129
|
-
summary,
|
|
130
|
-
model: model ?? null,
|
|
131
|
-
durationMs: null,
|
|
132
|
-
tokens: null,
|
|
133
|
-
detail: detail(event),
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
function compactionEnd(event: any): AiEventInput {
|
|
138
|
-
if (event.errorMessage) return compaction(event.errorMessage, false, event);
|
|
139
|
-
return compaction(`${event.action} done`, true, event);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
function compaction(summary: string, ok: boolean, event: any): AiEventInput {
|
|
143
|
-
return {
|
|
144
|
-
kind: "ai",
|
|
145
|
-
channel: "ai",
|
|
146
|
-
name: "compaction",
|
|
147
|
-
ok,
|
|
148
|
-
summary,
|
|
149
|
-
model: null,
|
|
150
|
-
durationMs: null,
|
|
151
|
-
tokens: null,
|
|
152
|
-
detail: detail(event),
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
function tokensOf(usage: any): AiEventEntry["tokens"] {
|
|
157
|
-
if (!usage) return null;
|
|
158
|
-
return { input: usage.input ?? 0, output: usage.output ?? 0, total: usage.totalTokens ?? 0 };
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
function assistantText(content: any): string {
|
|
162
|
-
if (!Array.isArray(content)) return "";
|
|
163
|
-
const parts: string[] = [];
|
|
164
|
-
for (const part of content) {
|
|
165
|
-
if (part?.type === "text") parts.push(part.text ?? "");
|
|
166
|
-
if (part?.type === "thinking") parts.push(`[thinking] ${part.thinking ?? part.text ?? ""}`);
|
|
167
|
-
if (part?.type === "toolCall") parts.push(`[tool:${part.name}]`);
|
|
168
|
-
}
|
|
169
|
-
return parts.filter(Boolean).join("\n");
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
function numberOrNull(value: any): number | null {
|
|
173
|
-
if (typeof value === "number") return value;
|
|
174
|
-
return null;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
function detail(value: any): string | null {
|
|
178
|
-
let json: string;
|
|
179
|
-
try {
|
|
180
|
-
json = JSON.stringify(value, null, 2);
|
|
181
|
-
} catch {
|
|
182
|
-
return null;
|
|
183
|
-
}
|
|
184
|
-
if (json.length <= MAX_DETAIL) return json;
|
|
185
|
-
return `${json.slice(0, MAX_DETAIL)}… (+${json.length - MAX_DETAIL} more chars)`;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
type AiEventInput = Omit<AiEventEntry, "id" | "ts">;
|
package/src/api/agent-get.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { getSession } from "../session-store.js";
|
|
2
|
-
|
|
3
|
-
export async function agentGet(sessionId: string): Promise<Response> {
|
|
4
|
-
const session = getSession(sessionId);
|
|
5
|
-
|
|
6
|
-
if (!session) {
|
|
7
|
-
return Response.json({ error: "Session not found" }, { status: 404 });
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
const expectedMcpServers = (session.projects ?? [])
|
|
11
|
-
.filter((p) => p.status === "ok")
|
|
12
|
-
.map((p) => `testomatio-${p.slug}`);
|
|
13
|
-
|
|
14
|
-
return Response.json({
|
|
15
|
-
sessionId: session.sessionId,
|
|
16
|
-
cwd: session.cwd,
|
|
17
|
-
projects: session.projects,
|
|
18
|
-
backendUrl: session.backendUrl,
|
|
19
|
-
expectedMcpServers,
|
|
20
|
-
createdAt: session.createdAt,
|
|
21
|
-
});
|
|
22
|
-
}
|