agentic-qe 3.7.7 → 3.7.9
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/.claude/helpers/statusline-v3.cjs +13 -1
- package/.claude/skills/debug-loop/SKILL.md +1 -1
- package/.claude/skills/enterprise-integration-testing/evals/enterprise-integration-testing.yaml +158 -0
- package/.claude/skills/enterprise-integration-testing/schemas/output.json +74 -0
- package/.claude/skills/enterprise-integration-testing/scripts/validate-config.json +25 -0
- package/.claude/skills/middleware-testing-patterns/evals/middleware-testing-patterns.yaml +153 -0
- package/.claude/skills/middleware-testing-patterns/schemas/output.json +58 -0
- package/.claude/skills/middleware-testing-patterns/scripts/validate-config.json +25 -0
- package/.claude/skills/observability-testing-patterns/evals/observability-testing-patterns.yaml +157 -0
- package/.claude/skills/observability-testing-patterns/schemas/output.json +58 -0
- package/.claude/skills/observability-testing-patterns/scripts/validate-config.json +25 -0
- package/.claude/skills/pr-review/SKILL.md +1 -1
- package/.claude/skills/qcsd-cicd-swarm/evals/qcsd-cicd-swarm.yaml +211 -0
- package/.claude/skills/qcsd-cicd-swarm/schemas/output.json +86 -0
- package/.claude/skills/qcsd-cicd-swarm/scripts/validate-config.json +30 -0
- package/.claude/skills/qcsd-development-swarm/evals/qcsd-development-swarm.yaml +162 -0
- package/.claude/skills/qcsd-development-swarm/schemas/output.json +72 -0
- package/.claude/skills/qcsd-development-swarm/scripts/validate-config.json +25 -0
- package/.claude/skills/skills-manifest.json +1 -1
- package/.claude/skills/trust-tier-manifest.json +78 -7
- package/CHANGELOG.md +39 -0
- package/README.md +36 -0
- package/assets/skills/a11y-ally/SKILL.md +1664 -1658
- package/assets/skills/a11y-ally/evals/a11y-ally.yaml +376 -0
- package/assets/skills/a11y-ally/schemas/output.json +549 -0
- package/assets/skills/a11y-ally/scripts/validate-config.json +42 -0
- package/assets/skills/brutal-honesty-review/SKILL.md +5 -0
- package/assets/skills/brutal-honesty-review/schemas/output.json +291 -0
- package/assets/skills/brutal-honesty-review/scripts/validate-config.json +34 -0
- package/assets/skills/cicd-pipeline-qe-orchestrator/README.md +1 -1
- package/assets/skills/cicd-pipeline-qe-orchestrator/SKILL.md +6 -0
- package/assets/skills/cicd-pipeline-qe-orchestrator/evals/cicd-pipeline-qe-orchestrator.yaml +157 -0
- package/assets/skills/cicd-pipeline-qe-orchestrator/schemas/output.json +542 -0
- package/assets/skills/cicd-pipeline-qe-orchestrator/scripts/validate-config.json +42 -0
- package/assets/skills/debug-loop/SKILL.md +1 -1
- package/assets/skills/enterprise-integration-testing/evals/enterprise-integration-testing.yaml +158 -0
- package/assets/skills/enterprise-integration-testing/schemas/output.json +74 -0
- package/assets/skills/enterprise-integration-testing/scripts/validate-config.json +25 -0
- package/assets/skills/middleware-testing-patterns/evals/middleware-testing-patterns.yaml +153 -0
- package/assets/skills/middleware-testing-patterns/schemas/output.json +58 -0
- package/assets/skills/middleware-testing-patterns/scripts/validate-config.json +25 -0
- package/assets/skills/n8n-expression-testing/SKILL.md +6 -0
- package/assets/skills/n8n-expression-testing/evals/n8n-expression-testing.yaml +450 -0
- package/assets/skills/n8n-expression-testing/schemas/output.json +369 -0
- package/assets/skills/n8n-expression-testing/scripts/validate-config.json +39 -0
- package/assets/skills/n8n-integration-testing-patterns/SKILL.md +6 -0
- package/assets/skills/n8n-integration-testing-patterns/evals/n8n-integration-testing-patterns.yaml +522 -0
- package/assets/skills/n8n-integration-testing-patterns/schemas/output.json +291 -0
- package/assets/skills/n8n-integration-testing-patterns/scripts/validate-config.json +34 -0
- package/assets/skills/n8n-security-testing/SKILL.md +6 -0
- package/assets/skills/n8n-security-testing/evals/n8n-security-testing.yaml +493 -0
- package/assets/skills/n8n-security-testing/schemas/output.json +293 -0
- package/assets/skills/n8n-security-testing/scripts/validate-config.json +34 -0
- package/assets/skills/n8n-trigger-testing-strategies/SKILL.md +6 -0
- package/assets/skills/n8n-trigger-testing-strategies/evals/n8n-trigger-testing-strategies.yaml +500 -0
- package/assets/skills/n8n-trigger-testing-strategies/schemas/output.json +295 -0
- package/assets/skills/n8n-trigger-testing-strategies/scripts/validate-config.json +34 -0
- package/assets/skills/n8n-workflow-testing-fundamentals/SKILL.md +6 -0
- package/assets/skills/n8n-workflow-testing-fundamentals/evals/n8n-workflow-testing-fundamentals.yaml +497 -0
- package/assets/skills/n8n-workflow-testing-fundamentals/schemas/output.json +254 -0
- package/assets/skills/n8n-workflow-testing-fundamentals/scripts/validate-config.json +35 -0
- package/assets/skills/observability-testing-patterns/evals/observability-testing-patterns.yaml +157 -0
- package/assets/skills/observability-testing-patterns/schemas/output.json +58 -0
- package/assets/skills/observability-testing-patterns/scripts/validate-config.json +25 -0
- package/assets/skills/pentest-validation/scripts/validate-config.json +12 -0
- package/assets/skills/pr-review/SKILL.md +1 -1
- package/assets/skills/qcsd-cicd-swarm/evals/qcsd-cicd-swarm.yaml +211 -0
- package/assets/skills/qcsd-cicd-swarm/schemas/output.json +86 -0
- package/assets/skills/qcsd-cicd-swarm/scripts/validate-config.json +30 -0
- package/assets/skills/qcsd-development-swarm/evals/qcsd-development-swarm.yaml +162 -0
- package/assets/skills/qcsd-development-swarm/schemas/output.json +72 -0
- package/assets/skills/qcsd-development-swarm/scripts/validate-config.json +25 -0
- package/assets/skills/qcsd-ideation-swarm/evals/qcsd-ideation-swarm.yaml +138 -0
- package/assets/skills/qcsd-ideation-swarm/schemas/output.json +568 -0
- package/assets/skills/qcsd-ideation-swarm/scripts/validate-config.json +25 -0
- package/assets/skills/qcsd-production-swarm/SKILL.md +2781 -0
- package/assets/skills/qcsd-production-swarm/evals/qcsd-production-swarm.yaml +246 -0
- package/assets/skills/qcsd-production-swarm/schemas/output.json +505 -0
- package/assets/skills/qcsd-production-swarm/scripts/validate-config.json +25 -0
- package/assets/skills/qcsd-refinement-swarm/evals/qcsd-refinement-swarm.yaml +139 -0
- package/assets/skills/qcsd-refinement-swarm/schemas/output.json +811 -0
- package/assets/skills/qcsd-refinement-swarm/scripts/validate-config.json +25 -0
- package/assets/skills/security-visual-testing/scripts/validate-config.json +45 -0
- package/assets/skills/sherlock-review/SKILL.md +5 -0
- package/assets/skills/sherlock-review/schemas/output.json +297 -0
- package/assets/skills/sherlock-review/scripts/validate-config.json +35 -0
- package/assets/skills/testability-scoring/SKILL.md +5 -0
- package/assets/skills/testability-scoring/evals/testability-scoring.yaml +814 -0
- package/assets/skills/testability-scoring/schemas/output.json +606 -0
- package/assets/skills/testability-scoring/scripts/validate-config.json +42 -0
- package/assets/skills/trust-tier-manifest.json +2404 -0
- package/assets/skills/wms-testing-patterns/evals/wms-testing-patterns.yaml +165 -0
- package/assets/skills/wms-testing-patterns/schemas/output.json +150 -0
- package/assets/skills/wms-testing-patterns/scripts/validate-config.json +51 -0
- package/dist/benchmarks/performance-benchmarks.js +1 -1
- package/dist/cli/bundle.js +10154 -2421
- package/dist/cli/commands/hooks.d.ts.map +1 -1
- package/dist/cli/commands/hooks.js +92 -0
- package/dist/cli/commands/hooks.js.map +1 -1
- package/dist/cli/commands/migrate.js +2 -2
- package/dist/coordination/complexity-composition/index.d.ts +2 -0
- package/dist/coordination/complexity-composition/index.d.ts.map +1 -0
- package/dist/coordination/complexity-composition/index.js +2 -0
- package/dist/coordination/complexity-composition/index.js.map +1 -0
- package/dist/coordination/complexity-composition/team-composer.d.ts +72 -0
- package/dist/coordination/complexity-composition/team-composer.d.ts.map +1 -0
- package/dist/coordination/complexity-composition/team-composer.js +221 -0
- package/dist/coordination/complexity-composition/team-composer.js.map +1 -0
- package/dist/coordination/consensus/consensus-engine.d.ts +10 -1
- package/dist/coordination/consensus/consensus-engine.d.ts.map +1 -1
- package/dist/coordination/consensus/consensus-engine.js +31 -1
- package/dist/coordination/consensus/consensus-engine.js.map +1 -1
- package/dist/coordination/consensus/index.d.ts +1 -0
- package/dist/coordination/consensus/index.d.ts.map +1 -1
- package/dist/coordination/consensus/index.js +4 -0
- package/dist/coordination/consensus/index.js.map +1 -1
- package/dist/coordination/consensus/interfaces.d.ts +5 -0
- package/dist/coordination/consensus/interfaces.d.ts.map +1 -1
- package/dist/coordination/consensus/interfaces.js +1 -0
- package/dist/coordination/consensus/interfaces.js.map +1 -1
- package/dist/coordination/consensus/sycophancy-scorer.d.ts +62 -0
- package/dist/coordination/consensus/sycophancy-scorer.d.ts.map +1 -0
- package/dist/coordination/consensus/sycophancy-scorer.js +200 -0
- package/dist/coordination/consensus/sycophancy-scorer.js.map +1 -0
- package/dist/coordination/constants.d.ts +1 -1
- package/dist/coordination/constants.js +1 -1
- package/dist/coordination/fleet-tiers/tier-selector.d.ts +20 -0
- package/dist/coordination/fleet-tiers/tier-selector.d.ts.map +1 -1
- package/dist/coordination/fleet-tiers/tier-selector.js +31 -0
- package/dist/coordination/fleet-tiers/tier-selector.js.map +1 -1
- package/dist/coordination/fleet-tiers/types.d.ts +2 -0
- package/dist/coordination/fleet-tiers/types.d.ts.map +1 -1
- package/dist/coordination/handlers/coverage-handlers.js +1 -1
- package/dist/coordination/handlers/coverage-handlers.js.map +1 -1
- package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +1 -1
- package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts.map +1 -1
- package/dist/domains/code-intelligence/services/semantic-analyzer.js +1 -1
- package/dist/domains/code-intelligence/services/semantic-analyzer.js.map +1 -1
- package/dist/domains/coverage-analysis/coordinator.js +1 -1
- package/dist/domains/coverage-analysis/services/coverage-analyzer.js +1 -1
- package/dist/domains/coverage-analysis/services/coverage-embedder.d.ts +1 -1
- package/dist/domains/coverage-analysis/services/coverage-embedder.js +1 -1
- package/dist/domains/coverage-analysis/services/gap-detector.js +1 -1
- package/dist/domains/coverage-analysis/services/ghost-coverage-analyzer.js +1 -1
- package/dist/domains/coverage-analysis/services/hnsw-index.d.ts +2 -2
- package/dist/domains/coverage-analysis/services/hnsw-index.js +3 -3
- package/dist/domains/coverage-analysis/services/sublinear-analyzer.d.ts +1 -1
- package/dist/domains/coverage-analysis/services/sublinear-analyzer.js +1 -1
- package/dist/domains/test-execution/services/test-prioritizer.js +1 -1
- package/dist/domains/test-generation/blind-review/blind-review-orchestrator.d.ts +65 -0
- package/dist/domains/test-generation/blind-review/blind-review-orchestrator.d.ts.map +1 -0
- package/dist/domains/test-generation/blind-review/blind-review-orchestrator.js +189 -0
- package/dist/domains/test-generation/blind-review/blind-review-orchestrator.js.map +1 -0
- package/dist/domains/test-generation/blind-review/index.d.ts +2 -0
- package/dist/domains/test-generation/blind-review/index.d.ts.map +1 -0
- package/dist/domains/test-generation/blind-review/index.js +2 -0
- package/dist/domains/test-generation/blind-review/index.js.map +1 -0
- package/dist/domains/test-generation/context/rust-context-builder.d.ts +31 -0
- package/dist/domains/test-generation/context/rust-context-builder.d.ts.map +1 -0
- package/dist/domains/test-generation/context/rust-context-builder.js +27 -0
- package/dist/domains/test-generation/context/rust-context-builder.js.map +1 -0
- package/dist/domains/test-generation/coordinator.js +3 -3
- package/dist/domains/test-generation/coordinator.js.map +1 -1
- package/dist/domains/test-generation/detectors/mobile-detector.d.ts +41 -0
- package/dist/domains/test-generation/detectors/mobile-detector.d.ts.map +1 -0
- package/dist/domains/test-generation/detectors/mobile-detector.js +111 -0
- package/dist/domains/test-generation/detectors/mobile-detector.js.map +1 -0
- package/dist/domains/test-generation/detectors/spring-detector.d.ts +22 -0
- package/dist/domains/test-generation/detectors/spring-detector.d.ts.map +1 -0
- package/dist/domains/test-generation/detectors/spring-detector.js +37 -0
- package/dist/domains/test-generation/detectors/spring-detector.js.map +1 -0
- package/dist/domains/test-generation/factories/test-generator-factory.d.ts +2 -1
- package/dist/domains/test-generation/factories/test-generator-factory.d.ts.map +1 -1
- package/dist/domains/test-generation/factories/test-generator-factory.js +33 -13
- package/dist/domains/test-generation/factories/test-generator-factory.js.map +1 -1
- package/dist/domains/test-generation/gates/index.d.ts +2 -0
- package/dist/domains/test-generation/gates/index.d.ts.map +1 -0
- package/dist/domains/test-generation/gates/index.js +2 -0
- package/dist/domains/test-generation/gates/index.js.map +1 -0
- package/dist/domains/test-generation/gates/test-quality-gate.d.ts +85 -0
- package/dist/domains/test-generation/gates/test-quality-gate.d.ts.map +1 -0
- package/dist/domains/test-generation/gates/test-quality-gate.js +320 -0
- package/dist/domains/test-generation/gates/test-quality-gate.js.map +1 -0
- package/dist/domains/test-generation/generators/flutter-test-generator.d.ts +107 -0
- package/dist/domains/test-generation/generators/flutter-test-generator.d.ts.map +1 -0
- package/dist/domains/test-generation/generators/flutter-test-generator.js +590 -0
- package/dist/domains/test-generation/generators/flutter-test-generator.js.map +1 -0
- package/dist/domains/test-generation/generators/go-test-generator.d.ts +139 -0
- package/dist/domains/test-generation/generators/go-test-generator.d.ts.map +1 -0
- package/dist/domains/test-generation/generators/go-test-generator.js +654 -0
- package/dist/domains/test-generation/generators/go-test-generator.js.map +1 -0
- package/dist/domains/test-generation/generators/index.d.ts +8 -0
- package/dist/domains/test-generation/generators/index.d.ts.map +1 -1
- package/dist/domains/test-generation/generators/index.js +8 -0
- package/dist/domains/test-generation/generators/index.js.map +1 -1
- package/dist/domains/test-generation/generators/jest-rn-generator.d.ts +95 -0
- package/dist/domains/test-generation/generators/jest-rn-generator.d.ts.map +1 -0
- package/dist/domains/test-generation/generators/jest-rn-generator.js +591 -0
- package/dist/domains/test-generation/generators/jest-rn-generator.js.map +1 -0
- package/dist/domains/test-generation/generators/junit5-generator.d.ts +107 -0
- package/dist/domains/test-generation/generators/junit5-generator.d.ts.map +1 -0
- package/dist/domains/test-generation/generators/junit5-generator.js +588 -0
- package/dist/domains/test-generation/generators/junit5-generator.js.map +1 -0
- package/dist/domains/test-generation/generators/kotlin-junit-generator.d.ts +109 -0
- package/dist/domains/test-generation/generators/kotlin-junit-generator.d.ts.map +1 -0
- package/dist/domains/test-generation/generators/kotlin-junit-generator.js +588 -0
- package/dist/domains/test-generation/generators/kotlin-junit-generator.js.map +1 -0
- package/dist/domains/test-generation/generators/pytest-generator.d.ts +8 -1
- package/dist/domains/test-generation/generators/pytest-generator.d.ts.map +1 -1
- package/dist/domains/test-generation/generators/pytest-generator.js +57 -0
- package/dist/domains/test-generation/generators/pytest-generator.js.map +1 -1
- package/dist/domains/test-generation/generators/rust-test-generator.d.ts +80 -0
- package/dist/domains/test-generation/generators/rust-test-generator.d.ts.map +1 -0
- package/dist/domains/test-generation/generators/rust-test-generator.js +442 -0
- package/dist/domains/test-generation/generators/rust-test-generator.js.map +1 -0
- package/dist/domains/test-generation/generators/swift-testing-generator.d.ts +97 -0
- package/dist/domains/test-generation/generators/swift-testing-generator.d.ts.map +1 -0
- package/dist/domains/test-generation/generators/swift-testing-generator.js +482 -0
- package/dist/domains/test-generation/generators/swift-testing-generator.js.map +1 -0
- package/dist/domains/test-generation/generators/xunit-generator.d.ts +110 -0
- package/dist/domains/test-generation/generators/xunit-generator.d.ts.map +1 -0
- package/dist/domains/test-generation/generators/xunit-generator.js +611 -0
- package/dist/domains/test-generation/generators/xunit-generator.js.map +1 -0
- package/dist/domains/test-generation/interfaces.d.ts +14 -2
- package/dist/domains/test-generation/interfaces.d.ts.map +1 -1
- package/dist/domains/test-generation/pattern-injection/edge-case-injector.d.ts +68 -0
- package/dist/domains/test-generation/pattern-injection/edge-case-injector.d.ts.map +1 -0
- package/dist/domains/test-generation/pattern-injection/edge-case-injector.js +225 -0
- package/dist/domains/test-generation/pattern-injection/edge-case-injector.js.map +1 -0
- package/dist/domains/test-generation/pattern-injection/index.d.ts +2 -0
- package/dist/domains/test-generation/pattern-injection/index.d.ts.map +1 -0
- package/dist/domains/test-generation/pattern-injection/index.js +2 -0
- package/dist/domains/test-generation/pattern-injection/index.js.map +1 -0
- package/dist/domains/test-generation/prompts/language-prompts.d.ts +29 -0
- package/dist/domains/test-generation/prompts/language-prompts.d.ts.map +1 -0
- package/dist/domains/test-generation/prompts/language-prompts.js +135 -0
- package/dist/domains/test-generation/prompts/language-prompts.js.map +1 -0
- package/dist/domains/test-generation/services/compilation-validator.d.ts +43 -0
- package/dist/domains/test-generation/services/compilation-validator.d.ts.map +1 -0
- package/dist/domains/test-generation/services/compilation-validator.js +134 -0
- package/dist/domains/test-generation/services/compilation-validator.js.map +1 -0
- package/dist/domains/test-generation/services/index.d.ts +2 -1
- package/dist/domains/test-generation/services/index.d.ts.map +1 -1
- package/dist/domains/test-generation/services/index.js +3 -1
- package/dist/domains/test-generation/services/index.js.map +1 -1
- package/dist/domains/test-generation/services/test-file-resolver.d.ts +32 -0
- package/dist/domains/test-generation/services/test-file-resolver.d.ts.map +1 -0
- package/dist/domains/test-generation/services/test-file-resolver.js +159 -0
- package/dist/domains/test-generation/services/test-file-resolver.js.map +1 -0
- package/dist/domains/test-generation/services/test-generator.d.ts +16 -0
- package/dist/domains/test-generation/services/test-generator.d.ts.map +1 -1
- package/dist/domains/test-generation/services/test-generator.js +116 -10
- package/dist/domains/test-generation/services/test-generator.js.map +1 -1
- package/dist/governance/feature-flags.js +2 -2
- package/dist/governance/feature-flags.js.map +1 -1
- package/dist/governance/shard-embeddings.js +1 -1
- package/dist/init/init-wizard-hooks.d.ts.map +1 -1
- package/dist/init/init-wizard-hooks.js +0 -1
- package/dist/init/init-wizard-hooks.js.map +1 -1
- package/dist/init/phases/07-hooks.d.ts.map +1 -1
- package/dist/init/phases/07-hooks.js +0 -2
- package/dist/init/phases/07-hooks.js.map +1 -1
- package/dist/init/phases/08-mcp.d.ts +8 -4
- package/dist/init/phases/08-mcp.d.ts.map +1 -1
- package/dist/init/phases/08-mcp.js +13 -31
- package/dist/init/phases/08-mcp.js.map +1 -1
- package/dist/init/phases/10-workers.js +2 -2
- package/dist/init/phases/10-workers.js.map +1 -1
- package/dist/init/settings-merge.d.ts.map +1 -1
- package/dist/init/settings-merge.js +0 -2
- package/dist/init/settings-merge.js.map +1 -1
- package/dist/init/token-bootstrap.js +1 -1
- package/dist/init/token-bootstrap.js.map +1 -1
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +8 -2
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts.map +1 -1
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +62 -38
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js.map +1 -1
- package/dist/integrations/rl-suite/algorithms/decision-transformer.js +1 -1
- package/dist/kernel/constants.d.ts +2 -2
- package/dist/kernel/constants.js +2 -2
- package/dist/kernel/hnsw-adapter.js +1 -1
- package/dist/kernel/progressive-hnsw-backend.d.ts +2 -2
- package/dist/kernel/progressive-hnsw-backend.js +2 -2
- package/dist/learning/dream/concept-graph.d.ts +1 -1
- package/dist/learning/dream/concept-graph.js +1 -1
- package/dist/learning/dream/dream-engine.d.ts +1 -1
- package/dist/learning/dream/dream-engine.js +1 -1
- package/dist/learning/dream/index.d.ts +1 -1
- package/dist/learning/dream/index.js +1 -1
- package/dist/learning/dream/types.d.ts +1 -1
- package/dist/learning/dream/types.d.ts.map +1 -1
- package/dist/learning/dream/types.js +1 -1
- package/dist/learning/dream/types.js.map +1 -1
- package/dist/learning/experience-capture.d.ts +12 -2
- package/dist/learning/experience-capture.d.ts.map +1 -1
- package/dist/learning/experience-capture.js +28 -35
- package/dist/learning/experience-capture.js.map +1 -1
- package/dist/learning/experience-consolidation.d.ts +74 -0
- package/dist/learning/experience-consolidation.d.ts.map +1 -0
- package/dist/learning/experience-consolidation.js +403 -0
- package/dist/learning/experience-consolidation.js.map +1 -0
- package/dist/learning/token-tracker.js +1 -1
- package/dist/learning/token-tracker.js.map +1 -1
- package/dist/mcp/bundle.js +9453 -1166
- package/dist/routing/calibration/ema-calibrator.d.ts +93 -0
- package/dist/routing/calibration/ema-calibrator.d.ts.map +1 -0
- package/dist/routing/calibration/ema-calibrator.js +140 -0
- package/dist/routing/calibration/ema-calibrator.js.map +1 -0
- package/dist/routing/calibration/index.d.ts +2 -0
- package/dist/routing/calibration/index.d.ts.map +1 -0
- package/dist/routing/calibration/index.js +2 -0
- package/dist/routing/calibration/index.js.map +1 -0
- package/dist/routing/escalation/auto-escalation-tracker.d.ts +62 -0
- package/dist/routing/escalation/auto-escalation-tracker.d.ts.map +1 -0
- package/dist/routing/escalation/auto-escalation-tracker.js +116 -0
- package/dist/routing/escalation/auto-escalation-tracker.js.map +1 -0
- package/dist/routing/escalation/index.d.ts +2 -0
- package/dist/routing/escalation/index.d.ts.map +1 -0
- package/dist/routing/escalation/index.js +2 -0
- package/dist/routing/escalation/index.js.map +1 -0
- package/dist/routing/index.d.ts +4 -0
- package/dist/routing/index.d.ts.map +1 -1
- package/dist/routing/index.js +4 -0
- package/dist/routing/index.js.map +1 -1
- package/dist/routing/qe-agent-registry.js +4 -4
- package/dist/routing/qe-agent-registry.js.map +1 -1
- package/dist/routing/routing-config.d.ts +4 -0
- package/dist/routing/routing-config.d.ts.map +1 -1
- package/dist/routing/routing-config.js +2 -0
- package/dist/routing/routing-config.js.map +1 -1
- package/dist/routing/routing-feedback.d.ts +35 -2
- package/dist/routing/routing-feedback.d.ts.map +1 -1
- package/dist/routing/routing-feedback.js +97 -3
- package/dist/routing/routing-feedback.js.map +1 -1
- package/dist/routing/types.d.ts +7 -8
- package/dist/routing/types.d.ts.map +1 -1
- package/dist/routing/types.js.map +1 -1
- package/dist/shared/embeddings/embedding-cache.js +2 -2
- package/dist/shared/embeddings/index.d.ts +2 -2
- package/dist/shared/embeddings/index.js +2 -2
- package/dist/shared/embeddings/nomic-embedder.d.ts +4 -4
- package/dist/shared/embeddings/nomic-embedder.js +2 -2
- package/dist/shared/embeddings/ollama-client.d.ts +1 -1
- package/dist/shared/embeddings/ollama-client.js +2 -2
- package/dist/shared/embeddings/ollama-client.js.map +1 -1
- package/dist/shared/embeddings/types.d.ts +2 -2
- package/dist/shared/embeddings/types.js +2 -2
- package/dist/shared/language-detector.d.ts +46 -0
- package/dist/shared/language-detector.d.ts.map +1 -0
- package/dist/shared/language-detector.js +183 -0
- package/dist/shared/language-detector.js.map +1 -0
- package/dist/shared/llm/providers/ollama.js +1 -1
- package/dist/shared/metrics/code-metrics.d.ts.map +1 -1
- package/dist/shared/metrics/code-metrics.js +24 -1
- package/dist/shared/metrics/code-metrics.js.map +1 -1
- package/dist/shared/parsers/index.d.ts +2 -0
- package/dist/shared/parsers/index.d.ts.map +1 -1
- package/dist/shared/parsers/index.js +2 -0
- package/dist/shared/parsers/index.js.map +1 -1
- package/dist/shared/parsers/interfaces.d.ts +81 -0
- package/dist/shared/parsers/interfaces.d.ts.map +1 -0
- package/dist/shared/parsers/interfaces.js +6 -0
- package/dist/shared/parsers/interfaces.js.map +1 -0
- package/dist/shared/parsers/multi-language-parser.d.ts +144 -0
- package/dist/shared/parsers/multi-language-parser.d.ts.map +1 -0
- package/dist/shared/parsers/multi-language-parser.js +1232 -0
- package/dist/shared/parsers/multi-language-parser.js.map +1 -0
- package/dist/shared/parsers/rust-ownership-analyzer.d.ts +45 -0
- package/dist/shared/parsers/rust-ownership-analyzer.d.ts.map +1 -0
- package/dist/shared/parsers/rust-ownership-analyzer.js +52 -0
- package/dist/shared/parsers/rust-ownership-analyzer.js.map +1 -0
- package/dist/shared/parsers/typescript-parser.d.ts +16 -0
- package/dist/shared/parsers/typescript-parser.d.ts.map +1 -1
- package/dist/shared/parsers/typescript-parser.js +85 -0
- package/dist/shared/parsers/typescript-parser.js.map +1 -1
- package/dist/shared/types/test-frameworks.d.ts +25 -0
- package/dist/shared/types/test-frameworks.d.ts.map +1 -0
- package/dist/shared/types/test-frameworks.js +111 -0
- package/dist/shared/types/test-frameworks.js.map +1 -0
- package/dist/workers/workers/learning-consolidation.d.ts.map +1 -1
- package/dist/workers/workers/learning-consolidation.js +32 -0
- package/dist/workers/workers/learning-consolidation.js.map +1 -1
- package/package.json +1 -1
- package/scripts/prepare-assets.sh +8 -2
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Quality Gate - Mock Detector & Mutation Detector
|
|
3
|
+
* Inspired by loki-mode Gates 8 & 9
|
|
4
|
+
*
|
|
5
|
+
* Validates generated test code quality by detecting:
|
|
6
|
+
* 1. No source imports - test never imports from the source file
|
|
7
|
+
* 2. Tautological assertions - expect(true).toBe(true), expect(x).toBe(x)
|
|
8
|
+
* 3. Empty test bodies - it('...', () => {}) with no assertions
|
|
9
|
+
* 4. Mirrored assertions - expected values copy-pasted from source literals
|
|
10
|
+
*
|
|
11
|
+
* All detection is regex-based, no LLM calls.
|
|
12
|
+
*/
|
|
13
|
+
const DEFAULT_CONFIG = {
|
|
14
|
+
checkSourceImports: true,
|
|
15
|
+
checkTautologicalAssertions: true,
|
|
16
|
+
checkEmptyTestBodies: true,
|
|
17
|
+
checkMirroredAssertions: true,
|
|
18
|
+
minPassScore: 60,
|
|
19
|
+
};
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// TestQualityGate
|
|
22
|
+
// ============================================================================
|
|
23
|
+
export class TestQualityGate {
|
|
24
|
+
config;
|
|
25
|
+
constructor(config) {
|
|
26
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Validate generated test code quality.
|
|
30
|
+
*
|
|
31
|
+
* @param testCode - The generated test source code
|
|
32
|
+
* @param sourceFilePath - Path to the source file under test
|
|
33
|
+
* @param sourceCode - Optional source code content for mirrored assertion check
|
|
34
|
+
* @returns Gate result with pass/fail, issues, and score
|
|
35
|
+
*/
|
|
36
|
+
validate(testCode, sourceFilePath, sourceCode) {
|
|
37
|
+
const issues = [];
|
|
38
|
+
if (this.config.checkSourceImports) {
|
|
39
|
+
issues.push(...this.detectMissingSourceImports(testCode, sourceFilePath));
|
|
40
|
+
}
|
|
41
|
+
if (this.config.checkTautologicalAssertions) {
|
|
42
|
+
issues.push(...this.detectTautologicalAssertions(testCode));
|
|
43
|
+
}
|
|
44
|
+
if (this.config.checkEmptyTestBodies) {
|
|
45
|
+
issues.push(...this.detectEmptyTestBodies(testCode));
|
|
46
|
+
}
|
|
47
|
+
if (this.config.checkMirroredAssertions && sourceCode) {
|
|
48
|
+
issues.push(...this.detectMirroredAssertions(testCode, sourceCode));
|
|
49
|
+
}
|
|
50
|
+
const score = this.calculateScore(issues);
|
|
51
|
+
const passed = score >= this.config.minPassScore;
|
|
52
|
+
return { passed, issues, score };
|
|
53
|
+
}
|
|
54
|
+
// ============================================================================
|
|
55
|
+
// Detection Methods
|
|
56
|
+
// ============================================================================
|
|
57
|
+
/**
|
|
58
|
+
* Check whether the test code imports from the source file.
|
|
59
|
+
* If no import/require statement references the source file basename, flag an error.
|
|
60
|
+
*/
|
|
61
|
+
detectMissingSourceImports(testCode, sourceFilePath) {
|
|
62
|
+
// Extract basename without extension for matching
|
|
63
|
+
const parts = sourceFilePath.replace(/\\/g, '/').split('/');
|
|
64
|
+
const fileName = parts[parts.length - 1];
|
|
65
|
+
const baseName = fileName.replace(/\.(ts|js|tsx|jsx|mts|mjs|py)$/, '');
|
|
66
|
+
// Collect all import/require paths from the test code
|
|
67
|
+
const importPaths = [];
|
|
68
|
+
// ES import: import ... from '...'
|
|
69
|
+
const esImportRegex = /(?:import|from)\s+['"]([^'"]+)['"]/g;
|
|
70
|
+
let match;
|
|
71
|
+
while ((match = esImportRegex.exec(testCode)) !== null) {
|
|
72
|
+
importPaths.push(match[1]);
|
|
73
|
+
}
|
|
74
|
+
// CommonJS require: require('...')
|
|
75
|
+
const requireRegex = /require\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
|
|
76
|
+
while ((match = requireRegex.exec(testCode)) !== null) {
|
|
77
|
+
importPaths.push(match[1]);
|
|
78
|
+
}
|
|
79
|
+
// Check if any import path references the source file
|
|
80
|
+
const hasSourceImport = importPaths.some((importPath) => {
|
|
81
|
+
const importBaseName = importPath
|
|
82
|
+
.replace(/\\/g, '/')
|
|
83
|
+
.split('/')
|
|
84
|
+
.pop()
|
|
85
|
+
?.replace(/\.(ts|js|tsx|jsx|mts|mjs)$/, '')
|
|
86
|
+
?.replace(/\.js$/, '');
|
|
87
|
+
return importBaseName === baseName;
|
|
88
|
+
});
|
|
89
|
+
if (!hasSourceImport && importPaths.length >= 0) {
|
|
90
|
+
return [
|
|
91
|
+
{
|
|
92
|
+
type: 'no-source-import',
|
|
93
|
+
severity: 'error',
|
|
94
|
+
description: `Test does not import from source file "${baseName}". Tests that never reference the source under test are likely mock-only or dead code.`,
|
|
95
|
+
suggestion: `Add an import statement that references the source module, e.g.: import { ... } from './${baseName}.js'`,
|
|
96
|
+
},
|
|
97
|
+
];
|
|
98
|
+
}
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Detect tautological assertions where the expected and actual values are identical.
|
|
103
|
+
* Examples: expect(true).toBe(true), expect(x).toBe(x), expect('a').toEqual('a')
|
|
104
|
+
*/
|
|
105
|
+
detectTautologicalAssertions(testCode) {
|
|
106
|
+
const issues = [];
|
|
107
|
+
const lines = testCode.split('\n');
|
|
108
|
+
const matchers = ['toBe', 'toEqual', 'toStrictEqual'];
|
|
109
|
+
const matcherPattern = matchers.join('|');
|
|
110
|
+
// Pattern 1: Literal boolean/null/undefined on both sides
|
|
111
|
+
// expect(true).toBe(true), expect(false).toEqual(false), etc.
|
|
112
|
+
const literalPattern = new RegExp(`expect\\s*\\(\\s*(true|false|null|undefined)\\s*\\)\\s*\\.\\s*(?:${matcherPattern})\\s*\\(\\s*\\1\\s*\\)`);
|
|
113
|
+
// Pattern 2: Same numeric literal on both sides
|
|
114
|
+
// expect(1).toBe(1), expect(42).toEqual(42)
|
|
115
|
+
const numericPattern = new RegExp(`expect\\s*\\(\\s*(\\d+(?:\\.\\d+)?)\\s*\\)\\s*\\.\\s*(?:${matcherPattern})\\s*\\(\\s*\\1\\s*\\)`);
|
|
116
|
+
// Pattern 3: Same string literal on both sides (single or double quotes)
|
|
117
|
+
// expect('hello').toBe('hello'), expect("foo").toEqual("foo")
|
|
118
|
+
const singleQuotePattern = new RegExp(`expect\\s*\\(\\s*'([^']*)'\\s*\\)\\s*\\.\\s*(?:${matcherPattern})\\s*\\(\\s*'\\1'\\s*\\)`);
|
|
119
|
+
const doubleQuotePattern = new RegExp(`expect\\s*\\(\\s*"([^"]*)"\\s*\\)\\s*\\.\\s*(?:${matcherPattern})\\s*\\(\\s*"\\1"\\s*\\)`);
|
|
120
|
+
// Pattern 4: Same identifier on both sides
|
|
121
|
+
// expect(x).toBe(x), expect(result).toEqual(result)
|
|
122
|
+
const identifierPattern = new RegExp(`expect\\s*\\(\\s*([a-zA-Z_$][a-zA-Z0-9_$]*)\\s*\\)\\s*\\.\\s*(?:${matcherPattern})\\s*\\(\\s*\\1\\s*\\)`);
|
|
123
|
+
for (let i = 0; i < lines.length; i++) {
|
|
124
|
+
const line = lines[i];
|
|
125
|
+
const lineNum = i + 1;
|
|
126
|
+
if (literalPattern.test(line)) {
|
|
127
|
+
const literalMatch = line.match(literalPattern);
|
|
128
|
+
issues.push({
|
|
129
|
+
type: 'tautological-assertion',
|
|
130
|
+
severity: 'error',
|
|
131
|
+
line: lineNum,
|
|
132
|
+
description: `Tautological assertion: expect(${literalMatch?.[1]}) always equals itself.`,
|
|
133
|
+
suggestion: 'Replace with a meaningful assertion that tests actual behavior, e.g.: expect(myFunction()).toBe(expectedValue)',
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
else if (numericPattern.test(line)) {
|
|
137
|
+
const numMatch = line.match(numericPattern);
|
|
138
|
+
issues.push({
|
|
139
|
+
type: 'tautological-assertion',
|
|
140
|
+
severity: 'error',
|
|
141
|
+
line: lineNum,
|
|
142
|
+
description: `Tautological assertion: expect(${numMatch?.[1]}) always equals itself.`,
|
|
143
|
+
suggestion: 'Replace with a meaningful assertion that tests actual behavior.',
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
else if (singleQuotePattern.test(line)) {
|
|
147
|
+
const strMatch = line.match(singleQuotePattern);
|
|
148
|
+
issues.push({
|
|
149
|
+
type: 'tautological-assertion',
|
|
150
|
+
severity: 'error',
|
|
151
|
+
line: lineNum,
|
|
152
|
+
description: `Tautological assertion: expect('${strMatch?.[1]}') always equals itself.`,
|
|
153
|
+
suggestion: 'Replace with a meaningful assertion that tests actual behavior.',
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
else if (doubleQuotePattern.test(line)) {
|
|
157
|
+
const strMatch = line.match(doubleQuotePattern);
|
|
158
|
+
issues.push({
|
|
159
|
+
type: 'tautological-assertion',
|
|
160
|
+
severity: 'error',
|
|
161
|
+
line: lineNum,
|
|
162
|
+
description: `Tautological assertion: expect("${strMatch?.[1]}") always equals itself.`,
|
|
163
|
+
suggestion: 'Replace with a meaningful assertion that tests actual behavior.',
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
else if (identifierPattern.test(line)) {
|
|
167
|
+
const idMatch = line.match(identifierPattern);
|
|
168
|
+
// Avoid false positives with common non-tautological patterns
|
|
169
|
+
// like expect(result).toBe(result) where result is a computed value
|
|
170
|
+
// We flag it anyway since same-variable assertions are always suspicious
|
|
171
|
+
issues.push({
|
|
172
|
+
type: 'tautological-assertion',
|
|
173
|
+
severity: 'error',
|
|
174
|
+
line: lineNum,
|
|
175
|
+
description: `Tautological assertion: expect(${idMatch?.[1]}).toBe(${idMatch?.[1]}) compares a value to itself.`,
|
|
176
|
+
suggestion: 'Compute expected value independently from the actual value.',
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return issues;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Detect empty test bodies - test/it blocks with no assertions or meaningful code.
|
|
184
|
+
* Matches: it('...', () => {}), test('...', () => { /* comment * / })
|
|
185
|
+
*/
|
|
186
|
+
detectEmptyTestBodies(testCode) {
|
|
187
|
+
const issues = [];
|
|
188
|
+
const lines = testCode.split('\n');
|
|
189
|
+
// Match it(...) or test(...) blocks with empty or comment-only bodies
|
|
190
|
+
// We look for patterns like:
|
|
191
|
+
// it('desc', () => {})
|
|
192
|
+
// it('desc', () => { })
|
|
193
|
+
// it('desc', () => { /* comment */ })
|
|
194
|
+
// it('desc', function() {})
|
|
195
|
+
// test('desc', () => {})
|
|
196
|
+
//
|
|
197
|
+
// Two-phase approach to avoid ReDoS: first match the block structure,
|
|
198
|
+
// then check if the body contains only whitespace and comments.
|
|
199
|
+
const testBlockRegex = /(?:it|test)\s*\(\s*(?:'[^']*'|"[^"]*"|`[^`]*`)\s*,\s*(?:async\s+)?(?:\(\)\s*=>|function\s*\(\))\s*\{([^}]*)\}\s*\)/;
|
|
200
|
+
const isEmptyOrCommentOnly = (body) => {
|
|
201
|
+
// Strip block comments, then line comments, then check if only whitespace remains
|
|
202
|
+
const stripped = body.replace(/\/\*[^*]*\*\//g, '').replace(/\/\/[^\n]*/g, '');
|
|
203
|
+
return stripped.trim().length === 0;
|
|
204
|
+
};
|
|
205
|
+
for (let i = 0; i < lines.length; i++) {
|
|
206
|
+
// Only check lines that start a test block
|
|
207
|
+
if (!/(?:it|test)\s*\(/.test(lines[i]))
|
|
208
|
+
continue;
|
|
209
|
+
// Build a multi-line window to catch bodies that span 1-3 lines
|
|
210
|
+
const window = lines.slice(i, i + 4).join(' ');
|
|
211
|
+
const match = testBlockRegex.exec(window);
|
|
212
|
+
if (match && isEmptyOrCommentOnly(match[1])) {
|
|
213
|
+
issues.push({
|
|
214
|
+
type: 'empty-test-body',
|
|
215
|
+
severity: 'error',
|
|
216
|
+
line: i + 1,
|
|
217
|
+
description: 'Empty test body: this test has no assertions or meaningful code.',
|
|
218
|
+
suggestion: 'Add assertions that verify the expected behavior of the code under test.',
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return issues;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Detect mirrored assertions - expected values that appear to be copy-pasted
|
|
226
|
+
* from source code literals rather than independently computed.
|
|
227
|
+
*/
|
|
228
|
+
detectMirroredAssertions(testCode, sourceCode) {
|
|
229
|
+
const issues = [];
|
|
230
|
+
// Extract non-trivial literals from source code
|
|
231
|
+
const sourceLiterals = this.extractNonTrivialLiterals(sourceCode);
|
|
232
|
+
if (sourceLiterals.length === 0)
|
|
233
|
+
return issues;
|
|
234
|
+
const lines = testCode.split('\n');
|
|
235
|
+
const matcherPattern = /\.(?:toBe|toEqual|toStrictEqual)\s*\(\s*(.+?)\s*\)/;
|
|
236
|
+
for (let i = 0; i < lines.length; i++) {
|
|
237
|
+
const line = lines[i];
|
|
238
|
+
const assertionMatch = line.match(matcherPattern);
|
|
239
|
+
if (!assertionMatch)
|
|
240
|
+
continue;
|
|
241
|
+
const expectedValue = assertionMatch[1].trim();
|
|
242
|
+
// Check if the expected value matches a source literal
|
|
243
|
+
for (const literal of sourceLiterals) {
|
|
244
|
+
if (this.literalMatches(expectedValue, literal)) {
|
|
245
|
+
issues.push({
|
|
246
|
+
type: 'mirrored-assertion',
|
|
247
|
+
severity: 'warning',
|
|
248
|
+
line: i + 1,
|
|
249
|
+
description: `Assertion expected value "${expectedValue}" mirrors a literal from the source code. This may indicate the test was generated by copying source values rather than computing expected results independently.`,
|
|
250
|
+
suggestion: 'Verify the expected value is derived from requirements, not copied from the implementation.',
|
|
251
|
+
});
|
|
252
|
+
break; // One warning per line is enough
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return issues;
|
|
257
|
+
}
|
|
258
|
+
// ============================================================================
|
|
259
|
+
// Utility Methods
|
|
260
|
+
// ============================================================================
|
|
261
|
+
/**
|
|
262
|
+
* Extract non-trivial string and number literals from source code.
|
|
263
|
+
* Trivial values (true, false, null, undefined, 0, 1, '', "") are excluded.
|
|
264
|
+
*/
|
|
265
|
+
extractNonTrivialLiterals(sourceCode) {
|
|
266
|
+
const literals = new Set();
|
|
267
|
+
const trivialValues = new Set([
|
|
268
|
+
'true', 'false', 'null', 'undefined',
|
|
269
|
+
'0', '1', '-1', '""', "''", '``',
|
|
270
|
+
]);
|
|
271
|
+
// Extract string literals (single and double quoted)
|
|
272
|
+
const stringRegex = /(?:=|return|:)\s*(['"])(.+?)\1/g;
|
|
273
|
+
let match;
|
|
274
|
+
while ((match = stringRegex.exec(sourceCode)) !== null) {
|
|
275
|
+
const value = match[2];
|
|
276
|
+
if (value.length >= 2 && !trivialValues.has(value)) {
|
|
277
|
+
literals.add(`'${value}'`);
|
|
278
|
+
literals.add(`"${value}"`);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// Extract number literals (non-trivial: > 1 or decimals)
|
|
282
|
+
const numberRegex = /(?:=|return|:)\s*(\d+(?:\.\d+)?)\b/g;
|
|
283
|
+
while ((match = numberRegex.exec(sourceCode)) !== null) {
|
|
284
|
+
const value = match[1];
|
|
285
|
+
if (!trivialValues.has(value)) {
|
|
286
|
+
literals.add(value);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
return Array.from(literals);
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Check if an assertion expected value matches a source literal.
|
|
293
|
+
*/
|
|
294
|
+
literalMatches(expectedValue, sourceLiteral) {
|
|
295
|
+
// Direct match
|
|
296
|
+
if (expectedValue === sourceLiteral)
|
|
297
|
+
return true;
|
|
298
|
+
// Strip quotes for comparison
|
|
299
|
+
const stripped = expectedValue.replace(/^['"`]|['"`]$/g, '');
|
|
300
|
+
const sourceStripped = sourceLiteral.replace(/^['"`]|['"`]$/g, '');
|
|
301
|
+
return stripped === sourceStripped && stripped.length >= 2;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Calculate quality score from issues.
|
|
305
|
+
* Start at 100, subtract per issue (error: -20, warning: -5), clamp to 0.
|
|
306
|
+
*/
|
|
307
|
+
calculateScore(issues) {
|
|
308
|
+
let score = 100;
|
|
309
|
+
for (const issue of issues) {
|
|
310
|
+
if (issue.severity === 'error') {
|
|
311
|
+
score -= 20;
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
score -= 5;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return Math.max(0, score);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=test-quality-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-quality-gate.js","sourceRoot":"","sources":["../../../../src/domains/test-generation/gates/test-quality-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Flutter Test Generator
|
|
3
|
+
* Strategy implementation for Flutter/Dart test framework
|
|
4
|
+
*
|
|
5
|
+
* Generates test code using:
|
|
6
|
+
* - flutter_test package (group, test, testWidgets, expect)
|
|
7
|
+
* - mockito package (@GenerateMocks, when/verify/thenReturn)
|
|
8
|
+
* - setUp / tearDown lifecycle hooks
|
|
9
|
+
* - async/await with Future<T> handling
|
|
10
|
+
* - Dart null safety (T? types)
|
|
11
|
+
* - WidgetTester for widget tests
|
|
12
|
+
*
|
|
13
|
+
* @module test-generation/generators
|
|
14
|
+
*/
|
|
15
|
+
import { BaseTestGenerator } from './base-test-generator.js';
|
|
16
|
+
import type { TestFramework, TestType, FunctionInfo, ClassInfo, TestGenerationContext, CodeAnalysis } from '../interfaces.js';
|
|
17
|
+
import type { ParsedFile } from '../../../shared/parsers/interfaces.js';
|
|
18
|
+
/**
|
|
19
|
+
* FlutterTestGenerator - Test generator for Flutter/Dart test framework
|
|
20
|
+
*
|
|
21
|
+
* Produces idiomatic Dart test files using flutter_test and mockito,
|
|
22
|
+
* with support for widget tests, async Future handling, and null safety.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const generator = new FlutterTestGenerator();
|
|
27
|
+
* const testCode = generator.generateTests({
|
|
28
|
+
* moduleName: 'UserService',
|
|
29
|
+
* importPath: 'package:my_app/services/user_service.dart',
|
|
30
|
+
* testType: 'unit',
|
|
31
|
+
* patterns: [],
|
|
32
|
+
* analysis: { functions: [...], classes: [...] }
|
|
33
|
+
* });
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare class FlutterTestGenerator extends BaseTestGenerator {
|
|
37
|
+
readonly framework: TestFramework;
|
|
38
|
+
/**
|
|
39
|
+
* Dart primitive types for type-aware value generation
|
|
40
|
+
*/
|
|
41
|
+
private static readonly DART_TYPE_DEFAULTS;
|
|
42
|
+
/**
|
|
43
|
+
* Generate complete Dart test file from analysis
|
|
44
|
+
*/
|
|
45
|
+
generateTests(context: TestGenerationContext): string;
|
|
46
|
+
/**
|
|
47
|
+
* Generate tests for a standalone function
|
|
48
|
+
*/
|
|
49
|
+
generateFunctionTests(fn: FunctionInfo, _testType: TestType): string;
|
|
50
|
+
/**
|
|
51
|
+
* Generate tests for a class, including dependency injection via Mockito
|
|
52
|
+
*/
|
|
53
|
+
generateClassTests(cls: ClassInfo, testType: TestType): string;
|
|
54
|
+
/**
|
|
55
|
+
* Generate stub tests when no AST analysis is available
|
|
56
|
+
*/
|
|
57
|
+
generateStubTests(context: TestGenerationContext): string;
|
|
58
|
+
/**
|
|
59
|
+
* Generate coverage-focused tests for specific lines
|
|
60
|
+
*/
|
|
61
|
+
generateCoverageTests(moduleName: string, importPath: string, lines: number[]): string;
|
|
62
|
+
/**
|
|
63
|
+
* Convert a ParsedFile (language-agnostic) to ICodeAnalysis for this generator
|
|
64
|
+
*/
|
|
65
|
+
static convertParsedFile(parsed: ParsedFile): CodeAnalysis;
|
|
66
|
+
/**
|
|
67
|
+
* Generate Dart import statements for a test file
|
|
68
|
+
*/
|
|
69
|
+
private generateDartImports;
|
|
70
|
+
/**
|
|
71
|
+
* Collect all types that need @GenerateMocks
|
|
72
|
+
*/
|
|
73
|
+
private collectMockClasses;
|
|
74
|
+
/**
|
|
75
|
+
* Determine if a type looks like a service/repository (should be mocked)
|
|
76
|
+
*/
|
|
77
|
+
private isDartServiceType;
|
|
78
|
+
/**
|
|
79
|
+
* Check if any class in the analysis looks like a Flutter Widget
|
|
80
|
+
*/
|
|
81
|
+
private hasWidgetLikeClasses;
|
|
82
|
+
/**
|
|
83
|
+
* Determine if a class is a Widget (by name convention or methods)
|
|
84
|
+
*/
|
|
85
|
+
private isWidgetClass;
|
|
86
|
+
/**
|
|
87
|
+
* Extract constructor dependencies that should be mocked
|
|
88
|
+
*/
|
|
89
|
+
private extractMockDependencies;
|
|
90
|
+
/**
|
|
91
|
+
* Generate tests for a class method
|
|
92
|
+
*/
|
|
93
|
+
private generateMethodTests;
|
|
94
|
+
/**
|
|
95
|
+
* Generate Dart-idiomatic test cases for a function
|
|
96
|
+
*/
|
|
97
|
+
private generateDartTestCases;
|
|
98
|
+
/**
|
|
99
|
+
* Generate a Dart test value based on parameter name and type
|
|
100
|
+
*/
|
|
101
|
+
private generateDartValue;
|
|
102
|
+
/**
|
|
103
|
+
* Indent a block of code by a given number of spaces
|
|
104
|
+
*/
|
|
105
|
+
private indentBlock;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=flutter-test-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flutter-test-generator.d.ts","sourceRoot":"","sources":["../../../../src/domains/test-generation/generators/flutter-test-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,qBAAqB,EACrB,YAAY,EACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAExE;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,oBAAqB,SAAQ,iBAAiB;IACzD,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAkB;IAEnD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAWxC;IAMF;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM;IAsCrD;;OAEG;IACH,qBAAqB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,GAAG,MAAM;IAmBpE;;OAEG;IACH,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM;IA2D9D;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM;IAiCzD;;OAEG;IACH,qBAAqB,CACnB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EAAE,GACd,MAAM;IA+BT;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY;IA4D1D;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+B3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAa/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwF3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA+F7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgCzB;;OAEG;IACH,OAAO,CAAC,WAAW;CAOpB"}
|