testeiya 0.2.1 → 0.3.10
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 +284 -171
- 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 +57 -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 +172 -0
- package/dist/src/args.js.map +1 -0
- package/dist/src/cli.js +97 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/doctor.js +186 -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 +185 -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 +291 -0
- package/dist/src/run.js.map +1 -0
- package/dist/src/session.js +92 -0
- package/dist/src/session.js.map +1 -0
- package/dist/src/sessions.js +61 -0
- package/dist/src/sessions.js.map +1 -0
- package/dist/vendor/mcp.js +14801 -0
- package/mcp-tools.json +2967 -0
- package/package.json +34 -43
- 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 +57 -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/assets/testeiya-logo-dark.svg +0 -16
- package/assets/testeiya-logo.svg +0 -15
- 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 -194
- 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,206 +1,102 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: writing-codeceptjs-tests
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Use when creating a new CodeceptJS 4 test, extending an existing Scenario, or
|
|
5
|
+
porting a manual test plan to code. Builds tests against the live browser via
|
|
6
|
+
the CodeceptJS MCP server — never from imagined locators or flows. Trigger on
|
|
7
|
+
any request to create, write, add, draft, or scaffold a CodeceptJS test,
|
|
8
|
+
login flow, end-to-end check, or "test from scratch".
|
|
4
9
|
---
|
|
5
10
|
|
|
6
11
|
# Writing CodeceptJS 4 Tests
|
|
7
12
|
|
|
8
|
-
A test that was never executed during authoring is unreliable
|
|
13
|
+
A test that was never executed during authoring is unreliable. Drive the real browser via the CodeceptJS MCP server, verify every locator against the live page, commit only steps that passed.
|
|
9
14
|
|
|
10
|
-
Two
|
|
15
|
+
Two modes, picked by how much of the flow you already know:
|
|
11
16
|
|
|
12
|
-
- **Mode A — incremental `run_code
|
|
13
|
-
- **Mode B — scaffold-and-pause** (recommended for greenfield / unknown flows)
|
|
17
|
+
- **Mode A — incremental `run_code`**: send one or two `I.*` lines per call, read response, repeat. For extending existing tests, known flows, porting manual plans.
|
|
18
|
+
- **Mode B — scaffold-and-pause** (recommended for greenfield / unknown flows): write a stub Scenario containing `I.amOnPage('/...'); pause();`, run via MCP `run_test`. The browser opens and yields control at `pause()` — drive the live page via `run_code`, then replace `pause()` with the verified sequence.
|
|
14
19
|
|
|
15
|
-
Both
|
|
20
|
+
Both share the same discovery / locator / commit steps; the difference is *where the in-flight exploration happens*.
|
|
16
21
|
|
|
17
22
|
## Workflow
|
|
18
23
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
})
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
Before(({ login }) => login('admin'))
|
|
78
|
-
|
|
79
|
-
Scenario('draft - feature exploration', ({ I }) => {
|
|
80
|
-
I.amOnPage('/dashboard')
|
|
81
|
-
pause()
|
|
82
|
-
})
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
Run it via MCP `run_test`. The browser opens, navigates, and yields control at `pause()` — the response carries `{ status: 'paused', pausedAfter, page, suggestions }`. The same `I` / browser the test is using is now driven by `run_code` against the live page.
|
|
86
|
-
|
|
87
|
-
### 8. Learn the page and pick locators
|
|
88
|
-
Hand off to the **codeceptjs-exploration** skill: read the ARIA snapshot first, fall back to HTML when needed, and use `I.grabWebElement` / `I.grabWebElements` (with permissive XPaths when the obvious locator misses) to enumerate and disambiguate candidates. Commit a locator only after verifying it matches exactly one element via MCP `run_code`. In Mode B, this exploration happens *during the pause window* — the page is sitting there waiting for you.
|
|
89
|
-
|
|
90
|
-
Translate devtools-style strict locators to readable form **before** they hit the test file — see the **Locators** section below.
|
|
91
|
-
|
|
92
|
-
### 9. Build the Scenario via MCP
|
|
93
|
-
|
|
94
|
-
**Mode A** — for each user goal (fill a field, click a button, see a confirmation), run one or two CodeceptJS commands through MCP `run_code`, then read the response.
|
|
95
|
-
|
|
96
|
-
**Mode B** — work the live page from the pause: try one or two `I.*` lines via `run_code`, read the response, navigate the next step. Each successful command goes into a scratchpad you'll paste back into the test file in step 10. When you've reached the end of the flow you wanted, the scratchpad is your verified sequence.
|
|
97
|
-
|
|
98
|
-
After every command (either mode) ask:
|
|
99
|
-
- Did the URL or ARIA change the way you expected?
|
|
100
|
-
- Any new errors in the console logs?
|
|
101
|
-
- Does a `grab*` value match what was expected?
|
|
102
|
-
|
|
103
|
-
If a step fails — try a different locator, add a `waitFor*`, or reconsider the flow. **Stop and ask the user** when something is genuinely ambiguous (two "Save" buttons; an unclear empty state; a feature flag that might not be enabled). Don't push through.
|
|
104
|
-
|
|
105
|
-
### 10. Commit the verified sequence
|
|
106
|
-
When every step has worked once in isolation, paste them into a test file:
|
|
107
|
-
- Match existing file naming and the **one-Feature-per-file** rule.
|
|
108
|
-
- Use a page-object method or custom step wherever one fits — don't duplicate selectors.
|
|
109
|
-
- **Translate every locator to its readable form** (see the **Locators** section). No `{ css: 'input[placeholder*="…"]' }`, no `{ xpath: '//tr[contains(.,…)]//…' }` in committed code. Strict locators are a code-review red flag unless nothing semantic, ARIA, or `locate()`-shaped fits.
|
|
110
|
-
- Wrap secrets with `secret(...)`; pull credentials from env vars only.
|
|
111
|
-
- Add the tag the suite already uses (`{ tag: '@smoke' }`) when relevant.
|
|
112
|
-
- **Mode B specific** — replace the `pause()` line with the verified sequence above it. Remove the `draft` Scenario name and rename to its real intent. Don't leave `pause()` in a committed test.
|
|
113
|
-
- Run the file end-to-end with `aiTrace` enabled: `npx codeceptjs run --grep '<scenario name>' --steps`. Hand the result to **codeceptjs-run-analysis** — it reads `output/trace_*/` artifacts via bash tools so you can confirm the flow ran clean. Only declare done when the scenario passes there.
|
|
114
|
-
|
|
115
|
-
## Locators — readable, semantic, scoped
|
|
116
|
-
|
|
117
|
-
Pick the highest-level form that fits. Priority, top wins:
|
|
118
|
-
|
|
119
|
-
1. **Dedicated test attributes** — when the page consistently exposes `data-testid` / `data-qa` / similar. Stable by design.
|
|
120
|
-
```js
|
|
121
|
-
I.click('[data-testid="submit-order"]')
|
|
122
|
-
```
|
|
123
|
-
2. **Semantic + context** — plain string (label / button text / placeholder / `aria-label`).
|
|
124
|
-
```js
|
|
125
|
-
I.click('Save', '.toolbar')
|
|
126
|
-
I.fillField('Email', 'u@t.com', '#login-form')
|
|
127
|
-
```
|
|
128
|
-
3. **ARIA role** — survives markup churn; doubles as accessibility check.
|
|
129
|
-
```js
|
|
130
|
-
I.click({ role: 'button', name: 'Sign In' })
|
|
131
|
-
```
|
|
132
|
-
4. **`locate()` builder** — for structural conditions, repeated row/cell targeting, anything CSS can't express in one line.
|
|
133
|
-
```js
|
|
134
|
-
I.click(locate('button').withText('Edit').inside(locate('tr').withText('Acme Corp')))
|
|
135
|
-
```
|
|
136
|
-
5. **Strict `{ id }` / `{ name }` / `{ css }`** — when nothing above fits.
|
|
137
|
-
```js
|
|
138
|
-
I.fillField({ id: 'email' }, 'u@t.com')
|
|
139
|
-
I.seeElement({ css: '.invoice-row.paid' })
|
|
140
|
-
```
|
|
141
|
-
6. **`{ xpath }`** — last resort, for axes (`ancestor`, `following-sibling`) or text predicates the builder doesn't cover.
|
|
142
|
-
```js
|
|
143
|
-
I.click({ xpath: '//button[@aria-pressed="true"]' })
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
If item 1 applies broadly across the app, enable the **`customLocator` plugin** so `$name` resolves to the configured attribute. Once it's on:
|
|
147
|
-
|
|
148
|
-
```js
|
|
149
|
-
// before // after, with customLocator: { attribute: 'data-qa' }
|
|
150
|
-
I.click({ css: '[data-qa=submit]' }) I.click('$submit')
|
|
151
|
-
I.fillField({ css: '[data-qa=email]' }, ...) I.fillField('$email', ...)
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
See `node_modules/codeceptjs/docs/plugins.md` § *customLocator*.
|
|
155
|
-
|
|
156
|
-
### Context
|
|
157
|
-
|
|
158
|
-
Most actions accept a **context** as the last argument — any locator type. The lookup runs only inside that region, which disambiguates duplicate labels and keeps semantic strings usable. When several actions target the same region, bind the locator once and reuse it; do not repeat the chain inline.
|
|
159
|
-
|
|
160
|
-
Prefer stable structural regions — they survive UI rewrites better than the markup they wrap:
|
|
161
|
-
|
|
162
|
-
- Landmark elements — `nav`, `main`, `header`, `footer`, `aside`, `{ role: 'dialog' }`, `{ role: 'navigation' }`.
|
|
163
|
-
- App-shell containers — `.main-app`, `.app-content`, `.sidebar`, `.toolbar`, `.modal`, `.drawer`.
|
|
164
|
-
- A row, card, or list item identified by its data, expressed via `locate(...)`.
|
|
165
|
-
|
|
166
|
-
**`I.see` and `I.dontSee` require a context.** Their first argument is plain text matched across the page, so without a context the assertion can resolve against navigation, a footer, or an unrelated component and produce a false pass. Other assertions (`I.seeElement`, `I.seeNumberOfElements`, etc.) take an explicit locator, which scopes them on its own.
|
|
167
|
-
|
|
168
|
-
### Picking a specific match
|
|
169
|
-
|
|
170
|
-
When a locator matches several elements, CodeceptJS uses the first by default. To target another match without writing a more specific locator, pass `elementIndex` via `step.opts()` (`import step from 'codeceptjs/steps'`) — accepts a 1-based number, a negative index, or `'first'` / `'last'`. Same path for `step.opts({ exact: true })` to make a single step throw on ambiguity. See `node_modules/codeceptjs/docs/locators.md` § *Picking a specific element*.
|
|
171
|
-
|
|
172
|
-
Full reference: `node_modules/codeceptjs/docs/locators.md`.
|
|
173
|
-
|
|
174
|
-
## Waiting
|
|
175
|
-
|
|
176
|
-
CodeceptJS auto-waits before each action, but explicit waits are still needed when:
|
|
177
|
-
- a **loader / spinner / skeleton** must hide before the next step → `I.waitForInvisible('.spinner')`, `I.waitForDetached('.skeleton')`
|
|
178
|
-
- a **modal / drawer / panel / section** hasn't rendered yet → `I.waitForVisible('.modal')`, `I.waitForElement({ role: 'dialog' })`
|
|
179
|
-
- **data must finish loading** — list rows, cards, charts, async text → `I.waitForElement('.user-row', 10)`, `I.waitForText('Loaded', 10, '.status')`
|
|
180
|
-
|
|
181
|
-
Detect what to wait for by reading the page HTML / ARIA between MCP steps. If the next element is gated by a spinner overlay or rendered after a fetch, scroll the markup until you find the gating element, pick a stable selector, and wait for the right state (visible, invisible, detached, text-present).
|
|
182
|
-
|
|
183
|
-
`I.wait(N)` (raw seconds) is OK during **authoring** to confirm a timing hypothesis — if a 5-second sleep makes the step pass, the cause is timing. **Replace it with a specific `I.waitFor*` before committing.** Hardcoded sleeps are slow on fast machines, flaky on slow ones, and hide the real sync point.
|
|
24
|
+
1. **Fundamentals first** — run `codeceptjs-fundamentals`. You need: active web helper, base URL, plugins (`aiTrace`, `auth`), AI provider, page objects, env vars.
|
|
25
|
+
2. **Map what's already there** — `check` / `list` / `dry-run` (see fundamentals § Discover). Catches duplication and confirms no custom step or page-object method already covers the planned flow.
|
|
26
|
+
- ⚠ `dry-run` does **not** initialize plugins: `Before(({ login }) => login('admin'))` raises "login is not a function" under dry-run even though a real run works. Inspect shape with `--steps`; ignore plugin-inject errors; verify auth with a real run.
|
|
27
|
+
3. **Auth** — path behind login → invoke the `codeceptjs-auth` skill. Existing role configured: `Before(({ login }) => login())`. Not configured: auth skill walks adding it. Public path: skip.
|
|
28
|
+
4. **Similar tests & page objects** — scan Scenarios in the feature area, POs under `include`, actor-file custom steps, data factories. If a PO method already encodes this area's locators, drive through it instead of raw `I.click` chains.
|
|
29
|
+
5. **Starting page** — a real URL *after* any auth, not a guess; ask the user if unknown. Relative URLs only — host lives in the config (`helpers.Playwright.url` etc.).
|
|
30
|
+
6. **aiTrace + MCP wiring**:
|
|
31
|
+
- Under MCP: `aiTrace` is forced on by the MCP server — nothing to configure.
|
|
32
|
+
- CLI runs: *not* auto-enabled — declare in config or pass `-p aiTrace`, or step 11 produces no `output/trace_*/` artifacts for run-analysis.
|
|
33
|
+
- Run headless by default (`setHeadlessWhen(CI)` with `CI=1` exported, or `show: false`).
|
|
34
|
+
- Confirm MCP client points at `node_modules/codeceptjs/bin/mcp-server.js` with `CODECEPTJS_CONFIG` and `CODECEPTJS_PROJECT_DIR` set.
|
|
35
|
+
7. **Open a live session** (pick mode):
|
|
36
|
+
- Mode A: `run_code` scaffold — `login(<role>)` if needed, then `I.amOnPage(<start URL>)`. The response (URL, ARIA snapshot, screenshot, console) is ground truth for everything after.
|
|
37
|
+
- Mode B: write a minimal-but-real draft in the test file:
|
|
38
|
+
```js
|
|
39
|
+
Before(({ login }) => login('admin')) // if needed
|
|
40
|
+
|
|
41
|
+
Scenario('draft - feature exploration', ({ I }) => {
|
|
42
|
+
I.amOnPage('/dashboard')
|
|
43
|
+
pause()
|
|
44
|
+
})
|
|
45
|
+
```
|
|
46
|
+
Run via MCP `run_test` → `{ status: 'paused', pausedAfter, page, suggestions }`. The test's own `I` / browser is now driven by `run_code`.
|
|
47
|
+
8. **Learn the page** — hand off to `codeceptjs-exploration`: ARIA snapshot first, HTML fallback, enumerate and disambiguate candidates, commit a locator only after verifying it matches exactly one element via `run_code`. In Mode B this happens inside the pause window.
|
|
48
|
+
9. **Build the Scenario** — one or two commands at a time via `run_code` into a scratchpad. After each ask: did URL/ARIA change as expected? New console errors? Do grabbed values match expectations?
|
|
49
|
+
- Step failed → try a different locator, add a specific `waitFor*`, or reconsider the flow.
|
|
50
|
+
- Genuinely ambiguous (two Save buttons, unclear empty state, possible feature flag) → **stop and ask the user**.
|
|
51
|
+
- Optional UI elements (cookie banners) → `await tryTo(...)` instead of `if` (fundamentals § Effects) — keeps scenarios linear.
|
|
52
|
+
10. **Commit the verified sequence**:
|
|
53
|
+
- Match existing naming; one `Feature` per file.
|
|
54
|
+
- Use page-object methods / custom steps where they fit — don't duplicate selectors.
|
|
55
|
+
- Translate every locator to readable form (priority below). Strict `{ css }` / `{ xpath }` in committed code are a review red flag unless nothing else fits.
|
|
56
|
+
- Credentials from env vars only, wrapped in `secret(...)`.
|
|
57
|
+
- Mode B: replace the `pause()` line with the sequence; rename `draft - ...` to the real intent.
|
|
58
|
+
11. **Final verification**: `npx codeceptjs run --grep '<scenario>' --steps` with aiTrace enabled → hand output to `codeceptjs-run-analysis` to confirm the flow ran clean in `output/trace_*/`. Done only when it passes there.
|
|
59
|
+
|
|
60
|
+
## Locator priority (writing time)
|
|
61
|
+
|
|
62
|
+
Always pass context — see `codeceptjs-fundamentals` § Locators for rationale. Top wins:
|
|
63
|
+
|
|
64
|
+
1. **Semantic string** — visible text, label, placeholder, `name`, `aria-label`: `I.click('Save', '.toolbar')`
|
|
65
|
+
2. **ARIA role** — text ambiguous within context ("Delete" link *and* button), or role part of the assertion: `I.click({ role: 'button', name: 'Sign In' }, '#login-form')`
|
|
66
|
+
3. **`$name` via `customLocator`** — app exposes `data-testid`/`data-qa` broadly
|
|
67
|
+
4. **`locate()` builder** — structural conditions; often the structural half belongs in the context: `I.click('Edit', locate('tr').withText('Acme Corp'))`
|
|
68
|
+
5. **Strict `{ id }` / `{ name }` / `{ css }`** — last resorts above exhausted
|
|
69
|
+
6. **`{ xpath }`** — axes / text predicates the builder can't express
|
|
70
|
+
|
|
71
|
+
Writing-time specifics beyond fundamentals:
|
|
72
|
+
|
|
73
|
+
- Plain strings already match `aria-label` — never write `'aria-label=Save'` or `{ css: '[aria-label="Save"]' }`.
|
|
74
|
+
- Prefer stable contexts: landmarks (`nav`, `main`, `{ role: 'dialog' }`), app-shell containers (`.sidebar`, `.modal`), rows/cards identified by their data.
|
|
75
|
+
- **`I.see` / `I.dontSee` require a context** — their first arg is plain text matched across the whole page; unscoped they can false-pass on nav/footer content.
|
|
76
|
+
- Several matches → `step.opts({ elementIndex: N })` (1-based, negative, `'first'`/`'last'`) or `step.opts({ exact: true })`; import `step` from `codeceptjs/steps`.
|
|
77
|
+
|
|
78
|
+
## Waiting while authoring
|
|
79
|
+
|
|
80
|
+
- Auto-waiting covers interactions; detect gating elements (spinner overlay, post-fetch render) from the live HTML/ARIA between MCP steps → pick the stable selector and a specific `waitFor*`.
|
|
81
|
+
- `I.wait(N)` is acceptable **during authoring** to confirm a timing hypothesis — if a sleep makes the step pass, timing is the cause. Replace with the specific `waitFor*` before committing.
|
|
184
82
|
|
|
185
83
|
## Things to avoid
|
|
186
84
|
|
|
187
|
-
- Writing tests from imagined locators or
|
|
188
|
-
-
|
|
189
|
-
-
|
|
190
|
-
-
|
|
191
|
-
-
|
|
192
|
-
-
|
|
193
|
-
-
|
|
194
|
-
- Leaving
|
|
195
|
-
- Using Mode A
|
|
196
|
-
- Declaring
|
|
197
|
-
|
|
198
|
-
##
|
|
199
|
-
|
|
200
|
-
- `
|
|
201
|
-
- `
|
|
202
|
-
- `
|
|
203
|
-
- `
|
|
204
|
-
- `
|
|
205
|
-
- `node_modules/codeceptjs/docs/mcp.md` — MCP tool list and client config
|
|
206
|
-
- `node_modules/codeceptjs/docs/secrets.md` — `secret()` wrapper
|
|
85
|
+
- Writing tests from imagined locators or routes — everything from the live page.
|
|
86
|
+
- Strict locators where semantic / ARIA / `locate()` fits.
|
|
87
|
+
- Long unscoped locators instead of short locator + context.
|
|
88
|
+
- Spelling out accessible names or repeating `[data-testid=...]` at call sites.
|
|
89
|
+
- Hardcoded credentials anywhere.
|
|
90
|
+
- Skipping the similar-test / page-object scan.
|
|
91
|
+
- `await` on plain action steps (fundamentals await rule); speculative `waitFor*` before checking auto-waiting.
|
|
92
|
+
- Leaving `I.wait(N)` or `pause()` in committed tests.
|
|
93
|
+
- Using Mode A for genuinely unknown flows — slower than Mode B, easier to lose state.
|
|
94
|
+
- Declaring done without the end-to-end aiTrace run.
|
|
95
|
+
|
|
96
|
+
## Related skills
|
|
97
|
+
|
|
98
|
+
- `codeceptjs-fundamentals` — rules, effects, discovery (run first)
|
|
99
|
+
- `codeceptjs-exploration` — page inspection, WebElement API
|
|
100
|
+
- `codeceptjs-auth` — login/session reuse
|
|
101
|
+
- `codeceptjs-run-analysis` — trace verification
|
|
102
|
+
- `debugging-codeceptjs-tests` — when the committed test misbehaves
|
|
@@ -2,59 +2,66 @@
|
|
|
2
2
|
"sources": [
|
|
3
3
|
{
|
|
4
4
|
"source": "testomatio/skills",
|
|
5
|
-
"ref":
|
|
6
|
-
"sha": "
|
|
5
|
+
"ref": null,
|
|
6
|
+
"sha": "84d855c359df6bf13bde7749ec3ec8d31e9fc51d",
|
|
7
7
|
"folder": "testomatio",
|
|
8
8
|
"skills": [
|
|
9
|
-
"testomatio-mcp",
|
|
10
|
-
"sync-test-cases-with-tms",
|
|
11
|
-
"scan-automation-project",
|
|
12
|
-
"qa-write-test-cases",
|
|
13
|
-
"qa-thinking",
|
|
14
|
-
"qa-test-code-coverage",
|
|
15
|
-
"qa-requirement-reviewer",
|
|
16
|
-
"qa-pr-requirements-analyzer",
|
|
17
|
-
"qa-e2e-tests-reporting",
|
|
18
|
-
"pull-request-diff-analyzer",
|
|
19
|
-
"improve-test-cases",
|
|
20
9
|
"detect-duplicate-test-cases",
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"qa-
|
|
24
|
-
"
|
|
10
|
+
"improve-test-cases",
|
|
11
|
+
"pull-request-diff-analyzer",
|
|
12
|
+
"qa-e2e-tests-reporting",
|
|
13
|
+
"qa-pr-requirements-analyzer",
|
|
14
|
+
"qa-requirement-reviewer",
|
|
15
|
+
"qa-split-testing-levels-pyramid",
|
|
16
|
+
"qa-sprint-report-by-testomatio",
|
|
17
|
+
"qa-test-code-coverage",
|
|
18
|
+
"qa-thinking",
|
|
19
|
+
"qa-write-test-cases",
|
|
20
|
+
"scan-automation-project",
|
|
21
|
+
"sync-test-cases-with-tms",
|
|
22
|
+
"testomatio-mcp",
|
|
25
23
|
"automate-manual-test-cases",
|
|
24
|
+
"debug-fix-failed-flaky-autotests",
|
|
25
|
+
"qa-automation-test-consolidation",
|
|
26
|
+
"qa-data-seeder",
|
|
27
|
+
"run-tests-with-testomatio-reporter",
|
|
28
|
+
"setup-change-aware-pr-testing",
|
|
29
|
+
"setup-ci-automation",
|
|
26
30
|
"testomat-allure-adapter",
|
|
27
|
-
"
|
|
31
|
+
"qa-explain-behavior",
|
|
32
|
+
"qa-lead-strategy-advisor",
|
|
33
|
+
"testing-workflow",
|
|
34
|
+
"explorbot-fundamentals",
|
|
28
35
|
"explorbot-plan",
|
|
29
|
-
"explorbot-
|
|
36
|
+
"explorbot-setup"
|
|
30
37
|
]
|
|
31
38
|
},
|
|
32
39
|
{
|
|
33
40
|
"source": "codeceptjs/skills",
|
|
34
41
|
"ref": null,
|
|
35
|
-
"sha": "
|
|
42
|
+
"sha": "d3d6a4e0e29207b1afb051eeb6f5f36984f4752b",
|
|
36
43
|
"folder": "codeceptjs",
|
|
37
44
|
"skills": [
|
|
38
|
-
"
|
|
39
|
-
"refactoring-codeceptjs-tests",
|
|
40
|
-
"migrate-testcafe-to-codeceptjs",
|
|
41
|
-
"migrate-selenium-java-to-codeceptjs",
|
|
42
|
-
"migrate-protractor-to-codeceptjs",
|
|
43
|
-
"migrate-cypress-to-codeceptjs",
|
|
44
|
-
"migrate-codeceptjs-4",
|
|
45
|
-
"debugging-codeceptjs-tests",
|
|
46
|
-
"codeceptjs-run-analysis",
|
|
47
|
-
"codeceptjs-fundamentals",
|
|
48
|
-
"codeceptjs-exploration",
|
|
45
|
+
"ci-fix-tests",
|
|
49
46
|
"codeceptjs-auth",
|
|
50
|
-
"
|
|
47
|
+
"codeceptjs-exploration",
|
|
48
|
+
"codeceptjs-fundamentals",
|
|
49
|
+
"codeceptjs-run-analysis",
|
|
50
|
+
"debugging-codeceptjs-tests",
|
|
51
|
+
"migrate-codeceptjs-4",
|
|
52
|
+
"migrate-cypress-to-codeceptjs",
|
|
53
|
+
"migrate-protractor-to-codeceptjs",
|
|
54
|
+
"migrate-selenium-java-to-codeceptjs",
|
|
55
|
+
"migrate-testcafe-to-codeceptjs",
|
|
56
|
+
"refactoring-codeceptjs-tests",
|
|
57
|
+
"writing-codeceptjs-tests"
|
|
51
58
|
]
|
|
52
59
|
},
|
|
53
60
|
{
|
|
54
61
|
"source": "currents-dev/playwright-best-practices-skill",
|
|
55
62
|
"ref": null,
|
|
56
|
-
"sha": "
|
|
57
|
-
"folder": "playwright
|
|
63
|
+
"sha": "283d5cbc5d11aac1abda058b16ad22c317d54dc0",
|
|
64
|
+
"folder": "playwright",
|
|
58
65
|
"skills": [
|
|
59
66
|
"playwright-best-practices"
|
|
60
67
|
]
|
|
@@ -62,8 +69,8 @@
|
|
|
62
69
|
{
|
|
63
70
|
"source": "microsoft/playwright-cli/tree/main/skills/playwright-cli",
|
|
64
71
|
"ref": null,
|
|
65
|
-
"sha": "
|
|
66
|
-
"folder": "playwright
|
|
72
|
+
"sha": "2f85a94b7b885dbf4a5d34462f253a8746a690c9",
|
|
73
|
+
"folder": "playwright",
|
|
67
74
|
"skills": [
|
|
68
75
|
"playwright-cli"
|
|
69
76
|
]
|
|
@@ -0,0 +1,34 @@
|
|
|
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 next to this file — the repo name, or the
|
|
7
|
+
# owner when the repo is just "skills" (testomatio/skills -> testomatio/).
|
|
8
|
+
# Updates replace only that folder; a folder this file does not own is treated
|
|
9
|
+
# as internal and never touched. First-party skills are not kept here.
|
|
10
|
+
#
|
|
11
|
+
# Vendored folders are gitignored: they belong to their authors, under their own
|
|
12
|
+
# licences. Send patches for them upstream, to the repo listed below.
|
|
13
|
+
#
|
|
14
|
+
# The folder is the category, and the repo decides it:
|
|
15
|
+
# - repo with a Claude-plugin marketplace (.claude-plugin/marketplace.json)
|
|
16
|
+
# -> one category subfolder per plugin (testomatio/ -> test-management / test-automation / explorbot)
|
|
17
|
+
# - repo without one -> skills sit right under the vendor folder (the vendor is the category)
|
|
18
|
+
#
|
|
19
|
+
# Name the folder here when repos from different owners belong under one
|
|
20
|
+
# category — the sources then share it, each skill in its own subfolder:
|
|
21
|
+
#
|
|
22
|
+
# - source: owner/repo
|
|
23
|
+
# folder: playwright
|
|
24
|
+
#
|
|
25
|
+
# Edit the list, then run: bunosh skills:update [vendor] See the result: bunosh skills:list
|
|
26
|
+
|
|
27
|
+
- testomatio/skills
|
|
28
|
+
- codeceptjs/skills
|
|
29
|
+
|
|
30
|
+
# One Playwright category, two upstreams.
|
|
31
|
+
- source: currents-dev/playwright-best-practices-skill
|
|
32
|
+
folder: playwright
|
|
33
|
+
- source: microsoft/playwright-cli/tree/main/skills/playwright-cli
|
|
34
|
+
folder: playwright
|
|
@@ -1,88 +1,76 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: explorbot-fundamentals
|
|
3
|
-
description: Use
|
|
3
|
+
description: Use when running or debugging Explorbot from the command line — which command to run, what a flag does, where results were written, why a run failed, or how to run it with nothing installed in the project.
|
|
4
4
|
license: MIT
|
|
5
5
|
metadata:
|
|
6
6
|
author: Testomat.io
|
|
7
|
-
version:
|
|
7
|
+
version: 1.2.0
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Explorbot Fundamentals
|
|
11
11
|
|
|
12
|
-
Explorbot is an autonomous AI web-testing CLI. It drives its own browser
|
|
12
|
+
Explorbot is an autonomous AI web-testing CLI. It drives its own browser through cycles of research → plan → test, and an agent drives it like `git` or `npm`.
|
|
13
13
|
|
|
14
|
-
**
|
|
14
|
+
**Answer command and flag questions from the installed CLI, never from memory.**
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
```bash
|
|
17
|
+
npx explorbot --help # commands, and the EXPLORBOT_* variables
|
|
18
|
+
npx explorbot <command> --help # flags for one command
|
|
19
|
+
```
|
|
17
20
|
|
|
18
|
-
|
|
21
|
+
## Running it with nothing installed
|
|
19
22
|
|
|
20
|
-
|
|
21
|
-
|
|
23
|
+
Explorbot needs no project install: `npx` plus a provider is enough, and nothing is written into the working directory. Reach for this when the user wants to try Explorbot, or is pointing it at an app that has no repo here.
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npx explorbot init --global --provider <name> # once per machine, key in ~/.explorbot/.env
|
|
27
|
+
npx explorbot explore https://app.example.com/login --max-tests 3
|
|
22
28
|
```
|
|
23
29
|
|
|
24
|
-
|
|
30
|
+
Details, including the per-command `EXPLORBOT_*` form for CI: [references/no-install.md](references/no-install.md).
|
|
25
31
|
|
|
26
|
-
|
|
32
|
+
Installing into the project instead — config, knowledge, and generated tests in the repo — is [[explorbot-setup]].
|
|
27
33
|
|
|
28
|
-
##
|
|
34
|
+
## Docs
|
|
29
35
|
|
|
30
|
-
|
|
36
|
+
`node_modules/explorbot/docs/` after a local install, the repo's `docs/` when working inside Explorbot itself, otherwise `https://raw.githubusercontent.com/testomatio/explorbot/main/docs/<path>`. `docs/index.json` lists every page with a description — read it to pick the page, then open that page.
|
|
31
37
|
|
|
32
|
-
|
|
33
|
-
npx explorbot --help # list every command
|
|
34
|
-
npx explorbot <command> --help # flags and options for one command
|
|
35
|
-
```
|
|
38
|
+
## Where results land
|
|
36
39
|
|
|
37
|
-
|
|
40
|
+
Explorbot writes into the project directory when the run used a project `explorbot.config.js`, and into `~/.explorbot/sites/<host>/` otherwise. Under that root:
|
|
38
41
|
|
|
39
|
-
|
|
42
|
+
| Path | Contents |
|
|
43
|
+
|---|---|
|
|
44
|
+
| `output/reports/` | session report: coverage, defects, execution issues |
|
|
45
|
+
| `output/plans/` | the plan generated or executed |
|
|
46
|
+
| `output/states/` | per-state HTML, ARIA snapshots, screenshots |
|
|
47
|
+
| `output/research/` | UI maps from the Researcher |
|
|
48
|
+
| `output/tests/` | generated Playwright / CodeceptJS files |
|
|
49
|
+
| `output/explorbot.log` | run log — start here on a failure |
|
|
50
|
+
| `knowledge/`, `experience/` | what you taught it, and what it learned |
|
|
40
51
|
|
|
41
|
-
|
|
52
|
+
**Exit codes are not pass/fail.** `explore` and `test` exit `0` whenever the session completes; a failing scenario is a result, not a crash. Read the report. `navigate` is the exception — `1` means unreachable, which makes it a pre-flight check.
|
|
42
53
|
|
|
43
|
-
|
|
44
|
-
|---|---|
|
|
45
|
-
| Is this app even suitable for explorbot? | `prerequisites.md` |
|
|
46
|
-
| Full list of CLI + TUI commands and flags | `commands.md` |
|
|
47
|
-
| Config file shape, `dirs:`, rules wiring | `configuration.md` |
|
|
48
|
-
| AI providers (OpenRouter / OpenAI / Anthropic / Groq / Cerebras / Azure) | `providers.md` |
|
|
49
|
-
| Knowledge files (URL patterns, frontmatter, interpolation) | `knowledge.md` |
|
|
50
|
-
| Planner, planning styles, plan markdown format | `planner.md`, `test-plans.md` |
|
|
51
|
-
| Researcher (page analysis) | `researcher.md` |
|
|
52
|
-
| Page interaction model (locators, ARIA, iframes) | `page-interaction.md` |
|
|
53
|
-
| Re-running generated tests with healing | `rerun.md` |
|
|
54
|
-
| Generated test code (Playwright / CodeceptJS) | `automated-tests.md` |
|
|
55
|
-
| Hooks | `hooks.md` |
|
|
56
|
-
| Reporting (HTML/MD/Testomat.io) | `reporting.md` |
|
|
57
|
-
| Tracing / Langfuse / observability | `observability.md` |
|
|
58
|
-
| Library / programmatic use | `scripting.md`, `npm-package.md` |
|
|
59
|
-
| API testing | `api-testing.md` |
|
|
60
|
-
| Doc collector | `doc-collector.md` |
|
|
61
|
-
|
|
62
|
-
If the topic isn't in this table, `ls node_modules/explorbot/docs/` and pick the matching file by name.
|
|
63
|
-
|
|
64
|
-
## Rule 3 — CLI only; never drive the TUI
|
|
65
|
-
|
|
66
|
-
An agent can run only the non-interactive CLI (`explorbot explore`, `explorbot test`, `explorbot plan`, `explorbot research`, `explorbot navigate`, etc.). These run headless and exit.
|
|
67
|
-
|
|
68
|
-
**`explorbot start` launches an interactive terminal UI (TUI). An agent cannot operate a TUI — never try to launch or drive it.** If the user wants interactive mode, tell them to run `explorbot start [path]` themselves.
|
|
69
|
-
|
|
70
|
-
## Order of operations for every question
|
|
71
|
-
|
|
72
|
-
1. Verify `node_modules/explorbot/` exists. If not → route to **`explorbot-setup`**.
|
|
73
|
-
2. Identify whether the user is asking about a **command/flag** (→ run `npx explorbot … --help`) or a **concept/config/feature** (→ open the matching file in `node_modules/explorbot/docs/`).
|
|
74
|
-
3. Read the relevant source.
|
|
75
|
-
4. Answer using what you just read, and cite it (`node_modules/explorbot/docs/knowledge.md`, `npx explorbot explore --help`).
|
|
54
|
+
## Naming the site
|
|
76
55
|
|
|
77
|
-
|
|
56
|
+
A target is either **absolute** — starting with `http://` or `https://` — or a **relative path** starting with `/`. Anything else is ambiguous and not a valid target.
|
|
57
|
+
|
|
58
|
+
A relative path needs a site to resolve against: `web.url` from a project config, or `EXPLORBOT_URL`. Without either, pass the absolute URL. Commands that take no target at all — `test`, `learn`, `knows`, `experience`, `compact` — read the same two sources. `npx explorbot sites` lists what has been explored so far.
|
|
59
|
+
|
|
60
|
+
## Cheap before expensive
|
|
78
61
|
|
|
79
|
-
-
|
|
80
|
-
-
|
|
81
|
-
-
|
|
82
|
-
-
|
|
62
|
+
- `npx explorbot context <url>` — headings, matched knowledge, interactive elements. No AI calls.
|
|
63
|
+
- `npx explorbot shell <url> '<codecept command>'` — run one command and exit.
|
|
64
|
+
- `npx explorbot knows <url>` — what knowledge matches a page.
|
|
65
|
+
- `npx explorbot navigate <url> --session` — reachability, and it saves the session.
|
|
83
66
|
|
|
84
|
-
##
|
|
67
|
+
## Rules
|
|
68
|
+
|
|
69
|
+
- `explorbot start` is an interactive TUI — an agent cannot operate it. Ask the user to run it. Everything else runs headless and exits.
|
|
70
|
+
- If `--help` does not show a command or flag, it does not exist.
|
|
71
|
+
- Explorbot needs CRUD; a landing page, blog, or CMS is out of scope.
|
|
72
|
+
|
|
73
|
+
## Related skills
|
|
85
74
|
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
- ❌ Telling the user to use explorbot for a landing page / blog / CMS — `node_modules/explorbot/docs/prerequisites.md` says it's for CRUD-heavy apps.
|
|
75
|
+
- [[explorbot-setup]] — install into a project: config, provider, login knowledge, verified navigation.
|
|
76
|
+
- [[explorbot-plan]] — hand-author a test plan and run it with `explorbot test`.
|