qa360 2.2.1 → 2.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/README.md +79 -0
- package/cli/dist/cli-minimal.d.ts +6 -0
- package/cli/dist/cli-minimal.js +36 -0
- package/cli/dist/commands/ai.d.ts +43 -0
- package/cli/dist/commands/ai.js +616 -0
- package/cli/dist/commands/ask.d.ts +94 -0
- package/cli/dist/commands/ask.js +582 -0
- package/cli/dist/commands/coverage.d.ts +8 -0
- package/cli/dist/commands/coverage.js +252 -0
- package/cli/dist/commands/crawl.d.ts +24 -0
- package/cli/dist/commands/crawl.js +121 -0
- package/cli/dist/commands/doctor.d.ts +54 -0
- package/cli/dist/commands/doctor.js +513 -0
- package/cli/dist/commands/examples.d.ts +33 -0
- package/cli/dist/commands/examples.js +193 -0
- package/cli/dist/commands/explain.d.ts +27 -0
- package/cli/dist/commands/explain.js +630 -0
- package/cli/dist/commands/flakiness.d.ts +73 -0
- package/cli/dist/commands/flakiness.js +435 -0
- package/cli/dist/commands/generate.d.ts +66 -0
- package/cli/dist/commands/generate.js +438 -0
- package/cli/dist/commands/history.d.ts +76 -0
- package/cli/dist/commands/history.js +755 -0
- package/cli/dist/commands/init.d.ts +106 -0
- package/cli/dist/commands/init.js +616 -0
- package/cli/dist/commands/monitor.d.ts +27 -0
- package/cli/dist/commands/monitor.js +225 -0
- package/cli/dist/commands/ollama.d.ts +40 -0
- package/cli/dist/commands/ollama.js +346 -0
- package/cli/dist/commands/pack.d.ts +70 -0
- package/cli/dist/commands/pack.js +413 -0
- package/cli/dist/commands/regression.d.ts +8 -0
- package/cli/dist/commands/regression.js +340 -0
- package/cli/dist/commands/repair.d.ts +26 -0
- package/cli/dist/commands/repair.js +307 -0
- package/cli/dist/commands/report.d.ts +62 -0
- package/cli/dist/commands/report.js +378 -0
- package/cli/dist/commands/retry.d.ts +43 -0
- package/cli/dist/commands/retry.js +275 -0
- package/cli/dist/commands/run.d.ts +41 -0
- package/cli/dist/commands/run.js +171 -0
- package/cli/dist/commands/scan.d.ts +5 -0
- package/cli/dist/commands/scan.js +155 -0
- package/cli/dist/commands/secrets.d.ts +58 -0
- package/cli/dist/commands/secrets.js +289 -0
- package/cli/dist/commands/serve.d.ts +13 -0
- package/cli/dist/commands/serve.js +156 -0
- package/cli/dist/commands/slo.d.ts +8 -0
- package/cli/dist/commands/slo.js +327 -0
- package/cli/dist/commands/verify.d.ts +32 -0
- package/cli/dist/commands/verify.js +278 -0
- package/cli/dist/core/adapters/gitleaks-secrets.d.ts +114 -0
- package/cli/dist/core/adapters/gitleaks-secrets.js +410 -0
- package/cli/dist/core/adapters/jest-adapter.d.ts +44 -0
- package/cli/dist/core/adapters/jest-adapter.js +261 -0
- package/cli/dist/core/adapters/k6-perf.d.ts +85 -0
- package/cli/dist/core/adapters/k6-perf.js +398 -0
- package/cli/dist/core/adapters/osv-deps.d.ts +123 -0
- package/cli/dist/core/adapters/osv-deps.js +372 -0
- package/cli/dist/core/adapters/playwright-native-adapter.d.ts +121 -0
- package/cli/dist/core/adapters/playwright-native-adapter.js +339 -0
- package/cli/dist/core/adapters/playwright-native-api.d.ts +183 -0
- package/cli/dist/core/adapters/playwright-native-api.js +465 -0
- package/cli/dist/core/adapters/playwright-ui.d.ts +197 -0
- package/cli/dist/core/adapters/playwright-ui.js +864 -0
- package/cli/dist/core/adapters/pytest-adapter.d.ts +49 -0
- package/cli/dist/core/adapters/pytest-adapter.js +324 -0
- package/cli/dist/core/adapters/semgrep-sast.d.ts +99 -0
- package/cli/dist/core/adapters/semgrep-sast.js +322 -0
- package/cli/dist/core/adapters/unit-test-types.d.ts +119 -0
- package/cli/dist/core/adapters/unit-test-types.js +6 -0
- package/cli/dist/core/adapters/vitest-adapter.d.ts +46 -0
- package/cli/dist/core/adapters/vitest-adapter.js +272 -0
- package/cli/dist/core/adapters/zap-dast.d.ts +133 -0
- package/cli/dist/core/adapters/zap-dast.js +424 -0
- package/cli/dist/core/ai/anthropic-provider.d.ts +50 -0
- package/cli/dist/core/ai/anthropic-provider.js +223 -0
- package/cli/dist/core/ai/deepseek-provider.d.ts +81 -0
- package/cli/dist/core/ai/deepseek-provider.js +266 -0
- package/cli/dist/core/ai/index.d.ts +60 -0
- package/cli/dist/core/ai/index.js +18 -0
- package/cli/dist/core/ai/llm-client.d.ts +45 -0
- package/cli/dist/core/ai/llm-client.js +7 -0
- package/cli/dist/core/ai/mock-provider.d.ts +49 -0
- package/cli/dist/core/ai/mock-provider.js +121 -0
- package/cli/dist/core/ai/ollama-provider.d.ts +78 -0
- package/cli/dist/core/ai/ollama-provider.js +216 -0
- package/cli/dist/core/ai/openai-provider.d.ts +48 -0
- package/cli/dist/core/ai/openai-provider.js +200 -0
- package/cli/dist/core/ai/provider-factory.d.ts +160 -0
- package/cli/dist/core/ai/provider-factory.js +269 -0
- package/cli/dist/core/artifacts/index.d.ts +6 -0
- package/cli/dist/core/artifacts/index.js +6 -0
- package/cli/dist/core/artifacts/ui-artifacts.d.ts +133 -0
- package/cli/dist/core/artifacts/ui-artifacts.js +304 -0
- package/cli/dist/core/assertions/engine.d.ts +51 -0
- package/cli/dist/core/assertions/engine.js +530 -0
- package/cli/dist/core/assertions/index.d.ts +11 -0
- package/cli/dist/core/assertions/index.js +11 -0
- package/cli/dist/core/assertions/types.d.ts +121 -0
- package/cli/dist/core/assertions/types.js +37 -0
- package/cli/dist/core/auth/api-key-provider.d.ts +16 -0
- package/cli/dist/core/auth/api-key-provider.js +63 -0
- package/cli/dist/core/auth/aws-iam-provider.d.ts +35 -0
- package/cli/dist/core/auth/aws-iam-provider.js +177 -0
- package/cli/dist/core/auth/azure-ad-provider.d.ts +15 -0
- package/cli/dist/core/auth/azure-ad-provider.js +99 -0
- package/cli/dist/core/auth/basic-auth-provider.d.ts +26 -0
- package/cli/dist/core/auth/basic-auth-provider.js +111 -0
- package/cli/dist/core/auth/gcp-adc-provider.d.ts +27 -0
- package/cli/dist/core/auth/gcp-adc-provider.js +126 -0
- package/cli/dist/core/auth/index.d.ts +238 -0
- package/cli/dist/core/auth/index.js +82 -0
- package/cli/dist/core/auth/jwt-provider.d.ts +19 -0
- package/cli/dist/core/auth/jwt-provider.js +160 -0
- package/cli/dist/core/auth/manager.d.ts +84 -0
- package/cli/dist/core/auth/manager.js +230 -0
- package/cli/dist/core/auth/oauth2-provider.d.ts +17 -0
- package/cli/dist/core/auth/oauth2-provider.js +114 -0
- package/cli/dist/core/auth/totp-provider.d.ts +31 -0
- package/cli/dist/core/auth/totp-provider.js +134 -0
- package/cli/dist/core/auth/ui-login-provider.d.ts +26 -0
- package/cli/dist/core/auth/ui-login-provider.js +198 -0
- package/cli/dist/core/cache/index.d.ts +7 -0
- package/cli/dist/core/cache/index.js +6 -0
- package/cli/dist/core/cache/lru-cache.d.ts +203 -0
- package/cli/dist/core/cache/lru-cache.js +397 -0
- package/cli/dist/core/coverage/analyzer.d.ts +101 -0
- package/cli/dist/core/coverage/analyzer.js +415 -0
- package/cli/dist/core/coverage/collector.d.ts +74 -0
- package/cli/dist/core/coverage/collector.js +459 -0
- package/cli/dist/core/coverage/config.d.ts +37 -0
- package/cli/dist/core/coverage/config.js +156 -0
- package/cli/dist/core/coverage/index.d.ts +11 -0
- package/cli/dist/core/coverage/index.js +15 -0
- package/cli/dist/core/coverage/types.d.ts +267 -0
- package/cli/dist/core/coverage/types.js +6 -0
- package/cli/dist/core/coverage/vault.d.ts +95 -0
- package/cli/dist/core/coverage/vault.js +405 -0
- package/cli/dist/core/crawler/index.d.ts +57 -0
- package/cli/dist/core/crawler/index.js +281 -0
- package/cli/dist/core/crawler/journey-generator.d.ts +49 -0
- package/cli/dist/core/crawler/journey-generator.js +412 -0
- package/cli/dist/core/crawler/page-analyzer.d.ts +88 -0
- package/cli/dist/core/crawler/page-analyzer.js +709 -0
- package/cli/dist/core/crawler/selector-generator.d.ts +34 -0
- package/cli/dist/core/crawler/selector-generator.js +309 -0
- package/cli/dist/core/crawler/types.d.ts +353 -0
- package/cli/dist/core/crawler/types.js +6 -0
- package/cli/dist/core/dashboard/assets.d.ts +6 -0
- package/cli/dist/core/dashboard/assets.js +690 -0
- package/cli/dist/core/dashboard/index.d.ts +6 -0
- package/cli/dist/core/dashboard/index.js +5 -0
- package/cli/dist/core/dashboard/server.d.ts +72 -0
- package/cli/dist/core/dashboard/server.js +354 -0
- package/cli/dist/core/dashboard/types.d.ts +70 -0
- package/cli/dist/core/dashboard/types.js +5 -0
- package/cli/dist/core/discoverer/index.d.ts +115 -0
- package/cli/dist/core/discoverer/index.js +250 -0
- package/cli/dist/core/fixtures/index.d.ts +8 -0
- package/cli/dist/core/fixtures/index.js +8 -0
- package/cli/dist/core/fixtures/loader.d.ts +65 -0
- package/cli/dist/core/fixtures/loader.js +161 -0
- package/cli/dist/core/fixtures/resolver.d.ts +79 -0
- package/cli/dist/core/fixtures/resolver.js +181 -0
- package/cli/dist/core/fixtures/types.d.ts +75 -0
- package/cli/dist/core/fixtures/types.js +30 -0
- package/cli/dist/core/flakiness/index.d.ts +228 -0
- package/cli/dist/core/flakiness/index.js +384 -0
- package/cli/dist/core/generation/code-formatter.d.ts +111 -0
- package/cli/dist/core/generation/code-formatter.js +307 -0
- package/cli/dist/core/generation/code-generator.d.ts +144 -0
- package/cli/dist/core/generation/code-generator.js +293 -0
- package/cli/dist/core/generation/crawler-pack-generator.d.ts +44 -0
- package/cli/dist/core/generation/crawler-pack-generator.js +245 -0
- package/cli/dist/core/generation/generator.d.ts +40 -0
- package/cli/dist/core/generation/generator.js +76 -0
- package/cli/dist/core/generation/index.d.ts +32 -0
- package/cli/dist/core/generation/index.js +30 -0
- package/cli/dist/core/generation/pack-generator.d.ts +107 -0
- package/cli/dist/core/generation/pack-generator.js +416 -0
- package/cli/dist/core/generation/prompt-builder.d.ts +132 -0
- package/cli/dist/core/generation/prompt-builder.js +672 -0
- package/cli/dist/core/generation/source-analyzer.d.ts +213 -0
- package/cli/dist/core/generation/source-analyzer.js +657 -0
- package/cli/dist/core/generation/test-optimizer.d.ts +117 -0
- package/cli/dist/core/generation/test-optimizer.js +328 -0
- package/cli/dist/core/generation/types.d.ts +214 -0
- package/cli/dist/core/generation/types.js +4 -0
- package/cli/dist/core/hooks/compose.d.ts +61 -0
- package/cli/dist/core/hooks/compose.js +225 -0
- package/cli/dist/core/hooks/runner.d.ts +68 -0
- package/cli/dist/core/hooks/runner.js +303 -0
- package/cli/dist/core/index.d.ts +110 -0
- package/cli/dist/core/index.js +99 -0
- package/cli/dist/core/pack/migrator.d.ts +51 -0
- package/cli/dist/core/pack/migrator.js +304 -0
- package/cli/dist/core/pack/validator.d.ts +42 -0
- package/cli/dist/core/pack/validator.js +330 -0
- package/cli/dist/core/pack-v2/index.d.ts +9 -0
- package/cli/dist/core/pack-v2/index.js +8 -0
- package/cli/dist/core/pack-v2/loader.d.ts +63 -0
- package/cli/dist/core/pack-v2/loader.js +292 -0
- package/cli/dist/core/pack-v2/migrator.d.ts +62 -0
- package/cli/dist/core/pack-v2/migrator.js +505 -0
- package/cli/dist/core/pack-v2/validator.d.ts +65 -0
- package/cli/dist/core/pack-v2/validator.js +629 -0
- package/cli/dist/core/parallel/index.d.ts +6 -0
- package/cli/dist/core/parallel/index.js +6 -0
- package/cli/dist/core/parallel/parallel-runner.d.ts +107 -0
- package/cli/dist/core/parallel/parallel-runner.js +192 -0
- package/cli/dist/core/pom/base-page.d.ts +237 -0
- package/cli/dist/core/pom/base-page.js +354 -0
- package/cli/dist/core/pom/index.d.ts +22 -0
- package/cli/dist/core/pom/index.js +23 -0
- package/cli/dist/core/pom/loader.d.ts +118 -0
- package/cli/dist/core/pom/loader.js +382 -0
- package/cli/dist/core/pom/types.d.ts +112 -0
- package/cli/dist/core/pom/types.js +9 -0
- package/cli/dist/core/proof/bundle.d.ts +137 -0
- package/cli/dist/core/proof/bundle.js +160 -0
- package/cli/dist/core/proof/canonicalize.d.ts +47 -0
- package/cli/dist/core/proof/canonicalize.js +105 -0
- package/cli/dist/core/proof/index.d.ts +13 -0
- package/cli/dist/core/proof/index.js +18 -0
- package/cli/dist/core/proof/schema.d.ts +217 -0
- package/cli/dist/core/proof/schema.js +263 -0
- package/cli/dist/core/proof/signer.d.ts +111 -0
- package/cli/dist/core/proof/signer.js +226 -0
- package/cli/dist/core/proof/verifier.d.ts +97 -0
- package/cli/dist/core/proof/verifier.js +308 -0
- package/cli/dist/core/regression/detector.d.ts +107 -0
- package/cli/dist/core/regression/detector.js +497 -0
- package/cli/dist/core/regression/index.d.ts +9 -0
- package/cli/dist/core/regression/index.js +11 -0
- package/cli/dist/core/regression/trend-analyzer.d.ts +102 -0
- package/cli/dist/core/regression/trend-analyzer.js +345 -0
- package/cli/dist/core/regression/types.d.ts +222 -0
- package/cli/dist/core/regression/types.js +7 -0
- package/cli/dist/core/regression/vault.d.ts +87 -0
- package/cli/dist/core/regression/vault.js +289 -0
- package/cli/dist/core/repair/engine/fixer.d.ts +24 -0
- package/cli/dist/core/repair/engine/fixer.js +226 -0
- package/cli/dist/core/repair/engine/suggestion-engine.d.ts +18 -0
- package/cli/dist/core/repair/engine/suggestion-engine.js +187 -0
- package/cli/dist/core/repair/index.d.ts +10 -0
- package/cli/dist/core/repair/index.js +13 -0
- package/cli/dist/core/repair/repairer.d.ts +90 -0
- package/cli/dist/core/repair/repairer.js +284 -0
- package/cli/dist/core/repair/types.d.ts +91 -0
- package/cli/dist/core/repair/types.js +6 -0
- package/cli/dist/core/repair/utils/error-analyzer.d.ts +28 -0
- package/cli/dist/core/repair/utils/error-analyzer.js +264 -0
- package/cli/dist/core/reporting/html-reporter.d.ts +119 -0
- package/cli/dist/core/reporting/html-reporter.js +737 -0
- package/cli/dist/core/reporting/index.d.ts +6 -0
- package/cli/dist/core/reporting/index.js +6 -0
- package/cli/dist/core/retry/flakiness-integration.d.ts +60 -0
- package/cli/dist/core/retry/flakiness-integration.js +228 -0
- package/cli/dist/core/retry/index.d.ts +14 -0
- package/cli/dist/core/retry/index.js +16 -0
- package/cli/dist/core/retry/retry-engine.d.ts +80 -0
- package/cli/dist/core/retry/retry-engine.js +296 -0
- package/cli/dist/core/retry/types.d.ts +178 -0
- package/cli/dist/core/retry/types.js +52 -0
- package/cli/dist/core/retry/vault.d.ts +77 -0
- package/cli/dist/core/retry/vault.js +304 -0
- package/cli/dist/core/runner/e2e-helpers.d.ts +102 -0
- package/cli/dist/core/runner/e2e-helpers.js +153 -0
- package/cli/dist/core/runner/phase3-runner.d.ts +249 -0
- package/cli/dist/core/runner/phase3-runner.js +1323 -0
- package/cli/dist/core/schemas/pack.schema.json +236 -0
- package/cli/dist/core/secrets/crypto.d.ts +75 -0
- package/cli/dist/core/secrets/crypto.js +223 -0
- package/cli/dist/core/secrets/manager.d.ts +76 -0
- package/cli/dist/core/secrets/manager.js +219 -0
- package/cli/dist/core/security/redaction-patterns-extended.d.ts +27 -0
- package/cli/dist/core/security/redaction-patterns-extended.js +247 -0
- package/cli/dist/core/security/redactor.d.ts +71 -0
- package/cli/dist/core/security/redactor.js +279 -0
- package/cli/dist/core/self-healing/assertion-healer.d.ts +97 -0
- package/cli/dist/core/self-healing/assertion-healer.js +371 -0
- package/cli/dist/core/self-healing/engine.d.ts +122 -0
- package/cli/dist/core/self-healing/engine.js +538 -0
- package/cli/dist/core/self-healing/index.d.ts +10 -0
- package/cli/dist/core/self-healing/index.js +11 -0
- package/cli/dist/core/self-healing/selector-healer.d.ts +103 -0
- package/cli/dist/core/self-healing/selector-healer.js +372 -0
- package/cli/dist/core/self-healing/types.d.ts +152 -0
- package/cli/dist/core/self-healing/types.js +6 -0
- package/cli/dist/core/serve/diagnostics-collector.d.ts +32 -0
- package/cli/dist/core/serve/diagnostics-collector.js +149 -0
- package/cli/dist/core/serve/health-checker.d.ts +44 -0
- package/cli/dist/core/serve/health-checker.js +219 -0
- package/cli/dist/core/serve/index.d.ts +8 -0
- package/cli/dist/core/serve/index.js +8 -0
- package/cli/dist/core/serve/metrics-collector.d.ts +24 -0
- package/cli/dist/core/serve/metrics-collector.js +322 -0
- package/cli/dist/core/serve/process-manager.d.ts +36 -0
- package/cli/dist/core/serve/process-manager.js +213 -0
- package/cli/dist/core/serve/server.d.ts +36 -0
- package/cli/dist/core/serve/server.js +191 -0
- package/cli/dist/core/slo/config.d.ts +107 -0
- package/cli/dist/core/slo/config.js +360 -0
- package/cli/dist/core/slo/index.d.ts +11 -0
- package/cli/dist/core/slo/index.js +15 -0
- package/cli/dist/core/slo/sli-calculator.d.ts +92 -0
- package/cli/dist/core/slo/sli-calculator.js +364 -0
- package/cli/dist/core/slo/slo-tracker.d.ts +148 -0
- package/cli/dist/core/slo/slo-tracker.js +379 -0
- package/cli/dist/core/slo/types.d.ts +281 -0
- package/cli/dist/core/slo/types.js +7 -0
- package/cli/dist/core/slo/vault.d.ts +102 -0
- package/cli/dist/core/slo/vault.js +427 -0
- package/cli/dist/core/tui/index.d.ts +7 -0
- package/cli/dist/core/tui/index.js +6 -0
- package/cli/dist/core/tui/monitor.d.ts +92 -0
- package/cli/dist/core/tui/monitor.js +271 -0
- package/cli/dist/core/tui/renderer.d.ts +33 -0
- package/cli/dist/core/tui/renderer.js +218 -0
- package/cli/dist/core/tui/types.d.ts +63 -0
- package/cli/dist/core/tui/types.js +5 -0
- package/cli/dist/core/types/pack-v1.d.ts +251 -0
- package/cli/dist/core/types/pack-v1.js +5 -0
- package/cli/dist/core/types/pack-v2.d.ts +456 -0
- package/cli/dist/core/types/pack-v2.js +8 -0
- package/cli/dist/core/types/trust-score.d.ts +69 -0
- package/cli/dist/core/types/trust-score.js +191 -0
- package/cli/dist/core/vault/cas.d.ts +90 -0
- package/cli/dist/core/vault/cas.js +261 -0
- package/cli/dist/core/vault/index.d.ts +326 -0
- package/cli/dist/core/vault/index.js +1042 -0
- package/cli/dist/core/visual/index.d.ts +6 -0
- package/cli/dist/core/visual/index.js +6 -0
- package/cli/dist/core/visual/visual-regression.d.ts +113 -0
- package/cli/dist/core/visual/visual-regression.js +236 -0
- package/cli/dist/core/watch/index.d.ts +7 -0
- package/cli/dist/core/watch/index.js +6 -0
- package/cli/dist/core/watch/watch-mode.d.ts +213 -0
- package/cli/dist/core/watch/watch-mode.js +389 -0
- package/cli/dist/generators/index.d.ts +5 -0
- package/cli/dist/generators/index.js +5 -0
- package/cli/dist/generators/json-reporter.d.ts +10 -0
- package/cli/dist/generators/json-reporter.js +12 -0
- package/cli/dist/generators/test-generator.d.ts +18 -0
- package/cli/dist/generators/test-generator.js +78 -0
- package/cli/dist/index.d.ts +8 -0
- package/cli/dist/index.js +262 -0
- package/cli/dist/scanners/dom-scanner.d.ts +52 -0
- package/cli/dist/scanners/dom-scanner.js +296 -0
- package/cli/dist/scanners/index.d.ts +4 -0
- package/cli/dist/scanners/index.js +4 -0
- package/cli/dist/schemas/pack.schema.json +236 -0
- package/cli/dist/types/scan.d.ts +68 -0
- package/cli/dist/types/scan.js +4 -0
- package/cli/dist/utils/config.d.ts +35 -0
- package/cli/dist/utils/config.js +196 -0
- package/cli/package.json +1 -1
- package/package.json +26 -2
- package/.BETA_TESTING_FEEDBACK.md +0 -256
- package/.claude/settings.local.json +0 -154
- package/.editorconfig +0 -21
- package/.github/CODEOWNERS +0 -23
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -108
- package/.github/ISSUE_TEMPLATE/feedback_dx.yml +0 -121
- package/.github/dependabot.yml +0 -35
- package/.github/workflows/mcp-dx.yml +0 -106
- package/.github/workflows/release.yml +0 -26
- package/.github/workflows/test.yml +0 -93
- package/.nvmrc +0 -1
- package/.qa360/vault.db +0 -0
- package/.qa360/vault.db-shm +0 -0
- package/.qa360/vault.db-wal +0 -0
- package/.qa360-artifacts/.gitkeep +0 -0
- package/.qa360-artifacts/baselines/.gitkeep +0 -0
- package/.qa360-artifacts/cache/.gitkeep +0 -0
- package/.qa360-artifacts/reports/.gitkeep +0 -0
- package/.qa360-artifacts/screenshots/.gitkeep +0 -0
- package/.qa360-baselines/www_xyqo_ai.baseline.json +0 -33
- package/CODEOWNERS +0 -43
- package/NOVICE_USER_GUIDE.md +0 -272
- package/adapters/README.md +0 -46
- package/check-branches.sh +0 -32
- package/cli/.qa360/keys/ed25519.key +0 -1
- package/cli/.qa360/keys/ed25519.pub +0 -1
- package/cli/examples/README.md +0 -160
- package/cli/examples/accessibility.yml +0 -48
- package/cli/examples/api-basic.yml +0 -27
- package/cli/examples/complete.yml +0 -146
- package/cli/examples/crawler.yml +0 -38
- package/cli/examples/fullstack.yml +0 -78
- package/cli/examples/security.yml +0 -58
- package/cli/examples/ui-advanced.yml +0 -49
- package/cli/examples/ui-basic.yml +0 -24
- package/cli/scripts/bundle-for-npm.sh +0 -51
- package/cli/scripts/validate-package.js +0 -116
- package/cli/src/__tests__/commands/doctor.test.ts +0 -108
- package/cli/src/__tests__/index.test.ts +0 -15
- package/cli/src/cli-minimal.ts +0 -44
- package/cli/src/commands/__tests__/crawl.test.ts +0 -412
- package/cli/src/commands/__tests__/doctor-qa360-home.test.ts +0 -156
- package/cli/src/commands/__tests__/e2e-ui-tests.test.ts +0 -494
- package/cli/src/commands/__tests__/e2e.test.ts +0 -187
- package/cli/src/commands/__tests__/flakiness.test.ts +0 -528
- package/cli/src/commands/__tests__/generate.test.ts +0 -507
- package/cli/src/commands/__tests__/history.integration.test.ts +0 -358
- package/cli/src/commands/__tests__/history.test.ts +0 -433
- package/cli/src/commands/__tests__/monitor-realworld.test.ts +0 -199
- package/cli/src/commands/__tests__/monitor.test.ts +0 -81
- package/cli/src/commands/__tests__/ollama.test.ts +0 -529
- package/cli/src/commands/__tests__/repair.test.ts +0 -225
- package/cli/src/commands/__tests__/report.integration.test.ts +0 -167
- package/cli/src/commands/__tests__/report.test.ts +0 -294
- package/cli/src/commands/__tests__/report.vitest.ts +0 -288
- package/cli/src/commands/__tests__/retry.test.ts +0 -78
- package/cli/src/commands/__tests__/run.integration.test.ts +0 -240
- package/cli/src/commands/__tests__/run.test.ts +0 -346
- package/cli/src/commands/__tests__/run.vitest.ts +0 -301
- package/cli/src/commands/__tests__/secrets.test.ts +0 -114
- package/cli/src/commands/__tests__/serve.test.ts +0 -80
- package/cli/src/commands/__tests__/verify.test.ts +0 -103
- package/cli/src/commands/ai.ts +0 -702
- package/cli/src/commands/ask.ts +0 -678
- package/cli/src/commands/coverage.ts +0 -305
- package/cli/src/commands/crawl.ts +0 -155
- package/cli/src/commands/doctor.ts +0 -610
- package/cli/src/commands/examples.ts +0 -248
- package/cli/src/commands/explain.ts +0 -710
- package/cli/src/commands/flakiness.ts +0 -560
- package/cli/src/commands/generate.ts +0 -566
- package/cli/src/commands/history.ts +0 -914
- package/cli/src/commands/init.ts +0 -777
- package/cli/src/commands/monitor.ts +0 -270
- package/cli/src/commands/ollama.ts +0 -337
- package/cli/src/commands/pack.ts +0 -497
- package/cli/src/commands/regression.ts +0 -400
- package/cli/src/commands/repair.ts +0 -356
- package/cli/src/commands/report.ts +0 -463
- package/cli/src/commands/retry.ts +0 -380
- package/cli/src/commands/run.ts +0 -220
- package/cli/src/commands/scan.ts +0 -177
- package/cli/src/commands/secrets.ts +0 -340
- package/cli/src/commands/serve.ts +0 -194
- package/cli/src/commands/slo.ts +0 -387
- package/cli/src/commands/verify-temp-note.md +0 -11
- package/cli/src/commands/verify.ts +0 -322
- package/cli/src/generators/index.ts +0 -6
- package/cli/src/generators/json-reporter.ts +0 -15
- package/cli/src/generators/test-generator.ts +0 -90
- package/cli/src/index.ts +0 -289
- package/cli/src/scanners/dom-scanner.ts +0 -360
- package/cli/src/scanners/index.ts +0 -5
- package/cli/src/types/scan.ts +0 -84
- package/cli/src/utils/config.ts +0 -145
- package/cli/tsconfig.bundle.json +0 -12
- package/cli/tsconfig.json +0 -23
- package/cli/vitest.config.ts +0 -59
- package/core/src/__tests__/adapters-contract/adapters-contract.test.md +0 -156
- package/core/src/__tests__/index.test.ts +0 -31
- package/core/src/__tests__/integration/phase3.test.ts +0 -405
- package/core/src/__tests__/pack/validator.test.ts +0 -312
- package/core/src/__tests__/secrets/crypto.test.ts +0 -190
- package/core/src/__tests__/secrets/manager.test.ts +0 -316
- package/core/src/__tests__/security/redactor-phase3.test.ts +0 -233
- package/core/src/__tests__/serve/health-checker.test.ts +0 -155
- package/core/src/__tests__/serve/process-manager.test.ts +0 -213
- package/core/src/__tests__/serve/server.test.ts +0 -103
- package/core/src/__tests__/vault/cas.test.ts +0 -178
- package/core/src/__tests__/vault/vault.test.ts +0 -296
- package/core/src/adapters/__tests__/fixtures/jest-coverage.json +0 -8
- package/core/src/adapters/__tests__/fixtures/jest-results.json +0 -41
- package/core/src/adapters/__tests__/fixtures/pytest-junit.xml +0 -16
- package/core/src/adapters/__tests__/fixtures/vitest-coverage.json +0 -8
- package/core/src/adapters/__tests__/fixtures/vitest-results.json +0 -50
- package/core/src/adapters/__tests__/gitleaks-secrets.test.ts +0 -452
- package/core/src/adapters/__tests__/jest-adapter.test.ts +0 -276
- package/core/src/adapters/__tests__/k6-perf.test.ts +0 -538
- package/core/src/adapters/__tests__/osv-deps.test.ts +0 -471
- package/core/src/adapters/__tests__/playwright-native-api.test.ts +0 -792
- package/core/src/adapters/__tests__/playwright-ui-e2e.test.ts +0 -431
- package/core/src/adapters/__tests__/playwright-ui.test.ts +0 -1073
- package/core/src/adapters/__tests__/pytest-adapter.test.ts +0 -207
- package/core/src/adapters/__tests__/semgrep-sast.test.ts +0 -436
- package/core/src/adapters/__tests__/vitest-adapter.test.ts +0 -208
- package/core/src/adapters/__tests__/zap-dast.test.ts +0 -453
- package/core/src/adapters/gitleaks-secrets.ts +0 -521
- package/core/src/adapters/jest-adapter.ts +0 -306
- package/core/src/adapters/k6-perf.ts +0 -479
- package/core/src/adapters/osv-deps.ts +0 -467
- package/core/src/adapters/playwright-native-adapter.ts +0 -472
- package/core/src/adapters/playwright-native-api.ts +0 -619
- package/core/src/adapters/playwright-ui.ts +0 -1088
- package/core/src/adapters/pytest-adapter.ts +0 -472
- package/core/src/adapters/semgrep-sast.ts +0 -410
- package/core/src/adapters/unit-test-types.ts +0 -106
- package/core/src/adapters/vitest-adapter.ts +0 -295
- package/core/src/adapters/zap-dast.ts +0 -551
- package/core/src/ai/__tests__/deepseek-provider.test.ts +0 -586
- package/core/src/ai/__tests__/ollama-provider.test.ts +0 -641
- package/core/src/ai/anthropic-provider.ts +0 -262
- package/core/src/ai/deepseek-provider.ts +0 -315
- package/core/src/ai/index.ts +0 -87
- package/core/src/ai/llm-client.ts +0 -52
- package/core/src/ai/mock-provider.ts +0 -146
- package/core/src/ai/ollama-provider.ts +0 -269
- package/core/src/ai/openai-provider.ts +0 -240
- package/core/src/ai/provider-factory.ts +0 -408
- package/core/src/artifacts/README.md +0 -78
- package/core/src/artifacts/index.ts +0 -16
- package/core/src/artifacts/ui-artifacts.ts +0 -412
- package/core/src/assertions/__tests__/engine.test.ts +0 -360
- package/core/src/assertions/engine.ts +0 -577
- package/core/src/assertions/index.ts +0 -13
- package/core/src/assertions/types.ts +0 -229
- package/core/src/auth/__tests__/api-key-provider.test.ts +0 -282
- package/core/src/auth/__tests__/auth-manager.test.ts +0 -430
- package/core/src/auth/__tests__/basic-auth-provider.test.ts +0 -364
- package/core/src/auth/__tests__/cloud-providers.test.ts +0 -751
- package/core/src/auth/__tests__/jwt-provider.test.ts +0 -400
- package/core/src/auth/__tests__/oauth2-provider.test.ts +0 -383
- package/core/src/auth/__tests__/totp-provider.test.ts +0 -294
- package/core/src/auth/__tests__/ui-login-provider.test.ts +0 -323
- package/core/src/auth/api-key-provider.ts +0 -75
- package/core/src/auth/aws-iam-provider.ts +0 -212
- package/core/src/auth/azure-ad-provider.ts +0 -126
- package/core/src/auth/basic-auth-provider.ts +0 -133
- package/core/src/auth/gcp-adc-provider.ts +0 -146
- package/core/src/auth/index.ts +0 -342
- package/core/src/auth/jwt-provider.ts +0 -193
- package/core/src/auth/manager.ts +0 -281
- package/core/src/auth/oauth2-provider.ts +0 -141
- package/core/src/auth/totp-provider.ts +0 -163
- package/core/src/auth/ui-login-provider.ts +0 -242
- package/core/src/cache/__tests__/lru-cache.test.ts +0 -564
- package/core/src/cache/index.ts +0 -13
- package/core/src/cache/lru-cache.ts +0 -536
- package/core/src/crawler/__tests__/journey-generator.test.ts +0 -344
- package/core/src/crawler/__tests__/selector-generator.test.ts +0 -211
- package/core/src/crawler/index.ts +0 -335
- package/core/src/crawler/journey-generator.ts +0 -471
- package/core/src/crawler/page-analyzer.ts +0 -857
- package/core/src/crawler/selector-generator.ts +0 -280
- package/core/src/crawler/types.ts +0 -475
- package/core/src/dashboard/__tests__/real-world.test.ts +0 -430
- package/core/src/dashboard/__tests__/server.test.ts +0 -283
- package/core/src/dashboard/__tests__/types.test.ts +0 -208
- package/core/src/dashboard/assets.ts +0 -692
- package/core/src/dashboard/index.ts +0 -17
- package/core/src/dashboard/server.ts +0 -401
- package/core/src/dashboard/types.ts +0 -78
- package/core/src/discoverer/__tests__/test-discoverer.test.ts +0 -444
- package/core/src/discoverer/index.ts +0 -374
- package/core/src/fixtures/__tests__/loader.test.ts +0 -246
- package/core/src/fixtures/__tests__/resolver.test.ts +0 -334
- package/core/src/fixtures/index.ts +0 -9
- package/core/src/fixtures/loader.ts +0 -200
- package/core/src/fixtures/resolver.ts +0 -221
- package/core/src/fixtures/types.ts +0 -86
- package/core/src/flakiness/__tests__/flakiness.test.ts +0 -554
- package/core/src/flakiness/index.ts +0 -536
- package/core/src/generation/__tests__/code-formatter.test.ts +0 -170
- package/core/src/generation/__tests__/code-generator-contract.test.ts +0 -207
- package/core/src/generation/__tests__/code-generator.test.ts +0 -586
- package/core/src/generation/__tests__/crawler-pack-generator.test.ts +0 -479
- package/core/src/generation/__tests__/generation-e2e-b2bshop.test.ts +0 -718
- package/core/src/generation/__tests__/generation-integration.test.ts +0 -655
- package/core/src/generation/__tests__/pack-generator.test.ts +0 -408
- package/core/src/generation/__tests__/prompt-builder.test.ts +0 -200
- package/core/src/generation/__tests__/real-provider-integration.test.ts +0 -414
- package/core/src/generation/__tests__/source-analyzer.test.ts +0 -774
- package/core/src/generation/__tests__/test-optimizer.test.ts +0 -255
- package/core/src/generation/code-formatter.ts +0 -408
- package/core/src/generation/code-generator.ts +0 -470
- package/core/src/generation/crawler-pack-generator.ts +0 -289
- package/core/src/generation/generator.ts +0 -113
- package/core/src/generation/index.ts +0 -59
- package/core/src/generation/pack-generator.ts +0 -527
- package/core/src/generation/prompt-builder.ts +0 -772
- package/core/src/generation/source-analyzer.ts +0 -830
- package/core/src/generation/test-optimizer.ts +0 -474
- package/core/src/generation/types.ts +0 -217
- package/core/src/hooks/__tests__/compose.test.ts +0 -636
- package/core/src/hooks/__tests__/runner.test.ts +0 -478
- package/core/src/hooks/compose.ts +0 -268
- package/core/src/hooks/runner.ts +0 -364
- package/core/src/index.ts +0 -255
- package/core/src/pack/__tests__/migrator.test.ts +0 -594
- package/core/src/pack/__tests__/validator.test.ts +0 -759
- package/core/src/pack/migrator.ts +0 -353
- package/core/src/pack/validator.ts +0 -359
- package/core/src/pack-v2/__tests__/loader.test.ts +0 -533
- package/core/src/pack-v2/__tests__/migrator.test.ts +0 -455
- package/core/src/pack-v2/__tests__/validator.test.ts +0 -609
- package/core/src/pack-v2/index.ts +0 -41
- package/core/src/pack-v2/loader.ts +0 -358
- package/core/src/pack-v2/migrator.ts +0 -540
- package/core/src/pack-v2/validator.ts +0 -731
- package/core/src/parallel/README.md +0 -143
- package/core/src/parallel/index.ts +0 -16
- package/core/src/parallel/parallel-runner.ts +0 -282
- package/core/src/pom/__tests__/loader.test.ts +0 -378
- package/core/src/pom/base-page.ts +0 -425
- package/core/src/pom/index.ts +0 -45
- package/core/src/pom/loader.ts +0 -480
- package/core/src/pom/types.ts +0 -146
- package/core/src/proof/__tests__/proof-roundtrip.test.ts +0 -149
- package/core/src/proof/__tests__/schema-validation-manual.mjs +0 -211
- package/core/src/proof/__tests__/schema-validation.test.ts +0 -336
- package/core/src/proof/__tests__/signer.test.ts +0 -486
- package/core/src/proof/__tests__/temporal-regression.test.ts +0 -537
- package/core/src/proof/__tests__/verifier-advanced.test.ts +0 -588
- package/core/src/proof/__tests__/verifier.test.ts +0 -413
- package/core/src/proof/bundle.ts +0 -290
- package/core/src/proof/canonicalize.ts +0 -116
- package/core/src/proof/index.ts +0 -74
- package/core/src/proof/schema.ts +0 -285
- package/core/src/proof/signer.ts +0 -293
- package/core/src/proof/verifier.ts +0 -380
- package/core/src/regression/__tests__/detector.test.ts +0 -396
- package/core/src/regression/__tests__/trend-analyzer.test.ts +0 -300
- package/core/src/regression/detector.ts +0 -629
- package/core/src/regression/index.ts +0 -34
- package/core/src/regression/trend-analyzer.ts +0 -468
- package/core/src/regression/types.ts +0 -295
- package/core/src/regression/vault.ts +0 -419
- package/core/src/repair/__tests__/repairer.test.ts +0 -572
- package/core/src/repair/__tests__/types.test.ts +0 -302
- package/core/src/repair/engine/__tests__/fixer.test.ts +0 -482
- package/core/src/repair/engine/__tests__/suggestion-engine.test.ts +0 -395
- package/core/src/repair/engine/fixer.ts +0 -271
- package/core/src/repair/engine/suggestion-engine.ts +0 -234
- package/core/src/repair/index.ts +0 -53
- package/core/src/repair/repairer.ts +0 -376
- package/core/src/repair/types.ts +0 -119
- package/core/src/repair/utils/__tests__/error-analyzer.test.ts +0 -454
- package/core/src/repair/utils/error-analyzer.ts +0 -308
- package/core/src/reporting/README.md +0 -144
- package/core/src/reporting/html-reporter.ts +0 -835
- package/core/src/reporting/index.ts +0 -16
- package/core/src/retry/README.md +0 -192
- package/core/src/retry/__tests__/flakiness-integration.test.ts +0 -475
- package/core/src/retry/__tests__/retry-engine.test.ts +0 -424
- package/core/src/retry/flakiness-integration.ts +0 -267
- package/core/src/retry/index.ts +0 -48
- package/core/src/retry/retry-engine.ts +0 -368
- package/core/src/retry/types.ts +0 -208
- package/core/src/retry/vault.ts +0 -413
- package/core/src/runner/__tests__/flakiness-integration.test.ts +0 -566
- package/core/src/runner/__tests__/phase3-e2e-b2bshop.test.ts +0 -218
- package/core/src/runner/__tests__/phase3-e2e-reqres.test.ts +0 -199
- package/core/src/runner/__tests__/phase3-runner.test.ts +0 -1118
- package/core/src/runner/e2e-helpers.ts +0 -216
- package/core/src/runner/phase3-runner.ts +0 -1536
- package/core/src/schemas/gherkin-report.json +0 -122
- package/core/src/secrets/__tests__/crypto.test.ts +0 -180
- package/core/src/secrets/crypto.ts +0 -289
- package/core/src/secrets/manager.ts +0 -272
- package/core/src/security/__tests__/hardening.test.ts +0 -480
- package/core/src/security/redaction-patterns-extended.ts +0 -278
- package/core/src/security/redactor.ts +0 -326
- package/core/src/self-healing/assertion-healer.ts +0 -485
- package/core/src/self-healing/engine.ts +0 -626
- package/core/src/self-healing/index.ts +0 -33
- package/core/src/self-healing/selector-healer.ts +0 -488
- package/core/src/self-healing/types.ts +0 -193
- package/core/src/serve/diagnostics-collector.ts +0 -201
- package/core/src/serve/health-checker.ts +0 -274
- package/core/src/serve/index.ts +0 -9
- package/core/src/serve/metrics-collector.ts +0 -386
- package/core/src/serve/process-manager.ts +0 -265
- package/core/src/serve/server.ts +0 -230
- package/core/src/slo/config.ts +0 -408
- package/core/src/slo/index.ts +0 -68
- package/core/src/slo/sli-calculator.ts +0 -474
- package/core/src/slo/slo-tracker.ts +0 -481
- package/core/src/slo/types.ts +0 -408
- package/core/src/slo/vault.ts +0 -600
- package/core/src/tui/__tests__/monitor.test.ts +0 -336
- package/core/src/tui/__tests__/real-world.test.ts +0 -376
- package/core/src/tui/__tests__/renderer.test.ts +0 -201
- package/core/src/tui/__tests__/types.test.ts +0 -295
- package/core/src/tui/index.ts +0 -19
- package/core/src/tui/monitor.ts +0 -331
- package/core/src/tui/renderer.ts +0 -269
- package/core/src/tui/types.ts +0 -68
- package/core/src/types/pack-v1.ts +0 -305
- package/core/src/types/pack-v2.ts +0 -525
- package/core/src/types/trust-score.ts +0 -258
- package/core/src/vault/__tests__/flakiness-vault.test.ts +0 -562
- package/core/src/vault/__tests__/vault.test.ts +0 -259
- package/core/src/vault/cas.ts +0 -323
- package/core/src/vault/index.ts +0 -1361
- package/core/src/vault/schema.sql +0 -168
- package/core/src/visual/README.md +0 -185
- package/core/src/visual/index.ts +0 -14
- package/core/src/visual/visual-regression.ts +0 -347
- package/core/src/watch/__tests__/watch-mode.test.ts +0 -192
- package/core/src/watch/index.ts +0 -14
- package/core/src/watch/watch-mode.ts +0 -565
- package/core/tsconfig.json +0 -12
- package/core/vitest.config.ts +0 -52
- package/docs/ARCHITECTURE.md +0 -901
- package/docs/AUDIT-GLOBAL-DEC2025.md +0 -271
- package/docs/BETA_TESTING.md +0 -257
- package/docs/BETA_TESTING_PLAN.md +0 -727
- package/docs/CERTIFICATION-REPORT.md +0 -142
- package/docs/COMPLETE_AUDIT_REFACTORING.md +0 -965
- package/docs/DEVELOPMENT.md +0 -545
- package/docs/DEVELOPMENT_HISTORY.md +0 -345
- package/docs/LIMITATIONS.md +0 -176
- package/docs/MIGRATION.md +0 -303
- package/docs/OPTION_3_4_EXPLORATION.md +0 -1257
- package/docs/PHASE1_PERFORMANCE.md +0 -144
- package/docs/QA360_Cloud.postman_collection.json +0 -89
- package/docs/QA360_TESTING_PHILOSOPHY.md +0 -769
- package/docs/QA_TEST_PLAN.md +0 -727
- package/docs/README.md +0 -50
- package/docs/STATUS.md +0 -198
- package/docs/STRATEGIC_STUDY_GOOSE_INTEGRATION.md +0 -615
- package/docs/USER_GUIDE.md +0 -687
- package/docs/WORK-DONE-ADAPTER-TESTS.md +0 -136
- package/docs/adapters-security.md +0 -485
- package/docs/architecture-diagram.mmd +0 -168
- package/docs/archive/ARCH-01-DAY6-BUILD-FIXES.md +0 -396
- package/docs/archive/ARCH-01-DAY6-FINAL-STATUS.md +0 -324
- package/docs/archive/ARCH-01_MCP_MERGE_ANALYSIS.md +0 -644
- package/docs/archive/ARCH-01_NEXT_STEPS.md +0 -60
- package/docs/archive/BRANCH_PROTECTION.md +0 -183
- package/docs/archive/CI_LOCKDOWN_CHECKLIST.md +0 -222
- package/docs/archive/HANDOFF_TEST-01.md +0 -669
- package/docs/archive/LEGAL_READY_PLACEHOLDERS.md +0 -372
- package/docs/archive/NODE_UPGRADE_GUIDE.md +0 -188
- package/docs/archive/PHASE1_COMPLETION.md +0 -386
- package/docs/archive/PHASE2_COMPLETION.md +0 -404
- package/docs/archive/PHASE3_AND_4_FINAL.md +0 -360
- package/docs/archive/PHASE3_COMPLETE.md +0 -301
- package/docs/archive/PHASE3_STATUS.md +0 -255
- package/docs/archive/PRE-WEEK2-AUDIT.md +0 -364
- package/docs/archive/README.md +0 -16
- package/docs/archive/SCHEMA_AJV_2020_FIX.md +0 -245
- package/docs/archive/TEST-01_AUDIT_REPORT.md +0 -240
- package/docs/archive/TEST-01_COVERAGE_PLAN.md +0 -423
- package/docs/archive/obsolete-proposals/dom-element-discovery-mode.md +0 -250
- package/docs/archive/obsolete-proposals/qa360-comprehensive-test-plan.md +0 -1249
- package/docs/archive/obsolete-proposals/qa360-quick-start-guide.md +0 -298
- package/docs/archive/obsolete-proposals/technical-plan-dom-discovery.md +0 -870
- package/docs/budgets-advanced.md +0 -308
- package/docs/examples/history-export-gc.md +0 -285
- package/docs/examples/pack-v2-complete.yaml +0 -158
- package/docs/examples/pack-v2-quickstart.yaml +0 -24
- package/docs/examples/pack-v2-ui-login.yaml +0 -81
- package/docs/examples/qa360-report.json +0 -50
- package/docs/history.md +0 -565
- package/docs/hooks.md +0 -304
- package/docs/llm-providers.md +0 -512
- package/docs/mcp-server.md +0 -651
- package/docs/mcp-tools.md +0 -1131
- package/docs/pack-v1.md +0 -383
- package/docs/pack-v2.md +0 -558
- package/docs/page-objects.md +0 -366
- package/docs/proofs.md +0 -670
- package/docs/quickstart-5min.md +0 -257
- package/docs/readiness-ci.md +0 -654
- package/docs/rfc/README.md +0 -20
- package/docs/rfc/proof-bundle-v1.md +0 -787
- package/docs/secrets.md +0 -392
- package/docs/serve.md +0 -494
- package/docs/unit-test-adapters.md +0 -168
- package/docs/vault.md +0 -491
- package/e2e/qa360-e2e.test.ts +0 -696
- package/e2e/vitest.config.ts +0 -18
- package/examples/README.md +0 -50
- package/examples/ci/docker-compose-serve.yml +0 -375
- package/examples/ci/github-actions-serve.yml +0 -345
- package/examples/ci/gitlab-ci-serve.yml +0 -407
- package/examples/datasets/README.md +0 -101
- package/examples/datasets/b2bshop.ts +0 -155
- package/examples/datasets/index.ts +0 -57
- package/examples/datasets/reqres.ts +0 -195
- package/examples/fixtures-demo/fixtures/users.yml +0 -39
- package/examples/fixtures-demo/pack.yml +0 -71
- package/examples/future-api/README.md +0 -16
- package/examples/future-api/diag.js +0 -7
- package/examples/future-api/health.js +0 -4
- package/examples/future-api/packs.js +0 -13
- package/examples/future-api/runpack.js +0 -10
- package/examples/generation/README.md +0 -148
- package/examples/generation/pack-generator-example.js +0 -115
- package/examples/generation/source-analyzer-example.js +0 -115
- package/examples/httpbin/pack.yml +0 -59
- package/examples/load-testing/mcp-load.yml +0 -115
- package/examples/load-testing/mcp-stdio.yml +0 -95
- package/examples/mcp/claude-desktop-config.json +0 -33
- package/examples/mcp/claude-desktop.json +0 -16
- package/examples/mcp/conversation-sample.md +0 -131
- package/examples/mcp/demo-60s.md +0 -330
- package/examples/mcp/sample-conversation.jsonl +0 -21
- package/examples/mcp/vscode-settings.json +0 -22
- package/examples/pack-v2-complete.yml +0 -242
- package/examples/pack-v2-examples.md +0 -244
- package/examples/pack-v2-quickstart.yml +0 -55
- package/examples/packs-business/ecommerce-api.yml +0 -121
- package/examples/packs-business/saas-dashboard-ui.yml +0 -133
- package/examples/packs-conformance/compose-multi.yml +0 -174
- package/examples/packs-conformance/full.yml +0 -152
- package/examples/packs-conformance/heavy-artifacts.yml +0 -152
- package/examples/packs-conformance/minimal.yml +0 -71
- package/examples/packs-conformance/secrets-missing.yml +0 -97
- package/examples/packs-conformance/timeouts.yml +0 -77
- package/examples/pom-demo/README.md +0 -104
- package/examples/pom-demo/pack.yml +0 -60
- package/examples/pom-demo/pages/DashboardPage.page.ts +0 -73
- package/examples/pom-demo/pages/LoginPage.page.ts +0 -76
- package/examples/proofs/e2e-playwright-proof.json +0 -75
- package/examples/proofs/httpbin-proof.json +0 -69
- package/examples/proofs/multi-adapter-proof.json +0 -117
- package/examples/proofs/test-proof.json +0 -26
- package/examples/restful-api-dev/README.md +0 -102
- package/examples/restful-api-dev/restful-api-advanced.yml +0 -29
- package/examples/restful-api-dev/restful-api-basic.yml +0 -29
- package/examples/web-lite/.github/workflows/qa360-phase3.yml +0 -73
- package/examples/web-lite/api-mock/server.js +0 -258
- package/examples/web-lite/pack.yml +0 -71
- package/examples/web-lite/services.yml +0 -43
- package/examples/web-lite/web-content/healthz +0 -1
- package/examples/web-lite/web-content/index.html +0 -259
- package/packages/mcp/CHANGELOG.md +0 -109
- package/packages/mcp/IMPLEMENTATION_SUMMARY.md +0 -350
- package/packages/mcp/LICENSE +0 -21
- package/packages/mcp/QUICK_START.md +0 -291
- package/packages/mcp/README.md +0 -294
- package/packages/mcp/TELEMETRY.md +0 -220
- package/packages/mcp/package.json +0 -91
- package/packages/mcp/scripts/generate-sbom-fallback.cjs +0 -84
- package/packages/mcp/scripts/safe-postinstall.cjs +0 -32
- package/packages/mcp/src/__tests__/contract.test.ts +0 -902
- package/packages/mcp/src/cli/cli.ts +0 -137
- package/packages/mcp/src/cli/doctor.ts +0 -286
- package/packages/mcp/src/cli/fix.ts +0 -99
- package/packages/mcp/src/cli/init.ts +0 -233
- package/packages/mcp/src/cli/postinstall.ts +0 -14
- package/packages/mcp/src/cli/reset.ts +0 -44
- package/packages/mcp/src/cli/telemetry.ts +0 -166
- package/packages/mcp/src/cli/test-dx.ts +0 -94
- package/packages/mcp/src/cli/uninstall.ts +0 -80
- package/packages/mcp/src/cli/up.ts +0 -178
- package/packages/mcp/src/index.ts +0 -12
- package/packages/mcp/src/scripts/e2e-local.ts +0 -337
- package/packages/mcp/src/scripts/verify-settings.ts +0 -242
- package/packages/mcp/src/security/audit.ts +0 -244
- package/packages/mcp/src/security/manager.ts +0 -242
- package/packages/mcp/src/server/full-server.ts +0 -212
- package/packages/mcp/src/server/minimal-server.ts +0 -134
- package/packages/mcp/src/tools/history.ts +0 -388
- package/packages/mcp/src/tools/pack.ts +0 -449
- package/packages/mcp/src/tools/registry.ts +0 -638
- package/packages/mcp/src/tools/report.ts +0 -100
- package/packages/mcp/src/tools/run.ts +0 -268
- package/packages/mcp/src/tools/secrets.ts +0 -198
- package/packages/mcp/src/tools/serve.ts +0 -221
- package/packages/mcp/src/tools/triage.ts +0 -532
- package/packages/mcp/src/tools/types.ts +0 -26
- package/packages/mcp/src/tools/vault.ts +0 -164
- package/packages/mcp/src/tools/verify.ts +0 -166
- package/packages/mcp/src/types/index.ts +0 -311
- package/packages/mcp/src/types/mcp-stubs.ts +0 -83
- package/packages/mcp/tsconfig.json +0 -16
- package/playwright.config.ts +0 -20
- package/pnpm-workspace.yaml +0 -4
- package/run-test-and-push.sh +0 -20
- package/scripts/build-proof-cli.sh +0 -110
- package/scripts/ci/check-windows-paths.js +0 -92
- package/scripts/ci/invariants.sh +0 -124
- package/scripts/ci/make-final-bundle.js +0 -106
- package/scripts/ci/mcp-run-multipack.js +0 -305
- package/scripts/ci/run-pack-suite.sh +0 -103
- package/scripts/ci/run-phase7-final.sh +0 -190
- package/scripts/ci/slo-assert.js +0 -158
- package/scripts/ci/test-fault-tolerance.sh +0 -301
- package/scripts/install-mcp.sh +0 -66
- package/scripts/mcp-smoke.mjs +0 -27
- package/scripts/smoke.sh +0 -26
- package/scripts/stress-test.js +0 -288
- package/scripts/sync-version.mjs +0 -50
- package/scripts/validate-examples.mjs +0 -404
- package/scripts/validation/simple-pack-check.sh +0 -51
- package/scripts/validation/validate-universal-pack.mjs +0 -77
- package/scripts/verify-persistence.js +0 -127
- package/test-pack.yaml +0 -43
- package/test-results/.last-run.json +0 -4
- package/test-runner.mjs +0 -87
- package/tests/artifacts.spec.js +0 -147
- package/tests/contracts.spec.js +0 -239
- package/tests/e2e/assertions.test.mjs +0 -370
- package/tests/e2e/crawler.test.mjs +0 -451
- package/tests/e2e/playwright-plus-plus.test.mjs +0 -604
- package/tests/e2e/proof-bundle.test.mjs +0 -258
- package/tests/e2e/real-world/saucedemo.test.mjs +0 -714
- package/tests/e2e/real-world/the-internet-herokuapp.test.mjs +0 -760
- package/tests/e2e/ui-actions.test.mjs +0 -546
- package/tests/gherkin.e2e.spec.ts +0 -310
- package/tests/no-console-errors.spec.js +0 -136
- package/tests/pdf.spec.ts +0 -252
- package/tests/run-pack.spec.ts +0 -58
- package/tsconfig.base.json +0 -15
- package/tsconfig.build.json +0 -8
- package/tsconfig.json +0 -37
- package/tsconfig.test.json +0 -18
- package/typedoc.json +0 -37
- package/ui/README.md +0 -50
- package/verify-proof.mjs +0 -60
|
@@ -1,636 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ComposeHelper Tests
|
|
3
|
-
* Tests Docker Compose operations with mocked child_process
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
7
|
-
import { EventEmitter } from 'events';
|
|
8
|
-
import { mkdirSync, writeFileSync, rmSync, existsSync } from 'fs';
|
|
9
|
-
import { join } from 'path';
|
|
10
|
-
import { tmpdir } from 'os';
|
|
11
|
-
|
|
12
|
-
// Mock child_process BEFORE importing ComposeHelper
|
|
13
|
-
vi.mock('child_process', () => {
|
|
14
|
-
return {
|
|
15
|
-
spawn: vi.fn()
|
|
16
|
-
};
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
// Import AFTER mock
|
|
20
|
-
import { ComposeHelper } from '../compose.js';
|
|
21
|
-
|
|
22
|
-
describe('ComposeHelper', () => {
|
|
23
|
-
let testDir: string;
|
|
24
|
-
let helper: ComposeHelper;
|
|
25
|
-
let mockSpawn: any;
|
|
26
|
-
|
|
27
|
-
beforeEach(async () => {
|
|
28
|
-
// Create temp directory
|
|
29
|
-
testDir = join(tmpdir(), `qa360-compose-test-${Date.now()}`);
|
|
30
|
-
mkdirSync(testDir, { recursive: true });
|
|
31
|
-
|
|
32
|
-
// Create dummy compose file
|
|
33
|
-
const composeFile = join(testDir, 'services.yml');
|
|
34
|
-
writeFileSync(composeFile, `
|
|
35
|
-
version: '3'
|
|
36
|
-
services:
|
|
37
|
-
db:
|
|
38
|
-
image: postgres:14
|
|
39
|
-
ports:
|
|
40
|
-
- "5432:5432"
|
|
41
|
-
`, 'utf-8');
|
|
42
|
-
|
|
43
|
-
// Get mock spawn
|
|
44
|
-
const { spawn } = await import('child_process');
|
|
45
|
-
mockSpawn = spawn;
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
afterEach(() => {
|
|
49
|
-
if (existsSync(testDir)) {
|
|
50
|
-
rmSync(testDir, { recursive: true, force: true });
|
|
51
|
-
}
|
|
52
|
-
vi.clearAllMocks();
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
describe('Construction', () => {
|
|
56
|
-
it('should create helper with default compose file', () => {
|
|
57
|
-
helper = new ComposeHelper({ workingDir: testDir });
|
|
58
|
-
expect(helper).toBeDefined();
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
it('should create helper with custom compose file', () => {
|
|
62
|
-
helper = new ComposeHelper({
|
|
63
|
-
workingDir: testDir,
|
|
64
|
-
composeFile: 'docker-compose.yml'
|
|
65
|
-
});
|
|
66
|
-
expect(helper).toBeDefined();
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
describe('up() - Start Services', () => {
|
|
71
|
-
it('should start services successfully', async () => {
|
|
72
|
-
helper = new ComposeHelper({ workingDir: testDir });
|
|
73
|
-
|
|
74
|
-
// Mock successful docker --version
|
|
75
|
-
mockSpawn.mockImplementationOnce(() => {
|
|
76
|
-
const mockChild = new EventEmitter();
|
|
77
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
78
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
79
|
-
(mockChild as any).kill = vi.fn();
|
|
80
|
-
|
|
81
|
-
setTimeout(() => {
|
|
82
|
-
(mockChild as any).stdout.emit('data', 'Docker version 24.0.0');
|
|
83
|
-
mockChild.emit('close', 0);
|
|
84
|
-
}, 10);
|
|
85
|
-
|
|
86
|
-
return mockChild;
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
// Mock successful compose up
|
|
90
|
-
mockSpawn.mockImplementationOnce(() => {
|
|
91
|
-
const mockChild = new EventEmitter();
|
|
92
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
93
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
94
|
-
(mockChild as any).kill = vi.fn();
|
|
95
|
-
|
|
96
|
-
setTimeout(() => {
|
|
97
|
-
(mockChild as any).stdout.emit('data', 'Container db started');
|
|
98
|
-
mockChild.emit('close', 0);
|
|
99
|
-
}, 10);
|
|
100
|
-
|
|
101
|
-
return mockChild;
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
await helper.up();
|
|
105
|
-
expect(mockSpawn).toHaveBeenCalledTimes(2);
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
it('should throw error if compose file not found', async () => {
|
|
109
|
-
helper = new ComposeHelper({
|
|
110
|
-
workingDir: testDir,
|
|
111
|
-
composeFile: 'non-existent.yml'
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
await expect(helper.up()).rejects.toThrow('Compose file not found');
|
|
115
|
-
await expect(helper.up()).rejects.toMatchObject({
|
|
116
|
-
code: 'QH001'
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
it('should throw error if Docker not available', async () => {
|
|
121
|
-
helper = new ComposeHelper({ workingDir: testDir });
|
|
122
|
-
|
|
123
|
-
// Mock failed docker --version
|
|
124
|
-
mockSpawn.mockImplementationOnce(() => {
|
|
125
|
-
const mockChild = new EventEmitter();
|
|
126
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
127
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
128
|
-
(mockChild as any).kill = vi.fn();
|
|
129
|
-
|
|
130
|
-
setTimeout(() => {
|
|
131
|
-
mockChild.emit('close', 1);
|
|
132
|
-
}, 10);
|
|
133
|
-
|
|
134
|
-
return mockChild;
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
await expect(helper.up()).rejects.toMatchObject({
|
|
138
|
-
code: 'QH005' // Docker daemon not running
|
|
139
|
-
});
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
it('should skip if services already up', async () => {
|
|
143
|
-
helper = new ComposeHelper({ workingDir: testDir });
|
|
144
|
-
|
|
145
|
-
// First up - success
|
|
146
|
-
mockSpawn.mockImplementation(() => {
|
|
147
|
-
const mockChild = new EventEmitter();
|
|
148
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
149
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
150
|
-
(mockChild as any).kill = vi.fn();
|
|
151
|
-
|
|
152
|
-
setTimeout(() => {
|
|
153
|
-
(mockChild as any).stdout.emit('data', 'OK');
|
|
154
|
-
mockChild.emit('close', 0);
|
|
155
|
-
}, 10);
|
|
156
|
-
|
|
157
|
-
return mockChild;
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
await helper.up();
|
|
161
|
-
const firstCallCount = mockSpawn.mock.calls.length;
|
|
162
|
-
|
|
163
|
-
// Second up - should skip
|
|
164
|
-
await helper.up();
|
|
165
|
-
const secondCallCount = mockSpawn.mock.calls.length;
|
|
166
|
-
|
|
167
|
-
// No additional spawn calls
|
|
168
|
-
expect(secondCallCount).toBe(firstCallCount);
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
it('should handle compose up failure', async () => {
|
|
172
|
-
helper = new ComposeHelper({ workingDir: testDir });
|
|
173
|
-
|
|
174
|
-
// Mock successful docker --version
|
|
175
|
-
mockSpawn.mockImplementationOnce(() => {
|
|
176
|
-
const mockChild = new EventEmitter();
|
|
177
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
178
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
179
|
-
(mockChild as any).kill = vi.fn();
|
|
180
|
-
|
|
181
|
-
setTimeout(() => {
|
|
182
|
-
(mockChild as any).stdout.emit('data', 'Docker version 24.0.0');
|
|
183
|
-
mockChild.emit('close', 0);
|
|
184
|
-
}, 10);
|
|
185
|
-
|
|
186
|
-
return mockChild;
|
|
187
|
-
});
|
|
188
|
-
|
|
189
|
-
// Mock failed compose up
|
|
190
|
-
mockSpawn.mockImplementationOnce(() => {
|
|
191
|
-
const mockChild = new EventEmitter();
|
|
192
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
193
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
194
|
-
(mockChild as any).kill = vi.fn();
|
|
195
|
-
|
|
196
|
-
setTimeout(() => {
|
|
197
|
-
(mockChild as any).stderr.emit('data', 'Network error');
|
|
198
|
-
mockChild.emit('close', 1);
|
|
199
|
-
}, 10);
|
|
200
|
-
|
|
201
|
-
return mockChild;
|
|
202
|
-
});
|
|
203
|
-
|
|
204
|
-
await expect(helper.up()).rejects.toMatchObject({
|
|
205
|
-
code: 'QH002'
|
|
206
|
-
});
|
|
207
|
-
});
|
|
208
|
-
|
|
209
|
-
it('should handle timeout', async () => {
|
|
210
|
-
helper = new ComposeHelper({ workingDir: testDir });
|
|
211
|
-
|
|
212
|
-
// Mock docker --version that never completes
|
|
213
|
-
mockSpawn.mockImplementationOnce(() => {
|
|
214
|
-
const mockChild = new EventEmitter();
|
|
215
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
216
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
217
|
-
(mockChild as any).kill = vi.fn();
|
|
218
|
-
// Never emit close event
|
|
219
|
-
return mockChild;
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
await expect(helper.up(100)).rejects.toThrow();
|
|
223
|
-
}, 10000);
|
|
224
|
-
});
|
|
225
|
-
|
|
226
|
-
describe('down() - Stop Services', () => {
|
|
227
|
-
it('should stop services successfully', async () => {
|
|
228
|
-
helper = new ComposeHelper({ workingDir: testDir });
|
|
229
|
-
|
|
230
|
-
// Mock successful compose down
|
|
231
|
-
mockSpawn.mockImplementationOnce(() => {
|
|
232
|
-
const mockChild = new EventEmitter();
|
|
233
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
234
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
235
|
-
(mockChild as any).kill = vi.fn();
|
|
236
|
-
|
|
237
|
-
setTimeout(() => {
|
|
238
|
-
(mockChild as any).stdout.emit('data', 'Containers stopped');
|
|
239
|
-
mockChild.emit('close', 0);
|
|
240
|
-
}, 10);
|
|
241
|
-
|
|
242
|
-
return mockChild;
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
await helper.down();
|
|
246
|
-
expect(mockSpawn).toHaveBeenCalled();
|
|
247
|
-
});
|
|
248
|
-
|
|
249
|
-
it('should not throw on down errors', async () => {
|
|
250
|
-
helper = new ComposeHelper({ workingDir: testDir });
|
|
251
|
-
|
|
252
|
-
// Mock failed compose down
|
|
253
|
-
mockSpawn.mockImplementationOnce(() => {
|
|
254
|
-
const mockChild = new EventEmitter();
|
|
255
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
256
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
257
|
-
(mockChild as any).kill = vi.fn();
|
|
258
|
-
|
|
259
|
-
setTimeout(() => {
|
|
260
|
-
(mockChild as any).stderr.emit('data', 'Some error');
|
|
261
|
-
mockChild.emit('close', 1);
|
|
262
|
-
}, 10);
|
|
263
|
-
|
|
264
|
-
return mockChild;
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
// Should not throw
|
|
268
|
-
await expect(helper.down()).resolves.not.toThrow();
|
|
269
|
-
});
|
|
270
|
-
});
|
|
271
|
-
|
|
272
|
-
describe('getStatus() - Service Status', () => {
|
|
273
|
-
it('should get service status as JSON', async () => {
|
|
274
|
-
helper = new ComposeHelper({ workingDir: testDir });
|
|
275
|
-
|
|
276
|
-
// Mock compose ps --format json
|
|
277
|
-
mockSpawn.mockImplementationOnce(() => {
|
|
278
|
-
const mockChild = new EventEmitter();
|
|
279
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
280
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
281
|
-
(mockChild as any).kill = vi.fn();
|
|
282
|
-
|
|
283
|
-
setTimeout(() => {
|
|
284
|
-
(mockChild as any).stdout.emit('data', JSON.stringify({
|
|
285
|
-
Name: 'db',
|
|
286
|
-
State: 'running',
|
|
287
|
-
Ports: '5432:5432'
|
|
288
|
-
}));
|
|
289
|
-
mockChild.emit('close', 0);
|
|
290
|
-
}, 10);
|
|
291
|
-
|
|
292
|
-
return mockChild;
|
|
293
|
-
});
|
|
294
|
-
|
|
295
|
-
const status = await helper.getStatus();
|
|
296
|
-
expect(status).toHaveLength(1);
|
|
297
|
-
expect(status[0]).toMatchObject({
|
|
298
|
-
service: 'db',
|
|
299
|
-
status: 'running'
|
|
300
|
-
});
|
|
301
|
-
});
|
|
302
|
-
|
|
303
|
-
it('should handle empty status', async () => {
|
|
304
|
-
helper = new ComposeHelper({ workingDir: testDir });
|
|
305
|
-
|
|
306
|
-
// Mock empty response
|
|
307
|
-
mockSpawn.mockImplementationOnce(() => {
|
|
308
|
-
const mockChild = new EventEmitter();
|
|
309
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
310
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
311
|
-
(mockChild as any).kill = vi.fn();
|
|
312
|
-
|
|
313
|
-
setTimeout(() => {
|
|
314
|
-
mockChild.emit('close', 0);
|
|
315
|
-
}, 10);
|
|
316
|
-
|
|
317
|
-
return mockChild;
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
const status = await helper.getStatus();
|
|
321
|
-
expect(status).toEqual([]);
|
|
322
|
-
});
|
|
323
|
-
|
|
324
|
-
it('should handle invalid JSON gracefully', async () => {
|
|
325
|
-
helper = new ComposeHelper({ workingDir: testDir });
|
|
326
|
-
|
|
327
|
-
// Mock invalid JSON
|
|
328
|
-
mockSpawn.mockImplementationOnce(() => {
|
|
329
|
-
const mockChild = new EventEmitter();
|
|
330
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
331
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
332
|
-
(mockChild as any).kill = vi.fn();
|
|
333
|
-
|
|
334
|
-
setTimeout(() => {
|
|
335
|
-
(mockChild as any).stdout.emit('data', 'not valid json');
|
|
336
|
-
mockChild.emit('close', 0);
|
|
337
|
-
}, 10);
|
|
338
|
-
|
|
339
|
-
return mockChild;
|
|
340
|
-
});
|
|
341
|
-
|
|
342
|
-
const status = await helper.getStatus();
|
|
343
|
-
expect(status).toEqual([]);
|
|
344
|
-
});
|
|
345
|
-
|
|
346
|
-
it('should handle errors gracefully', async () => {
|
|
347
|
-
helper = new ComposeHelper({ workingDir: testDir });
|
|
348
|
-
|
|
349
|
-
// Mock error
|
|
350
|
-
mockSpawn.mockImplementationOnce(() => {
|
|
351
|
-
const mockChild = new EventEmitter();
|
|
352
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
353
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
354
|
-
(mockChild as any).kill = vi.fn();
|
|
355
|
-
|
|
356
|
-
setTimeout(() => {
|
|
357
|
-
mockChild.emit('close', 1);
|
|
358
|
-
}, 10);
|
|
359
|
-
|
|
360
|
-
return mockChild;
|
|
361
|
-
});
|
|
362
|
-
|
|
363
|
-
const status = await helper.getStatus();
|
|
364
|
-
expect(status).toEqual([]);
|
|
365
|
-
});
|
|
366
|
-
});
|
|
367
|
-
|
|
368
|
-
describe('Error Codes', () => {
|
|
369
|
-
it('should return QH001 for missing compose file', async () => {
|
|
370
|
-
helper = new ComposeHelper({
|
|
371
|
-
workingDir: testDir,
|
|
372
|
-
composeFile: 'missing.yml'
|
|
373
|
-
});
|
|
374
|
-
|
|
375
|
-
try {
|
|
376
|
-
await helper.up();
|
|
377
|
-
expect.fail('Should have thrown');
|
|
378
|
-
} catch (error: any) {
|
|
379
|
-
expect(error.code).toBe('QH001');
|
|
380
|
-
expect(error.suggestion).toContain('Create');
|
|
381
|
-
}
|
|
382
|
-
});
|
|
383
|
-
});
|
|
384
|
-
|
|
385
|
-
describe('down() - Additional Coverage', () => {
|
|
386
|
-
it('should successfully stop services and clean up', async () => {
|
|
387
|
-
helper = new ComposeHelper({ workingDir: testDir });
|
|
388
|
-
|
|
389
|
-
// Mock successful docker --version
|
|
390
|
-
mockSpawn.mockImplementationOnce(() => {
|
|
391
|
-
const mockChild = new EventEmitter();
|
|
392
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
393
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
394
|
-
(mockChild as any).kill = vi.fn();
|
|
395
|
-
|
|
396
|
-
setTimeout(() => {
|
|
397
|
-
(mockChild as any).stdout.emit('data', 'Docker version 24.0.0');
|
|
398
|
-
mockChild.emit('close', 0);
|
|
399
|
-
}, 10);
|
|
400
|
-
|
|
401
|
-
return mockChild;
|
|
402
|
-
});
|
|
403
|
-
|
|
404
|
-
// Mock successful compose up first
|
|
405
|
-
mockSpawn.mockImplementationOnce(() => {
|
|
406
|
-
const mockChild = new EventEmitter();
|
|
407
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
408
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
409
|
-
(mockChild as any).kill = vi.fn();
|
|
410
|
-
|
|
411
|
-
setTimeout(() => {
|
|
412
|
-
(mockChild as any).stdout.emit('data', 'Services started');
|
|
413
|
-
mockChild.emit('close', 0);
|
|
414
|
-
}, 10);
|
|
415
|
-
|
|
416
|
-
return mockChild;
|
|
417
|
-
});
|
|
418
|
-
|
|
419
|
-
await helper.up();
|
|
420
|
-
|
|
421
|
-
// Mock successful compose down
|
|
422
|
-
mockSpawn.mockImplementationOnce(() => {
|
|
423
|
-
const mockChild = new EventEmitter();
|
|
424
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
425
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
426
|
-
(mockChild as any).kill = vi.fn();
|
|
427
|
-
|
|
428
|
-
setTimeout(() => {
|
|
429
|
-
(mockChild as any).stdout.emit('data', 'Services stopped');
|
|
430
|
-
mockChild.emit('close', 0);
|
|
431
|
-
}, 10);
|
|
432
|
-
|
|
433
|
-
return mockChild;
|
|
434
|
-
});
|
|
435
|
-
|
|
436
|
-
await helper.down();
|
|
437
|
-
|
|
438
|
-
expect(helper.isServicesUp()).toBe(false);
|
|
439
|
-
});
|
|
440
|
-
|
|
441
|
-
it('should handle down warnings gracefully', async () => {
|
|
442
|
-
helper = new ComposeHelper({ workingDir: testDir });
|
|
443
|
-
|
|
444
|
-
// Mock compose down with non-zero exit but not critical
|
|
445
|
-
mockSpawn.mockImplementationOnce(() => {
|
|
446
|
-
const mockChild = new EventEmitter();
|
|
447
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
448
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
449
|
-
(mockChild as any).kill = vi.fn();
|
|
450
|
-
|
|
451
|
-
setTimeout(() => {
|
|
452
|
-
(mockChild as any).stderr.emit('data', 'Some warning');
|
|
453
|
-
mockChild.emit('close', 1);
|
|
454
|
-
}, 10);
|
|
455
|
-
|
|
456
|
-
return mockChild;
|
|
457
|
-
});
|
|
458
|
-
|
|
459
|
-
// Should not throw even with warnings
|
|
460
|
-
await expect(helper.down()).resolves.not.toThrow();
|
|
461
|
-
expect(helper.isServicesUp()).toBe(false);
|
|
462
|
-
});
|
|
463
|
-
});
|
|
464
|
-
|
|
465
|
-
describe('getStatus() - Error Handling', () => {
|
|
466
|
-
it('should handle errors gracefully and return empty array', async () => {
|
|
467
|
-
helper = new ComposeHelper({ workingDir: testDir });
|
|
468
|
-
|
|
469
|
-
// Mock error during ps command
|
|
470
|
-
mockSpawn.mockImplementationOnce(() => {
|
|
471
|
-
const mockChild = new EventEmitter();
|
|
472
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
473
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
474
|
-
(mockChild as any).kill = vi.fn();
|
|
475
|
-
|
|
476
|
-
setTimeout(() => {
|
|
477
|
-
mockChild.emit('error', new Error('Command failed'));
|
|
478
|
-
}, 10);
|
|
479
|
-
|
|
480
|
-
return mockChild;
|
|
481
|
-
});
|
|
482
|
-
|
|
483
|
-
const status = await helper.getStatus();
|
|
484
|
-
expect(status).toEqual([]);
|
|
485
|
-
});
|
|
486
|
-
|
|
487
|
-
it('should handle JSON parsing errors in getStatus', async () => {
|
|
488
|
-
helper = new ComposeHelper({ workingDir: testDir });
|
|
489
|
-
|
|
490
|
-
// Mock executeCompose to throw an error
|
|
491
|
-
vi.spyOn(helper as any, 'executeCompose').mockRejectedValueOnce(new Error('Failed to execute'));
|
|
492
|
-
|
|
493
|
-
const status = await helper.getStatus();
|
|
494
|
-
expect(status).toEqual([]);
|
|
495
|
-
});
|
|
496
|
-
});
|
|
497
|
-
|
|
498
|
-
describe('Public Helper Methods', () => {
|
|
499
|
-
it('should return compose file path', () => {
|
|
500
|
-
helper = new ComposeHelper({
|
|
501
|
-
workingDir: testDir,
|
|
502
|
-
composeFile: 'custom-compose.yml'
|
|
503
|
-
});
|
|
504
|
-
|
|
505
|
-
const path = helper.getComposeFilePath();
|
|
506
|
-
expect(path).toContain('custom-compose.yml');
|
|
507
|
-
expect(path).toContain(testDir);
|
|
508
|
-
});
|
|
509
|
-
|
|
510
|
-
it('should track services up/down state', async () => {
|
|
511
|
-
helper = new ComposeHelper({ workingDir: testDir });
|
|
512
|
-
|
|
513
|
-
expect(helper.isServicesUp()).toBe(false);
|
|
514
|
-
|
|
515
|
-
// Mock successful up
|
|
516
|
-
mockSpawn.mockImplementation(() => {
|
|
517
|
-
const mockChild = new EventEmitter();
|
|
518
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
519
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
520
|
-
(mockChild as any).kill = vi.fn();
|
|
521
|
-
|
|
522
|
-
setTimeout(() => {
|
|
523
|
-
(mockChild as any).stdout.emit('data', 'OK');
|
|
524
|
-
mockChild.emit('close', 0);
|
|
525
|
-
}, 10);
|
|
526
|
-
|
|
527
|
-
return mockChild;
|
|
528
|
-
});
|
|
529
|
-
|
|
530
|
-
await helper.up();
|
|
531
|
-
expect(helper.isServicesUp()).toBe(true);
|
|
532
|
-
|
|
533
|
-
await helper.down();
|
|
534
|
-
expect(helper.isServicesUp()).toBe(false);
|
|
535
|
-
});
|
|
536
|
-
});
|
|
537
|
-
|
|
538
|
-
describe('checkDockerAvailable - Error Cases', () => {
|
|
539
|
-
it('should throw QH004 when docker command fails', async () => {
|
|
540
|
-
helper = new ComposeHelper({ workingDir: testDir });
|
|
541
|
-
|
|
542
|
-
// Mock failed docker --version
|
|
543
|
-
mockSpawn.mockImplementationOnce(() => {
|
|
544
|
-
const mockChild = new EventEmitter();
|
|
545
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
546
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
547
|
-
(mockChild as any).kill = vi.fn();
|
|
548
|
-
|
|
549
|
-
setTimeout(() => {
|
|
550
|
-
mockChild.emit('close', 1);
|
|
551
|
-
}, 10);
|
|
552
|
-
|
|
553
|
-
return mockChild;
|
|
554
|
-
});
|
|
555
|
-
|
|
556
|
-
try {
|
|
557
|
-
await helper.up();
|
|
558
|
-
expect.fail('Should have thrown');
|
|
559
|
-
} catch (error: any) {
|
|
560
|
-
expect(error.code).toBe('QH005'); // Daemon not running
|
|
561
|
-
}
|
|
562
|
-
});
|
|
563
|
-
});
|
|
564
|
-
|
|
565
|
-
describe('validateComposeFile()', () => {
|
|
566
|
-
it('should validate valid compose file', async () => {
|
|
567
|
-
helper = new ComposeHelper({ workingDir: testDir });
|
|
568
|
-
|
|
569
|
-
// Mock successful compose config
|
|
570
|
-
mockSpawn.mockImplementationOnce(() => {
|
|
571
|
-
const mockChild = new EventEmitter();
|
|
572
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
573
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
574
|
-
(mockChild as any).kill = vi.fn();
|
|
575
|
-
|
|
576
|
-
setTimeout(() => {
|
|
577
|
-
(mockChild as any).stdout.emit('data', 'Config is valid');
|
|
578
|
-
mockChild.emit('close', 0);
|
|
579
|
-
}, 10);
|
|
580
|
-
|
|
581
|
-
return mockChild;
|
|
582
|
-
});
|
|
583
|
-
|
|
584
|
-
const result = await helper.validateComposeFile();
|
|
585
|
-
expect(result.valid).toBe(true);
|
|
586
|
-
expect(result.errors).toHaveLength(0);
|
|
587
|
-
});
|
|
588
|
-
|
|
589
|
-
it('should detect missing compose file', async () => {
|
|
590
|
-
helper = new ComposeHelper({
|
|
591
|
-
workingDir: testDir,
|
|
592
|
-
composeFile: 'non-existent.yml'
|
|
593
|
-
});
|
|
594
|
-
|
|
595
|
-
const result = await helper.validateComposeFile();
|
|
596
|
-
expect(result.valid).toBe(false);
|
|
597
|
-
expect(result.errors).toHaveLength(1);
|
|
598
|
-
expect(result.errors[0]).toContain('Compose file not found');
|
|
599
|
-
});
|
|
600
|
-
|
|
601
|
-
it('should detect invalid compose file syntax', async () => {
|
|
602
|
-
helper = new ComposeHelper({ workingDir: testDir });
|
|
603
|
-
|
|
604
|
-
// Mock failed compose config
|
|
605
|
-
mockSpawn.mockImplementationOnce(() => {
|
|
606
|
-
const mockChild = new EventEmitter();
|
|
607
|
-
(mockChild as any).stdout = new EventEmitter();
|
|
608
|
-
(mockChild as any).stderr = new EventEmitter();
|
|
609
|
-
(mockChild as any).kill = vi.fn();
|
|
610
|
-
|
|
611
|
-
setTimeout(() => {
|
|
612
|
-
(mockChild as any).stderr.emit('data', 'Invalid syntax');
|
|
613
|
-
mockChild.emit('close', 1);
|
|
614
|
-
}, 10);
|
|
615
|
-
|
|
616
|
-
return mockChild;
|
|
617
|
-
});
|
|
618
|
-
|
|
619
|
-
const result = await helper.validateComposeFile();
|
|
620
|
-
expect(result.valid).toBe(false);
|
|
621
|
-
expect(result.errors.length).toBeGreaterThan(0);
|
|
622
|
-
});
|
|
623
|
-
|
|
624
|
-
it('should handle validation errors gracefully', async () => {
|
|
625
|
-
helper = new ComposeHelper({ workingDir: testDir });
|
|
626
|
-
|
|
627
|
-
// Mock executeCompose to throw an error
|
|
628
|
-
vi.spyOn(helper as any, 'executeCompose').mockRejectedValueOnce(new Error('Validation error'));
|
|
629
|
-
|
|
630
|
-
const result = await helper.validateComposeFile();
|
|
631
|
-
expect(result.valid).toBe(false);
|
|
632
|
-
expect(result.errors.length).toBeGreaterThan(0);
|
|
633
|
-
expect(result.errors[0]).toContain('Could not validate compose file');
|
|
634
|
-
});
|
|
635
|
-
});
|
|
636
|
-
});
|