qa360 2.2.1 → 2.2.7
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.
Potentially problematic release.
This version of qa360 might be problematic. Click here for more details.
- 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/core/coverage/analyzer.d.ts +101 -0
- package/cli/dist/core/core/coverage/analyzer.js +415 -0
- package/cli/dist/core/core/coverage/collector.d.ts +74 -0
- package/cli/dist/core/core/coverage/collector.js +459 -0
- package/cli/dist/core/core/coverage/config.d.ts +37 -0
- package/cli/dist/core/core/coverage/config.js +156 -0
- package/cli/dist/core/core/coverage/index.d.ts +11 -0
- package/cli/dist/core/core/coverage/index.js +15 -0
- package/cli/dist/core/core/coverage/types.d.ts +267 -0
- package/cli/dist/core/core/coverage/types.js +6 -0
- package/cli/dist/core/core/coverage/vault.d.ts +95 -0
- package/cli/dist/core/core/coverage/vault.js +405 -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 +240 -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 +231 -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 +322 -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 +61 -0
- package/cli/dist/core/pack-v2/migrator.js +480 -0
- package/cli/dist/core/pack-v2/validator.d.ts +65 -0
- package/cli/dist/core/pack-v2/validator.js +628 -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 +1312 -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 +25 -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,304 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry Vault Integration
|
|
3
|
+
*
|
|
4
|
+
* Stores retry history and statistics in the Evidence Vault.
|
|
5
|
+
*/
|
|
6
|
+
import { promisify } from 'util';
|
|
7
|
+
import { RetryStrategy } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Retry Vault class
|
|
10
|
+
*/
|
|
11
|
+
export class RetryVault {
|
|
12
|
+
db;
|
|
13
|
+
dbRun;
|
|
14
|
+
dbAll;
|
|
15
|
+
dbGet;
|
|
16
|
+
constructor(db) {
|
|
17
|
+
this.db = db;
|
|
18
|
+
this.dbRun = promisify(db.run.bind(db));
|
|
19
|
+
this.dbAll = promisify(db.all.bind(db));
|
|
20
|
+
this.dbGet = promisify(db.get.bind(db));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Initialize retry tables
|
|
24
|
+
*/
|
|
25
|
+
async initialize() {
|
|
26
|
+
const schema = `
|
|
27
|
+
-- Retry history table
|
|
28
|
+
CREATE TABLE IF NOT EXISTS retry_history (
|
|
29
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
30
|
+
run_id TEXT NOT NULL REFERENCES runs(id) ON DELETE CASCADE,
|
|
31
|
+
test_id TEXT NOT NULL,
|
|
32
|
+
test_name TEXT NOT NULL,
|
|
33
|
+
gate TEXT NOT NULL,
|
|
34
|
+
strategy TEXT NOT NULL,
|
|
35
|
+
max_retries INTEGER NOT NULL,
|
|
36
|
+
actual_attempts INTEGER NOT NULL,
|
|
37
|
+
success BOOLEAN NOT NULL,
|
|
38
|
+
successful_attempt INTEGER,
|
|
39
|
+
total_duration_ms INTEGER NOT NULL,
|
|
40
|
+
stop_reason TEXT NOT NULL,
|
|
41
|
+
error_type TEXT,
|
|
42
|
+
error_message TEXT,
|
|
43
|
+
flakiness_score REAL,
|
|
44
|
+
pattern_type TEXT,
|
|
45
|
+
timestamp INTEGER NOT NULL
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
CREATE INDEX IF NOT EXISTS idx_retry_run_id ON retry_history(run_id);
|
|
49
|
+
CREATE INDEX IF NOT EXISTS idx_retry_test_id ON retry_history(test_id);
|
|
50
|
+
CREATE INDEX IF NOT EXISTS idx_retry_strategy ON retry_history(strategy);
|
|
51
|
+
CREATE INDEX IF NOT EXISTS idx_retry_success ON retry_history(success);
|
|
52
|
+
CREATE INDEX IF NOT EXISTS idx_retry_timestamp ON retry_history(timestamp);
|
|
53
|
+
|
|
54
|
+
-- Retry statistics summary table
|
|
55
|
+
CREATE TABLE IF NOT EXISTS retry_stats (
|
|
56
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
57
|
+
date TEXT NOT NULL,
|
|
58
|
+
total_retries INTEGER NOT NULL DEFAULT 0,
|
|
59
|
+
tests_retried INTEGER NOT NULL DEFAULT 0,
|
|
60
|
+
recovered_tests INTEGER NOT NULL DEFAULT 0,
|
|
61
|
+
failed_tests INTEGER NOT NULL DEFAULT 0,
|
|
62
|
+
recovery_rate REAL NOT NULL DEFAULT 0,
|
|
63
|
+
avg_attempts_per_test REAL NOT NULL DEFAULT 0,
|
|
64
|
+
total_retry_time_ms INTEGER NOT NULL DEFAULT 0,
|
|
65
|
+
UNIQUE(date)
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
CREATE INDEX IF NOT EXISTS idx_retry_stats_date ON retry_stats(date);
|
|
69
|
+
|
|
70
|
+
-- Strategy performance table
|
|
71
|
+
CREATE TABLE IF NOT EXISTS retry_strategy_performance (
|
|
72
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
73
|
+
strategy TEXT NOT NULL,
|
|
74
|
+
date TEXT NOT NULL,
|
|
75
|
+
attempts INTEGER NOT NULL DEFAULT 0,
|
|
76
|
+
successes INTEGER NOT NULL DEFAULT 0,
|
|
77
|
+
avg_duration_ms REAL NOT NULL DEFAULT 0,
|
|
78
|
+
UNIQUE(strategy, date)
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
CREATE INDEX IF NOT EXISTS idx_retry_strategy_perf_date ON retry_strategy_performance(date);
|
|
82
|
+
`;
|
|
83
|
+
const statements = schema
|
|
84
|
+
.split(';')
|
|
85
|
+
.map(s => s.trim())
|
|
86
|
+
.filter(s => s.length > 0);
|
|
87
|
+
for (const statement of statements) {
|
|
88
|
+
await this.dbRun(statement, []);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Store retry result
|
|
93
|
+
*/
|
|
94
|
+
async storeRetryResult(runId, result, context) {
|
|
95
|
+
const lastAttempt = result.attempts[result.attempts.length - 1];
|
|
96
|
+
const errorType = lastAttempt?.errorType;
|
|
97
|
+
const errorMessage = lastAttempt?.errorMessage;
|
|
98
|
+
const sql = `
|
|
99
|
+
INSERT INTO retry_history (
|
|
100
|
+
run_id, test_id, test_name, gate, strategy, max_retries,
|
|
101
|
+
actual_attempts, success, successful_attempt, total_duration_ms,
|
|
102
|
+
stop_reason, error_type, error_message, flakiness_score, pattern_type, timestamp
|
|
103
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
104
|
+
`;
|
|
105
|
+
const result2 = await this.dbRun(sql, [
|
|
106
|
+
runId,
|
|
107
|
+
result.testId,
|
|
108
|
+
context?.testName || result.testId,
|
|
109
|
+
context?.gate || 'unknown',
|
|
110
|
+
result.strategy,
|
|
111
|
+
result.totalAttempts - 1, // max_retries = attempts - 1 (first attempt is not a retry)
|
|
112
|
+
result.totalAttempts,
|
|
113
|
+
result.success ? 1 : 0,
|
|
114
|
+
result.successfulAttempt || null,
|
|
115
|
+
result.totalDurationMs,
|
|
116
|
+
result.stopReason,
|
|
117
|
+
errorType || null,
|
|
118
|
+
errorMessage || null,
|
|
119
|
+
context?.flakinessScore || null,
|
|
120
|
+
context?.patternType || null,
|
|
121
|
+
Date.now()
|
|
122
|
+
]);
|
|
123
|
+
// Update statistics
|
|
124
|
+
await this.updateStatistics(result);
|
|
125
|
+
return result2.lastID;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get retry history for a test
|
|
129
|
+
*/
|
|
130
|
+
async getRetryHistory(testId, limit = 50) {
|
|
131
|
+
const rows = await this.dbAll(`SELECT * FROM retry_history WHERE test_id = ? ORDER BY timestamp DESC LIMIT ?`, [testId, limit]);
|
|
132
|
+
return this.mapRowsToRecords(rows);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get retry history for a run
|
|
136
|
+
*/
|
|
137
|
+
async getRetryHistoryForRun(runId) {
|
|
138
|
+
const rows = await this.dbAll(`SELECT * FROM retry_history WHERE run_id = ? ORDER BY timestamp DESC`, [runId]);
|
|
139
|
+
return this.mapRowsToRecords(rows);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Get retry statistics
|
|
143
|
+
*/
|
|
144
|
+
async getStatistics(days = 30) {
|
|
145
|
+
const cutoff = Date.now() - days * 24 * 60 * 60 * 1000;
|
|
146
|
+
const total = await this.dbGet(`SELECT COUNT(*) as count, SUM(actual_attempts) as attempts, SUM(total_duration_ms) as duration
|
|
147
|
+
FROM retry_history WHERE timestamp >= ?`, [cutoff]);
|
|
148
|
+
const testsRetried = await this.dbGet(`SELECT COUNT(DISTINCT test_id) as count FROM retry_history WHERE timestamp >= ?`, [cutoff]);
|
|
149
|
+
const recovered = await this.dbGet(`SELECT COUNT(*) as count FROM retry_history WHERE success = 1 AND timestamp >= ?`, [cutoff]);
|
|
150
|
+
const failed = await this.dbGet(`SELECT COUNT(*) as count FROM retry_history WHERE success = 0 AND timestamp >= ?`, [cutoff]);
|
|
151
|
+
const byStrategy = await this.dbAll(`SELECT strategy, COUNT(*) as attempts, SUM(success) as successes, AVG(total_duration_ms) as avg_duration
|
|
152
|
+
FROM retry_history WHERE timestamp >= ?
|
|
153
|
+
GROUP BY strategy`, [cutoff]);
|
|
154
|
+
const byErrorType = await this.dbAll(`SELECT error_type, COUNT(*) as count FROM retry_history
|
|
155
|
+
WHERE timestamp >= ? AND error_type IS NOT NULL
|
|
156
|
+
GROUP BY error_type
|
|
157
|
+
ORDER BY count DESC`, [cutoff]);
|
|
158
|
+
const byFlakiness = await this.dbGet(`SELECT
|
|
159
|
+
SUM(CASE WHEN flakiness_score < 50 THEN 1 ELSE 0 END) as low,
|
|
160
|
+
SUM(CASE WHEN flakiness_score >= 50 AND flakiness_score < 75 THEN 1 ELSE 0 END) as medium,
|
|
161
|
+
SUM(CASE WHEN flakiness_score >= 75 THEN 1 ELSE 0 END) as high
|
|
162
|
+
FROM retry_history WHERE timestamp >= ?`, [cutoff]);
|
|
163
|
+
const totalRetries = total?.attempts || 0;
|
|
164
|
+
const totalRecovered = recovered?.count || 0;
|
|
165
|
+
const totalFailed = failed?.count || 0;
|
|
166
|
+
const totalTests = testsRetried?.count || 0;
|
|
167
|
+
const byStrategyMap = {
|
|
168
|
+
[RetryStrategy.NONE]: { attempts: 0, successes: 0, avgDurationMs: 0 },
|
|
169
|
+
[RetryStrategy.FIXED]: { attempts: 0, successes: 0, avgDurationMs: 0 },
|
|
170
|
+
[RetryStrategy.LINEAR]: { attempts: 0, successes: 0, avgDurationMs: 0 },
|
|
171
|
+
[RetryStrategy.EXPONENTIAL]: { attempts: 0, successes: 0, avgDurationMs: 0 },
|
|
172
|
+
[RetryStrategy.ADAPTIVE]: { attempts: 0, successes: 0, avgDurationMs: 0 },
|
|
173
|
+
[RetryStrategy.INTELLIGENT]: { attempts: 0, successes: 0, avgDurationMs: 0 }
|
|
174
|
+
};
|
|
175
|
+
for (const row of byStrategy) {
|
|
176
|
+
byStrategyMap[row.strategy] = {
|
|
177
|
+
attempts: row.attempts,
|
|
178
|
+
successes: row.successes,
|
|
179
|
+
avgDurationMs: Math.round(row.avg_duration)
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
const byErrorTypeMap = {};
|
|
183
|
+
for (const row of byErrorType) {
|
|
184
|
+
byErrorTypeMap[row.error_type] = row.count;
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
totalRetries,
|
|
188
|
+
testsRetried: totalTests,
|
|
189
|
+
recoveredTests: totalRecovered,
|
|
190
|
+
failedTests: totalFailed,
|
|
191
|
+
recoveryRate: totalRetries > 0 ? Math.round((totalRecovered / (totalRecovered + totalFailed)) * 100) : 0,
|
|
192
|
+
avgAttemptsPerTest: totalTests > 0 ? Math.round(totalRetries / totalTests) : 0,
|
|
193
|
+
totalRetryTimeMs: total?.duration || 0,
|
|
194
|
+
byStrategy: byStrategyMap,
|
|
195
|
+
byErrorType: byErrorTypeMap,
|
|
196
|
+
byFlakinessScore: {
|
|
197
|
+
low: byFlakiness?.low || 0,
|
|
198
|
+
medium: byFlakiness?.medium || 0,
|
|
199
|
+
high: byFlakiness?.high || 0
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Get strategy performance
|
|
205
|
+
*/
|
|
206
|
+
async getStrategyPerformance(days = 30) {
|
|
207
|
+
const cutoff = Date.now() - days * 24 * 60 * 60 * 1000;
|
|
208
|
+
const rows = await this.dbAll(`SELECT strategy, date, attempts, successes, avg_duration_ms
|
|
209
|
+
FROM retry_strategy_performance
|
|
210
|
+
WHERE date >= datetime(?, 'unixepoch')
|
|
211
|
+
ORDER BY date DESC, strategy`, [Math.floor(cutoff / 1000)]);
|
|
212
|
+
return rows.map((r) => ({
|
|
213
|
+
strategy: r.strategy,
|
|
214
|
+
date: r.date,
|
|
215
|
+
attempts: r.attempts,
|
|
216
|
+
successes: r.successes,
|
|
217
|
+
successRate: r.attempts > 0 ? Math.round((r.successes / r.attempts) * 100) : 0,
|
|
218
|
+
avgDurationMs: Math.round(r.avg_duration_ms)
|
|
219
|
+
}));
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Get most retried tests
|
|
223
|
+
*/
|
|
224
|
+
async getMostRetriedTests(limit = 10, days = 30) {
|
|
225
|
+
const cutoff = Date.now() - days * 24 * 60 * 60 * 1000;
|
|
226
|
+
const rows = await this.dbAll(`SELECT
|
|
227
|
+
test_id,
|
|
228
|
+
test_name,
|
|
229
|
+
gate,
|
|
230
|
+
COUNT(*) as retry_count,
|
|
231
|
+
SUM(success) as recovered,
|
|
232
|
+
AVG(actual_attempts) as avg_attempts
|
|
233
|
+
FROM retry_history
|
|
234
|
+
WHERE timestamp >= ?
|
|
235
|
+
GROUP BY test_id, test_name, gate
|
|
236
|
+
ORDER BY retry_count DESC
|
|
237
|
+
LIMIT ?`, [cutoff, limit]);
|
|
238
|
+
return rows.map((r) => ({
|
|
239
|
+
testId: r.test_id,
|
|
240
|
+
testName: r.test_name,
|
|
241
|
+
gate: r.gate,
|
|
242
|
+
retryCount: r.retry_count,
|
|
243
|
+
recoveryRate: r.retry_count > 0 ? Math.round((r.recovered / r.retry_count) * 100) : 0,
|
|
244
|
+
avgAttempts: Math.round(r.avg_attempts)
|
|
245
|
+
}));
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Update daily statistics
|
|
249
|
+
*/
|
|
250
|
+
async updateStatistics(result) {
|
|
251
|
+
const today = new Date().toISOString().split('T')[0];
|
|
252
|
+
// Update main stats
|
|
253
|
+
await this.dbRun(`
|
|
254
|
+
INSERT INTO retry_stats (date, total_retries, tests_retried, recovered_tests, failed_tests)
|
|
255
|
+
VALUES (?, 1, 1, ?, ?)
|
|
256
|
+
ON CONFLICT(date) DO UPDATE SET
|
|
257
|
+
total_retries = total_retries + 1,
|
|
258
|
+
tests_retried = tests_retried + 1,
|
|
259
|
+
recovered_tests = recovered_tests + ?,
|
|
260
|
+
failed_tests = failed_tests + ?
|
|
261
|
+
`, [today, result.success ? 1 : 0, result.success ? 0 : 1, result.success ? 1 : 0, result.success ? 0 : 1]);
|
|
262
|
+
// Update strategy performance
|
|
263
|
+
await this.dbRun(`
|
|
264
|
+
INSERT INTO retry_strategy_performance (strategy, date, attempts, successes, avg_duration_ms)
|
|
265
|
+
VALUES (?, ?, 1, ?, ?)
|
|
266
|
+
ON CONFLICT(strategy, date) DO UPDATE SET
|
|
267
|
+
attempts = attempts + 1,
|
|
268
|
+
successes = successes + ?,
|
|
269
|
+
avg_duration_ms = (avg_duration_ms * (attempts - 1) + ?) / attempts
|
|
270
|
+
`, [result.strategy, today, result.success ? 1 : 0, result.totalDurationMs, result.success ? 1 : 0, result.totalDurationMs]);
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Map database rows to RetryHistoryRecord objects
|
|
274
|
+
*/
|
|
275
|
+
mapRowsToRecords(rows) {
|
|
276
|
+
return rows.map((r) => ({
|
|
277
|
+
id: r.id,
|
|
278
|
+
run_id: r.run_id,
|
|
279
|
+
test_id: r.test_id,
|
|
280
|
+
test_name: r.test_name,
|
|
281
|
+
gate: r.gate,
|
|
282
|
+
strategy: r.strategy,
|
|
283
|
+
max_retries: r.max_retries,
|
|
284
|
+
actual_attempts: r.actual_attempts,
|
|
285
|
+
success: r.success === 1,
|
|
286
|
+
successful_attempt: r.successful_attempt,
|
|
287
|
+
total_duration_ms: r.total_duration_ms,
|
|
288
|
+
stop_reason: r.stop_reason,
|
|
289
|
+
error_type: r.error_type,
|
|
290
|
+
error_message: r.error_message,
|
|
291
|
+
flakiness_score: r.flakiness_score,
|
|
292
|
+
pattern_type: r.pattern_type,
|
|
293
|
+
timestamp: r.timestamp
|
|
294
|
+
}));
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Delete old retry history
|
|
298
|
+
*/
|
|
299
|
+
async deleteOldHistory(olderThanMs) {
|
|
300
|
+
const cutoff = Date.now() - olderThanMs;
|
|
301
|
+
const result = await this.dbRun(`DELETE FROM retry_history WHERE timestamp < ?`, [cutoff]);
|
|
302
|
+
return result.changes || 0;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* E2E Test Helpers
|
|
3
|
+
*
|
|
4
|
+
* Utility functions for E2E testing including health checks,
|
|
5
|
+
* site availability verification, and graceful test skipping.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Health check result for a target site
|
|
9
|
+
*/
|
|
10
|
+
export interface HealthCheckResult {
|
|
11
|
+
url: string;
|
|
12
|
+
available: boolean;
|
|
13
|
+
status?: number;
|
|
14
|
+
latency?: number;
|
|
15
|
+
error?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Health check options
|
|
19
|
+
*/
|
|
20
|
+
export interface HealthCheckOptions {
|
|
21
|
+
timeout?: number;
|
|
22
|
+
method?: 'GET' | 'HEAD' | 'OPTIONS';
|
|
23
|
+
expectedStatus?: number[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Perform a health check on a URL
|
|
27
|
+
*
|
|
28
|
+
* @param url - URL to check
|
|
29
|
+
* @param options - Health check options
|
|
30
|
+
* @returns Health check result
|
|
31
|
+
*/
|
|
32
|
+
export declare function healthCheck(url: string, options?: HealthCheckOptions): Promise<HealthCheckResult>;
|
|
33
|
+
/**
|
|
34
|
+
* Check if a site is healthy before running E2E tests
|
|
35
|
+
*
|
|
36
|
+
* @param url - URL to check
|
|
37
|
+
* @param options - Health check options
|
|
38
|
+
* @returns true if site is healthy, false otherwise
|
|
39
|
+
*/
|
|
40
|
+
export declare function isSiteHealthy(url: string, options?: HealthCheckOptions): Promise<boolean>;
|
|
41
|
+
/**
|
|
42
|
+
* Perform health checks on multiple URLs
|
|
43
|
+
*
|
|
44
|
+
* @param urls - URLs to check
|
|
45
|
+
* @param options - Health check options
|
|
46
|
+
* @returns Array of health check results
|
|
47
|
+
*/
|
|
48
|
+
export declare function healthCheckMany(urls: string[], options?: HealthCheckOptions): Promise<HealthCheckResult[]>;
|
|
49
|
+
/**
|
|
50
|
+
* Skip test if site is unhealthy with a clear message
|
|
51
|
+
*
|
|
52
|
+
* Usage in beforeEach:
|
|
53
|
+
* await skipIfUnhealthy('https://example.com');
|
|
54
|
+
*
|
|
55
|
+
* @param url - URL to check
|
|
56
|
+
* @param options - Health check options
|
|
57
|
+
*/
|
|
58
|
+
export declare function skipIfUnhealthy(url: string, options?: HealthCheckOptions): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Health check configuration for known E2E targets
|
|
61
|
+
*/
|
|
62
|
+
export declare const E2E_TARGETS: {
|
|
63
|
+
readonly b2bshop: {
|
|
64
|
+
readonly url: "https://b2bshop.lovable.app";
|
|
65
|
+
readonly timeout: 10000;
|
|
66
|
+
readonly description: "B2BShop E-commerce platform";
|
|
67
|
+
};
|
|
68
|
+
readonly reqres: {
|
|
69
|
+
readonly url: "https://reqres.in/api";
|
|
70
|
+
readonly timeout: 5000;
|
|
71
|
+
readonly description: "Reqres.in fake REST API";
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Get health check config for a known target
|
|
76
|
+
*
|
|
77
|
+
* @param target - Target name
|
|
78
|
+
* @returns Health check options for the target
|
|
79
|
+
*/
|
|
80
|
+
export declare function getTargetConfig(target: keyof typeof E2E_TARGETS): HealthCheckOptions & {
|
|
81
|
+
url: string;
|
|
82
|
+
description: string;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Perform health check on a known E2E target
|
|
86
|
+
*
|
|
87
|
+
* @param target - Target name
|
|
88
|
+
* @returns Health check result
|
|
89
|
+
*/
|
|
90
|
+
export declare function healthCheckE2ETarget(target: keyof typeof E2E_TARGETS): Promise<HealthCheckResult>;
|
|
91
|
+
/**
|
|
92
|
+
* Skip test if known E2E target is unhealthy
|
|
93
|
+
*
|
|
94
|
+
* @param target - Target name
|
|
95
|
+
*/
|
|
96
|
+
export declare function skipIfE2ETargetUnhealthy(target: keyof typeof E2E_TARGETS): Promise<void>;
|
|
97
|
+
/**
|
|
98
|
+
* Log health status of all known E2E targets
|
|
99
|
+
*
|
|
100
|
+
* Useful for debugging or CI output
|
|
101
|
+
*/
|
|
102
|
+
export declare function logE2ETargetsStatus(): Promise<void>;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* E2E Test Helpers
|
|
3
|
+
*
|
|
4
|
+
* Utility functions for E2E testing including health checks,
|
|
5
|
+
* site availability verification, and graceful test skipping.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Perform a health check on a URL
|
|
9
|
+
*
|
|
10
|
+
* @param url - URL to check
|
|
11
|
+
* @param options - Health check options
|
|
12
|
+
* @returns Health check result
|
|
13
|
+
*/
|
|
14
|
+
export async function healthCheck(url, options = {}) {
|
|
15
|
+
const { timeout = 5000, method = 'HEAD', expectedStatus = [200, 301, 302, 304] } = options;
|
|
16
|
+
const startTime = Date.now();
|
|
17
|
+
try {
|
|
18
|
+
const controller = new AbortController();
|
|
19
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
20
|
+
const response = await fetch(url, {
|
|
21
|
+
method,
|
|
22
|
+
signal: controller.signal,
|
|
23
|
+
// Don't follow redirects for health check
|
|
24
|
+
redirect: 'manual'
|
|
25
|
+
});
|
|
26
|
+
clearTimeout(timeoutId);
|
|
27
|
+
const latency = Date.now() - startTime;
|
|
28
|
+
const isAvailable = expectedStatus.includes(response.status);
|
|
29
|
+
return {
|
|
30
|
+
url,
|
|
31
|
+
available: isAvailable,
|
|
32
|
+
status: response.status,
|
|
33
|
+
latency
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
const latency = Date.now() - startTime;
|
|
38
|
+
return {
|
|
39
|
+
url,
|
|
40
|
+
available: false,
|
|
41
|
+
latency,
|
|
42
|
+
error: error instanceof Error ? error.message : String(error)
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check if a site is healthy before running E2E tests
|
|
48
|
+
*
|
|
49
|
+
* @param url - URL to check
|
|
50
|
+
* @param options - Health check options
|
|
51
|
+
* @returns true if site is healthy, false otherwise
|
|
52
|
+
*/
|
|
53
|
+
export async function isSiteHealthy(url, options) {
|
|
54
|
+
const result = await healthCheck(url, options);
|
|
55
|
+
return result.available;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Perform health checks on multiple URLs
|
|
59
|
+
*
|
|
60
|
+
* @param urls - URLs to check
|
|
61
|
+
* @param options - Health check options
|
|
62
|
+
* @returns Array of health check results
|
|
63
|
+
*/
|
|
64
|
+
export async function healthCheckMany(urls, options) {
|
|
65
|
+
return Promise.all(urls.map(url => healthCheck(url, options)));
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Skip test if site is unhealthy with a clear message
|
|
69
|
+
*
|
|
70
|
+
* Usage in beforeEach:
|
|
71
|
+
* await skipIfUnhealthy('https://example.com');
|
|
72
|
+
*
|
|
73
|
+
* @param url - URL to check
|
|
74
|
+
* @param options - Health check options
|
|
75
|
+
*/
|
|
76
|
+
export async function skipIfUnhealthy(url, options) {
|
|
77
|
+
const result = await healthCheck(url, options);
|
|
78
|
+
if (!result.available) {
|
|
79
|
+
const message = `Skipping E2E tests: ${url} is not available` +
|
|
80
|
+
(result.status ? ` (status: ${result.status})` : '') +
|
|
81
|
+
(result.error ? ` - ${result.error}` : '');
|
|
82
|
+
console.warn(`\n⚠️ ${message}`);
|
|
83
|
+
// Throw a special error that test frameworks should handle as skip
|
|
84
|
+
const skipError = new Error(message);
|
|
85
|
+
skipError.skip = true;
|
|
86
|
+
throw skipError;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Health check configuration for known E2E targets
|
|
91
|
+
*/
|
|
92
|
+
export const E2E_TARGETS = {
|
|
93
|
+
b2bshop: {
|
|
94
|
+
url: 'https://b2bshop.lovable.app',
|
|
95
|
+
timeout: 10000,
|
|
96
|
+
description: 'B2BShop E-commerce platform'
|
|
97
|
+
},
|
|
98
|
+
reqres: {
|
|
99
|
+
url: 'https://reqres.in/api',
|
|
100
|
+
timeout: 5000,
|
|
101
|
+
description: 'Reqres.in fake REST API'
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Get health check config for a known target
|
|
106
|
+
*
|
|
107
|
+
* @param target - Target name
|
|
108
|
+
* @returns Health check options for the target
|
|
109
|
+
*/
|
|
110
|
+
export function getTargetConfig(target) {
|
|
111
|
+
const config = E2E_TARGETS[target];
|
|
112
|
+
return {
|
|
113
|
+
url: config.url,
|
|
114
|
+
timeout: config.timeout,
|
|
115
|
+
description: config.description
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Perform health check on a known E2E target
|
|
120
|
+
*
|
|
121
|
+
* @param target - Target name
|
|
122
|
+
* @returns Health check result
|
|
123
|
+
*/
|
|
124
|
+
export async function healthCheckE2ETarget(target) {
|
|
125
|
+
const config = E2E_TARGETS[target];
|
|
126
|
+
return healthCheck(config.url, { timeout: config.timeout });
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Skip test if known E2E target is unhealthy
|
|
130
|
+
*
|
|
131
|
+
* @param target - Target name
|
|
132
|
+
*/
|
|
133
|
+
export async function skipIfE2ETargetUnhealthy(target) {
|
|
134
|
+
const config = E2E_TARGETS[target];
|
|
135
|
+
await skipIfUnhealthy(config.url, { timeout: config.timeout });
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Log health status of all known E2E targets
|
|
139
|
+
*
|
|
140
|
+
* Useful for debugging or CI output
|
|
141
|
+
*/
|
|
142
|
+
export async function logE2ETargetsStatus() {
|
|
143
|
+
console.log('\n🔍 E2E Targets Health Check:');
|
|
144
|
+
console.log('━'.repeat(50));
|
|
145
|
+
for (const [name, config] of Object.entries(E2E_TARGETS)) {
|
|
146
|
+
const result = await healthCheck(config.url, { timeout: config.timeout });
|
|
147
|
+
const status = result.available ? '✅' : '❌';
|
|
148
|
+
const latency = result.latency ? `${result.latency}ms` : 'N/A';
|
|
149
|
+
const statusText = result.status ? `(${result.status})` : '';
|
|
150
|
+
console.log(`${status} ${name.padEnd(10)} ${config.url.padEnd(35)} ${latency.padStart(8)} ${statusText}`);
|
|
151
|
+
}
|
|
152
|
+
console.log('━'.repeat(50));
|
|
153
|
+
}
|