testeiya 0.2.0 → 0.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +37 -175
- package/dist/prompt/context.js +79 -0
- package/dist/prompt/context.js.map +1 -0
- package/dist/prompt/index.js +56 -0
- package/dist/prompt/index.js.map +1 -0
- package/dist/prompt/print.js +22 -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} +24 -21
- 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 +49 -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 +72 -0
- package/dist/src/args.js.map +1 -0
- package/dist/src/cli.js +61 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/env.js +69 -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 +66 -0
- package/dist/src/model.js.map +1 -0
- package/dist/src/result.js +41 -0
- package/dist/src/result.js.map +1 -0
- package/dist/src/run.js +199 -0
- package/dist/src/run.js.map +1 -0
- package/dist/src/session.js +77 -0
- package/dist/src/session.js.map +1 -0
- package/dist/vendor/mcp.js +14801 -0
- package/mcp-tools.json +2967 -0
- package/package.json +29 -41
- package/prompt/context.ts +101 -0
- package/prompt/index.ts +93 -0
- package/prompt/print.ts +23 -0
- package/prompt/project-info.ts +30 -0
- package/prompt/system-prompt.ts +173 -0
- package/{src/prompt → prompt}/testomatio.ts +119 -8
- package/{src/prompt → prompt}/tools.ts +30 -8
- package/prompt/vocab.ts +7 -0
- package/{skills.lock.json → skills/skills.lock.json} +11 -7
- package/skills/skills.yaml +34 -0
- package/models.catalog.json +0 -6963
- package/skills/codeceptjs/ci-fix-tests/SKILL.md +0 -120
- package/skills/codeceptjs/codeceptjs-auth/SKILL.md +0 -158
- package/skills/codeceptjs/codeceptjs-exploration/SKILL.md +0 -91
- package/skills/codeceptjs/codeceptjs-fundamentals/SKILL.md +0 -158
- package/skills/codeceptjs/codeceptjs-run-analysis/SKILL.md +0 -90
- package/skills/codeceptjs/debugging-codeceptjs-tests/SKILL.md +0 -234
- package/skills/codeceptjs/migrate-codeceptjs-4/SKILL.md +0 -110
- package/skills/codeceptjs/migrate-cypress-to-codeceptjs/SKILL.md +0 -306
- package/skills/codeceptjs/migrate-protractor-to-codeceptjs/SKILL.md +0 -352
- package/skills/codeceptjs/migrate-selenium-java-to-codeceptjs/SKILL.md +0 -472
- package/skills/codeceptjs/migrate-testcafe-to-codeceptjs/SKILL.md +0 -350
- package/skills/codeceptjs/refactoring-codeceptjs-tests/SKILL.md +0 -81
- package/skills/codeceptjs/writing-codeceptjs-tests/SKILL.md +0 -206
- package/skills/playwright-best-practices-skill/LICENSE.md +0 -7
- package/skills/playwright-best-practices-skill/README.md +0 -147
- package/skills/playwright-best-practices-skill/SKILL.md +0 -303
- package/skills/playwright-best-practices-skill/advanced/authentication-flows.md +0 -360
- package/skills/playwright-best-practices-skill/advanced/authentication.md +0 -871
- package/skills/playwright-best-practices-skill/advanced/clock-mocking.md +0 -364
- package/skills/playwright-best-practices-skill/advanced/mobile-testing.md +0 -409
- package/skills/playwright-best-practices-skill/advanced/multi-context.md +0 -288
- package/skills/playwright-best-practices-skill/advanced/multi-user.md +0 -393
- package/skills/playwright-best-practices-skill/advanced/network-advanced.md +0 -452
- package/skills/playwright-best-practices-skill/advanced/third-party.md +0 -464
- package/skills/playwright-best-practices-skill/architecture/pom-vs-fixtures.md +0 -363
- package/skills/playwright-best-practices-skill/architecture/test-architecture.md +0 -369
- package/skills/playwright-best-practices-skill/architecture/when-to-mock.md +0 -383
- package/skills/playwright-best-practices-skill/browser-apis/browser-apis.md +0 -391
- package/skills/playwright-best-practices-skill/browser-apis/iframes.md +0 -403
- package/skills/playwright-best-practices-skill/browser-apis/service-workers.md +0 -504
- package/skills/playwright-best-practices-skill/browser-apis/websockets.md +0 -403
- package/skills/playwright-best-practices-skill/core/annotations.md +0 -424
- package/skills/playwright-best-practices-skill/core/assertions-waiting.md +0 -361
- package/skills/playwright-best-practices-skill/core/configuration.md +0 -452
- package/skills/playwright-best-practices-skill/core/fixtures-hooks.md +0 -417
- package/skills/playwright-best-practices-skill/core/global-setup.md +0 -434
- package/skills/playwright-best-practices-skill/core/locators.md +0 -242
- package/skills/playwright-best-practices-skill/core/page-object-model.md +0 -315
- package/skills/playwright-best-practices-skill/core/projects-dependencies.md +0 -453
- package/skills/playwright-best-practices-skill/core/test-data.md +0 -492
- package/skills/playwright-best-practices-skill/core/test-suite-structure.md +0 -361
- package/skills/playwright-best-practices-skill/core/test-tags.md +0 -298
- package/skills/playwright-best-practices-skill/debugging/console-errors.md +0 -420
- package/skills/playwright-best-practices-skill/debugging/debugging.md +0 -504
- package/skills/playwright-best-practices-skill/debugging/error-testing.md +0 -360
- package/skills/playwright-best-practices-skill/debugging/flaky-tests.md +0 -496
- package/skills/playwright-best-practices-skill/frameworks/angular.md +0 -530
- package/skills/playwright-best-practices-skill/frameworks/nextjs.md +0 -469
- package/skills/playwright-best-practices-skill/frameworks/react.md +0 -531
- package/skills/playwright-best-practices-skill/frameworks/vue.md +0 -574
- package/skills/playwright-best-practices-skill/infrastructure-ci-cd/ci-cd.md +0 -468
- package/skills/playwright-best-practices-skill/infrastructure-ci-cd/docker.md +0 -283
- package/skills/playwright-best-practices-skill/infrastructure-ci-cd/github-actions.md +0 -546
- package/skills/playwright-best-practices-skill/infrastructure-ci-cd/gitlab.md +0 -397
- package/skills/playwright-best-practices-skill/infrastructure-ci-cd/other-providers.md +0 -521
- package/skills/playwright-best-practices-skill/infrastructure-ci-cd/parallel-sharding.md +0 -371
- package/skills/playwright-best-practices-skill/infrastructure-ci-cd/performance.md +0 -453
- package/skills/playwright-best-practices-skill/infrastructure-ci-cd/reporting.md +0 -424
- package/skills/playwright-best-practices-skill/infrastructure-ci-cd/test-coverage.md +0 -497
- package/skills/playwright-best-practices-skill/testing-patterns/accessibility.md +0 -359
- package/skills/playwright-best-practices-skill/testing-patterns/api-testing.md +0 -719
- package/skills/playwright-best-practices-skill/testing-patterns/browser-extensions.md +0 -506
- package/skills/playwright-best-practices-skill/testing-patterns/canvas-webgl.md +0 -493
- package/skills/playwright-best-practices-skill/testing-patterns/component-testing.md +0 -500
- package/skills/playwright-best-practices-skill/testing-patterns/drag-drop.md +0 -576
- package/skills/playwright-best-practices-skill/testing-patterns/electron.md +0 -509
- package/skills/playwright-best-practices-skill/testing-patterns/file-operations.md +0 -377
- package/skills/playwright-best-practices-skill/testing-patterns/file-upload-download.md +0 -562
- package/skills/playwright-best-practices-skill/testing-patterns/forms-validation.md +0 -561
- package/skills/playwright-best-practices-skill/testing-patterns/graphql-testing.md +0 -331
- package/skills/playwright-best-practices-skill/testing-patterns/i18n.md +0 -508
- package/skills/playwright-best-practices-skill/testing-patterns/performance-testing.md +0 -476
- package/skills/playwright-best-practices-skill/testing-patterns/security-testing.md +0 -430
- package/skills/playwright-best-practices-skill/testing-patterns/visual-regression.md +0 -634
- package/skills/playwright-cli/SKILL.md +0 -420
- package/skills/playwright-cli/references/element-attributes.md +0 -23
- package/skills/playwright-cli/references/playwright-tests.md +0 -39
- package/skills/playwright-cli/references/request-mocking.md +0 -87
- package/skills/playwright-cli/references/running-code.md +0 -241
- package/skills/playwright-cli/references/session-management.md +0 -225
- package/skills/playwright-cli/references/storage-state.md +0 -275
- package/skills/playwright-cli/references/test-generation.md +0 -433
- package/skills/playwright-cli/references/tracing.md +0 -139
- package/skills/playwright-cli/references/video-recording.md +0 -143
- 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/explorbot/explorbot-fundamentals/SKILL.md +0 -88
- package/skills/testomatio/explorbot/explorbot-plan/SKILL.md +0 -95
- package/skills/testomatio/explorbot/explorbot-setup/SKILL.md +0 -334
- package/skills/testomatio/test-automation/automate-manual-test-cases/CLAUDE.md +0 -56
- package/skills/testomatio/test-automation/automate-manual-test-cases/SKILL.md +0 -242
- package/skills/testomatio/test-automation/automate-manual-test-cases/references/CODECEPTJS_BEST_PRACTICES.md +0 -182
- package/skills/testomatio/test-automation/automate-manual-test-cases/references/FINAL_SUMMARY_TEMPLATE.md +0 -22
- package/skills/testomatio/test-automation/automate-manual-test-cases/references/PLAYWRIGHT_BEST_PRACTICES.md +0 -90
- package/skills/testomatio/test-automation/automate-manual-test-cases/references/POM_BEST_PRACTICES.md +0 -53
- package/skills/testomatio/test-automation/automate-manual-test-cases/references/TEST_DATA_MANAGEMENT.md +0 -52
- package/skills/testomatio/test-automation/debug-fix-failed-flaky-autotests/SKILL.md +0 -107
- package/skills/testomatio/test-automation/debug-fix-failed-flaky-autotests/references/DEBUGGING_QUICK_REFERENCE.md +0 -113
- package/skills/testomatio/test-automation/qa-automation-test-consolidation/SKILL.md +0 -29
- package/skills/testomatio/test-automation/run-tests-with-testomatio-reporter/SKILL.md +0 -151
- package/skills/testomatio/test-automation/setup-pr-testing/SKILL.md +0 -199
- package/skills/testomatio/test-automation/testomat-allure-adapter/SKILL.md +0 -289
- package/skills/testomatio/test-management/detect-duplicate-test-cases/SKILL.md +0 -86
- package/skills/testomatio/test-management/detect-duplicate-test-cases/references/DUPLICATE_INSTRUCTIONS.md +0 -54
- package/skills/testomatio/test-management/improve-test-cases/SKILL.md +0 -114
- package/skills/testomatio/test-management/improve-test-cases/references/TESTOMAT_MARKDOWN_EXAMPLE.md +0 -66
- package/skills/testomatio/test-management/pull-request-diff-analyzer/SKILL.md +0 -141
- package/skills/testomatio/test-management/qa-e2e-tests-reporting/SKILL.md +0 -354
- package/skills/testomatio/test-management/qa-e2e-tests-reporting/references/TESTOMATIO_ARTIFACTS.md +0 -82
- package/skills/testomatio/test-management/qa-e2e-tests-reporting/references/TESTOMATIO_HTML_REPORT.md +0 -37
- package/skills/testomatio/test-management/qa-e2e-tests-reporting/references/TESTOMATIO_REPORTERS_CONFIG.md +0 -118
- package/skills/testomatio/test-management/qa-pr-requirements-analyzer/SKILL.md +0 -149
- package/skills/testomatio/test-management/qa-pr-requirements-analyzer/references/summary-example.md +0 -54
- package/skills/testomatio/test-management/qa-requirement-reviewer/SKILL.md +0 -126
- package/skills/testomatio/test-management/qa-requirement-reviewer/references/requirements_reviewer_examples.md +0 -128
- package/skills/testomatio/test-management/qa-test-code-coverage/SKILL.md +0 -174
- package/skills/testomatio/test-management/qa-test-code-coverage/references/COVERAGE_FILE_FORMAT.md +0 -138
- package/skills/testomatio/test-management/qa-test-code-coverage/references/E2E_FRAMEWORKS.md +0 -65
- package/skills/testomatio/test-management/qa-test-code-coverage/scripts/check-coverage.mjs +0 -40
- package/skills/testomatio/test-management/qa-thinking/SKILL.md +0 -36
- package/skills/testomatio/test-management/qa-write-test-cases/SKILL.md +0 -267
- package/skills/testomatio/test-management/qa-write-test-cases/references/test-case-format.md +0 -387
- package/skills/testomatio/test-management/qa-write-test-cases/references/testomat-tms-guide.md +0 -72
- package/skills/testomatio/test-management/qa-write-test-cases/references/writing-rule.md +0 -159
- package/skills/testomatio/test-management/scan-automation-project/SKILL.md +0 -152
- package/skills/testomatio/test-management/sync-test-cases-with-tms/SKILL.md +0 -107
- package/skills/testomatio/test-management/sync-test-cases-with-tms/references/TESTOMATIO_CLI.md +0 -140
- package/skills/testomatio/test-management/testomatio-mcp/SKILL.md +0 -182
- package/skills/testomatio/test-management/testomatio-mcp/references/MCP_SETUP.md +0 -169
- 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/server-info.ts +0 -62
- package/src/session-factory.ts +0 -442
- package/src/session-store.ts +0 -115
- package/src/shell-env.ts +0 -45
- package/src/skills.ts +0 -163
- package/src/sync-snapshot.ts +0 -140
- package/src/telemetry.ts +0 -239
- package/src/testomatio-auth.ts +0 -299
- package/src/testomatio.ts +0 -98
- package/src/theme.ts +0 -30
- package/src/user-env.ts +0 -94
- package/src/welcome.ts +0 -127
- package/src/workspace/safe-path.ts +0 -85
- package/src/workspace/test-md.ts +0 -70
- package/src/workspace-model.ts +0 -440
- package/testeiya.config.json +0 -14
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Testomat.io
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,212 +1,74 @@
|
|
|
1
1
|
# Testeiya
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
An agent, app, and the goddess of testing.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Testeiya is a QA-focused AI agent. It reads and writes manual test cases as markdown, works with automated test code, and talks to [Testomat.io](https://testomat.io) as a test management system. It ships as a desktop app, a web app, and the command-line agent in this repository.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
This repository holds the parts of Testeiya that shape how the agent thinks:
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
| Folder | What it is |
|
|
10
|
+
|---|---|
|
|
11
|
+
| `prompt/` | The system-prompt fragments — the agent's role, rules, tool guidance, Testomat.io operating rules, and the report contract |
|
|
12
|
+
| `skills/` | The manifest of skills the agent can invoke — every folder is fetched from its own upstream repository |
|
|
13
|
+
| `src/` | The `testeiya` command-line agent (Node) |
|
|
10
14
|
|
|
11
|
-
|
|
15
|
+
The desktop and web harness — servers, session management, sync, UI — is not open source.
|
|
12
16
|
|
|
13
|
-
|
|
14
|
-
- Read-permissive / write-restricted permission model
|
|
15
|
-
- Safe bash commands (git log, cat, grep...) auto-allowed; destructive commands blocked
|
|
16
|
-
- Testomat.io skills: test generation, duplicate detection, test improvement, reporter setup
|
|
17
|
-
- Markdown-rendered output in terminal
|
|
18
|
-
- Multi-line paste support
|
|
19
|
-
- Configurable LLM provider and model (OpenRouter by default; any OpenAI-compatible endpoint)
|
|
20
|
-
|
|
21
|
-
## Installation
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
npm install -g testeiya # requires Bun (https://bun.sh) on your PATH
|
|
25
|
-
testeiya
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Or run from source. This package lives in the [`cli/`](https://github.com/testomatio/testeiya-app/tree/main/cli) directory of the Testeiya monorepo:
|
|
17
|
+
## Install and use
|
|
29
18
|
|
|
30
19
|
```bash
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
bun install
|
|
34
|
-
bun src/cli.ts
|
|
20
|
+
npx testeiya "Review the manual tests in this folder and list the gaps" \
|
|
21
|
+
--model openrouter/anthropic/claude-sonnet-5 --output report.md
|
|
35
22
|
```
|
|
36
23
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
- [Bun](https://bun.sh) — the CLI runs under Bun (its `testeiya` bin uses a `#!/usr/bin/env bun` shebang and runs the TypeScript directly)
|
|
40
|
-
- An API key for whatever you set as `provider.name` in config (default is OpenRouter; see [API keys](#api-keys) below)
|
|
41
|
-
|
|
42
|
-
## Running in Container (Optional)
|
|
43
|
-
|
|
44
|
-
Instead of installing locally, you can run Testeiya in Docker. Requires [Docker](https://docker.com) to be installed.
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
# Build the container
|
|
48
|
-
make build
|
|
49
|
-
|
|
50
|
-
# Configure environment (copy example and edit)
|
|
51
|
-
cp .env.example .env
|
|
52
|
-
# Edit .env with your API keys
|
|
24
|
+
The agent runs one task and exits — there is no interactive mode. Progress goes to stderr, the report to `--output` (or stdout when you omit it). Exit codes: `0` pass, `1` failed run or negative verdict, `2` bad usage, `130` interrupted — so it drops into CI as-is.
|
|
53
25
|
|
|
54
|
-
|
|
55
|
-
make run
|
|
56
|
-
|
|
57
|
-
# Stop the container
|
|
58
|
-
make stop
|
|
59
|
-
|
|
60
|
-
# Clean up containers
|
|
61
|
-
make clean
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
The container mounts `./src` to `/app/src`, so you can edit code locally and run it inside the container.
|
|
65
|
-
|
|
66
|
-
### MCP (Testomat.io Integration)
|
|
67
|
-
|
|
68
|
-
Testeiya includes MCP server for Testomat.io. To enable:
|
|
69
|
-
|
|
70
|
-
1. Copy `.env.example` to `.env`
|
|
71
|
-
2. Add your Testomat.io credentials:
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
# In .env file
|
|
75
|
-
OPENROUTER_API_KEY=sk-or-your-key
|
|
76
|
-
TESTOMATIO_PROJECT_TOKEN=tstmt_xxx
|
|
77
|
-
TESTOMATIO_PROJECT_ID=your-project-id
|
|
78
|
-
TESTOMATIO_BASE_URL=https://app.testomat.io # or any anoher one
|
|
79
|
-
```
|
|
26
|
+
Requires Node 22.19 or newer, a model, and an LLM provider key.
|
|
80
27
|
|
|
81
|
-
|
|
28
|
+
There is no default model. Name one with `--model <provider>/<id>` or `TESTEIYA_MODEL`; a run that names none exits `2` rather than spending your money on a model nobody chose.
|
|
82
29
|
|
|
83
|
-
|
|
30
|
+
The key comes from the environment (`OPENROUTER_API_KEY` and friends), `~/.testeiya/.env`, or `~/.testeiya/auth.json` — the same file the desktop app's Settings dialog writes, so configuring it once covers both.
|
|
84
31
|
|
|
85
32
|
```bash
|
|
86
|
-
|
|
87
|
-
|
|
33
|
+
testeiya --help # every flag
|
|
34
|
+
export TESTEIYA_MODEL=openrouter/anthropic/claude-sonnet-5
|
|
35
|
+
testeiya "<task>"
|
|
36
|
+
cat task.md | testeiya --output report.md
|
|
88
37
|
```
|
|
89
38
|
|
|
90
|
-
|
|
39
|
+
Set `TESTOMATIO` to a project API key and the agent can read and write that project's tests, suites, runs and plans through `check-tests` and the REST API. Add the project id as well and it also gets the Testomat.io tools:
|
|
91
40
|
|
|
92
41
|
```bash
|
|
93
|
-
|
|
94
|
-
node dist/cli.js
|
|
42
|
+
TESTOMATIO=tstmt_xxx testeiya --project my-project "Which suites have no tests?"
|
|
95
43
|
```
|
|
96
44
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
```
|
|
100
|
-
Model: openrouter/anthropic/claude-sonnet-4
|
|
101
|
-
Skills: analyze-tests, find-duplicate-cases, generate-test-cases, ...
|
|
102
|
-
|
|
103
|
-
Testeiya - AI Testing Agent
|
|
104
|
-
|
|
105
|
-
What can I do for you?
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
Type a request like:
|
|
109
|
-
|
|
110
|
-
- "Analyze the test suite in this project"
|
|
111
|
-
- "Find untested code paths in src/controllers"
|
|
112
|
-
- "Generate test cases for the auth module"
|
|
113
|
-
|
|
114
|
-
Paste multi-line text (API docs, specs, requirements) directly into the prompt.
|
|
115
|
-
|
|
116
|
-
## Configuration
|
|
117
|
-
|
|
118
|
-
Edit `testeiya.config.json` in the project root:
|
|
119
|
-
|
|
120
|
-
```json
|
|
121
|
-
{
|
|
122
|
-
"provider": {
|
|
123
|
-
"name": "openrouter",
|
|
124
|
-
"baseUrl": "https://openrouter.ai/api/v1",
|
|
125
|
-
"model": "anthropic/claude-sonnet-4",
|
|
126
|
-
"contextWindow": 200000,
|
|
127
|
-
"maxTokens": 16384
|
|
128
|
-
},
|
|
129
|
-
"permissions": {
|
|
130
|
-
"autoAllowRead": true,
|
|
131
|
-
"blockWrites": true,
|
|
132
|
-
"blockBash": true
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
- **provider.model** - Any model available on OpenRouter (e.g. `anthropic/claude-sonnet-4`, `openai/gpt-4o`, `google/gemini-2.5-pro`)
|
|
138
|
-
- **permissions.blockWrites** - When `true`, edit/write tools are blocked
|
|
139
|
-
- **permissions.blockBash** - When `true`, only read-only bash commands are allowed
|
|
140
|
-
|
|
141
|
-
Config is also loaded from `~/.testeiya/config.json` as a fallback.
|
|
142
|
-
|
|
143
|
-
### API keys
|
|
144
|
-
|
|
145
|
-
Read the API key from `process.env.<PROVIDER_NAME>_API_KEY`, where `<PROVIDER_NAME>` is your `provider.name` (uppercase) from config (e.g. `openrouter` in `testeiya.config.json`).
|
|
146
|
-
|
|
147
|
-
Example: if `provider.name` is `openrouter`, read the API key from `process.env.OPENROUTER_API_KEY`.
|
|
148
|
-
|
|
149
|
-
| `provider.name` | Environment variable |
|
|
150
|
-
| --------------- | ---------------------- |
|
|
151
|
-
| `openrouter` | `OPENROUTER_API_KEY` |
|
|
152
|
-
| `openai` | `OPENAI_API_KEY` |
|
|
153
|
-
| `anthropic` | `ANTHROPIC_API_KEY` |
|
|
154
|
-
| `groq` | `GROQ_API_KEY` |
|
|
155
|
-
|
|
156
|
-
Or set any environment variable name depending of provider name.
|
|
45
|
+
The id can come from `--project` or `TESTOMATIO_PROJECT_ID`. The MCP server needs it: a token alone does not tell it which project to talk to.
|
|
157
46
|
|
|
158
47
|
## Skills
|
|
159
48
|
|
|
160
|
-
|
|
49
|
+
A skill is a folder with a `SKILL.md`. The agent loads them all and invokes the ones a task calls for.
|
|
161
50
|
|
|
162
|
-
|
|
163
|
-
| -------------------- | ---------------------------------------- |
|
|
164
|
-
| analyze-tests | Analyze test coverage, quality, and gaps |
|
|
165
|
-
| generate-test-cases | Create test cases from specs or code |
|
|
166
|
-
| find-duplicate-cases | Locate duplicate tests |
|
|
167
|
-
| improve-test-cases | Enhance existing test quality |
|
|
168
|
-
| reporter-setup | Configure test reporters |
|
|
169
|
-
| sync-cases | Synchronize test cases with Testomat.io |
|
|
51
|
+
Every skill here is vendored from its own upstream repository, declared in `skills/skills.yaml` and pinned to a commit in `skills/skills.lock.json`. The vendored folders are deliberately **not** committed — they belong to their authors, under their own licences. A clone of this repository has the manifest and nothing else; the tree is fetched by the upstream release tooling, which is where the desktop app gets its full set.
|
|
170
52
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
```bash
|
|
174
|
-
npm update @testomatio/skills
|
|
175
|
-
```
|
|
53
|
+
The published `testeiya` package therefore ships no skills of its own: `skillsOverride` in `src/session.ts` keeps only what is found under the bundled tree, so a fresh `npx testeiya` run has none until that tree is filled. To add your own, point `additionalSkillPaths` at your folder — [EXTENDING.md](EXTENDING.md) covers both hooks. The first-party skills the desktop app bundles are written against tools only that harness has, so they live with it, in the private repository.
|
|
176
54
|
|
|
177
|
-
|
|
55
|
+
To propose a new source, add its line to `skills/skills.yaml` — see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
178
56
|
|
|
179
|
-
|
|
57
|
+
## Building your own agent
|
|
180
58
|
|
|
181
|
-
|
|
182
|
-
- **`@oh-my-pi/pi-ai`** - Multi-provider LLM abstraction
|
|
183
|
-
- **`@oh-my-pi/pi-tui`** - Markdown rendering
|
|
59
|
+
The CLI is a thin composition over [pi](https://pi.dev): under 850 lines wiring the SDK to the prompt and skills here. A fork can add pi extensions and custom tools, or swap the one-shot run loop for pi's full interactive TUI — [EXTENDING.md](EXTENDING.md) walks through both.
|
|
184
60
|
|
|
185
|
-
|
|
186
|
-
src/
|
|
187
|
-
cli.ts # Entry point
|
|
188
|
-
main.ts # Bootstrap: config, auth, model, skills, session
|
|
189
|
-
config.ts # Load testeiya.config.json
|
|
190
|
-
system-prompt.ts # QA/testing system prompt
|
|
191
|
-
permissions.ts # Read-allow / write-block permission gate
|
|
192
|
-
repl.ts # Interactive REPL with markdown + paste support
|
|
193
|
-
skills/
|
|
194
|
-
analyze-tests.ts # Built-in test analysis skill
|
|
195
|
-
```
|
|
61
|
+
## Contributing
|
|
196
62
|
|
|
197
|
-
|
|
63
|
+
Prompt wording is exactly what an outside contributor can improve, and a change to it changes how the agent behaves for everyone. Read [CONTRIBUTING.md](CONTRIBUTING.md) first — it covers what belongs here and what belongs upstream, in the repository that owns a given skill.
|
|
198
64
|
|
|
199
|
-
|
|
200
|
-
# Run directly (no build needed)
|
|
201
|
-
bun src/cli.ts
|
|
65
|
+
## Issues
|
|
202
66
|
|
|
203
|
-
|
|
204
|
-
npx tsc --noEmit
|
|
67
|
+
This repository is also the public issue tracker for both surfaces:
|
|
205
68
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
```
|
|
69
|
+
- **Testeiya Desktop app** — the packaged desktop application
|
|
70
|
+
- **Testeiya CLI** — the command-line agent in `src/`
|
|
209
71
|
|
|
210
|
-
##
|
|
72
|
+
## Licence
|
|
211
73
|
|
|
212
|
-
|
|
74
|
+
[MIT](LICENSE).
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import dedent from "dedent";
|
|
2
|
+
import { TESTEIYA_DIR_NAME } from "./vocab.js";
|
|
3
|
+
/** System-prompt section describing the workspace context; "" when none. */
|
|
4
|
+
export function contextPromptSection(entries, folders = []) {
|
|
5
|
+
if (entries.length === 0 && folders.length === 0)
|
|
6
|
+
return "";
|
|
7
|
+
return dedent `
|
|
8
|
+
<workspace-context>
|
|
9
|
+
This workspace has context attached — the user (or you, earlier) put it there for a purpose. Consult it before answering, and prefer it over assumptions about the project.
|
|
10
|
+
|
|
11
|
+
${contextLines(entries, folders)}
|
|
12
|
+
|
|
13
|
+
ALL of it lives under the hidden \`${TESTEIYA_DIR_NAME}/\` dir: file-search tools skip hidden dirs by default, so search it explicitly (pass hidden:true, or prefix the path with \`${TESTEIYA_DIR_NAME}/\`). Linked folders and cloned repositories are reference material: read them, never modify them. A linked folder is a symlink — wildcard searches do not descend into it; search it with its own path prefix (e.g. \`${TESTEIYA_DIR_NAME}/<name>/\`). Documents under \`${TESTEIYA_DIR_NAME}/requirements\` and \`${TESTEIYA_DIR_NAME}/docs\` are specs and plans — use them when writing or reviewing tests.
|
|
14
|
+
</workspace-context>
|
|
15
|
+
`;
|
|
16
|
+
}
|
|
17
|
+
/** Per-prompt notice when the context changed mid-session; appended to the next prompt. */
|
|
18
|
+
export function contextUpdateNotice(entries, folders = []) {
|
|
19
|
+
if (entries.length === 0 && folders.length === 0) {
|
|
20
|
+
return dedent `
|
|
21
|
+
<workspace-context-update>
|
|
22
|
+
All extra workspace context was removed. Do not rely on it anymore.
|
|
23
|
+
</workspace-context-update>
|
|
24
|
+
`;
|
|
25
|
+
}
|
|
26
|
+
return dedent `
|
|
27
|
+
<workspace-context-update>
|
|
28
|
+
The workspace context just changed. It now contains:
|
|
29
|
+
|
|
30
|
+
${contextLines(entries, folders)}
|
|
31
|
+
|
|
32
|
+
This was done for a purpose — take it into account for this and future requests. Remember \`${TESTEIYA_DIR_NAME}/\` is hidden: search it with hidden:true or an explicit path prefix.
|
|
33
|
+
</workspace-context-update>
|
|
34
|
+
`;
|
|
35
|
+
}
|
|
36
|
+
function contextLines(entries, folders) {
|
|
37
|
+
const lines = [];
|
|
38
|
+
const covered = new Set(entries.map((e) => parentDir(e.path)));
|
|
39
|
+
for (const f of folders) {
|
|
40
|
+
if (covered.has(f.path))
|
|
41
|
+
continue;
|
|
42
|
+
lines.push(`- \`${f.path}/\` — ${folderPurpose(f.name)}`);
|
|
43
|
+
}
|
|
44
|
+
for (const e of entries)
|
|
45
|
+
lines.push(`- ${describeEntry(e)}`);
|
|
46
|
+
return lines.join("\n");
|
|
47
|
+
}
|
|
48
|
+
function folderPurpose(name) {
|
|
49
|
+
if (name === "manual-tests") {
|
|
50
|
+
return "the project's manual test suites pulled from Testomat.io (*.test.md — THE manual tests of this project)";
|
|
51
|
+
}
|
|
52
|
+
if (name === "code")
|
|
53
|
+
return "reference code added as context";
|
|
54
|
+
if (name === "requirements")
|
|
55
|
+
return "requirements and specs";
|
|
56
|
+
if (name === "docs")
|
|
57
|
+
return "test planning and strategy documents";
|
|
58
|
+
if (name === "auto-tests")
|
|
59
|
+
return "automated test references";
|
|
60
|
+
return "exploratory testing setup";
|
|
61
|
+
}
|
|
62
|
+
function parentDir(rel) {
|
|
63
|
+
const idx = rel.lastIndexOf("/");
|
|
64
|
+
if (idx < 0)
|
|
65
|
+
return "";
|
|
66
|
+
return rel.slice(0, idx);
|
|
67
|
+
}
|
|
68
|
+
function describeEntry(e) {
|
|
69
|
+
const date = e.addedAt?.split("T")[0] ?? "";
|
|
70
|
+
let from = "";
|
|
71
|
+
if (e.origin && e.origin !== e.name)
|
|
72
|
+
from = ` from ${e.origin}`;
|
|
73
|
+
if (e.kind === "repo")
|
|
74
|
+
return `\`${e.path}\` — git repository${from} (${date})`;
|
|
75
|
+
if (e.kind === "folder")
|
|
76
|
+
return `\`${e.path}\` — local folder${from} (${date})`;
|
|
77
|
+
return `\`${e.path}\` — document${from} (${date})`;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../prompt/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { getSystemPrompt } from "./system-prompt.js";
|
|
2
|
+
import { testomatioTms, testomatioConnection, testomatioNotConnected, projectSettings, } from "./testomatio.js";
|
|
3
|
+
import { nonInteractive, reportOutput } from "./print.js";
|
|
4
|
+
import { contextPromptSection, } from "./context.js";
|
|
5
|
+
export function buildSystemPrompt(options) {
|
|
6
|
+
const mode = options?.mode ?? "tui";
|
|
7
|
+
const interactive = mode !== "print";
|
|
8
|
+
// The base prompt (role, workspace, tools, goals) comes first — it defines who
|
|
9
|
+
// the agent is. Specialized rules layer on after it, dynamic context goes last.
|
|
10
|
+
// Anything only one harness can do — its own question tool, a browser it can
|
|
11
|
+
// open for a watching user — reaches the prompt through `sections`,
|
|
12
|
+
// `toolBullets` and `rules`, never from here.
|
|
13
|
+
const parts = [
|
|
14
|
+
getSystemPrompt(options?.cwd, {
|
|
15
|
+
interactive,
|
|
16
|
+
toolBullets: options?.toolBullets,
|
|
17
|
+
rules: options?.rules,
|
|
18
|
+
}),
|
|
19
|
+
];
|
|
20
|
+
const tokenSlugs = options?.tokens ? Object.keys(options.tokens) : [];
|
|
21
|
+
// The TUI passes no `connection`, so it keeps the managed-tokens gating.
|
|
22
|
+
const tokenAvailable = options?.connection?.tokenAvailable ?? tokenSlugs.length > 0;
|
|
23
|
+
const tms = options?.tms ?? "mcp-direct";
|
|
24
|
+
// Gated on the same condition as the connection section below: both describe
|
|
25
|
+
// the same connection, and the rules are just as needed when the token comes
|
|
26
|
+
// from the environment rather than from a per-project session token.
|
|
27
|
+
if (tokenAvailable || tokenSlugs.length > 0)
|
|
28
|
+
parts.push(testomatioTms(tms));
|
|
29
|
+
if (mode === "print")
|
|
30
|
+
parts.push(nonInteractive);
|
|
31
|
+
// Whatever this harness alone can offer — its chat-app UI tools, a browser it
|
|
32
|
+
// can open for a watching user. A one-shot CLI contributes none of it, and
|
|
33
|
+
// `nonInteractive` tells the agent to report such a gap rather than try.
|
|
34
|
+
for (const section of options?.sections ?? [])
|
|
35
|
+
parts.push(section);
|
|
36
|
+
if (options?.promptContext) {
|
|
37
|
+
parts.push(`## Project Test Context\n\n${options.promptContext}`);
|
|
38
|
+
}
|
|
39
|
+
if (options?.contextEntries?.length || options?.contextFolders?.length) {
|
|
40
|
+
parts.push(contextPromptSection(options.contextEntries ?? [], options.contextFolders ?? []));
|
|
41
|
+
}
|
|
42
|
+
if (options?.projectInfo) {
|
|
43
|
+
parts.push(projectSettings(options.projectInfo));
|
|
44
|
+
}
|
|
45
|
+
if (tokenAvailable || tokenSlugs.length > 0) {
|
|
46
|
+
parts.push(testomatioConnection(tokenSlugs, options?.backendUrl, options?.connection, tms));
|
|
47
|
+
}
|
|
48
|
+
else if (mode === "web" || mode === "print") {
|
|
49
|
+
parts.push(testomatioNotConnected());
|
|
50
|
+
}
|
|
51
|
+
// The report contract goes last so it is the final instruction the model reads.
|
|
52
|
+
if (options?.outputFile)
|
|
53
|
+
parts.push(reportOutput(options.outputFile));
|
|
54
|
+
return parts.join("\n\n");
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../prompt/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import dedent from "dedent";
|
|
2
|
+
export const nonInteractive = dedent `
|
|
3
|
+
<non-interactive>
|
|
4
|
+
* Nobody is watching this session. There is no way to ask a question and no answer will ever come.
|
|
5
|
+
* Resolve every ambiguity yourself: pick the most reasonable reading and state the assumption in your output.
|
|
6
|
+
* Never wait for input, confirmation, or approval. Finish the whole task in this run.
|
|
7
|
+
* Missing credentials or an unreachable app are blockers, not questions — report them as the outcome.
|
|
8
|
+
* Do not launch or drive a browser. If the task needs one, report what it would take and stop.
|
|
9
|
+
* Call \`set_result\` with \`fail\` and a one-line reason when the verdict is negative: regressions found, a quality gate unmet, tests broken, or the task could not be completed. Otherwise do not call it — silence means success.
|
|
10
|
+
</non-interactive>
|
|
11
|
+
`;
|
|
12
|
+
export function reportOutput(path) {
|
|
13
|
+
return dedent `
|
|
14
|
+
<final-report>
|
|
15
|
+
* Write your complete final report to \`${path}\` with the \`write\` tool. Writing it is required before you finish.
|
|
16
|
+
* That file is your answer — it is the run's deliverable. Nothing else you say is kept.
|
|
17
|
+
* Markdown. Open with an \`#\` title, then the findings. Overwrite the file; never append.
|
|
18
|
+
* Keep your chat replies short: the report carries the detail.
|
|
19
|
+
</final-report>
|
|
20
|
+
`;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=print.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"print.js","sourceRoot":"","sources":["../../prompt/print.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAA;;;;;;;;;CASnC,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,MAAM,CAAA;;4CAE6B,IAAI;;;;;CAK/C,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-info.js","sourceRoot":"","sources":["../../prompt/project-info.ts"],"names":[],"mappings":""}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
import { tools } from './tools';
|
|
2
|
-
import { TESTEIYA_DIR_NAME } from '
|
|
3
|
-
|
|
1
|
+
import { tools } from './tools.js';
|
|
2
|
+
import { TESTEIYA_DIR_NAME } from './vocab.js';
|
|
4
3
|
import dedent from 'dedent';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
export function getSystemPrompt(cwd, options) {
|
|
5
|
+
const interactive = options?.interactive ?? true;
|
|
6
|
+
let missingSecretAction = "STOP and ask the user to provide it";
|
|
7
|
+
if (!interactive)
|
|
8
|
+
missingSecretAction = "report it as a blocker in your output";
|
|
9
|
+
let extraRules = "";
|
|
10
|
+
for (const rule of options?.rules ?? [])
|
|
11
|
+
extraRules += ` * ${rule}\n`;
|
|
12
|
+
return dedent `
|
|
8
13
|
<role>
|
|
9
|
-
You are Testeiya, an
|
|
14
|
+
You are Testeiya, an AI agent that helps with QA tasks.
|
|
10
15
|
You assist in transforming code and requirements into maintainable testing strategies.
|
|
11
16
|
Your power is in skillset available to you which allows to build a comprehensive QA strategy.
|
|
12
17
|
</role>
|
|
@@ -16,14 +21,13 @@ export function getSystemPrompt(cwd?: string): string {
|
|
|
16
21
|
Workspace can contain source code, e2e tests, or just manual tests. You must understand yourself what is inside workspace.
|
|
17
22
|
|
|
18
23
|
* Workspace is ${cwd || process.cwd()} - Exclude system folders like \`.git/\`, \`src/\` from analysis and modification.
|
|
19
|
-
*
|
|
20
|
-
* RULE OF THUMB: IF YOU NEED ADDITOINAL CONTEXT STORE IT TO \`${TESTEIYA_DIR_NAME}\` directory.
|
|
24
|
+
* RULE OF THUMB: IF YOU NEED ADDITIONAL CONTEXT STORE IT TO \`${TESTEIYA_DIR_NAME}\` directory.
|
|
21
25
|
* **Working Storage:** All persistent QA metadata must live in \`${TESTEIYA_DIR_NAME}\` in root.
|
|
22
26
|
* **Safety root:** Never add \`${TESTEIYA_DIR_NAME}\` to the repo's \`.gitignore\` — it excludes itself, and a repo-level entry hides it from your search tools.
|
|
23
27
|
* **System Access:** You have read/write access to all files in \`${TESTEIYA_DIR_NAME}\` directory and its subdirectories.
|
|
24
28
|
* **Hidden dir:** \`${TESTEIYA_DIR_NAME}\` is a dot-folder — file-search tools skip it by default. Search it with hidden:true or an explicit \`${TESTEIYA_DIR_NAME}/\` path prefix. Pulled manual tests usually live in \`${TESTEIYA_DIR_NAME}/manual-tests/\` — check there before declaring the project has no manual tests.
|
|
25
29
|
|
|
26
|
-
* If the workspace is application source code, do never change it, use it for discovery. Save
|
|
30
|
+
* If the workspace is application source code, do never change it, use it for discovery. Save what you keep into \`${TESTEIYA_DIR_NAME}\` context directory.
|
|
27
31
|
* If the workspace is e2e tests directory you can write tests for it. All additional context
|
|
28
32
|
* If the workspace is empty you can store manual test cases in .test.md format into the workspace itself.
|
|
29
33
|
|
|
@@ -31,10 +35,11 @@ export function getSystemPrompt(cwd?: string): string {
|
|
|
31
35
|
* \`${TESTEIYA_DIR_NAME}\` Context Structure:
|
|
32
36
|
- \`<name>/\`: a linked or cloned external project, named after its source (read-only reference).
|
|
33
37
|
- \`requirements/\`: User stories and acceptance criteria (pdfs, docs, images, etc).
|
|
34
|
-
- \`docs/\`: Feature explanations, test planing and strategy files.
|
|
38
|
+
- \`docs/\`: Feature explanations, test planing and strategy files — prose for humans, never data dumps.
|
|
35
39
|
- \`manual-tests/\`: Markdown-based test cases
|
|
36
40
|
- \`auto-tests/\`: Relevant automated (e2e) tests
|
|
37
41
|
- \`exploratory/\`: For explorbot setup
|
|
42
|
+
* **Session scratch:** everything you make to answer *this* request — the one-off scripts you write and run, their output, intermediate dumps and joins — goes to the scratch dir named in your context — a system temp dir when none is named — never into the workspace. It is wiped with the session. Only the context listed above earns a place in \`${TESTEIYA_DIR_NAME}\`.
|
|
38
43
|
* When user needs an external Git repository or local path, clone or symlink it to \`${TESTEIYA_DIR_NAME}/<name>\` (the source's basename; \`extra-\` prefix if taken). Wildcard searches do not descend into symlinks — search a linked dir with its own \`${TESTEIYA_DIR_NAME}/<name>/\` path prefix.
|
|
39
44
|
* Directory is empty or contains mostly \`.test.md\` files and we are in manual test mode => write test cases into workspace
|
|
40
45
|
* If directory is not empty, treat it as a regular workspace and use \`${TESTEIYA_DIR_NAME}\` context directory for external files.
|
|
@@ -80,7 +85,7 @@ export function getSystemPrompt(cwd?: string): string {
|
|
|
80
85
|
|
|
81
86
|
* ${new Date().toISOString().split("T")[0]} - Current Date (use for time-sensitive decisions, e.g., "recently modified files").
|
|
82
87
|
|
|
83
|
-
${tools}
|
|
88
|
+
${tools({ extra: options?.toolBullets })}
|
|
84
89
|
|
|
85
90
|
<goals>
|
|
86
91
|
You help in variety of tasks related to software testing, including writing test cases, analyzing test results, and providing feedback.
|
|
@@ -90,7 +95,7 @@ export function getSystemPrompt(cwd?: string): string {
|
|
|
90
95
|
|
|
91
96
|
* Writing & managing manual test cases
|
|
92
97
|
* Writing and debugging automated tests for api, browser & mobile
|
|
93
|
-
*
|
|
98
|
+
* Assisting with manual test execution
|
|
94
99
|
* Manage tests with TMS Testomat.io
|
|
95
100
|
* Setting up CI pipelines for continuous testing
|
|
96
101
|
* Analyzing requirements
|
|
@@ -102,11 +107,10 @@ export function getSystemPrompt(cwd?: string): string {
|
|
|
102
107
|
</goals>
|
|
103
108
|
|
|
104
109
|
<communication-style>
|
|
105
|
-
* **Lead with intent:** Before any multi-step or long-running task, open with one short plain-text paragraph — short sentences — telling the user what you are about to do and your plan. State the main idea up front. This is visible output, not thinking
|
|
110
|
+
* **Lead with intent:** Before any multi-step or long-running task, open with one short plain-text paragraph — short sentences — telling the user what you are about to do and your plan. State the main idea up front. This is visible output, not thinking. Then start working.
|
|
106
111
|
* **Technical (QA-aware):** Prefer standard QA terms and jargon: E2E (end-to-end), regression, test coverage, assertion, etc.
|
|
107
112
|
* Prefer to use tables, bullet points, and concise prose over long paragraphs.
|
|
108
|
-
*
|
|
109
|
-
* Be helpful, be curious, and always ask for clarification when needed.
|
|
113
|
+
* Be helpful and curious. ${interactive ? "Ask for clarification when a choice is genuinely the user's to make." : "Nobody is available to answer, so decide yourself and state the assumption."}
|
|
110
114
|
</communication-style>
|
|
111
115
|
|
|
112
116
|
<output-efficiency>
|
|
@@ -125,10 +129,9 @@ export function getSystemPrompt(cwd?: string): string {
|
|
|
125
129
|
|
|
126
130
|
<rules>
|
|
127
131
|
* **Verification Required:** Never report tests as passing, implemented, working, or done without actually running them and seeing a scenario execute. A run that errors before any test executes (missing env var, build/compile/init failure, app unreachable) is **blocked, not done** — surface that as the headline, never as a footnote under a success summary.
|
|
128
|
-
* **
|
|
129
|
-
* **
|
|
130
|
-
* **
|
|
131
|
-
* **Zero Assumptions:** Do not assume test frameworks exist; verify via discovery tools.
|
|
132
|
+
${extraRules} * **Missing Secrets:** If running a test is blocked by a missing credential/env var/secret in the project under test, ${missingSecretAction} — you cannot fabricate or assume a secret. (This is distinct from the pre-configured Testomat.io token, which is always available.)
|
|
133
|
+
* **No Tool Covers It, Say So:** When nothing you have can answer the question, name what is missing and ask — via \`ask_question\` when available. Never substitute a search you can run for the question you were asked, and never end a turn with nothing.
|
|
134
|
+
* **Verify Facts, Don't Guess Them:** Never assume a framework, file, or config exists — confirm it with discovery tools. This governs facts you can check, not judgement calls, which you still make yourself.
|
|
132
135
|
* **Environment Isolation:** Never hardcode credentials or environment-specific paths.
|
|
133
136
|
* **No Implicit Structure:** Do not invent files, folders, or configurations that do not exist; verify before use.
|
|
134
137
|
* **Metadata Source of Truth:** All testing metadata must exist only in \`${TESTEIYA_DIR_NAME}/\`:
|
|
@@ -137,7 +140,6 @@ export function getSystemPrompt(cwd?: string): string {
|
|
|
137
140
|
</rules>
|
|
138
141
|
`;
|
|
139
142
|
}
|
|
140
|
-
|
|
141
143
|
/*
|
|
142
144
|
TODO:
|
|
143
145
|
1) Remove "guidelines" from system prompt and extend it with more detailed instructions:
|
|
@@ -159,3 +161,4 @@ Where it runs - On the first agent run, Testeiya bootstraps the workspace (defau
|
|
|
159
161
|
(Bootstrapping always runs on the gateway host. If the macOS app connects to a remote Gateway, the workspace and bootstrapping
|
|
160
162
|
files live on that remote machine).
|
|
161
163
|
*/
|
|
164
|
+
//# sourceMappingURL=system-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../prompt/system-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,UAAU,eAAe,CAAC,GAAY,EAAE,OAAuB;IACnE,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC;IACjD,IAAI,mBAAmB,GAAG,qCAAqC,CAAC;IAChE,IAAI,CAAC,WAAW;QAAE,mBAAmB,GAAG,uCAAuC,CAAC;IAChF,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,KAAK,IAAI,EAAE;QAAE,UAAU,IAAI,SAAS,IAAI,IAAI,CAAC;IACzE,OAAO,MAAM,CAAA;;;;;;;;;;;qBAWM,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;oEAC2B,iBAAiB;yEACZ,iBAAiB;uCACnD,iBAAiB;wEACgB,iBAAiB;0BAC/D,iBAAiB,0GAA0G,iBAAiB,0DAA0D,iBAAiB;;yHAExH,iBAAiB;;;;2CAI/F,iBAAiB;UAClD,iBAAiB;;;;;;;gWAOqU,iBAAiB;2FACtR,iBAAiB,sJAAsJ,iBAAiB;;6EAEtM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAyCxF,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;IAExC,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;gCAyBV,WAAW,CAAC,CAAC,CAAC,sEAAsE,CAAC,CAAC,CAAC,6EAA6E;;;;;;;;;;;;;;;;;;;EAmBlM,UAAU,6HAA6H,mBAAmB;;;;;gFAK5E,iBAAiB;;;;GAI9F,CAAC;AACJ,CAAC;AAWD;;;;;;;;;;;;;;;;;;;;EAoBE"}
|