agentic-qe 3.3.0 → 3.3.1
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/README.md +6 -2
- package/package.json +6 -1
- package/v3/CHANGELOG.md +88 -0
- package/v3/dist/cli/bundle.js +18794 -15534
- package/v3/dist/cli/command-registry.d.ts +55 -0
- package/v3/dist/cli/command-registry.d.ts.map +1 -0
- package/v3/dist/cli/command-registry.js +103 -0
- package/v3/dist/cli/command-registry.js.map +1 -0
- package/v3/dist/cli/commands/code.d.ts +9 -0
- package/v3/dist/cli/commands/code.d.ts.map +1 -0
- package/v3/dist/cli/commands/code.js +254 -0
- package/v3/dist/cli/commands/code.js.map +1 -0
- package/v3/dist/cli/commands/completions.d.ts +8 -0
- package/v3/dist/cli/commands/completions.d.ts.map +1 -0
- package/v3/dist/cli/commands/completions.js +99 -0
- package/v3/dist/cli/commands/completions.js.map +1 -0
- package/v3/dist/cli/commands/coverage.d.ts +9 -0
- package/v3/dist/cli/commands/coverage.d.ts.map +1 -0
- package/v3/dist/cli/commands/coverage.js +208 -0
- package/v3/dist/cli/commands/coverage.js.map +1 -0
- package/v3/dist/cli/commands/fleet.d.ts +11 -0
- package/v3/dist/cli/commands/fleet.d.ts.map +1 -0
- package/v3/dist/cli/commands/fleet.js +338 -0
- package/v3/dist/cli/commands/fleet.js.map +1 -0
- package/v3/dist/cli/commands/migrate.d.ts +9 -0
- package/v3/dist/cli/commands/migrate.d.ts.map +1 -0
- package/v3/dist/cli/commands/migrate.js +566 -0
- package/v3/dist/cli/commands/migrate.js.map +1 -0
- package/v3/dist/cli/commands/quality.d.ts +9 -0
- package/v3/dist/cli/commands/quality.d.ts.map +1 -0
- package/v3/dist/cli/commands/quality.js +40 -0
- package/v3/dist/cli/commands/quality.js.map +1 -0
- package/v3/dist/cli/commands/security.d.ts +9 -0
- package/v3/dist/cli/commands/security.d.ts.map +1 -0
- package/v3/dist/cli/commands/security.js +124 -0
- package/v3/dist/cli/commands/security.js.map +1 -0
- package/v3/dist/cli/commands/sync.d.ts +19 -0
- package/v3/dist/cli/commands/sync.d.ts.map +1 -0
- package/v3/dist/cli/commands/sync.js +283 -0
- package/v3/dist/cli/commands/sync.js.map +1 -0
- package/v3/dist/cli/commands/test.d.ts +9 -0
- package/v3/dist/cli/commands/test.d.ts.map +1 -0
- package/v3/dist/cli/commands/test.js +166 -0
- package/v3/dist/cli/commands/test.js.map +1 -0
- package/v3/dist/cli/handlers/agent-handler.d.ts +20 -0
- package/v3/dist/cli/handlers/agent-handler.d.ts.map +1 -0
- package/v3/dist/cli/handlers/agent-handler.js +158 -0
- package/v3/dist/cli/handlers/agent-handler.js.map +1 -0
- package/v3/dist/cli/handlers/domain-handler.d.ts +20 -0
- package/v3/dist/cli/handlers/domain-handler.d.ts.map +1 -0
- package/v3/dist/cli/handlers/domain-handler.js +115 -0
- package/v3/dist/cli/handlers/domain-handler.js.map +1 -0
- package/v3/dist/cli/handlers/index.d.ts +13 -0
- package/v3/dist/cli/handlers/index.d.ts.map +1 -0
- package/v3/dist/cli/handlers/index.js +15 -0
- package/v3/dist/cli/handlers/index.js.map +1 -0
- package/v3/dist/cli/handlers/init-handler.d.ts +38 -0
- package/v3/dist/cli/handlers/init-handler.d.ts.map +1 -0
- package/v3/dist/cli/handlers/init-handler.js +288 -0
- package/v3/dist/cli/handlers/init-handler.js.map +1 -0
- package/v3/dist/cli/handlers/interfaces.d.ts +104 -0
- package/v3/dist/cli/handlers/interfaces.d.ts.map +1 -0
- package/v3/dist/cli/handlers/interfaces.js +109 -0
- package/v3/dist/cli/handlers/interfaces.js.map +1 -0
- package/v3/dist/cli/handlers/protocol-handler.d.ts +19 -0
- package/v3/dist/cli/handlers/protocol-handler.d.ts.map +1 -0
- package/v3/dist/cli/handlers/protocol-handler.js +79 -0
- package/v3/dist/cli/handlers/protocol-handler.js.map +1 -0
- package/v3/dist/cli/handlers/status-handler.d.ts +30 -0
- package/v3/dist/cli/handlers/status-handler.d.ts.map +1 -0
- package/v3/dist/cli/handlers/status-handler.js +218 -0
- package/v3/dist/cli/handlers/status-handler.js.map +1 -0
- package/v3/dist/cli/handlers/task-handler.d.ts +22 -0
- package/v3/dist/cli/handlers/task-handler.d.ts.map +1 -0
- package/v3/dist/cli/handlers/task-handler.js +271 -0
- package/v3/dist/cli/handlers/task-handler.js.map +1 -0
- package/v3/dist/cli/index.d.ts +4 -0
- package/v3/dist/cli/index.d.ts.map +1 -1
- package/v3/dist/cli/index.js +48 -2677
- package/v3/dist/cli/index.js.map +1 -1
- package/v3/dist/cli/wizards/core/index.d.ts +11 -0
- package/v3/dist/cli/wizards/core/index.d.ts.map +1 -0
- package/v3/dist/cli/wizards/core/index.js +15 -0
- package/v3/dist/cli/wizards/core/index.js.map +1 -0
- package/v3/dist/cli/wizards/core/wizard-base.d.ts +87 -0
- package/v3/dist/cli/wizards/core/wizard-base.d.ts.map +1 -0
- package/v3/dist/cli/wizards/core/wizard-base.js +120 -0
- package/v3/dist/cli/wizards/core/wizard-base.js.map +1 -0
- package/v3/dist/cli/wizards/core/wizard-command.d.ts +182 -0
- package/v3/dist/cli/wizards/core/wizard-command.d.ts.map +1 -0
- package/v3/dist/cli/wizards/core/wizard-command.js +45 -0
- package/v3/dist/cli/wizards/core/wizard-command.js.map +1 -0
- package/v3/dist/cli/wizards/core/wizard-step.d.ts +109 -0
- package/v3/dist/cli/wizards/core/wizard-step.d.ts.map +1 -0
- package/v3/dist/cli/wizards/core/wizard-step.js +384 -0
- package/v3/dist/cli/wizards/core/wizard-step.js.map +1 -0
- package/v3/dist/cli/wizards/core/wizard-utils.d.ts +117 -0
- package/v3/dist/cli/wizards/core/wizard-utils.d.ts.map +1 -0
- package/v3/dist/cli/wizards/core/wizard-utils.js +291 -0
- package/v3/dist/cli/wizards/core/wizard-utils.js.map +1 -0
- package/v3/dist/cli/wizards/coverage-wizard.d.ts +13 -68
- package/v3/dist/cli/wizards/coverage-wizard.d.ts.map +1 -1
- package/v3/dist/cli/wizards/coverage-wizard.js +127 -391
- package/v3/dist/cli/wizards/coverage-wizard.js.map +1 -1
- package/v3/dist/cli/wizards/fleet-wizard.d.ts +13 -64
- package/v3/dist/cli/wizards/fleet-wizard.d.ts.map +1 -1
- package/v3/dist/cli/wizards/fleet-wizard.js +150 -363
- package/v3/dist/cli/wizards/fleet-wizard.js.map +1 -1
- package/v3/dist/cli/wizards/index.d.ts +2 -0
- package/v3/dist/cli/wizards/index.d.ts.map +1 -1
- package/v3/dist/cli/wizards/index.js +3 -0
- package/v3/dist/cli/wizards/index.js.map +1 -1
- package/v3/dist/cli/wizards/security-wizard.d.ts +13 -64
- package/v3/dist/cli/wizards/security-wizard.d.ts.map +1 -1
- package/v3/dist/cli/wizards/security-wizard.js +152 -395
- package/v3/dist/cli/wizards/security-wizard.js.map +1 -1
- package/v3/dist/cli/wizards/test-wizard.d.ts +13 -77
- package/v3/dist/cli/wizards/test-wizard.d.ts.map +1 -1
- package/v3/dist/cli/wizards/test-wizard.js +196 -328
- package/v3/dist/cli/wizards/test-wizard.js.map +1 -1
- package/v3/dist/coordination/mincut/mincut-health-monitor.d.ts +3 -0
- package/v3/dist/coordination/mincut/mincut-health-monitor.d.ts.map +1 -1
- package/v3/dist/coordination/mincut/mincut-health-monitor.js +6 -2
- package/v3/dist/coordination/mincut/mincut-health-monitor.js.map +1 -1
- package/v3/dist/coordination/mincut/queen-integration.d.ts +3 -0
- package/v3/dist/coordination/mincut/queen-integration.d.ts.map +1 -1
- package/v3/dist/coordination/mincut/queen-integration.js +6 -1
- package/v3/dist/coordination/mincut/queen-integration.js.map +1 -1
- package/v3/dist/coordination/task-executor.js +2 -2
- package/v3/dist/coordination/task-executor.js.map +1 -1
- package/v3/dist/domains/chaos-resilience/plugin.js +2 -2
- package/v3/dist/domains/chaos-resilience/plugin.js.map +1 -1
- package/v3/dist/domains/code-intelligence/plugin.js +2 -2
- package/v3/dist/domains/code-intelligence/plugin.js.map +1 -1
- package/v3/dist/domains/contract-testing/plugin.js +2 -2
- package/v3/dist/domains/contract-testing/plugin.js.map +1 -1
- package/v3/dist/domains/coverage-analysis/plugin.d.ts.map +1 -1
- package/v3/dist/domains/coverage-analysis/plugin.js +2 -1
- package/v3/dist/domains/coverage-analysis/plugin.js.map +1 -1
- package/v3/dist/domains/defect-intelligence/plugin.js +2 -2
- package/v3/dist/domains/defect-intelligence/plugin.js.map +1 -1
- package/v3/dist/domains/domain-interface.d.ts.map +1 -1
- package/v3/dist/domains/domain-interface.js +3 -1
- package/v3/dist/domains/domain-interface.js.map +1 -1
- package/v3/dist/domains/learning-optimization/plugin.js +2 -2
- package/v3/dist/domains/learning-optimization/plugin.js.map +1 -1
- package/v3/dist/domains/quality-assessment/plugin.js +2 -2
- package/v3/dist/domains/quality-assessment/plugin.js.map +1 -1
- package/v3/dist/domains/requirements-validation/plugin.js +2 -2
- package/v3/dist/domains/requirements-validation/plugin.js.map +1 -1
- package/v3/dist/domains/security-compliance/plugin.js +2 -2
- package/v3/dist/domains/security-compliance/plugin.js.map +1 -1
- package/v3/dist/domains/test-execution/index.d.ts +2 -1
- package/v3/dist/domains/test-execution/index.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/index.js +0 -2
- package/v3/dist/domains/test-execution/index.js.map +1 -1
- package/v3/dist/domains/test-execution/interfaces.d.ts +222 -25
- package/v3/dist/domains/test-execution/interfaces.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/interfaces.js +130 -3
- package/v3/dist/domains/test-execution/interfaces.js.map +1 -1
- package/v3/dist/domains/test-execution/plugin.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/plugin.js +2 -1
- package/v3/dist/domains/test-execution/plugin.js.map +1 -1
- package/v3/dist/domains/test-execution/test-prioritization-types.d.ts +5 -172
- package/v3/dist/domains/test-execution/test-prioritization-types.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/test-prioritization-types.js +6 -129
- package/v3/dist/domains/test-execution/test-prioritization-types.js.map +1 -1
- package/v3/dist/domains/test-execution/types/index.d.ts +7 -3
- package/v3/dist/domains/test-execution/types/index.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/types/index.js +7 -17
- package/v3/dist/domains/test-execution/types/index.js.map +1 -1
- package/v3/dist/domains/test-generation/coordinator.d.ts +1 -1
- package/v3/dist/domains/test-generation/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/test-generation/coordinator.js +3 -3
- package/v3/dist/domains/test-generation/coordinator.js.map +1 -1
- package/v3/dist/domains/test-generation/factories/index.d.ts +8 -0
- package/v3/dist/domains/test-generation/factories/index.d.ts.map +1 -0
- package/v3/dist/domains/test-generation/factories/index.js +8 -0
- package/v3/dist/domains/test-generation/factories/index.js.map +1 -0
- package/v3/dist/domains/test-generation/factories/test-generator-factory.d.ts +108 -0
- package/v3/dist/domains/test-generation/factories/test-generator-factory.d.ts.map +1 -0
- package/v3/dist/domains/test-generation/factories/test-generator-factory.js +158 -0
- package/v3/dist/domains/test-generation/factories/test-generator-factory.js.map +1 -0
- package/v3/dist/domains/test-generation/generators/base-test-generator.d.ts +79 -0
- package/v3/dist/domains/test-generation/generators/base-test-generator.d.ts.map +1 -0
- package/v3/dist/domains/test-generation/generators/base-test-generator.js +252 -0
- package/v3/dist/domains/test-generation/generators/base-test-generator.js.map +1 -0
- package/v3/dist/domains/test-generation/generators/index.d.ts +11 -0
- package/v3/dist/domains/test-generation/generators/index.d.ts.map +1 -0
- package/v3/dist/domains/test-generation/generators/index.js +13 -0
- package/v3/dist/domains/test-generation/generators/index.js.map +1 -0
- package/v3/dist/domains/test-generation/generators/jest-vitest-generator.d.ts +77 -0
- package/v3/dist/domains/test-generation/generators/jest-vitest-generator.d.ts.map +1 -0
- package/v3/dist/domains/test-generation/generators/jest-vitest-generator.js +365 -0
- package/v3/dist/domains/test-generation/generators/jest-vitest-generator.js.map +1 -0
- package/v3/dist/domains/test-generation/generators/mocha-generator.d.ts +56 -0
- package/v3/dist/domains/test-generation/generators/mocha-generator.d.ts.map +1 -0
- package/v3/dist/domains/test-generation/generators/mocha-generator.js +197 -0
- package/v3/dist/domains/test-generation/generators/mocha-generator.js.map +1 -0
- package/v3/dist/domains/test-generation/generators/pytest-generator.d.ts +66 -0
- package/v3/dist/domains/test-generation/generators/pytest-generator.d.ts.map +1 -0
- package/v3/dist/domains/test-generation/generators/pytest-generator.js +240 -0
- package/v3/dist/domains/test-generation/generators/pytest-generator.js.map +1 -0
- package/v3/dist/domains/test-generation/index.d.ts +2 -2
- package/v3/dist/domains/test-generation/index.d.ts.map +1 -1
- package/v3/dist/domains/test-generation/index.js +3 -3
- package/v3/dist/domains/test-generation/index.js.map +1 -1
- package/v3/dist/domains/test-generation/interfaces/index.d.ts +9 -0
- package/v3/dist/domains/test-generation/interfaces/index.d.ts.map +1 -0
- package/v3/dist/domains/test-generation/interfaces/index.js +9 -0
- package/v3/dist/domains/test-generation/interfaces/index.js.map +1 -0
- package/v3/dist/domains/test-generation/interfaces/test-generator.interface.d.ts +166 -0
- package/v3/dist/domains/test-generation/interfaces/test-generator.interface.d.ts.map +1 -0
- package/v3/dist/domains/test-generation/interfaces/test-generator.interface.js +8 -0
- package/v3/dist/domains/test-generation/interfaces/test-generator.interface.js.map +1 -0
- package/v3/dist/domains/test-generation/interfaces.d.ts +163 -24
- package/v3/dist/domains/test-generation/interfaces.d.ts.map +1 -1
- package/v3/dist/domains/test-generation/interfaces.js +2 -2
- package/v3/dist/domains/test-generation/plugin.d.ts.map +1 -1
- package/v3/dist/domains/test-generation/plugin.js +6 -5
- package/v3/dist/domains/test-generation/plugin.js.map +1 -1
- package/v3/dist/domains/test-generation/{coherence-gate.d.ts → services/coherence-gate-service.d.ts} +4 -4
- package/v3/dist/domains/test-generation/services/coherence-gate-service.d.ts.map +1 -0
- package/v3/dist/domains/test-generation/{coherence-gate.js → services/coherence-gate-service.js} +2 -2
- package/v3/dist/domains/test-generation/services/coherence-gate-service.js.map +1 -0
- package/v3/dist/domains/test-generation/services/index.d.ts +8 -2
- package/v3/dist/domains/test-generation/services/index.d.ts.map +1 -1
- package/v3/dist/domains/test-generation/services/index.js +10 -3
- package/v3/dist/domains/test-generation/services/index.js.map +1 -1
- package/v3/dist/domains/test-generation/services/property-test-generator.d.ts +34 -0
- package/v3/dist/domains/test-generation/services/property-test-generator.d.ts.map +1 -0
- package/v3/dist/domains/test-generation/services/property-test-generator.js +306 -0
- package/v3/dist/domains/test-generation/services/property-test-generator.js.map +1 -0
- package/v3/dist/domains/test-generation/services/tdd-generator.d.ts +33 -0
- package/v3/dist/domains/test-generation/services/tdd-generator.d.ts.map +1 -0
- package/v3/dist/domains/test-generation/services/tdd-generator.js +342 -0
- package/v3/dist/domains/test-generation/services/tdd-generator.js.map +1 -0
- package/v3/dist/domains/test-generation/services/test-data-generator.d.ts +34 -0
- package/v3/dist/domains/test-generation/services/test-data-generator.d.ts.map +1 -0
- package/v3/dist/domains/test-generation/services/test-data-generator.js +245 -0
- package/v3/dist/domains/test-generation/services/test-data-generator.js.map +1 -0
- package/v3/dist/domains/test-generation/services/test-generator.d.ts +51 -160
- package/v3/dist/domains/test-generation/services/test-generator.d.ts.map +1 -1
- package/v3/dist/domains/test-generation/services/test-generator.js +101 -1858
- package/v3/dist/domains/test-generation/services/test-generator.js.map +1 -1
- package/v3/dist/domains/visual-accessibility/plugin.js +2 -2
- package/v3/dist/domains/visual-accessibility/plugin.js.map +1 -1
- package/v3/dist/init/phases/12-verification.d.ts +23 -0
- package/v3/dist/init/phases/12-verification.d.ts.map +1 -1
- package/v3/dist/init/phases/12-verification.js +185 -2
- package/v3/dist/init/phases/12-verification.js.map +1 -1
- package/v3/dist/integrations/agentic-flow/model-router/complexity-analyzer.d.ts +24 -62
- package/v3/dist/integrations/agentic-flow/model-router/complexity-analyzer.d.ts.map +1 -1
- package/v3/dist/integrations/agentic-flow/model-router/complexity-analyzer.js +45 -497
- package/v3/dist/integrations/agentic-flow/model-router/complexity-analyzer.js.map +1 -1
- package/v3/dist/integrations/agentic-flow/model-router/router.js +2 -2
- package/v3/dist/integrations/agentic-flow/model-router/router.js.map +1 -1
- package/v3/dist/integrations/agentic-flow/model-router/score-calculator.d.ts +98 -0
- package/v3/dist/integrations/agentic-flow/model-router/score-calculator.d.ts.map +1 -0
- package/v3/dist/integrations/agentic-flow/model-router/score-calculator.js +197 -0
- package/v3/dist/integrations/agentic-flow/model-router/score-calculator.js.map +1 -0
- package/v3/dist/integrations/agentic-flow/model-router/signal-collector.d.ts +102 -0
- package/v3/dist/integrations/agentic-flow/model-router/signal-collector.d.ts.map +1 -0
- package/v3/dist/integrations/agentic-flow/model-router/signal-collector.js +372 -0
- package/v3/dist/integrations/agentic-flow/model-router/signal-collector.js.map +1 -0
- package/v3/dist/integrations/agentic-flow/model-router/tier-recommender.d.ts +64 -0
- package/v3/dist/integrations/agentic-flow/model-router/tier-recommender.d.ts.map +1 -0
- package/v3/dist/integrations/agentic-flow/model-router/tier-recommender.js +120 -0
- package/v3/dist/integrations/agentic-flow/model-router/tier-recommender.js.map +1 -0
- package/v3/dist/integrations/coherence/coherence-service.d.ts.map +1 -1
- package/v3/dist/integrations/coherence/coherence-service.js +87 -30
- package/v3/dist/integrations/coherence/coherence-service.js.map +1 -1
- package/v3/dist/integrations/coherence/engines/spectral-adapter.d.ts.map +1 -1
- package/v3/dist/integrations/coherence/engines/spectral-adapter.js +124 -35
- package/v3/dist/integrations/coherence/engines/spectral-adapter.js.map +1 -1
- package/v3/dist/learning/memory-auditor.d.ts.map +1 -1
- package/v3/dist/learning/memory-auditor.js +3 -1
- package/v3/dist/learning/memory-auditor.js.map +1 -1
- package/v3/dist/mcp/bundle.js +2475 -1463
- package/v3/dist/mcp/security/cve-prevention.d.ts +31 -134
- package/v3/dist/mcp/security/cve-prevention.d.ts.map +1 -1
- package/v3/dist/mcp/security/cve-prevention.js +37 -562
- package/v3/dist/mcp/security/cve-prevention.js.map +1 -1
- package/v3/dist/mcp/security/index.d.ts +5 -1
- package/v3/dist/mcp/security/index.d.ts.map +1 -1
- package/v3/dist/mcp/security/validators/command-validator.d.ts +41 -0
- package/v3/dist/mcp/security/validators/command-validator.d.ts.map +1 -0
- package/v3/dist/mcp/security/validators/command-validator.js +123 -0
- package/v3/dist/mcp/security/validators/command-validator.js.map +1 -0
- package/v3/dist/mcp/security/validators/crypto-validator.d.ts +40 -0
- package/v3/dist/mcp/security/validators/crypto-validator.d.ts.map +1 -0
- package/v3/dist/mcp/security/validators/crypto-validator.js +72 -0
- package/v3/dist/mcp/security/validators/crypto-validator.js.map +1 -0
- package/v3/dist/mcp/security/validators/index.d.ts +12 -0
- package/v3/dist/mcp/security/validators/index.d.ts.map +1 -0
- package/v3/dist/mcp/security/validators/index.js +22 -0
- package/v3/dist/mcp/security/validators/index.js.map +1 -0
- package/v3/dist/mcp/security/validators/input-sanitizer.d.ts +56 -0
- package/v3/dist/mcp/security/validators/input-sanitizer.d.ts.map +1 -0
- package/v3/dist/mcp/security/validators/input-sanitizer.js +157 -0
- package/v3/dist/mcp/security/validators/input-sanitizer.js.map +1 -0
- package/v3/dist/mcp/security/validators/interfaces.d.ts +164 -0
- package/v3/dist/mcp/security/validators/interfaces.d.ts.map +1 -0
- package/v3/dist/mcp/security/validators/interfaces.js +6 -0
- package/v3/dist/mcp/security/validators/interfaces.js.map +1 -0
- package/v3/dist/mcp/security/validators/path-traversal-validator.d.ts +50 -0
- package/v3/dist/mcp/security/validators/path-traversal-validator.d.ts.map +1 -0
- package/v3/dist/mcp/security/validators/path-traversal-validator.js +242 -0
- package/v3/dist/mcp/security/validators/path-traversal-validator.js.map +1 -0
- package/v3/dist/mcp/security/validators/regex-safety-validator.d.ts +50 -0
- package/v3/dist/mcp/security/validators/regex-safety-validator.d.ts.map +1 -0
- package/v3/dist/mcp/security/validators/regex-safety-validator.js +183 -0
- package/v3/dist/mcp/security/validators/regex-safety-validator.js.map +1 -0
- package/v3/dist/mcp/security/validators/validation-orchestrator.d.ts +66 -0
- package/v3/dist/mcp/security/validators/validation-orchestrator.d.ts.map +1 -0
- package/v3/dist/mcp/security/validators/validation-orchestrator.js +146 -0
- package/v3/dist/mcp/security/validators/validation-orchestrator.js.map +1 -0
- package/v3/dist/mcp/server.d.ts.map +1 -1
- package/v3/dist/mcp/server.js +1 -0
- package/v3/dist/mcp/server.js.map +1 -1
- package/v3/dist/mcp/tool-registry.d.ts +3 -1
- package/v3/dist/mcp/tool-registry.d.ts.map +1 -1
- package/v3/dist/mcp/tool-registry.js +155 -2
- package/v3/dist/mcp/tool-registry.js.map +1 -1
- package/v3/dist/mcp/tools/test-generation/generate.d.ts +1 -0
- package/v3/dist/mcp/tools/test-generation/generate.d.ts.map +1 -1
- package/v3/dist/mcp/tools/test-generation/generate.js +3 -2
- package/v3/dist/mcp/tools/test-generation/generate.js.map +1 -1
- package/v3/dist/sync/cloud/index.d.ts +8 -0
- package/v3/dist/sync/cloud/index.d.ts.map +1 -0
- package/v3/dist/sync/cloud/index.js +8 -0
- package/v3/dist/sync/cloud/index.js.map +1 -0
- package/v3/dist/sync/cloud/postgres-writer.d.ts +88 -0
- package/v3/dist/sync/cloud/postgres-writer.d.ts.map +1 -0
- package/v3/dist/sync/cloud/postgres-writer.js +319 -0
- package/v3/dist/sync/cloud/postgres-writer.js.map +1 -0
- package/v3/dist/sync/cloud/tunnel-manager.d.ts +75 -0
- package/v3/dist/sync/cloud/tunnel-manager.d.ts.map +1 -0
- package/v3/dist/sync/cloud/tunnel-manager.js +221 -0
- package/v3/dist/sync/cloud/tunnel-manager.js.map +1 -0
- package/v3/dist/sync/index.d.ts +35 -0
- package/v3/dist/sync/index.d.ts.map +1 -0
- package/v3/dist/sync/index.js +35 -0
- package/v3/dist/sync/index.js.map +1 -0
- package/v3/dist/sync/interfaces.d.ts +245 -0
- package/v3/dist/sync/interfaces.d.ts.map +1 -0
- package/v3/dist/sync/interfaces.js +160 -0
- package/v3/dist/sync/interfaces.js.map +1 -0
- package/v3/dist/sync/readers/index.d.ts +8 -0
- package/v3/dist/sync/readers/index.d.ts.map +1 -0
- package/v3/dist/sync/readers/index.js +8 -0
- package/v3/dist/sync/readers/index.js.map +1 -0
- package/v3/dist/sync/readers/json-reader.d.ts +95 -0
- package/v3/dist/sync/readers/json-reader.d.ts.map +1 -0
- package/v3/dist/sync/readers/json-reader.js +306 -0
- package/v3/dist/sync/readers/json-reader.js.map +1 -0
- package/v3/dist/sync/readers/sqlite-reader.d.ts +88 -0
- package/v3/dist/sync/readers/sqlite-reader.d.ts.map +1 -0
- package/v3/dist/sync/readers/sqlite-reader.js +255 -0
- package/v3/dist/sync/readers/sqlite-reader.js.map +1 -0
- package/v3/dist/sync/sync-agent.d.ts +116 -0
- package/v3/dist/sync/sync-agent.d.ts.map +1 -0
- package/v3/dist/sync/sync-agent.js +416 -0
- package/v3/dist/sync/sync-agent.js.map +1 -0
- package/v3/package.json +13 -2
- package/v3/dist/domains/test-generation/coherence-gate.d.ts.map +0 -1
- package/v3/dist/domains/test-generation/coherence-gate.js.map +0 -1
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - MCP Security: Validation Strategy Interfaces
|
|
3
|
+
* Defines the Strategy Pattern interfaces for security validators
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Risk level classification for security validation
|
|
7
|
+
*/
|
|
8
|
+
export type RiskLevel = 'none' | 'low' | 'medium' | 'high' | 'critical';
|
|
9
|
+
/**
|
|
10
|
+
* Base validation result returned by all validators
|
|
11
|
+
*/
|
|
12
|
+
export interface ValidationResult {
|
|
13
|
+
valid: boolean;
|
|
14
|
+
error?: string;
|
|
15
|
+
riskLevel: RiskLevel;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Path validation result with normalized path
|
|
19
|
+
*/
|
|
20
|
+
export interface PathValidationResult extends ValidationResult {
|
|
21
|
+
normalizedPath?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Regex safety result with pattern analysis
|
|
25
|
+
*/
|
|
26
|
+
export interface RegexSafetyResult {
|
|
27
|
+
safe: boolean;
|
|
28
|
+
pattern?: string;
|
|
29
|
+
escapedPattern?: string;
|
|
30
|
+
error?: string;
|
|
31
|
+
riskyPatterns: string[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Command validation result with sanitized command
|
|
35
|
+
*/
|
|
36
|
+
export interface CommandValidationResult extends ValidationResult {
|
|
37
|
+
sanitizedCommand?: string;
|
|
38
|
+
blockedPatterns: string[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Input sanitization options
|
|
42
|
+
*/
|
|
43
|
+
export interface SanitizationOptions {
|
|
44
|
+
maxLength?: number;
|
|
45
|
+
allowedChars?: RegExp;
|
|
46
|
+
stripHtml?: boolean;
|
|
47
|
+
stripSql?: boolean;
|
|
48
|
+
escapeShell?: boolean;
|
|
49
|
+
trim?: boolean;
|
|
50
|
+
/** Strip dangerous control characters (null bytes, escape sequences, etc.) - default: true */
|
|
51
|
+
stripControlChars?: boolean;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Path validation options
|
|
55
|
+
*/
|
|
56
|
+
export interface PathValidationOptions {
|
|
57
|
+
basePath?: string;
|
|
58
|
+
allowAbsolute?: boolean;
|
|
59
|
+
allowedExtensions?: string[];
|
|
60
|
+
deniedExtensions?: string[];
|
|
61
|
+
maxDepth?: number;
|
|
62
|
+
maxLength?: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Regex validation options
|
|
66
|
+
*/
|
|
67
|
+
export interface RegexValidationOptions {
|
|
68
|
+
maxLength?: number;
|
|
69
|
+
maxComplexity?: number;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Command validation options
|
|
73
|
+
*/
|
|
74
|
+
export interface CommandValidationOptions {
|
|
75
|
+
allowedCommands?: string[];
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Base interface for all validation strategies
|
|
79
|
+
* Implements the Strategy Pattern for modular security validation
|
|
80
|
+
*/
|
|
81
|
+
export interface IValidationStrategy<TInput = unknown, TOptions = unknown, TResult extends ValidationResult = ValidationResult> {
|
|
82
|
+
/**
|
|
83
|
+
* Unique name identifier for this validator
|
|
84
|
+
*/
|
|
85
|
+
readonly name: string;
|
|
86
|
+
/**
|
|
87
|
+
* Validate the input according to this strategy
|
|
88
|
+
* @param input - The input to validate
|
|
89
|
+
* @param options - Optional validation options
|
|
90
|
+
* @returns The validation result
|
|
91
|
+
*/
|
|
92
|
+
validate(input: TInput, options?: TOptions): TResult;
|
|
93
|
+
/**
|
|
94
|
+
* Get the risk level this validator typically addresses
|
|
95
|
+
* @returns The primary risk level category
|
|
96
|
+
*/
|
|
97
|
+
getRiskLevel(): RiskLevel;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Path traversal validation strategy interface
|
|
101
|
+
*/
|
|
102
|
+
export interface IPathValidationStrategy extends IValidationStrategy<string, PathValidationOptions, PathValidationResult> {
|
|
103
|
+
normalizePath(path: string): string;
|
|
104
|
+
joinPaths(...paths: string[]): string;
|
|
105
|
+
joinPathsAbsolute(...paths: string[]): string;
|
|
106
|
+
getExtension(path: string): string | null;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Regex safety validation strategy interface
|
|
110
|
+
*/
|
|
111
|
+
export interface IRegexValidationStrategy extends IValidationStrategy<string, RegexValidationOptions, ValidationResult> {
|
|
112
|
+
isRegexSafe(pattern: string): RegexSafetyResult;
|
|
113
|
+
escapeRegex(str: string): string;
|
|
114
|
+
createSafeRegex(pattern: string, flags?: string, maxLength?: number): RegExp | null;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Command validation strategy interface
|
|
118
|
+
*/
|
|
119
|
+
export interface ICommandValidationStrategy extends IValidationStrategy<string, CommandValidationOptions, CommandValidationResult> {
|
|
120
|
+
escapeShellArg(arg: string): string;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Input sanitization strategy interface
|
|
124
|
+
*/
|
|
125
|
+
export interface IInputSanitizationStrategy {
|
|
126
|
+
readonly name: string;
|
|
127
|
+
sanitize(input: string, options?: SanitizationOptions): string;
|
|
128
|
+
escapeHtml(str: string): string;
|
|
129
|
+
stripHtmlTags(str: string): string;
|
|
130
|
+
getRiskLevel(): RiskLevel;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Crypto validation strategy interface
|
|
134
|
+
*/
|
|
135
|
+
export interface ICryptoValidationStrategy {
|
|
136
|
+
readonly name: string;
|
|
137
|
+
timingSafeCompare(a: string, b: string): boolean;
|
|
138
|
+
timingSafeHashCompare(value: string, expectedHash: string): boolean;
|
|
139
|
+
generateSecureToken(length?: number): string;
|
|
140
|
+
secureHash(value: string, salt?: string): string;
|
|
141
|
+
getRiskLevel(): RiskLevel;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Validation orchestrator interface for coordinating multiple validators
|
|
145
|
+
*/
|
|
146
|
+
export interface IValidationOrchestrator {
|
|
147
|
+
/**
|
|
148
|
+
* Register a validation strategy
|
|
149
|
+
*/
|
|
150
|
+
registerStrategy(strategy: IValidationStrategy): void;
|
|
151
|
+
/**
|
|
152
|
+
* Get a registered strategy by name
|
|
153
|
+
*/
|
|
154
|
+
getStrategy(name: string): IValidationStrategy | undefined;
|
|
155
|
+
/**
|
|
156
|
+
* Validate using a specific strategy
|
|
157
|
+
*/
|
|
158
|
+
validateWith<TResult extends ValidationResult>(strategyName: string, input: unknown, options?: unknown): TResult;
|
|
159
|
+
/**
|
|
160
|
+
* Run all registered validators on an input
|
|
161
|
+
*/
|
|
162
|
+
validateAll(input: unknown): Map<string, ValidationResult>;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../../src/mcp/security/validators/interfaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../src/mcp/security/validators/interfaces.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - MCP Security: Path Traversal Validator
|
|
3
|
+
* Implements the Strategy Pattern for path traversal protection
|
|
4
|
+
*/
|
|
5
|
+
import { IPathValidationStrategy, PathValidationOptions, PathValidationResult, RiskLevel } from './interfaces';
|
|
6
|
+
/**
|
|
7
|
+
* Path traversal patterns to detect
|
|
8
|
+
*/
|
|
9
|
+
export declare const PATH_TRAVERSAL_PATTERNS: RegExp[];
|
|
10
|
+
/**
|
|
11
|
+
* Dangerous path components (system directories)
|
|
12
|
+
*/
|
|
13
|
+
export declare const DANGEROUS_PATH_COMPONENTS: RegExp[];
|
|
14
|
+
/**
|
|
15
|
+
* Path Traversal Validator Strategy
|
|
16
|
+
* Validates file paths to prevent directory traversal attacks
|
|
17
|
+
*/
|
|
18
|
+
export declare class PathTraversalValidator implements IPathValidationStrategy {
|
|
19
|
+
readonly name = "path-traversal";
|
|
20
|
+
/**
|
|
21
|
+
* Get the primary risk level this validator addresses
|
|
22
|
+
*/
|
|
23
|
+
getRiskLevel(): RiskLevel;
|
|
24
|
+
/**
|
|
25
|
+
* Validate a file path against traversal attacks
|
|
26
|
+
*/
|
|
27
|
+
validate(path: string, options?: PathValidationOptions): PathValidationResult;
|
|
28
|
+
/**
|
|
29
|
+
* Normalize a path by resolving . and .. components
|
|
30
|
+
*/
|
|
31
|
+
normalizePath(path: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* Safely join path components (strips leading/trailing slashes from all parts)
|
|
34
|
+
*/
|
|
35
|
+
joinPaths(...paths: string[]): string;
|
|
36
|
+
/**
|
|
37
|
+
* Join paths preserving absolute path from first component
|
|
38
|
+
*/
|
|
39
|
+
joinPathsAbsolute(...paths: string[]): string;
|
|
40
|
+
/**
|
|
41
|
+
* Get file extension from path
|
|
42
|
+
*/
|
|
43
|
+
getExtension(path: string): string | null;
|
|
44
|
+
}
|
|
45
|
+
export declare const validatePath: (path: string, options?: PathValidationOptions) => PathValidationResult;
|
|
46
|
+
export declare const normalizePath: (path: string) => string;
|
|
47
|
+
export declare const joinPaths: (...paths: string[]) => string;
|
|
48
|
+
export declare const joinPathsAbsolute: (...paths: string[]) => string;
|
|
49
|
+
export declare const getExtension: (path: string) => string | null;
|
|
50
|
+
//# sourceMappingURL=path-traversal-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-traversal-validator.d.ts","sourceRoot":"","sources":["../../../../src/mcp/security/validators/path-traversal-validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACpB,SAAS,EACV,MAAM,cAAc,CAAC;AAMtB;;GAEG;AACH,eAAO,MAAM,uBAAuB,UAanC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,yBAAyB,UAUrC,CAAC;AAMF;;;GAGG;AACH,qBAAa,sBAAuB,YAAW,uBAAuB;IACpE,SAAgB,IAAI,oBAAoB;IAExC;;OAEG;IACI,YAAY,IAAI,SAAS;IAIhC;;OAEG;IACI,QAAQ,CACb,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,qBAA0B,GAClC,oBAAoB;IAmIvB;;OAEG;IACI,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IA4B1C;;OAEG;IACI,SAAS,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAS5C;;OAEG;IACI,iBAAiB,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAsBpD;;OAEG;IACI,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAIjD;AAQD,eAAO,MAAM,YAAY,GACvB,MAAM,MAAM,EACZ,UAAU,qBAAqB,KAC9B,oBAAgE,CAAC;AAEpE,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,MACP,CAAC;AAEvC,eAAO,MAAM,SAAS,GAAI,GAAG,OAAO,MAAM,EAAE,KAAG,MACT,CAAC;AAEvC,eAAO,MAAM,iBAAiB,GAAI,GAAG,OAAO,MAAM,EAAE,KAAG,MACT,CAAC;AAE/C,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IAChB,CAAC"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - MCP Security: Path Traversal Validator
|
|
3
|
+
* Implements the Strategy Pattern for path traversal protection
|
|
4
|
+
*/
|
|
5
|
+
// ============================================================================
|
|
6
|
+
// Constants
|
|
7
|
+
// ============================================================================
|
|
8
|
+
/**
|
|
9
|
+
* Path traversal patterns to detect
|
|
10
|
+
*/
|
|
11
|
+
export const PATH_TRAVERSAL_PATTERNS = [
|
|
12
|
+
/\.\./, // Basic traversal
|
|
13
|
+
/%2e%2e/i, // URL encoded ..
|
|
14
|
+
/%252e%252e/i, // Double URL encoded
|
|
15
|
+
/\.\.%2f/i, // Mixed encoding
|
|
16
|
+
/%2f\.\./i, // Forward slash + ..
|
|
17
|
+
/\.\.%5c/i, // Backslash + ..
|
|
18
|
+
/\.\.\\/, // Windows backslash traversal
|
|
19
|
+
/%c0%ae/i, // UTF-8 overlong encoding
|
|
20
|
+
/%c0%2f/i, // UTF-8 overlong /
|
|
21
|
+
/%c1%9c/i, // UTF-8 overlong \
|
|
22
|
+
/\0/, // Null byte injection
|
|
23
|
+
/%00/i, // URL encoded null
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* Dangerous path components (system directories)
|
|
27
|
+
*/
|
|
28
|
+
export const DANGEROUS_PATH_COMPONENTS = [
|
|
29
|
+
/^\/etc\//i,
|
|
30
|
+
/^\/proc\//i,
|
|
31
|
+
/^\/sys\//i,
|
|
32
|
+
/^\/dev\//i,
|
|
33
|
+
/^\/root\//i,
|
|
34
|
+
/^\/home\/.+\/\./i,
|
|
35
|
+
/^[A-Z]:\\Windows/i,
|
|
36
|
+
/^[A-Z]:\\System/i,
|
|
37
|
+
/^[A-Z]:\\Users\\.+\\AppData/i,
|
|
38
|
+
];
|
|
39
|
+
// ============================================================================
|
|
40
|
+
// Path Traversal Validator Implementation
|
|
41
|
+
// ============================================================================
|
|
42
|
+
/**
|
|
43
|
+
* Path Traversal Validator Strategy
|
|
44
|
+
* Validates file paths to prevent directory traversal attacks
|
|
45
|
+
*/
|
|
46
|
+
export class PathTraversalValidator {
|
|
47
|
+
name = 'path-traversal';
|
|
48
|
+
/**
|
|
49
|
+
* Get the primary risk level this validator addresses
|
|
50
|
+
*/
|
|
51
|
+
getRiskLevel() {
|
|
52
|
+
return 'critical';
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Validate a file path against traversal attacks
|
|
56
|
+
*/
|
|
57
|
+
validate(path, options = {}) {
|
|
58
|
+
const { basePath = '', allowAbsolute = false, allowedExtensions = [], deniedExtensions = ['.exe', '.bat', '.cmd', '.sh', '.ps1', '.dll', '.so'], maxDepth = 10, maxLength = 4096, } = options;
|
|
59
|
+
// Check length
|
|
60
|
+
if (path.length > maxLength) {
|
|
61
|
+
return {
|
|
62
|
+
valid: false,
|
|
63
|
+
error: `Path exceeds maximum length of ${maxLength}`,
|
|
64
|
+
riskLevel: 'medium',
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
// Check for traversal patterns
|
|
68
|
+
for (const pattern of PATH_TRAVERSAL_PATTERNS) {
|
|
69
|
+
if (pattern.test(path)) {
|
|
70
|
+
return {
|
|
71
|
+
valid: false,
|
|
72
|
+
error: 'Path traversal attempt detected',
|
|
73
|
+
riskLevel: 'critical',
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Check for absolute paths
|
|
78
|
+
if (!allowAbsolute && (path.startsWith('/') || /^[A-Z]:/i.test(path))) {
|
|
79
|
+
return {
|
|
80
|
+
valid: false,
|
|
81
|
+
error: 'Absolute paths are not allowed',
|
|
82
|
+
riskLevel: 'high',
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
// Check for dangerous path components
|
|
86
|
+
for (const pattern of DANGEROUS_PATH_COMPONENTS) {
|
|
87
|
+
if (pattern.test(path)) {
|
|
88
|
+
return {
|
|
89
|
+
valid: false,
|
|
90
|
+
error: 'Access to system paths is not allowed',
|
|
91
|
+
riskLevel: 'critical',
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Normalize the path
|
|
96
|
+
const normalizedPath = this.normalizePath(path);
|
|
97
|
+
// Re-check for traversal after normalization
|
|
98
|
+
if (normalizedPath.includes('..')) {
|
|
99
|
+
return {
|
|
100
|
+
valid: false,
|
|
101
|
+
error: 'Path traversal detected after normalization',
|
|
102
|
+
riskLevel: 'critical',
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
// Check depth
|
|
106
|
+
const depth = normalizedPath.split('/').filter(Boolean).length;
|
|
107
|
+
if (depth > maxDepth) {
|
|
108
|
+
return {
|
|
109
|
+
valid: false,
|
|
110
|
+
error: `Path depth exceeds maximum of ${maxDepth}`,
|
|
111
|
+
riskLevel: 'low',
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
// Check extension
|
|
115
|
+
const ext = this.getExtension(normalizedPath);
|
|
116
|
+
if (ext) {
|
|
117
|
+
const extWithDot = `.${ext.toLowerCase()}`;
|
|
118
|
+
const extWithoutDot = ext.toLowerCase();
|
|
119
|
+
// Check denied extensions (support both .exe and exe formats)
|
|
120
|
+
if (deniedExtensions.length > 0) {
|
|
121
|
+
const isDenied = deniedExtensions.some(denied => denied.toLowerCase() === extWithDot || denied.toLowerCase() === extWithoutDot);
|
|
122
|
+
if (isDenied) {
|
|
123
|
+
return {
|
|
124
|
+
valid: false,
|
|
125
|
+
error: `File extension '${ext}' is not allowed`,
|
|
126
|
+
riskLevel: 'high',
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Check allowed extensions (support both .ts and ts formats)
|
|
131
|
+
if (allowedExtensions.length > 0) {
|
|
132
|
+
const isAllowed = allowedExtensions.some(allowed => allowed.toLowerCase() === extWithDot || allowed.toLowerCase() === extWithoutDot);
|
|
133
|
+
if (!isAllowed) {
|
|
134
|
+
return {
|
|
135
|
+
valid: false,
|
|
136
|
+
error: `File extension '${ext}' is not in allowed list`,
|
|
137
|
+
riskLevel: 'medium',
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Combine with base path if provided
|
|
143
|
+
const finalPath = basePath
|
|
144
|
+
? this.joinPathsAbsolute(basePath, normalizedPath)
|
|
145
|
+
: normalizedPath;
|
|
146
|
+
// Verify final path doesn't escape base (use normalized base for comparison)
|
|
147
|
+
const normalizedBase = basePath.startsWith('/')
|
|
148
|
+
? `/${this.normalizePath(basePath)}`
|
|
149
|
+
: this.normalizePath(basePath);
|
|
150
|
+
if (basePath && !finalPath.startsWith(normalizedBase)) {
|
|
151
|
+
return {
|
|
152
|
+
valid: false,
|
|
153
|
+
error: 'Path escapes base directory',
|
|
154
|
+
riskLevel: 'critical',
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
return {
|
|
158
|
+
valid: true,
|
|
159
|
+
normalizedPath: finalPath,
|
|
160
|
+
riskLevel: 'none',
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Normalize a path by resolving . and .. components
|
|
165
|
+
*/
|
|
166
|
+
normalizePath(path) {
|
|
167
|
+
// Replace backslashes with forward slashes
|
|
168
|
+
let normalized = path.replace(/\\/g, '/');
|
|
169
|
+
// Remove multiple consecutive slashes
|
|
170
|
+
normalized = normalized.replace(/\/+/g, '/');
|
|
171
|
+
// Split and resolve
|
|
172
|
+
const parts = normalized.split('/');
|
|
173
|
+
const result = [];
|
|
174
|
+
for (const part of parts) {
|
|
175
|
+
if (part === '.' || part === '') {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
if (part === '..') {
|
|
179
|
+
// Don't allow going above root
|
|
180
|
+
if (result.length > 0 && result[result.length - 1] !== '..') {
|
|
181
|
+
result.pop();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
result.push(part);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return result.join('/');
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Safely join path components (strips leading/trailing slashes from all parts)
|
|
192
|
+
*/
|
|
193
|
+
joinPaths(...paths) {
|
|
194
|
+
if (paths.length === 0)
|
|
195
|
+
return '';
|
|
196
|
+
return paths
|
|
197
|
+
.map(p => p.replace(/^\/+|\/+$/g, ''))
|
|
198
|
+
.filter(Boolean)
|
|
199
|
+
.join('/');
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Join paths preserving absolute path from first component
|
|
203
|
+
*/
|
|
204
|
+
joinPathsAbsolute(...paths) {
|
|
205
|
+
if (paths.length === 0)
|
|
206
|
+
return '';
|
|
207
|
+
// Check if the first path is absolute
|
|
208
|
+
const isAbsolute = paths[0].startsWith('/');
|
|
209
|
+
const result = paths
|
|
210
|
+
// Use non-backtracking patterns with possessive-like behavior via split/join
|
|
211
|
+
.map(p => {
|
|
212
|
+
// Remove leading slashes by splitting and rejoining
|
|
213
|
+
while (p.startsWith('/'))
|
|
214
|
+
p = p.slice(1);
|
|
215
|
+
// Remove trailing slashes
|
|
216
|
+
while (p.endsWith('/'))
|
|
217
|
+
p = p.slice(0, -1);
|
|
218
|
+
return p;
|
|
219
|
+
})
|
|
220
|
+
.filter(Boolean)
|
|
221
|
+
.join('/');
|
|
222
|
+
// Preserve leading slash for absolute paths
|
|
223
|
+
return isAbsolute ? `/${result}` : result;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Get file extension from path
|
|
227
|
+
*/
|
|
228
|
+
getExtension(path) {
|
|
229
|
+
const match = path.match(/\.([^./\\]+)$/);
|
|
230
|
+
return match ? match[1] : null;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
// ============================================================================
|
|
234
|
+
// Standalone Functions (for backward compatibility)
|
|
235
|
+
// ============================================================================
|
|
236
|
+
const defaultValidator = new PathTraversalValidator();
|
|
237
|
+
export const validatePath = (path, options) => defaultValidator.validate(path, options);
|
|
238
|
+
export const normalizePath = (path) => defaultValidator.normalizePath(path);
|
|
239
|
+
export const joinPaths = (...paths) => defaultValidator.joinPaths(...paths);
|
|
240
|
+
export const joinPathsAbsolute = (...paths) => defaultValidator.joinPathsAbsolute(...paths);
|
|
241
|
+
export const getExtension = (path) => defaultValidator.getExtension(path);
|
|
242
|
+
//# sourceMappingURL=path-traversal-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-traversal-validator.js","sourceRoot":"","sources":["../../../../src/mcp/security/validators/path-traversal-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - MCP Security: Regex Safety Validator
|
|
3
|
+
* Implements the Strategy Pattern for ReDoS prevention
|
|
4
|
+
*/
|
|
5
|
+
import { IRegexValidationStrategy, RegexSafetyResult, RegexValidationOptions, RiskLevel, ValidationResult } from './interfaces';
|
|
6
|
+
/**
|
|
7
|
+
* Patterns that can cause ReDoS (Regular Expression Denial of Service)
|
|
8
|
+
*/
|
|
9
|
+
export declare const REDOS_PATTERNS: RegExp[];
|
|
10
|
+
/**
|
|
11
|
+
* Count nested quantifier depth in a regex pattern
|
|
12
|
+
*/
|
|
13
|
+
export declare function countQuantifierNesting(pattern: string): number;
|
|
14
|
+
/**
|
|
15
|
+
* Check for exponential backtracking potential
|
|
16
|
+
*/
|
|
17
|
+
export declare function hasExponentialBacktracking(pattern: string): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Regex Safety Validator Strategy
|
|
20
|
+
* Validates regex patterns to prevent ReDoS attacks
|
|
21
|
+
*/
|
|
22
|
+
export declare class RegexSafetyValidator implements IRegexValidationStrategy {
|
|
23
|
+
readonly name = "regex-safety";
|
|
24
|
+
private maxComplexity;
|
|
25
|
+
constructor(maxComplexity?: number);
|
|
26
|
+
/**
|
|
27
|
+
* Get the primary risk level this validator addresses
|
|
28
|
+
*/
|
|
29
|
+
getRiskLevel(): RiskLevel;
|
|
30
|
+
/**
|
|
31
|
+
* Validate a regex pattern (IValidationStrategy interface)
|
|
32
|
+
*/
|
|
33
|
+
validate(pattern: string, options?: RegexValidationOptions): ValidationResult;
|
|
34
|
+
/**
|
|
35
|
+
* Check if a regex pattern is safe from ReDoS
|
|
36
|
+
*/
|
|
37
|
+
isRegexSafe(pattern: string, maxComplexity?: number): RegexSafetyResult;
|
|
38
|
+
/**
|
|
39
|
+
* Escape special regex characters in a string
|
|
40
|
+
*/
|
|
41
|
+
escapeRegex(str: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* Create a safe regex with validation
|
|
44
|
+
*/
|
|
45
|
+
createSafeRegex(pattern: string, flags?: string, maxLength?: number): RegExp | null;
|
|
46
|
+
}
|
|
47
|
+
export declare const isRegexSafe: (pattern: string) => RegexSafetyResult;
|
|
48
|
+
export declare const escapeRegex: (str: string) => string;
|
|
49
|
+
export declare const createSafeRegex: (pattern: string, flags?: string, maxLength?: number) => RegExp | null;
|
|
50
|
+
//# sourceMappingURL=regex-safety-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-safety-validator.d.ts","sourceRoot":"","sources":["../../../../src/mcp/security/validators/regex-safety-validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,sBAAsB,EACtB,SAAS,EACT,gBAAgB,EACjB,MAAM,cAAc,CAAC;AAMtB;;GAEG;AACH,eAAO,MAAM,cAAc,UAa1B,CAAC;AAWF;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA0C9D;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAWnE;AAMD;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,wBAAwB;IACnE,SAAgB,IAAI,kBAAkB;IAEtC,OAAO,CAAC,aAAa,CAAS;gBAElB,aAAa,SAAuB;IAIhD;;OAEG;IACI,YAAY,IAAI,SAAS;IAIhC;;OAEG;IACI,QAAQ,CACb,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,sBAA2B,GACnC,gBAAgB;IAmBnB;;OAEG;IACI,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,SAAqB,GAAG,iBAAiB;IA8B1F;;OAEG;IACI,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIvC;;OAEG;IACI,eAAe,CACpB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,SAAQ,GAChB,MAAM,GAAG,IAAI;CAiBjB;AAQD,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,KAAG,iBACP,CAAC;AAExC,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,KAAG,MACP,CAAC;AAEpC,eAAO,MAAM,eAAe,GAC1B,SAAS,MAAM,EACf,QAAQ,MAAM,EACd,YAAY,MAAM,KACjB,MAAM,GAAG,IAAmE,CAAC"}
|