qa360 2.2.1 → 2.2.13
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/CHANGELOG.md +28 -0
- package/README.md +79 -0
- package/cli/dist/cli-minimal.d.ts +6 -0
- package/cli/dist/cli-minimal.js +36 -0
- package/cli/dist/commands/ai.d.ts +43 -0
- package/cli/dist/commands/ai.js +616 -0
- package/cli/dist/commands/ask.d.ts +94 -0
- package/cli/dist/commands/ask.js +582 -0
- package/cli/dist/commands/coverage.d.ts +8 -0
- package/cli/dist/commands/coverage.js +252 -0
- package/cli/dist/commands/crawl.d.ts +24 -0
- package/cli/dist/commands/crawl.js +121 -0
- package/cli/dist/commands/doctor.d.ts +54 -0
- package/cli/dist/commands/doctor.js +513 -0
- package/cli/dist/commands/examples.d.ts +33 -0
- package/cli/dist/commands/examples.js +193 -0
- package/cli/dist/commands/explain.d.ts +27 -0
- package/cli/dist/commands/explain.js +630 -0
- package/cli/dist/commands/flakiness.d.ts +73 -0
- package/cli/dist/commands/flakiness.js +435 -0
- package/cli/dist/commands/generate.d.ts +66 -0
- package/cli/dist/commands/generate.js +438 -0
- package/cli/dist/commands/history.d.ts +76 -0
- package/cli/dist/commands/history.js +755 -0
- package/cli/dist/commands/init.d.ts +106 -0
- package/cli/dist/commands/init.js +616 -0
- package/cli/dist/commands/monitor.d.ts +27 -0
- package/cli/dist/commands/monitor.js +225 -0
- package/cli/dist/commands/ollama.d.ts +40 -0
- package/cli/dist/commands/ollama.js +346 -0
- package/cli/dist/commands/pack.d.ts +70 -0
- package/cli/dist/commands/pack.js +413 -0
- package/cli/dist/commands/regression.d.ts +8 -0
- package/cli/dist/commands/regression.js +340 -0
- package/cli/dist/commands/repair.d.ts +26 -0
- package/cli/dist/commands/repair.js +307 -0
- package/cli/dist/commands/report.d.ts +62 -0
- package/cli/dist/commands/report.js +378 -0
- package/cli/dist/commands/retry.d.ts +43 -0
- package/cli/dist/commands/retry.js +275 -0
- package/cli/dist/commands/run.d.ts +41 -0
- package/cli/dist/commands/run.js +171 -0
- package/cli/dist/commands/scan.d.ts +5 -0
- package/cli/dist/commands/scan.js +155 -0
- package/cli/dist/commands/secrets.d.ts +58 -0
- package/cli/dist/commands/secrets.js +289 -0
- package/cli/dist/commands/serve.d.ts +13 -0
- package/cli/dist/commands/serve.js +156 -0
- package/cli/dist/commands/slo.d.ts +8 -0
- package/cli/dist/commands/slo.js +327 -0
- package/cli/dist/commands/verify.d.ts +32 -0
- package/cli/dist/commands/verify.js +278 -0
- package/cli/dist/core/adapters/gitleaks-secrets.d.ts +114 -0
- package/cli/dist/core/adapters/gitleaks-secrets.js +410 -0
- package/cli/dist/core/adapters/jest-adapter.d.ts +44 -0
- package/cli/dist/core/adapters/jest-adapter.js +261 -0
- package/cli/dist/core/adapters/k6-perf.d.ts +85 -0
- package/cli/dist/core/adapters/k6-perf.js +398 -0
- package/cli/dist/core/adapters/osv-deps.d.ts +123 -0
- package/cli/dist/core/adapters/osv-deps.js +372 -0
- package/cli/dist/core/adapters/playwright-native-adapter.d.ts +121 -0
- package/cli/dist/core/adapters/playwright-native-adapter.js +339 -0
- package/cli/dist/core/adapters/playwright-native-api.d.ts +183 -0
- package/cli/dist/core/adapters/playwright-native-api.js +465 -0
- package/cli/dist/core/adapters/playwright-ui.d.ts +197 -0
- package/cli/dist/core/adapters/playwright-ui.js +864 -0
- package/cli/dist/core/adapters/pytest-adapter.d.ts +49 -0
- package/cli/dist/core/adapters/pytest-adapter.js +324 -0
- package/cli/dist/core/adapters/semgrep-sast.d.ts +99 -0
- package/cli/dist/core/adapters/semgrep-sast.js +322 -0
- package/cli/dist/core/adapters/unit-test-types.d.ts +119 -0
- package/cli/dist/core/adapters/unit-test-types.js +6 -0
- package/cli/dist/core/adapters/vitest-adapter.d.ts +46 -0
- package/cli/dist/core/adapters/vitest-adapter.js +272 -0
- package/cli/dist/core/adapters/zap-dast.d.ts +133 -0
- package/cli/dist/core/adapters/zap-dast.js +424 -0
- package/cli/dist/core/ai/anthropic-provider.d.ts +50 -0
- package/cli/dist/core/ai/anthropic-provider.js +223 -0
- package/cli/dist/core/ai/deepseek-provider.d.ts +81 -0
- package/cli/dist/core/ai/deepseek-provider.js +266 -0
- package/cli/dist/core/ai/index.d.ts +60 -0
- package/cli/dist/core/ai/index.js +18 -0
- package/cli/dist/core/ai/llm-client.d.ts +45 -0
- package/cli/dist/core/ai/llm-client.js +7 -0
- package/cli/dist/core/ai/mock-provider.d.ts +49 -0
- package/cli/dist/core/ai/mock-provider.js +121 -0
- package/cli/dist/core/ai/ollama-provider.d.ts +78 -0
- package/cli/dist/core/ai/ollama-provider.js +216 -0
- package/cli/dist/core/ai/openai-provider.d.ts +48 -0
- package/cli/dist/core/ai/openai-provider.js +200 -0
- package/cli/dist/core/ai/provider-factory.d.ts +160 -0
- package/cli/dist/core/ai/provider-factory.js +269 -0
- package/cli/dist/core/artifacts/index.d.ts +6 -0
- package/cli/dist/core/artifacts/index.js +6 -0
- package/cli/dist/core/artifacts/ui-artifacts.d.ts +133 -0
- package/cli/dist/core/artifacts/ui-artifacts.js +304 -0
- package/cli/dist/core/assertions/engine.d.ts +51 -0
- package/cli/dist/core/assertions/engine.js +530 -0
- package/cli/dist/core/assertions/index.d.ts +11 -0
- package/cli/dist/core/assertions/index.js +11 -0
- package/cli/dist/core/assertions/types.d.ts +121 -0
- package/cli/dist/core/assertions/types.js +37 -0
- package/cli/dist/core/auth/api-key-provider.d.ts +16 -0
- package/cli/dist/core/auth/api-key-provider.js +63 -0
- package/cli/dist/core/auth/aws-iam-provider.d.ts +35 -0
- package/cli/dist/core/auth/aws-iam-provider.js +177 -0
- package/cli/dist/core/auth/azure-ad-provider.d.ts +15 -0
- package/cli/dist/core/auth/azure-ad-provider.js +99 -0
- package/cli/dist/core/auth/basic-auth-provider.d.ts +26 -0
- package/cli/dist/core/auth/basic-auth-provider.js +111 -0
- package/cli/dist/core/auth/gcp-adc-provider.d.ts +27 -0
- package/cli/dist/core/auth/gcp-adc-provider.js +126 -0
- package/cli/dist/core/auth/index.d.ts +238 -0
- package/cli/dist/core/auth/index.js +82 -0
- package/cli/dist/core/auth/jwt-provider.d.ts +19 -0
- package/cli/dist/core/auth/jwt-provider.js +160 -0
- package/cli/dist/core/auth/manager.d.ts +84 -0
- package/cli/dist/core/auth/manager.js +230 -0
- package/cli/dist/core/auth/oauth2-provider.d.ts +17 -0
- package/cli/dist/core/auth/oauth2-provider.js +114 -0
- package/cli/dist/core/auth/totp-provider.d.ts +31 -0
- package/cli/dist/core/auth/totp-provider.js +134 -0
- package/cli/dist/core/auth/ui-login-provider.d.ts +26 -0
- package/cli/dist/core/auth/ui-login-provider.js +198 -0
- package/cli/dist/core/cache/index.d.ts +7 -0
- package/cli/dist/core/cache/index.js +6 -0
- package/cli/dist/core/cache/lru-cache.d.ts +203 -0
- package/cli/dist/core/cache/lru-cache.js +397 -0
- package/cli/dist/core/coverage/analyzer.d.ts +101 -0
- package/cli/dist/core/coverage/analyzer.js +415 -0
- package/cli/dist/core/coverage/collector.d.ts +74 -0
- package/cli/dist/core/coverage/collector.js +459 -0
- package/cli/dist/core/coverage/config.d.ts +37 -0
- package/cli/dist/core/coverage/config.js +156 -0
- package/cli/dist/core/coverage/index.d.ts +11 -0
- package/cli/dist/core/coverage/index.js +15 -0
- package/cli/dist/core/coverage/types.d.ts +267 -0
- package/cli/dist/core/coverage/types.js +6 -0
- package/cli/dist/core/coverage/vault.d.ts +95 -0
- package/cli/dist/core/coverage/vault.js +405 -0
- package/cli/dist/core/crawler/index.d.ts +57 -0
- package/cli/dist/core/crawler/index.js +281 -0
- package/cli/dist/core/crawler/journey-generator.d.ts +49 -0
- package/cli/dist/core/crawler/journey-generator.js +412 -0
- package/cli/dist/core/crawler/page-analyzer.d.ts +88 -0
- package/cli/dist/core/crawler/page-analyzer.js +709 -0
- package/cli/dist/core/crawler/selector-generator.d.ts +34 -0
- package/cli/dist/core/crawler/selector-generator.js +309 -0
- package/cli/dist/core/crawler/types.d.ts +353 -0
- package/cli/dist/core/crawler/types.js +6 -0
- package/cli/dist/core/dashboard/assets.d.ts +6 -0
- package/cli/dist/core/dashboard/assets.js +690 -0
- package/cli/dist/core/dashboard/index.d.ts +6 -0
- package/cli/dist/core/dashboard/index.js +5 -0
- package/cli/dist/core/dashboard/server.d.ts +72 -0
- package/cli/dist/core/dashboard/server.js +354 -0
- package/cli/dist/core/dashboard/types.d.ts +70 -0
- package/cli/dist/core/dashboard/types.js +5 -0
- package/cli/dist/core/discoverer/index.d.ts +115 -0
- package/cli/dist/core/discoverer/index.js +250 -0
- package/cli/dist/core/fixtures/index.d.ts +8 -0
- package/cli/dist/core/fixtures/index.js +8 -0
- package/cli/dist/core/fixtures/loader.d.ts +65 -0
- package/cli/dist/core/fixtures/loader.js +161 -0
- package/cli/dist/core/fixtures/resolver.d.ts +79 -0
- package/cli/dist/core/fixtures/resolver.js +181 -0
- package/cli/dist/core/fixtures/types.d.ts +75 -0
- package/cli/dist/core/fixtures/types.js +30 -0
- package/cli/dist/core/flakiness/index.d.ts +228 -0
- package/cli/dist/core/flakiness/index.js +384 -0
- package/cli/dist/core/generation/code-formatter.d.ts +111 -0
- package/cli/dist/core/generation/code-formatter.js +307 -0
- package/cli/dist/core/generation/code-generator.d.ts +144 -0
- package/cli/dist/core/generation/code-generator.js +293 -0
- package/cli/dist/core/generation/crawler-pack-generator.d.ts +44 -0
- package/cli/dist/core/generation/crawler-pack-generator.js +245 -0
- package/cli/dist/core/generation/generator.d.ts +40 -0
- package/cli/dist/core/generation/generator.js +76 -0
- package/cli/dist/core/generation/index.d.ts +32 -0
- package/cli/dist/core/generation/index.js +30 -0
- package/cli/dist/core/generation/pack-generator.d.ts +107 -0
- package/cli/dist/core/generation/pack-generator.js +416 -0
- package/cli/dist/core/generation/prompt-builder.d.ts +132 -0
- package/cli/dist/core/generation/prompt-builder.js +672 -0
- package/cli/dist/core/generation/source-analyzer.d.ts +213 -0
- package/cli/dist/core/generation/source-analyzer.js +657 -0
- package/cli/dist/core/generation/test-optimizer.d.ts +117 -0
- package/cli/dist/core/generation/test-optimizer.js +328 -0
- package/cli/dist/core/generation/types.d.ts +214 -0
- package/cli/dist/core/generation/types.js +4 -0
- package/cli/dist/core/hooks/compose.d.ts +61 -0
- package/cli/dist/core/hooks/compose.js +225 -0
- package/cli/dist/core/hooks/runner.d.ts +68 -0
- package/cli/dist/core/hooks/runner.js +303 -0
- package/cli/dist/core/index.d.ts +110 -0
- package/cli/dist/core/index.js +99 -0
- package/cli/dist/core/pack/migrator.d.ts +51 -0
- package/cli/dist/core/pack/migrator.js +304 -0
- package/cli/dist/core/pack/validator.d.ts +42 -0
- package/cli/dist/core/pack/validator.js +330 -0
- package/cli/dist/core/pack-v2/index.d.ts +9 -0
- package/cli/dist/core/pack-v2/index.js +8 -0
- package/cli/dist/core/pack-v2/loader.d.ts +63 -0
- package/cli/dist/core/pack-v2/loader.js +292 -0
- package/cli/dist/core/pack-v2/migrator.d.ts +62 -0
- package/cli/dist/core/pack-v2/migrator.js +505 -0
- package/cli/dist/core/pack-v2/validator.d.ts +65 -0
- package/cli/dist/core/pack-v2/validator.js +629 -0
- package/cli/dist/core/parallel/index.d.ts +6 -0
- package/cli/dist/core/parallel/index.js +6 -0
- package/cli/dist/core/parallel/parallel-runner.d.ts +107 -0
- package/cli/dist/core/parallel/parallel-runner.js +192 -0
- package/cli/dist/core/pom/base-page.d.ts +237 -0
- package/cli/dist/core/pom/base-page.js +354 -0
- package/cli/dist/core/pom/index.d.ts +22 -0
- package/cli/dist/core/pom/index.js +23 -0
- package/cli/dist/core/pom/loader.d.ts +118 -0
- package/cli/dist/core/pom/loader.js +382 -0
- package/cli/dist/core/pom/types.d.ts +112 -0
- package/cli/dist/core/pom/types.js +9 -0
- package/cli/dist/core/proof/bundle.d.ts +137 -0
- package/cli/dist/core/proof/bundle.js +160 -0
- package/cli/dist/core/proof/canonicalize.d.ts +47 -0
- package/cli/dist/core/proof/canonicalize.js +105 -0
- package/cli/dist/core/proof/index.d.ts +13 -0
- package/cli/dist/core/proof/index.js +18 -0
- package/cli/dist/core/proof/schema.d.ts +217 -0
- package/cli/dist/core/proof/schema.js +263 -0
- package/cli/dist/core/proof/signer.d.ts +111 -0
- package/cli/dist/core/proof/signer.js +226 -0
- package/cli/dist/core/proof/verifier.d.ts +97 -0
- package/cli/dist/core/proof/verifier.js +308 -0
- package/cli/dist/core/regression/detector.d.ts +107 -0
- package/cli/dist/core/regression/detector.js +497 -0
- package/cli/dist/core/regression/index.d.ts +9 -0
- package/cli/dist/core/regression/index.js +11 -0
- package/cli/dist/core/regression/trend-analyzer.d.ts +102 -0
- package/cli/dist/core/regression/trend-analyzer.js +345 -0
- package/cli/dist/core/regression/types.d.ts +222 -0
- package/cli/dist/core/regression/types.js +7 -0
- package/cli/dist/core/regression/vault.d.ts +87 -0
- package/cli/dist/core/regression/vault.js +289 -0
- package/cli/dist/core/repair/engine/fixer.d.ts +24 -0
- package/cli/dist/core/repair/engine/fixer.js +226 -0
- package/cli/dist/core/repair/engine/suggestion-engine.d.ts +18 -0
- package/cli/dist/core/repair/engine/suggestion-engine.js +187 -0
- package/cli/dist/core/repair/index.d.ts +10 -0
- package/cli/dist/core/repair/index.js +13 -0
- package/cli/dist/core/repair/repairer.d.ts +90 -0
- package/cli/dist/core/repair/repairer.js +284 -0
- package/cli/dist/core/repair/types.d.ts +91 -0
- package/cli/dist/core/repair/types.js +6 -0
- package/cli/dist/core/repair/utils/error-analyzer.d.ts +28 -0
- package/cli/dist/core/repair/utils/error-analyzer.js +264 -0
- package/cli/dist/core/reporting/html-reporter.d.ts +119 -0
- package/cli/dist/core/reporting/html-reporter.js +737 -0
- package/cli/dist/core/reporting/index.d.ts +6 -0
- package/cli/dist/core/reporting/index.js +6 -0
- package/cli/dist/core/retry/flakiness-integration.d.ts +60 -0
- package/cli/dist/core/retry/flakiness-integration.js +228 -0
- package/cli/dist/core/retry/index.d.ts +14 -0
- package/cli/dist/core/retry/index.js +16 -0
- package/cli/dist/core/retry/retry-engine.d.ts +80 -0
- package/cli/dist/core/retry/retry-engine.js +296 -0
- package/cli/dist/core/retry/types.d.ts +178 -0
- package/cli/dist/core/retry/types.js +52 -0
- package/cli/dist/core/retry/vault.d.ts +77 -0
- package/cli/dist/core/retry/vault.js +304 -0
- package/cli/dist/core/runner/e2e-helpers.d.ts +102 -0
- package/cli/dist/core/runner/e2e-helpers.js +153 -0
- package/cli/dist/core/runner/phase3-runner.d.ts +249 -0
- package/cli/dist/core/runner/phase3-runner.js +1323 -0
- package/cli/dist/core/schemas/pack.schema.json +236 -0
- package/cli/dist/core/secrets/crypto.d.ts +75 -0
- package/cli/dist/core/secrets/crypto.js +223 -0
- package/cli/dist/core/secrets/manager.d.ts +76 -0
- package/cli/dist/core/secrets/manager.js +219 -0
- package/cli/dist/core/security/redaction-patterns-extended.d.ts +27 -0
- package/cli/dist/core/security/redaction-patterns-extended.js +247 -0
- package/cli/dist/core/security/redactor.d.ts +71 -0
- package/cli/dist/core/security/redactor.js +279 -0
- package/cli/dist/core/self-healing/assertion-healer.d.ts +97 -0
- package/cli/dist/core/self-healing/assertion-healer.js +371 -0
- package/cli/dist/core/self-healing/engine.d.ts +122 -0
- package/cli/dist/core/self-healing/engine.js +538 -0
- package/cli/dist/core/self-healing/index.d.ts +10 -0
- package/cli/dist/core/self-healing/index.js +11 -0
- package/cli/dist/core/self-healing/selector-healer.d.ts +103 -0
- package/cli/dist/core/self-healing/selector-healer.js +372 -0
- package/cli/dist/core/self-healing/types.d.ts +152 -0
- package/cli/dist/core/self-healing/types.js +6 -0
- package/cli/dist/core/serve/diagnostics-collector.d.ts +32 -0
- package/cli/dist/core/serve/diagnostics-collector.js +149 -0
- package/cli/dist/core/serve/health-checker.d.ts +44 -0
- package/cli/dist/core/serve/health-checker.js +219 -0
- package/cli/dist/core/serve/index.d.ts +8 -0
- package/cli/dist/core/serve/index.js +8 -0
- package/cli/dist/core/serve/metrics-collector.d.ts +24 -0
- package/cli/dist/core/serve/metrics-collector.js +322 -0
- package/cli/dist/core/serve/process-manager.d.ts +36 -0
- package/cli/dist/core/serve/process-manager.js +213 -0
- package/cli/dist/core/serve/server.d.ts +36 -0
- package/cli/dist/core/serve/server.js +191 -0
- package/cli/dist/core/slo/config.d.ts +107 -0
- package/cli/dist/core/slo/config.js +360 -0
- package/cli/dist/core/slo/index.d.ts +11 -0
- package/cli/dist/core/slo/index.js +15 -0
- package/cli/dist/core/slo/sli-calculator.d.ts +92 -0
- package/cli/dist/core/slo/sli-calculator.js +364 -0
- package/cli/dist/core/slo/slo-tracker.d.ts +148 -0
- package/cli/dist/core/slo/slo-tracker.js +379 -0
- package/cli/dist/core/slo/types.d.ts +281 -0
- package/cli/dist/core/slo/types.js +7 -0
- package/cli/dist/core/slo/vault.d.ts +102 -0
- package/cli/dist/core/slo/vault.js +427 -0
- package/cli/dist/core/tui/index.d.ts +7 -0
- package/cli/dist/core/tui/index.js +6 -0
- package/cli/dist/core/tui/monitor.d.ts +92 -0
- package/cli/dist/core/tui/monitor.js +271 -0
- package/cli/dist/core/tui/renderer.d.ts +33 -0
- package/cli/dist/core/tui/renderer.js +218 -0
- package/cli/dist/core/tui/types.d.ts +63 -0
- package/cli/dist/core/tui/types.js +5 -0
- package/cli/dist/core/types/pack-v1.d.ts +251 -0
- package/cli/dist/core/types/pack-v1.js +5 -0
- package/cli/dist/core/types/pack-v2.d.ts +456 -0
- package/cli/dist/core/types/pack-v2.js +8 -0
- package/cli/dist/core/types/trust-score.d.ts +69 -0
- package/cli/dist/core/types/trust-score.js +191 -0
- package/cli/dist/core/vault/cas.d.ts +90 -0
- package/cli/dist/core/vault/cas.js +261 -0
- package/cli/dist/core/vault/index.d.ts +326 -0
- package/cli/dist/core/vault/index.js +1042 -0
- package/cli/dist/core/visual/index.d.ts +6 -0
- package/cli/dist/core/visual/index.js +6 -0
- package/cli/dist/core/visual/visual-regression.d.ts +113 -0
- package/cli/dist/core/visual/visual-regression.js +236 -0
- package/cli/dist/core/watch/index.d.ts +7 -0
- package/cli/dist/core/watch/index.js +6 -0
- package/cli/dist/core/watch/watch-mode.d.ts +213 -0
- package/cli/dist/core/watch/watch-mode.js +389 -0
- package/cli/dist/generators/index.d.ts +5 -0
- package/cli/dist/generators/index.js +5 -0
- package/cli/dist/generators/json-reporter.d.ts +10 -0
- package/cli/dist/generators/json-reporter.js +12 -0
- package/cli/dist/generators/test-generator.d.ts +18 -0
- package/cli/dist/generators/test-generator.js +78 -0
- package/cli/dist/index.d.ts +8 -0
- package/cli/dist/index.js +262 -0
- package/cli/dist/scanners/dom-scanner.d.ts +52 -0
- package/cli/dist/scanners/dom-scanner.js +296 -0
- package/cli/dist/scanners/index.d.ts +4 -0
- package/cli/dist/scanners/index.js +4 -0
- package/cli/dist/schemas/pack.schema.json +236 -0
- package/cli/dist/types/scan.d.ts +68 -0
- package/cli/dist/types/scan.js +4 -0
- package/cli/dist/utils/config.d.ts +35 -0
- package/cli/dist/utils/config.js +196 -0
- package/cli/package.json +1 -1
- package/package.json +26 -2
- package/.BETA_TESTING_FEEDBACK.md +0 -256
- package/.claude/settings.local.json +0 -154
- package/.editorconfig +0 -21
- package/.github/CODEOWNERS +0 -23
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -108
- package/.github/ISSUE_TEMPLATE/feedback_dx.yml +0 -121
- package/.github/dependabot.yml +0 -35
- package/.github/workflows/mcp-dx.yml +0 -106
- package/.github/workflows/release.yml +0 -26
- package/.github/workflows/test.yml +0 -93
- package/.nvmrc +0 -1
- package/.qa360/vault.db +0 -0
- package/.qa360/vault.db-shm +0 -0
- package/.qa360/vault.db-wal +0 -0
- package/.qa360-artifacts/.gitkeep +0 -0
- package/.qa360-artifacts/baselines/.gitkeep +0 -0
- package/.qa360-artifacts/cache/.gitkeep +0 -0
- package/.qa360-artifacts/reports/.gitkeep +0 -0
- package/.qa360-artifacts/screenshots/.gitkeep +0 -0
- package/.qa360-baselines/www_xyqo_ai.baseline.json +0 -33
- package/CODEOWNERS +0 -43
- package/NOVICE_USER_GUIDE.md +0 -272
- package/adapters/README.md +0 -46
- package/check-branches.sh +0 -32
- package/cli/.qa360/keys/ed25519.key +0 -1
- package/cli/.qa360/keys/ed25519.pub +0 -1
- package/cli/examples/README.md +0 -160
- package/cli/examples/accessibility.yml +0 -48
- package/cli/examples/api-basic.yml +0 -27
- package/cli/examples/complete.yml +0 -146
- package/cli/examples/crawler.yml +0 -38
- package/cli/examples/fullstack.yml +0 -78
- package/cli/examples/security.yml +0 -58
- package/cli/examples/ui-advanced.yml +0 -49
- package/cli/examples/ui-basic.yml +0 -24
- package/cli/scripts/bundle-for-npm.sh +0 -51
- package/cli/scripts/validate-package.js +0 -116
- package/cli/src/__tests__/commands/doctor.test.ts +0 -108
- package/cli/src/__tests__/index.test.ts +0 -15
- package/cli/src/cli-minimal.ts +0 -44
- package/cli/src/commands/__tests__/crawl.test.ts +0 -412
- package/cli/src/commands/__tests__/doctor-qa360-home.test.ts +0 -156
- package/cli/src/commands/__tests__/e2e-ui-tests.test.ts +0 -494
- package/cli/src/commands/__tests__/e2e.test.ts +0 -187
- package/cli/src/commands/__tests__/flakiness.test.ts +0 -528
- package/cli/src/commands/__tests__/generate.test.ts +0 -507
- package/cli/src/commands/__tests__/history.integration.test.ts +0 -358
- package/cli/src/commands/__tests__/history.test.ts +0 -433
- package/cli/src/commands/__tests__/monitor-realworld.test.ts +0 -199
- package/cli/src/commands/__tests__/monitor.test.ts +0 -81
- package/cli/src/commands/__tests__/ollama.test.ts +0 -529
- package/cli/src/commands/__tests__/repair.test.ts +0 -225
- package/cli/src/commands/__tests__/report.integration.test.ts +0 -167
- package/cli/src/commands/__tests__/report.test.ts +0 -294
- package/cli/src/commands/__tests__/report.vitest.ts +0 -288
- package/cli/src/commands/__tests__/retry.test.ts +0 -78
- package/cli/src/commands/__tests__/run.integration.test.ts +0 -240
- package/cli/src/commands/__tests__/run.test.ts +0 -346
- package/cli/src/commands/__tests__/run.vitest.ts +0 -301
- package/cli/src/commands/__tests__/secrets.test.ts +0 -114
- package/cli/src/commands/__tests__/serve.test.ts +0 -80
- package/cli/src/commands/__tests__/verify.test.ts +0 -103
- package/cli/src/commands/ai.ts +0 -702
- package/cli/src/commands/ask.ts +0 -678
- package/cli/src/commands/coverage.ts +0 -305
- package/cli/src/commands/crawl.ts +0 -155
- package/cli/src/commands/doctor.ts +0 -610
- package/cli/src/commands/examples.ts +0 -248
- package/cli/src/commands/explain.ts +0 -710
- package/cli/src/commands/flakiness.ts +0 -560
- package/cli/src/commands/generate.ts +0 -566
- package/cli/src/commands/history.ts +0 -914
- package/cli/src/commands/init.ts +0 -777
- package/cli/src/commands/monitor.ts +0 -270
- package/cli/src/commands/ollama.ts +0 -337
- package/cli/src/commands/pack.ts +0 -497
- package/cli/src/commands/regression.ts +0 -400
- package/cli/src/commands/repair.ts +0 -356
- package/cli/src/commands/report.ts +0 -463
- package/cli/src/commands/retry.ts +0 -380
- package/cli/src/commands/run.ts +0 -220
- package/cli/src/commands/scan.ts +0 -177
- package/cli/src/commands/secrets.ts +0 -340
- package/cli/src/commands/serve.ts +0 -194
- package/cli/src/commands/slo.ts +0 -387
- package/cli/src/commands/verify-temp-note.md +0 -11
- package/cli/src/commands/verify.ts +0 -322
- package/cli/src/generators/index.ts +0 -6
- package/cli/src/generators/json-reporter.ts +0 -15
- package/cli/src/generators/test-generator.ts +0 -90
- package/cli/src/index.ts +0 -289
- package/cli/src/scanners/dom-scanner.ts +0 -360
- package/cli/src/scanners/index.ts +0 -5
- package/cli/src/types/scan.ts +0 -84
- package/cli/src/utils/config.ts +0 -145
- package/cli/tsconfig.bundle.json +0 -12
- package/cli/tsconfig.json +0 -23
- package/cli/vitest.config.ts +0 -59
- package/core/src/__tests__/adapters-contract/adapters-contract.test.md +0 -156
- package/core/src/__tests__/index.test.ts +0 -31
- package/core/src/__tests__/integration/phase3.test.ts +0 -405
- package/core/src/__tests__/pack/validator.test.ts +0 -312
- package/core/src/__tests__/secrets/crypto.test.ts +0 -190
- package/core/src/__tests__/secrets/manager.test.ts +0 -316
- package/core/src/__tests__/security/redactor-phase3.test.ts +0 -233
- package/core/src/__tests__/serve/health-checker.test.ts +0 -155
- package/core/src/__tests__/serve/process-manager.test.ts +0 -213
- package/core/src/__tests__/serve/server.test.ts +0 -103
- package/core/src/__tests__/vault/cas.test.ts +0 -178
- package/core/src/__tests__/vault/vault.test.ts +0 -296
- package/core/src/adapters/__tests__/fixtures/jest-coverage.json +0 -8
- package/core/src/adapters/__tests__/fixtures/jest-results.json +0 -41
- package/core/src/adapters/__tests__/fixtures/pytest-junit.xml +0 -16
- package/core/src/adapters/__tests__/fixtures/vitest-coverage.json +0 -8
- package/core/src/adapters/__tests__/fixtures/vitest-results.json +0 -50
- package/core/src/adapters/__tests__/gitleaks-secrets.test.ts +0 -452
- package/core/src/adapters/__tests__/jest-adapter.test.ts +0 -276
- package/core/src/adapters/__tests__/k6-perf.test.ts +0 -538
- package/core/src/adapters/__tests__/osv-deps.test.ts +0 -471
- package/core/src/adapters/__tests__/playwright-native-api.test.ts +0 -792
- package/core/src/adapters/__tests__/playwright-ui-e2e.test.ts +0 -431
- package/core/src/adapters/__tests__/playwright-ui.test.ts +0 -1073
- package/core/src/adapters/__tests__/pytest-adapter.test.ts +0 -207
- package/core/src/adapters/__tests__/semgrep-sast.test.ts +0 -436
- package/core/src/adapters/__tests__/vitest-adapter.test.ts +0 -208
- package/core/src/adapters/__tests__/zap-dast.test.ts +0 -453
- package/core/src/adapters/gitleaks-secrets.ts +0 -521
- package/core/src/adapters/jest-adapter.ts +0 -306
- package/core/src/adapters/k6-perf.ts +0 -479
- package/core/src/adapters/osv-deps.ts +0 -467
- package/core/src/adapters/playwright-native-adapter.ts +0 -472
- package/core/src/adapters/playwright-native-api.ts +0 -619
- package/core/src/adapters/playwright-ui.ts +0 -1088
- package/core/src/adapters/pytest-adapter.ts +0 -472
- package/core/src/adapters/semgrep-sast.ts +0 -410
- package/core/src/adapters/unit-test-types.ts +0 -106
- package/core/src/adapters/vitest-adapter.ts +0 -295
- package/core/src/adapters/zap-dast.ts +0 -551
- package/core/src/ai/__tests__/deepseek-provider.test.ts +0 -586
- package/core/src/ai/__tests__/ollama-provider.test.ts +0 -641
- package/core/src/ai/anthropic-provider.ts +0 -262
- package/core/src/ai/deepseek-provider.ts +0 -315
- package/core/src/ai/index.ts +0 -87
- package/core/src/ai/llm-client.ts +0 -52
- package/core/src/ai/mock-provider.ts +0 -146
- package/core/src/ai/ollama-provider.ts +0 -269
- package/core/src/ai/openai-provider.ts +0 -240
- package/core/src/ai/provider-factory.ts +0 -408
- package/core/src/artifacts/README.md +0 -78
- package/core/src/artifacts/index.ts +0 -16
- package/core/src/artifacts/ui-artifacts.ts +0 -412
- package/core/src/assertions/__tests__/engine.test.ts +0 -360
- package/core/src/assertions/engine.ts +0 -577
- package/core/src/assertions/index.ts +0 -13
- package/core/src/assertions/types.ts +0 -229
- package/core/src/auth/__tests__/api-key-provider.test.ts +0 -282
- package/core/src/auth/__tests__/auth-manager.test.ts +0 -430
- package/core/src/auth/__tests__/basic-auth-provider.test.ts +0 -364
- package/core/src/auth/__tests__/cloud-providers.test.ts +0 -751
- package/core/src/auth/__tests__/jwt-provider.test.ts +0 -400
- package/core/src/auth/__tests__/oauth2-provider.test.ts +0 -383
- package/core/src/auth/__tests__/totp-provider.test.ts +0 -294
- package/core/src/auth/__tests__/ui-login-provider.test.ts +0 -323
- package/core/src/auth/api-key-provider.ts +0 -75
- package/core/src/auth/aws-iam-provider.ts +0 -212
- package/core/src/auth/azure-ad-provider.ts +0 -126
- package/core/src/auth/basic-auth-provider.ts +0 -133
- package/core/src/auth/gcp-adc-provider.ts +0 -146
- package/core/src/auth/index.ts +0 -342
- package/core/src/auth/jwt-provider.ts +0 -193
- package/core/src/auth/manager.ts +0 -281
- package/core/src/auth/oauth2-provider.ts +0 -141
- package/core/src/auth/totp-provider.ts +0 -163
- package/core/src/auth/ui-login-provider.ts +0 -242
- package/core/src/cache/__tests__/lru-cache.test.ts +0 -564
- package/core/src/cache/index.ts +0 -13
- package/core/src/cache/lru-cache.ts +0 -536
- package/core/src/crawler/__tests__/journey-generator.test.ts +0 -344
- package/core/src/crawler/__tests__/selector-generator.test.ts +0 -211
- package/core/src/crawler/index.ts +0 -335
- package/core/src/crawler/journey-generator.ts +0 -471
- package/core/src/crawler/page-analyzer.ts +0 -857
- package/core/src/crawler/selector-generator.ts +0 -280
- package/core/src/crawler/types.ts +0 -475
- package/core/src/dashboard/__tests__/real-world.test.ts +0 -430
- package/core/src/dashboard/__tests__/server.test.ts +0 -283
- package/core/src/dashboard/__tests__/types.test.ts +0 -208
- package/core/src/dashboard/assets.ts +0 -692
- package/core/src/dashboard/index.ts +0 -17
- package/core/src/dashboard/server.ts +0 -401
- package/core/src/dashboard/types.ts +0 -78
- package/core/src/discoverer/__tests__/test-discoverer.test.ts +0 -444
- package/core/src/discoverer/index.ts +0 -374
- package/core/src/fixtures/__tests__/loader.test.ts +0 -246
- package/core/src/fixtures/__tests__/resolver.test.ts +0 -334
- package/core/src/fixtures/index.ts +0 -9
- package/core/src/fixtures/loader.ts +0 -200
- package/core/src/fixtures/resolver.ts +0 -221
- package/core/src/fixtures/types.ts +0 -86
- package/core/src/flakiness/__tests__/flakiness.test.ts +0 -554
- package/core/src/flakiness/index.ts +0 -536
- package/core/src/generation/__tests__/code-formatter.test.ts +0 -170
- package/core/src/generation/__tests__/code-generator-contract.test.ts +0 -207
- package/core/src/generation/__tests__/code-generator.test.ts +0 -586
- package/core/src/generation/__tests__/crawler-pack-generator.test.ts +0 -479
- package/core/src/generation/__tests__/generation-e2e-b2bshop.test.ts +0 -718
- package/core/src/generation/__tests__/generation-integration.test.ts +0 -655
- package/core/src/generation/__tests__/pack-generator.test.ts +0 -408
- package/core/src/generation/__tests__/prompt-builder.test.ts +0 -200
- package/core/src/generation/__tests__/real-provider-integration.test.ts +0 -414
- package/core/src/generation/__tests__/source-analyzer.test.ts +0 -774
- package/core/src/generation/__tests__/test-optimizer.test.ts +0 -255
- package/core/src/generation/code-formatter.ts +0 -408
- package/core/src/generation/code-generator.ts +0 -470
- package/core/src/generation/crawler-pack-generator.ts +0 -289
- package/core/src/generation/generator.ts +0 -113
- package/core/src/generation/index.ts +0 -59
- package/core/src/generation/pack-generator.ts +0 -527
- package/core/src/generation/prompt-builder.ts +0 -772
- package/core/src/generation/source-analyzer.ts +0 -830
- package/core/src/generation/test-optimizer.ts +0 -474
- package/core/src/generation/types.ts +0 -217
- package/core/src/hooks/__tests__/compose.test.ts +0 -636
- package/core/src/hooks/__tests__/runner.test.ts +0 -478
- package/core/src/hooks/compose.ts +0 -268
- package/core/src/hooks/runner.ts +0 -364
- package/core/src/index.ts +0 -255
- package/core/src/pack/__tests__/migrator.test.ts +0 -594
- package/core/src/pack/__tests__/validator.test.ts +0 -759
- package/core/src/pack/migrator.ts +0 -353
- package/core/src/pack/validator.ts +0 -359
- package/core/src/pack-v2/__tests__/loader.test.ts +0 -533
- package/core/src/pack-v2/__tests__/migrator.test.ts +0 -455
- package/core/src/pack-v2/__tests__/validator.test.ts +0 -609
- package/core/src/pack-v2/index.ts +0 -41
- package/core/src/pack-v2/loader.ts +0 -358
- package/core/src/pack-v2/migrator.ts +0 -540
- package/core/src/pack-v2/validator.ts +0 -731
- package/core/src/parallel/README.md +0 -143
- package/core/src/parallel/index.ts +0 -16
- package/core/src/parallel/parallel-runner.ts +0 -282
- package/core/src/pom/__tests__/loader.test.ts +0 -378
- package/core/src/pom/base-page.ts +0 -425
- package/core/src/pom/index.ts +0 -45
- package/core/src/pom/loader.ts +0 -480
- package/core/src/pom/types.ts +0 -146
- package/core/src/proof/__tests__/proof-roundtrip.test.ts +0 -149
- package/core/src/proof/__tests__/schema-validation-manual.mjs +0 -211
- package/core/src/proof/__tests__/schema-validation.test.ts +0 -336
- package/core/src/proof/__tests__/signer.test.ts +0 -486
- package/core/src/proof/__tests__/temporal-regression.test.ts +0 -537
- package/core/src/proof/__tests__/verifier-advanced.test.ts +0 -588
- package/core/src/proof/__tests__/verifier.test.ts +0 -413
- package/core/src/proof/bundle.ts +0 -290
- package/core/src/proof/canonicalize.ts +0 -116
- package/core/src/proof/index.ts +0 -74
- package/core/src/proof/schema.ts +0 -285
- package/core/src/proof/signer.ts +0 -293
- package/core/src/proof/verifier.ts +0 -380
- package/core/src/regression/__tests__/detector.test.ts +0 -396
- package/core/src/regression/__tests__/trend-analyzer.test.ts +0 -300
- package/core/src/regression/detector.ts +0 -629
- package/core/src/regression/index.ts +0 -34
- package/core/src/regression/trend-analyzer.ts +0 -468
- package/core/src/regression/types.ts +0 -295
- package/core/src/regression/vault.ts +0 -419
- package/core/src/repair/__tests__/repairer.test.ts +0 -572
- package/core/src/repair/__tests__/types.test.ts +0 -302
- package/core/src/repair/engine/__tests__/fixer.test.ts +0 -482
- package/core/src/repair/engine/__tests__/suggestion-engine.test.ts +0 -395
- package/core/src/repair/engine/fixer.ts +0 -271
- package/core/src/repair/engine/suggestion-engine.ts +0 -234
- package/core/src/repair/index.ts +0 -53
- package/core/src/repair/repairer.ts +0 -376
- package/core/src/repair/types.ts +0 -119
- package/core/src/repair/utils/__tests__/error-analyzer.test.ts +0 -454
- package/core/src/repair/utils/error-analyzer.ts +0 -308
- package/core/src/reporting/README.md +0 -144
- package/core/src/reporting/html-reporter.ts +0 -835
- package/core/src/reporting/index.ts +0 -16
- package/core/src/retry/README.md +0 -192
- package/core/src/retry/__tests__/flakiness-integration.test.ts +0 -475
- package/core/src/retry/__tests__/retry-engine.test.ts +0 -424
- package/core/src/retry/flakiness-integration.ts +0 -267
- package/core/src/retry/index.ts +0 -48
- package/core/src/retry/retry-engine.ts +0 -368
- package/core/src/retry/types.ts +0 -208
- package/core/src/retry/vault.ts +0 -413
- package/core/src/runner/__tests__/flakiness-integration.test.ts +0 -566
- package/core/src/runner/__tests__/phase3-e2e-b2bshop.test.ts +0 -218
- package/core/src/runner/__tests__/phase3-e2e-reqres.test.ts +0 -199
- package/core/src/runner/__tests__/phase3-runner.test.ts +0 -1118
- package/core/src/runner/e2e-helpers.ts +0 -216
- package/core/src/runner/phase3-runner.ts +0 -1536
- package/core/src/schemas/gherkin-report.json +0 -122
- package/core/src/secrets/__tests__/crypto.test.ts +0 -180
- package/core/src/secrets/crypto.ts +0 -289
- package/core/src/secrets/manager.ts +0 -272
- package/core/src/security/__tests__/hardening.test.ts +0 -480
- package/core/src/security/redaction-patterns-extended.ts +0 -278
- package/core/src/security/redactor.ts +0 -326
- package/core/src/self-healing/assertion-healer.ts +0 -485
- package/core/src/self-healing/engine.ts +0 -626
- package/core/src/self-healing/index.ts +0 -33
- package/core/src/self-healing/selector-healer.ts +0 -488
- package/core/src/self-healing/types.ts +0 -193
- package/core/src/serve/diagnostics-collector.ts +0 -201
- package/core/src/serve/health-checker.ts +0 -274
- package/core/src/serve/index.ts +0 -9
- package/core/src/serve/metrics-collector.ts +0 -386
- package/core/src/serve/process-manager.ts +0 -265
- package/core/src/serve/server.ts +0 -230
- package/core/src/slo/config.ts +0 -408
- package/core/src/slo/index.ts +0 -68
- package/core/src/slo/sli-calculator.ts +0 -474
- package/core/src/slo/slo-tracker.ts +0 -481
- package/core/src/slo/types.ts +0 -408
- package/core/src/slo/vault.ts +0 -600
- package/core/src/tui/__tests__/monitor.test.ts +0 -336
- package/core/src/tui/__tests__/real-world.test.ts +0 -376
- package/core/src/tui/__tests__/renderer.test.ts +0 -201
- package/core/src/tui/__tests__/types.test.ts +0 -295
- package/core/src/tui/index.ts +0 -19
- package/core/src/tui/monitor.ts +0 -331
- package/core/src/tui/renderer.ts +0 -269
- package/core/src/tui/types.ts +0 -68
- package/core/src/types/pack-v1.ts +0 -305
- package/core/src/types/pack-v2.ts +0 -525
- package/core/src/types/trust-score.ts +0 -258
- package/core/src/vault/__tests__/flakiness-vault.test.ts +0 -562
- package/core/src/vault/__tests__/vault.test.ts +0 -259
- package/core/src/vault/cas.ts +0 -323
- package/core/src/vault/index.ts +0 -1361
- package/core/src/vault/schema.sql +0 -168
- package/core/src/visual/README.md +0 -185
- package/core/src/visual/index.ts +0 -14
- package/core/src/visual/visual-regression.ts +0 -347
- package/core/src/watch/__tests__/watch-mode.test.ts +0 -192
- package/core/src/watch/index.ts +0 -14
- package/core/src/watch/watch-mode.ts +0 -565
- package/core/tsconfig.json +0 -12
- package/core/vitest.config.ts +0 -52
- package/docs/ARCHITECTURE.md +0 -901
- package/docs/AUDIT-GLOBAL-DEC2025.md +0 -271
- package/docs/BETA_TESTING.md +0 -257
- package/docs/BETA_TESTING_PLAN.md +0 -727
- package/docs/CERTIFICATION-REPORT.md +0 -142
- package/docs/COMPLETE_AUDIT_REFACTORING.md +0 -965
- package/docs/DEVELOPMENT.md +0 -545
- package/docs/DEVELOPMENT_HISTORY.md +0 -345
- package/docs/LIMITATIONS.md +0 -176
- package/docs/MIGRATION.md +0 -303
- package/docs/OPTION_3_4_EXPLORATION.md +0 -1257
- package/docs/PHASE1_PERFORMANCE.md +0 -144
- package/docs/QA360_Cloud.postman_collection.json +0 -89
- package/docs/QA360_TESTING_PHILOSOPHY.md +0 -769
- package/docs/QA_TEST_PLAN.md +0 -727
- package/docs/README.md +0 -50
- package/docs/STATUS.md +0 -198
- package/docs/STRATEGIC_STUDY_GOOSE_INTEGRATION.md +0 -615
- package/docs/USER_GUIDE.md +0 -687
- package/docs/WORK-DONE-ADAPTER-TESTS.md +0 -136
- package/docs/adapters-security.md +0 -485
- package/docs/architecture-diagram.mmd +0 -168
- package/docs/archive/ARCH-01-DAY6-BUILD-FIXES.md +0 -396
- package/docs/archive/ARCH-01-DAY6-FINAL-STATUS.md +0 -324
- package/docs/archive/ARCH-01_MCP_MERGE_ANALYSIS.md +0 -644
- package/docs/archive/ARCH-01_NEXT_STEPS.md +0 -60
- package/docs/archive/BRANCH_PROTECTION.md +0 -183
- package/docs/archive/CI_LOCKDOWN_CHECKLIST.md +0 -222
- package/docs/archive/HANDOFF_TEST-01.md +0 -669
- package/docs/archive/LEGAL_READY_PLACEHOLDERS.md +0 -372
- package/docs/archive/NODE_UPGRADE_GUIDE.md +0 -188
- package/docs/archive/PHASE1_COMPLETION.md +0 -386
- package/docs/archive/PHASE2_COMPLETION.md +0 -404
- package/docs/archive/PHASE3_AND_4_FINAL.md +0 -360
- package/docs/archive/PHASE3_COMPLETE.md +0 -301
- package/docs/archive/PHASE3_STATUS.md +0 -255
- package/docs/archive/PRE-WEEK2-AUDIT.md +0 -364
- package/docs/archive/README.md +0 -16
- package/docs/archive/SCHEMA_AJV_2020_FIX.md +0 -245
- package/docs/archive/TEST-01_AUDIT_REPORT.md +0 -240
- package/docs/archive/TEST-01_COVERAGE_PLAN.md +0 -423
- package/docs/archive/obsolete-proposals/dom-element-discovery-mode.md +0 -250
- package/docs/archive/obsolete-proposals/qa360-comprehensive-test-plan.md +0 -1249
- package/docs/archive/obsolete-proposals/qa360-quick-start-guide.md +0 -298
- package/docs/archive/obsolete-proposals/technical-plan-dom-discovery.md +0 -870
- package/docs/budgets-advanced.md +0 -308
- package/docs/examples/history-export-gc.md +0 -285
- package/docs/examples/pack-v2-complete.yaml +0 -158
- package/docs/examples/pack-v2-quickstart.yaml +0 -24
- package/docs/examples/pack-v2-ui-login.yaml +0 -81
- package/docs/examples/qa360-report.json +0 -50
- package/docs/history.md +0 -565
- package/docs/hooks.md +0 -304
- package/docs/llm-providers.md +0 -512
- package/docs/mcp-server.md +0 -651
- package/docs/mcp-tools.md +0 -1131
- package/docs/pack-v1.md +0 -383
- package/docs/pack-v2.md +0 -558
- package/docs/page-objects.md +0 -366
- package/docs/proofs.md +0 -670
- package/docs/quickstart-5min.md +0 -257
- package/docs/readiness-ci.md +0 -654
- package/docs/rfc/README.md +0 -20
- package/docs/rfc/proof-bundle-v1.md +0 -787
- package/docs/secrets.md +0 -392
- package/docs/serve.md +0 -494
- package/docs/unit-test-adapters.md +0 -168
- package/docs/vault.md +0 -491
- package/e2e/qa360-e2e.test.ts +0 -696
- package/e2e/vitest.config.ts +0 -18
- package/examples/README.md +0 -50
- package/examples/ci/docker-compose-serve.yml +0 -375
- package/examples/ci/github-actions-serve.yml +0 -345
- package/examples/ci/gitlab-ci-serve.yml +0 -407
- package/examples/datasets/README.md +0 -101
- package/examples/datasets/b2bshop.ts +0 -155
- package/examples/datasets/index.ts +0 -57
- package/examples/datasets/reqres.ts +0 -195
- package/examples/fixtures-demo/fixtures/users.yml +0 -39
- package/examples/fixtures-demo/pack.yml +0 -71
- package/examples/future-api/README.md +0 -16
- package/examples/future-api/diag.js +0 -7
- package/examples/future-api/health.js +0 -4
- package/examples/future-api/packs.js +0 -13
- package/examples/future-api/runpack.js +0 -10
- package/examples/generation/README.md +0 -148
- package/examples/generation/pack-generator-example.js +0 -115
- package/examples/generation/source-analyzer-example.js +0 -115
- package/examples/httpbin/pack.yml +0 -59
- package/examples/load-testing/mcp-load.yml +0 -115
- package/examples/load-testing/mcp-stdio.yml +0 -95
- package/examples/mcp/claude-desktop-config.json +0 -33
- package/examples/mcp/claude-desktop.json +0 -16
- package/examples/mcp/conversation-sample.md +0 -131
- package/examples/mcp/demo-60s.md +0 -330
- package/examples/mcp/sample-conversation.jsonl +0 -21
- package/examples/mcp/vscode-settings.json +0 -22
- package/examples/pack-v2-complete.yml +0 -242
- package/examples/pack-v2-examples.md +0 -244
- package/examples/pack-v2-quickstart.yml +0 -55
- package/examples/packs-business/ecommerce-api.yml +0 -121
- package/examples/packs-business/saas-dashboard-ui.yml +0 -133
- package/examples/packs-conformance/compose-multi.yml +0 -174
- package/examples/packs-conformance/full.yml +0 -152
- package/examples/packs-conformance/heavy-artifacts.yml +0 -152
- package/examples/packs-conformance/minimal.yml +0 -71
- package/examples/packs-conformance/secrets-missing.yml +0 -97
- package/examples/packs-conformance/timeouts.yml +0 -77
- package/examples/pom-demo/README.md +0 -104
- package/examples/pom-demo/pack.yml +0 -60
- package/examples/pom-demo/pages/DashboardPage.page.ts +0 -73
- package/examples/pom-demo/pages/LoginPage.page.ts +0 -76
- package/examples/proofs/e2e-playwright-proof.json +0 -75
- package/examples/proofs/httpbin-proof.json +0 -69
- package/examples/proofs/multi-adapter-proof.json +0 -117
- package/examples/proofs/test-proof.json +0 -26
- package/examples/restful-api-dev/README.md +0 -102
- package/examples/restful-api-dev/restful-api-advanced.yml +0 -29
- package/examples/restful-api-dev/restful-api-basic.yml +0 -29
- package/examples/web-lite/.github/workflows/qa360-phase3.yml +0 -73
- package/examples/web-lite/api-mock/server.js +0 -258
- package/examples/web-lite/pack.yml +0 -71
- package/examples/web-lite/services.yml +0 -43
- package/examples/web-lite/web-content/healthz +0 -1
- package/examples/web-lite/web-content/index.html +0 -259
- package/packages/mcp/CHANGELOG.md +0 -109
- package/packages/mcp/IMPLEMENTATION_SUMMARY.md +0 -350
- package/packages/mcp/LICENSE +0 -21
- package/packages/mcp/QUICK_START.md +0 -291
- package/packages/mcp/README.md +0 -294
- package/packages/mcp/TELEMETRY.md +0 -220
- package/packages/mcp/package.json +0 -91
- package/packages/mcp/scripts/generate-sbom-fallback.cjs +0 -84
- package/packages/mcp/scripts/safe-postinstall.cjs +0 -32
- package/packages/mcp/src/__tests__/contract.test.ts +0 -902
- package/packages/mcp/src/cli/cli.ts +0 -137
- package/packages/mcp/src/cli/doctor.ts +0 -286
- package/packages/mcp/src/cli/fix.ts +0 -99
- package/packages/mcp/src/cli/init.ts +0 -233
- package/packages/mcp/src/cli/postinstall.ts +0 -14
- package/packages/mcp/src/cli/reset.ts +0 -44
- package/packages/mcp/src/cli/telemetry.ts +0 -166
- package/packages/mcp/src/cli/test-dx.ts +0 -94
- package/packages/mcp/src/cli/uninstall.ts +0 -80
- package/packages/mcp/src/cli/up.ts +0 -178
- package/packages/mcp/src/index.ts +0 -12
- package/packages/mcp/src/scripts/e2e-local.ts +0 -337
- package/packages/mcp/src/scripts/verify-settings.ts +0 -242
- package/packages/mcp/src/security/audit.ts +0 -244
- package/packages/mcp/src/security/manager.ts +0 -242
- package/packages/mcp/src/server/full-server.ts +0 -212
- package/packages/mcp/src/server/minimal-server.ts +0 -134
- package/packages/mcp/src/tools/history.ts +0 -388
- package/packages/mcp/src/tools/pack.ts +0 -449
- package/packages/mcp/src/tools/registry.ts +0 -638
- package/packages/mcp/src/tools/report.ts +0 -100
- package/packages/mcp/src/tools/run.ts +0 -268
- package/packages/mcp/src/tools/secrets.ts +0 -198
- package/packages/mcp/src/tools/serve.ts +0 -221
- package/packages/mcp/src/tools/triage.ts +0 -532
- package/packages/mcp/src/tools/types.ts +0 -26
- package/packages/mcp/src/tools/vault.ts +0 -164
- package/packages/mcp/src/tools/verify.ts +0 -166
- package/packages/mcp/src/types/index.ts +0 -311
- package/packages/mcp/src/types/mcp-stubs.ts +0 -83
- package/packages/mcp/tsconfig.json +0 -16
- package/playwright.config.ts +0 -20
- package/pnpm-workspace.yaml +0 -4
- package/run-test-and-push.sh +0 -20
- package/scripts/build-proof-cli.sh +0 -110
- package/scripts/ci/check-windows-paths.js +0 -92
- package/scripts/ci/invariants.sh +0 -124
- package/scripts/ci/make-final-bundle.js +0 -106
- package/scripts/ci/mcp-run-multipack.js +0 -305
- package/scripts/ci/run-pack-suite.sh +0 -103
- package/scripts/ci/run-phase7-final.sh +0 -190
- package/scripts/ci/slo-assert.js +0 -158
- package/scripts/ci/test-fault-tolerance.sh +0 -301
- package/scripts/install-mcp.sh +0 -66
- package/scripts/mcp-smoke.mjs +0 -27
- package/scripts/smoke.sh +0 -26
- package/scripts/stress-test.js +0 -288
- package/scripts/sync-version.mjs +0 -50
- package/scripts/validate-examples.mjs +0 -404
- package/scripts/validation/simple-pack-check.sh +0 -51
- package/scripts/validation/validate-universal-pack.mjs +0 -77
- package/scripts/verify-persistence.js +0 -127
- package/test-pack.yaml +0 -43
- package/test-results/.last-run.json +0 -4
- package/test-runner.mjs +0 -87
- package/tests/artifacts.spec.js +0 -147
- package/tests/contracts.spec.js +0 -239
- package/tests/e2e/assertions.test.mjs +0 -370
- package/tests/e2e/crawler.test.mjs +0 -451
- package/tests/e2e/playwright-plus-plus.test.mjs +0 -604
- package/tests/e2e/proof-bundle.test.mjs +0 -258
- package/tests/e2e/real-world/saucedemo.test.mjs +0 -714
- package/tests/e2e/real-world/the-internet-herokuapp.test.mjs +0 -760
- package/tests/e2e/ui-actions.test.mjs +0 -546
- package/tests/gherkin.e2e.spec.ts +0 -310
- package/tests/no-console-errors.spec.js +0 -136
- package/tests/pdf.spec.ts +0 -252
- package/tests/run-pack.spec.ts +0 -58
- package/tsconfig.base.json +0 -15
- package/tsconfig.build.json +0 -8
- package/tsconfig.json +0 -37
- package/tsconfig.test.json +0 -18
- package/typedoc.json +0 -37
- package/ui/README.md +0 -50
- package/verify-proof.mjs +0 -60
|
@@ -1,772 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* QA360 Prompt Builder
|
|
3
|
-
*
|
|
4
|
-
* Constructs effective prompts for LLM test generation.
|
|
5
|
-
* Uses system prompts, few-shot examples, and structured templates.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type { TestSpec, ApiTestSpec, UiTestSpec, PerfTestSpec, UnitTestSpec, GenerationSource } from './types.js';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Prompt builder options
|
|
12
|
-
*/
|
|
13
|
-
export interface PromptBuilderOptions {
|
|
14
|
-
/**
|
|
15
|
-
* Include code comments in generated tests
|
|
16
|
-
*/
|
|
17
|
-
includeComments?: boolean;
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Include detailed assertions
|
|
21
|
-
*/
|
|
22
|
-
includeDetailedAssertions?: boolean;
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Include retry logic for flaky tests
|
|
26
|
-
*/
|
|
27
|
-
includeRetryLogic?: boolean;
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Target code style
|
|
31
|
-
*/
|
|
32
|
-
codeStyle?: 'clean' | 'verbose' | 'concise';
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Few-shot examples to include
|
|
36
|
-
*/
|
|
37
|
-
examples?: string[];
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Custom system prompt
|
|
41
|
-
*/
|
|
42
|
-
systemPrompt?: string;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Built prompt result
|
|
47
|
-
*/
|
|
48
|
-
export interface BuiltPrompt {
|
|
49
|
-
system: string;
|
|
50
|
-
user: string;
|
|
51
|
-
estimatedTokens: number;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Prompt Builder class
|
|
56
|
-
*/
|
|
57
|
-
export class PromptBuilder {
|
|
58
|
-
private readonly options: Required<PromptBuilderOptions>;
|
|
59
|
-
|
|
60
|
-
private readonly defaultOptions: Required<PromptBuilderOptions> = {
|
|
61
|
-
includeComments: true,
|
|
62
|
-
includeDetailedAssertions: true,
|
|
63
|
-
includeRetryLogic: true,
|
|
64
|
-
codeStyle: 'clean',
|
|
65
|
-
examples: [],
|
|
66
|
-
systemPrompt: '',
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
constructor(options: PromptBuilderOptions = {}) {
|
|
70
|
-
this.options = { ...this.defaultOptions, ...options };
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Build prompt from generation source
|
|
75
|
-
*/
|
|
76
|
-
async buildFromSource(source: GenerationSource): Promise<BuiltPrompt> {
|
|
77
|
-
switch (source.type) {
|
|
78
|
-
case 'openapi':
|
|
79
|
-
return this.buildFromOpenAPI(source.urlOrPath);
|
|
80
|
-
case 'har':
|
|
81
|
-
return this.buildFromHAR(source.filePath);
|
|
82
|
-
case 'url':
|
|
83
|
-
return this.buildFromUrl(source.url);
|
|
84
|
-
case 'spec':
|
|
85
|
-
return this.buildFromSpec(source.spec);
|
|
86
|
-
case 'description':
|
|
87
|
-
return this.buildFromDescription(source.description);
|
|
88
|
-
case 'code':
|
|
89
|
-
return this.buildFromCode(source.code, source.language);
|
|
90
|
-
default:
|
|
91
|
-
throw new Error(`Unsupported source type: ${(source as any).type}`);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Build prompt from OpenAPI/Swagger spec
|
|
97
|
-
*/
|
|
98
|
-
buildFromOpenAPI(specPath: string): BuiltPrompt {
|
|
99
|
-
const system = this.options.systemPrompt || this.getDefaultSystemPrompt();
|
|
100
|
-
const user = `You are a test generation expert. Generate comprehensive tests from the following OpenAPI/Swagger specification.
|
|
101
|
-
|
|
102
|
-
**OpenAPI Spec Location**: ${specPath}
|
|
103
|
-
|
|
104
|
-
**Requirements**:
|
|
105
|
-
1. Generate tests for all major endpoints
|
|
106
|
-
2. Include happy path tests for each operation
|
|
107
|
-
3. Include error cases (400, 401, 404, 500)
|
|
108
|
-
4. Use TypeScript with Playwright
|
|
109
|
-
5. Include proper assertions for status codes and response schemas
|
|
110
|
-
6. Add authentication if the spec requires it
|
|
111
|
-
|
|
112
|
-
**Output Format**:
|
|
113
|
-
Return valid TypeScript code that can be used with Playwright testing framework.
|
|
114
|
-
Include clear comments describing each test.
|
|
115
|
-
|
|
116
|
-
${this.getCodeStyleInstructions()}
|
|
117
|
-
|
|
118
|
-
${this.getFewShotExample('api')}`;
|
|
119
|
-
|
|
120
|
-
return {
|
|
121
|
-
system,
|
|
122
|
-
user,
|
|
123
|
-
estimatedTokens: this.countTokens(system + user),
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Build prompt from HAR file
|
|
129
|
-
*/
|
|
130
|
-
buildFromHAR(filePath: string): BuiltPrompt {
|
|
131
|
-
const system = this.options.systemPrompt || this.getDefaultSystemPrompt();
|
|
132
|
-
const user = `You are a test generation expert. Convert the following HAR (HTTP Archive) file into Playwright API tests.
|
|
133
|
-
|
|
134
|
-
**HAR File**: ${filePath}
|
|
135
|
-
|
|
136
|
-
**Requirements**:
|
|
137
|
-
1. Create a test for each unique request in the HAR
|
|
138
|
-
2. Extract request parameters, headers, and body
|
|
139
|
-
3. Add assertions based on the response status and structure
|
|
140
|
-
4. Group related tests logically
|
|
141
|
-
5. Use TypeScript with Playwright
|
|
142
|
-
|
|
143
|
-
**Output Format**:
|
|
144
|
-
Return valid TypeScript code with Playwright API tests.
|
|
145
|
-
Include setup/teardown for any required state.
|
|
146
|
-
|
|
147
|
-
${this.getCodeStyleInstructions()}
|
|
148
|
-
|
|
149
|
-
${this.getFewShotExample('api')}`;
|
|
150
|
-
|
|
151
|
-
return {
|
|
152
|
-
system,
|
|
153
|
-
user,
|
|
154
|
-
estimatedTokens: this.countTokens(system + user),
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Build prompt from URL
|
|
160
|
-
*/
|
|
161
|
-
buildFromUrl(url: string): BuiltPrompt {
|
|
162
|
-
const system = this.options.systemPrompt || this.getDefaultSystemPrompt();
|
|
163
|
-
const user = `You are a test generation expert. Generate comprehensive API smoke tests for the following URL.
|
|
164
|
-
|
|
165
|
-
**Target URL**: ${url}
|
|
166
|
-
|
|
167
|
-
**Requirements**:
|
|
168
|
-
1. Analyze the URL structure to infer API endpoints
|
|
169
|
-
2. Generate tests for common REST patterns (list, get, create, update, delete)
|
|
170
|
-
3. Include health check if applicable
|
|
171
|
-
4. Add authentication placeholders
|
|
172
|
-
5. Use TypeScript with Playwright
|
|
173
|
-
6. Include proper error handling
|
|
174
|
-
|
|
175
|
-
**Assumptions**:
|
|
176
|
-
- Assume RESTful API conventions
|
|
177
|
-
- Use reasonable defaults for any missing information
|
|
178
|
-
- Add TODO comments where assumptions are made
|
|
179
|
-
|
|
180
|
-
${this.getCodeStyleInstructions()}
|
|
181
|
-
|
|
182
|
-
${this.getFewShotExample('api')}`;
|
|
183
|
-
|
|
184
|
-
return {
|
|
185
|
-
system,
|
|
186
|
-
user,
|
|
187
|
-
estimatedTokens: this.countTokens(system + user),
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
/**
|
|
192
|
-
* Build prompt from test spec
|
|
193
|
-
*/
|
|
194
|
-
buildFromSpec(spec: TestSpec): BuiltPrompt {
|
|
195
|
-
const system = this.options.systemPrompt || this.getDefaultSystemPrompt();
|
|
196
|
-
|
|
197
|
-
let specPrompt = '';
|
|
198
|
-
let exampleType = 'api';
|
|
199
|
-
|
|
200
|
-
switch (spec.type) {
|
|
201
|
-
case 'api':
|
|
202
|
-
specPrompt = this.buildApiSpecPrompt(spec as ApiTestSpec);
|
|
203
|
-
exampleType = 'api';
|
|
204
|
-
break;
|
|
205
|
-
case 'ui':
|
|
206
|
-
specPrompt = this.buildUiSpecPrompt(spec as UiTestSpec);
|
|
207
|
-
exampleType = 'ui';
|
|
208
|
-
break;
|
|
209
|
-
case 'perf':
|
|
210
|
-
specPrompt = this.buildPerfSpecPrompt(spec as PerfTestSpec);
|
|
211
|
-
exampleType = 'perf';
|
|
212
|
-
break;
|
|
213
|
-
case 'unit':
|
|
214
|
-
specPrompt = this.buildUnitSpecPrompt(spec as UnitTestSpec);
|
|
215
|
-
exampleType = 'unit';
|
|
216
|
-
break;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
const user = `You are a test generation expert. Generate tests based on the following specification.
|
|
220
|
-
|
|
221
|
-
**Test Specification**:
|
|
222
|
-
${specPrompt}
|
|
223
|
-
|
|
224
|
-
**Requirements**:
|
|
225
|
-
1. Follow the specification exactly
|
|
226
|
-
2. Include all specified endpoints/actions/scenarios
|
|
227
|
-
3. Add appropriate assertions
|
|
228
|
-
4. Handle edge cases
|
|
229
|
-
5. Use clean, maintainable code
|
|
230
|
-
|
|
231
|
-
${this.getCodeStyleInstructions()}
|
|
232
|
-
|
|
233
|
-
${this.getFewShotExample(exampleType)}`;
|
|
234
|
-
|
|
235
|
-
return {
|
|
236
|
-
system,
|
|
237
|
-
user,
|
|
238
|
-
estimatedTokens: this.countTokens(system + user),
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
/**
|
|
243
|
-
* Build prompt from description
|
|
244
|
-
*/
|
|
245
|
-
buildFromDescription(description: string): BuiltPrompt {
|
|
246
|
-
const system = this.options.systemPrompt || this.getDefaultSystemPrompt();
|
|
247
|
-
const user = `You are a test generation expert. Generate tests based on the following description.
|
|
248
|
-
|
|
249
|
-
**Description**:
|
|
250
|
-
${description}
|
|
251
|
-
|
|
252
|
-
**Requirements**:
|
|
253
|
-
1. Infer the test requirements from the description
|
|
254
|
-
2. Generate comprehensive, production-ready tests
|
|
255
|
-
3. Make reasonable assumptions and document them
|
|
256
|
-
4. Include proper assertions and error handling
|
|
257
|
-
|
|
258
|
-
${this.getCodeStyleInstructions()}
|
|
259
|
-
|
|
260
|
-
${this.getFewShotExample('api')}`;
|
|
261
|
-
|
|
262
|
-
return {
|
|
263
|
-
system,
|
|
264
|
-
user,
|
|
265
|
-
estimatedTokens: this.countTokens(system + user),
|
|
266
|
-
};
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
/**
|
|
270
|
-
* Build prompt from existing code
|
|
271
|
-
*/
|
|
272
|
-
buildFromCode(code: string, language: string): BuiltPrompt {
|
|
273
|
-
const system = this.options.systemPrompt || this.getDefaultSystemPrompt();
|
|
274
|
-
const user = `You are a test generation expert. Generate comprehensive tests for the following code.
|
|
275
|
-
|
|
276
|
-
**Code Language**: ${language}
|
|
277
|
-
**Code to Test**:
|
|
278
|
-
\`\`\`
|
|
279
|
-
${code}
|
|
280
|
-
\`\`\`
|
|
281
|
-
|
|
282
|
-
**Requirements**:
|
|
283
|
-
1. Test all exported functions/classes
|
|
284
|
-
2. Include edge cases and error conditions
|
|
285
|
-
3. Test valid and invalid inputs
|
|
286
|
-
4. Mock external dependencies
|
|
287
|
-
5. Aim for high coverage
|
|
288
|
-
6. Use ${language === 'typescript' ? 'Vitest' : language === 'python' ? 'pytest' : 'appropriate testing framework'}
|
|
289
|
-
|
|
290
|
-
${this.getCodeStyleInstructions()}
|
|
291
|
-
|
|
292
|
-
${this.getFewShotExample('unit')}`;
|
|
293
|
-
|
|
294
|
-
return {
|
|
295
|
-
system,
|
|
296
|
-
user,
|
|
297
|
-
estimatedTokens: this.countTokens(system + user),
|
|
298
|
-
};
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
/**
|
|
302
|
-
* Build API spec prompt
|
|
303
|
-
*/
|
|
304
|
-
private buildApiSpecPrompt(spec: ApiTestSpec): string {
|
|
305
|
-
const parts = [
|
|
306
|
-
`**Type**: API Tests`,
|
|
307
|
-
`**Base URL**: ${spec.baseUrl}`,
|
|
308
|
-
`**Test Name**: ${spec.name}`,
|
|
309
|
-
];
|
|
310
|
-
|
|
311
|
-
if (spec.description) {
|
|
312
|
-
parts.push(`**Description**: ${spec.description}`);
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
parts.push('\n**Endpoints**:');
|
|
316
|
-
for (const endpoint of spec.endpoints) {
|
|
317
|
-
parts.push(`- ${endpoint.method} ${endpoint.path}`);
|
|
318
|
-
if (endpoint.description) {
|
|
319
|
-
parts.push(` Description: ${endpoint.description}`);
|
|
320
|
-
}
|
|
321
|
-
if (endpoint.expectations && endpoint.expectations.length > 0) {
|
|
322
|
-
parts.push(` Expectations:`);
|
|
323
|
-
for (const exp of endpoint.expectations) {
|
|
324
|
-
parts.push(` - Status: ${exp.status}, Response Time: ${exp.responseTime || 'N/A'}`);
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
if (spec.auth) {
|
|
330
|
-
parts.push(`\n**Authentication**: ${spec.auth.type}`);
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
return parts.join('\n');
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
/**
|
|
337
|
-
* Build UI spec prompt
|
|
338
|
-
*/
|
|
339
|
-
private buildUiSpecPrompt(spec: UiTestSpec): string {
|
|
340
|
-
const parts = [
|
|
341
|
-
`**Type**: UI/E2E Tests`,
|
|
342
|
-
`**Base URL**: ${spec.baseUrl}`,
|
|
343
|
-
`**Test Name**: ${spec.name}`,
|
|
344
|
-
];
|
|
345
|
-
|
|
346
|
-
if (spec.description) {
|
|
347
|
-
parts.push(`**Description**: ${spec.description}`);
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
if (spec.viewport) {
|
|
351
|
-
parts.push(`**Viewport**: ${spec.viewport.width}x${spec.viewport.height}`);
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
parts.push('\n**Pages**:');
|
|
355
|
-
for (const page of spec.pages) {
|
|
356
|
-
parts.push(`- ${page.name}: ${page.url}`);
|
|
357
|
-
parts.push(' Actions:');
|
|
358
|
-
for (const action of page.actions) {
|
|
359
|
-
parts.push(` - ${action.type} ${action.selector || ''} ${action.value || ''}`);
|
|
360
|
-
}
|
|
361
|
-
if (page.assertions && page.assertions.length > 0) {
|
|
362
|
-
parts.push(' Assertions:');
|
|
363
|
-
for (const assertion of page.assertions) {
|
|
364
|
-
parts.push(` - ${assertion.type} ${assertion.expected}`);
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
return parts.join('\n');
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
/**
|
|
373
|
-
* Build performance spec prompt
|
|
374
|
-
*/
|
|
375
|
-
private buildPerfSpecPrompt(spec: PerfTestSpec): string {
|
|
376
|
-
const parts = [
|
|
377
|
-
`**Type**: Performance Tests`,
|
|
378
|
-
`**Base URL**: ${spec.baseUrl}`,
|
|
379
|
-
`**Test Name**: ${spec.name}`,
|
|
380
|
-
];
|
|
381
|
-
|
|
382
|
-
if (spec.options) {
|
|
383
|
-
parts.push(`**Duration**: ${spec.options.duration || '30s'}`);
|
|
384
|
-
parts.push(`**Rate**: ${spec.options.rate || 'auto'} req/s`);
|
|
385
|
-
parts.push(`**VUs**: ${spec.options.vus || 10}`);
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
parts.push('\n**Scenarios**:');
|
|
389
|
-
for (const scenario of spec.scenarios) {
|
|
390
|
-
parts.push(`- ${scenario.name} (weight: ${scenario.weight || 1})`);
|
|
391
|
-
for (const req of scenario.requests) {
|
|
392
|
-
parts.push(` - ${req.method} ${req.path}`);
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
if (spec.options?.thresholds) {
|
|
397
|
-
parts.push('\n**Thresholds**:');
|
|
398
|
-
for (const threshold of spec.options.thresholds) {
|
|
399
|
-
parts.push(` - ${threshold.metric}: ${threshold.condition}`);
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
return parts.join('\n');
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
/**
|
|
407
|
-
* Build unit test spec prompt
|
|
408
|
-
*/
|
|
409
|
-
private buildUnitSpecPrompt(spec: UnitTestSpec): string {
|
|
410
|
-
const parts = [
|
|
411
|
-
`**Type**: Unit Tests`,
|
|
412
|
-
`**Test Name**: ${spec.name}`,
|
|
413
|
-
`**Language**: ${spec.source.language}`,
|
|
414
|
-
];
|
|
415
|
-
|
|
416
|
-
if (spec.source.exports) {
|
|
417
|
-
parts.push(`**Functions/Classes to Test**: ${spec.source.exports.join(', ')}`);
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
parts.push(`**Framework**: ${spec.framework || 'vitest'}`);
|
|
421
|
-
|
|
422
|
-
return parts.join('\n');
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
/**
|
|
426
|
-
* Get default system prompt
|
|
427
|
-
*/
|
|
428
|
-
private getDefaultSystemPrompt(): string {
|
|
429
|
-
return `You are an expert test generation engineer. Your role is to create high-quality, maintainable test code.
|
|
430
|
-
|
|
431
|
-
**Principles**:
|
|
432
|
-
1. **Clarity**: Tests should be self-documenting with clear names and structure
|
|
433
|
-
2. **Reliability**: Use proper waits, assertions, and error handling
|
|
434
|
-
3. **Maintainability**: Follow DRY principles, use helpers when appropriate
|
|
435
|
-
4. **Coverage**: Test happy paths AND edge cases
|
|
436
|
-
5. **Best Practices**: Follow testing framework conventions and idioms
|
|
437
|
-
|
|
438
|
-
**Output Requirements**:
|
|
439
|
-
- Return ONLY the test code, no explanations outside the code
|
|
440
|
-
- Use descriptive test names that explain what is being tested
|
|
441
|
-
- Include assertions for all critical conditions
|
|
442
|
-
- Handle errors appropriately
|
|
443
|
-
- Add comments for complex logic`;
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
/**
|
|
447
|
-
* Get code style instructions
|
|
448
|
-
*/
|
|
449
|
-
private getCodeStyleInstructions(): string {
|
|
450
|
-
const style = this.options.codeStyle;
|
|
451
|
-
const instructions = [];
|
|
452
|
-
|
|
453
|
-
instructions.push('**Code Style**:\n');
|
|
454
|
-
|
|
455
|
-
switch (style) {
|
|
456
|
-
case 'clean':
|
|
457
|
-
instructions.push('- Use clear, descriptive names');
|
|
458
|
-
instructions.push('- Group related tests with describe blocks');
|
|
459
|
-
instructions.push('- Extract common setup into beforeEach/beforeAll');
|
|
460
|
-
break;
|
|
461
|
-
case 'verbose':
|
|
462
|
-
instructions.push('- Include detailed comments for each step');
|
|
463
|
-
instructions.push('- Add explanatory comments for assertions');
|
|
464
|
-
instructions.push('- Document setup and teardown');
|
|
465
|
-
break;
|
|
466
|
-
case 'concise':
|
|
467
|
-
instructions.push('- Keep tests brief and to the point');
|
|
468
|
-
instructions.push('- Use minimal comments (only for complex logic)');
|
|
469
|
-
instructions.push('- Leverage framework features for conciseness');
|
|
470
|
-
break;
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
if (this.options.includeComments) {
|
|
474
|
-
instructions.push('- Include helpful comments explaining test intent');
|
|
475
|
-
} else {
|
|
476
|
-
instructions.push('- Minimize comments (let code be self-documenting)');
|
|
477
|
-
}
|
|
478
|
-
|
|
479
|
-
if (this.options.includeDetailedAssertions) {
|
|
480
|
-
instructions.push('- Include detailed assertions for all response properties');
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
if (this.options.includeRetryLogic) {
|
|
484
|
-
instructions.push('- Add retry logic for potentially flaky network operations');
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
return instructions.join('\n');
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
/**
|
|
491
|
-
* Get few-shot example
|
|
492
|
-
*/
|
|
493
|
-
private getFewShotExample(type: string): string {
|
|
494
|
-
if (this.options.examples.length > 0) {
|
|
495
|
-
return '**Example**:\n' + this.options.examples.join('\n\n');
|
|
496
|
-
}
|
|
497
|
-
|
|
498
|
-
// Built-in examples
|
|
499
|
-
const examples: Record<string, string> = {
|
|
500
|
-
api: this.getApiExample(),
|
|
501
|
-
ui: this.getUiExample(),
|
|
502
|
-
perf: this.getPerfExample(),
|
|
503
|
-
unit: this.getUnitExample(),
|
|
504
|
-
};
|
|
505
|
-
|
|
506
|
-
return examples[type] || '';
|
|
507
|
-
}
|
|
508
|
-
|
|
509
|
-
/**
|
|
510
|
-
* Get API test example
|
|
511
|
-
*/
|
|
512
|
-
private getApiExample(): string {
|
|
513
|
-
return `**Example: API Test with Playwright**
|
|
514
|
-
|
|
515
|
-
\`\`\`typescript
|
|
516
|
-
import { test, expect } from '@playwright/test';
|
|
517
|
-
|
|
518
|
-
test.describe('Users API', () => {
|
|
519
|
-
const baseUrl = 'https://api.example.com';
|
|
520
|
-
let authToken: string;
|
|
521
|
-
|
|
522
|
-
test.beforeAll(async () => {
|
|
523
|
-
// Setup: Get auth token
|
|
524
|
-
const response = await fetch(\`\${baseUrl}/auth/login\`, {
|
|
525
|
-
method: 'POST',
|
|
526
|
-
headers: { 'Content-Type': 'application/json' },
|
|
527
|
-
body: JSON.stringify({ username: 'test', password: 'test' }),
|
|
528
|
-
});
|
|
529
|
-
const data = await response.json();
|
|
530
|
-
authToken = data.token;
|
|
531
|
-
});
|
|
532
|
-
|
|
533
|
-
test('GET /users - should return list of users', async () => {
|
|
534
|
-
const response = await fetch(\`\${baseUrl}/users\`, {
|
|
535
|
-
headers: { 'Authorization': \`Bearer \${authToken}\` },
|
|
536
|
-
});
|
|
537
|
-
|
|
538
|
-
expect(response.status).toBe(200);
|
|
539
|
-
const data = await response.json();
|
|
540
|
-
expect(Array.isArray(data.users)).toBe(true);
|
|
541
|
-
expect(data.users.length).toBeGreaterThan(0);
|
|
542
|
-
});
|
|
543
|
-
|
|
544
|
-
test('GET /users/:id - should return specific user', async () => {
|
|
545
|
-
const response = await fetch(\`\${baseUrl}/users/1\`, {
|
|
546
|
-
headers: { 'Authorization': \`Bearer \${authToken}\` },
|
|
547
|
-
});
|
|
548
|
-
|
|
549
|
-
expect(response.status).toBe(200);
|
|
550
|
-
const user = await response.json();
|
|
551
|
-
expect(user.id).toBe(1);
|
|
552
|
-
expect(user).toHaveProperty('name');
|
|
553
|
-
expect(user).toHaveProperty('email');
|
|
554
|
-
});
|
|
555
|
-
|
|
556
|
-
test('POST /users - should create new user', async () => {
|
|
557
|
-
const newUser = {
|
|
558
|
-
name: 'Test User',
|
|
559
|
-
email: 'test@example.com',
|
|
560
|
-
};
|
|
561
|
-
|
|
562
|
-
const response = await fetch(\`\${baseUrl}/users\`, {
|
|
563
|
-
method: 'POST',
|
|
564
|
-
headers: {
|
|
565
|
-
'Authorization': \`Bearer \${authToken}\`,
|
|
566
|
-
'Content-Type': 'application/json',
|
|
567
|
-
},
|
|
568
|
-
body: JSON.stringify(newUser),
|
|
569
|
-
});
|
|
570
|
-
|
|
571
|
-
expect(response.status).toBe(201);
|
|
572
|
-
const created = await response.json();
|
|
573
|
-
expect(created.id).toBeDefined();
|
|
574
|
-
expect(created.name).toBe(newUser.name);
|
|
575
|
-
});
|
|
576
|
-
|
|
577
|
-
test('GET /users/:id - should return 404 for non-existent user', async () => {
|
|
578
|
-
const response = await fetch(\`\${baseUrl}/users/999999\`, {
|
|
579
|
-
headers: { 'Authorization': \`Bearer \${authToken}\` },
|
|
580
|
-
});
|
|
581
|
-
|
|
582
|
-
expect(response.status).toBe(404);
|
|
583
|
-
});
|
|
584
|
-
});
|
|
585
|
-
\`\`\``;
|
|
586
|
-
}
|
|
587
|
-
|
|
588
|
-
/**
|
|
589
|
-
* Get UI test example
|
|
590
|
-
*/
|
|
591
|
-
private getUiExample(): string {
|
|
592
|
-
return `**Example: UI Test with Playwright**
|
|
593
|
-
|
|
594
|
-
\`\`\`typescript
|
|
595
|
-
import { test, expect } from '@playwright/test';
|
|
596
|
-
|
|
597
|
-
test.describe('Login Page', () => {
|
|
598
|
-
test.beforeEach(async ({ page }) => {
|
|
599
|
-
await page.goto('https://example.com/login');
|
|
600
|
-
});
|
|
601
|
-
|
|
602
|
-
test('should show login form', async ({ page }) => {
|
|
603
|
-
await expect(page.locator('input[name="email"]')).toBeVisible();
|
|
604
|
-
await expect(page.locator('input[name="password"]')).toBeVisible();
|
|
605
|
-
await expect(page.locator('button[type="submit"]')).toBeVisible();
|
|
606
|
-
});
|
|
607
|
-
|
|
608
|
-
test('should login with valid credentials', async ({ page }) => {
|
|
609
|
-
await page.fill('input[name="email"]', 'test@example.com');
|
|
610
|
-
await page.fill('input[name="password"]', 'password123');
|
|
611
|
-
await page.click('button[type="submit"]');
|
|
612
|
-
|
|
613
|
-
// Wait for navigation
|
|
614
|
-
await page.waitForURL('**/dashboard');
|
|
615
|
-
await expect(page).toHaveURL(/.*dashboard/);
|
|
616
|
-
});
|
|
617
|
-
|
|
618
|
-
test('should show error with invalid credentials', async ({ page }) => {
|
|
619
|
-
await page.fill('input[name="email"]', 'invalid@example.com');
|
|
620
|
-
await page.fill('input[name="password"]', 'wrongpassword');
|
|
621
|
-
await page.click('button[type="submit"]');
|
|
622
|
-
|
|
623
|
-
await expect(page.locator('.error-message')).toBeVisible();
|
|
624
|
-
await expect(page.locator('.error-message')).toContainText('Invalid credentials');
|
|
625
|
-
});
|
|
626
|
-
|
|
627
|
-
test('should require email field', async ({ page }) => {
|
|
628
|
-
await page.fill('input[name="password"]', 'password123');
|
|
629
|
-
await page.click('button[type="submit"]');
|
|
630
|
-
|
|
631
|
-
await expect(page.locator('input[name="email"]')).toHaveAttribute('required', '');
|
|
632
|
-
});
|
|
633
|
-
});
|
|
634
|
-
\`\`\``;
|
|
635
|
-
}
|
|
636
|
-
|
|
637
|
-
/**
|
|
638
|
-
* Get performance test example
|
|
639
|
-
*/
|
|
640
|
-
private getPerfExample(): string {
|
|
641
|
-
return `**Example: Performance Test with K6**
|
|
642
|
-
|
|
643
|
-
\`\`\`javascript
|
|
644
|
-
import http from 'k6/http';
|
|
645
|
-
import { check, sleep } from 'k6';
|
|
646
|
-
import { Rate } from 'k6/metrics';
|
|
647
|
-
|
|
648
|
-
const errorRate = new Rate('errors');
|
|
649
|
-
|
|
650
|
-
export const options = {
|
|
651
|
-
stages: [
|
|
652
|
-
{ duration: '30s', target: 20 }, // Ramp up
|
|
653
|
-
{ duration: '1m', target: 20 }, // Stay at 20
|
|
654
|
-
{ duration: '20s', target: 0 }, // Ramp down
|
|
655
|
-
],
|
|
656
|
-
thresholds: {
|
|
657
|
-
http_req_duration: ['p(95)<500', 'p(99)<1000'],
|
|
658
|
-
http_req_failed: ['rate<0.01'],
|
|
659
|
-
errors: ['rate<0.05'],
|
|
660
|
-
},
|
|
661
|
-
};
|
|
662
|
-
|
|
663
|
-
const BASE_URL = 'https://api.example.com';
|
|
664
|
-
|
|
665
|
-
export default function () {
|
|
666
|
-
// List users
|
|
667
|
-
const listRes = http.get(\`\${BASE_URL}/users\`);
|
|
668
|
-
check(listRes, {
|
|
669
|
-
'list status is 200': (r) => r.status === 200,
|
|
670
|
-
'list has users': (r) => JSON.parse(r.body).users.length > 0,
|
|
671
|
-
}) || errorRate.add(1);
|
|
672
|
-
|
|
673
|
-
sleep(1);
|
|
674
|
-
|
|
675
|
-
// Get specific user
|
|
676
|
-
const getRes = http.get(\`\${BASE_URL}/users/1\`);
|
|
677
|
-
check(getRes, {
|
|
678
|
-
'get status is 200': (r) => r.status === 200,
|
|
679
|
-
'user has name': (r) => JSON.parse(r.body).name !== undefined,
|
|
680
|
-
}) || errorRate.add(1);
|
|
681
|
-
|
|
682
|
-
sleep(Math.random() * 2 + 1); // Random think time 1-3s
|
|
683
|
-
}
|
|
684
|
-
\`\`\``;
|
|
685
|
-
}
|
|
686
|
-
|
|
687
|
-
/**
|
|
688
|
-
* Get unit test example
|
|
689
|
-
*/
|
|
690
|
-
private getUnitExample(): string {
|
|
691
|
-
return `**Example: Unit Test with Vitest**
|
|
692
|
-
|
|
693
|
-
\`\`\`typescript
|
|
694
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
695
|
-
|
|
696
|
-
describe('UserService', () => {
|
|
697
|
-
let userService: UserService;
|
|
698
|
-
let mockRepository: any;
|
|
699
|
-
|
|
700
|
-
beforeEach(() => {
|
|
701
|
-
mockRepository = {
|
|
702
|
-
findById: vi.fn(),
|
|
703
|
-
create: vi.fn(),
|
|
704
|
-
update: vi.fn(),
|
|
705
|
-
delete: vi.fn(),
|
|
706
|
-
};
|
|
707
|
-
userService = new UserService(mockRepository);
|
|
708
|
-
});
|
|
709
|
-
|
|
710
|
-
describe('findById', () => {
|
|
711
|
-
it('should return user when found', async () => {
|
|
712
|
-
const expectedUser = { id: 1, name: 'Test User' };
|
|
713
|
-
mockRepository.findById.mockResolvedValue(expectedUser);
|
|
714
|
-
|
|
715
|
-
const result = await userService.findById(1);
|
|
716
|
-
|
|
717
|
-
expect(result).toEqual(expectedUser);
|
|
718
|
-
expect(mockRepository.findById).toHaveBeenCalledWith(1);
|
|
719
|
-
});
|
|
720
|
-
|
|
721
|
-
it('should return null when not found', async () => {
|
|
722
|
-
mockRepository.findById.mockResolvedValue(null);
|
|
723
|
-
|
|
724
|
-
const result = await userService.findById(999);
|
|
725
|
-
|
|
726
|
-
expect(result).toBeNull();
|
|
727
|
-
});
|
|
728
|
-
|
|
729
|
-
it('should throw on repository error', async () => {
|
|
730
|
-
mockRepository.findById.mockRejectedValue(new Error('Database error'));
|
|
731
|
-
|
|
732
|
-
await expect(userService.findById(1)).rejects.toThrow('Database error');
|
|
733
|
-
});
|
|
734
|
-
});
|
|
735
|
-
|
|
736
|
-
describe('create', () => {
|
|
737
|
-
it('should create user with valid data', async () => {
|
|
738
|
-
const userData = { name: 'New User', email: 'new@example.com' };
|
|
739
|
-
const createdUser = { id: 1, ...userData };
|
|
740
|
-
mockRepository.create.mockResolvedValue(createdUser);
|
|
741
|
-
|
|
742
|
-
const result = await userService.create(userData);
|
|
743
|
-
|
|
744
|
-
expect(result).toEqual(createdUser);
|
|
745
|
-
expect(mockRepository.create).toHaveBeenCalledWith(userData);
|
|
746
|
-
});
|
|
747
|
-
|
|
748
|
-
it('should throw validation error for invalid email', async () => {
|
|
749
|
-
const userData = { name: 'User', email: 'invalid-email' };
|
|
750
|
-
|
|
751
|
-
await expect(userService.create(userData)).rejects.toThrow('Invalid email');
|
|
752
|
-
});
|
|
753
|
-
});
|
|
754
|
-
});
|
|
755
|
-
\`\`\``;
|
|
756
|
-
}
|
|
757
|
-
|
|
758
|
-
/**
|
|
759
|
-
* Count approximate tokens
|
|
760
|
-
*/
|
|
761
|
-
private countTokens(text: string): number {
|
|
762
|
-
// Rough approximation: ~4 chars per token
|
|
763
|
-
return Math.ceil(text.length / 4);
|
|
764
|
-
}
|
|
765
|
-
}
|
|
766
|
-
|
|
767
|
-
/**
|
|
768
|
-
* Create a prompt builder with default options
|
|
769
|
-
*/
|
|
770
|
-
export function createPromptBuilder(options?: PromptBuilderOptions): PromptBuilder {
|
|
771
|
-
return new PromptBuilder(options);
|
|
772
|
-
}
|