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
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QA360 Selector Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates stable, resilient CSS selectors for web elements
|
|
5
|
+
*/
|
|
6
|
+
import type { ElementInfo } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Generate optimal selector for an element
|
|
9
|
+
*/
|
|
10
|
+
export declare function generateSelector(element: {
|
|
11
|
+
tagName?: string;
|
|
12
|
+
id?: string;
|
|
13
|
+
className?: string;
|
|
14
|
+
attributes?: Record<string, string>;
|
|
15
|
+
textContent?: string;
|
|
16
|
+
role?: string;
|
|
17
|
+
name?: string;
|
|
18
|
+
}): string;
|
|
19
|
+
/**
|
|
20
|
+
* Generate selector from Playwright element handle
|
|
21
|
+
*/
|
|
22
|
+
export declare function generateSelectorFromElement(element: any, page: any): Promise<ElementInfo>;
|
|
23
|
+
/**
|
|
24
|
+
* Optimize selector for resiliency
|
|
25
|
+
*/
|
|
26
|
+
export declare function optimizeSelector(selector: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Generate fallback selectors for resilience
|
|
29
|
+
*/
|
|
30
|
+
export declare function generateFallbackSelectors(primarySelector: string): string[];
|
|
31
|
+
/**
|
|
32
|
+
* Score selector quality (0-100)
|
|
33
|
+
*/
|
|
34
|
+
export declare function scoreSelector(selector: string): number;
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QA360 Selector Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates stable, resilient CSS selectors for web elements
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Selector priority (most stable first)
|
|
8
|
+
*/
|
|
9
|
+
const SELECTOR_PRIORITY = [
|
|
10
|
+
'data-testid', // Best: explicit test attribute
|
|
11
|
+
'data-cy', // Cypress convention
|
|
12
|
+
'data-test', // Common convention
|
|
13
|
+
'data-test-id', // Common convention
|
|
14
|
+
'id', // Good if stable
|
|
15
|
+
'aria-label', // Accessible, usually stable
|
|
16
|
+
'name', // Form field names
|
|
17
|
+
'role + aria-label', // ARIA combo
|
|
18
|
+
'class', // Less stable, use as fallback
|
|
19
|
+
'tag + text', // Content-based
|
|
20
|
+
'nth-child', // Last resort
|
|
21
|
+
];
|
|
22
|
+
/**
|
|
23
|
+
* Generate optimal selector for an element
|
|
24
|
+
*/
|
|
25
|
+
export function generateSelector(element) {
|
|
26
|
+
const { tagName, id, className, attributes = {}, textContent, role, name } = element;
|
|
27
|
+
// 1. Best: data-testid or similar test attributes
|
|
28
|
+
for (const attr of ['data-testid', 'data-cy', 'data-test', 'data-test-id']) {
|
|
29
|
+
if (attributes[attr]) {
|
|
30
|
+
return `[${attr}="${attributes[attr]}"]`;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// 2. ID (if not auto-generated)
|
|
34
|
+
if (id && !isGeneratedId(id)) {
|
|
35
|
+
return `#${escapeCss(id)}`;
|
|
36
|
+
}
|
|
37
|
+
// 3. aria-label (accessible and stable)
|
|
38
|
+
if (attributes['aria-label']) {
|
|
39
|
+
return `[aria-label="${escapeCss(attributes['aria-label'])}"]`;
|
|
40
|
+
}
|
|
41
|
+
// 4. Form field name
|
|
42
|
+
if (name) {
|
|
43
|
+
return `[name="${escapeCss(name)}"]`;
|
|
44
|
+
}
|
|
45
|
+
// 5. Role + label combination
|
|
46
|
+
if (role && attributes['aria-label']) {
|
|
47
|
+
return `[role="${role}"][aria-label="${escapeCss(attributes['aria-label'])}"]`;
|
|
48
|
+
}
|
|
49
|
+
// 6. Class (avoid if too generic)
|
|
50
|
+
if (className && !isGenericClass(className)) {
|
|
51
|
+
const classes = className.split(' ').filter(c => !isGenericClass(c));
|
|
52
|
+
if (classes.length > 0) {
|
|
53
|
+
// Smart class selection: prioritize meaningful classes
|
|
54
|
+
const meaningfulClasses = selectMeaningfulClasses(classes);
|
|
55
|
+
const classSelector = meaningfulClasses.map(c => `.${escapeCss(c)}`).join('');
|
|
56
|
+
// Limit total selector length
|
|
57
|
+
const qualifiedSelector = tagName ? `${tagName}${classSelector}` : classSelector;
|
|
58
|
+
return truncateSelector(qualifiedSelector, 200);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// 7. Tag + text content (for buttons, links)
|
|
62
|
+
if (tagName && textContent && textContent.trim()) {
|
|
63
|
+
const text = textContent.trim().slice(0, 50);
|
|
64
|
+
return `${tagName}:has-text("${escapeCss(text)}")`;
|
|
65
|
+
}
|
|
66
|
+
// 8. Tag only (last resort)
|
|
67
|
+
return tagName || '*';
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Generate selector from Playwright element handle
|
|
71
|
+
*/
|
|
72
|
+
export async function generateSelectorFromElement(element, page) {
|
|
73
|
+
try {
|
|
74
|
+
// Get all attributes
|
|
75
|
+
const attributes = await element.evaluate((el) => {
|
|
76
|
+
const attrs = {};
|
|
77
|
+
for (const attr of el.attributes || []) {
|
|
78
|
+
attrs[attr.name] = attr.value;
|
|
79
|
+
}
|
|
80
|
+
return attrs;
|
|
81
|
+
});
|
|
82
|
+
// Get basic info
|
|
83
|
+
const tagName = await element.evaluate((el) => el.tagName?.toLowerCase());
|
|
84
|
+
const textContent = await element.evaluate((el) => el.textContent?.trim());
|
|
85
|
+
const className = attributes.class || attributes.className;
|
|
86
|
+
const id = attributes.id;
|
|
87
|
+
const role = attributes.role || attributes['role'];
|
|
88
|
+
const name = attributes.name;
|
|
89
|
+
// Generate selector
|
|
90
|
+
const selector = generateSelector({
|
|
91
|
+
tagName,
|
|
92
|
+
id,
|
|
93
|
+
className,
|
|
94
|
+
attributes,
|
|
95
|
+
textContent,
|
|
96
|
+
role,
|
|
97
|
+
name,
|
|
98
|
+
});
|
|
99
|
+
// Determine stability
|
|
100
|
+
const stable = isSelectorStable(selector);
|
|
101
|
+
return {
|
|
102
|
+
selector,
|
|
103
|
+
text: textContent || undefined,
|
|
104
|
+
ariaLabel: attributes['aria-label'],
|
|
105
|
+
testId: attributes['data-testid'] || attributes['data-cy'] || attributes['data-test'],
|
|
106
|
+
role: role || undefined,
|
|
107
|
+
type: tagName || 'unknown',
|
|
108
|
+
stable,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
// Fallback
|
|
113
|
+
return {
|
|
114
|
+
selector: 'unknown',
|
|
115
|
+
type: 'unknown',
|
|
116
|
+
stable: false,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Check if ID is auto-generated (not stable)
|
|
122
|
+
*/
|
|
123
|
+
function isGeneratedId(id) {
|
|
124
|
+
// Patterns indicating auto-generated IDs
|
|
125
|
+
const generatedPatterns = [
|
|
126
|
+
/^\w+_\d+$/, // react_123, vue_456
|
|
127
|
+
/^(ember|ember)\d+$/, // ember1234
|
|
128
|
+
/^yui_[^_]+_\d+$/, // yui_gen_123
|
|
129
|
+
/^\w+-\w+-\w+$/, // random-hash patterns
|
|
130
|
+
/^[a-f0-9]{8,}$/, // hex hashes
|
|
131
|
+
];
|
|
132
|
+
return generatedPatterns.some(pattern => pattern.test(id));
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Check if class is too generic
|
|
136
|
+
*/
|
|
137
|
+
function isGenericClass(className) {
|
|
138
|
+
const genericClasses = [
|
|
139
|
+
'active', 'inactive', 'selected', 'disabled', 'enabled',
|
|
140
|
+
'hidden', 'visible', 'show', 'hide', 'open', 'closed',
|
|
141
|
+
'first', 'last', 'odd', 'even',
|
|
142
|
+
'container', 'wrapper', 'content', 'section',
|
|
143
|
+
'btn', 'button', 'input', 'form', 'field',
|
|
144
|
+
'row', 'col', 'column', 'grid',
|
|
145
|
+
];
|
|
146
|
+
const classes = className.split(' ');
|
|
147
|
+
return classes.every(c => genericClasses.includes(c));
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Check if selector is considered stable
|
|
151
|
+
*/
|
|
152
|
+
function isSelectorStable(selector) {
|
|
153
|
+
// Stable selectors: data-testid, aria-label, stable IDs
|
|
154
|
+
const stablePatterns = [
|
|
155
|
+
/\[data-(testid|test|test-id|cy)/,
|
|
156
|
+
/\[aria-label=/,
|
|
157
|
+
/\[name=/,
|
|
158
|
+
/#\w[\w-]*\w/, // ID with word chars
|
|
159
|
+
];
|
|
160
|
+
// Unstable selectors: nth-child, generated classes
|
|
161
|
+
const unstablePatterns = [
|
|
162
|
+
/:nth-child/,
|
|
163
|
+
/:\w+-\w+-\w+/, // hash-like classes
|
|
164
|
+
];
|
|
165
|
+
const hasStable = stablePatterns.some(p => p.test(selector));
|
|
166
|
+
const hasUnstable = unstablePatterns.some(p => p.test(selector));
|
|
167
|
+
return hasStable || !hasUnstable;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Escape special CSS characters
|
|
171
|
+
*/
|
|
172
|
+
function escapeCss(str) {
|
|
173
|
+
return str.replace(/(["\\])/g, '\\$1').replace(/"/g, '\\"');
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Select the most meaningful classes from a class list
|
|
177
|
+
* Prioritizes: unique identifiers, component names, action-oriented classes
|
|
178
|
+
* Deprioritizes: utility classes (spacing, colors, sizing)
|
|
179
|
+
*/
|
|
180
|
+
function selectMeaningfulClasses(classes) {
|
|
181
|
+
// Tailwind and other utility class patterns to deprioritize
|
|
182
|
+
const utilityPatterns = [
|
|
183
|
+
/^(p|m|px|py|pt|pb|pl|pr)-/, // spacing
|
|
184
|
+
/^(mt|mb|ml|mr)-/, // margin spacing
|
|
185
|
+
/^(text|bg|border)-/, // colors
|
|
186
|
+
/^(w|h)-/, // sizing
|
|
187
|
+
/^(flex|grid|block|inline)/, // display
|
|
188
|
+
/^(justify|items|self)/, // flexbox/grid
|
|
189
|
+
/^(rounded|shadow|opacity)/, // styling
|
|
190
|
+
/^gap-/, // flex gap
|
|
191
|
+
/^(line-)?height-/, // height
|
|
192
|
+
/^(font|weight|size)/, // typography
|
|
193
|
+
];
|
|
194
|
+
// Score each class by "meaningfulness"
|
|
195
|
+
const scored = classes.map(cls => {
|
|
196
|
+
let score = 50; // base score
|
|
197
|
+
// Bonus: component-like names (contain meaningful words)
|
|
198
|
+
if (/[A-Z][a-z]+/.test(cls))
|
|
199
|
+
score += 30; // CamelCase components
|
|
200
|
+
if (/button|btn|input|form|card|modal|nav|header|footer|sidebar|menu|dropdown/i.test(cls))
|
|
201
|
+
score += 25;
|
|
202
|
+
// Bonus: contains numbers (likely unique)
|
|
203
|
+
if (/\d+/.test(cls))
|
|
204
|
+
score += 15;
|
|
205
|
+
// Penalty: utility classes
|
|
206
|
+
for (const pattern of utilityPatterns) {
|
|
207
|
+
if (pattern.test(cls)) {
|
|
208
|
+
score -= 40;
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return { class: cls, score };
|
|
213
|
+
});
|
|
214
|
+
// Sort by score (descending) and take top 5
|
|
215
|
+
scored.sort((a, b) => b.score - a.score);
|
|
216
|
+
return scored.slice(0, 5).map(s => s.class);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Truncate selector to max length while keeping it valid
|
|
220
|
+
* Preserves the most specific parts
|
|
221
|
+
*/
|
|
222
|
+
function truncateSelector(selector, maxLength) {
|
|
223
|
+
if (selector.length <= maxLength)
|
|
224
|
+
return selector;
|
|
225
|
+
// For class-based selectors, remove classes from the middle
|
|
226
|
+
const classMatch = selector.match(/^(\w+)((\.[\w-]+)+)$/);
|
|
227
|
+
if (classMatch) {
|
|
228
|
+
const tag = classMatch[1];
|
|
229
|
+
const classes = classMatch[2].split('.').filter(c => c); // Remove empty strings
|
|
230
|
+
// Keep first 2 and last 2 classes (most specific)
|
|
231
|
+
if (classes.length > 4) {
|
|
232
|
+
const kept = [...classes.slice(0, 2), ...classes.slice(-2)];
|
|
233
|
+
const truncated = `${tag}.${kept.join('.')}`;
|
|
234
|
+
if (truncated.length <= maxLength)
|
|
235
|
+
return truncated;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// Final fallback: just truncate (may not be valid CSS but prevents overflow)
|
|
239
|
+
return selector.substring(0, maxLength - 3) + '...';
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Optimize selector for resiliency
|
|
243
|
+
*/
|
|
244
|
+
export function optimizeSelector(selector) {
|
|
245
|
+
// Remove unnecessary descendants
|
|
246
|
+
let optimized = selector.replace(/\s*>\s*/g, ' > ');
|
|
247
|
+
// Use :has() for more specific targeting
|
|
248
|
+
if (optimized.includes(' ')) {
|
|
249
|
+
const parts = optimized.split(' ');
|
|
250
|
+
if (parts.length > 3) {
|
|
251
|
+
// Keep only the last 3 parts for specificity
|
|
252
|
+
optimized = parts.slice(-3).join(' ');
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return optimized;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Generate fallback selectors for resilience
|
|
259
|
+
*/
|
|
260
|
+
export function generateFallbackSelectors(primarySelector) {
|
|
261
|
+
const fallbacks = [];
|
|
262
|
+
// If primary is data-testid, add aria-label fallback
|
|
263
|
+
if (primarySelector.includes('[data-testid')) {
|
|
264
|
+
const testId = primarySelector.match(/\[data-testid="([^"]+)"\]/)?.[1];
|
|
265
|
+
if (testId) {
|
|
266
|
+
// Try aria-label with similar text
|
|
267
|
+
fallbacks.push(`[aria-label="${testId}"]`);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
// If primary is ID, add name fallback
|
|
271
|
+
if (primarySelector.startsWith('#')) {
|
|
272
|
+
const id = primarySelector.slice(1);
|
|
273
|
+
fallbacks.push(`[name="${id}"]`);
|
|
274
|
+
}
|
|
275
|
+
// Add generic fallback based on tag
|
|
276
|
+
const tagMatch = primarySelector.match(/^(\w+)/);
|
|
277
|
+
if (tagMatch) {
|
|
278
|
+
fallbacks.push(tagMatch[1]);
|
|
279
|
+
}
|
|
280
|
+
return fallbacks;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Score selector quality (0-100)
|
|
284
|
+
*/
|
|
285
|
+
export function scoreSelector(selector) {
|
|
286
|
+
let score = 50; // Base score
|
|
287
|
+
// Bonus for test attributes
|
|
288
|
+
if (selector.includes('[data-testid'))
|
|
289
|
+
score += 40;
|
|
290
|
+
else if (selector.includes('[data-test'))
|
|
291
|
+
score += 35;
|
|
292
|
+
else if (selector.includes('[data-cy'))
|
|
293
|
+
score += 30;
|
|
294
|
+
else if (selector.includes('[aria-label'))
|
|
295
|
+
score += 25;
|
|
296
|
+
else if (selector.startsWith('#'))
|
|
297
|
+
score += 20;
|
|
298
|
+
else if (selector.includes('[name='))
|
|
299
|
+
score += 15;
|
|
300
|
+
// Penalty for unstable patterns
|
|
301
|
+
if (selector.includes(':nth-child'))
|
|
302
|
+
score -= 30;
|
|
303
|
+
if (selector.includes(':has-text'))
|
|
304
|
+
score -= 10;
|
|
305
|
+
// Bonus for specificity balance
|
|
306
|
+
if (!selector.includes(' '))
|
|
307
|
+
score += 5; // Simple selector
|
|
308
|
+
return Math.max(0, Math.min(100, score));
|
|
309
|
+
}
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QA360 Web Crawler - Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Automatically discovers and analyzes web applications for E2E test generation
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Crawler configuration options
|
|
8
|
+
*/
|
|
9
|
+
export interface CrawlOptions {
|
|
10
|
+
/** Base URL to start crawling */
|
|
11
|
+
baseUrl: string;
|
|
12
|
+
/** Maximum depth to follow links (default: 3) */
|
|
13
|
+
maxDepth?: number;
|
|
14
|
+
/** Maximum number of pages to crawl (default: 50) */
|
|
15
|
+
maxPages?: number;
|
|
16
|
+
/** Follow internal links (default: true) */
|
|
17
|
+
followLinks?: boolean;
|
|
18
|
+
/** Discover and analyze forms (default: true) */
|
|
19
|
+
discoverForms?: boolean;
|
|
20
|
+
/** Discover buttons and actions (default: true) */
|
|
21
|
+
discoverButtons?: boolean;
|
|
22
|
+
/** Regex patterns to exclude (e.g., ['/admin', '/logout', '/api']) */
|
|
23
|
+
excludePatterns?: string[];
|
|
24
|
+
/** Authentication for protected areas */
|
|
25
|
+
auth?: CrawlAuth;
|
|
26
|
+
/** Timeout per page in milliseconds (default: 30000) */
|
|
27
|
+
timeout?: number;
|
|
28
|
+
/** Whether to take screenshots (default: false) */
|
|
29
|
+
screenshots?: boolean;
|
|
30
|
+
/** Headless mode (default: true) */
|
|
31
|
+
headless?: boolean;
|
|
32
|
+
/** Wait for network idle before analysis (default: true) */
|
|
33
|
+
waitForNetworkIdle?: boolean;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Authentication for crawling
|
|
37
|
+
*/
|
|
38
|
+
export interface CrawlAuth {
|
|
39
|
+
/** Type of authentication */
|
|
40
|
+
type: 'basic' | 'form' | 'bearer' | 'cookie';
|
|
41
|
+
/** URL for login form (for type: 'form') */
|
|
42
|
+
loginUrl?: string;
|
|
43
|
+
/** Username */
|
|
44
|
+
username?: string;
|
|
45
|
+
/** Password */
|
|
46
|
+
password?: string;
|
|
47
|
+
/** Username selector (for type: 'form') */
|
|
48
|
+
usernameSelector?: string;
|
|
49
|
+
/** Password selector (for type: 'form') */
|
|
50
|
+
passwordSelector?: string;
|
|
51
|
+
/** Submit button selector (for type: 'form') */
|
|
52
|
+
submitSelector?: string;
|
|
53
|
+
/** Bearer token (for type: 'bearer') */
|
|
54
|
+
token?: string;
|
|
55
|
+
/** Cookies (for type: 'cookie') */
|
|
56
|
+
cookies?: Array<{
|
|
57
|
+
name: string;
|
|
58
|
+
value: string;
|
|
59
|
+
domain?: string;
|
|
60
|
+
}>;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Element information discovered on a page
|
|
64
|
+
*/
|
|
65
|
+
export interface ElementInfo {
|
|
66
|
+
/** CSS selector (optimized for stability) */
|
|
67
|
+
selector: string;
|
|
68
|
+
/** Text content */
|
|
69
|
+
text?: string;
|
|
70
|
+
/** aria-label if present */
|
|
71
|
+
ariaLabel?: string;
|
|
72
|
+
/** data-testid if present */
|
|
73
|
+
testId?: string;
|
|
74
|
+
/** Element role */
|
|
75
|
+
role?: string;
|
|
76
|
+
/** Element type */
|
|
77
|
+
type: string;
|
|
78
|
+
/** Whether selector is considered stable */
|
|
79
|
+
stable: boolean;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Form field information
|
|
83
|
+
*/
|
|
84
|
+
export interface FieldInfo extends ElementInfo {
|
|
85
|
+
/** Field input type */
|
|
86
|
+
inputType: string;
|
|
87
|
+
/** Field name */
|
|
88
|
+
name?: string;
|
|
89
|
+
/** Whether field is required */
|
|
90
|
+
required: boolean;
|
|
91
|
+
/** Placeholder text */
|
|
92
|
+
placeholder?: string;
|
|
93
|
+
/** Options for select elements */
|
|
94
|
+
options?: string[];
|
|
95
|
+
/** Validation attributes */
|
|
96
|
+
validation?: {
|
|
97
|
+
min?: number | string;
|
|
98
|
+
max?: number | string;
|
|
99
|
+
pattern?: string;
|
|
100
|
+
minLength?: number;
|
|
101
|
+
maxLength?: number;
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Form definition discovered on a page
|
|
106
|
+
*/
|
|
107
|
+
export interface FormInfo {
|
|
108
|
+
/** Form action/endpoint */
|
|
109
|
+
action?: string;
|
|
110
|
+
/** Form method */
|
|
111
|
+
method?: string;
|
|
112
|
+
/** Stable selector for the form */
|
|
113
|
+
selector: string;
|
|
114
|
+
/** Form purpose (detected) */
|
|
115
|
+
purpose: 'login' | 'signup' | 'search' | 'contact' | 'checkout' | 'filter' | 'other';
|
|
116
|
+
/** All fields in the form */
|
|
117
|
+
fields: FieldInfo[];
|
|
118
|
+
/** Submit button */
|
|
119
|
+
submitButton?: ElementInfo;
|
|
120
|
+
/** Confidence score for purpose detection (0-1) */
|
|
121
|
+
confidence: number;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Link information
|
|
125
|
+
*/
|
|
126
|
+
export interface LinkInfo extends ElementInfo {
|
|
127
|
+
/** href URL */
|
|
128
|
+
url: string;
|
|
129
|
+
/** Whether link is internal to the domain */
|
|
130
|
+
internal: boolean;
|
|
131
|
+
/** Whether link was visited */
|
|
132
|
+
visited: boolean;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Page definition after crawling
|
|
136
|
+
*/
|
|
137
|
+
export interface PageDefinition {
|
|
138
|
+
/** Full URL */
|
|
139
|
+
url: string;
|
|
140
|
+
/** Path relative to base */
|
|
141
|
+
path: string;
|
|
142
|
+
/** Page title */
|
|
143
|
+
title: string;
|
|
144
|
+
/** Depth from base URL */
|
|
145
|
+
depth: number;
|
|
146
|
+
/** HTTP status code */
|
|
147
|
+
status: number;
|
|
148
|
+
/** Load time in milliseconds */
|
|
149
|
+
loadTime: number;
|
|
150
|
+
/** Content type */
|
|
151
|
+
contentType?: string;
|
|
152
|
+
/** Meta description */
|
|
153
|
+
description?: string;
|
|
154
|
+
/** All discovered elements */
|
|
155
|
+
elements: {
|
|
156
|
+
/** Buttons on the page */
|
|
157
|
+
buttons: ElementInfo[];
|
|
158
|
+
/** Links on the page */
|
|
159
|
+
links: LinkInfo[];
|
|
160
|
+
/** Forms on the page */
|
|
161
|
+
forms: FormInfo[];
|
|
162
|
+
/** Input fields (standalone) */
|
|
163
|
+
inputs: FieldInfo[];
|
|
164
|
+
/** Select dropdowns */
|
|
165
|
+
selects: FieldInfo[];
|
|
166
|
+
/** Checkboxes */
|
|
167
|
+
checkboxes: ElementInfo[];
|
|
168
|
+
/** Radio buttons */
|
|
169
|
+
radios: ElementInfo[];
|
|
170
|
+
};
|
|
171
|
+
/** Navigation elements detected */
|
|
172
|
+
navigation: {
|
|
173
|
+
/** Main navigation menu */
|
|
174
|
+
main?: {
|
|
175
|
+
selector: string;
|
|
176
|
+
items: LinkInfo[];
|
|
177
|
+
};
|
|
178
|
+
/** Breadcrumb */
|
|
179
|
+
breadcrumb?: {
|
|
180
|
+
selector: string;
|
|
181
|
+
items: Array<{
|
|
182
|
+
text: string;
|
|
183
|
+
url: string;
|
|
184
|
+
}>;
|
|
185
|
+
};
|
|
186
|
+
/** Pagination */
|
|
187
|
+
pagination?: {
|
|
188
|
+
selector: string;
|
|
189
|
+
nextPage?: LinkInfo;
|
|
190
|
+
prevPage?: LinkInfo;
|
|
191
|
+
};
|
|
192
|
+
/** Footer links */
|
|
193
|
+
footer?: {
|
|
194
|
+
selector: string;
|
|
195
|
+
items: LinkInfo[];
|
|
196
|
+
};
|
|
197
|
+
};
|
|
198
|
+
/** Screenshot (base64) */
|
|
199
|
+
screenshot?: string;
|
|
200
|
+
/** Accessibility snapshot */
|
|
201
|
+
accessibility?: A11ySnapshot;
|
|
202
|
+
/** Page type detected */
|
|
203
|
+
pageType: 'homepage' | 'listing' | 'detail' | 'form' | 'dashboard' | 'login' | 'signup' | 'other';
|
|
204
|
+
/** Confidence for page type (0-1) */
|
|
205
|
+
pageTypeConfidence: number;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Accessibility snapshot from axe-core
|
|
209
|
+
*/
|
|
210
|
+
export interface A11ySnapshot {
|
|
211
|
+
/** Accessibility score (0-100) */
|
|
212
|
+
score: number;
|
|
213
|
+
/** Violations found */
|
|
214
|
+
violations: Array<{
|
|
215
|
+
id: string;
|
|
216
|
+
impact: 'critical' | 'serious' | 'moderate' | 'minor';
|
|
217
|
+
description: string;
|
|
218
|
+
nodes: number;
|
|
219
|
+
selectors: string[];
|
|
220
|
+
}>;
|
|
221
|
+
/** Pass count */
|
|
222
|
+
passes: number;
|
|
223
|
+
/** Incomplete checks */
|
|
224
|
+
incomplete: number;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* User journey discovered
|
|
228
|
+
*/
|
|
229
|
+
export interface UserJourney {
|
|
230
|
+
/** Journey name */
|
|
231
|
+
name: string;
|
|
232
|
+
/** Journey description */
|
|
233
|
+
description: string;
|
|
234
|
+
/** Journey type */
|
|
235
|
+
type: 'authentication' | 'navigation' | 'transaction' | 'search' | 'form-submission' | 'other';
|
|
236
|
+
/** Steps in the journey */
|
|
237
|
+
steps: JourneyStep[];
|
|
238
|
+
/** Entry point URL */
|
|
239
|
+
entryPoint: string;
|
|
240
|
+
/** Expected final URL */
|
|
241
|
+
finalUrl?: string;
|
|
242
|
+
/** Estimated duration in seconds */
|
|
243
|
+
estimatedDuration: number;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Single step in a user journey
|
|
247
|
+
*/
|
|
248
|
+
export interface JourneyStep {
|
|
249
|
+
/** Step order */
|
|
250
|
+
order: number;
|
|
251
|
+
/** Step description */
|
|
252
|
+
description: string;
|
|
253
|
+
/** Action to perform */
|
|
254
|
+
action: JourneyAction;
|
|
255
|
+
/** Target selector */
|
|
256
|
+
selector?: string;
|
|
257
|
+
/** Value to input (for fill actions) */
|
|
258
|
+
value?: string;
|
|
259
|
+
/** Expected outcome */
|
|
260
|
+
expected?: {
|
|
261
|
+
/** Expected URL after action */
|
|
262
|
+
url?: string;
|
|
263
|
+
/** Expected visible element */
|
|
264
|
+
visible?: string;
|
|
265
|
+
/** Expected text content */
|
|
266
|
+
text?: string;
|
|
267
|
+
};
|
|
268
|
+
/** Wait time in ms */
|
|
269
|
+
wait?: number;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Journey action types
|
|
273
|
+
*/
|
|
274
|
+
export type JourneyAction = 'navigate' | 'click' | 'fill' | 'select' | 'check' | 'uncheck' | 'upload' | 'hover' | 'press' | 'waitFor' | 'waitForNavigation' | 'scroll';
|
|
275
|
+
/**
|
|
276
|
+
* Site map structure
|
|
277
|
+
*/
|
|
278
|
+
export interface SiteMap {
|
|
279
|
+
/** Base URL */
|
|
280
|
+
baseUrl: string;
|
|
281
|
+
/** All discovered pages */
|
|
282
|
+
pages: PageDefinition[];
|
|
283
|
+
/** Pages by depth */
|
|
284
|
+
pagesByDepth: Record<number, PageDefinition[]>;
|
|
285
|
+
/** Orphan pages (no links to them) */
|
|
286
|
+
orphans: PageDefinition[];
|
|
287
|
+
/** Page type distribution */
|
|
288
|
+
pageTypeDistribution: Record<string, number>;
|
|
289
|
+
/** Total unique links */
|
|
290
|
+
totalLinks: number;
|
|
291
|
+
/** Total forms */
|
|
292
|
+
totalForms: number;
|
|
293
|
+
/** Crawl metadata */
|
|
294
|
+
metadata: {
|
|
295
|
+
/** Pages crawled */
|
|
296
|
+
pagesCrawled: number;
|
|
297
|
+
/** Pages skipped (excluded) */
|
|
298
|
+
pagesSkipped: number;
|
|
299
|
+
/** Pages failed */
|
|
300
|
+
pagesFailed: number;
|
|
301
|
+
/** Total duration in ms */
|
|
302
|
+
duration: number;
|
|
303
|
+
/** Average page load time */
|
|
304
|
+
avgLoadTime: number;
|
|
305
|
+
/** Max depth reached */
|
|
306
|
+
maxDepth: number;
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Complete crawl result
|
|
311
|
+
*/
|
|
312
|
+
export interface CrawlResult {
|
|
313
|
+
/** Success status */
|
|
314
|
+
success: boolean;
|
|
315
|
+
/** Site map */
|
|
316
|
+
siteMap: SiteMap;
|
|
317
|
+
/** Discovered user journeys */
|
|
318
|
+
userJourneys: UserJourney[];
|
|
319
|
+
/** Forms requiring testing */
|
|
320
|
+
forms: FormInfo[];
|
|
321
|
+
/** Pages requiring accessibility testing */
|
|
322
|
+
accessibilityIssues: Array<{
|
|
323
|
+
page: string;
|
|
324
|
+
score: number;
|
|
325
|
+
violations: A11ySnapshot['violations'];
|
|
326
|
+
}>;
|
|
327
|
+
/** Warnings */
|
|
328
|
+
warnings: string[];
|
|
329
|
+
/** Errors */
|
|
330
|
+
errors: Array<{
|
|
331
|
+
page: string;
|
|
332
|
+
error: string;
|
|
333
|
+
}>;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Crawler progress callback
|
|
337
|
+
*/
|
|
338
|
+
export interface CrawlProgress {
|
|
339
|
+
/** Current page being crawled */
|
|
340
|
+
currentPage: string;
|
|
341
|
+
/** Pages completed */
|
|
342
|
+
completed: number;
|
|
343
|
+
/** Total pages to crawl */
|
|
344
|
+
total: number;
|
|
345
|
+
/** Percentage complete */
|
|
346
|
+
progress: number;
|
|
347
|
+
/** Current depth */
|
|
348
|
+
depth: number;
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Crawler events
|
|
352
|
+
*/
|
|
353
|
+
export type CrawlEventHandler = (event: 'page-start' | 'page-complete' | 'page-error' | 'journey-discovered' | 'complete', data: CrawlProgress | PageDefinition | UserJourney | CrawlResult) => void;
|