agentic-qe 3.3.0 → 3.3.2
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 +134 -0
- package/v3/dist/cli/bundle.js +29332 -22739
- 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/queen-coordinator.d.ts +13 -1
- package/v3/dist/coordination/queen-coordinator.d.ts.map +1 -1
- package/v3/dist/coordination/queen-coordinator.js +91 -3
- package/v3/dist/coordination/queen-coordinator.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 +6 -1
- package/v3/dist/domains/coverage-analysis/plugin.d.ts.map +1 -1
- package/v3/dist/domains/coverage-analysis/plugin.js +75 -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 +39 -2
- package/v3/dist/domains/domain-interface.d.ts.map +1 -1
- package/v3/dist/domains/domain-interface.js +102 -1
- package/v3/dist/domains/domain-interface.js.map +1 -1
- package/v3/dist/domains/learning-optimization/coordinator.d.ts +83 -0
- package/v3/dist/domains/learning-optimization/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/learning-optimization/coordinator.js +174 -0
- package/v3/dist/domains/learning-optimization/coordinator.js.map +1 -1
- package/v3/dist/domains/learning-optimization/interfaces.d.ts +14 -0
- package/v3/dist/domains/learning-optimization/interfaces.d.ts.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/coordinator.d.ts +23 -0
- package/v3/dist/domains/quality-assessment/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/quality-assessment/coordinator.js +139 -1
- package/v3/dist/domains/quality-assessment/coordinator.js.map +1 -1
- package/v3/dist/domains/quality-assessment/plugin.d.ts +6 -1
- package/v3/dist/domains/quality-assessment/plugin.d.ts.map +1 -1
- package/v3/dist/domains/quality-assessment/plugin.js +69 -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 +6 -1
- package/v3/dist/domains/test-execution/plugin.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/plugin.js +79 -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 +41 -1
- package/v3/dist/domains/test-generation/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/test-generation/coordinator.js +187 -4
- 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 +6 -1
- package/v3/dist/domains/test-generation/plugin.d.ts.map +1 -1
- package/v3/dist/domains/test-generation/plugin.js +90 -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/kernel/interfaces.d.ts +54 -1
- package/v3/dist/kernel/interfaces.d.ts.map +1 -1
- package/v3/dist/learning/dream/dream-scheduler.d.ts +302 -0
- package/v3/dist/learning/dream/dream-scheduler.d.ts.map +1 -0
- package/v3/dist/learning/dream/dream-scheduler.js +551 -0
- package/v3/dist/learning/dream/dream-scheduler.js.map +1 -0
- package/v3/dist/learning/dream/index.d.ts +1 -0
- package/v3/dist/learning/dream/index.d.ts.map +1 -1
- package/v3/dist/learning/dream/index.js +4 -0
- package/v3/dist/learning/dream/index.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 +30870 -23598
- package/v3/dist/mcp/handlers/core-handlers.d.ts.map +1 -1
- package/v3/dist/mcp/handlers/core-handlers.js +16 -2
- package/v3/dist/mcp/handlers/core-handlers.js.map +1 -1
- package/v3/dist/mcp/handlers/task-handlers.d.ts +1 -0
- package/v3/dist/mcp/handlers/task-handlers.d.ts.map +1 -1
- package/v3/dist/mcp/handlers/task-handlers.js +46 -12
- package/v3/dist/mcp/handlers/task-handlers.js.map +1 -1
- 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/services/reasoning-bank-service.d.ts +87 -13
- package/v3/dist/mcp/services/reasoning-bank-service.d.ts.map +1 -1
- package/v3/dist/mcp/services/reasoning-bank-service.js +291 -31
- package/v3/dist/mcp/services/reasoning-bank-service.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/routing/qe-agent-registry.d.ts +27 -0
- package/v3/dist/routing/qe-agent-registry.d.ts.map +1 -1
- package/v3/dist/routing/qe-agent-registry.js +96 -0
- package/v3/dist/routing/qe-agent-registry.js.map +1 -1
- package/v3/dist/shared/events/domain-events.d.ts +27 -0
- package/v3/dist/shared/events/domain-events.d.ts.map +1 -1
- package/v3/dist/shared/events/domain-events.js +1 -0
- package/v3/dist/shared/events/domain-events.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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/security/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/security/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - MCP Security: Command Validator
|
|
3
|
+
* Implements the Strategy Pattern for command injection prevention
|
|
4
|
+
*/
|
|
5
|
+
import { ICommandValidationStrategy, CommandValidationOptions, CommandValidationResult, RiskLevel } from './interfaces';
|
|
6
|
+
/**
|
|
7
|
+
* Allowed commands whitelist (default safe commands)
|
|
8
|
+
*/
|
|
9
|
+
export declare const DEFAULT_ALLOWED_COMMANDS: string[];
|
|
10
|
+
/**
|
|
11
|
+
* Blocked command patterns (injection vectors)
|
|
12
|
+
*/
|
|
13
|
+
export declare const BLOCKED_COMMAND_PATTERNS: RegExp[];
|
|
14
|
+
/**
|
|
15
|
+
* Command Validator Strategy
|
|
16
|
+
* Validates and sanitizes shell commands to prevent injection attacks
|
|
17
|
+
*/
|
|
18
|
+
export declare class CommandValidator implements ICommandValidationStrategy {
|
|
19
|
+
readonly name = "command-injection";
|
|
20
|
+
private defaultAllowedCommands;
|
|
21
|
+
constructor(defaultAllowedCommands?: string[]);
|
|
22
|
+
/**
|
|
23
|
+
* Get the primary risk level this validator addresses
|
|
24
|
+
*/
|
|
25
|
+
getRiskLevel(): RiskLevel;
|
|
26
|
+
/**
|
|
27
|
+
* Validate a command (IValidationStrategy interface)
|
|
28
|
+
*/
|
|
29
|
+
validate(command: string, options?: CommandValidationOptions): CommandValidationResult;
|
|
30
|
+
/**
|
|
31
|
+
* Validate and sanitize a command
|
|
32
|
+
*/
|
|
33
|
+
validateCommand(command: string, allowedCommands?: string[]): CommandValidationResult;
|
|
34
|
+
/**
|
|
35
|
+
* Escape a string for safe shell usage
|
|
36
|
+
*/
|
|
37
|
+
escapeShellArg(arg: string): string;
|
|
38
|
+
}
|
|
39
|
+
export declare const validateCommand: (command: string, allowedCommands?: string[]) => CommandValidationResult;
|
|
40
|
+
export declare const escapeShellArg: (arg: string) => string;
|
|
41
|
+
//# sourceMappingURL=command-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-validator.d.ts","sourceRoot":"","sources":["../../../../src/mcp/security/validators/command-validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,SAAS,EACV,MAAM,cAAc,CAAC;AAMtB;;GAEG;AACH,eAAO,MAAM,wBAAwB,UAIpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,UASpC,CAAC;AAWF;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,0BAA0B;IACjE,SAAgB,IAAI,uBAAuB;IAE3C,OAAO,CAAC,sBAAsB,CAAW;gBAE7B,sBAAsB,WAA2B;IAI7D;;OAEG;IACI,YAAY,IAAI,SAAS;IAIhC;;OAEG;IACI,QAAQ,CACb,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,wBAA6B,GACrC,uBAAuB;IAK1B;;OAEG;IACI,eAAe,CACpB,OAAO,EAAE,MAAM,EACf,eAAe,GAAE,MAAM,EAAgC,GACtD,uBAAuB;IAgD1B;;OAEG;IACI,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAI3C;AAQD,eAAO,MAAM,eAAe,GAC1B,SAAS,MAAM,EACf,kBAAkB,MAAM,EAAE,KACzB,uBAKF,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,KAAG,MACP,CAAC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - MCP Security: Command Validator
|
|
3
|
+
* Implements the Strategy Pattern for command injection prevention
|
|
4
|
+
*/
|
|
5
|
+
// ============================================================================
|
|
6
|
+
// Constants
|
|
7
|
+
// ============================================================================
|
|
8
|
+
/**
|
|
9
|
+
* Allowed commands whitelist (default safe commands)
|
|
10
|
+
*/
|
|
11
|
+
export const DEFAULT_ALLOWED_COMMANDS = [
|
|
12
|
+
'ls', 'cat', 'echo', 'grep', 'find', 'head', 'tail', 'wc',
|
|
13
|
+
'npm', 'node', 'yarn', 'pnpm',
|
|
14
|
+
'git', 'jest', 'vitest', 'playwright',
|
|
15
|
+
];
|
|
16
|
+
/**
|
|
17
|
+
* Blocked command patterns (injection vectors)
|
|
18
|
+
*/
|
|
19
|
+
export const BLOCKED_COMMAND_PATTERNS = [
|
|
20
|
+
/;/, // Command chaining with semicolon
|
|
21
|
+
/&&/, // Command chaining with AND
|
|
22
|
+
/\|\|/, // Command chaining with OR
|
|
23
|
+
/\|/, // Piping
|
|
24
|
+
/`.*`/, // Backtick command substitution
|
|
25
|
+
/\$\(.*\)/, // $() command substitution
|
|
26
|
+
/>\s*\/dev\/sd/i, // Writing to block devices
|
|
27
|
+
/>\s*\/etc\//i, // Writing to /etc
|
|
28
|
+
];
|
|
29
|
+
/**
|
|
30
|
+
* Shell metacharacters (excludes parentheses which are common in normal text)
|
|
31
|
+
*/
|
|
32
|
+
const SHELL_METACHARACTERS = /[|;&$`<>{}[\]!#*?~]/g;
|
|
33
|
+
// ============================================================================
|
|
34
|
+
// Command Validator Implementation
|
|
35
|
+
// ============================================================================
|
|
36
|
+
/**
|
|
37
|
+
* Command Validator Strategy
|
|
38
|
+
* Validates and sanitizes shell commands to prevent injection attacks
|
|
39
|
+
*/
|
|
40
|
+
export class CommandValidator {
|
|
41
|
+
name = 'command-injection';
|
|
42
|
+
defaultAllowedCommands;
|
|
43
|
+
constructor(defaultAllowedCommands = DEFAULT_ALLOWED_COMMANDS) {
|
|
44
|
+
this.defaultAllowedCommands = defaultAllowedCommands;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get the primary risk level this validator addresses
|
|
48
|
+
*/
|
|
49
|
+
getRiskLevel() {
|
|
50
|
+
return 'critical';
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Validate a command (IValidationStrategy interface)
|
|
54
|
+
*/
|
|
55
|
+
validate(command, options = {}) {
|
|
56
|
+
const allowedCommands = options.allowedCommands ?? this.defaultAllowedCommands;
|
|
57
|
+
return this.validateCommand(command, allowedCommands);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Validate and sanitize a command
|
|
61
|
+
*/
|
|
62
|
+
validateCommand(command, allowedCommands = this.defaultAllowedCommands) {
|
|
63
|
+
const blockedPatterns = [];
|
|
64
|
+
// Check for blocked patterns
|
|
65
|
+
for (const pattern of BLOCKED_COMMAND_PATTERNS) {
|
|
66
|
+
if (pattern.test(command)) {
|
|
67
|
+
blockedPatterns.push(pattern.source);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (blockedPatterns.length > 0) {
|
|
71
|
+
return {
|
|
72
|
+
valid: false,
|
|
73
|
+
error: 'Command contains blocked patterns',
|
|
74
|
+
blockedPatterns,
|
|
75
|
+
riskLevel: 'critical',
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
// Extract base command
|
|
79
|
+
const parts = command.trim().split(/\s+/);
|
|
80
|
+
const baseCommand = parts[0].split('/').pop() || '';
|
|
81
|
+
// Check against whitelist
|
|
82
|
+
if (!allowedCommands.includes(baseCommand)) {
|
|
83
|
+
return {
|
|
84
|
+
valid: false,
|
|
85
|
+
error: `Command '${baseCommand}' is not in the allowed list`,
|
|
86
|
+
blockedPatterns: [],
|
|
87
|
+
riskLevel: 'high',
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
// Sanitize arguments
|
|
91
|
+
const sanitizedParts = parts.map((part, i) => {
|
|
92
|
+
if (i === 0)
|
|
93
|
+
return part;
|
|
94
|
+
// Remove shell metacharacters from arguments
|
|
95
|
+
return part.replace(SHELL_METACHARACTERS, '');
|
|
96
|
+
});
|
|
97
|
+
return {
|
|
98
|
+
valid: true,
|
|
99
|
+
sanitizedCommand: sanitizedParts.join(' '),
|
|
100
|
+
blockedPatterns: [],
|
|
101
|
+
riskLevel: 'none',
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Escape a string for safe shell usage
|
|
106
|
+
*/
|
|
107
|
+
escapeShellArg(arg) {
|
|
108
|
+
// Wrap in single quotes and escape any internal single quotes
|
|
109
|
+
return `'${arg.replace(/'/g, "'\\''")}'`;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// ============================================================================
|
|
113
|
+
// Standalone Functions (for backward compatibility)
|
|
114
|
+
// ============================================================================
|
|
115
|
+
const defaultValidator = new CommandValidator();
|
|
116
|
+
export const validateCommand = (command, allowedCommands) => {
|
|
117
|
+
if (allowedCommands) {
|
|
118
|
+
return defaultValidator.validateCommand(command, allowedCommands);
|
|
119
|
+
}
|
|
120
|
+
return defaultValidator.validate(command);
|
|
121
|
+
};
|
|
122
|
+
export const escapeShellArg = (arg) => defaultValidator.escapeShellArg(arg);
|
|
123
|
+
//# sourceMappingURL=command-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-validator.js","sourceRoot":"","sources":["../../../../src/mcp/security/validators/command-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - MCP Security: Crypto Validator
|
|
3
|
+
* Implements the Strategy Pattern for cryptographic security operations
|
|
4
|
+
*/
|
|
5
|
+
import { ICryptoValidationStrategy, RiskLevel } from './interfaces';
|
|
6
|
+
/**
|
|
7
|
+
* Crypto Validator Strategy
|
|
8
|
+
* Provides timing-safe comparisons and secure cryptographic operations
|
|
9
|
+
*/
|
|
10
|
+
export declare class CryptoValidator implements ICryptoValidationStrategy {
|
|
11
|
+
readonly name = "crypto-security";
|
|
12
|
+
/**
|
|
13
|
+
* Get the primary risk level this validator addresses
|
|
14
|
+
*/
|
|
15
|
+
getRiskLevel(): RiskLevel;
|
|
16
|
+
/**
|
|
17
|
+
* Perform a timing-safe string comparison
|
|
18
|
+
* Prevents timing attacks by ensuring constant-time comparison
|
|
19
|
+
*/
|
|
20
|
+
timingSafeCompare(a: string, b: string): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Timing-safe comparison for hashed values
|
|
23
|
+
* Hashes the input value and compares against expected hash
|
|
24
|
+
*/
|
|
25
|
+
timingSafeHashCompare(value: string, expectedHash: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Generate a secure random token
|
|
28
|
+
* Uses cryptographically secure random bytes
|
|
29
|
+
*/
|
|
30
|
+
generateSecureToken(length?: number): string;
|
|
31
|
+
/**
|
|
32
|
+
* Hash a value securely using SHA-256
|
|
33
|
+
*/
|
|
34
|
+
secureHash(value: string, salt?: string): string;
|
|
35
|
+
}
|
|
36
|
+
export declare const timingSafeCompare: (a: string, b: string) => boolean;
|
|
37
|
+
export declare const timingSafeHashCompare: (value: string, expectedHash: string) => boolean;
|
|
38
|
+
export declare const generateSecureToken: (length?: number) => string;
|
|
39
|
+
export declare const secureHash: (value: string, salt?: string) => string;
|
|
40
|
+
//# sourceMappingURL=crypto-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-validator.d.ts","sourceRoot":"","sources":["../../../../src/mcp/security/validators/crypto-validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,yBAAyB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAMpE;;;GAGG;AACH,qBAAa,eAAgB,YAAW,yBAAyB;IAC/D,SAAgB,IAAI,qBAAqB;IAEzC;;OAEG;IACI,YAAY,IAAI,SAAS;IAIhC;;;OAGG;IACI,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO;IAavD;;;OAGG;IACI,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAK1E;;;OAGG;IACI,mBAAmB,CAAC,MAAM,SAAK,GAAG,MAAM;IAQ/C;;OAEG;IACI,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;CAIxD;AAQD,eAAO,MAAM,iBAAiB,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,OACf,CAAC;AAE3C,eAAO,MAAM,qBAAqB,GAAI,OAAO,MAAM,EAAE,cAAc,MAAM,KAAG,OACf,CAAC;AAE9D,eAAO,MAAM,mBAAmB,GAAI,SAAS,MAAM,KAAG,MACR,CAAC;AAE/C,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,EAAE,OAAO,MAAM,KAAG,MAChB,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - MCP Security: Crypto Validator
|
|
3
|
+
* Implements the Strategy Pattern for cryptographic security operations
|
|
4
|
+
*/
|
|
5
|
+
import { createHash, timingSafeEqual, randomBytes } from 'crypto';
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Crypto Validator Implementation
|
|
8
|
+
// ============================================================================
|
|
9
|
+
/**
|
|
10
|
+
* Crypto Validator Strategy
|
|
11
|
+
* Provides timing-safe comparisons and secure cryptographic operations
|
|
12
|
+
*/
|
|
13
|
+
export class CryptoValidator {
|
|
14
|
+
name = 'crypto-security';
|
|
15
|
+
/**
|
|
16
|
+
* Get the primary risk level this validator addresses
|
|
17
|
+
*/
|
|
18
|
+
getRiskLevel() {
|
|
19
|
+
return 'critical';
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Perform a timing-safe string comparison
|
|
23
|
+
* Prevents timing attacks by ensuring constant-time comparison
|
|
24
|
+
*/
|
|
25
|
+
timingSafeCompare(a, b) {
|
|
26
|
+
// Pad shorter string to prevent length-based timing attacks
|
|
27
|
+
const maxLen = Math.max(a.length, b.length);
|
|
28
|
+
const paddedA = a.padEnd(maxLen, '\0');
|
|
29
|
+
const paddedB = b.padEnd(maxLen, '\0');
|
|
30
|
+
try {
|
|
31
|
+
return timingSafeEqual(Buffer.from(paddedA), Buffer.from(paddedB));
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Timing-safe comparison for hashed values
|
|
39
|
+
* Hashes the input value and compares against expected hash
|
|
40
|
+
*/
|
|
41
|
+
timingSafeHashCompare(value, expectedHash) {
|
|
42
|
+
const hash = createHash('sha256').update(value).digest('hex');
|
|
43
|
+
return this.timingSafeCompare(hash, expectedHash);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Generate a secure random token
|
|
47
|
+
* Uses cryptographically secure random bytes
|
|
48
|
+
*/
|
|
49
|
+
generateSecureToken(length = 32) {
|
|
50
|
+
return randomBytes(length)
|
|
51
|
+
.toString('base64')
|
|
52
|
+
.replace(/\+/g, '-')
|
|
53
|
+
.replace(/\//g, '_')
|
|
54
|
+
.replace(/=/g, '');
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Hash a value securely using SHA-256
|
|
58
|
+
*/
|
|
59
|
+
secureHash(value, salt) {
|
|
60
|
+
const data = salt ? `${salt}:${value}` : value;
|
|
61
|
+
return createHash('sha256').update(data).digest('hex');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// ============================================================================
|
|
65
|
+
// Standalone Functions (for backward compatibility)
|
|
66
|
+
// ============================================================================
|
|
67
|
+
const defaultValidator = new CryptoValidator();
|
|
68
|
+
export const timingSafeCompare = (a, b) => defaultValidator.timingSafeCompare(a, b);
|
|
69
|
+
export const timingSafeHashCompare = (value, expectedHash) => defaultValidator.timingSafeHashCompare(value, expectedHash);
|
|
70
|
+
export const generateSecureToken = (length) => defaultValidator.generateSecureToken(length);
|
|
71
|
+
export const secureHash = (value, salt) => defaultValidator.secureHash(value, salt);
|
|
72
|
+
//# sourceMappingURL=crypto-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-validator.js","sourceRoot":"","sources":["../../../../src/mcp/security/validators/crypto-validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAGlE,+EAA+E;AAC/E,kCAAkC;AAClC,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,OAAO,eAAe;IACV,IAAI,GAAG,iBAAiB,CAAC;IAEzC;;OAEG;IACI,YAAY;QACjB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;OAGG;IACI,iBAAiB,CAAC,CAAS,EAAE,CAAS;QAC3C,4DAA4D;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAEvC,IAAI,CAAC;YACH,OAAO,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACrE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,qBAAqB,CAAC,KAAa,EAAE,YAAoB;QAC9D,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACpD,CAAC;IAED;;;OAGG;IACI,mBAAmB,CAAC,MAAM,GAAG,EAAE;QACpC,OAAO,WAAW,CAAC,MAAM,CAAC;aACvB,QAAQ,CAAC,QAAQ,CAAC;aAClB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;aACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;aACnB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACvB,CAAC;IAED;;OAEG;IACI,UAAU,CAAC,KAAa,EAAE,IAAa;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;CACF;AAED,+EAA+E;AAC/E,oDAAoD;AACpD,+EAA+E;AAE/E,MAAM,gBAAgB,GAAG,IAAI,eAAe,EAAE,CAAC;AAE/C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAS,EAAE,CAAS,EAAW,EAAE,CACjE,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAa,EAAE,YAAoB,EAAW,EAAE,CACpF,gBAAgB,CAAC,qBAAqB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AAE9D,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAe,EAAU,EAAE,CAC7D,gBAAgB,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,IAAa,EAAU,EAAE,CACjE,gBAAgB,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - MCP Security: Validators Index
|
|
3
|
+
* Re-exports all validators and interfaces for easy importing
|
|
4
|
+
*/
|
|
5
|
+
export type { RiskLevel, ValidationResult, PathValidationResult, RegexSafetyResult, CommandValidationResult, SanitizationOptions, PathValidationOptions, RegexValidationOptions, CommandValidationOptions, IValidationStrategy, IPathValidationStrategy, IRegexValidationStrategy, ICommandValidationStrategy, IInputSanitizationStrategy, ICryptoValidationStrategy, IValidationOrchestrator, } from './interfaces';
|
|
6
|
+
export { PathTraversalValidator, PATH_TRAVERSAL_PATTERNS, DANGEROUS_PATH_COMPONENTS, validatePath, normalizePath, joinPaths, joinPathsAbsolute, getExtension, } from './path-traversal-validator';
|
|
7
|
+
export { RegexSafetyValidator, REDOS_PATTERNS, countQuantifierNesting, hasExponentialBacktracking, isRegexSafe, escapeRegex, createSafeRegex, } from './regex-safety-validator';
|
|
8
|
+
export { CommandValidator, DEFAULT_ALLOWED_COMMANDS, BLOCKED_COMMAND_PATTERNS, validateCommand, escapeShellArg, } from './command-validator';
|
|
9
|
+
export { InputSanitizer, HTML_ESCAPE_MAP, SQL_INJECTION_PATTERNS, SHELL_METACHARACTERS, DANGEROUS_CONTROL_CHARS, sanitizeInput, escapeHtml, stripHtmlTags, } from './input-sanitizer';
|
|
10
|
+
export { CryptoValidator, timingSafeCompare, timingSafeHashCompare, generateSecureToken, secureHash, } from './crypto-validator';
|
|
11
|
+
export { ValidationOrchestrator, getOrchestrator, createOrchestrator, } from './validation-orchestrator';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mcp/security/validators/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,YAAY,EAEV,SAAS,EACT,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EAGvB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EAGxB,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,EAC1B,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAOtB,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,YAAY,EACZ,aAAa,EACb,SAAS,EACT,iBAAiB,EACjB,YAAY,GACb,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,0BAA0B,EAC1B,WAAW,EACX,WAAW,EACX,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,wBAAwB,EACxB,eAAe,EACf,cAAc,GACf,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,aAAa,EACb,UAAU,EACV,aAAa,GACd,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,UAAU,GACX,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,kBAAkB,GACnB,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - MCP Security: Validators Index
|
|
3
|
+
* Re-exports all validators and interfaces for easy importing
|
|
4
|
+
*/
|
|
5
|
+
// ============================================================================
|
|
6
|
+
// Validators
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// Path Traversal
|
|
9
|
+
export { PathTraversalValidator, PATH_TRAVERSAL_PATTERNS, DANGEROUS_PATH_COMPONENTS, validatePath, normalizePath, joinPaths, joinPathsAbsolute, getExtension, } from './path-traversal-validator';
|
|
10
|
+
// Regex Safety
|
|
11
|
+
export { RegexSafetyValidator, REDOS_PATTERNS, countQuantifierNesting, hasExponentialBacktracking, isRegexSafe, escapeRegex, createSafeRegex, } from './regex-safety-validator';
|
|
12
|
+
// Command Validator
|
|
13
|
+
export { CommandValidator, DEFAULT_ALLOWED_COMMANDS, BLOCKED_COMMAND_PATTERNS, validateCommand, escapeShellArg, } from './command-validator';
|
|
14
|
+
// Input Sanitizer
|
|
15
|
+
export { InputSanitizer, HTML_ESCAPE_MAP, SQL_INJECTION_PATTERNS, SHELL_METACHARACTERS, DANGEROUS_CONTROL_CHARS, sanitizeInput, escapeHtml, stripHtmlTags, } from './input-sanitizer';
|
|
16
|
+
// Crypto Validator
|
|
17
|
+
export { CryptoValidator, timingSafeCompare, timingSafeHashCompare, generateSecureToken, secureHash, } from './crypto-validator';
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// Orchestrator
|
|
20
|
+
// ============================================================================
|
|
21
|
+
export { ValidationOrchestrator, getOrchestrator, createOrchestrator, } from './validation-orchestrator';
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/mcp/security/validators/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA8BH,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E,iBAAiB;AACjB,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,YAAY,EACZ,aAAa,EACb,SAAS,EACT,iBAAiB,EACjB,YAAY,GACb,MAAM,4BAA4B,CAAC;AAEpC,eAAe;AACf,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,0BAA0B,EAC1B,WAAW,EACX,WAAW,EACX,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAElC,oBAAoB;AACpB,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,wBAAwB,EACxB,eAAe,EACf,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B,kBAAkB;AAClB,OAAO,EACL,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,aAAa,EACb,UAAU,EACV,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,mBAAmB;AACnB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,UAAU,GACX,MAAM,oBAAoB,CAAC;AAE5B,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,kBAAkB,GACnB,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - MCP Security: Input Sanitizer
|
|
3
|
+
* Implements the Strategy Pattern for input sanitization
|
|
4
|
+
*/
|
|
5
|
+
import { IInputSanitizationStrategy, SanitizationOptions, RiskLevel } from './interfaces';
|
|
6
|
+
/**
|
|
7
|
+
* HTML escape characters mapping
|
|
8
|
+
*/
|
|
9
|
+
export declare const HTML_ESCAPE_MAP: Record<string, string>;
|
|
10
|
+
/**
|
|
11
|
+
* SQL injection patterns to detect and remove
|
|
12
|
+
*/
|
|
13
|
+
export declare const SQL_INJECTION_PATTERNS: RegExp[];
|
|
14
|
+
/**
|
|
15
|
+
* Shell metacharacters (excludes parentheses which are common in normal text)
|
|
16
|
+
*/
|
|
17
|
+
export declare const SHELL_METACHARACTERS: RegExp;
|
|
18
|
+
/**
|
|
19
|
+
* Dangerous control characters that should be stripped:
|
|
20
|
+
* - Null byte (\x00): String termination attacks, filter bypass
|
|
21
|
+
* - Backspace (\x08): Log manipulation
|
|
22
|
+
* - Bell (\x07): Terminal escape attacks
|
|
23
|
+
* - Vertical tab (\x0B): Filter bypass
|
|
24
|
+
* - Form feed (\x0C): Filter bypass
|
|
25
|
+
* - Escape (\x1B): Terminal escape sequences (ANSI attacks)
|
|
26
|
+
* - Delete (\x7F): Buffer manipulation
|
|
27
|
+
*/
|
|
28
|
+
export declare const DANGEROUS_CONTROL_CHARS: RegExp;
|
|
29
|
+
/**
|
|
30
|
+
* Input Sanitizer Strategy
|
|
31
|
+
* Sanitizes user input to prevent XSS, SQL injection, and command injection
|
|
32
|
+
*/
|
|
33
|
+
export declare class InputSanitizer implements IInputSanitizationStrategy {
|
|
34
|
+
readonly name = "input-sanitization";
|
|
35
|
+
/**
|
|
36
|
+
* Get the primary risk level this sanitizer addresses
|
|
37
|
+
*/
|
|
38
|
+
getRiskLevel(): RiskLevel;
|
|
39
|
+
/**
|
|
40
|
+
* Sanitize input string with configurable options
|
|
41
|
+
*/
|
|
42
|
+
sanitize(input: string, options?: SanitizationOptions): string;
|
|
43
|
+
/**
|
|
44
|
+
* Escape HTML special characters
|
|
45
|
+
*/
|
|
46
|
+
escapeHtml(str: string): string;
|
|
47
|
+
/**
|
|
48
|
+
* Strip HTML tags from a string
|
|
49
|
+
* Handles both complete tags and incomplete/malformed tags to prevent XSS
|
|
50
|
+
*/
|
|
51
|
+
stripHtmlTags(str: string): string;
|
|
52
|
+
}
|
|
53
|
+
export declare const sanitizeInput: (input: string, options?: SanitizationOptions) => string;
|
|
54
|
+
export declare const escapeHtml: (str: string) => string;
|
|
55
|
+
export declare const stripHtmlTags: (str: string) => string;
|
|
56
|
+
//# sourceMappingURL=input-sanitizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-sanitizer.d.ts","sourceRoot":"","sources":["../../../../src/mcp/security/validators/input-sanitizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,0BAA0B,EAC1B,mBAAmB,EACnB,SAAS,EACV,MAAM,cAAc,CAAC;AAMtB;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CASlD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,UAWlC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,QAAyB,CAAC;AAE3D;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,QAAsC,CAAC;AAM3E;;;GAGG;AACH,qBAAa,cAAe,YAAW,0BAA0B;IAC/D,SAAgB,IAAI,wBAAwB;IAE5C;;OAEG;IACI,YAAY,IAAI,SAAS;IAIhC;;OAEG;IACI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,MAAM;IAuDzE;;OAEG;IACI,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAItC;;;OAGG;IACI,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAkC1C;AAQD,eAAO,MAAM,aAAa,GACxB,OAAO,MAAM,EACb,UAAU,mBAAmB,KAC5B,MAAmD,CAAC;AAEvD,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,MACP,CAAC;AAEnC,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,KAAG,MACP,CAAC"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - MCP Security: Input Sanitizer
|
|
3
|
+
* Implements the Strategy Pattern for input sanitization
|
|
4
|
+
*/
|
|
5
|
+
// ============================================================================
|
|
6
|
+
// Constants
|
|
7
|
+
// ============================================================================
|
|
8
|
+
/**
|
|
9
|
+
* HTML escape characters mapping
|
|
10
|
+
*/
|
|
11
|
+
export const HTML_ESCAPE_MAP = {
|
|
12
|
+
'&': '&',
|
|
13
|
+
'<': '<',
|
|
14
|
+
'>': '>',
|
|
15
|
+
'"': '"',
|
|
16
|
+
"'": ''',
|
|
17
|
+
'/': '/',
|
|
18
|
+
'`': '`',
|
|
19
|
+
'=': '=',
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* SQL injection patterns to detect and remove
|
|
23
|
+
*/
|
|
24
|
+
export const SQL_INJECTION_PATTERNS = [
|
|
25
|
+
/('|")\s*;\s*--/i,
|
|
26
|
+
/'\s*OR\s+'1'\s*=\s*'1/i,
|
|
27
|
+
/"\s*OR\s+"1"\s*=\s*"1/i,
|
|
28
|
+
/UNION\s+SELECT/i,
|
|
29
|
+
/INSERT\s+INTO/i,
|
|
30
|
+
/DROP\s+TABLE/i,
|
|
31
|
+
/DELETE\s+FROM/i,
|
|
32
|
+
/UPDATE\s+.*\s+SET/i,
|
|
33
|
+
/EXEC(\s+|\()sp_/i,
|
|
34
|
+
/xp_cmdshell/i,
|
|
35
|
+
];
|
|
36
|
+
/**
|
|
37
|
+
* Shell metacharacters (excludes parentheses which are common in normal text)
|
|
38
|
+
*/
|
|
39
|
+
export const SHELL_METACHARACTERS = /[|;&$`<>{}[\]!#*?~]/g;
|
|
40
|
+
/**
|
|
41
|
+
* Dangerous control characters that should be stripped:
|
|
42
|
+
* - Null byte (\x00): String termination attacks, filter bypass
|
|
43
|
+
* - Backspace (\x08): Log manipulation
|
|
44
|
+
* - Bell (\x07): Terminal escape attacks
|
|
45
|
+
* - Vertical tab (\x0B): Filter bypass
|
|
46
|
+
* - Form feed (\x0C): Filter bypass
|
|
47
|
+
* - Escape (\x1B): Terminal escape sequences (ANSI attacks)
|
|
48
|
+
* - Delete (\x7F): Buffer manipulation
|
|
49
|
+
*/
|
|
50
|
+
export const DANGEROUS_CONTROL_CHARS = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g;
|
|
51
|
+
// ============================================================================
|
|
52
|
+
// Input Sanitizer Implementation
|
|
53
|
+
// ============================================================================
|
|
54
|
+
/**
|
|
55
|
+
* Input Sanitizer Strategy
|
|
56
|
+
* Sanitizes user input to prevent XSS, SQL injection, and command injection
|
|
57
|
+
*/
|
|
58
|
+
export class InputSanitizer {
|
|
59
|
+
name = 'input-sanitization';
|
|
60
|
+
/**
|
|
61
|
+
* Get the primary risk level this sanitizer addresses
|
|
62
|
+
*/
|
|
63
|
+
getRiskLevel() {
|
|
64
|
+
return 'high';
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Sanitize input string with configurable options
|
|
68
|
+
*/
|
|
69
|
+
sanitize(input, options = {}) {
|
|
70
|
+
const { maxLength = 10000, allowedChars, stripHtml = true, stripSql = true, escapeShell = true, trim = true, stripControlChars = true, } = options;
|
|
71
|
+
let result = input;
|
|
72
|
+
// Strip dangerous control characters first (null bytes, escape sequences, etc.)
|
|
73
|
+
// This must happen early to prevent bypass of later sanitization steps
|
|
74
|
+
if (stripControlChars) {
|
|
75
|
+
result = result.replace(DANGEROUS_CONTROL_CHARS, '');
|
|
76
|
+
}
|
|
77
|
+
// Trim
|
|
78
|
+
if (trim) {
|
|
79
|
+
result = result.trim();
|
|
80
|
+
}
|
|
81
|
+
// Max length
|
|
82
|
+
if (result.length > maxLength) {
|
|
83
|
+
result = result.substring(0, maxLength);
|
|
84
|
+
}
|
|
85
|
+
// Strip HTML
|
|
86
|
+
if (stripHtml) {
|
|
87
|
+
result = this.stripHtmlTags(result);
|
|
88
|
+
}
|
|
89
|
+
// Strip SQL injection attempts
|
|
90
|
+
if (stripSql) {
|
|
91
|
+
for (const pattern of SQL_INJECTION_PATTERNS) {
|
|
92
|
+
result = result.replace(pattern, '');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Escape shell metacharacters
|
|
96
|
+
if (escapeShell) {
|
|
97
|
+
result = result.replace(SHELL_METACHARACTERS, '');
|
|
98
|
+
}
|
|
99
|
+
// Filter to allowed characters
|
|
100
|
+
if (allowedChars) {
|
|
101
|
+
// Filter character by character to respect the provided regex
|
|
102
|
+
result = result.split('').filter(char => allowedChars.test(char)).join('');
|
|
103
|
+
}
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Escape HTML special characters
|
|
108
|
+
*/
|
|
109
|
+
escapeHtml(str) {
|
|
110
|
+
return str.replace(/[&<>"'`=/]/g, char => HTML_ESCAPE_MAP[char] || char);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Strip HTML tags from a string
|
|
114
|
+
* Handles both complete tags and incomplete/malformed tags to prevent XSS
|
|
115
|
+
*/
|
|
116
|
+
stripHtmlTags(str) {
|
|
117
|
+
// Limit input length to prevent ReDoS
|
|
118
|
+
const MAX_LENGTH = 100000;
|
|
119
|
+
if (str.length > MAX_LENGTH) {
|
|
120
|
+
str = str.slice(0, MAX_LENGTH);
|
|
121
|
+
}
|
|
122
|
+
let result = str;
|
|
123
|
+
let prevLength;
|
|
124
|
+
// Loop until no more changes (handles nested/malformed tags like <script<script>>)
|
|
125
|
+
do {
|
|
126
|
+
prevLength = result.length;
|
|
127
|
+
// Remove complete HTML tags using a non-backtracking approach
|
|
128
|
+
// Process character by character to avoid regex backtracking
|
|
129
|
+
let cleaned = '';
|
|
130
|
+
let inTag = false;
|
|
131
|
+
for (let i = 0; i < result.length; i++) {
|
|
132
|
+
const char = result[i];
|
|
133
|
+
if (char === '<') {
|
|
134
|
+
inTag = true;
|
|
135
|
+
}
|
|
136
|
+
else if (char === '>' && inTag) {
|
|
137
|
+
inTag = false;
|
|
138
|
+
}
|
|
139
|
+
else if (!inTag) {
|
|
140
|
+
cleaned += char;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
result = cleaned;
|
|
144
|
+
} while (result.length < prevLength && result.length > 0);
|
|
145
|
+
// Encode any remaining angle brackets
|
|
146
|
+
result = result.replace(/</g, '<').replace(/>/g, '>');
|
|
147
|
+
return result;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// ============================================================================
|
|
151
|
+
// Standalone Functions (for backward compatibility)
|
|
152
|
+
// ============================================================================
|
|
153
|
+
const defaultSanitizer = new InputSanitizer();
|
|
154
|
+
export const sanitizeInput = (input, options) => defaultSanitizer.sanitize(input, options);
|
|
155
|
+
export const escapeHtml = (str) => defaultSanitizer.escapeHtml(str);
|
|
156
|
+
export const stripHtmlTags = (str) => defaultSanitizer.stripHtmlTags(str);
|
|
157
|
+
//# sourceMappingURL=input-sanitizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-sanitizer.js","sourceRoot":"","sources":["../../../../src/mcp/security/validators/input-sanitizer.ts"],"names":[],"mappings":"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"}
|