qa360 2.2.1 → 2.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/README.md +79 -0
- package/cli/dist/cli-minimal.d.ts +6 -0
- package/cli/dist/cli-minimal.js +36 -0
- package/cli/dist/commands/ai.d.ts +43 -0
- package/cli/dist/commands/ai.js +616 -0
- package/cli/dist/commands/ask.d.ts +94 -0
- package/cli/dist/commands/ask.js +582 -0
- package/cli/dist/commands/coverage.d.ts +8 -0
- package/cli/dist/commands/coverage.js +252 -0
- package/cli/dist/commands/crawl.d.ts +24 -0
- package/cli/dist/commands/crawl.js +121 -0
- package/cli/dist/commands/doctor.d.ts +54 -0
- package/cli/dist/commands/doctor.js +513 -0
- package/cli/dist/commands/examples.d.ts +33 -0
- package/cli/dist/commands/examples.js +193 -0
- package/cli/dist/commands/explain.d.ts +27 -0
- package/cli/dist/commands/explain.js +630 -0
- package/cli/dist/commands/flakiness.d.ts +73 -0
- package/cli/dist/commands/flakiness.js +435 -0
- package/cli/dist/commands/generate.d.ts +66 -0
- package/cli/dist/commands/generate.js +438 -0
- package/cli/dist/commands/history.d.ts +76 -0
- package/cli/dist/commands/history.js +755 -0
- package/cli/dist/commands/init.d.ts +106 -0
- package/cli/dist/commands/init.js +616 -0
- package/cli/dist/commands/monitor.d.ts +27 -0
- package/cli/dist/commands/monitor.js +225 -0
- package/cli/dist/commands/ollama.d.ts +40 -0
- package/cli/dist/commands/ollama.js +346 -0
- package/cli/dist/commands/pack.d.ts +70 -0
- package/cli/dist/commands/pack.js +413 -0
- package/cli/dist/commands/regression.d.ts +8 -0
- package/cli/dist/commands/regression.js +340 -0
- package/cli/dist/commands/repair.d.ts +26 -0
- package/cli/dist/commands/repair.js +307 -0
- package/cli/dist/commands/report.d.ts +62 -0
- package/cli/dist/commands/report.js +378 -0
- package/cli/dist/commands/retry.d.ts +43 -0
- package/cli/dist/commands/retry.js +275 -0
- package/cli/dist/commands/run.d.ts +41 -0
- package/cli/dist/commands/run.js +171 -0
- package/cli/dist/commands/scan.d.ts +5 -0
- package/cli/dist/commands/scan.js +155 -0
- package/cli/dist/commands/secrets.d.ts +58 -0
- package/cli/dist/commands/secrets.js +289 -0
- package/cli/dist/commands/serve.d.ts +13 -0
- package/cli/dist/commands/serve.js +156 -0
- package/cli/dist/commands/slo.d.ts +8 -0
- package/cli/dist/commands/slo.js +327 -0
- package/cli/dist/commands/verify.d.ts +32 -0
- package/cli/dist/commands/verify.js +278 -0
- package/cli/dist/core/adapters/gitleaks-secrets.d.ts +114 -0
- package/cli/dist/core/adapters/gitleaks-secrets.js +410 -0
- package/cli/dist/core/adapters/jest-adapter.d.ts +44 -0
- package/cli/dist/core/adapters/jest-adapter.js +261 -0
- package/cli/dist/core/adapters/k6-perf.d.ts +85 -0
- package/cli/dist/core/adapters/k6-perf.js +398 -0
- package/cli/dist/core/adapters/osv-deps.d.ts +123 -0
- package/cli/dist/core/adapters/osv-deps.js +372 -0
- package/cli/dist/core/adapters/playwright-native-adapter.d.ts +121 -0
- package/cli/dist/core/adapters/playwright-native-adapter.js +339 -0
- package/cli/dist/core/adapters/playwright-native-api.d.ts +183 -0
- package/cli/dist/core/adapters/playwright-native-api.js +465 -0
- package/cli/dist/core/adapters/playwright-ui.d.ts +197 -0
- package/cli/dist/core/adapters/playwright-ui.js +864 -0
- package/cli/dist/core/adapters/pytest-adapter.d.ts +49 -0
- package/cli/dist/core/adapters/pytest-adapter.js +324 -0
- package/cli/dist/core/adapters/semgrep-sast.d.ts +99 -0
- package/cli/dist/core/adapters/semgrep-sast.js +322 -0
- package/cli/dist/core/adapters/unit-test-types.d.ts +119 -0
- package/cli/dist/core/adapters/unit-test-types.js +6 -0
- package/cli/dist/core/adapters/vitest-adapter.d.ts +46 -0
- package/cli/dist/core/adapters/vitest-adapter.js +272 -0
- package/cli/dist/core/adapters/zap-dast.d.ts +133 -0
- package/cli/dist/core/adapters/zap-dast.js +424 -0
- package/cli/dist/core/ai/anthropic-provider.d.ts +50 -0
- package/cli/dist/core/ai/anthropic-provider.js +223 -0
- package/cli/dist/core/ai/deepseek-provider.d.ts +81 -0
- package/cli/dist/core/ai/deepseek-provider.js +266 -0
- package/cli/dist/core/ai/index.d.ts +60 -0
- package/cli/dist/core/ai/index.js +18 -0
- package/cli/dist/core/ai/llm-client.d.ts +45 -0
- package/cli/dist/core/ai/llm-client.js +7 -0
- package/cli/dist/core/ai/mock-provider.d.ts +49 -0
- package/cli/dist/core/ai/mock-provider.js +121 -0
- package/cli/dist/core/ai/ollama-provider.d.ts +78 -0
- package/cli/dist/core/ai/ollama-provider.js +216 -0
- package/cli/dist/core/ai/openai-provider.d.ts +48 -0
- package/cli/dist/core/ai/openai-provider.js +200 -0
- package/cli/dist/core/ai/provider-factory.d.ts +160 -0
- package/cli/dist/core/ai/provider-factory.js +269 -0
- package/cli/dist/core/artifacts/index.d.ts +6 -0
- package/cli/dist/core/artifacts/index.js +6 -0
- package/cli/dist/core/artifacts/ui-artifacts.d.ts +133 -0
- package/cli/dist/core/artifacts/ui-artifacts.js +304 -0
- package/cli/dist/core/assertions/engine.d.ts +51 -0
- package/cli/dist/core/assertions/engine.js +530 -0
- package/cli/dist/core/assertions/index.d.ts +11 -0
- package/cli/dist/core/assertions/index.js +11 -0
- package/cli/dist/core/assertions/types.d.ts +121 -0
- package/cli/dist/core/assertions/types.js +37 -0
- package/cli/dist/core/auth/api-key-provider.d.ts +16 -0
- package/cli/dist/core/auth/api-key-provider.js +63 -0
- package/cli/dist/core/auth/aws-iam-provider.d.ts +35 -0
- package/cli/dist/core/auth/aws-iam-provider.js +177 -0
- package/cli/dist/core/auth/azure-ad-provider.d.ts +15 -0
- package/cli/dist/core/auth/azure-ad-provider.js +99 -0
- package/cli/dist/core/auth/basic-auth-provider.d.ts +26 -0
- package/cli/dist/core/auth/basic-auth-provider.js +111 -0
- package/cli/dist/core/auth/gcp-adc-provider.d.ts +27 -0
- package/cli/dist/core/auth/gcp-adc-provider.js +126 -0
- package/cli/dist/core/auth/index.d.ts +238 -0
- package/cli/dist/core/auth/index.js +82 -0
- package/cli/dist/core/auth/jwt-provider.d.ts +19 -0
- package/cli/dist/core/auth/jwt-provider.js +160 -0
- package/cli/dist/core/auth/manager.d.ts +84 -0
- package/cli/dist/core/auth/manager.js +230 -0
- package/cli/dist/core/auth/oauth2-provider.d.ts +17 -0
- package/cli/dist/core/auth/oauth2-provider.js +114 -0
- package/cli/dist/core/auth/totp-provider.d.ts +31 -0
- package/cli/dist/core/auth/totp-provider.js +134 -0
- package/cli/dist/core/auth/ui-login-provider.d.ts +26 -0
- package/cli/dist/core/auth/ui-login-provider.js +198 -0
- package/cli/dist/core/cache/index.d.ts +7 -0
- package/cli/dist/core/cache/index.js +6 -0
- package/cli/dist/core/cache/lru-cache.d.ts +203 -0
- package/cli/dist/core/cache/lru-cache.js +397 -0
- package/cli/dist/core/coverage/analyzer.d.ts +101 -0
- package/cli/dist/core/coverage/analyzer.js +415 -0
- package/cli/dist/core/coverage/collector.d.ts +74 -0
- package/cli/dist/core/coverage/collector.js +459 -0
- package/cli/dist/core/coverage/config.d.ts +37 -0
- package/cli/dist/core/coverage/config.js +156 -0
- package/cli/dist/core/coverage/index.d.ts +11 -0
- package/cli/dist/core/coverage/index.js +15 -0
- package/cli/dist/core/coverage/types.d.ts +267 -0
- package/cli/dist/core/coverage/types.js +6 -0
- package/cli/dist/core/coverage/vault.d.ts +95 -0
- package/cli/dist/core/coverage/vault.js +405 -0
- package/cli/dist/core/crawler/index.d.ts +57 -0
- package/cli/dist/core/crawler/index.js +281 -0
- package/cli/dist/core/crawler/journey-generator.d.ts +49 -0
- package/cli/dist/core/crawler/journey-generator.js +412 -0
- package/cli/dist/core/crawler/page-analyzer.d.ts +88 -0
- package/cli/dist/core/crawler/page-analyzer.js +709 -0
- package/cli/dist/core/crawler/selector-generator.d.ts +34 -0
- package/cli/dist/core/crawler/selector-generator.js +309 -0
- package/cli/dist/core/crawler/types.d.ts +353 -0
- package/cli/dist/core/crawler/types.js +6 -0
- package/cli/dist/core/dashboard/assets.d.ts +6 -0
- package/cli/dist/core/dashboard/assets.js +690 -0
- package/cli/dist/core/dashboard/index.d.ts +6 -0
- package/cli/dist/core/dashboard/index.js +5 -0
- package/cli/dist/core/dashboard/server.d.ts +72 -0
- package/cli/dist/core/dashboard/server.js +354 -0
- package/cli/dist/core/dashboard/types.d.ts +70 -0
- package/cli/dist/core/dashboard/types.js +5 -0
- package/cli/dist/core/discoverer/index.d.ts +115 -0
- package/cli/dist/core/discoverer/index.js +250 -0
- package/cli/dist/core/fixtures/index.d.ts +8 -0
- package/cli/dist/core/fixtures/index.js +8 -0
- package/cli/dist/core/fixtures/loader.d.ts +65 -0
- package/cli/dist/core/fixtures/loader.js +161 -0
- package/cli/dist/core/fixtures/resolver.d.ts +79 -0
- package/cli/dist/core/fixtures/resolver.js +181 -0
- package/cli/dist/core/fixtures/types.d.ts +75 -0
- package/cli/dist/core/fixtures/types.js +30 -0
- package/cli/dist/core/flakiness/index.d.ts +228 -0
- package/cli/dist/core/flakiness/index.js +384 -0
- package/cli/dist/core/generation/code-formatter.d.ts +111 -0
- package/cli/dist/core/generation/code-formatter.js +307 -0
- package/cli/dist/core/generation/code-generator.d.ts +144 -0
- package/cli/dist/core/generation/code-generator.js +293 -0
- package/cli/dist/core/generation/crawler-pack-generator.d.ts +44 -0
- package/cli/dist/core/generation/crawler-pack-generator.js +245 -0
- package/cli/dist/core/generation/generator.d.ts +40 -0
- package/cli/dist/core/generation/generator.js +76 -0
- package/cli/dist/core/generation/index.d.ts +32 -0
- package/cli/dist/core/generation/index.js +30 -0
- package/cli/dist/core/generation/pack-generator.d.ts +107 -0
- package/cli/dist/core/generation/pack-generator.js +416 -0
- package/cli/dist/core/generation/prompt-builder.d.ts +132 -0
- package/cli/dist/core/generation/prompt-builder.js +672 -0
- package/cli/dist/core/generation/source-analyzer.d.ts +213 -0
- package/cli/dist/core/generation/source-analyzer.js +657 -0
- package/cli/dist/core/generation/test-optimizer.d.ts +117 -0
- package/cli/dist/core/generation/test-optimizer.js +328 -0
- package/cli/dist/core/generation/types.d.ts +214 -0
- package/cli/dist/core/generation/types.js +4 -0
- package/cli/dist/core/hooks/compose.d.ts +61 -0
- package/cli/dist/core/hooks/compose.js +225 -0
- package/cli/dist/core/hooks/runner.d.ts +68 -0
- package/cli/dist/core/hooks/runner.js +303 -0
- package/cli/dist/core/index.d.ts +110 -0
- package/cli/dist/core/index.js +99 -0
- package/cli/dist/core/pack/migrator.d.ts +51 -0
- package/cli/dist/core/pack/migrator.js +304 -0
- package/cli/dist/core/pack/validator.d.ts +42 -0
- package/cli/dist/core/pack/validator.js +330 -0
- package/cli/dist/core/pack-v2/index.d.ts +9 -0
- package/cli/dist/core/pack-v2/index.js +8 -0
- package/cli/dist/core/pack-v2/loader.d.ts +63 -0
- package/cli/dist/core/pack-v2/loader.js +292 -0
- package/cli/dist/core/pack-v2/migrator.d.ts +62 -0
- package/cli/dist/core/pack-v2/migrator.js +505 -0
- package/cli/dist/core/pack-v2/validator.d.ts +65 -0
- package/cli/dist/core/pack-v2/validator.js +629 -0
- package/cli/dist/core/parallel/index.d.ts +6 -0
- package/cli/dist/core/parallel/index.js +6 -0
- package/cli/dist/core/parallel/parallel-runner.d.ts +107 -0
- package/cli/dist/core/parallel/parallel-runner.js +192 -0
- package/cli/dist/core/pom/base-page.d.ts +237 -0
- package/cli/dist/core/pom/base-page.js +354 -0
- package/cli/dist/core/pom/index.d.ts +22 -0
- package/cli/dist/core/pom/index.js +23 -0
- package/cli/dist/core/pom/loader.d.ts +118 -0
- package/cli/dist/core/pom/loader.js +382 -0
- package/cli/dist/core/pom/types.d.ts +112 -0
- package/cli/dist/core/pom/types.js +9 -0
- package/cli/dist/core/proof/bundle.d.ts +137 -0
- package/cli/dist/core/proof/bundle.js +160 -0
- package/cli/dist/core/proof/canonicalize.d.ts +47 -0
- package/cli/dist/core/proof/canonicalize.js +105 -0
- package/cli/dist/core/proof/index.d.ts +13 -0
- package/cli/dist/core/proof/index.js +18 -0
- package/cli/dist/core/proof/schema.d.ts +217 -0
- package/cli/dist/core/proof/schema.js +263 -0
- package/cli/dist/core/proof/signer.d.ts +111 -0
- package/cli/dist/core/proof/signer.js +226 -0
- package/cli/dist/core/proof/verifier.d.ts +97 -0
- package/cli/dist/core/proof/verifier.js +308 -0
- package/cli/dist/core/regression/detector.d.ts +107 -0
- package/cli/dist/core/regression/detector.js +497 -0
- package/cli/dist/core/regression/index.d.ts +9 -0
- package/cli/dist/core/regression/index.js +11 -0
- package/cli/dist/core/regression/trend-analyzer.d.ts +102 -0
- package/cli/dist/core/regression/trend-analyzer.js +345 -0
- package/cli/dist/core/regression/types.d.ts +222 -0
- package/cli/dist/core/regression/types.js +7 -0
- package/cli/dist/core/regression/vault.d.ts +87 -0
- package/cli/dist/core/regression/vault.js +289 -0
- package/cli/dist/core/repair/engine/fixer.d.ts +24 -0
- package/cli/dist/core/repair/engine/fixer.js +226 -0
- package/cli/dist/core/repair/engine/suggestion-engine.d.ts +18 -0
- package/cli/dist/core/repair/engine/suggestion-engine.js +187 -0
- package/cli/dist/core/repair/index.d.ts +10 -0
- package/cli/dist/core/repair/index.js +13 -0
- package/cli/dist/core/repair/repairer.d.ts +90 -0
- package/cli/dist/core/repair/repairer.js +284 -0
- package/cli/dist/core/repair/types.d.ts +91 -0
- package/cli/dist/core/repair/types.js +6 -0
- package/cli/dist/core/repair/utils/error-analyzer.d.ts +28 -0
- package/cli/dist/core/repair/utils/error-analyzer.js +264 -0
- package/cli/dist/core/reporting/html-reporter.d.ts +119 -0
- package/cli/dist/core/reporting/html-reporter.js +737 -0
- package/cli/dist/core/reporting/index.d.ts +6 -0
- package/cli/dist/core/reporting/index.js +6 -0
- package/cli/dist/core/retry/flakiness-integration.d.ts +60 -0
- package/cli/dist/core/retry/flakiness-integration.js +228 -0
- package/cli/dist/core/retry/index.d.ts +14 -0
- package/cli/dist/core/retry/index.js +16 -0
- package/cli/dist/core/retry/retry-engine.d.ts +80 -0
- package/cli/dist/core/retry/retry-engine.js +296 -0
- package/cli/dist/core/retry/types.d.ts +178 -0
- package/cli/dist/core/retry/types.js +52 -0
- package/cli/dist/core/retry/vault.d.ts +77 -0
- package/cli/dist/core/retry/vault.js +304 -0
- package/cli/dist/core/runner/e2e-helpers.d.ts +102 -0
- package/cli/dist/core/runner/e2e-helpers.js +153 -0
- package/cli/dist/core/runner/phase3-runner.d.ts +249 -0
- package/cli/dist/core/runner/phase3-runner.js +1323 -0
- package/cli/dist/core/schemas/pack.schema.json +236 -0
- package/cli/dist/core/secrets/crypto.d.ts +75 -0
- package/cli/dist/core/secrets/crypto.js +223 -0
- package/cli/dist/core/secrets/manager.d.ts +76 -0
- package/cli/dist/core/secrets/manager.js +219 -0
- package/cli/dist/core/security/redaction-patterns-extended.d.ts +27 -0
- package/cli/dist/core/security/redaction-patterns-extended.js +247 -0
- package/cli/dist/core/security/redactor.d.ts +71 -0
- package/cli/dist/core/security/redactor.js +279 -0
- package/cli/dist/core/self-healing/assertion-healer.d.ts +97 -0
- package/cli/dist/core/self-healing/assertion-healer.js +371 -0
- package/cli/dist/core/self-healing/engine.d.ts +122 -0
- package/cli/dist/core/self-healing/engine.js +538 -0
- package/cli/dist/core/self-healing/index.d.ts +10 -0
- package/cli/dist/core/self-healing/index.js +11 -0
- package/cli/dist/core/self-healing/selector-healer.d.ts +103 -0
- package/cli/dist/core/self-healing/selector-healer.js +372 -0
- package/cli/dist/core/self-healing/types.d.ts +152 -0
- package/cli/dist/core/self-healing/types.js +6 -0
- package/cli/dist/core/serve/diagnostics-collector.d.ts +32 -0
- package/cli/dist/core/serve/diagnostics-collector.js +149 -0
- package/cli/dist/core/serve/health-checker.d.ts +44 -0
- package/cli/dist/core/serve/health-checker.js +219 -0
- package/cli/dist/core/serve/index.d.ts +8 -0
- package/cli/dist/core/serve/index.js +8 -0
- package/cli/dist/core/serve/metrics-collector.d.ts +24 -0
- package/cli/dist/core/serve/metrics-collector.js +322 -0
- package/cli/dist/core/serve/process-manager.d.ts +36 -0
- package/cli/dist/core/serve/process-manager.js +213 -0
- package/cli/dist/core/serve/server.d.ts +36 -0
- package/cli/dist/core/serve/server.js +191 -0
- package/cli/dist/core/slo/config.d.ts +107 -0
- package/cli/dist/core/slo/config.js +360 -0
- package/cli/dist/core/slo/index.d.ts +11 -0
- package/cli/dist/core/slo/index.js +15 -0
- package/cli/dist/core/slo/sli-calculator.d.ts +92 -0
- package/cli/dist/core/slo/sli-calculator.js +364 -0
- package/cli/dist/core/slo/slo-tracker.d.ts +148 -0
- package/cli/dist/core/slo/slo-tracker.js +379 -0
- package/cli/dist/core/slo/types.d.ts +281 -0
- package/cli/dist/core/slo/types.js +7 -0
- package/cli/dist/core/slo/vault.d.ts +102 -0
- package/cli/dist/core/slo/vault.js +427 -0
- package/cli/dist/core/tui/index.d.ts +7 -0
- package/cli/dist/core/tui/index.js +6 -0
- package/cli/dist/core/tui/monitor.d.ts +92 -0
- package/cli/dist/core/tui/monitor.js +271 -0
- package/cli/dist/core/tui/renderer.d.ts +33 -0
- package/cli/dist/core/tui/renderer.js +218 -0
- package/cli/dist/core/tui/types.d.ts +63 -0
- package/cli/dist/core/tui/types.js +5 -0
- package/cli/dist/core/types/pack-v1.d.ts +251 -0
- package/cli/dist/core/types/pack-v1.js +5 -0
- package/cli/dist/core/types/pack-v2.d.ts +456 -0
- package/cli/dist/core/types/pack-v2.js +8 -0
- package/cli/dist/core/types/trust-score.d.ts +69 -0
- package/cli/dist/core/types/trust-score.js +191 -0
- package/cli/dist/core/vault/cas.d.ts +90 -0
- package/cli/dist/core/vault/cas.js +261 -0
- package/cli/dist/core/vault/index.d.ts +326 -0
- package/cli/dist/core/vault/index.js +1042 -0
- package/cli/dist/core/visual/index.d.ts +6 -0
- package/cli/dist/core/visual/index.js +6 -0
- package/cli/dist/core/visual/visual-regression.d.ts +113 -0
- package/cli/dist/core/visual/visual-regression.js +236 -0
- package/cli/dist/core/watch/index.d.ts +7 -0
- package/cli/dist/core/watch/index.js +6 -0
- package/cli/dist/core/watch/watch-mode.d.ts +213 -0
- package/cli/dist/core/watch/watch-mode.js +389 -0
- package/cli/dist/generators/index.d.ts +5 -0
- package/cli/dist/generators/index.js +5 -0
- package/cli/dist/generators/json-reporter.d.ts +10 -0
- package/cli/dist/generators/json-reporter.js +12 -0
- package/cli/dist/generators/test-generator.d.ts +18 -0
- package/cli/dist/generators/test-generator.js +78 -0
- package/cli/dist/index.d.ts +8 -0
- package/cli/dist/index.js +262 -0
- package/cli/dist/scanners/dom-scanner.d.ts +52 -0
- package/cli/dist/scanners/dom-scanner.js +296 -0
- package/cli/dist/scanners/index.d.ts +4 -0
- package/cli/dist/scanners/index.js +4 -0
- package/cli/dist/schemas/pack.schema.json +236 -0
- package/cli/dist/types/scan.d.ts +68 -0
- package/cli/dist/types/scan.js +4 -0
- package/cli/dist/utils/config.d.ts +35 -0
- package/cli/dist/utils/config.js +196 -0
- package/cli/package.json +1 -1
- package/package.json +26 -2
- package/.BETA_TESTING_FEEDBACK.md +0 -256
- package/.claude/settings.local.json +0 -154
- package/.editorconfig +0 -21
- package/.github/CODEOWNERS +0 -23
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -108
- package/.github/ISSUE_TEMPLATE/feedback_dx.yml +0 -121
- package/.github/dependabot.yml +0 -35
- package/.github/workflows/mcp-dx.yml +0 -106
- package/.github/workflows/release.yml +0 -26
- package/.github/workflows/test.yml +0 -93
- package/.nvmrc +0 -1
- package/.qa360/vault.db +0 -0
- package/.qa360/vault.db-shm +0 -0
- package/.qa360/vault.db-wal +0 -0
- package/.qa360-artifacts/.gitkeep +0 -0
- package/.qa360-artifacts/baselines/.gitkeep +0 -0
- package/.qa360-artifacts/cache/.gitkeep +0 -0
- package/.qa360-artifacts/reports/.gitkeep +0 -0
- package/.qa360-artifacts/screenshots/.gitkeep +0 -0
- package/.qa360-baselines/www_xyqo_ai.baseline.json +0 -33
- package/CODEOWNERS +0 -43
- package/NOVICE_USER_GUIDE.md +0 -272
- package/adapters/README.md +0 -46
- package/check-branches.sh +0 -32
- package/cli/.qa360/keys/ed25519.key +0 -1
- package/cli/.qa360/keys/ed25519.pub +0 -1
- package/cli/examples/README.md +0 -160
- package/cli/examples/accessibility.yml +0 -48
- package/cli/examples/api-basic.yml +0 -27
- package/cli/examples/complete.yml +0 -146
- package/cli/examples/crawler.yml +0 -38
- package/cli/examples/fullstack.yml +0 -78
- package/cli/examples/security.yml +0 -58
- package/cli/examples/ui-advanced.yml +0 -49
- package/cli/examples/ui-basic.yml +0 -24
- package/cli/scripts/bundle-for-npm.sh +0 -51
- package/cli/scripts/validate-package.js +0 -116
- package/cli/src/__tests__/commands/doctor.test.ts +0 -108
- package/cli/src/__tests__/index.test.ts +0 -15
- package/cli/src/cli-minimal.ts +0 -44
- package/cli/src/commands/__tests__/crawl.test.ts +0 -412
- package/cli/src/commands/__tests__/doctor-qa360-home.test.ts +0 -156
- package/cli/src/commands/__tests__/e2e-ui-tests.test.ts +0 -494
- package/cli/src/commands/__tests__/e2e.test.ts +0 -187
- package/cli/src/commands/__tests__/flakiness.test.ts +0 -528
- package/cli/src/commands/__tests__/generate.test.ts +0 -507
- package/cli/src/commands/__tests__/history.integration.test.ts +0 -358
- package/cli/src/commands/__tests__/history.test.ts +0 -433
- package/cli/src/commands/__tests__/monitor-realworld.test.ts +0 -199
- package/cli/src/commands/__tests__/monitor.test.ts +0 -81
- package/cli/src/commands/__tests__/ollama.test.ts +0 -529
- package/cli/src/commands/__tests__/repair.test.ts +0 -225
- package/cli/src/commands/__tests__/report.integration.test.ts +0 -167
- package/cli/src/commands/__tests__/report.test.ts +0 -294
- package/cli/src/commands/__tests__/report.vitest.ts +0 -288
- package/cli/src/commands/__tests__/retry.test.ts +0 -78
- package/cli/src/commands/__tests__/run.integration.test.ts +0 -240
- package/cli/src/commands/__tests__/run.test.ts +0 -346
- package/cli/src/commands/__tests__/run.vitest.ts +0 -301
- package/cli/src/commands/__tests__/secrets.test.ts +0 -114
- package/cli/src/commands/__tests__/serve.test.ts +0 -80
- package/cli/src/commands/__tests__/verify.test.ts +0 -103
- package/cli/src/commands/ai.ts +0 -702
- package/cli/src/commands/ask.ts +0 -678
- package/cli/src/commands/coverage.ts +0 -305
- package/cli/src/commands/crawl.ts +0 -155
- package/cli/src/commands/doctor.ts +0 -610
- package/cli/src/commands/examples.ts +0 -248
- package/cli/src/commands/explain.ts +0 -710
- package/cli/src/commands/flakiness.ts +0 -560
- package/cli/src/commands/generate.ts +0 -566
- package/cli/src/commands/history.ts +0 -914
- package/cli/src/commands/init.ts +0 -777
- package/cli/src/commands/monitor.ts +0 -270
- package/cli/src/commands/ollama.ts +0 -337
- package/cli/src/commands/pack.ts +0 -497
- package/cli/src/commands/regression.ts +0 -400
- package/cli/src/commands/repair.ts +0 -356
- package/cli/src/commands/report.ts +0 -463
- package/cli/src/commands/retry.ts +0 -380
- package/cli/src/commands/run.ts +0 -220
- package/cli/src/commands/scan.ts +0 -177
- package/cli/src/commands/secrets.ts +0 -340
- package/cli/src/commands/serve.ts +0 -194
- package/cli/src/commands/slo.ts +0 -387
- package/cli/src/commands/verify-temp-note.md +0 -11
- package/cli/src/commands/verify.ts +0 -322
- package/cli/src/generators/index.ts +0 -6
- package/cli/src/generators/json-reporter.ts +0 -15
- package/cli/src/generators/test-generator.ts +0 -90
- package/cli/src/index.ts +0 -289
- package/cli/src/scanners/dom-scanner.ts +0 -360
- package/cli/src/scanners/index.ts +0 -5
- package/cli/src/types/scan.ts +0 -84
- package/cli/src/utils/config.ts +0 -145
- package/cli/tsconfig.bundle.json +0 -12
- package/cli/tsconfig.json +0 -23
- package/cli/vitest.config.ts +0 -59
- package/core/src/__tests__/adapters-contract/adapters-contract.test.md +0 -156
- package/core/src/__tests__/index.test.ts +0 -31
- package/core/src/__tests__/integration/phase3.test.ts +0 -405
- package/core/src/__tests__/pack/validator.test.ts +0 -312
- package/core/src/__tests__/secrets/crypto.test.ts +0 -190
- package/core/src/__tests__/secrets/manager.test.ts +0 -316
- package/core/src/__tests__/security/redactor-phase3.test.ts +0 -233
- package/core/src/__tests__/serve/health-checker.test.ts +0 -155
- package/core/src/__tests__/serve/process-manager.test.ts +0 -213
- package/core/src/__tests__/serve/server.test.ts +0 -103
- package/core/src/__tests__/vault/cas.test.ts +0 -178
- package/core/src/__tests__/vault/vault.test.ts +0 -296
- package/core/src/adapters/__tests__/fixtures/jest-coverage.json +0 -8
- package/core/src/adapters/__tests__/fixtures/jest-results.json +0 -41
- package/core/src/adapters/__tests__/fixtures/pytest-junit.xml +0 -16
- package/core/src/adapters/__tests__/fixtures/vitest-coverage.json +0 -8
- package/core/src/adapters/__tests__/fixtures/vitest-results.json +0 -50
- package/core/src/adapters/__tests__/gitleaks-secrets.test.ts +0 -452
- package/core/src/adapters/__tests__/jest-adapter.test.ts +0 -276
- package/core/src/adapters/__tests__/k6-perf.test.ts +0 -538
- package/core/src/adapters/__tests__/osv-deps.test.ts +0 -471
- package/core/src/adapters/__tests__/playwright-native-api.test.ts +0 -792
- package/core/src/adapters/__tests__/playwright-ui-e2e.test.ts +0 -431
- package/core/src/adapters/__tests__/playwright-ui.test.ts +0 -1073
- package/core/src/adapters/__tests__/pytest-adapter.test.ts +0 -207
- package/core/src/adapters/__tests__/semgrep-sast.test.ts +0 -436
- package/core/src/adapters/__tests__/vitest-adapter.test.ts +0 -208
- package/core/src/adapters/__tests__/zap-dast.test.ts +0 -453
- package/core/src/adapters/gitleaks-secrets.ts +0 -521
- package/core/src/adapters/jest-adapter.ts +0 -306
- package/core/src/adapters/k6-perf.ts +0 -479
- package/core/src/adapters/osv-deps.ts +0 -467
- package/core/src/adapters/playwright-native-adapter.ts +0 -472
- package/core/src/adapters/playwright-native-api.ts +0 -619
- package/core/src/adapters/playwright-ui.ts +0 -1088
- package/core/src/adapters/pytest-adapter.ts +0 -472
- package/core/src/adapters/semgrep-sast.ts +0 -410
- package/core/src/adapters/unit-test-types.ts +0 -106
- package/core/src/adapters/vitest-adapter.ts +0 -295
- package/core/src/adapters/zap-dast.ts +0 -551
- package/core/src/ai/__tests__/deepseek-provider.test.ts +0 -586
- package/core/src/ai/__tests__/ollama-provider.test.ts +0 -641
- package/core/src/ai/anthropic-provider.ts +0 -262
- package/core/src/ai/deepseek-provider.ts +0 -315
- package/core/src/ai/index.ts +0 -87
- package/core/src/ai/llm-client.ts +0 -52
- package/core/src/ai/mock-provider.ts +0 -146
- package/core/src/ai/ollama-provider.ts +0 -269
- package/core/src/ai/openai-provider.ts +0 -240
- package/core/src/ai/provider-factory.ts +0 -408
- package/core/src/artifacts/README.md +0 -78
- package/core/src/artifacts/index.ts +0 -16
- package/core/src/artifacts/ui-artifacts.ts +0 -412
- package/core/src/assertions/__tests__/engine.test.ts +0 -360
- package/core/src/assertions/engine.ts +0 -577
- package/core/src/assertions/index.ts +0 -13
- package/core/src/assertions/types.ts +0 -229
- package/core/src/auth/__tests__/api-key-provider.test.ts +0 -282
- package/core/src/auth/__tests__/auth-manager.test.ts +0 -430
- package/core/src/auth/__tests__/basic-auth-provider.test.ts +0 -364
- package/core/src/auth/__tests__/cloud-providers.test.ts +0 -751
- package/core/src/auth/__tests__/jwt-provider.test.ts +0 -400
- package/core/src/auth/__tests__/oauth2-provider.test.ts +0 -383
- package/core/src/auth/__tests__/totp-provider.test.ts +0 -294
- package/core/src/auth/__tests__/ui-login-provider.test.ts +0 -323
- package/core/src/auth/api-key-provider.ts +0 -75
- package/core/src/auth/aws-iam-provider.ts +0 -212
- package/core/src/auth/azure-ad-provider.ts +0 -126
- package/core/src/auth/basic-auth-provider.ts +0 -133
- package/core/src/auth/gcp-adc-provider.ts +0 -146
- package/core/src/auth/index.ts +0 -342
- package/core/src/auth/jwt-provider.ts +0 -193
- package/core/src/auth/manager.ts +0 -281
- package/core/src/auth/oauth2-provider.ts +0 -141
- package/core/src/auth/totp-provider.ts +0 -163
- package/core/src/auth/ui-login-provider.ts +0 -242
- package/core/src/cache/__tests__/lru-cache.test.ts +0 -564
- package/core/src/cache/index.ts +0 -13
- package/core/src/cache/lru-cache.ts +0 -536
- package/core/src/crawler/__tests__/journey-generator.test.ts +0 -344
- package/core/src/crawler/__tests__/selector-generator.test.ts +0 -211
- package/core/src/crawler/index.ts +0 -335
- package/core/src/crawler/journey-generator.ts +0 -471
- package/core/src/crawler/page-analyzer.ts +0 -857
- package/core/src/crawler/selector-generator.ts +0 -280
- package/core/src/crawler/types.ts +0 -475
- package/core/src/dashboard/__tests__/real-world.test.ts +0 -430
- package/core/src/dashboard/__tests__/server.test.ts +0 -283
- package/core/src/dashboard/__tests__/types.test.ts +0 -208
- package/core/src/dashboard/assets.ts +0 -692
- package/core/src/dashboard/index.ts +0 -17
- package/core/src/dashboard/server.ts +0 -401
- package/core/src/dashboard/types.ts +0 -78
- package/core/src/discoverer/__tests__/test-discoverer.test.ts +0 -444
- package/core/src/discoverer/index.ts +0 -374
- package/core/src/fixtures/__tests__/loader.test.ts +0 -246
- package/core/src/fixtures/__tests__/resolver.test.ts +0 -334
- package/core/src/fixtures/index.ts +0 -9
- package/core/src/fixtures/loader.ts +0 -200
- package/core/src/fixtures/resolver.ts +0 -221
- package/core/src/fixtures/types.ts +0 -86
- package/core/src/flakiness/__tests__/flakiness.test.ts +0 -554
- package/core/src/flakiness/index.ts +0 -536
- package/core/src/generation/__tests__/code-formatter.test.ts +0 -170
- package/core/src/generation/__tests__/code-generator-contract.test.ts +0 -207
- package/core/src/generation/__tests__/code-generator.test.ts +0 -586
- package/core/src/generation/__tests__/crawler-pack-generator.test.ts +0 -479
- package/core/src/generation/__tests__/generation-e2e-b2bshop.test.ts +0 -718
- package/core/src/generation/__tests__/generation-integration.test.ts +0 -655
- package/core/src/generation/__tests__/pack-generator.test.ts +0 -408
- package/core/src/generation/__tests__/prompt-builder.test.ts +0 -200
- package/core/src/generation/__tests__/real-provider-integration.test.ts +0 -414
- package/core/src/generation/__tests__/source-analyzer.test.ts +0 -774
- package/core/src/generation/__tests__/test-optimizer.test.ts +0 -255
- package/core/src/generation/code-formatter.ts +0 -408
- package/core/src/generation/code-generator.ts +0 -470
- package/core/src/generation/crawler-pack-generator.ts +0 -289
- package/core/src/generation/generator.ts +0 -113
- package/core/src/generation/index.ts +0 -59
- package/core/src/generation/pack-generator.ts +0 -527
- package/core/src/generation/prompt-builder.ts +0 -772
- package/core/src/generation/source-analyzer.ts +0 -830
- package/core/src/generation/test-optimizer.ts +0 -474
- package/core/src/generation/types.ts +0 -217
- package/core/src/hooks/__tests__/compose.test.ts +0 -636
- package/core/src/hooks/__tests__/runner.test.ts +0 -478
- package/core/src/hooks/compose.ts +0 -268
- package/core/src/hooks/runner.ts +0 -364
- package/core/src/index.ts +0 -255
- package/core/src/pack/__tests__/migrator.test.ts +0 -594
- package/core/src/pack/__tests__/validator.test.ts +0 -759
- package/core/src/pack/migrator.ts +0 -353
- package/core/src/pack/validator.ts +0 -359
- package/core/src/pack-v2/__tests__/loader.test.ts +0 -533
- package/core/src/pack-v2/__tests__/migrator.test.ts +0 -455
- package/core/src/pack-v2/__tests__/validator.test.ts +0 -609
- package/core/src/pack-v2/index.ts +0 -41
- package/core/src/pack-v2/loader.ts +0 -358
- package/core/src/pack-v2/migrator.ts +0 -540
- package/core/src/pack-v2/validator.ts +0 -731
- package/core/src/parallel/README.md +0 -143
- package/core/src/parallel/index.ts +0 -16
- package/core/src/parallel/parallel-runner.ts +0 -282
- package/core/src/pom/__tests__/loader.test.ts +0 -378
- package/core/src/pom/base-page.ts +0 -425
- package/core/src/pom/index.ts +0 -45
- package/core/src/pom/loader.ts +0 -480
- package/core/src/pom/types.ts +0 -146
- package/core/src/proof/__tests__/proof-roundtrip.test.ts +0 -149
- package/core/src/proof/__tests__/schema-validation-manual.mjs +0 -211
- package/core/src/proof/__tests__/schema-validation.test.ts +0 -336
- package/core/src/proof/__tests__/signer.test.ts +0 -486
- package/core/src/proof/__tests__/temporal-regression.test.ts +0 -537
- package/core/src/proof/__tests__/verifier-advanced.test.ts +0 -588
- package/core/src/proof/__tests__/verifier.test.ts +0 -413
- package/core/src/proof/bundle.ts +0 -290
- package/core/src/proof/canonicalize.ts +0 -116
- package/core/src/proof/index.ts +0 -74
- package/core/src/proof/schema.ts +0 -285
- package/core/src/proof/signer.ts +0 -293
- package/core/src/proof/verifier.ts +0 -380
- package/core/src/regression/__tests__/detector.test.ts +0 -396
- package/core/src/regression/__tests__/trend-analyzer.test.ts +0 -300
- package/core/src/regression/detector.ts +0 -629
- package/core/src/regression/index.ts +0 -34
- package/core/src/regression/trend-analyzer.ts +0 -468
- package/core/src/regression/types.ts +0 -295
- package/core/src/regression/vault.ts +0 -419
- package/core/src/repair/__tests__/repairer.test.ts +0 -572
- package/core/src/repair/__tests__/types.test.ts +0 -302
- package/core/src/repair/engine/__tests__/fixer.test.ts +0 -482
- package/core/src/repair/engine/__tests__/suggestion-engine.test.ts +0 -395
- package/core/src/repair/engine/fixer.ts +0 -271
- package/core/src/repair/engine/suggestion-engine.ts +0 -234
- package/core/src/repair/index.ts +0 -53
- package/core/src/repair/repairer.ts +0 -376
- package/core/src/repair/types.ts +0 -119
- package/core/src/repair/utils/__tests__/error-analyzer.test.ts +0 -454
- package/core/src/repair/utils/error-analyzer.ts +0 -308
- package/core/src/reporting/README.md +0 -144
- package/core/src/reporting/html-reporter.ts +0 -835
- package/core/src/reporting/index.ts +0 -16
- package/core/src/retry/README.md +0 -192
- package/core/src/retry/__tests__/flakiness-integration.test.ts +0 -475
- package/core/src/retry/__tests__/retry-engine.test.ts +0 -424
- package/core/src/retry/flakiness-integration.ts +0 -267
- package/core/src/retry/index.ts +0 -48
- package/core/src/retry/retry-engine.ts +0 -368
- package/core/src/retry/types.ts +0 -208
- package/core/src/retry/vault.ts +0 -413
- package/core/src/runner/__tests__/flakiness-integration.test.ts +0 -566
- package/core/src/runner/__tests__/phase3-e2e-b2bshop.test.ts +0 -218
- package/core/src/runner/__tests__/phase3-e2e-reqres.test.ts +0 -199
- package/core/src/runner/__tests__/phase3-runner.test.ts +0 -1118
- package/core/src/runner/e2e-helpers.ts +0 -216
- package/core/src/runner/phase3-runner.ts +0 -1536
- package/core/src/schemas/gherkin-report.json +0 -122
- package/core/src/secrets/__tests__/crypto.test.ts +0 -180
- package/core/src/secrets/crypto.ts +0 -289
- package/core/src/secrets/manager.ts +0 -272
- package/core/src/security/__tests__/hardening.test.ts +0 -480
- package/core/src/security/redaction-patterns-extended.ts +0 -278
- package/core/src/security/redactor.ts +0 -326
- package/core/src/self-healing/assertion-healer.ts +0 -485
- package/core/src/self-healing/engine.ts +0 -626
- package/core/src/self-healing/index.ts +0 -33
- package/core/src/self-healing/selector-healer.ts +0 -488
- package/core/src/self-healing/types.ts +0 -193
- package/core/src/serve/diagnostics-collector.ts +0 -201
- package/core/src/serve/health-checker.ts +0 -274
- package/core/src/serve/index.ts +0 -9
- package/core/src/serve/metrics-collector.ts +0 -386
- package/core/src/serve/process-manager.ts +0 -265
- package/core/src/serve/server.ts +0 -230
- package/core/src/slo/config.ts +0 -408
- package/core/src/slo/index.ts +0 -68
- package/core/src/slo/sli-calculator.ts +0 -474
- package/core/src/slo/slo-tracker.ts +0 -481
- package/core/src/slo/types.ts +0 -408
- package/core/src/slo/vault.ts +0 -600
- package/core/src/tui/__tests__/monitor.test.ts +0 -336
- package/core/src/tui/__tests__/real-world.test.ts +0 -376
- package/core/src/tui/__tests__/renderer.test.ts +0 -201
- package/core/src/tui/__tests__/types.test.ts +0 -295
- package/core/src/tui/index.ts +0 -19
- package/core/src/tui/monitor.ts +0 -331
- package/core/src/tui/renderer.ts +0 -269
- package/core/src/tui/types.ts +0 -68
- package/core/src/types/pack-v1.ts +0 -305
- package/core/src/types/pack-v2.ts +0 -525
- package/core/src/types/trust-score.ts +0 -258
- package/core/src/vault/__tests__/flakiness-vault.test.ts +0 -562
- package/core/src/vault/__tests__/vault.test.ts +0 -259
- package/core/src/vault/cas.ts +0 -323
- package/core/src/vault/index.ts +0 -1361
- package/core/src/vault/schema.sql +0 -168
- package/core/src/visual/README.md +0 -185
- package/core/src/visual/index.ts +0 -14
- package/core/src/visual/visual-regression.ts +0 -347
- package/core/src/watch/__tests__/watch-mode.test.ts +0 -192
- package/core/src/watch/index.ts +0 -14
- package/core/src/watch/watch-mode.ts +0 -565
- package/core/tsconfig.json +0 -12
- package/core/vitest.config.ts +0 -52
- package/docs/ARCHITECTURE.md +0 -901
- package/docs/AUDIT-GLOBAL-DEC2025.md +0 -271
- package/docs/BETA_TESTING.md +0 -257
- package/docs/BETA_TESTING_PLAN.md +0 -727
- package/docs/CERTIFICATION-REPORT.md +0 -142
- package/docs/COMPLETE_AUDIT_REFACTORING.md +0 -965
- package/docs/DEVELOPMENT.md +0 -545
- package/docs/DEVELOPMENT_HISTORY.md +0 -345
- package/docs/LIMITATIONS.md +0 -176
- package/docs/MIGRATION.md +0 -303
- package/docs/OPTION_3_4_EXPLORATION.md +0 -1257
- package/docs/PHASE1_PERFORMANCE.md +0 -144
- package/docs/QA360_Cloud.postman_collection.json +0 -89
- package/docs/QA360_TESTING_PHILOSOPHY.md +0 -769
- package/docs/QA_TEST_PLAN.md +0 -727
- package/docs/README.md +0 -50
- package/docs/STATUS.md +0 -198
- package/docs/STRATEGIC_STUDY_GOOSE_INTEGRATION.md +0 -615
- package/docs/USER_GUIDE.md +0 -687
- package/docs/WORK-DONE-ADAPTER-TESTS.md +0 -136
- package/docs/adapters-security.md +0 -485
- package/docs/architecture-diagram.mmd +0 -168
- package/docs/archive/ARCH-01-DAY6-BUILD-FIXES.md +0 -396
- package/docs/archive/ARCH-01-DAY6-FINAL-STATUS.md +0 -324
- package/docs/archive/ARCH-01_MCP_MERGE_ANALYSIS.md +0 -644
- package/docs/archive/ARCH-01_NEXT_STEPS.md +0 -60
- package/docs/archive/BRANCH_PROTECTION.md +0 -183
- package/docs/archive/CI_LOCKDOWN_CHECKLIST.md +0 -222
- package/docs/archive/HANDOFF_TEST-01.md +0 -669
- package/docs/archive/LEGAL_READY_PLACEHOLDERS.md +0 -372
- package/docs/archive/NODE_UPGRADE_GUIDE.md +0 -188
- package/docs/archive/PHASE1_COMPLETION.md +0 -386
- package/docs/archive/PHASE2_COMPLETION.md +0 -404
- package/docs/archive/PHASE3_AND_4_FINAL.md +0 -360
- package/docs/archive/PHASE3_COMPLETE.md +0 -301
- package/docs/archive/PHASE3_STATUS.md +0 -255
- package/docs/archive/PRE-WEEK2-AUDIT.md +0 -364
- package/docs/archive/README.md +0 -16
- package/docs/archive/SCHEMA_AJV_2020_FIX.md +0 -245
- package/docs/archive/TEST-01_AUDIT_REPORT.md +0 -240
- package/docs/archive/TEST-01_COVERAGE_PLAN.md +0 -423
- package/docs/archive/obsolete-proposals/dom-element-discovery-mode.md +0 -250
- package/docs/archive/obsolete-proposals/qa360-comprehensive-test-plan.md +0 -1249
- package/docs/archive/obsolete-proposals/qa360-quick-start-guide.md +0 -298
- package/docs/archive/obsolete-proposals/technical-plan-dom-discovery.md +0 -870
- package/docs/budgets-advanced.md +0 -308
- package/docs/examples/history-export-gc.md +0 -285
- package/docs/examples/pack-v2-complete.yaml +0 -158
- package/docs/examples/pack-v2-quickstart.yaml +0 -24
- package/docs/examples/pack-v2-ui-login.yaml +0 -81
- package/docs/examples/qa360-report.json +0 -50
- package/docs/history.md +0 -565
- package/docs/hooks.md +0 -304
- package/docs/llm-providers.md +0 -512
- package/docs/mcp-server.md +0 -651
- package/docs/mcp-tools.md +0 -1131
- package/docs/pack-v1.md +0 -383
- package/docs/pack-v2.md +0 -558
- package/docs/page-objects.md +0 -366
- package/docs/proofs.md +0 -670
- package/docs/quickstart-5min.md +0 -257
- package/docs/readiness-ci.md +0 -654
- package/docs/rfc/README.md +0 -20
- package/docs/rfc/proof-bundle-v1.md +0 -787
- package/docs/secrets.md +0 -392
- package/docs/serve.md +0 -494
- package/docs/unit-test-adapters.md +0 -168
- package/docs/vault.md +0 -491
- package/e2e/qa360-e2e.test.ts +0 -696
- package/e2e/vitest.config.ts +0 -18
- package/examples/README.md +0 -50
- package/examples/ci/docker-compose-serve.yml +0 -375
- package/examples/ci/github-actions-serve.yml +0 -345
- package/examples/ci/gitlab-ci-serve.yml +0 -407
- package/examples/datasets/README.md +0 -101
- package/examples/datasets/b2bshop.ts +0 -155
- package/examples/datasets/index.ts +0 -57
- package/examples/datasets/reqres.ts +0 -195
- package/examples/fixtures-demo/fixtures/users.yml +0 -39
- package/examples/fixtures-demo/pack.yml +0 -71
- package/examples/future-api/README.md +0 -16
- package/examples/future-api/diag.js +0 -7
- package/examples/future-api/health.js +0 -4
- package/examples/future-api/packs.js +0 -13
- package/examples/future-api/runpack.js +0 -10
- package/examples/generation/README.md +0 -148
- package/examples/generation/pack-generator-example.js +0 -115
- package/examples/generation/source-analyzer-example.js +0 -115
- package/examples/httpbin/pack.yml +0 -59
- package/examples/load-testing/mcp-load.yml +0 -115
- package/examples/load-testing/mcp-stdio.yml +0 -95
- package/examples/mcp/claude-desktop-config.json +0 -33
- package/examples/mcp/claude-desktop.json +0 -16
- package/examples/mcp/conversation-sample.md +0 -131
- package/examples/mcp/demo-60s.md +0 -330
- package/examples/mcp/sample-conversation.jsonl +0 -21
- package/examples/mcp/vscode-settings.json +0 -22
- package/examples/pack-v2-complete.yml +0 -242
- package/examples/pack-v2-examples.md +0 -244
- package/examples/pack-v2-quickstart.yml +0 -55
- package/examples/packs-business/ecommerce-api.yml +0 -121
- package/examples/packs-business/saas-dashboard-ui.yml +0 -133
- package/examples/packs-conformance/compose-multi.yml +0 -174
- package/examples/packs-conformance/full.yml +0 -152
- package/examples/packs-conformance/heavy-artifacts.yml +0 -152
- package/examples/packs-conformance/minimal.yml +0 -71
- package/examples/packs-conformance/secrets-missing.yml +0 -97
- package/examples/packs-conformance/timeouts.yml +0 -77
- package/examples/pom-demo/README.md +0 -104
- package/examples/pom-demo/pack.yml +0 -60
- package/examples/pom-demo/pages/DashboardPage.page.ts +0 -73
- package/examples/pom-demo/pages/LoginPage.page.ts +0 -76
- package/examples/proofs/e2e-playwright-proof.json +0 -75
- package/examples/proofs/httpbin-proof.json +0 -69
- package/examples/proofs/multi-adapter-proof.json +0 -117
- package/examples/proofs/test-proof.json +0 -26
- package/examples/restful-api-dev/README.md +0 -102
- package/examples/restful-api-dev/restful-api-advanced.yml +0 -29
- package/examples/restful-api-dev/restful-api-basic.yml +0 -29
- package/examples/web-lite/.github/workflows/qa360-phase3.yml +0 -73
- package/examples/web-lite/api-mock/server.js +0 -258
- package/examples/web-lite/pack.yml +0 -71
- package/examples/web-lite/services.yml +0 -43
- package/examples/web-lite/web-content/healthz +0 -1
- package/examples/web-lite/web-content/index.html +0 -259
- package/packages/mcp/CHANGELOG.md +0 -109
- package/packages/mcp/IMPLEMENTATION_SUMMARY.md +0 -350
- package/packages/mcp/LICENSE +0 -21
- package/packages/mcp/QUICK_START.md +0 -291
- package/packages/mcp/README.md +0 -294
- package/packages/mcp/TELEMETRY.md +0 -220
- package/packages/mcp/package.json +0 -91
- package/packages/mcp/scripts/generate-sbom-fallback.cjs +0 -84
- package/packages/mcp/scripts/safe-postinstall.cjs +0 -32
- package/packages/mcp/src/__tests__/contract.test.ts +0 -902
- package/packages/mcp/src/cli/cli.ts +0 -137
- package/packages/mcp/src/cli/doctor.ts +0 -286
- package/packages/mcp/src/cli/fix.ts +0 -99
- package/packages/mcp/src/cli/init.ts +0 -233
- package/packages/mcp/src/cli/postinstall.ts +0 -14
- package/packages/mcp/src/cli/reset.ts +0 -44
- package/packages/mcp/src/cli/telemetry.ts +0 -166
- package/packages/mcp/src/cli/test-dx.ts +0 -94
- package/packages/mcp/src/cli/uninstall.ts +0 -80
- package/packages/mcp/src/cli/up.ts +0 -178
- package/packages/mcp/src/index.ts +0 -12
- package/packages/mcp/src/scripts/e2e-local.ts +0 -337
- package/packages/mcp/src/scripts/verify-settings.ts +0 -242
- package/packages/mcp/src/security/audit.ts +0 -244
- package/packages/mcp/src/security/manager.ts +0 -242
- package/packages/mcp/src/server/full-server.ts +0 -212
- package/packages/mcp/src/server/minimal-server.ts +0 -134
- package/packages/mcp/src/tools/history.ts +0 -388
- package/packages/mcp/src/tools/pack.ts +0 -449
- package/packages/mcp/src/tools/registry.ts +0 -638
- package/packages/mcp/src/tools/report.ts +0 -100
- package/packages/mcp/src/tools/run.ts +0 -268
- package/packages/mcp/src/tools/secrets.ts +0 -198
- package/packages/mcp/src/tools/serve.ts +0 -221
- package/packages/mcp/src/tools/triage.ts +0 -532
- package/packages/mcp/src/tools/types.ts +0 -26
- package/packages/mcp/src/tools/vault.ts +0 -164
- package/packages/mcp/src/tools/verify.ts +0 -166
- package/packages/mcp/src/types/index.ts +0 -311
- package/packages/mcp/src/types/mcp-stubs.ts +0 -83
- package/packages/mcp/tsconfig.json +0 -16
- package/playwright.config.ts +0 -20
- package/pnpm-workspace.yaml +0 -4
- package/run-test-and-push.sh +0 -20
- package/scripts/build-proof-cli.sh +0 -110
- package/scripts/ci/check-windows-paths.js +0 -92
- package/scripts/ci/invariants.sh +0 -124
- package/scripts/ci/make-final-bundle.js +0 -106
- package/scripts/ci/mcp-run-multipack.js +0 -305
- package/scripts/ci/run-pack-suite.sh +0 -103
- package/scripts/ci/run-phase7-final.sh +0 -190
- package/scripts/ci/slo-assert.js +0 -158
- package/scripts/ci/test-fault-tolerance.sh +0 -301
- package/scripts/install-mcp.sh +0 -66
- package/scripts/mcp-smoke.mjs +0 -27
- package/scripts/smoke.sh +0 -26
- package/scripts/stress-test.js +0 -288
- package/scripts/sync-version.mjs +0 -50
- package/scripts/validate-examples.mjs +0 -404
- package/scripts/validation/simple-pack-check.sh +0 -51
- package/scripts/validation/validate-universal-pack.mjs +0 -77
- package/scripts/verify-persistence.js +0 -127
- package/test-pack.yaml +0 -43
- package/test-results/.last-run.json +0 -4
- package/test-runner.mjs +0 -87
- package/tests/artifacts.spec.js +0 -147
- package/tests/contracts.spec.js +0 -239
- package/tests/e2e/assertions.test.mjs +0 -370
- package/tests/e2e/crawler.test.mjs +0 -451
- package/tests/e2e/playwright-plus-plus.test.mjs +0 -604
- package/tests/e2e/proof-bundle.test.mjs +0 -258
- package/tests/e2e/real-world/saucedemo.test.mjs +0 -714
- package/tests/e2e/real-world/the-internet-herokuapp.test.mjs +0 -760
- package/tests/e2e/ui-actions.test.mjs +0 -546
- package/tests/gherkin.e2e.spec.ts +0 -310
- package/tests/no-console-errors.spec.js +0 -136
- package/tests/pdf.spec.ts +0 -252
- package/tests/run-pack.spec.ts +0 -58
- package/tsconfig.base.json +0 -15
- package/tsconfig.build.json +0 -8
- package/tsconfig.json +0 -37
- package/tsconfig.test.json +0 -18
- package/typedoc.json +0 -37
- package/ui/README.md +0 -50
- package/verify-proof.mjs +0 -60
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Commands for TUI and Dashboard monitoring
|
|
3
|
+
* Phase 8: Real-time test execution visualization
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import { TUIMonitor } from '../core/index.js';
|
|
8
|
+
import { DashboardServer, EvidenceVault } from '../core/index.js';
|
|
9
|
+
import { Phase3Runner } from '../core/index.js';
|
|
10
|
+
import { existsSync } from 'fs';
|
|
11
|
+
import { join } from 'path';
|
|
12
|
+
import { loadPackConfig } from '../utils/config.js';
|
|
13
|
+
/**
|
|
14
|
+
* Monitor command - Run tests with TUI
|
|
15
|
+
*/
|
|
16
|
+
export const monitorCommand = async (pack, options) => {
|
|
17
|
+
const packPath = pack || findDefaultPack();
|
|
18
|
+
if (!packPath) {
|
|
19
|
+
console.error(chalk.red('Error: No pack file found. Specify a pack file or run qa360 init.'));
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
// Load pack config
|
|
23
|
+
const packConfig = await loadPackConfig(packPath);
|
|
24
|
+
const workingDir = process.cwd();
|
|
25
|
+
// Get gate names
|
|
26
|
+
const gateNames = getGateNames(packConfig);
|
|
27
|
+
// Create TUI monitor
|
|
28
|
+
const monitor = new TUIMonitor({
|
|
29
|
+
refreshRate: 500,
|
|
30
|
+
colors: true,
|
|
31
|
+
compact: false
|
|
32
|
+
});
|
|
33
|
+
monitor.start(gateNames.length);
|
|
34
|
+
try {
|
|
35
|
+
// Create runner with event emission
|
|
36
|
+
const runner = new Phase3Runner({
|
|
37
|
+
workingDir,
|
|
38
|
+
pack: packConfig
|
|
39
|
+
});
|
|
40
|
+
// Emit events to monitor
|
|
41
|
+
monitor.emit({
|
|
42
|
+
type: 'phase_start',
|
|
43
|
+
timestamp: Date.now(),
|
|
44
|
+
data: { phase: 'Initializing' }
|
|
45
|
+
});
|
|
46
|
+
// Run tests (simplified - in real implementation, Phase3Runner would emit events)
|
|
47
|
+
const result = await runner.run();
|
|
48
|
+
// Update monitor with results
|
|
49
|
+
for (const gate of result.gates) {
|
|
50
|
+
monitor.emit({
|
|
51
|
+
type: 'gate_start',
|
|
52
|
+
timestamp: Date.now(),
|
|
53
|
+
data: { gate: gate.gate }
|
|
54
|
+
});
|
|
55
|
+
monitor.emit({
|
|
56
|
+
type: 'gate_end',
|
|
57
|
+
timestamp: Date.now(),
|
|
58
|
+
data: {
|
|
59
|
+
gate: gate.gate,
|
|
60
|
+
success: gate.success,
|
|
61
|
+
results: {
|
|
62
|
+
total: gate.results?.summary?.total || 0,
|
|
63
|
+
passed: gate.results?.summary?.passed || 0,
|
|
64
|
+
failed: gate.results?.summary?.failed || 0
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
monitor.complete();
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
monitor.emit({
|
|
73
|
+
type: 'error',
|
|
74
|
+
timestamp: Date.now(),
|
|
75
|
+
data: { error: error instanceof Error ? error.message : String(error) }
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Dashboard command - Run tests with web dashboard
|
|
81
|
+
*/
|
|
82
|
+
export const dashboardCommand = async (pack, options) => {
|
|
83
|
+
const packPath = pack || findDefaultPack();
|
|
84
|
+
if (!packPath) {
|
|
85
|
+
console.error(chalk.red('Error: No pack file found. Specify a pack file or run qa360 init.'));
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
const port = options.port ? parseInt(options.port) : 8080;
|
|
89
|
+
const host = options.host || '127.0.0.1';
|
|
90
|
+
const workingDir = process.cwd();
|
|
91
|
+
// Load pack config
|
|
92
|
+
const packConfig = await loadPackConfig(packPath);
|
|
93
|
+
const gateNames = getGateNames(packConfig);
|
|
94
|
+
// Open vault for flakiness data
|
|
95
|
+
const vaultPath = join(workingDir, '.qa360');
|
|
96
|
+
const vault = await EvidenceVault.open(vaultPath);
|
|
97
|
+
// Create dashboard server
|
|
98
|
+
const dashboard = new DashboardServer({
|
|
99
|
+
port,
|
|
100
|
+
host,
|
|
101
|
+
autoOpen: options.autoOpen ?? true,
|
|
102
|
+
refreshRate: 1000
|
|
103
|
+
});
|
|
104
|
+
// Connect vault to dashboard for flakiness data
|
|
105
|
+
dashboard.setVault(vault);
|
|
106
|
+
await dashboard.start();
|
|
107
|
+
dashboard.setGates(gateNames);
|
|
108
|
+
console.log(chalk.green('✓ Dashboard started'));
|
|
109
|
+
console.log(chalk.gray(` Open http://${host}:${port} in your browser`));
|
|
110
|
+
// Run tests with dashboard updates
|
|
111
|
+
try {
|
|
112
|
+
const runner = new Phase3Runner({
|
|
113
|
+
workingDir,
|
|
114
|
+
pack: packConfig
|
|
115
|
+
});
|
|
116
|
+
dashboard.emit({
|
|
117
|
+
type: 'start',
|
|
118
|
+
timestamp: Date.now(),
|
|
119
|
+
data: { phase: 'Running tests' }
|
|
120
|
+
});
|
|
121
|
+
const result = await runner.run();
|
|
122
|
+
// Set run ID for flakiness tracking
|
|
123
|
+
if (result.runId) {
|
|
124
|
+
dashboard.setRunId(result.runId);
|
|
125
|
+
}
|
|
126
|
+
// Update dashboard with gate results
|
|
127
|
+
for (const gate of result.gates) {
|
|
128
|
+
dashboard.emit({
|
|
129
|
+
type: 'gate_start',
|
|
130
|
+
timestamp: Date.now(),
|
|
131
|
+
data: { gate: gate.gate }
|
|
132
|
+
});
|
|
133
|
+
dashboard.emit({
|
|
134
|
+
type: 'gate_end',
|
|
135
|
+
timestamp: Date.now(),
|
|
136
|
+
data: {
|
|
137
|
+
gate: gate.gate,
|
|
138
|
+
success: gate.success,
|
|
139
|
+
duration: gate.duration,
|
|
140
|
+
results: {
|
|
141
|
+
total: gate.results?.summary?.total || 0,
|
|
142
|
+
passed: gate.results?.summary?.passed || 0,
|
|
143
|
+
failed: gate.results?.summary?.failed || 0
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
await dashboard.emit({
|
|
149
|
+
type: 'complete',
|
|
150
|
+
timestamp: Date.now(),
|
|
151
|
+
data: {}
|
|
152
|
+
});
|
|
153
|
+
console.log(chalk.green('✓ Tests completed. Dashboard will remain open.'));
|
|
154
|
+
console.log(chalk.gray('Press Ctrl+C to exit.'));
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
await dashboard.emit({
|
|
158
|
+
type: 'error',
|
|
159
|
+
timestamp: Date.now(),
|
|
160
|
+
data: { error: error instanceof Error ? error.message : String(error) }
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
// Keep dashboard open until user exits
|
|
164
|
+
// Vault stays open for flakiness data access
|
|
165
|
+
try {
|
|
166
|
+
await keepAlive();
|
|
167
|
+
}
|
|
168
|
+
finally {
|
|
169
|
+
// Close vault when user exits
|
|
170
|
+
await vault.close();
|
|
171
|
+
await dashboard.stop();
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
/**
|
|
175
|
+
* Create monitor and dashboard commands
|
|
176
|
+
*/
|
|
177
|
+
export function createMonitorCommands() {
|
|
178
|
+
const cmd = new Command('monitor');
|
|
179
|
+
cmd
|
|
180
|
+
.description('Run tests with terminal UI monitoring')
|
|
181
|
+
.argument('[pack]', 'Path to pack file')
|
|
182
|
+
.option('--mode <mode>', 'Execution mode: soft or strict', 'soft')
|
|
183
|
+
.option('--retries <number>', 'Number of retries for failed tests', '2')
|
|
184
|
+
.option('--timeout <ms>', 'Global timeout in milliseconds', '30000')
|
|
185
|
+
.option('--docker', 'Use Docker fallback for missing tools')
|
|
186
|
+
.action(monitorCommand);
|
|
187
|
+
return cmd;
|
|
188
|
+
}
|
|
189
|
+
export function createDashboardCommand() {
|
|
190
|
+
const cmd = new Command('dashboard');
|
|
191
|
+
cmd
|
|
192
|
+
.description('Run tests with web dashboard')
|
|
193
|
+
.argument('[pack]', 'Path to pack file')
|
|
194
|
+
.option('--port <number>', 'Dashboard port', '8080')
|
|
195
|
+
.option('--host <address>', 'Dashboard host', '127.0.0.1')
|
|
196
|
+
.option('--no-auto-open', 'Do not auto-open browser')
|
|
197
|
+
.action(dashboardCommand);
|
|
198
|
+
return cmd;
|
|
199
|
+
}
|
|
200
|
+
// Helper functions
|
|
201
|
+
function findDefaultPack() {
|
|
202
|
+
const candidates = ['qa360.yml', 'qa360.yaml', 'pack.yml', 'pack.yaml', '.qa360/pack.yml'];
|
|
203
|
+
for (const candidate of candidates) {
|
|
204
|
+
if (existsSync(join(process.cwd(), candidate))) {
|
|
205
|
+
return candidate;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return undefined;
|
|
209
|
+
}
|
|
210
|
+
function getGateNames(packConfig) {
|
|
211
|
+
if (packConfig.version === 2 && packConfig.gates) {
|
|
212
|
+
// v2: gates is an object
|
|
213
|
+
return Object.keys(packConfig.gates);
|
|
214
|
+
}
|
|
215
|
+
else if (packConfig.gates && Array.isArray(packConfig.gates)) {
|
|
216
|
+
// v1: gates is an array
|
|
217
|
+
return packConfig.gates;
|
|
218
|
+
}
|
|
219
|
+
return [];
|
|
220
|
+
}
|
|
221
|
+
async function keepAlive() {
|
|
222
|
+
return new Promise(() => {
|
|
223
|
+
// Keep process alive
|
|
224
|
+
});
|
|
225
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QA360 Ollama Command
|
|
3
|
+
*
|
|
4
|
+
* Manage Ollama integration for AI-powered test generation.
|
|
5
|
+
* This command handles connection testing, model management, and configuration.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
/**
|
|
9
|
+
* Test Ollama connection
|
|
10
|
+
*/
|
|
11
|
+
export declare function ollamaTestCommand(options?: {
|
|
12
|
+
model?: string;
|
|
13
|
+
}): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* List available models
|
|
16
|
+
*/
|
|
17
|
+
export declare function ollamaListCommand(): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Pull a model
|
|
20
|
+
*/
|
|
21
|
+
export declare function ollamaPullCommand(model: string): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Generate tests using Ollama
|
|
24
|
+
*/
|
|
25
|
+
export declare function ollamaGenerateCommand(prompt: string, options?: {
|
|
26
|
+
model?: string;
|
|
27
|
+
type?: string;
|
|
28
|
+
json?: boolean;
|
|
29
|
+
}): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Show Ollama configuration
|
|
32
|
+
*/
|
|
33
|
+
export declare function ollamaConfigCommand(options?: {
|
|
34
|
+
setUrl?: string;
|
|
35
|
+
setModel?: string;
|
|
36
|
+
}): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Create Ollama commands
|
|
39
|
+
*/
|
|
40
|
+
export declare function createOllamaCommands(): Command;
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QA360 Ollama Command
|
|
3
|
+
*
|
|
4
|
+
* Manage Ollama integration for AI-powered test generation.
|
|
5
|
+
* This command handles connection testing, model management, and configuration.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
import ora from 'ora';
|
|
10
|
+
import { checkOllamaSetup, OllamaProvider, OllamaError } from '../core/index.js';
|
|
11
|
+
import { loadQA360Config, updateQA360Config, getConfigPath } from '../utils/config.js';
|
|
12
|
+
/**
|
|
13
|
+
* Test Ollama connection
|
|
14
|
+
*/
|
|
15
|
+
export async function ollamaTestCommand(options = {}) {
|
|
16
|
+
const spinner = ora('Testing Ollama connection...').start();
|
|
17
|
+
const model = options.model || 'deepseek-coder';
|
|
18
|
+
try {
|
|
19
|
+
const check = await checkOllamaSetup(model);
|
|
20
|
+
if (!check.available) {
|
|
21
|
+
spinner.fail('Ollama is not available');
|
|
22
|
+
console.log(chalk.red('\n❌ Ollama is not running or not installed'));
|
|
23
|
+
console.log(chalk.yellow('\n📦 To install Ollama:'));
|
|
24
|
+
console.log(chalk.gray(' brew install ollama # macOS'));
|
|
25
|
+
console.log(chalk.gray(' # Or visit: https://ollama.com'));
|
|
26
|
+
console.log(chalk.yellow('\n🚀 To start Ollama:'));
|
|
27
|
+
console.log(chalk.gray(' ollama serve'));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
spinner.succeed('Ollama is running!');
|
|
31
|
+
console.log(chalk.green('\n✅ Ollama is available\n'));
|
|
32
|
+
if (check.models.length === 0) {
|
|
33
|
+
console.log(chalk.yellow('⚠️ No models found'));
|
|
34
|
+
console.log(chalk.yellow('\n📥 Pull DeepSeek Coder (recommended for code generation):'));
|
|
35
|
+
console.log(chalk.gray(' ollama pull deepseek-coder'));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
console.log(chalk.bold(`Found ${check.models.length} model(s):\n`));
|
|
39
|
+
for (const modelName of check.models) {
|
|
40
|
+
const isInstalled = modelName.includes(model);
|
|
41
|
+
const icon = isInstalled ? '✅' : ' ';
|
|
42
|
+
const color = isInstalled ? chalk.green : chalk.gray;
|
|
43
|
+
console.log(color(` ${icon} ${modelName}`));
|
|
44
|
+
}
|
|
45
|
+
if (!check.modelInstalled) {
|
|
46
|
+
console.log(chalk.yellow(`\n⚠️ Model "${model}" is not installed`));
|
|
47
|
+
console.log(chalk.yellow(`\n📥 To install: ollama pull ${model}`));
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
console.log(chalk.green(`\n✅ Model "${model}" is ready!`));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
spinner.fail('Connection test failed');
|
|
55
|
+
if (error instanceof OllamaError) {
|
|
56
|
+
console.error(chalk.red(error.message));
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
console.error(chalk.red('Unknown error:', error));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* List available models
|
|
65
|
+
*/
|
|
66
|
+
export async function ollamaListCommand() {
|
|
67
|
+
const spinner = ora('Connecting to Ollama...').start();
|
|
68
|
+
try {
|
|
69
|
+
const provider = new OllamaProvider();
|
|
70
|
+
const models = await provider.listModels();
|
|
71
|
+
spinner.succeed(`Found ${models.length} model(s)\n`);
|
|
72
|
+
console.log(chalk.bold('Available Models:\n'));
|
|
73
|
+
for (const model of models) {
|
|
74
|
+
const sizeGB = (model.size / 1024 / 1024 / 1024).toFixed(1);
|
|
75
|
+
console.log(chalk.cyan(` ${model.name}`));
|
|
76
|
+
console.log(chalk.gray(` Size: ${sizeGB} GB`));
|
|
77
|
+
console.log(chalk.gray(` Modified: ${new Date(model.modifiedAt).toISOString()}\n`));
|
|
78
|
+
}
|
|
79
|
+
console.log(chalk.yellow('💡 Recommended for code generation:'));
|
|
80
|
+
console.log(chalk.gray(' • deepseek-coder (6.7GB) - Best for code'));
|
|
81
|
+
console.log(chalk.gray(' • codellama (34GB) - Also good'));
|
|
82
|
+
console.log(chalk.gray(' • llama3.2 (3-4GB) - General purpose\n'));
|
|
83
|
+
console.log(chalk.yellow('📥 To install a model:'));
|
|
84
|
+
console.log(chalk.gray(' ollama pull <model-name>\n'));
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
spinner.fail('Failed to list models');
|
|
88
|
+
if (error instanceof OllamaError) {
|
|
89
|
+
console.error(chalk.red(error.message));
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
console.error(chalk.red('Unknown error:', error));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Pull a model
|
|
98
|
+
*/
|
|
99
|
+
export async function ollamaPullCommand(model) {
|
|
100
|
+
console.log(chalk.cyan(`📥 Pulling model: ${model}\n`));
|
|
101
|
+
console.log(chalk.yellow('This may take a while depending on your connection...\n'));
|
|
102
|
+
console.log(chalk.gray('Alternatively, run this command in another terminal:\n'));
|
|
103
|
+
console.log(chalk.bold(` ollama pull ${model}\n`));
|
|
104
|
+
try {
|
|
105
|
+
const provider = new OllamaProvider();
|
|
106
|
+
const models = await provider.listModels();
|
|
107
|
+
if (models.some(m => m.name === model)) {
|
|
108
|
+
console.log(chalk.green(`✅ Model "${model}" is already installed\n`));
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
console.log(chalk.yellow('💡 Use the command above in a separate terminal to download the model.'));
|
|
112
|
+
console.log(chalk.gray('Large models (several GB) can take 10-30 minutes depending on your internet.\n'));
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
if (error instanceof OllamaError) {
|
|
116
|
+
console.error(chalk.red(error.message));
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
console.error(chalk.red('Unknown error:', error));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Generate tests using Ollama
|
|
125
|
+
*/
|
|
126
|
+
export async function ollamaGenerateCommand(prompt, options = {}) {
|
|
127
|
+
const spinner = ora('Connecting to Ollama...').start();
|
|
128
|
+
const model = options.model || 'deepseek-coder';
|
|
129
|
+
const type = options.type || 'api';
|
|
130
|
+
try {
|
|
131
|
+
const provider = new OllamaProvider({ model });
|
|
132
|
+
// Check availability
|
|
133
|
+
const available = await provider.isAvailable();
|
|
134
|
+
if (!available) {
|
|
135
|
+
spinner.fail('Ollama not available');
|
|
136
|
+
console.log(chalk.red('\n❌ Ollama is not running'));
|
|
137
|
+
console.log(chalk.yellow('\nStart Ollama with: ollama serve'));
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
spinner.succeed('Connected to Ollama');
|
|
141
|
+
// Build system prompt based on type
|
|
142
|
+
const systemPrompt = buildSystemPrompt(type);
|
|
143
|
+
const genSpinner = ora(`Generating ${type} tests...`).start();
|
|
144
|
+
const response = await provider.generate({
|
|
145
|
+
systemPrompt,
|
|
146
|
+
prompt,
|
|
147
|
+
maxTokens: 4096,
|
|
148
|
+
temperature: 0.7,
|
|
149
|
+
});
|
|
150
|
+
genSpinner.succeed('Tests generated!\n');
|
|
151
|
+
if (options.json) {
|
|
152
|
+
console.log(JSON.stringify({ content: response.content, usage: response.usage }, null, 2));
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
console.log(chalk.bold('Generated Tests:\n'));
|
|
156
|
+
console.log(chalk.gray('─'.repeat(60)));
|
|
157
|
+
console.log(response.content);
|
|
158
|
+
console.log(chalk.gray('─'.repeat(60)));
|
|
159
|
+
console.log(chalk.gray(`\n📊 Tokens: ${response.usage.totalTokens} (${response.usage.promptTokens} prompt + ${response.usage.completionTokens} completion)`));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
spinner.fail('Generation failed');
|
|
164
|
+
if (error instanceof OllamaError) {
|
|
165
|
+
console.error(chalk.red(error.message));
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
console.error(chalk.red('Unknown error:', error));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Show Ollama configuration
|
|
174
|
+
*/
|
|
175
|
+
export async function ollamaConfigCommand(options = {}) {
|
|
176
|
+
const config = loadQA360Config();
|
|
177
|
+
const ollamaConfig = config.ollama || {};
|
|
178
|
+
const defaultBaseUrl = 'http://localhost:11434';
|
|
179
|
+
const defaultModel = 'deepseek-coder';
|
|
180
|
+
// Update config if options provided
|
|
181
|
+
if (options.setUrl || options.setModel) {
|
|
182
|
+
const updates = {
|
|
183
|
+
ollama: {
|
|
184
|
+
...ollamaConfig,
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
if (options.setUrl) {
|
|
188
|
+
updates.ollama.baseUrl = options.setUrl;
|
|
189
|
+
console.log(chalk.cyan(`Setting Ollama base URL: ${options.setUrl}`));
|
|
190
|
+
}
|
|
191
|
+
if (options.setModel) {
|
|
192
|
+
updates.ollama.model = options.setModel;
|
|
193
|
+
console.log(chalk.cyan(`Setting Ollama model: ${options.setModel}`));
|
|
194
|
+
}
|
|
195
|
+
updateQA360Config(updates);
|
|
196
|
+
console.log(chalk.green('✅ Configuration saved\n'));
|
|
197
|
+
}
|
|
198
|
+
// Display current configuration
|
|
199
|
+
const currentConfig = loadQA360Config().ollama || {};
|
|
200
|
+
const baseUrl = currentConfig.baseUrl || defaultBaseUrl;
|
|
201
|
+
const model = currentConfig.model || defaultModel;
|
|
202
|
+
const isDefault = !currentConfig.baseUrl && !currentConfig.model;
|
|
203
|
+
console.log(chalk.cyan('Ollama Configuration:\n'));
|
|
204
|
+
console.log(chalk.bold(' Base URL:'));
|
|
205
|
+
console.log(chalk.gray(` ${baseUrl}`));
|
|
206
|
+
if (!currentConfig.baseUrl) {
|
|
207
|
+
console.log(chalk.dim(' (default)'));
|
|
208
|
+
}
|
|
209
|
+
console.log(chalk.bold('\n Model:'));
|
|
210
|
+
console.log(chalk.gray(` ${model}`));
|
|
211
|
+
if (!currentConfig.model) {
|
|
212
|
+
console.log(chalk.dim(' (default)'));
|
|
213
|
+
}
|
|
214
|
+
if (isDefault) {
|
|
215
|
+
console.log(chalk.yellow('\n💡 Using defaults. Set custom values with:'));
|
|
216
|
+
console.log(chalk.gray(' qa360 ollama config --set-url <url>'));
|
|
217
|
+
console.log(chalk.gray(' qa360 ollama config --set-model <model>\n'));
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
console.log(chalk.green('\n✅ Configuration loaded from:'));
|
|
221
|
+
console.log(chalk.gray(` ${getConfigPath()}\n`));
|
|
222
|
+
console.log(chalk.yellow('💡 To reset to defaults, delete the config file:\n'));
|
|
223
|
+
console.log(chalk.gray(` rm ${getConfigPath()}\n`));
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Build system prompt for test generation
|
|
228
|
+
*/
|
|
229
|
+
function buildSystemPrompt(type) {
|
|
230
|
+
const basePrompt = `You are QA360, an expert QA test generator.
|
|
231
|
+
Generate production-ready, well-structured test code following best practices.
|
|
232
|
+
|
|
233
|
+
Rules:
|
|
234
|
+
- Generate COMPLETE, working code (no "...", no comments saying "to be implemented")
|
|
235
|
+
- Include proper imports and setup
|
|
236
|
+
- Handle errors gracefully
|
|
237
|
+
- Use modern async/await patterns
|
|
238
|
+
- Add helpful comments for complex logic
|
|
239
|
+
- Return ONLY the code, no explanations before or after`;
|
|
240
|
+
const typePrompts = {
|
|
241
|
+
api: `${basePrompt}
|
|
242
|
+
|
|
243
|
+
For API tests using Playwright:
|
|
244
|
+
- Use @playwright/test
|
|
245
|
+
- Use test() and expect() from Playwright
|
|
246
|
+
- Test REST API endpoints (GET, POST, PUT, DELETE)
|
|
247
|
+
- Include proper assertions for status codes, headers, and response body
|
|
248
|
+
- Handle both success and error cases`,
|
|
249
|
+
ui: `${basePrompt}
|
|
250
|
+
|
|
251
|
+
For UI/E2E tests using Playwright:
|
|
252
|
+
- Use @playwright/test
|
|
253
|
+
- Use page.goto(), page.click(), page.fill(), etc.
|
|
254
|
+
- Include explicit waits where needed (waitForLoadState, waitForSelector)
|
|
255
|
+
- Add assertions for page content
|
|
256
|
+
- Use data-testid attributes when possible`,
|
|
257
|
+
perf: `${basePrompt}
|
|
258
|
+
|
|
259
|
+
For performance tests using K6:
|
|
260
|
+
- Use k6/http module
|
|
261
|
+
- Define thresholds for response times and error rates
|
|
262
|
+
- Include realistic user scenarios
|
|
263
|
+
- Use options for VUs and duration`,
|
|
264
|
+
a11y: `${basePrompt}
|
|
265
|
+
|
|
266
|
+
For accessibility tests:
|
|
267
|
+
- Use @axe-core/playwright
|
|
268
|
+
- Test WCAG compliance
|
|
269
|
+
- Check for common a11y issues`,
|
|
270
|
+
};
|
|
271
|
+
return typePrompts[type] || typePrompts.api;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Create Ollama commands
|
|
275
|
+
*/
|
|
276
|
+
export function createOllamaCommands() {
|
|
277
|
+
const ollamaCmd = new Command('ollama')
|
|
278
|
+
.description('Manage Ollama AI integration for test generation');
|
|
279
|
+
ollamaCmd
|
|
280
|
+
.command('test')
|
|
281
|
+
.description('Test Ollama connection and availability')
|
|
282
|
+
.option('-m, --model <model>', 'Model to test', 'deepseek-coder')
|
|
283
|
+
.action(async (options) => {
|
|
284
|
+
try {
|
|
285
|
+
await ollamaTestCommand(options);
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
console.error(chalk.red('Error testing Ollama:'), error.message);
|
|
289
|
+
process.exit(1);
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
ollamaCmd
|
|
293
|
+
.command('list')
|
|
294
|
+
.description('List available Ollama models')
|
|
295
|
+
.action(async () => {
|
|
296
|
+
try {
|
|
297
|
+
await ollamaListCommand();
|
|
298
|
+
}
|
|
299
|
+
catch (error) {
|
|
300
|
+
console.error(chalk.red('Error listing models:'), error.message);
|
|
301
|
+
process.exit(1);
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
ollamaCmd
|
|
305
|
+
.command('pull <model>')
|
|
306
|
+
.description('Pull a model from Ollama registry')
|
|
307
|
+
.action(async (model) => {
|
|
308
|
+
try {
|
|
309
|
+
await ollamaPullCommand(model);
|
|
310
|
+
}
|
|
311
|
+
catch (error) {
|
|
312
|
+
console.error(chalk.red('Error pulling model:'), error.message);
|
|
313
|
+
process.exit(1);
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
ollamaCmd
|
|
317
|
+
.command('generate <prompt>')
|
|
318
|
+
.description('Generate tests using Ollama (preview)')
|
|
319
|
+
.option('-m, --model <model>', 'Model to use', 'deepseek-coder')
|
|
320
|
+
.option('-t, --type <type>', 'Test type (api, ui, perf)', 'api')
|
|
321
|
+
.option('--json', 'Output as JSON')
|
|
322
|
+
.action(async (prompt, options) => {
|
|
323
|
+
try {
|
|
324
|
+
await ollamaGenerateCommand(prompt, options);
|
|
325
|
+
}
|
|
326
|
+
catch (error) {
|
|
327
|
+
console.error(chalk.red('Error generating tests:'), error.message);
|
|
328
|
+
process.exit(1);
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
ollamaCmd
|
|
332
|
+
.command('config')
|
|
333
|
+
.description('Show or set Ollama configuration')
|
|
334
|
+
.option('--set-url <url>', 'Set Ollama base URL')
|
|
335
|
+
.option('--set-model <model>', 'Set default model')
|
|
336
|
+
.action(async (options) => {
|
|
337
|
+
try {
|
|
338
|
+
await ollamaConfigCommand(options);
|
|
339
|
+
}
|
|
340
|
+
catch (error) {
|
|
341
|
+
console.error(chalk.red('Error showing config:'), error.message);
|
|
342
|
+
process.exit(1);
|
|
343
|
+
}
|
|
344
|
+
});
|
|
345
|
+
return ollamaCmd;
|
|
346
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QA360 Pack Commands
|
|
3
|
+
*
|
|
4
|
+
* Implements pack validate, lint, and migrate commands
|
|
5
|
+
* Supports both v1 and v2 pack formats
|
|
6
|
+
*/
|
|
7
|
+
export declare class QA360Pack {
|
|
8
|
+
private qa360Dir;
|
|
9
|
+
private packPath;
|
|
10
|
+
private validatorV1;
|
|
11
|
+
private migratorV1;
|
|
12
|
+
/**
|
|
13
|
+
* Validate pack.yml (auto-detects v1 or v2)
|
|
14
|
+
*/
|
|
15
|
+
validate(packPath?: string, options?: {
|
|
16
|
+
checkFiles?: boolean;
|
|
17
|
+
}): Promise<{
|
|
18
|
+
valid: boolean;
|
|
19
|
+
exitCode: number;
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* Validate v1 pack
|
|
23
|
+
*/
|
|
24
|
+
private validateV1;
|
|
25
|
+
/**
|
|
26
|
+
* Validate v2 pack
|
|
27
|
+
*/
|
|
28
|
+
private validateV2;
|
|
29
|
+
/**
|
|
30
|
+
* Lint and auto-fix pack.yml
|
|
31
|
+
*/
|
|
32
|
+
lint(packPath?: string): Promise<{
|
|
33
|
+
success: boolean;
|
|
34
|
+
exitCode: number;
|
|
35
|
+
}>;
|
|
36
|
+
/**
|
|
37
|
+
* Migrate pack to v2
|
|
38
|
+
*/
|
|
39
|
+
migrate(packPath?: string, options?: {
|
|
40
|
+
output?: string;
|
|
41
|
+
dryRun?: boolean;
|
|
42
|
+
}): Promise<{
|
|
43
|
+
success: boolean;
|
|
44
|
+
exitCode: number;
|
|
45
|
+
}>;
|
|
46
|
+
/**
|
|
47
|
+
* Detect pack version
|
|
48
|
+
*/
|
|
49
|
+
private detectPackVersion;
|
|
50
|
+
/**
|
|
51
|
+
* Apply automatic fixes to pack
|
|
52
|
+
*/
|
|
53
|
+
private applyAutoFixes;
|
|
54
|
+
/**
|
|
55
|
+
* Show v1 pack summary
|
|
56
|
+
*/
|
|
57
|
+
private showPackSummary;
|
|
58
|
+
/**
|
|
59
|
+
* Show v2 pack summary
|
|
60
|
+
*/
|
|
61
|
+
private showPackV2Summary;
|
|
62
|
+
}
|
|
63
|
+
export declare function packValidateCommand(packPath?: string, options?: {
|
|
64
|
+
checkFiles?: boolean;
|
|
65
|
+
}): Promise<void>;
|
|
66
|
+
export declare function packLintCommand(packPath?: string): Promise<void>;
|
|
67
|
+
export declare function packMigrateCommand(packPath?: string, options?: {
|
|
68
|
+
output?: string;
|
|
69
|
+
dryRun?: boolean;
|
|
70
|
+
}): Promise<void>;
|