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
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Running Explorbot without installing it
|
|
2
|
+
|
|
3
|
+
Two ways, both `npx`. Neither writes anything into the working directory: knowledge, experience, and output go to `~/.explorbot/sites/<host>/`.
|
|
4
|
+
|
|
5
|
+
## Once per machine
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx explorbot init --global --provider <name>
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Writes `~/.explorbot/config.js` with the model ids recommended by that Explorbot version, and `~/.explorbot/.env` with the provider's key variable — add the key there, or pass `--api-key`. `npx explorbot init --help` lists the accepted providers. With `--provider` there is no wizard, so an agent can run it unattended.
|
|
12
|
+
|
|
13
|
+
Every directory can then run Explorbot, and each app keeps what Explorbot learned about it between runs. With no project config there is no site to resolve a relative path against, so pass the absolute URL — or set `EXPLORBOT_URL` and pass paths:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx explorbot explore https://app.example.com/login --max-tests 3
|
|
17
|
+
EXPLORBOT_URL=https://app.example.com npx explorbot explore /dashboard
|
|
18
|
+
npx explorbot sites # what has been explored, and when
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Per command
|
|
22
|
+
|
|
23
|
+
When nothing may be written — CI, containers, someone else's machine — `EXPLORBOT_AI_PROVIDER` builds the config from the environment:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
EXPLORBOT_URL=https://app.example.com \
|
|
27
|
+
EXPLORBOT_AI_PROVIDER=<name> \
|
|
28
|
+
npx explorbot explore /login --max-tests 3
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
- `npx explorbot --help` lists every `EXPLORBOT_*` variable of the installed version — read it there rather than copying a list.
|
|
32
|
+
- `EXPLORBOT_KNOWLEDGE="Log in as …"` applies knowledge to every page without a file; `EXPLORBOT_KNOWLEDGE_FILE` points at one.
|
|
33
|
+
- Model variables take a provider name for its recommendation, or `provider/model-id` to pin one.
|
|
34
|
+
- These variables win over `~/.explorbot/config.js`; a project `explorbot.config.js` wins over them.
|
|
35
|
+
- `EXPLORBOT_EPHEMERAL=1` keeps nothing between runs.
|
|
36
|
+
- Trade-off: the Historian is off, so no generated Playwright or CodeceptJS files. Plans and reports are still written.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: explorbot-plan
|
|
3
|
-
description:
|
|
3
|
+
description: Use when the user wants to write an Explorbot test plan by hand — from a feature description, requirements, ticket, or docs, without exploring a live page — so `explorbot test` can run it.
|
|
4
4
|
license: MIT
|
|
5
5
|
metadata:
|
|
6
6
|
author: Testomat.io
|
|
7
|
-
version: 0.0
|
|
7
|
+
version: 0.1.0
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Writing Explorbot Test Plans
|
|
@@ -19,8 +19,9 @@ Installation is only required later to *run* the plan (see Output).
|
|
|
19
19
|
|
|
20
20
|
- The feature / requirements / user story (ask for docs or a description).
|
|
21
21
|
- A suite title (the feature under test).
|
|
22
|
-
- The **start URL**: a path relative to the app host
|
|
23
|
-
|
|
22
|
+
- The **start URL**: a path relative to the app host (e.g. `/login`), or a full absolute URL.
|
|
23
|
+
This is mandatory. Relative paths resolve against `web.url` in a project config, or against
|
|
24
|
+
the site the command names (`EXPLORBOT_URL` / a registered host) in global mode.
|
|
24
25
|
- Optional per-test start URLs when a scenario begins on a different page.
|
|
25
26
|
- Priority for each scenario: `critical`, `important`, `high`, `normal`, `low`.
|
|
26
27
|
|
|
@@ -90,6 +91,18 @@ priority: high
|
|
|
90
91
|
|
|
91
92
|
## Output
|
|
92
93
|
|
|
93
|
-
|
|
94
|
-
`
|
|
95
|
-
|
|
94
|
+
A hand-written plan is input only — Explorbot never rewrites it, so keep it in the repo next to
|
|
95
|
+
the code it covers (`tests/plans/<feature>.md` or similar) and pass its path to `explorbot test`.
|
|
96
|
+
Save it under the run's `output/plans/` only when the user wants it alongside generated plans:
|
|
97
|
+
`output/plans/` in a project setup, `~/.explorbot/sites/<host>/output/plans/` in global mode.
|
|
98
|
+
|
|
99
|
+
Run it (index: `1`, `1,3`, `1-5`, or `*` for all):
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
npx explorbot test checkout-plan.md '*'
|
|
103
|
+
EXPLORBOT_URL=https://app.example.com npx explorbot test checkout-plan.md '*'
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
`test` takes no URL argument: it uses `web.url` from a project config, and needs `EXPLORBOT_URL`
|
|
107
|
+
in global mode. It exits `0` whenever the session completes — read the report in
|
|
108
|
+
`output/reports/`, not the exit code. See [[explorbot-fundamentals]].
|
|
@@ -1,334 +1,86 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: explorbot-setup
|
|
3
|
-
description: Use to install
|
|
3
|
+
description: Use to install Explorbot into a project — first-time setup, an `explorbot.config.js` in the repo, connecting an AI provider, teaching it how to log in, or when a command fails because the project has no config. Ends once `explorbot navigate` reaches the app.
|
|
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 Setup
|
|
11
11
|
|
|
12
|
-
Install Explorbot
|
|
12
|
+
Install Explorbot into the user's project, connect a provider, teach it how to reach the app, and prove it with one navigation.
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
The config, the knowledge files, and the generated tests all land in the repo, so they are reviewed and versioned like the rest of the code. That is the point of installing locally.
|
|
15
15
|
|
|
16
|
-
**
|
|
16
|
+
**To run Explorbot without installing it into the project, this is the wrong skill** — [[explorbot-fundamentals]] covers that: `npx`, a provider, no project files.
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
2. App URL (the value of `web.url`)
|
|
20
|
-
3. The page to verify against
|
|
21
|
-
4. Login credentials (only if `navigate` fails on an auth wall)
|
|
18
|
+
**Scope ends when `npx explorbot navigate <path>` exits `0`** — exploring and testing belong to [[explorbot-fundamentals]].
|
|
22
19
|
|
|
23
|
-
|
|
20
|
+
## 1. Requirements
|
|
24
21
|
|
|
25
|
-
|
|
22
|
+
- Node ≥ 24 or Bun. If neither exists, stop — do not install a runtime.
|
|
23
|
+
- The generated config uses `import`, so `package.json` must be ESM. `npm init -y` produces CommonJS; if `"type"` is missing or `"commonjs"` in an existing file, ask before changing it, and write `explorbot.config.mjs` (passed as `--config`) if the user declines.
|
|
24
|
+
- Explorbot is for CRUD-heavy apps. Warn before installing if the target is a landing page, blog, CMS, or static site.
|
|
26
25
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
**Before every ask and before every install step, write 2–4 sentences that cover:**
|
|
30
|
-
|
|
31
|
-
- **What** is about to happen ("I'm going to install Playwright's browsers — about 250MB, takes a couple of minutes.")
|
|
32
|
-
- **Why** it's needed ("Explorbot drives a real browser to click around your app like a user would — Playwright is the engine, the browsers are what it drives.")
|
|
33
|
-
- **What the user gets** from it ("Once this is done, Explorbot can navigate any URL on your app and try things autonomously.")
|
|
34
|
-
|
|
35
|
-
When asking a question, **explain the choice itself** — what each option means, what the trade-off is, why you recommend one. Don't make the user guess what a label means.
|
|
36
|
-
|
|
37
|
-
When showing a long command or a config snippet you're about to apply, say in one sentence what it does first.
|
|
38
|
-
|
|
39
|
-
After every step, give a short progress note ("Installed. Next: …") so the user knows where they are in a multi-step process. Use light formatting (a single emoji or `**Step N/6**` markers) only when it actually helps — never decorate for the sake of it.
|
|
40
|
-
|
|
41
|
-
Keep the tone warm and confident, not apologetic. Errors get a friendly explanation of what likely went wrong and what you'll try next, not a wall of stack trace.
|
|
42
|
-
|
|
43
|
-
## Precondition check
|
|
44
|
-
|
|
45
|
-
If `explorbot.config.{js,mjs,ts}` already exists (also check `config/`, `src/config/`) and the user is already running Explorbot, **stop and route them to `explorbot-fundamentals`** — this skill is for first-time install.
|
|
46
|
-
|
|
47
|
-
## 1 — Install
|
|
48
|
-
|
|
49
|
-
Verify Node ≥ 24 (or Bun) first; if neither is available, stop and tell the user — don't try to install a runtime.
|
|
50
|
-
|
|
51
|
-
**Make sure `package.json` exists and is ESM.** Explorbot's generated config uses `import …` statements, which need `"type": "module"`. The default `npm init -y` produces CommonJS — that breaks the config. If there's no `package.json` in the project, create one as ESM:
|
|
26
|
+
## 2. Install
|
|
52
27
|
|
|
53
28
|
```bash
|
|
54
|
-
npm init -y
|
|
55
29
|
npm pkg set type=module
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
If `package.json` already exists but `"type"` is missing or set to `"commonjs"`, ask the user before changing it (could affect their existing code). If they consent, run `npm pkg set type=module`. If they don't, you'll need to write the explorbot config as `.mjs` instead and pass `--config-path explorbot.config.mjs` to every command.
|
|
59
|
-
|
|
60
|
-
Then install Explorbot and the browsers it drives:
|
|
61
|
-
|
|
62
|
-
```bash
|
|
63
30
|
npm i explorbot --save
|
|
64
|
-
npx playwright install
|
|
31
|
+
npx playwright install chromium # ~/.cache/ms-playwright, once per machine
|
|
32
|
+
npx explorbot init # writes explorbot.config.js, .env, output/
|
|
65
33
|
```
|
|
66
34
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
> "Two installs coming up. First, `npm i explorbot --save` pulls Explorbot into your project — the CLI you'll use to run everything later. Then `npx playwright install` downloads the Chromium / Firefox / WebKit browser binaries (~250MB, takes a minute or two). Explorbot drives a real browser to interact with your app the way a person would — clicks, forms, navigation — and Playwright is the engine that lets it do that. Without these browsers, Explorbot has nothing to drive."
|
|
70
|
-
|
|
71
|
-
If the user's app is a landing page, blog, or CMS, **stop and warn them** before installing — Explorbot is built for CRUD-heavy apps (SaaS, admin panels, ecommerce, ERPs, internal tools) and performs poorly on static / content sites. Explain *why* (it learns by interacting with forms, tables, CRUD actions — there's nothing for it to do on a marketing page). Continue only if they confirm.
|
|
72
|
-
|
|
73
|
-
## 2 — Initialize the config
|
|
74
|
-
|
|
75
|
-
Run:
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
npx explorbot init
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
This creates `explorbot.config.js` and `.env`. For flag options (`--config-path`, `--force`, `--path`), check `npx explorbot init --help`.
|
|
82
|
-
|
|
83
|
-
## 3 — Configure `web.url` and an AI provider
|
|
84
|
-
|
|
85
|
-
**Read the generated `explorbot.config.js`** — `explorbot init` writes a working template with placeholders. Work from that file's current shape; don't paste a config from memory.
|
|
35
|
+
## 3. Provider
|
|
86
36
|
|
|
87
|
-
|
|
37
|
+
**Providers, model ids, and key variable names live in Explorbot, never in this skill.** The generated config ships one provider; `basics/providers.md` in the docs names the package and model ids for the others, and `models.json` holds the current recommendations.
|
|
88
38
|
|
|
89
|
-
|
|
90
|
-
|
|
39
|
+
- Ask which provider the user has an account with, and swap the import and the three model lines if it is not the one in the template.
|
|
40
|
+
- `npm i` the matching provider package.
|
|
91
41
|
|
|
92
|
-
|
|
42
|
+
The key: ask the user to paste it into `.env` in their editor and say "continue", then verify with `grep -q "^<KEY>=." .env`. Confirm `.env` is gitignored. Never echo a key back.
|
|
93
43
|
|
|
94
|
-
|
|
44
|
+
`~/.explorbot/.env` is also read on every run, filling in variables the project `.env` does not set.
|
|
95
45
|
|
|
96
|
-
|
|
46
|
+
## 4. App URL
|
|
97
47
|
|
|
98
|
-
|
|
48
|
+
Ask for it, and write it to `web.url` in the config — host only, no path. Explorbot clicks, fills, and submits on its own, so staging beats production.
|
|
99
49
|
|
|
100
|
-
|
|
50
|
+
Do not guess it. Look for evidence in the project — `package.json` scripts, `.env` files, framework ports — and suggest what you find with its source. Otherwise ask in plain text. Never propose a URL from this skill or from memory.
|
|
101
51
|
|
|
102
|
-
|
|
103
|
-
2. **Optionally probe** ports the project implies — if `package.json` runs `next dev`, Next's default is 3000; check whether `http://localhost:3000` actually responds via `curl`. Only suggest a port that something is currently listening on, and say so ("Something is listening on `localhost:3000` — is that your app?").
|
|
104
|
-
3. **If no evidence** — ask in plain text: *"What's the URL of the app Explorbot should test? Local (e.g. `http://localhost:<port>`) or a hosted environment of yours (staging / dev / production — please avoid production if it'll create real data)?"* No multiple-choice list, no guesses.
|
|
52
|
+
## 5. Verify
|
|
105
53
|
|
|
106
|
-
|
|
54
|
+
Walk the rungs in order. Stop at the first failure, fix it, resume.
|
|
107
55
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
> "Explorbot is driven by an LLM — that's what looks at each page, decides what to click, fills forms intelligently, and judges whether a test passed. So Explorbot needs API access to a model, which means a token-based API key from a provider you have an account with. Costs are per-token (typically cents per exploration run), nothing fixed or monthly. The key stays local — written to `.env` in this project — and `.env` will be gitignored.
|
|
113
|
-
>
|
|
114
|
-
> Three providers I'd suggest, in order:
|
|
115
|
-
> - **OpenRouter** — easiest to start with. One account, one key, access to almost every model (OpenAI, Anthropic, Meta, Mistral, etc.) so you can swap models without re-onboarding. Good if you don't have a strong preference.
|
|
116
|
-
> - **OpenAI** — if you already have an OpenAI key, this is one less account.
|
|
117
|
-
> - **Anthropic** — if you already use Claude, same reason.
|
|
118
|
-
>
|
|
119
|
-
> Anything else that Vercel's AI SDK supports also works (Groq, Cerebras, Azure OpenAI, Google Gemini, etc.) — tell me which one and I'll wire it."
|
|
120
|
-
|
|
121
|
-
Then ask which one (and the API key value), and act on it:
|
|
122
|
-
|
|
123
|
-
- The template `explorbot init` generated already imports a provider; if the user picks a different one, swap the import line + the three `model:` / `visionModel:` / `agenticModel:` lines accordingly.
|
|
124
|
-
- The provider package follows the Vercel AI SDK convention: `@openrouter/ai-sdk-provider`, `@ai-sdk/openai`, `@ai-sdk/anthropic`, `@ai-sdk/groq`, `@ai-sdk/google`, `@ai-sdk/azure`, etc. `npm i` the matching one if it isn't already a dep — tell the user what you're installing and why.
|
|
125
|
-
- Reference the key in the config as `process.env.<KEY_NAME>` (e.g. `process.env.OPENROUTER_API_KEY`) and confirm `.env` is in `.gitignore`. If it isn't, **explain why you want to add it** ("so your key doesn't end up in git history") and add it.
|
|
126
|
-
|
|
127
|
-
### How to get the key into `.env` — offer three options, recommend the editor
|
|
128
|
-
|
|
129
|
-
The key itself never has to pass through the chat. Present these three options and **recommend option 1**:
|
|
130
|
-
|
|
131
|
-
1. **Edit `.env` yourself, then continue (recommended).** This is the most secure path — the key never goes through chat, never lands in transcripts or logs. Say to the user, in this spirit:
|
|
132
|
-
|
|
133
|
-
> "I'd recommend the safest way: open `.env` in your editor, add the line `OPENROUTER_API_KEY=…` (paste the value there), save, then just tell me 'continue' or 'ready' and I'll pick up the verification step. The key never has to pass through this chat that way."
|
|
134
|
-
|
|
135
|
-
When they confirm they've saved it, verify it's set before continuing:
|
|
56
|
+
1. `curl -sS -o /dev/null -w "%{http_code}\n" <url>` — `000` is DNS/VPN/wrong host, `5xx` is the app itself, `200` skips to rung 3.
|
|
57
|
+
2. `curl -sIL -o /dev/null -w "%{url_effective}\n" <url>` after a `3xx`/`401`/`403`. A login-looking final URL means credentials are needed: do rung 4 first.
|
|
58
|
+
3. `npx explorbot navigate <path> --session` — exit `0` ends setup. `--session` saves cookies to `output/session.json`. On exit `1`, read `output/explorbot.log`: an auth wall sends you to rung 4, anything else is a wrong path or a broken page.
|
|
59
|
+
4. Teach auth, knowledge first, values second:
|
|
136
60
|
|
|
137
61
|
```bash
|
|
138
|
-
|
|
62
|
+
npx explorbot knows /login # reuse existing variable names if auth knowledge exists
|
|
63
|
+
npx explorbot learn "/login" 'Sign in with ${env.APP_USER} / ${env.APP_PASSWORD}'
|
|
139
64
|
```
|
|
140
65
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
2. **Paste the key here and I'll write it.** Less secure (the key passes through chat), but convenient. Only use this if the user explicitly prefers it. When they paste, write it to `.env` immediately and do not echo the value back in your reply.
|
|
144
|
-
|
|
145
|
-
3. **Skip for now — I'll set it up later.** Legitimate, but be clear: setup will **stop at step 4**, no verification will run. They'll finish by editing `.env` themselves and then running `npx explorbot navigate <path> --session` manually. Recommend they come back through `explorbot-fundamentals` once the key is in place.
|
|
146
|
-
|
|
147
|
-
Do not list these in a `1/2/3` multiple-choice prompt where #1 looks just as casual as the others — call option 1 out as the recommended one in your explanation, and frame option 2 as the less-secure alternative.
|
|
148
|
-
|
|
149
|
-
(Once Explorbot is installed, the canonical reference for everything in this section is `node_modules/explorbot/docs/configuration.md` and `node_modules/explorbot/docs/providers.md`. The fundamentals skill uses these — setup shouldn't need them unless the generated template is unclear.)
|
|
150
|
-
|
|
151
|
-
## 4 — Pick the verification page
|
|
152
|
-
|
|
153
|
-
Before asking, **explain why**:
|
|
154
|
-
|
|
155
|
-
> "Setup isn't done until I've proven Explorbot can actually open a page on your app — that catches network issues, wrong URL, auth walls, or a misconfigured browser before we waste a real exploration run. Pick any page on your app: the home page (`/`), a login page (`/login`), or a specific area you'll want to test later (e.g. `/admin/users`). I'll try a cheap reachability check first, then ask Explorbot to navigate there."
|
|
156
|
-
|
|
157
|
-
Then ask: *"Which page should I use for the verification? You can paste a full URL or just a path like `/login`."*
|
|
158
|
-
|
|
159
|
-
If they mention login is required up front, ask for credentials now (see step 5C for how — same flow). Otherwise wait; the ladder will surface it cleanly if it's needed.
|
|
160
|
-
|
|
161
|
-
## 5 — Verify with the accessibility ladder
|
|
162
|
-
|
|
163
|
-
Walk these rungs **in order**. Stop at the first failure, fix it, then resume. Do not skip ahead.
|
|
164
|
-
|
|
165
|
-
```dot
|
|
166
|
-
digraph accessibility_ladder {
|
|
167
|
-
rankdir=TB;
|
|
168
|
-
"A. curl page" [shape=box];
|
|
169
|
-
"A.5 curl -IL follow redirects" [shape=box];
|
|
170
|
-
"B. explorbot navigate --session" [shape=box];
|
|
171
|
-
"C. teach auth (knowledge → creds)" [shape=box];
|
|
172
|
-
"Setup done → handoff" [shape=doublecircle];
|
|
173
|
-
"host reachable?" [shape=diamond];
|
|
174
|
-
"page gated (3xx/401/403)?" [shape=diamond];
|
|
175
|
-
"final URL looks like login?" [shape=diamond];
|
|
176
|
-
"navigate exit 0?" [shape=diamond];
|
|
177
|
-
"auth wall after the fact?" [shape=diamond];
|
|
178
|
-
|
|
179
|
-
"A. curl page" -> "host reachable?";
|
|
180
|
-
"host reachable?" -> "fix env (VPN, DNS, web.url), retry A" [label="no"];
|
|
181
|
-
"host reachable?" -> "page gated (3xx/401/403)?" [label="yes"];
|
|
182
|
-
"page gated (3xx/401/403)?" -> "B. explorbot navigate --session" [label="no (200)"];
|
|
183
|
-
"page gated (3xx/401/403)?" -> "A.5 curl -IL follow redirects" [label="yes"];
|
|
184
|
-
"A.5 curl -IL follow redirects" -> "final URL looks like login?";
|
|
185
|
-
"final URL looks like login?" -> "C. teach auth (knowledge → creds)" [label="yes"];
|
|
186
|
-
"final URL looks like login?" -> "B. explorbot navigate --session" [label="no (plain redirect)"];
|
|
187
|
-
"C. teach auth (knowledge → creds)" -> "B. explorbot navigate --session" [label="knows → learn → ask → verify .env"];
|
|
188
|
-
"B. explorbot navigate --session" -> "navigate exit 0?";
|
|
189
|
-
"navigate exit 0?" -> "Setup done → handoff" [label="yes"];
|
|
190
|
-
"navigate exit 0?" -> "auth wall after the fact?" [label="no"];
|
|
191
|
-
"auth wall after the fact?" -> "C. teach auth (knowledge → creds)" [label="yes"];
|
|
192
|
-
"auth wall after the fact?" -> "read output/explorbot.log, fix knowledge, retry B" [label="no"];
|
|
193
|
-
}
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
### A — `curl` the host
|
|
197
|
-
|
|
198
|
-
Run a cheap network check before involving Explorbot. Build the full URL from the `web.url` you just wrote into the config plus the verification path.
|
|
199
|
-
|
|
200
|
-
```bash
|
|
201
|
-
curl -sS -o /dev/null -w "HTTP %{http_code} in %{time_total}s\n" <full-url-to-target-page>
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
Interpret the result yourself:
|
|
205
|
-
|
|
206
|
-
- `000` → DNS / VPN / wrong host / `web.url` wrong. Tell the user what's likely wrong (VPN, DNS, typo in URL), fix what you can, re-run A.
|
|
207
|
-
- `200` → host is up and serving the page; continue to B.
|
|
208
|
-
- `3xx` / `401` / `403` → host is up but the page is gated. **Run A.5 first.**
|
|
209
|
-
- `5xx` → the app itself is broken. Stop and report to the user.
|
|
210
|
-
|
|
211
|
-
### A.5 — Auth probe (only when A returned 3xx / 401 / 403)
|
|
212
|
-
|
|
213
|
-
Don't fire `explorbot navigate` blind into an auth wall — that wastes an AI run when you can already tell credentials will be needed. Follow the redirects with `curl` and see where the host actually sends an unauthenticated request:
|
|
214
|
-
|
|
215
|
-
```bash
|
|
216
|
-
curl -sIL -o /dev/null -w "final=%{url_effective}\nhttp=%{http_code}\n" <full-url-to-target-page>
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
Look at the final URL and decide:
|
|
220
|
-
|
|
221
|
-
- The final URL path contains `login`, `sign_in`, `signin`, `auth`, `session/new`, `account/login`, `oauth`, `sso`, `idp`, or returns `401` / `403` after following redirects → **the app needs credentials.** Jump to step C *now* (before B), gather credentials, store them, and only then run B.
|
|
222
|
-
- The final URL is just a different non-auth path (e.g. `/` → `/dashboard` because there's a working session, or `/old-url` → `/new-url`) → no auth needed, continue straight to B.
|
|
223
|
-
- Ambiguous (e.g. lands on `/` with no login-like keywords)? Tell the user what you saw ("`/` redirected to `/welcome` — is that page open to anonymous users, or does it need a login?") and let them decide.
|
|
224
|
-
|
|
225
|
-
Tell the user what you found before asking, in this spirit:
|
|
226
|
-
|
|
227
|
-
> "Heads up — `curl` on `/` returned 302 and follows through to `https://beta.testomat.io/users/sign_in`. That's a login page, so Explorbot will hit the same wall when it tries to navigate. Let me grab credentials from you now so the verification run actually gets past it."
|
|
228
|
-
|
|
229
|
-
Then go to C, then B.
|
|
230
|
-
|
|
231
|
-
### B — `explorbot navigate`
|
|
232
|
-
|
|
233
|
-
Run the AI Navigator against the target page. It handles redirects, login walls, and recoverable errors.
|
|
234
|
-
|
|
235
|
-
```bash
|
|
236
|
-
npx explorbot navigate <path> --session
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
`--session` captures cookies/localStorage into `output/session.json` so subsequent setup attempts reuse the auth. For other flags, check `npx explorbot navigate --help` on the spot.
|
|
240
|
-
|
|
241
|
-
Interpret the exit code:
|
|
242
|
-
|
|
243
|
-
- Exit `0` → **setup is done. Go to step 6.**
|
|
244
|
-
- Exit `1` → read `output/explorbot.log` and figure out why. If it's a login redirect / 401 / 403, go to C. Otherwise the cause is not credentials (wrong URL, missing wait, app down): fix the knowledge or the config yourself if you can, and re-run B. If you can't tell, surface the log excerpt to the user and ask.
|
|
245
|
-
|
|
246
|
-
### C — Teach Explorbot about auth (knowledge first, then credentials)
|
|
247
|
-
|
|
248
|
-
Enter step C either because step A.5 detected a login redirect *or* because step B's navigate landed on auth. Do not invent credentials. Do not loop without asking.
|
|
249
|
-
|
|
250
|
-
**The order matters.** Knowledge (the markdown file that tells Explorbot *how* to authenticate) is written first, using placeholder env-var references. Real credentials go into `.env` afterwards. If you ask for credentials first and only write knowledge later, you'll race the user — they'll fill `.env`, say "continue", and you'll run navigate against a config that still has no knowledge file. That's the exact bug to avoid.
|
|
251
|
-
|
|
252
|
-
#### C.1 — Check what knowledge already exists
|
|
66
|
+
Name only the credentials — no selectors or DOM hints; the Navigator finds the fields. Then have the user add the two variables to `.env`, verify with `grep`, and repeat rung 3. Ask for a test account on a non-production environment.
|
|
253
67
|
|
|
254
|
-
|
|
68
|
+
Still failing on auth: add one sentence to the knowledge with `learn` (real form URL, SSO, second factor), never a rewrite.
|
|
255
69
|
|
|
256
|
-
|
|
257
|
-
npx explorbot knows <auth-page-path> # e.g. npx explorbot knows /users/sign_in
|
|
258
|
-
npx explorbot knows # if you need a quick overview of everything
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
If an entry already covers sign-in for this URL, **read it** (open the file under `knowledge/`), note which env vars it references, and skip C.2 — jump to C.3 and ask the user to populate those existing vars in `.env`.
|
|
262
|
-
|
|
263
|
-
If nothing relevant is there, continue to C.2.
|
|
264
|
-
|
|
265
|
-
#### C.2 — Write knowledge with env-var placeholders (no real secrets yet)
|
|
266
|
-
|
|
267
|
-
Pick env var names you'll ask the user to populate next — `APP_USER` / `APP_PASSWORD` are sensible defaults; if existing knowledge already references env vars, reuse those names. Then run `explorbot learn` with a **simple** body that names the credentials and references the env vars. Do not invent field selectors, CSS, or DOM hints — the Navigator figures those out on its own; over-specifying makes the knowledge brittle.
|
|
268
|
-
|
|
269
|
-
```bash
|
|
270
|
-
npx explorbot learn "<auth-page-path>" "Sign in with \${env.APP_USER} / \${env.APP_PASSWORD}."
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
Confirm with `npx explorbot knows <auth-page-path>` (or by reading the file under `knowledge/`) that the placeholders survived literally — no real values, no escaped backslashes that broke the substitution.
|
|
274
|
-
|
|
275
|
-
Tell the user in plain language what you just did, in this spirit:
|
|
276
|
-
|
|
277
|
-
> "I wrote `knowledge/<file>.md` so Explorbot knows it should sign in on `<auth-page-path>` using the env vars `APP_USER` / `APP_PASSWORD`. No real credentials are in that file — it just references those two variables. Now I need the actual values."
|
|
278
|
-
|
|
279
|
-
#### C.3 — Ask for the actual credentials, recommend the editor
|
|
70
|
+
`npx explorbot context <path>` prints headings, matched knowledge, and interactive elements with no AI calls — use it to debug a rung for free.
|
|
280
71
|
|
|
281
|
-
|
|
72
|
+
## 6. Handoff
|
|
282
73
|
|
|
283
|
-
|
|
284
|
-
>
|
|
285
|
-
> A safety note: please use a **test account**, not a real admin / personal one — Explorbot will click and submit autonomously, so anything that account can do, it might do. If your app has a staging or dev environment, point at that."
|
|
286
|
-
|
|
287
|
-
Offer the same three options you use for the API key in step 3 (edit `.env` yourself *recommended*; paste here *less secure*; skip *setup stops here*). Tell them exactly which lines to add:
|
|
288
|
-
|
|
289
|
-
```
|
|
290
|
-
APP_USER=…
|
|
291
|
-
APP_PASSWORD=…
|
|
292
|
-
```
|
|
293
|
-
|
|
294
|
-
If you also need to know the **login URL**, the **role / workspace / tenant**, or anything else, ask for those too — but only if the Navigator can't reasonably infer them from the page.
|
|
295
|
-
|
|
296
|
-
#### C.4 — Verify the env vars are set, then retry navigate
|
|
297
|
-
|
|
298
|
-
When the user says "continue", verify before invoking navigate:
|
|
74
|
+
Report what the project now has: `explorbot.config.js`, `.env` (gitignored), `knowledge/`, `output/` with a saved session. Then hand off to [[explorbot-fundamentals]] with a first command:
|
|
299
75
|
|
|
300
76
|
```bash
|
|
301
|
-
|
|
77
|
+
npx explorbot explore /<crud-page> --max-tests 10
|
|
302
78
|
```
|
|
303
79
|
|
|
304
|
-
If "creds missing", tell the user which line is empty and wait — don't proceed.
|
|
305
|
-
|
|
306
|
-
If "creds set", retry step B (`npx explorbot navigate <path> --session`). If navigate now exits `0`, setup is done. If it still fails:
|
|
307
|
-
|
|
308
|
-
- Read `output/explorbot.log` for the actual cause.
|
|
309
|
-
- If it still looks like an auth issue, the knowledge body may need a small hint (e.g. the user lands on `/login` but `/users/sign_in` is the actual form, or the app has SSO / a second factor). Re-run `explorbot learn` with one short added sentence, not a rewrite. Then retry navigate.
|
|
310
|
-
- If it's not auth (wrong URL, missing wait, server error), share the log excerpt with the user and decide together — don't loop blindly.
|
|
311
|
-
|
|
312
|
-
## 6 — Handoff
|
|
313
|
-
|
|
314
|
-
When `explorbot navigate <path> --session` exits `0`, setup is complete. Give the user a warm wrap-up, in this spirit:
|
|
315
|
-
|
|
316
|
-
> "🎉 Setup is done — Explorbot just opened `<path>` on your app successfully. Here's where you stand:
|
|
317
|
-
>
|
|
318
|
-
> - `explorbot.config.js` is configured with your URL and AI provider.
|
|
319
|
-
> - Your API key and any credentials are in `.env` (gitignored).
|
|
320
|
-
> - `output/session.json` holds a working browser session, so future runs won't re-login.
|
|
321
|
-
>
|
|
322
|
-
> From here, you'd typically:
|
|
323
|
-
> - Run **`npx explorbot research <path>`** to see what Explorbot understands about a page (cheap, no testing yet).
|
|
324
|
-
> - Run **`npx explorbot explore <path> --max-tests 10`** for a real exploration cycle (research → plan → test).
|
|
325
|
-
> - Or write a plan by hand and run it with **`npx explorbot test <plan.md>`**.
|
|
326
|
-
>
|
|
327
|
-
> The `explorbot-fundamentals` skill walks through all of that and is what you'll want for everything beyond setup. Want me to hand off there?"
|
|
328
|
-
|
|
329
80
|
## Anti-patterns
|
|
330
81
|
|
|
331
|
-
-
|
|
332
|
-
-
|
|
333
|
-
-
|
|
334
|
-
-
|
|
82
|
+
- Installing into the project when the user only wanted to try Explorbot — that is [[explorbot-fundamentals]].
|
|
83
|
+
- Naming providers, model ids, or key variables without reading them from the docs or the generated config.
|
|
84
|
+
- Putting secrets in knowledge files or config — always `${env.NAME}`, values in `.env`.
|
|
85
|
+
- Driving `explorbot start` — it is an interactive TUI; ask the user to run it.
|
|
86
|
+
- Asking upfront for target pages, features, or test counts.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qa-explain-behavior
|
|
3
|
+
description: Answers QA questions about product behavior — what features exist, how user flows work, what business rules apply, what edge cases the system handles, and what is or is not implemented. Use whenever the user asks a question about WHAT the system does (features, flows, rules, conditions, who-can-do-what, when-does-X-happen, is-Y-supported). Trigger even when the user does not say "QA" — phrases like "what happens when…", "can a user…", "is it possible to…", "does the system…", "is X implemented", "what should I test for…", "what are the edge cases of…", or "walk me through the flow for…" all qualify. Do NOT trigger for questions that are clearly about implementation (architecture, database schema, code structure, performance, types, dependencies).
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
author: Testomat.io
|
|
7
|
+
version: 1.0.0
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# QA Explain Behavior
|
|
11
|
+
|
|
12
|
+
Answer a QA engineer who is testing the product. They care about **product behavior**, not implementation. Read the codebase like a manual and translate it into plain-language descriptions of what the system does.
|
|
13
|
+
|
|
14
|
+
| What | File |
|
|
15
|
+
|------|------|
|
|
16
|
+
| Output shape per question type — feature, flow, yes/no, permissions, edge cases | [references/answer-shapes.md](references/answer-shapes.md) |
|
|
17
|
+
| Worked answers, plus bad-vs-good contrasts | [references/examples.md](references/examples.md) |
|
|
18
|
+
|
|
19
|
+
## The mindset shift
|
|
20
|
+
|
|
21
|
+
The QA engineer is not going to read the code. They are going to click buttons, fill forms, and try to break things. The answer should help them know what to click, what to expect, and where the product might fail. Describe the product like someone who has used it end-to-end.
|
|
22
|
+
|
|
23
|
+
A QA engineer's mental model is built from:
|
|
24
|
+
|
|
25
|
+
- **Actors** — who is doing this: guest, member, admin, owner, integration.
|
|
26
|
+
- **Actions** — what they do: click, submit, upload, invite.
|
|
27
|
+
- **Outcomes** — what they see or what changes: page, message, email, status.
|
|
28
|
+
- **Rules** — when it's allowed, when it's blocked, what limits apply.
|
|
29
|
+
- **Edge cases** — empty state, very large input, duplicate, expired, offline.
|
|
30
|
+
|
|
31
|
+
Frame every answer in those terms.
|
|
32
|
+
|
|
33
|
+
## What to investigate
|
|
34
|
+
|
|
35
|
+
Look at the parts of the codebase that **describe behavior**, not the parts that describe data:
|
|
36
|
+
|
|
37
|
+
- **Service and controller layers** — what user actions exist, and the multi-step flows behind them.
|
|
38
|
+
- **Business logic** — the rules that decide what is allowed, what changes, and what happens next.
|
|
39
|
+
- **Authorization and permissions system** — who can do what, and whether the block is in the UI, on the server, or both.
|
|
40
|
+
- **Feature flags** — what is switched on, off, or limited to certain accounts.
|
|
41
|
+
- **Configuration** — limits, defaults, and behavior that differs per environment or plan.
|
|
42
|
+
- **Models** — only *validations*, *state machines*, *callbacks*, and *scopes with business meaning*. Not columns, associations, or types.
|
|
43
|
+
- **Views, serializers, mailers** — what the user sees and receives.
|
|
44
|
+
- **Background jobs** — what happens after the user-visible action: notifications, syncs, cleanups.
|
|
45
|
+
- **Tests** — they describe expected behavior in plain English; very useful.
|
|
46
|
+
|
|
47
|
+
## What to ignore
|
|
48
|
+
|
|
49
|
+
Unless the user explicitly asks, never mention:
|
|
50
|
+
|
|
51
|
+
- Database tables, columns, indexes, schema.
|
|
52
|
+
- Class names, file paths, line numbers, module structure.
|
|
53
|
+
- Framework terminology and internals — ORM concepts, callbacks, middleware, queues, dependencies.
|
|
54
|
+
- Variable names, method names, parameters, types.
|
|
55
|
+
- SQL, code snippets, regex.
|
|
56
|
+
- Performance, scaling, architecture decisions.
|
|
57
|
+
- Migration history, refactors.
|
|
58
|
+
|
|
59
|
+
If the user wants this, they will ask. The default is product-level only.
|
|
60
|
+
|
|
61
|
+
## How to answer
|
|
62
|
+
|
|
63
|
+
**Be compact.** A QA engineer scans, they don't read paragraphs. Short bullets, short sentences, plain words.
|
|
64
|
+
|
|
65
|
+
**Lead with the answer.** No preamble, no restating the question, no "Let me explain…".
|
|
66
|
+
|
|
67
|
+
**Use product vocabulary, not code vocabulary:**
|
|
68
|
+
|
|
69
|
+
- "the user", "the admin", "the workspace owner" — not `current_user`.
|
|
70
|
+
- "the settings page" — not a controller action name.
|
|
71
|
+
- "an email is sent" — not a mailer class.
|
|
72
|
+
- "it's blocked" — not "validation fails".
|
|
73
|
+
- "in the background" — not the name of the queue.
|
|
74
|
+
|
|
75
|
+
**Structure by what a tester needs.** When describing a feature, default to this shape:
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
**What it does:** one line
|
|
79
|
+
**Who can do it:** roles / permissions
|
|
80
|
+
**How to trigger it:** user action(s)
|
|
81
|
+
**What happens:** outcomes (UI, emails, notifications, status changes)
|
|
82
|
+
**Rules / limits:** validations, conditions
|
|
83
|
+
**Edge cases:** empty, duplicate, large, expired, blocked, etc.
|
|
84
|
+
**Not implemented:** anything the QA might expect that does NOT exist
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
For flow questions, describe the flow as numbered steps from the user's point of view. For "is X supported?" questions, answer **yes** or **no** first, then a one-line reason, then any nuance. Permission questions, edge-case sweeps, failure behavior, comparisons, and how to phrase uncertainty each have their own shape in [references/answer-shapes.md](references/answer-shapes.md).
|
|
88
|
+
|
|
89
|
+
**Surface what is missing.** The most valuable thing a QA engineer can hear is "this is not implemented", "there is no UI for this — only the API supports it", or "this only works for paying accounts". Always look for gaps and call them out: a flag, a TODO, a commented-out path, an action reachable only via API.
|
|
90
|
+
|
|
91
|
+
**Be honest about uncertainty.** If the codebase is ambiguous, say "I see X but I'm not sure whether Y" rather than guessing. A QA testing on a wrong assumption is worse than a QA who knows to verify.
|
|
92
|
+
|
|
93
|
+
## Do not write code
|
|
94
|
+
|
|
95
|
+
Never produce code blocks, schema, configuration snippets, or pseudocode unless the user explicitly asks ("show me the code", "give me the SQL"). The default response is prose and bullets only. When tempted to paste code "to be helpful", describe the behavior instead.
|
|
96
|
+
|
|
97
|
+
When the product **is** a CLI or an API, the commands, flags, and endpoints a user types are product surface, not implementation — name them exactly, the same way you would name a button.
|
|
98
|
+
|
|
99
|
+
[references/examples.md](references/examples.md) has worked answers — a full feature description, a flow walkthrough, an edge-case sweep — and two bad-vs-good contrasts showing what code leaking into an answer looks like.
|
|
100
|
+
|
|
101
|
+
## Next actions
|
|
102
|
+
|
|
103
|
+
Offer after the answer:
|
|
104
|
+
|
|
105
|
+
- Turn the behavior into risk scenarios → `qa-thinking` skill.
|
|
106
|
+
- Turn it into test cases or a checklist → `qa-write-test-cases` skill.
|
|
107
|
+
- Map which tests already cover it → `qa-test-code-coverage` skill.
|
|
108
|
+
|
|
109
|
+
## Final reminder
|
|
110
|
+
|
|
111
|
+
Compact. Plain language. Behavior, not code. Highlight gaps. No code unless asked.
|