agentic-qe 3.6.7 → 3.6.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/README.md +1 -1
- package/.claude/skills/skills-manifest.json +1 -1
- package/package.json +5 -2
- package/scripts/benchmark-aqe-baseline.ts +614 -0
- package/v3/CHANGELOG.md +33 -0
- package/v3/dist/adapters/a2a/agent-cards/generator.d.ts.map +1 -1
- package/v3/dist/adapters/a2a/agent-cards/generator.js +2 -1
- package/v3/dist/adapters/a2a/agent-cards/generator.js.map +1 -1
- package/v3/dist/adapters/a2a/auth/jwt-utils.d.ts.map +1 -1
- package/v3/dist/adapters/a2a/auth/jwt-utils.js +3 -2
- package/v3/dist/adapters/a2a/auth/jwt-utils.js.map +1 -1
- package/v3/dist/adapters/a2a/auth/middleware.d.ts.map +1 -1
- package/v3/dist/adapters/a2a/auth/middleware.js +3 -0
- package/v3/dist/adapters/a2a/auth/middleware.js.map +1 -1
- package/v3/dist/adapters/a2a/discovery/agent-health.d.ts.map +1 -1
- package/v3/dist/adapters/a2a/discovery/agent-health.js +4 -3
- package/v3/dist/adapters/a2a/discovery/agent-health.js.map +1 -1
- package/v3/dist/adapters/a2a/discovery/file-watcher.d.ts.map +1 -1
- package/v3/dist/adapters/a2a/discovery/file-watcher.js +3 -2
- package/v3/dist/adapters/a2a/discovery/file-watcher.js.map +1 -1
- package/v3/dist/adapters/a2a/discovery/hot-reload-service.d.ts.map +1 -1
- package/v3/dist/adapters/a2a/discovery/hot-reload-service.js +6 -5
- package/v3/dist/adapters/a2a/discovery/hot-reload-service.js.map +1 -1
- package/v3/dist/adapters/a2a/jsonrpc/envelope.d.ts.map +1 -1
- package/v3/dist/adapters/a2a/jsonrpc/envelope.js +5 -4
- package/v3/dist/adapters/a2a/jsonrpc/envelope.js.map +1 -1
- package/v3/dist/adapters/ag-ui/event-adapter.d.ts.map +1 -1
- package/v3/dist/adapters/ag-ui/event-adapter.js +2 -1
- package/v3/dist/adapters/ag-ui/event-adapter.js.map +1 -1
- package/v3/dist/adapters/ag-ui/event-batcher.d.ts.map +1 -1
- package/v3/dist/adapters/ag-ui/event-batcher.js +2 -1
- package/v3/dist/adapters/ag-ui/event-batcher.js.map +1 -1
- package/v3/dist/adapters/ag-ui/json-patch-utils.d.ts.map +1 -1
- package/v3/dist/adapters/ag-ui/json-patch-utils.js +2 -1
- package/v3/dist/adapters/ag-ui/json-patch-utils.js.map +1 -1
- package/v3/dist/adapters/ag-ui/json-patch.d.ts +1 -1
- package/v3/dist/adapters/ag-ui/json-patch.d.ts.map +1 -1
- package/v3/dist/adapters/ag-ui/json-patch.js +4 -6
- package/v3/dist/adapters/ag-ui/json-patch.js.map +1 -1
- package/v3/dist/adapters/ag-ui/stream-controller.d.ts.map +1 -1
- package/v3/dist/adapters/ag-ui/stream-controller.js +3 -0
- package/v3/dist/adapters/ag-ui/stream-controller.js.map +1 -1
- package/v3/dist/adapters/claude-flow/detect.d.ts.map +1 -1
- package/v3/dist/adapters/claude-flow/detect.js +4 -3
- package/v3/dist/adapters/claude-flow/detect.js.map +1 -1
- package/v3/dist/adapters/claude-flow/pretrain-bridge.d.ts.map +1 -1
- package/v3/dist/adapters/claude-flow/pretrain-bridge.js +7 -5
- package/v3/dist/adapters/claude-flow/pretrain-bridge.js.map +1 -1
- package/v3/dist/adapters/claude-flow/trajectory-bridge.d.ts.map +1 -1
- package/v3/dist/adapters/claude-flow/trajectory-bridge.js +2 -14
- package/v3/dist/adapters/claude-flow/trajectory-bridge.js.map +1 -1
- package/v3/dist/adapters/trajectory-adapter.d.ts.map +1 -1
- package/v3/dist/adapters/trajectory-adapter.js +5 -3
- package/v3/dist/adapters/trajectory-adapter.js.map +1 -1
- package/v3/dist/agents/claim-verifier/verifiers/test-verifier.d.ts.map +1 -1
- package/v3/dist/agents/claim-verifier/verifiers/test-verifier.js +2 -1
- package/v3/dist/agents/claim-verifier/verifiers/test-verifier.js.map +1 -1
- package/v3/dist/benchmarks/performance-benchmarks.d.ts.map +1 -1
- package/v3/dist/benchmarks/performance-benchmarks.js +4 -3
- package/v3/dist/benchmarks/performance-benchmarks.js.map +1 -1
- package/v3/dist/benchmarks/run-benchmarks.js +27 -45
- package/v3/dist/benchmarks/run-benchmarks.js.map +1 -1
- package/v3/dist/cli/bundle.js +13395 -14755
- package/v3/dist/cli/commands/claude-flow-setup.d.ts.map +1 -1
- package/v3/dist/cli/commands/claude-flow-setup.js +7 -5
- package/v3/dist/cli/commands/claude-flow-setup.js.map +1 -1
- package/v3/dist/cli/commands/hooks.d.ts.map +1 -1
- package/v3/dist/cli/commands/hooks.js +2 -1
- package/v3/dist/cli/commands/hooks.js.map +1 -1
- package/v3/dist/cli/commands/init.d.ts.map +1 -1
- package/v3/dist/cli/commands/init.js +2 -1
- package/v3/dist/cli/commands/init.js.map +1 -1
- package/v3/dist/cli/commands/learning-helpers.d.ts +101 -0
- package/v3/dist/cli/commands/learning-helpers.d.ts.map +1 -0
- package/v3/dist/cli/commands/learning-helpers.js +294 -0
- package/v3/dist/cli/commands/learning-helpers.js.map +1 -0
- package/v3/dist/cli/commands/learning.d.ts +1 -6
- package/v3/dist/cli/commands/learning.d.ts.map +1 -1
- package/v3/dist/cli/commands/learning.js +230 -839
- package/v3/dist/cli/commands/learning.js.map +1 -1
- package/v3/dist/cli/commands/qe-tools.d.ts.map +1 -1
- package/v3/dist/cli/commands/qe-tools.js +2 -1
- package/v3/dist/cli/commands/qe-tools.js.map +1 -1
- package/v3/dist/cli/commands/sync.d.ts.map +1 -1
- package/v3/dist/cli/commands/sync.js +5 -4
- package/v3/dist/cli/commands/sync.js.map +1 -1
- package/v3/dist/cli/commands/token-usage.d.ts.map +1 -1
- package/v3/dist/cli/commands/token-usage.js +2 -1
- package/v3/dist/cli/commands/token-usage.js.map +1 -1
- package/v3/dist/cli/commands/validate.d.ts.map +1 -1
- package/v3/dist/cli/commands/validate.js +3 -2
- package/v3/dist/cli/commands/validate.js.map +1 -1
- package/v3/dist/cli/config/cli-config.d.ts.map +1 -1
- package/v3/dist/cli/config/cli-config.js +2 -1
- package/v3/dist/cli/config/cli-config.js.map +1 -1
- package/v3/dist/cli/handlers/init-handler.d.ts.map +1 -1
- package/v3/dist/cli/handlers/init-handler.js +3 -2
- package/v3/dist/cli/handlers/init-handler.js.map +1 -1
- package/v3/dist/cli/helpers/safe-json.d.ts +4 -48
- package/v3/dist/cli/helpers/safe-json.d.ts.map +1 -1
- package/v3/dist/cli/helpers/safe-json.js +4 -68
- package/v3/dist/cli/helpers/safe-json.js.map +1 -1
- package/v3/dist/cli/index.js +3 -2
- package/v3/dist/cli/index.js.map +1 -1
- package/v3/dist/cli/scheduler/persistent-scheduler.d.ts.map +1 -1
- package/v3/dist/cli/scheduler/persistent-scheduler.js +4 -2
- package/v3/dist/cli/scheduler/persistent-scheduler.js.map +1 -1
- package/v3/dist/cli/wizards/test-wizard.d.ts.map +1 -1
- package/v3/dist/cli/wizards/test-wizard.js +2 -1
- package/v3/dist/cli/wizards/test-wizard.js.map +1 -1
- package/v3/dist/coordination/agent-teams/tracing.d.ts.map +1 -1
- package/v3/dist/coordination/agent-teams/tracing.js +2 -1
- package/v3/dist/coordination/agent-teams/tracing.js.map +1 -1
- package/v3/dist/coordination/circuit-breaker/breaker-registry.d.ts.map +1 -1
- package/v3/dist/coordination/circuit-breaker/breaker-registry.js +3 -2
- package/v3/dist/coordination/circuit-breaker/breaker-registry.js.map +1 -1
- package/v3/dist/coordination/circuit-breaker/domain-circuit-breaker.d.ts.map +1 -1
- package/v3/dist/coordination/circuit-breaker/domain-circuit-breaker.js +3 -2
- package/v3/dist/coordination/circuit-breaker/domain-circuit-breaker.js.map +1 -1
- package/v3/dist/coordination/consensus/consensus-engine.d.ts.map +1 -1
- package/v3/dist/coordination/consensus/consensus-engine.js +7 -6
- package/v3/dist/coordination/consensus/consensus-engine.js.map +1 -1
- package/v3/dist/coordination/consensus/model-provider.d.ts.map +1 -1
- package/v3/dist/coordination/consensus/model-provider.js +2 -1
- package/v3/dist/coordination/consensus/model-provider.js.map +1 -1
- package/v3/dist/coordination/consensus/providers/claude-provider.d.ts.map +1 -1
- package/v3/dist/coordination/consensus/providers/claude-provider.js +13 -12
- package/v3/dist/coordination/consensus/providers/claude-provider.js.map +1 -1
- package/v3/dist/coordination/consensus/providers/gemini-provider.d.ts.map +1 -1
- package/v3/dist/coordination/consensus/providers/gemini-provider.js +13 -12
- package/v3/dist/coordination/consensus/providers/gemini-provider.js.map +1 -1
- package/v3/dist/coordination/consensus/providers/native-learning-provider.d.ts.map +1 -1
- package/v3/dist/coordination/consensus/providers/native-learning-provider.js +3 -2
- package/v3/dist/coordination/consensus/providers/native-learning-provider.js.map +1 -1
- package/v3/dist/coordination/consensus/providers/ollama-provider.d.ts.map +1 -1
- package/v3/dist/coordination/consensus/providers/ollama-provider.js +3 -2
- package/v3/dist/coordination/consensus/providers/ollama-provider.js.map +1 -1
- package/v3/dist/coordination/consensus/providers/openai-provider.d.ts.map +1 -1
- package/v3/dist/coordination/consensus/providers/openai-provider.js +3 -2
- package/v3/dist/coordination/consensus/providers/openai-provider.js.map +1 -1
- package/v3/dist/coordination/consensus/providers/openrouter-provider.d.ts.map +1 -1
- package/v3/dist/coordination/consensus/providers/openrouter-provider.js +3 -2
- package/v3/dist/coordination/consensus/providers/openrouter-provider.js.map +1 -1
- package/v3/dist/coordination/dynamic-scaling/dynamic-scaler.d.ts.map +1 -1
- package/v3/dist/coordination/dynamic-scaling/dynamic-scaler.js +5 -4
- package/v3/dist/coordination/dynamic-scaling/dynamic-scaler.js.map +1 -1
- package/v3/dist/coordination/mincut/dream-integration.d.ts.map +1 -1
- package/v3/dist/coordination/mincut/dream-integration.js.map +1 -1
- package/v3/dist/coordination/mincut/mincut-health-monitor.d.ts +4 -2
- package/v3/dist/coordination/mincut/mincut-health-monitor.d.ts.map +1 -1
- package/v3/dist/coordination/mincut/mincut-health-monitor.js +13 -3
- package/v3/dist/coordination/mincut/mincut-health-monitor.js.map +1 -1
- package/v3/dist/coordination/mincut/mincut-persistence.d.ts.map +1 -1
- package/v3/dist/coordination/mincut/mincut-persistence.js +5 -4
- package/v3/dist/coordination/mincut/mincut-persistence.js.map +1 -1
- package/v3/dist/coordination/mincut/neural-goap.d.ts.map +1 -1
- package/v3/dist/coordination/mincut/neural-goap.js +2 -1
- package/v3/dist/coordination/mincut/neural-goap.js.map +1 -1
- package/v3/dist/coordination/mincut/queen-integration.d.ts.map +1 -1
- package/v3/dist/coordination/mincut/queen-integration.js +7 -2
- package/v3/dist/coordination/mincut/queen-integration.js.map +1 -1
- package/v3/dist/coordination/mincut/strange-loop.d.ts.map +1 -1
- package/v3/dist/coordination/mincut/strange-loop.js +10 -2
- package/v3/dist/coordination/mincut/strange-loop.js.map +1 -1
- package/v3/dist/coordination/mincut/time-crystal.d.ts.map +1 -1
- package/v3/dist/coordination/mincut/time-crystal.js +2 -1
- package/v3/dist/coordination/mincut/time-crystal.js.map +1 -1
- package/v3/dist/coordination/mixins/consensus-enabled-domain.d.ts +19 -3
- package/v3/dist/coordination/mixins/consensus-enabled-domain.d.ts.map +1 -1
- package/v3/dist/coordination/mixins/consensus-enabled-domain.js +6 -2
- package/v3/dist/coordination/mixins/consensus-enabled-domain.js.map +1 -1
- package/v3/dist/coordination/plugin.d.ts +1 -1
- package/v3/dist/coordination/plugin.d.ts.map +1 -1
- package/v3/dist/coordination/plugin.js +1 -1
- package/v3/dist/coordination/plugin.js.map +1 -1
- package/v3/dist/coordination/protocol-executor.d.ts.map +1 -1
- package/v3/dist/coordination/protocol-executor.js +4 -3
- package/v3/dist/coordination/protocol-executor.js.map +1 -1
- package/v3/dist/coordination/protocols/code-intelligence-index.d.ts +1 -1
- package/v3/dist/coordination/protocols/code-intelligence-index.d.ts.map +1 -1
- package/v3/dist/coordination/protocols/code-intelligence-index.js +22 -10
- package/v3/dist/coordination/protocols/code-intelligence-index.js.map +1 -1
- package/v3/dist/coordination/protocols/defect-investigation.d.ts +2 -2
- package/v3/dist/coordination/protocols/defect-investigation.d.ts.map +1 -1
- package/v3/dist/coordination/protocols/defect-investigation.js +16 -7
- package/v3/dist/coordination/protocols/defect-investigation.js.map +1 -1
- package/v3/dist/coordination/protocols/learning-consolidation.d.ts +1 -1
- package/v3/dist/coordination/protocols/learning-consolidation.d.ts.map +1 -1
- package/v3/dist/coordination/protocols/learning-consolidation.js +6 -5
- package/v3/dist/coordination/protocols/learning-consolidation.js.map +1 -1
- package/v3/dist/coordination/protocols/morning-sync.d.ts.map +1 -1
- package/v3/dist/coordination/protocols/morning-sync.js +2 -1
- package/v3/dist/coordination/protocols/morning-sync.js.map +1 -1
- package/v3/dist/coordination/protocols/quality-gate.d.ts.map +1 -1
- package/v3/dist/coordination/protocols/quality-gate.js +6 -5
- package/v3/dist/coordination/protocols/quality-gate.js.map +1 -1
- package/v3/dist/coordination/protocols/security-audit.d.ts +1 -1
- package/v3/dist/coordination/protocols/security-audit.d.ts.map +1 -1
- package/v3/dist/coordination/protocols/security-audit.js +35 -13
- package/v3/dist/coordination/protocols/security-audit.js.map +1 -1
- package/v3/dist/coordination/queen-coordinator.d.ts +26 -257
- package/v3/dist/coordination/queen-coordinator.d.ts.map +1 -1
- package/v3/dist/coordination/queen-coordinator.js +282 -1175
- package/v3/dist/coordination/queen-coordinator.js.map +1 -1
- package/v3/dist/coordination/queen-event-handlers.d.ts +61 -0
- package/v3/dist/coordination/queen-event-handlers.d.ts.map +1 -0
- package/v3/dist/coordination/queen-event-handlers.js +311 -0
- package/v3/dist/coordination/queen-event-handlers.js.map +1 -0
- package/v3/dist/coordination/queen-lifecycle.d.ts +61 -0
- package/v3/dist/coordination/queen-lifecycle.d.ts.map +1 -0
- package/v3/dist/coordination/queen-lifecycle.js +162 -0
- package/v3/dist/coordination/queen-lifecycle.js.map +1 -0
- package/v3/dist/coordination/queen-task-management.d.ts +84 -0
- package/v3/dist/coordination/queen-task-management.d.ts.map +1 -0
- package/v3/dist/coordination/queen-task-management.js +333 -0
- package/v3/dist/coordination/queen-task-management.js.map +1 -0
- package/v3/dist/coordination/queen-types.d.ts +175 -0
- package/v3/dist/coordination/queen-types.d.ts.map +1 -0
- package/v3/dist/coordination/queen-types.js +80 -0
- package/v3/dist/coordination/queen-types.js.map +1 -0
- package/v3/dist/coordination/queen-work-stealing.d.ts +33 -0
- package/v3/dist/coordination/queen-work-stealing.d.ts.map +1 -0
- package/v3/dist/coordination/queen-work-stealing.js +78 -0
- package/v3/dist/coordination/queen-work-stealing.js.map +1 -0
- package/v3/dist/coordination/result-saver.d.ts.map +1 -1
- package/v3/dist/coordination/result-saver.js +2 -1
- package/v3/dist/coordination/result-saver.js.map +1 -1
- package/v3/dist/coordination/task-executor.d.ts +45 -2
- package/v3/dist/coordination/task-executor.d.ts.map +1 -1
- package/v3/dist/coordination/task-executor.js +643 -570
- package/v3/dist/coordination/task-executor.js.map +1 -1
- package/v3/dist/coordination/workflow-builtin.d.ts +17 -0
- package/v3/dist/coordination/workflow-builtin.d.ts.map +1 -0
- package/v3/dist/coordination/workflow-builtin.js +648 -0
- package/v3/dist/coordination/workflow-builtin.js.map +1 -0
- package/v3/dist/coordination/workflow-orchestrator.d.ts +13 -300
- package/v3/dist/coordination/workflow-orchestrator.d.ts.map +1 -1
- package/v3/dist/coordination/workflow-orchestrator.js +142 -1009
- package/v3/dist/coordination/workflow-orchestrator.js.map +1 -1
- package/v3/dist/coordination/workflow-types.d.ts +250 -0
- package/v3/dist/coordination/workflow-types.d.ts.map +1 -0
- package/v3/dist/coordination/workflow-types.js +27 -0
- package/v3/dist/coordination/workflow-types.js.map +1 -0
- package/v3/dist/domains/base-domain-coordinator.d.ts +119 -0
- package/v3/dist/domains/base-domain-coordinator.d.ts.map +1 -0
- package/v3/dist/domains/base-domain-coordinator.js +200 -0
- package/v3/dist/domains/base-domain-coordinator.js.map +1 -0
- package/v3/dist/domains/chaos-resilience/coordinator.d.ts +12 -70
- package/v3/dist/domains/chaos-resilience/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/chaos-resilience/coordinator.js +25 -181
- package/v3/dist/domains/chaos-resilience/coordinator.js.map +1 -1
- package/v3/dist/domains/chaos-resilience/plugin.d.ts.map +1 -1
- package/v3/dist/domains/chaos-resilience/plugin.js +2 -1
- package/v3/dist/domains/chaos-resilience/plugin.js.map +1 -1
- package/v3/dist/domains/chaos-resilience/services/chaos-engineer.d.ts.map +1 -1
- package/v3/dist/domains/chaos-resilience/services/chaos-engineer.js +15 -13
- package/v3/dist/domains/chaos-resilience/services/chaos-engineer.js.map +1 -1
- package/v3/dist/domains/chaos-resilience/services/load-tester.d.ts.map +1 -1
- package/v3/dist/domains/chaos-resilience/services/load-tester.js +8 -7
- package/v3/dist/domains/chaos-resilience/services/load-tester.js.map +1 -1
- package/v3/dist/domains/chaos-resilience/services/performance-profiler.d.ts.map +1 -1
- package/v3/dist/domains/chaos-resilience/services/performance-profiler.js +7 -5
- package/v3/dist/domains/chaos-resilience/services/performance-profiler.js.map +1 -1
- package/v3/dist/domains/code-intelligence/coordinator-consensus.d.ts +33 -0
- package/v3/dist/domains/code-intelligence/coordinator-consensus.d.ts.map +1 -0
- package/v3/dist/domains/code-intelligence/coordinator-consensus.js +81 -0
- package/v3/dist/domains/code-intelligence/coordinator-consensus.js.map +1 -0
- package/v3/dist/domains/code-intelligence/coordinator-gnn.d.ts +44 -0
- package/v3/dist/domains/code-intelligence/coordinator-gnn.d.ts.map +1 -0
- package/v3/dist/domains/code-intelligence/coordinator-gnn.js +183 -0
- package/v3/dist/domains/code-intelligence/coordinator-gnn.js.map +1 -0
- package/v3/dist/domains/code-intelligence/coordinator-hypergraph.d.ts +40 -0
- package/v3/dist/domains/code-intelligence/coordinator-hypergraph.d.ts.map +1 -0
- package/v3/dist/domains/code-intelligence/coordinator-hypergraph.js +191 -0
- package/v3/dist/domains/code-intelligence/coordinator-hypergraph.js.map +1 -0
- package/v3/dist/domains/code-intelligence/coordinator.d.ts +17 -93
- package/v3/dist/domains/code-intelligence/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/code-intelligence/coordinator.js +46 -565
- package/v3/dist/domains/code-intelligence/coordinator.js.map +1 -1
- package/v3/dist/domains/code-intelligence/index.d.ts.map +1 -1
- package/v3/dist/domains/code-intelligence/index.js +10 -0
- package/v3/dist/domains/code-intelligence/index.js.map +1 -1
- package/v3/dist/domains/code-intelligence/plugin.d.ts.map +1 -1
- package/v3/dist/domains/code-intelligence/plugin.js +2 -1
- package/v3/dist/domains/code-intelligence/plugin.js.map +1 -1
- package/v3/dist/domains/code-intelligence/services/c4-model/index.d.ts +3 -3
- package/v3/dist/domains/code-intelligence/services/c4-model/index.d.ts.map +1 -1
- package/v3/dist/domains/code-intelligence/services/c4-model/index.js +2 -2
- package/v3/dist/domains/code-intelligence/services/c4-model/index.js.map +1 -1
- package/v3/dist/domains/code-intelligence/services/c4-model/types.d.ts +1 -1
- package/v3/dist/domains/code-intelligence/services/c4-model/types.d.ts.map +1 -1
- package/v3/dist/domains/code-intelligence/services/impact-analyzer.d.ts.map +1 -1
- package/v3/dist/domains/code-intelligence/services/impact-analyzer.js +3 -2
- package/v3/dist/domains/code-intelligence/services/impact-analyzer.js.map +1 -1
- package/v3/dist/domains/code-intelligence/services/knowledge-graph.d.ts.map +1 -1
- package/v3/dist/domains/code-intelligence/services/knowledge-graph.js +8 -6
- package/v3/dist/domains/code-intelligence/services/knowledge-graph.js.map +1 -1
- package/v3/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts.map +1 -1
- package/v3/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +3 -2
- package/v3/dist/domains/code-intelligence/services/metric-collector/loc-counter.js.map +1 -1
- package/v3/dist/domains/code-intelligence/services/metric-collector/test-counter.d.ts.map +1 -1
- package/v3/dist/domains/code-intelligence/services/metric-collector/test-counter.js +3 -2
- package/v3/dist/domains/code-intelligence/services/metric-collector/test-counter.js.map +1 -1
- package/v3/dist/domains/code-intelligence/services/product-factors-bridge.d.ts.map +1 -1
- package/v3/dist/domains/code-intelligence/services/product-factors-bridge.js +8 -6
- package/v3/dist/domains/code-intelligence/services/product-factors-bridge.js.map +1 -1
- package/v3/dist/domains/code-intelligence/services/semantic-analyzer.d.ts.map +1 -1
- package/v3/dist/domains/code-intelligence/services/semantic-analyzer.js +5 -4
- package/v3/dist/domains/code-intelligence/services/semantic-analyzer.js.map +1 -1
- package/v3/dist/domains/contract-testing/coordinator.d.ts +13 -89
- package/v3/dist/domains/contract-testing/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/contract-testing/coordinator.js +43 -215
- package/v3/dist/domains/contract-testing/coordinator.js.map +1 -1
- package/v3/dist/domains/contract-testing/plugin.d.ts.map +1 -1
- package/v3/dist/domains/contract-testing/plugin.js +5 -4
- package/v3/dist/domains/contract-testing/plugin.js.map +1 -1
- package/v3/dist/domains/contract-testing/services/api-compatibility.d.ts.map +1 -1
- package/v3/dist/domains/contract-testing/services/api-compatibility.js +7 -5
- package/v3/dist/domains/contract-testing/services/api-compatibility.js.map +1 -1
- package/v3/dist/domains/contract-testing/services/contract-validator.d.ts.map +1 -1
- package/v3/dist/domains/contract-testing/services/contract-validator.js +10 -8
- package/v3/dist/domains/contract-testing/services/contract-validator.js.map +1 -1
- package/v3/dist/domains/contract-testing/services/schema-validator.d.ts.map +1 -1
- package/v3/dist/domains/contract-testing/services/schema-validator.js +10 -8
- package/v3/dist/domains/contract-testing/services/schema-validator.js.map +1 -1
- package/v3/dist/domains/coverage-analysis/coordinator.d.ts +8 -59
- package/v3/dist/domains/coverage-analysis/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/coverage-analysis/coordinator.js +30 -138
- package/v3/dist/domains/coverage-analysis/coordinator.js.map +1 -1
- package/v3/dist/domains/coverage-analysis/index.js +7 -0
- package/v3/dist/domains/coverage-analysis/index.js.map +1 -1
- package/v3/dist/domains/coverage-analysis/services/coverage-analyzer.d.ts.map +1 -1
- package/v3/dist/domains/coverage-analysis/services/coverage-analyzer.js +5 -3
- package/v3/dist/domains/coverage-analysis/services/coverage-analyzer.js.map +1 -1
- package/v3/dist/domains/coverage-analysis/services/coverage-parser.d.ts.map +1 -1
- package/v3/dist/domains/coverage-analysis/services/coverage-parser.js +2 -1
- package/v3/dist/domains/coverage-analysis/services/coverage-parser.js.map +1 -1
- package/v3/dist/domains/coverage-analysis/services/gap-detector.d.ts.map +1 -1
- package/v3/dist/domains/coverage-analysis/services/gap-detector.js +6 -4
- package/v3/dist/domains/coverage-analysis/services/gap-detector.js.map +1 -1
- package/v3/dist/domains/coverage-analysis/services/ghost-coverage-analyzer.d.ts.map +1 -1
- package/v3/dist/domains/coverage-analysis/services/ghost-coverage-analyzer.js +5 -4
- package/v3/dist/domains/coverage-analysis/services/ghost-coverage-analyzer.js.map +1 -1
- package/v3/dist/domains/coverage-analysis/services/risk-scorer.d.ts.map +1 -1
- package/v3/dist/domains/coverage-analysis/services/risk-scorer.js +3 -2
- package/v3/dist/domains/coverage-analysis/services/risk-scorer.js.map +1 -1
- package/v3/dist/domains/coverage-analysis/services/sublinear-analyzer.d.ts.map +1 -1
- package/v3/dist/domains/coverage-analysis/services/sublinear-analyzer.js +4 -3
- package/v3/dist/domains/coverage-analysis/services/sublinear-analyzer.js.map +1 -1
- package/v3/dist/domains/defect-intelligence/coordinator.d.ts +10 -58
- package/v3/dist/domains/defect-intelligence/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/defect-intelligence/coordinator.js +50 -171
- package/v3/dist/domains/defect-intelligence/coordinator.js.map +1 -1
- package/v3/dist/domains/defect-intelligence/plugin.d.ts.map +1 -1
- package/v3/dist/domains/defect-intelligence/plugin.js +2 -1
- package/v3/dist/domains/defect-intelligence/plugin.js.map +1 -1
- package/v3/dist/domains/defect-intelligence/services/causal-root-cause-analyzer.d.ts.map +1 -1
- package/v3/dist/domains/defect-intelligence/services/causal-root-cause-analyzer.js +4 -3
- package/v3/dist/domains/defect-intelligence/services/causal-root-cause-analyzer.js.map +1 -1
- package/v3/dist/domains/defect-intelligence/services/defect-predictor.d.ts.map +1 -1
- package/v3/dist/domains/defect-intelligence/services/defect-predictor.js +6 -4
- package/v3/dist/domains/defect-intelligence/services/defect-predictor.js.map +1 -1
- package/v3/dist/domains/defect-intelligence/services/pattern-learner.d.ts.map +1 -1
- package/v3/dist/domains/defect-intelligence/services/pattern-learner.js +4 -3
- package/v3/dist/domains/defect-intelligence/services/pattern-learner.js.map +1 -1
- package/v3/dist/domains/defect-intelligence/services/root-cause-analyzer.d.ts.map +1 -1
- package/v3/dist/domains/defect-intelligence/services/root-cause-analyzer.js +6 -4
- package/v3/dist/domains/defect-intelligence/services/root-cause-analyzer.js.map +1 -1
- package/v3/dist/domains/domain-interface.d.ts +6 -219
- package/v3/dist/domains/domain-interface.d.ts.map +1 -1
- package/v3/dist/domains/domain-interface.js +6 -312
- package/v3/dist/domains/domain-interface.js.map +1 -1
- package/v3/dist/domains/enterprise-integration/coordinator.d.ts +11 -37
- package/v3/dist/domains/enterprise-integration/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/enterprise-integration/coordinator.js +39 -148
- package/v3/dist/domains/enterprise-integration/coordinator.js.map +1 -1
- package/v3/dist/domains/enterprise-integration/plugin.d.ts.map +1 -1
- package/v3/dist/domains/enterprise-integration/plugin.js +2 -1
- package/v3/dist/domains/enterprise-integration/plugin.js.map +1 -1
- package/v3/dist/domains/enterprise-integration/services/esb-middleware-service.d.ts.map +1 -1
- package/v3/dist/domains/enterprise-integration/services/esb-middleware-service.js +7 -5
- package/v3/dist/domains/enterprise-integration/services/esb-middleware-service.js.map +1 -1
- package/v3/dist/domains/enterprise-integration/services/message-broker-service.d.ts.map +1 -1
- package/v3/dist/domains/enterprise-integration/services/message-broker-service.js +11 -9
- package/v3/dist/domains/enterprise-integration/services/message-broker-service.js.map +1 -1
- package/v3/dist/domains/enterprise-integration/services/odata-service.d.ts.map +1 -1
- package/v3/dist/domains/enterprise-integration/services/odata-service.js +4 -3
- package/v3/dist/domains/enterprise-integration/services/odata-service.js.map +1 -1
- package/v3/dist/domains/enterprise-integration/services/sap-integration-service.d.ts.map +1 -1
- package/v3/dist/domains/enterprise-integration/services/sap-integration-service.js +5 -3
- package/v3/dist/domains/enterprise-integration/services/sap-integration-service.js.map +1 -1
- package/v3/dist/domains/enterprise-integration/services/soap-wsdl-service.d.ts.map +1 -1
- package/v3/dist/domains/enterprise-integration/services/soap-wsdl-service.js +4 -3
- package/v3/dist/domains/enterprise-integration/services/soap-wsdl-service.js.map +1 -1
- package/v3/dist/domains/enterprise-integration/services/sod-analysis-service.d.ts.map +1 -1
- package/v3/dist/domains/enterprise-integration/services/sod-analysis-service.js +3 -2
- package/v3/dist/domains/enterprise-integration/services/sod-analysis-service.js.map +1 -1
- package/v3/dist/domains/learning-optimization/coordinator-consensus.d.ts +37 -0
- package/v3/dist/domains/learning-optimization/coordinator-consensus.d.ts.map +1 -0
- package/v3/dist/domains/learning-optimization/coordinator-consensus.js +82 -0
- package/v3/dist/domains/learning-optimization/coordinator-consensus.js.map +1 -0
- package/v3/dist/domains/learning-optimization/coordinator-dream.d.ts +32 -0
- package/v3/dist/domains/learning-optimization/coordinator-dream.d.ts.map +1 -0
- package/v3/dist/domains/learning-optimization/coordinator-dream.js +43 -0
- package/v3/dist/domains/learning-optimization/coordinator-dream.js.map +1 -0
- package/v3/dist/domains/learning-optimization/coordinator-helpers.d.ts +56 -0
- package/v3/dist/domains/learning-optimization/coordinator-helpers.d.ts.map +1 -0
- package/v3/dist/domains/learning-optimization/coordinator-helpers.js +142 -0
- package/v3/dist/domains/learning-optimization/coordinator-helpers.js.map +1 -0
- package/v3/dist/domains/learning-optimization/coordinator-sona-methods.d.ts +64 -0
- package/v3/dist/domains/learning-optimization/coordinator-sona-methods.d.ts.map +1 -0
- package/v3/dist/domains/learning-optimization/coordinator-sona-methods.js +73 -0
- package/v3/dist/domains/learning-optimization/coordinator-sona-methods.js.map +1 -0
- package/v3/dist/domains/learning-optimization/coordinator.d.ts +17 -82
- package/v3/dist/domains/learning-optimization/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/learning-optimization/coordinator.js +36 -320
- package/v3/dist/domains/learning-optimization/coordinator.js.map +1 -1
- package/v3/dist/domains/learning-optimization/plugin.d.ts.map +1 -1
- package/v3/dist/domains/learning-optimization/plugin.js +2 -1
- package/v3/dist/domains/learning-optimization/plugin.js.map +1 -1
- package/v3/dist/domains/learning-optimization/services/learning-coordinator.d.ts.map +1 -1
- package/v3/dist/domains/learning-optimization/services/learning-coordinator.js +11 -10
- package/v3/dist/domains/learning-optimization/services/learning-coordinator.js.map +1 -1
- package/v3/dist/domains/learning-optimization/services/metrics-optimizer.d.ts.map +1 -1
- package/v3/dist/domains/learning-optimization/services/metrics-optimizer.js +8 -7
- package/v3/dist/domains/learning-optimization/services/metrics-optimizer.js.map +1 -1
- package/v3/dist/domains/learning-optimization/services/production-intel.d.ts.map +1 -1
- package/v3/dist/domains/learning-optimization/services/production-intel.js +11 -10
- package/v3/dist/domains/learning-optimization/services/production-intel.js.map +1 -1
- package/v3/dist/domains/learning-optimization/services/transfer-specialist.d.ts.map +1 -1
- package/v3/dist/domains/learning-optimization/services/transfer-specialist.js +8 -7
- package/v3/dist/domains/learning-optimization/services/transfer-specialist.js.map +1 -1
- package/v3/dist/domains/quality-assessment/coordinator-claim-verifier.d.ts +41 -0
- package/v3/dist/domains/quality-assessment/coordinator-claim-verifier.d.ts.map +1 -0
- package/v3/dist/domains/quality-assessment/coordinator-claim-verifier.js +157 -0
- package/v3/dist/domains/quality-assessment/coordinator-claim-verifier.js.map +1 -0
- package/v3/dist/domains/quality-assessment/coordinator-gate-evaluation.d.ts +26 -0
- package/v3/dist/domains/quality-assessment/coordinator-gate-evaluation.d.ts.map +1 -0
- package/v3/dist/domains/quality-assessment/coordinator-gate-evaluation.js +135 -0
- package/v3/dist/domains/quality-assessment/coordinator-gate-evaluation.js.map +1 -0
- package/v3/dist/domains/quality-assessment/coordinator-reports.d.ts +90 -0
- package/v3/dist/domains/quality-assessment/coordinator-reports.d.ts.map +1 -0
- package/v3/dist/domains/quality-assessment/coordinator-reports.js +265 -0
- package/v3/dist/domains/quality-assessment/coordinator-reports.js.map +1 -0
- package/v3/dist/domains/quality-assessment/coordinator-rl-integration.d.ts +92 -0
- package/v3/dist/domains/quality-assessment/coordinator-rl-integration.d.ts.map +1 -0
- package/v3/dist/domains/quality-assessment/coordinator-rl-integration.js +321 -0
- package/v3/dist/domains/quality-assessment/coordinator-rl-integration.js.map +1 -0
- package/v3/dist/domains/quality-assessment/coordinator.d.ts +18 -127
- package/v3/dist/domains/quality-assessment/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/quality-assessment/coordinator.js +58 -1022
- package/v3/dist/domains/quality-assessment/coordinator.js.map +1 -1
- package/v3/dist/domains/quality-assessment/index.d.ts.map +1 -1
- package/v3/dist/domains/quality-assessment/index.js +10 -0
- package/v3/dist/domains/quality-assessment/index.js.map +1 -1
- package/v3/dist/domains/quality-assessment/plugin.d.ts.map +1 -1
- package/v3/dist/domains/quality-assessment/plugin.js +2 -1
- package/v3/dist/domains/quality-assessment/plugin.js.map +1 -1
- package/v3/dist/domains/quality-assessment/services/coherence-gate.d.ts.map +1 -1
- package/v3/dist/domains/quality-assessment/services/coherence-gate.js +2 -1
- package/v3/dist/domains/quality-assessment/services/coherence-gate.js.map +1 -1
- package/v3/dist/domains/quality-assessment/services/deployment-advisor.d.ts.map +1 -1
- package/v3/dist/domains/quality-assessment/services/deployment-advisor.js +5 -3
- package/v3/dist/domains/quality-assessment/services/deployment-advisor.js.map +1 -1
- package/v3/dist/domains/quality-assessment/services/quality-analyzer.d.ts.map +1 -1
- package/v3/dist/domains/quality-assessment/services/quality-analyzer.js +6 -4
- package/v3/dist/domains/quality-assessment/services/quality-analyzer.js.map +1 -1
- package/v3/dist/domains/quality-assessment/services/quality-gate.d.ts.map +1 -1
- package/v3/dist/domains/quality-assessment/services/quality-gate.js +3 -2
- package/v3/dist/domains/quality-assessment/services/quality-gate.js.map +1 -1
- package/v3/dist/domains/requirements-validation/coordinator.d.ts +17 -61
- package/v3/dist/domains/requirements-validation/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/requirements-validation/coordinator.js +25 -175
- package/v3/dist/domains/requirements-validation/coordinator.js.map +1 -1
- package/v3/dist/domains/requirements-validation/plugin.d.ts.map +1 -1
- package/v3/dist/domains/requirements-validation/plugin.js +2 -1
- package/v3/dist/domains/requirements-validation/plugin.js.map +1 -1
- package/v3/dist/domains/requirements-validation/qcsd-ideation-plugin.d.ts.map +1 -1
- package/v3/dist/domains/requirements-validation/qcsd-ideation-plugin.js +12 -11
- package/v3/dist/domains/requirements-validation/qcsd-ideation-plugin.js.map +1 -1
- package/v3/dist/domains/requirements-validation/qcsd-refinement-plugin.d.ts.map +1 -1
- package/v3/dist/domains/requirements-validation/qcsd-refinement-plugin.js +11 -10
- package/v3/dist/domains/requirements-validation/qcsd-refinement-plugin.js.map +1 -1
- package/v3/dist/domains/requirements-validation/services/bdd-scenario-writer.d.ts.map +1 -1
- package/v3/dist/domains/requirements-validation/services/bdd-scenario-writer.js +4 -3
- package/v3/dist/domains/requirements-validation/services/bdd-scenario-writer.js.map +1 -1
- package/v3/dist/domains/requirements-validation/services/product-factors-assessment/code-intelligence/codebase-analyzer.d.ts.map +1 -1
- package/v3/dist/domains/requirements-validation/services/product-factors-assessment/code-intelligence/codebase-analyzer.js +3 -2
- package/v3/dist/domains/requirements-validation/services/product-factors-assessment/code-intelligence/codebase-analyzer.js.map +1 -1
- package/v3/dist/domains/requirements-validation/services/requirements-validator.d.ts.map +1 -1
- package/v3/dist/domains/requirements-validation/services/requirements-validator.js +7 -5
- package/v3/dist/domains/requirements-validation/services/requirements-validator.js.map +1 -1
- package/v3/dist/domains/requirements-validation/services/testability-scorer.d.ts.map +1 -1
- package/v3/dist/domains/requirements-validation/services/testability-scorer.js +4 -3
- package/v3/dist/domains/requirements-validation/services/testability-scorer.js.map +1 -1
- package/v3/dist/domains/security-compliance/coordinator.d.ts +12 -58
- package/v3/dist/domains/security-compliance/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/security-compliance/coordinator.js +22 -164
- package/v3/dist/domains/security-compliance/coordinator.js.map +1 -1
- package/v3/dist/domains/security-compliance/index.d.ts.map +1 -1
- package/v3/dist/domains/security-compliance/index.js +14 -0
- package/v3/dist/domains/security-compliance/index.js.map +1 -1
- package/v3/dist/domains/security-compliance/plugin.d.ts.map +1 -1
- package/v3/dist/domains/security-compliance/plugin.js +2 -1
- package/v3/dist/domains/security-compliance/plugin.js.map +1 -1
- package/v3/dist/domains/security-compliance/services/compliance-validator.d.ts.map +1 -1
- package/v3/dist/domains/security-compliance/services/compliance-validator.js +6 -5
- package/v3/dist/domains/security-compliance/services/compliance-validator.js.map +1 -1
- package/v3/dist/domains/security-compliance/services/scanners/dast-helpers.d.ts.map +1 -1
- package/v3/dist/domains/security-compliance/services/scanners/dast-helpers.js +2 -1
- package/v3/dist/domains/security-compliance/services/scanners/dast-helpers.js.map +1 -1
- package/v3/dist/domains/security-compliance/services/scanners/dast-scanner.d.ts +1 -1
- package/v3/dist/domains/security-compliance/services/scanners/dast-scanner.d.ts.map +1 -1
- package/v3/dist/domains/security-compliance/services/scanners/dast-scanner.js +4 -3
- package/v3/dist/domains/security-compliance/services/scanners/dast-scanner.js.map +1 -1
- package/v3/dist/domains/security-compliance/services/scanners/dependency-scanner.d.ts +1 -1
- package/v3/dist/domains/security-compliance/services/scanners/dependency-scanner.d.ts.map +1 -1
- package/v3/dist/domains/security-compliance/services/scanners/dependency-scanner.js +7 -5
- package/v3/dist/domains/security-compliance/services/scanners/dependency-scanner.js.map +1 -1
- package/v3/dist/domains/security-compliance/services/scanners/sast-scanner.d.ts +2 -2
- package/v3/dist/domains/security-compliance/services/scanners/sast-scanner.d.ts.map +1 -1
- package/v3/dist/domains/security-compliance/services/scanners/sast-scanner.js +6 -4
- package/v3/dist/domains/security-compliance/services/scanners/sast-scanner.js.map +1 -1
- package/v3/dist/domains/security-compliance/services/scanners/scanner-orchestrator.d.ts +2 -2
- package/v3/dist/domains/security-compliance/services/scanners/scanner-orchestrator.d.ts.map +1 -1
- package/v3/dist/domains/security-compliance/services/scanners/scanner-orchestrator.js +3 -2
- package/v3/dist/domains/security-compliance/services/scanners/scanner-orchestrator.js.map +1 -1
- package/v3/dist/domains/security-compliance/services/scanners/scanner-types.d.ts +2 -2
- package/v3/dist/domains/security-compliance/services/scanners/scanner-types.d.ts.map +1 -1
- package/v3/dist/domains/security-compliance/services/security-auditor-dast.d.ts +11 -0
- package/v3/dist/domains/security-compliance/services/security-auditor-dast.d.ts.map +1 -0
- package/v3/dist/domains/security-compliance/services/security-auditor-dast.js +284 -0
- package/v3/dist/domains/security-compliance/services/security-auditor-dast.js.map +1 -0
- package/v3/dist/domains/security-compliance/services/security-auditor-reports.d.ts +44 -0
- package/v3/dist/domains/security-compliance/services/security-auditor-reports.d.ts.map +1 -0
- package/v3/dist/domains/security-compliance/services/security-auditor-reports.js +193 -0
- package/v3/dist/domains/security-compliance/services/security-auditor-reports.js.map +1 -0
- package/v3/dist/domains/security-compliance/services/security-auditor-sast.d.ts +27 -0
- package/v3/dist/domains/security-compliance/services/security-auditor-sast.d.ts.map +1 -0
- package/v3/dist/domains/security-compliance/services/security-auditor-sast.js +279 -0
- package/v3/dist/domains/security-compliance/services/security-auditor-sast.js.map +1 -0
- package/v3/dist/domains/security-compliance/services/security-auditor-secrets.d.ts +34 -0
- package/v3/dist/domains/security-compliance/services/security-auditor-secrets.d.ts.map +1 -0
- package/v3/dist/domains/security-compliance/services/security-auditor-secrets.js +236 -0
- package/v3/dist/domains/security-compliance/services/security-auditor-secrets.js.map +1 -0
- package/v3/dist/domains/security-compliance/services/security-auditor-types.d.ts +93 -0
- package/v3/dist/domains/security-compliance/services/security-auditor-types.d.ts.map +1 -0
- package/v3/dist/domains/security-compliance/services/security-auditor-types.js +50 -0
- package/v3/dist/domains/security-compliance/services/security-auditor-types.js.map +1 -0
- package/v3/dist/domains/security-compliance/services/security-auditor.d.ts +12 -132
- package/v3/dist/domains/security-compliance/services/security-auditor.d.ts.map +1 -1
- package/v3/dist/domains/security-compliance/services/security-auditor.js +71 -1188
- package/v3/dist/domains/security-compliance/services/security-auditor.js.map +1 -1
- package/v3/dist/domains/security-compliance/services/semgrep-integration.d.ts.map +1 -1
- package/v3/dist/domains/security-compliance/services/semgrep-integration.js +4 -2
- package/v3/dist/domains/security-compliance/services/semgrep-integration.js.map +1 -1
- package/v3/dist/domains/test-execution/coordinator.d.ts +8 -60
- package/v3/dist/domains/test-execution/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/coordinator.js +19 -132
- package/v3/dist/domains/test-execution/coordinator.js.map +1 -1
- package/v3/dist/domains/test-execution/services/auth-state-manager.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/services/auth-state-manager.js +2 -1
- package/v3/dist/domains/test-execution/services/auth-state-manager.js.map +1 -1
- package/v3/dist/domains/test-execution/services/e2e/assertion-handlers.d.ts +2 -2
- package/v3/dist/domains/test-execution/services/e2e/assertion-handlers.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/services/e2e/browser-orchestrator.d.ts +2 -2
- package/v3/dist/domains/test-execution/services/e2e/browser-orchestrator.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/services/e2e/browser-orchestrator.js +2 -1
- package/v3/dist/domains/test-execution/services/e2e/browser-orchestrator.js.map +1 -1
- package/v3/dist/domains/test-execution/services/e2e/e2e-coordinator.d.ts +2 -2
- package/v3/dist/domains/test-execution/services/e2e/e2e-coordinator.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/services/e2e/e2e-coordinator.js +3 -2
- package/v3/dist/domains/test-execution/services/e2e/e2e-coordinator.js.map +1 -1
- package/v3/dist/domains/test-execution/services/e2e/result-collector.d.ts +1 -1
- package/v3/dist/domains/test-execution/services/e2e/result-collector.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/services/e2e/step-executors.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/services/e2e/step-executors.js +2 -1
- package/v3/dist/domains/test-execution/services/e2e/step-executors.js.map +1 -1
- package/v3/dist/domains/test-execution/services/e2e/step-retry-handler.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/services/e2e/step-retry-handler.js +3 -2
- package/v3/dist/domains/test-execution/services/e2e/step-retry-handler.js.map +1 -1
- package/v3/dist/domains/test-execution/services/e2e/types.d.ts +2 -2
- package/v3/dist/domains/test-execution/services/e2e/types.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/services/e2e/wait-condition-handler.d.ts +1 -1
- package/v3/dist/domains/test-execution/services/e2e/wait-condition-handler.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/services/flaky-detector.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/services/flaky-detector.js +7 -5
- package/v3/dist/domains/test-execution/services/flaky-detector.js.map +1 -1
- package/v3/dist/domains/test-execution/services/retry-handler.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/services/retry-handler.js +8 -6
- package/v3/dist/domains/test-execution/services/retry-handler.js.map +1 -1
- package/v3/dist/domains/test-execution/services/test-executor.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/services/test-executor.js +8 -6
- package/v3/dist/domains/test-execution/services/test-executor.js.map +1 -1
- package/v3/dist/domains/test-execution/services/test-prioritizer.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/services/test-prioritizer.js +2 -1
- package/v3/dist/domains/test-execution/services/test-prioritizer.js.map +1 -1
- package/v3/dist/domains/test-execution/services/user-flow-generator.d.ts +28 -0
- package/v3/dist/domains/test-execution/services/user-flow-generator.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/services/user-flow-generator.js +156 -189
- package/v3/dist/domains/test-execution/services/user-flow-generator.js.map +1 -1
- package/v3/dist/domains/test-generation/coordinator.d.ts +14 -78
- package/v3/dist/domains/test-generation/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/test-generation/coordinator.js +58 -202
- package/v3/dist/domains/test-generation/coordinator.js.map +1 -1
- package/v3/dist/domains/test-generation/generators/base-test-generator.d.ts +10 -0
- package/v3/dist/domains/test-generation/generators/base-test-generator.d.ts.map +1 -1
- package/v3/dist/domains/test-generation/generators/base-test-generator.js +37 -30
- package/v3/dist/domains/test-generation/generators/base-test-generator.js.map +1 -1
- package/v3/dist/domains/test-generation/index.d.ts.map +1 -1
- package/v3/dist/domains/test-generation/index.js +10 -0
- package/v3/dist/domains/test-generation/index.js.map +1 -1
- package/v3/dist/domains/test-generation/plugin.d.ts.map +1 -1
- package/v3/dist/domains/test-generation/plugin.js +2 -1
- package/v3/dist/domains/test-generation/plugin.js.map +1 -1
- package/v3/dist/domains/test-generation/services/code-transform-integration.d.ts.map +1 -1
- package/v3/dist/domains/test-generation/services/code-transform-integration.js +2 -1
- package/v3/dist/domains/test-generation/services/code-transform-integration.js.map +1 -1
- package/v3/dist/domains/test-generation/services/pattern-matcher.d.ts +10 -0
- package/v3/dist/domains/test-generation/services/pattern-matcher.d.ts.map +1 -1
- package/v3/dist/domains/test-generation/services/pattern-matcher.js +43 -41
- package/v3/dist/domains/test-generation/services/pattern-matcher.js.map +1 -1
- package/v3/dist/domains/test-generation/services/test-generator.d.ts.map +1 -1
- package/v3/dist/domains/test-generation/services/test-generator.js +47 -17
- package/v3/dist/domains/test-generation/services/test-generator.js.map +1 -1
- package/v3/dist/domains/visual-accessibility/coordinator.d.ts +17 -60
- package/v3/dist/domains/visual-accessibility/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/visual-accessibility/coordinator.js +32 -183
- package/v3/dist/domains/visual-accessibility/coordinator.js.map +1 -1
- package/v3/dist/domains/visual-accessibility/plugin.d.ts.map +1 -1
- package/v3/dist/domains/visual-accessibility/plugin.js +4 -3
- package/v3/dist/domains/visual-accessibility/plugin.js.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/accessibility-tester-browser.d.ts +114 -0
- package/v3/dist/domains/visual-accessibility/services/accessibility-tester-browser.d.ts.map +1 -0
- package/v3/dist/domains/visual-accessibility/services/accessibility-tester-browser.js +578 -0
- package/v3/dist/domains/visual-accessibility/services/accessibility-tester-browser.js.map +1 -0
- package/v3/dist/domains/visual-accessibility/services/accessibility-tester-heuristics.d.ts +54 -0
- package/v3/dist/domains/visual-accessibility/services/accessibility-tester-heuristics.d.ts.map +1 -0
- package/v3/dist/domains/visual-accessibility/services/accessibility-tester-heuristics.js +403 -0
- package/v3/dist/domains/visual-accessibility/services/accessibility-tester-heuristics.js.map +1 -0
- package/v3/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +1 -314
- package/v3/dist/domains/visual-accessibility/services/accessibility-tester.d.ts.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/accessibility-tester.js +79 -1467
- package/v3/dist/domains/visual-accessibility/services/accessibility-tester.js.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/axe-core-audit.d.ts.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/axe-core-audit.js +2 -1
- package/v3/dist/domains/visual-accessibility/services/axe-core-audit.js.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/axe-core-integration.d.ts.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/axe-core-integration.js +5 -4
- package/v3/dist/domains/visual-accessibility/services/axe-core-integration.js.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/browser-security-scanner.d.ts.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/browser-security-scanner.js +5 -4
- package/v3/dist/domains/visual-accessibility/services/browser-security-scanner.js.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/browser-swarm-coordinator.d.ts.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/browser-swarm-coordinator.js +8 -7
- package/v3/dist/domains/visual-accessibility/services/browser-swarm-coordinator.js.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/eu-compliance.d.ts.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/eu-compliance.js +2 -1
- package/v3/dist/domains/visual-accessibility/services/eu-compliance.js.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/responsive-tester.d.ts.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/responsive-tester.js +5 -4
- package/v3/dist/domains/visual-accessibility/services/responsive-tester.js.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/viewport-capture.d.ts.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/viewport-capture.js +7 -6
- package/v3/dist/domains/visual-accessibility/services/viewport-capture.js.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/visual-regression.d.ts.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/visual-regression.js +11 -10
- package/v3/dist/domains/visual-accessibility/services/visual-regression.js.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/visual-tester.d.ts.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/visual-tester.js +7 -6
- package/v3/dist/domains/visual-accessibility/services/visual-tester.js.map +1 -1
- package/v3/dist/early-exit/early-exit-controller.d.ts.map +1 -1
- package/v3/dist/early-exit/early-exit-controller.js +4 -3
- package/v3/dist/early-exit/early-exit-controller.js.map +1 -1
- package/v3/dist/feedback/coverage-learner.d.ts.map +1 -1
- package/v3/dist/feedback/coverage-learner.js +7 -5
- package/v3/dist/feedback/coverage-learner.js.map +1 -1
- package/v3/dist/feedback/test-outcome-tracker.d.ts.map +1 -1
- package/v3/dist/feedback/test-outcome-tracker.js +6 -4
- package/v3/dist/feedback/test-outcome-tracker.js.map +1 -1
- package/v3/dist/governance/adversarial-defense-integration.d.ts +0 -18
- package/v3/dist/governance/adversarial-defense-integration.d.ts.map +1 -1
- package/v3/dist/governance/adversarial-defense-integration.js +2 -1
- package/v3/dist/governance/adversarial-defense-integration.js.map +1 -1
- package/v3/dist/governance/compliance-reporter.d.ts +0 -16
- package/v3/dist/governance/compliance-reporter.d.ts.map +1 -1
- package/v3/dist/governance/compliance-reporter.js +6 -8
- package/v3/dist/governance/compliance-reporter.js.map +1 -1
- package/v3/dist/governance/continue-gate-integration.d.ts.map +1 -1
- package/v3/dist/governance/continue-gate-integration.js +3 -2
- package/v3/dist/governance/continue-gate-integration.js.map +1 -1
- package/v3/dist/governance/evolution-pipeline-integration.d.ts.map +1 -1
- package/v3/dist/governance/evolution-pipeline-integration.js +3 -2
- package/v3/dist/governance/evolution-pipeline-integration.js.map +1 -1
- package/v3/dist/governance/proof-envelope-integration.d.ts.map +1 -1
- package/v3/dist/governance/proof-envelope-integration.js +4 -4
- package/v3/dist/governance/proof-envelope-integration.js.map +1 -1
- package/v3/dist/governance/shard-embeddings.d.ts.map +1 -1
- package/v3/dist/governance/shard-embeddings.js +16 -2
- package/v3/dist/governance/shard-embeddings.js.map +1 -1
- package/v3/dist/governance/shard-retriever-integration.d.ts.map +1 -1
- package/v3/dist/governance/shard-retriever-integration.js +4 -3
- package/v3/dist/governance/shard-retriever-integration.js.map +1 -1
- package/v3/dist/governance/wasm-kernel-integration.d.ts.map +1 -1
- package/v3/dist/governance/wasm-kernel-integration.js +4 -2
- package/v3/dist/governance/wasm-kernel-integration.js.map +1 -1
- package/v3/dist/hooks/reasoning-bank-pattern-store.d.ts.map +1 -1
- package/v3/dist/hooks/reasoning-bank-pattern-store.js +3 -2
- package/v3/dist/hooks/reasoning-bank-pattern-store.js.map +1 -1
- package/v3/dist/hooks/task-completed-hook.d.ts.map +1 -1
- package/v3/dist/hooks/task-completed-hook.js +3 -2
- package/v3/dist/hooks/task-completed-hook.js.map +1 -1
- package/v3/dist/init/agents-installer.d.ts.map +1 -1
- package/v3/dist/init/agents-installer.js +2 -1
- package/v3/dist/init/agents-installer.js.map +1 -1
- package/v3/dist/init/enhancements/claude-flow-adapter.d.ts.map +1 -1
- package/v3/dist/init/enhancements/claude-flow-adapter.js +3 -2
- package/v3/dist/init/enhancements/claude-flow-adapter.js.map +1 -1
- package/v3/dist/init/fleet-integration.d.ts.map +1 -1
- package/v3/dist/init/fleet-integration.js +2 -1
- package/v3/dist/init/fleet-integration.js.map +1 -1
- package/v3/dist/init/governance-installer.d.ts.map +1 -1
- package/v3/dist/init/governance-installer.js +5 -4
- package/v3/dist/init/governance-installer.js.map +1 -1
- package/v3/dist/init/init-wizard-hooks.d.ts +26 -0
- package/v3/dist/init/init-wizard-hooks.d.ts.map +1 -0
- package/v3/dist/init/init-wizard-hooks.js +555 -0
- package/v3/dist/init/init-wizard-hooks.js.map +1 -0
- package/v3/dist/init/init-wizard-migration.d.ts +52 -0
- package/v3/dist/init/init-wizard-migration.d.ts.map +1 -0
- package/v3/dist/init/init-wizard-migration.js +349 -0
- package/v3/dist/init/init-wizard-migration.js.map +1 -0
- package/v3/dist/init/init-wizard-steps.d.ts +68 -0
- package/v3/dist/init/init-wizard-steps.d.ts.map +1 -0
- package/v3/dist/init/init-wizard-steps.js +457 -0
- package/v3/dist/init/init-wizard-steps.js.map +1 -0
- package/v3/dist/init/init-wizard.d.ts +8 -130
- package/v3/dist/init/init-wizard.d.ts.map +1 -1
- package/v3/dist/init/init-wizard.js +108 -1528
- package/v3/dist/init/init-wizard.js.map +1 -1
- package/v3/dist/init/migration/config-migrator.d.ts.map +1 -1
- package/v3/dist/init/migration/config-migrator.js +2 -1
- package/v3/dist/init/migration/config-migrator.js.map +1 -1
- package/v3/dist/init/migration/data-migrator.d.ts.map +1 -1
- package/v3/dist/init/migration/data-migrator.js +10 -9
- package/v3/dist/init/migration/data-migrator.js.map +1 -1
- package/v3/dist/init/migration/detector.d.ts.map +1 -1
- package/v3/dist/init/migration/detector.js +2 -1
- package/v3/dist/init/migration/detector.js.map +1 -1
- package/v3/dist/init/n8n-installer.d.ts.map +1 -1
- package/v3/dist/init/n8n-installer.js +4 -3
- package/v3/dist/init/n8n-installer.js.map +1 -1
- package/v3/dist/init/orchestrator.d.ts.map +1 -1
- package/v3/dist/init/orchestrator.js +2 -1
- package/v3/dist/init/orchestrator.js.map +1 -1
- package/v3/dist/init/phases/01-detection.d.ts.map +1 -1
- package/v3/dist/init/phases/01-detection.js +2 -1
- package/v3/dist/init/phases/01-detection.js.map +1 -1
- package/v3/dist/init/phases/06-code-intelligence.d.ts.map +1 -1
- package/v3/dist/init/phases/06-code-intelligence.js +2 -1
- package/v3/dist/init/phases/06-code-intelligence.js.map +1 -1
- package/v3/dist/init/phases/07-hooks.d.ts.map +1 -1
- package/v3/dist/init/phases/07-hooks.js +2 -1
- package/v3/dist/init/phases/07-hooks.js.map +1 -1
- package/v3/dist/init/phases/08-mcp.d.ts.map +1 -1
- package/v3/dist/init/phases/08-mcp.js +3 -2
- package/v3/dist/init/phases/08-mcp.js.map +1 -1
- package/v3/dist/init/phases/phase-interface.d.ts.map +1 -1
- package/v3/dist/init/phases/phase-interface.js +3 -2
- package/v3/dist/init/phases/phase-interface.js.map +1 -1
- package/v3/dist/init/project-analyzer.d.ts.map +1 -1
- package/v3/dist/init/project-analyzer.js +3 -2
- package/v3/dist/init/project-analyzer.js.map +1 -1
- package/v3/dist/init/skills-installer.d.ts.map +1 -1
- package/v3/dist/init/skills-installer.js +2 -1
- package/v3/dist/init/skills-installer.js.map +1 -1
- package/v3/dist/integrations/agent-booster-wasm/index.d.ts.map +1 -1
- package/v3/dist/integrations/agent-booster-wasm/index.js +4 -1
- package/v3/dist/integrations/agent-booster-wasm/index.js.map +1 -1
- package/v3/dist/integrations/agentic-flow/metrics/pattern-updater.d.ts.map +1 -1
- package/v3/dist/integrations/agentic-flow/metrics/pattern-updater.js +6 -4
- package/v3/dist/integrations/agentic-flow/metrics/pattern-updater.js.map +1 -1
- package/v3/dist/integrations/agentic-flow/onnx-embeddings/adapter.d.ts.map +1 -1
- package/v3/dist/integrations/agentic-flow/onnx-embeddings/adapter.js +10 -0
- package/v3/dist/integrations/agentic-flow/onnx-embeddings/adapter.js.map +1 -1
- package/v3/dist/integrations/agentic-flow/pattern-loader.d.ts.map +1 -1
- package/v3/dist/integrations/agentic-flow/pattern-loader.js +4 -2
- package/v3/dist/integrations/agentic-flow/pattern-loader.js.map +1 -1
- package/v3/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +4 -2
- package/v3/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts.map +1 -1
- package/v3/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +70 -43
- package/v3/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js.map +1 -1
- package/v3/dist/integrations/agentic-flow/reasoning-bank/index.d.ts.map +1 -1
- package/v3/dist/integrations/agentic-flow/reasoning-bank/index.js +2 -1
- package/v3/dist/integrations/agentic-flow/reasoning-bank/index.js.map +1 -1
- package/v3/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.d.ts.map +1 -1
- package/v3/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.js +6 -5
- package/v3/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.js.map +1 -1
- package/v3/dist/integrations/agentic-flow/reasoning-bank/trajectory-tracker.d.ts.map +1 -1
- package/v3/dist/integrations/agentic-flow/reasoning-bank/trajectory-tracker.js +7 -6
- package/v3/dist/integrations/agentic-flow/reasoning-bank/trajectory-tracker.js.map +1 -1
- package/v3/dist/integrations/browser/agent-browser/client.d.ts.map +1 -1
- package/v3/dist/integrations/browser/agent-browser/client.js +33 -31
- package/v3/dist/integrations/browser/agent-browser/client.js.map +1 -1
- package/v3/dist/integrations/browser/agent-browser/command-executor.d.ts.map +1 -1
- package/v3/dist/integrations/browser/agent-browser/command-executor.js +42 -22
- package/v3/dist/integrations/browser/agent-browser/command-executor.js.map +1 -1
- package/v3/dist/integrations/browser/agent-browser/snapshot-parser.d.ts.map +1 -1
- package/v3/dist/integrations/browser/agent-browser/snapshot-parser.js +2 -1
- package/v3/dist/integrations/browser/agent-browser/snapshot-parser.js.map +1 -1
- package/v3/dist/integrations/browser/web-content-fetcher.d.ts.map +1 -1
- package/v3/dist/integrations/browser/web-content-fetcher.js +4 -2
- package/v3/dist/integrations/browser/web-content-fetcher.js.map +1 -1
- package/v3/dist/integrations/coherence/coherence-service.d.ts.map +1 -1
- package/v3/dist/integrations/coherence/coherence-service.js +4 -3
- 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 +4 -3
- package/v3/dist/integrations/coherence/engines/spectral-adapter.js.map +1 -1
- package/v3/dist/integrations/coherence/wasm-loader.d.ts.map +1 -1
- package/v3/dist/integrations/coherence/wasm-loader.js +4 -3
- package/v3/dist/integrations/coherence/wasm-loader.js.map +1 -1
- package/v3/dist/integrations/embeddings/cache/EmbeddingCache.d.ts +6 -0
- package/v3/dist/integrations/embeddings/cache/EmbeddingCache.d.ts.map +1 -1
- package/v3/dist/integrations/embeddings/cache/EmbeddingCache.js +35 -6
- package/v3/dist/integrations/embeddings/cache/EmbeddingCache.js.map +1 -1
- package/v3/dist/integrations/n8n/agent-factory.d.ts.map +1 -1
- package/v3/dist/integrations/n8n/agent-factory.js +2 -1
- package/v3/dist/integrations/n8n/agent-factory.js.map +1 -1
- package/v3/dist/integrations/rl-suite/base-algorithm.d.ts.map +1 -1
- package/v3/dist/integrations/rl-suite/base-algorithm.js +8 -3
- package/v3/dist/integrations/rl-suite/base-algorithm.js.map +1 -1
- package/v3/dist/integrations/rl-suite/persistence/q-value-store.d.ts.map +1 -1
- package/v3/dist/integrations/rl-suite/persistence/q-value-store.js +2 -1
- package/v3/dist/integrations/rl-suite/persistence/q-value-store.js.map +1 -1
- package/v3/dist/integrations/ruvector/ast-complexity.d.ts.map +1 -1
- package/v3/dist/integrations/ruvector/ast-complexity.js +3 -2
- package/v3/dist/integrations/ruvector/ast-complexity.js.map +1 -1
- package/v3/dist/integrations/ruvector/attention-wrapper.d.ts.map +1 -1
- package/v3/dist/integrations/ruvector/attention-wrapper.js +2 -1
- package/v3/dist/integrations/ruvector/attention-wrapper.js.map +1 -1
- package/v3/dist/integrations/ruvector/coverage-router.d.ts.map +1 -1
- package/v3/dist/integrations/ruvector/coverage-router.js +3 -2
- package/v3/dist/integrations/ruvector/coverage-router.js.map +1 -1
- package/v3/dist/integrations/ruvector/diff-risk-classifier.d.ts.map +1 -1
- package/v3/dist/integrations/ruvector/diff-risk-classifier.js +3 -2
- package/v3/dist/integrations/ruvector/diff-risk-classifier.js.map +1 -1
- package/v3/dist/integrations/ruvector/gnn-wrapper.d.ts.map +1 -1
- package/v3/dist/integrations/ruvector/gnn-wrapper.js +2 -1
- package/v3/dist/integrations/ruvector/gnn-wrapper.js.map +1 -1
- package/v3/dist/integrations/ruvector/graph-boundaries.d.ts.map +1 -1
- package/v3/dist/integrations/ruvector/graph-boundaries.js +3 -2
- package/v3/dist/integrations/ruvector/graph-boundaries.js.map +1 -1
- package/v3/dist/integrations/ruvector/hypergraph-engine.d.ts.map +1 -1
- package/v3/dist/integrations/ruvector/hypergraph-engine.js +68 -67
- package/v3/dist/integrations/ruvector/hypergraph-engine.js.map +1 -1
- package/v3/dist/integrations/ruvector/hypergraph-schema.d.ts.map +1 -1
- package/v3/dist/integrations/ruvector/hypergraph-schema.js +3 -2
- package/v3/dist/integrations/ruvector/hypergraph-schema.js.map +1 -1
- package/v3/dist/integrations/ruvector/persistent-q-router.d.ts.map +1 -1
- package/v3/dist/integrations/ruvector/persistent-q-router.js +35 -11
- package/v3/dist/integrations/ruvector/persistent-q-router.js.map +1 -1
- package/v3/dist/integrations/ruvector/q-learning-router.d.ts.map +1 -1
- package/v3/dist/integrations/ruvector/q-learning-router.js +3 -2
- package/v3/dist/integrations/ruvector/q-learning-router.js.map +1 -1
- package/v3/dist/integrations/ruvector/server-client.d.ts.map +1 -1
- package/v3/dist/integrations/ruvector/server-client.js +23 -10
- package/v3/dist/integrations/ruvector/server-client.js.map +1 -1
- package/v3/dist/integrations/ruvector/sona-persistence.d.ts.map +1 -1
- package/v3/dist/integrations/ruvector/sona-persistence.js +11 -6
- package/v3/dist/integrations/ruvector/sona-persistence.js.map +1 -1
- package/v3/dist/integrations/vibium/client.d.ts.map +1 -1
- package/v3/dist/integrations/vibium/client.js +11 -10
- package/v3/dist/integrations/vibium/client.js.map +1 -1
- package/v3/dist/kernel/anti-drift-middleware.d.ts.map +1 -1
- package/v3/dist/kernel/anti-drift-middleware.js +8 -3
- package/v3/dist/kernel/anti-drift-middleware.js.map +1 -1
- package/v3/dist/kernel/hybrid-backend.d.ts.map +1 -1
- package/v3/dist/kernel/hybrid-backend.js +4 -0
- package/v3/dist/kernel/hybrid-backend.js.map +1 -1
- package/v3/dist/kernel/index.d.ts +1 -1
- package/v3/dist/kernel/index.d.ts.map +1 -1
- package/v3/dist/kernel/index.js +1 -1
- package/v3/dist/kernel/index.js.map +1 -1
- package/v3/dist/kernel/kernel.d.ts +5 -0
- package/v3/dist/kernel/kernel.d.ts.map +1 -1
- package/v3/dist/kernel/kernel.js +43 -22
- package/v3/dist/kernel/kernel.js.map +1 -1
- package/v3/dist/kernel/memory-factory.d.ts.map +1 -1
- package/v3/dist/kernel/memory-factory.js +12 -4
- package/v3/dist/kernel/memory-factory.js.map +1 -1
- package/v3/dist/kernel/plugin-loader.d.ts.map +1 -1
- package/v3/dist/kernel/plugin-loader.js +4 -1
- package/v3/dist/kernel/plugin-loader.js.map +1 -1
- package/v3/dist/kernel/unified-memory-hnsw.d.ts +101 -0
- package/v3/dist/kernel/unified-memory-hnsw.d.ts.map +1 -0
- package/v3/dist/kernel/unified-memory-hnsw.js +411 -0
- package/v3/dist/kernel/unified-memory-hnsw.js.map +1 -0
- package/v3/dist/kernel/unified-memory-migration.d.ts.map +1 -1
- package/v3/dist/kernel/unified-memory-migration.js +14 -15
- package/v3/dist/kernel/unified-memory-migration.js.map +1 -1
- package/v3/dist/kernel/unified-memory-schemas.d.ts +21 -0
- package/v3/dist/kernel/unified-memory-schemas.d.ts.map +1 -0
- package/v3/dist/kernel/unified-memory-schemas.js +581 -0
- package/v3/dist/kernel/unified-memory-schemas.js.map +1 -0
- package/v3/dist/kernel/unified-memory.d.ts +13 -197
- package/v3/dist/kernel/unified-memory.d.ts.map +1 -1
- package/v3/dist/kernel/unified-memory.js +117 -1379
- package/v3/dist/kernel/unified-memory.js.map +1 -1
- package/v3/dist/kernel/unified-persistence.d.ts.map +1 -1
- package/v3/dist/kernel/unified-persistence.js +6 -4
- package/v3/dist/kernel/unified-persistence.js.map +1 -1
- package/v3/dist/learning/aqe-learning-engine.d.ts.map +1 -1
- package/v3/dist/learning/aqe-learning-engine.js +11 -9
- package/v3/dist/learning/aqe-learning-engine.js.map +1 -1
- package/v3/dist/learning/dream/concept-graph.d.ts.map +1 -1
- package/v3/dist/learning/dream/concept-graph.js +6 -4
- package/v3/dist/learning/dream/concept-graph.js.map +1 -1
- package/v3/dist/learning/dream/dream-engine.d.ts +8 -0
- package/v3/dist/learning/dream/dream-engine.d.ts.map +1 -1
- package/v3/dist/learning/dream/dream-engine.js +35 -5
- package/v3/dist/learning/dream/dream-engine.js.map +1 -1
- package/v3/dist/learning/dream/dream-scheduler.d.ts.map +1 -1
- package/v3/dist/learning/dream/dream-scheduler.js +34 -22
- package/v3/dist/learning/dream/dream-scheduler.js.map +1 -1
- package/v3/dist/learning/experience-capture-middleware.d.ts.map +1 -1
- package/v3/dist/learning/experience-capture-middleware.js +2 -1
- package/v3/dist/learning/experience-capture-middleware.js.map +1 -1
- package/v3/dist/learning/experience-capture.d.ts.map +1 -1
- package/v3/dist/learning/experience-capture.js +4 -1
- package/v3/dist/learning/experience-capture.js.map +1 -1
- package/v3/dist/learning/memory-auditor.d.ts.map +1 -1
- package/v3/dist/learning/memory-auditor.js +3 -2
- package/v3/dist/learning/memory-auditor.js.map +1 -1
- package/v3/dist/learning/metrics-tracker.d.ts.map +1 -1
- package/v3/dist/learning/metrics-tracker.js +6 -2
- package/v3/dist/learning/metrics-tracker.js.map +1 -1
- package/v3/dist/learning/pattern-lifecycle.d.ts.map +1 -1
- package/v3/dist/learning/pattern-lifecycle.js +11 -5
- package/v3/dist/learning/pattern-lifecycle.js.map +1 -1
- package/v3/dist/learning/pattern-store.d.ts +7 -0
- package/v3/dist/learning/pattern-store.d.ts.map +1 -1
- package/v3/dist/learning/pattern-store.js +32 -4
- package/v3/dist/learning/pattern-store.js.map +1 -1
- package/v3/dist/learning/qe-hooks.d.ts.map +1 -1
- package/v3/dist/learning/qe-hooks.js +55 -10
- package/v3/dist/learning/qe-hooks.js.map +1 -1
- package/v3/dist/learning/qe-reasoning-bank.d.ts +13 -0
- package/v3/dist/learning/qe-reasoning-bank.d.ts.map +1 -1
- package/v3/dist/learning/qe-reasoning-bank.js +64 -24
- package/v3/dist/learning/qe-reasoning-bank.js.map +1 -1
- package/v3/dist/learning/qe-unified-memory.d.ts.map +1 -1
- package/v3/dist/learning/qe-unified-memory.js +31 -21
- package/v3/dist/learning/qe-unified-memory.js.map +1 -1
- package/v3/dist/learning/real-embeddings.d.ts.map +1 -1
- package/v3/dist/learning/real-embeddings.js +2 -1
- package/v3/dist/learning/real-embeddings.js.map +1 -1
- package/v3/dist/learning/real-qe-reasoning-bank.d.ts.map +1 -1
- package/v3/dist/learning/real-qe-reasoning-bank.js +47 -34
- package/v3/dist/learning/real-qe-reasoning-bank.js.map +1 -1
- package/v3/dist/learning/skill-validation-learner.d.ts.map +1 -1
- package/v3/dist/learning/skill-validation-learner.js +21 -12
- package/v3/dist/learning/skill-validation-learner.js.map +1 -1
- package/v3/dist/learning/sqlite-persistence.d.ts +9 -0
- package/v3/dist/learning/sqlite-persistence.d.ts.map +1 -1
- package/v3/dist/learning/sqlite-persistence.js +65 -6
- package/v3/dist/learning/sqlite-persistence.js.map +1 -1
- package/v3/dist/learning/token-tracker.d.ts.map +1 -1
- package/v3/dist/learning/token-tracker.js +4 -2
- package/v3/dist/learning/token-tracker.js.map +1 -1
- package/v3/dist/learning/v2-to-v3-migration.d.ts.map +1 -1
- package/v3/dist/learning/v2-to-v3-migration.js +9 -4
- package/v3/dist/learning/v2-to-v3-migration.js.map +1 -1
- package/v3/dist/mcp/bundle.js +15199 -13931
- package/v3/dist/mcp/entry.js +21 -1
- package/v3/dist/mcp/entry.js.map +1 -1
- package/v3/dist/mcp/handlers/agent-handlers.d.ts.map +1 -1
- package/v3/dist/mcp/handlers/agent-handlers.js +5 -4
- package/v3/dist/mcp/handlers/agent-handlers.js.map +1 -1
- package/v3/dist/mcp/handlers/core-handlers.d.ts.map +1 -1
- package/v3/dist/mcp/handlers/core-handlers.js +4 -3
- package/v3/dist/mcp/handlers/core-handlers.js.map +1 -1
- package/v3/dist/mcp/handlers/handler-factory.d.ts.map +1 -1
- package/v3/dist/mcp/handlers/handler-factory.js +12 -3
- package/v3/dist/mcp/handlers/handler-factory.js.map +1 -1
- package/v3/dist/mcp/handlers/memory-handlers.d.ts.map +1 -1
- package/v3/dist/mcp/handlers/memory-handlers.js +8 -8
- package/v3/dist/mcp/handlers/memory-handlers.js.map +1 -1
- package/v3/dist/mcp/handlers/task-handlers.d.ts.map +1 -1
- package/v3/dist/mcp/handlers/task-handlers.js +11 -10
- package/v3/dist/mcp/handlers/task-handlers.js.map +1 -1
- package/v3/dist/mcp/http-server.js +1 -1
- package/v3/dist/mcp/http-server.js.map +1 -1
- package/v3/dist/mcp/security/index.d.ts +2 -6
- package/v3/dist/mcp/security/index.d.ts.map +1 -1
- package/v3/dist/mcp/security/index.js +2 -2
- package/v3/dist/mcp/security/index.js.map +1 -1
- package/v3/dist/mcp/security/oauth21-provider.d.ts +7 -0
- package/v3/dist/mcp/security/oauth21-provider.d.ts.map +1 -1
- package/v3/dist/mcp/security/oauth21-provider.js +15 -3
- package/v3/dist/mcp/security/oauth21-provider.js.map +1 -1
- package/v3/dist/mcp/server.d.ts.map +1 -1
- package/v3/dist/mcp/server.js +10 -24
- package/v3/dist/mcp/server.js.map +1 -1
- package/v3/dist/mcp/tool-registry.d.ts.map +1 -1
- package/v3/dist/mcp/tool-registry.js +2 -1
- package/v3/dist/mcp/tool-registry.js.map +1 -1
- package/v3/dist/mcp/tools/analysis/token-usage.d.ts.map +1 -1
- package/v3/dist/mcp/tools/analysis/token-usage.js +2 -1
- package/v3/dist/mcp/tools/analysis/token-usage.js.map +1 -1
- package/v3/dist/mcp/tools/base.d.ts.map +1 -1
- package/v3/dist/mcp/tools/base.js +2 -1
- package/v3/dist/mcp/tools/base.js.map +1 -1
- package/v3/dist/mcp/tools/chaos-resilience/inject.d.ts.map +1 -1
- package/v3/dist/mcp/tools/chaos-resilience/inject.js +2 -1
- package/v3/dist/mcp/tools/chaos-resilience/inject.js.map +1 -1
- package/v3/dist/mcp/tools/code-intelligence/analyze.d.ts.map +1 -1
- package/v3/dist/mcp/tools/code-intelligence/analyze.js +2 -1
- package/v3/dist/mcp/tools/code-intelligence/analyze.js.map +1 -1
- package/v3/dist/mcp/tools/coherence/audit.d.ts.map +1 -1
- package/v3/dist/mcp/tools/coherence/audit.js +2 -1
- package/v3/dist/mcp/tools/coherence/audit.js.map +1 -1
- package/v3/dist/mcp/tools/coherence/check.d.ts.map +1 -1
- package/v3/dist/mcp/tools/coherence/check.js +2 -1
- package/v3/dist/mcp/tools/coherence/check.js.map +1 -1
- package/v3/dist/mcp/tools/coherence/collapse.d.ts.map +1 -1
- package/v3/dist/mcp/tools/coherence/collapse.js +2 -1
- package/v3/dist/mcp/tools/coherence/collapse.js.map +1 -1
- package/v3/dist/mcp/tools/coherence/consensus.d.ts.map +1 -1
- package/v3/dist/mcp/tools/coherence/consensus.js +2 -1
- package/v3/dist/mcp/tools/coherence/consensus.js.map +1 -1
- package/v3/dist/mcp/tools/contract-testing/validate.d.ts.map +1 -1
- package/v3/dist/mcp/tools/contract-testing/validate.js +4 -3
- package/v3/dist/mcp/tools/contract-testing/validate.js.map +1 -1
- package/v3/dist/mcp/tools/coverage-analysis/index.d.ts.map +1 -1
- package/v3/dist/mcp/tools/coverage-analysis/index.js +7 -6
- package/v3/dist/mcp/tools/coverage-analysis/index.js.map +1 -1
- package/v3/dist/mcp/tools/defect-intelligence/predict.d.ts.map +1 -1
- package/v3/dist/mcp/tools/defect-intelligence/predict.js +2 -1
- package/v3/dist/mcp/tools/defect-intelligence/predict.js.map +1 -1
- package/v3/dist/mcp/tools/embeddings/embedding.d.ts.map +1 -1
- package/v3/dist/mcp/tools/embeddings/embedding.js +6 -5
- package/v3/dist/mcp/tools/embeddings/embedding.js.map +1 -1
- package/v3/dist/mcp/tools/learning-optimization/dream.d.ts.map +1 -1
- package/v3/dist/mcp/tools/learning-optimization/dream.js +3 -2
- package/v3/dist/mcp/tools/learning-optimization/dream.js.map +1 -1
- package/v3/dist/mcp/tools/learning-optimization/optimize.d.ts.map +1 -1
- package/v3/dist/mcp/tools/learning-optimization/optimize.js +2 -1
- package/v3/dist/mcp/tools/learning-optimization/optimize.js.map +1 -1
- package/v3/dist/mcp/tools/planning/goap-execute.d.ts.map +1 -1
- package/v3/dist/mcp/tools/planning/goap-execute.js +2 -1
- package/v3/dist/mcp/tools/planning/goap-execute.js.map +1 -1
- package/v3/dist/mcp/tools/planning/goap-plan.d.ts.map +1 -1
- package/v3/dist/mcp/tools/planning/goap-plan.js +2 -1
- package/v3/dist/mcp/tools/planning/goap-plan.js.map +1 -1
- package/v3/dist/mcp/tools/planning/goap-status.d.ts.map +1 -1
- package/v3/dist/mcp/tools/planning/goap-status.js +2 -1
- package/v3/dist/mcp/tools/planning/goap-status.js.map +1 -1
- package/v3/dist/mcp/tools/quality-assessment/evaluate.d.ts.map +1 -1
- package/v3/dist/mcp/tools/quality-assessment/evaluate.js +2 -1
- package/v3/dist/mcp/tools/quality-assessment/evaluate.js.map +1 -1
- package/v3/dist/mcp/tools/qx-analysis/analyze.d.ts.map +1 -1
- package/v3/dist/mcp/tools/qx-analysis/analyze.js +2 -1
- package/v3/dist/mcp/tools/qx-analysis/analyze.js.map +1 -1
- package/v3/dist/mcp/tools/qx-analysis/impact-analyzer.d.ts +12 -0
- package/v3/dist/mcp/tools/qx-analysis/impact-analyzer.d.ts.map +1 -1
- package/v3/dist/mcp/tools/qx-analysis/impact-analyzer.js +158 -109
- package/v3/dist/mcp/tools/qx-analysis/impact-analyzer.js.map +1 -1
- package/v3/dist/mcp/tools/requirements-validation/quality-criteria.d.ts.map +1 -1
- package/v3/dist/mcp/tools/requirements-validation/quality-criteria.js +2 -1
- package/v3/dist/mcp/tools/requirements-validation/quality-criteria.js.map +1 -1
- package/v3/dist/mcp/tools/requirements-validation/validate.d.ts.map +1 -1
- package/v3/dist/mcp/tools/requirements-validation/validate.js +2 -1
- package/v3/dist/mcp/tools/requirements-validation/validate.js.map +1 -1
- package/v3/dist/mcp/tools/security-compliance/scan.d.ts.map +1 -1
- package/v3/dist/mcp/tools/security-compliance/scan.js +2 -1
- package/v3/dist/mcp/tools/security-compliance/scan.js.map +1 -1
- package/v3/dist/mcp/tools/test-execution/e2e-execute.d.ts.map +1 -1
- package/v3/dist/mcp/tools/test-execution/e2e-execute.js +2 -1
- package/v3/dist/mcp/tools/test-execution/e2e-execute.js.map +1 -1
- package/v3/dist/mcp/tools/test-execution/execute.d.ts.map +1 -1
- package/v3/dist/mcp/tools/test-execution/execute.js +2 -1
- package/v3/dist/mcp/tools/test-execution/execute.js.map +1 -1
- package/v3/dist/mcp/tools/test-generation/generate.d.ts.map +1 -1
- package/v3/dist/mcp/tools/test-generation/generate.js +2 -1
- package/v3/dist/mcp/tools/test-generation/generate.js.map +1 -1
- package/v3/dist/mcp/tools/visual-accessibility/index.d.ts.map +1 -1
- package/v3/dist/mcp/tools/visual-accessibility/index.js +3 -2
- package/v3/dist/mcp/tools/visual-accessibility/index.js.map +1 -1
- package/v3/dist/mcp/transport/sse/sse-transport.js +1 -1
- package/v3/dist/mcp/transport/sse/sse-transport.js.map +1 -1
- package/v3/dist/mcp/transport/stdio.js +1 -1
- package/v3/dist/mcp/transport/stdio.js.map +1 -1
- package/v3/dist/mcp/transport/websocket/websocket-transport.js +1 -1
- package/v3/dist/mcp/transport/websocket/websocket-transport.js.map +1 -1
- package/v3/dist/memory/crdt/or-set.d.ts.map +1 -1
- package/v3/dist/memory/crdt/or-set.js +2 -1
- package/v3/dist/memory/crdt/or-set.js.map +1 -1
- package/v3/dist/optimization/auto-tuner.d.ts.map +1 -1
- package/v3/dist/optimization/auto-tuner.js +2 -1
- package/v3/dist/optimization/auto-tuner.js.map +1 -1
- package/v3/dist/optimization/early-exit-token-optimizer.d.ts.map +1 -1
- package/v3/dist/optimization/early-exit-token-optimizer.js +2 -1
- package/v3/dist/optimization/early-exit-token-optimizer.js.map +1 -1
- package/v3/dist/optimization/qe-workers.d.ts.map +1 -1
- package/v3/dist/optimization/qe-workers.js +2 -1
- package/v3/dist/optimization/qe-workers.js.map +1 -1
- package/v3/dist/performance/benchmarks.d.ts.map +1 -1
- package/v3/dist/performance/benchmarks.js +2 -1
- package/v3/dist/performance/benchmarks.js.map +1 -1
- package/v3/dist/performance/optimizer.d.ts.map +1 -1
- package/v3/dist/performance/optimizer.js +119 -71
- package/v3/dist/performance/optimizer.js.map +1 -1
- package/v3/dist/performance/run-gates.js +2 -1
- package/v3/dist/performance/run-gates.js.map +1 -1
- package/v3/dist/planning/goap-planner.d.ts +4 -1
- package/v3/dist/planning/goap-planner.d.ts.map +1 -1
- package/v3/dist/planning/goap-planner.js +128 -46
- package/v3/dist/planning/goap-planner.js.map +1 -1
- package/v3/dist/planning/index.d.ts +1 -1
- package/v3/dist/planning/index.d.ts.map +1 -1
- package/v3/dist/planning/index.js.map +1 -1
- package/v3/dist/planning/plan-executor.d.ts.map +1 -1
- package/v3/dist/planning/plan-executor.js +7 -5
- package/v3/dist/planning/plan-executor.js.map +1 -1
- package/v3/dist/planning/types.d.ts +0 -16
- package/v3/dist/planning/types.d.ts.map +1 -1
- package/v3/dist/routing/routing-feedback.d.ts.map +1 -1
- package/v3/dist/routing/routing-feedback.js +7 -5
- package/v3/dist/routing/routing-feedback.js.map +1 -1
- package/v3/dist/shared/base-domain-plugin.d.ts +198 -0
- package/v3/dist/shared/base-domain-plugin.d.ts.map +1 -0
- package/v3/dist/shared/base-domain-plugin.js +292 -0
- package/v3/dist/shared/base-domain-plugin.js.map +1 -0
- package/v3/dist/shared/domain-service-registry.d.ts +70 -0
- package/v3/dist/shared/domain-service-registry.d.ts.map +1 -0
- package/v3/dist/shared/domain-service-registry.js +87 -0
- package/v3/dist/shared/domain-service-registry.js.map +1 -0
- package/v3/dist/shared/embeddings/nomic-embedder.d.ts.map +1 -1
- package/v3/dist/shared/embeddings/nomic-embedder.js +2 -1
- package/v3/dist/shared/embeddings/nomic-embedder.js.map +1 -1
- package/v3/dist/shared/embeddings/ollama-client.d.ts.map +1 -1
- package/v3/dist/shared/embeddings/ollama-client.js +2 -1
- package/v3/dist/shared/embeddings/ollama-client.js.map +1 -1
- package/v3/dist/shared/error-utils.d.ts +16 -0
- package/v3/dist/shared/error-utils.d.ts.map +1 -0
- package/v3/dist/shared/error-utils.js +20 -0
- package/v3/dist/shared/error-utils.js.map +1 -0
- package/v3/dist/shared/http/http-client.d.ts.map +1 -1
- package/v3/dist/shared/http/http-client.js +2 -1
- package/v3/dist/shared/http/http-client.js.map +1 -1
- package/v3/dist/shared/index.d.ts +3 -0
- package/v3/dist/shared/index.d.ts.map +1 -1
- package/v3/dist/shared/index.js +3 -0
- package/v3/dist/shared/index.js.map +1 -1
- package/v3/dist/shared/io/file-reader.d.ts.map +1 -1
- package/v3/dist/shared/io/file-reader.js +2 -1
- package/v3/dist/shared/io/file-reader.js.map +1 -1
- package/v3/dist/shared/llm/circuit-breaker.d.ts.map +1 -1
- package/v3/dist/shared/llm/circuit-breaker.js +2 -1
- package/v3/dist/shared/llm/circuit-breaker.js.map +1 -1
- package/v3/dist/shared/llm/metrics/cost-metrics.js.map +1 -1
- package/v3/dist/shared/llm/metrics/router-metrics.d.ts.map +1 -1
- package/v3/dist/shared/llm/metrics/router-metrics.js.map +1 -1
- package/v3/dist/shared/llm/provider-manager.d.ts.map +1 -1
- package/v3/dist/shared/llm/provider-manager.js +2 -1
- package/v3/dist/shared/llm/provider-manager.js.map +1 -1
- package/v3/dist/shared/llm/providers/azure-openai.d.ts.map +1 -1
- package/v3/dist/shared/llm/providers/azure-openai.js +2 -1
- package/v3/dist/shared/llm/providers/azure-openai.js.map +1 -1
- package/v3/dist/shared/llm/providers/bedrock.d.ts.map +1 -1
- package/v3/dist/shared/llm/providers/bedrock.js +2 -1
- package/v3/dist/shared/llm/providers/bedrock.js.map +1 -1
- package/v3/dist/shared/llm/providers/claude.d.ts.map +1 -1
- package/v3/dist/shared/llm/providers/claude.js +2 -1
- package/v3/dist/shared/llm/providers/claude.js.map +1 -1
- package/v3/dist/shared/llm/providers/gemini.d.ts.map +1 -1
- package/v3/dist/shared/llm/providers/gemini.js +4 -2
- package/v3/dist/shared/llm/providers/gemini.js.map +1 -1
- package/v3/dist/shared/llm/providers/openai.d.ts.map +1 -1
- package/v3/dist/shared/llm/providers/openai.js +2 -1
- package/v3/dist/shared/llm/providers/openai.js.map +1 -1
- package/v3/dist/shared/llm/providers/openrouter.d.ts.map +1 -1
- package/v3/dist/shared/llm/providers/openrouter.js +4 -2
- package/v3/dist/shared/llm/providers/openrouter.js.map +1 -1
- package/v3/dist/shared/llm/router/hybrid-router.d.ts.map +1 -1
- package/v3/dist/shared/llm/router/hybrid-router.js +2 -1
- package/v3/dist/shared/llm/router/hybrid-router.js.map +1 -1
- package/v3/dist/shared/llm/translation/prompt-translator.d.ts.map +1 -1
- package/v3/dist/shared/llm/translation/prompt-translator.js +2 -1
- package/v3/dist/shared/llm/translation/prompt-translator.js.map +1 -1
- package/v3/dist/shared/safe-json.d.ts +57 -0
- package/v3/dist/shared/safe-json.d.ts.map +1 -0
- package/v3/dist/shared/safe-json.js +78 -0
- package/v3/dist/shared/safe-json.js.map +1 -0
- package/v3/dist/shared/sql-safety.d.ts +9 -0
- package/v3/dist/shared/sql-safety.d.ts.map +1 -1
- package/v3/dist/shared/sql-safety.js +20 -1
- package/v3/dist/shared/sql-safety.js.map +1 -1
- package/v3/dist/shared/utils/circular-buffer.js +1 -1
- package/v3/dist/shared/utils/circular-buffer.js.map +1 -1
- package/v3/dist/skills/security-visual-testing/index.d.ts.map +1 -1
- package/v3/dist/skills/security-visual-testing/index.js +6 -5
- package/v3/dist/skills/security-visual-testing/index.js.map +1 -1
- package/v3/dist/strange-loop/strange-loop.d.ts +0 -9
- package/v3/dist/strange-loop/strange-loop.d.ts.map +1 -1
- package/v3/dist/strange-loop/strange-loop.js +23 -15
- package/v3/dist/strange-loop/strange-loop.js.map +1 -1
- package/v3/dist/sync/claude-flow-bridge.d.ts.map +1 -1
- package/v3/dist/sync/claude-flow-bridge.js +2 -1
- package/v3/dist/sync/claude-flow-bridge.js.map +1 -1
- package/v3/dist/sync/cloud/index.d.ts +1 -1
- package/v3/dist/sync/cloud/index.d.ts.map +1 -1
- package/v3/dist/sync/cloud/index.js +1 -1
- package/v3/dist/sync/cloud/index.js.map +1 -1
- package/v3/dist/sync/cloud/postgres-writer.d.ts.map +1 -1
- package/v3/dist/sync/cloud/postgres-writer.js +20 -9
- package/v3/dist/sync/cloud/postgres-writer.js.map +1 -1
- package/v3/dist/sync/cloud/tunnel-manager.d.ts +17 -1
- package/v3/dist/sync/cloud/tunnel-manager.d.ts.map +1 -1
- package/v3/dist/sync/cloud/tunnel-manager.js +36 -1
- package/v3/dist/sync/cloud/tunnel-manager.js.map +1 -1
- package/v3/dist/sync/embeddings/sync-embedding-generator.d.ts.map +1 -1
- package/v3/dist/sync/embeddings/sync-embedding-generator.js +11 -5
- package/v3/dist/sync/embeddings/sync-embedding-generator.js.map +1 -1
- package/v3/dist/sync/readers/json-reader.d.ts.map +1 -1
- package/v3/dist/sync/readers/json-reader.js +2 -1
- package/v3/dist/sync/readers/json-reader.js.map +1 -1
- package/v3/dist/sync/readers/sqlite-reader.d.ts.map +1 -1
- package/v3/dist/sync/readers/sqlite-reader.js +14 -6
- package/v3/dist/sync/readers/sqlite-reader.js.map +1 -1
- package/v3/dist/sync/sync-agent.d.ts.map +1 -1
- package/v3/dist/sync/sync-agent.js +10 -6
- package/v3/dist/sync/sync-agent.js.map +1 -1
- package/v3/dist/test-scheduling/executors/vitest-executor.d.ts.map +1 -1
- package/v3/dist/test-scheduling/executors/vitest-executor.js +3 -2
- package/v3/dist/test-scheduling/executors/vitest-executor.js.map +1 -1
- package/v3/dist/test-scheduling/flaky-tracking/flaky-tracker.d.ts.map +1 -1
- package/v3/dist/test-scheduling/flaky-tracking/flaky-tracker.js +2 -1
- package/v3/dist/test-scheduling/flaky-tracking/flaky-tracker.js.map +1 -1
- package/v3/dist/testing/load/agent-load-tester.d.ts.map +1 -1
- package/v3/dist/testing/load/agent-load-tester.js +2 -1
- package/v3/dist/testing/load/agent-load-tester.js.map +1 -1
- package/v3/dist/validation/parallel-eval-runner.d.ts.map +1 -1
- package/v3/dist/validation/parallel-eval-runner.js +83 -37
- package/v3/dist/validation/parallel-eval-runner.js.map +1 -1
- package/v3/dist/validation/swarm-skill-validator.d.ts.map +1 -1
- package/v3/dist/validation/swarm-skill-validator.js +2 -1
- package/v3/dist/validation/swarm-skill-validator.js.map +1 -1
- package/v3/dist/validation/validation-result-aggregator.d.ts.map +1 -1
- package/v3/dist/validation/validation-result-aggregator.js +2 -1
- package/v3/dist/validation/validation-result-aggregator.js.map +1 -1
- package/v3/dist/workers/base-worker.d.ts.map +1 -1
- package/v3/dist/workers/base-worker.js +2 -1
- package/v3/dist/workers/base-worker.js.map +1 -1
- package/v3/dist/workers/workers/cloud-sync.d.ts.map +1 -1
- package/v3/dist/workers/workers/cloud-sync.js +2 -1
- package/v3/dist/workers/workers/cloud-sync.js.map +1 -1
- package/v3/dist/workers/workers/learning-consolidation.d.ts.map +1 -1
- package/v3/dist/workers/workers/learning-consolidation.js +4 -3
- package/v3/dist/workers/workers/learning-consolidation.js.map +1 -1
- package/v3/dist/workers/workers/test-health.d.ts.map +1 -1
- package/v3/dist/workers/workers/test-health.js +2 -1
- package/v3/dist/workers/workers/test-health.js.map +1 -1
- package/v3/package.json +3 -2
|
@@ -1,56 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Agentic QE v3 - Security Auditor Service
|
|
3
|
-
*
|
|
3
|
+
* Orchestrator that delegates to focused modules for scanning and reporting.
|
|
4
|
+
*
|
|
5
|
+
* Extracted modules:
|
|
6
|
+
* - security-auditor-types.ts: Types, interfaces, config, HTTP client
|
|
7
|
+
* - security-auditor-sast.ts: Static Application Security Testing
|
|
8
|
+
* - security-auditor-dast.ts: Dynamic Application Security Testing
|
|
9
|
+
* - security-auditor-secrets.ts: Secret/credential detection
|
|
10
|
+
* - security-auditor-reports.ts: Risk calculation, posture, recommendations
|
|
4
11
|
*/
|
|
5
12
|
import { v4 as uuidv4 } from 'uuid';
|
|
6
13
|
import * as fs from 'fs/promises';
|
|
7
14
|
import * as path from 'path';
|
|
8
15
|
import { ok, err } from '../../../shared/types/index.js';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return {
|
|
19
|
-
ok: response.ok,
|
|
20
|
-
status: response.status,
|
|
21
|
-
data,
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
async function httpGet(url) {
|
|
25
|
-
const response = await fetch(url, {
|
|
26
|
-
method: 'GET',
|
|
27
|
-
headers: {
|
|
28
|
-
'Accept': 'application/json',
|
|
29
|
-
},
|
|
30
|
-
});
|
|
31
|
-
const data = await response.json();
|
|
32
|
-
return {
|
|
33
|
-
ok: response.ok,
|
|
34
|
-
status: response.status,
|
|
35
|
-
data,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
const DEFAULT_CONFIG = {
|
|
39
|
-
secretPatterns: [
|
|
40
|
-
/(?:api[_-]?key|apikey)['":\s]*['"=]?\s*['"]?([a-zA-Z0-9_\-]{20,})['"]?/gi,
|
|
41
|
-
/(?:password|passwd|pwd)['":\s]*['"=]?\s*['"]?([^\s'"]{8,})['"]?/gi,
|
|
42
|
-
/(?:secret|token)['":\s]*['"=]?\s*['"]?([a-zA-Z0-9_\-]{16,})['"]?/gi,
|
|
43
|
-
/(?:aws[_-]?access[_-]?key|aws[_-]?secret)['":\s]*['"=]?\s*['"]?([A-Z0-9]{20,})['"]?/gi,
|
|
44
|
-
/-----BEGIN\s+(?:RSA\s+)?PRIVATE\s+KEY-----/gi,
|
|
45
|
-
/ghp_[a-zA-Z0-9]{36}/g, // GitHub personal access token
|
|
46
|
-
/gho_[a-zA-Z0-9]{36}/g, // GitHub OAuth access token
|
|
47
|
-
/sk-[a-zA-Z0-9]{48}/g, // OpenAI API key
|
|
48
|
-
],
|
|
49
|
-
excludePatterns: ['node_modules', 'dist', 'build', '.git', '*.test.*', '*.spec.*'],
|
|
50
|
-
maxFileSizeKb: 1024,
|
|
51
|
-
enableHistoricalAnalysis: true,
|
|
52
|
-
riskThreshold: 0.7,
|
|
53
|
-
};
|
|
16
|
+
import { toError } from '../../../shared/error-utils.js';
|
|
17
|
+
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
18
|
+
export { DEFAULT_CONFIG, httpPost, httpGet } from './security-auditor-types.js';
|
|
19
|
+
import { DEFAULT_CONFIG, httpPost, httpGet } from './security-auditor-types.js';
|
|
20
|
+
// Import extracted modules
|
|
21
|
+
import { performSASTScan } from './security-auditor-sast.js';
|
|
22
|
+
import { performDASTScan } from './security-auditor-dast.js';
|
|
23
|
+
import { scanFileForSecrets } from './security-auditor-secrets.js';
|
|
24
|
+
import { calculateOverallRisk, generateRecommendations, countBySeverity, countOpenVulnerabilities, calculateTrend, calculatePostureScore, generatePostureRecommendations, determinePriorityBucket, } from './security-auditor-reports.js';
|
|
54
25
|
// ============================================================================
|
|
55
26
|
// Security Auditor Service Implementation
|
|
56
27
|
// ============================================================================
|
|
@@ -64,9 +35,6 @@ export class SecurityAuditorService {
|
|
|
64
35
|
// ==========================================================================
|
|
65
36
|
// IDependencySecurityService Implementation
|
|
66
37
|
// ==========================================================================
|
|
67
|
-
/**
|
|
68
|
-
* Scan dependencies for vulnerabilities
|
|
69
|
-
*/
|
|
70
38
|
async scanDependencies(manifestPath) {
|
|
71
39
|
try {
|
|
72
40
|
const manifest = manifestPath.value;
|
|
@@ -76,60 +44,37 @@ export class SecurityAuditorService {
|
|
|
76
44
|
}
|
|
77
45
|
const vulnerabilities = [];
|
|
78
46
|
const outdatedPackages = [];
|
|
79
|
-
// Parse dependencies from manifest file
|
|
80
47
|
const dependencies = await this.parseDependencies(manifest, ecosystem);
|
|
81
48
|
for (const dep of dependencies) {
|
|
82
|
-
// Check for known vulnerabilities
|
|
83
49
|
const vulns = await this.checkDependencyVulnerabilities(dep, ecosystem);
|
|
84
50
|
vulnerabilities.push(...vulns);
|
|
85
|
-
// Check for outdated packages
|
|
86
51
|
const outdated = await this.checkOutdated(dep);
|
|
87
52
|
if (outdated) {
|
|
88
53
|
outdatedPackages.push(outdated);
|
|
89
54
|
}
|
|
90
55
|
}
|
|
91
56
|
const summary = this.createDependencySummary(vulnerabilities, dependencies.length);
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
);
|
|
95
|
-
return ok({
|
|
96
|
-
vulnerabilities,
|
|
97
|
-
outdatedPackages,
|
|
98
|
-
summary,
|
|
99
|
-
});
|
|
57
|
+
await this.memory.set(`security:deps:${manifestPath.filename}`, { vulnerabilities, outdatedPackages, summary }, { namespace: 'security-compliance', ttl: 86400 });
|
|
58
|
+
return ok({ vulnerabilities, outdatedPackages, summary });
|
|
100
59
|
}
|
|
101
60
|
catch (error) {
|
|
102
|
-
return err(
|
|
61
|
+
return err(toError(error));
|
|
103
62
|
}
|
|
104
63
|
}
|
|
105
|
-
/**
|
|
106
|
-
* Check specific package for security issues
|
|
107
|
-
*/
|
|
108
64
|
async checkPackage(name, version, ecosystem) {
|
|
109
65
|
try {
|
|
110
|
-
// Query OSV vulnerability database
|
|
111
66
|
const vulnerabilities = await this.queryVulnerabilityDatabase(name, version, ecosystem);
|
|
112
67
|
const latestVersion = await this.getLatestVersion(name, ecosystem);
|
|
113
68
|
const isDeprecated = await this.checkDeprecation(name, ecosystem);
|
|
114
|
-
return ok({
|
|
115
|
-
name,
|
|
116
|
-
version,
|
|
117
|
-
vulnerabilities,
|
|
118
|
-
latestVersion,
|
|
119
|
-
isDeprecated,
|
|
120
|
-
});
|
|
69
|
+
return ok({ name, version, vulnerabilities, latestVersion, isDeprecated });
|
|
121
70
|
}
|
|
122
71
|
catch (error) {
|
|
123
|
-
return err(
|
|
72
|
+
return err(toError(error));
|
|
124
73
|
}
|
|
125
74
|
}
|
|
126
|
-
/**
|
|
127
|
-
* Get upgrade recommendations for vulnerabilities
|
|
128
|
-
*/
|
|
129
75
|
async getUpgradeRecommendations(vulnerabilities) {
|
|
130
76
|
try {
|
|
131
77
|
const recommendations = [];
|
|
132
|
-
// Group vulnerabilities by package
|
|
133
78
|
const byPackage = new Map();
|
|
134
79
|
for (const vuln of vulnerabilities) {
|
|
135
80
|
const dep = vuln.location.dependency;
|
|
@@ -140,7 +85,6 @@ export class SecurityAuditorService {
|
|
|
140
85
|
byPackage.set(key, existing);
|
|
141
86
|
}
|
|
142
87
|
}
|
|
143
|
-
// Generate recommendations for each package
|
|
144
88
|
for (const [key, vulns] of byPackage) {
|
|
145
89
|
const [ecosystem, name] = key.split(':');
|
|
146
90
|
const currentVersion = vulns[0].location.dependency?.version || 'unknown';
|
|
@@ -156,20 +100,16 @@ export class SecurityAuditorService {
|
|
|
156
100
|
breakingChanges: this.hasBreakingChanges(currentVersion, latestVersion),
|
|
157
101
|
});
|
|
158
102
|
}
|
|
159
|
-
// Sort by number of vulnerabilities fixed
|
|
160
103
|
recommendations.sort((a, b) => b.fixesVulnerabilities.length - a.fixesVulnerabilities.length);
|
|
161
104
|
return ok(recommendations);
|
|
162
105
|
}
|
|
163
106
|
catch (error) {
|
|
164
|
-
return err(
|
|
107
|
+
return err(toError(error));
|
|
165
108
|
}
|
|
166
109
|
}
|
|
167
110
|
// ==========================================================================
|
|
168
|
-
// Audit Functionality
|
|
111
|
+
// Audit Functionality (delegates to extracted modules)
|
|
169
112
|
// ==========================================================================
|
|
170
|
-
/**
|
|
171
|
-
* Run comprehensive security audit
|
|
172
|
-
*/
|
|
173
113
|
async runAudit(options) {
|
|
174
114
|
const auditId = uuidv4();
|
|
175
115
|
const timestamp = new Date();
|
|
@@ -178,28 +118,20 @@ export class SecurityAuditorService {
|
|
|
178
118
|
let dastResults;
|
|
179
119
|
let dependencyResults;
|
|
180
120
|
let secretScanResults;
|
|
181
|
-
// Note: Actual SAST/DAST scanning would be delegated to SecurityScannerService
|
|
182
|
-
// This is orchestration-level code that combines results
|
|
183
121
|
if (options.includeSAST) {
|
|
184
|
-
|
|
185
|
-
sastResults = await this.performSASTScan();
|
|
122
|
+
sastResults = await performSASTScan((dir) => this.findSourceFiles(dir), (fp) => this.shouldExclude(fp));
|
|
186
123
|
}
|
|
187
124
|
if (options.includeDAST && options.targetUrl) {
|
|
188
|
-
|
|
189
|
-
dastResults = await this.performDASTScan(options.targetUrl);
|
|
125
|
+
dastResults = await performDASTScan(options.targetUrl);
|
|
190
126
|
}
|
|
191
127
|
if (options.includeDependencies) {
|
|
192
|
-
// Scan package manifests for vulnerabilities
|
|
193
128
|
dependencyResults = await this.performDependencyScan();
|
|
194
129
|
}
|
|
195
130
|
if (options.includeSecrets) {
|
|
196
|
-
// Scan source files for secrets
|
|
197
131
|
secretScanResults = await this.performSecretScan();
|
|
198
132
|
}
|
|
199
|
-
|
|
200
|
-
const
|
|
201
|
-
// Generate recommendations
|
|
202
|
-
const recommendations = this.generateRecommendations(sastResults, dastResults, dependencyResults, secretScanResults);
|
|
133
|
+
const overallRiskScore = calculateOverallRisk(sastResults, dastResults, dependencyResults, secretScanResults);
|
|
134
|
+
const recommendations = generateRecommendations(sastResults, dastResults, dependencyResults, secretScanResults);
|
|
203
135
|
const report = {
|
|
204
136
|
auditId,
|
|
205
137
|
timestamp,
|
|
@@ -210,59 +142,42 @@ export class SecurityAuditorService {
|
|
|
210
142
|
overallRiskScore,
|
|
211
143
|
recommendations,
|
|
212
144
|
};
|
|
213
|
-
// Store audit report
|
|
214
145
|
await this.memory.set(`security:audit:${auditId}`, report, { namespace: 'security-compliance', persist: true });
|
|
215
146
|
return ok(report);
|
|
216
147
|
}
|
|
217
148
|
catch (error) {
|
|
218
|
-
return err(
|
|
149
|
+
return err(toError(error));
|
|
219
150
|
}
|
|
220
151
|
}
|
|
221
|
-
/**
|
|
222
|
-
* Scan for secrets in code
|
|
223
|
-
*/
|
|
224
152
|
async scanSecrets(files) {
|
|
225
153
|
try {
|
|
226
154
|
const secretsFound = [];
|
|
227
155
|
let filesScanned = 0;
|
|
228
156
|
for (const file of files) {
|
|
229
|
-
// Skip excluded patterns
|
|
230
157
|
if (this.shouldExclude(file.value)) {
|
|
231
158
|
continue;
|
|
232
159
|
}
|
|
233
160
|
filesScanned++;
|
|
234
|
-
|
|
235
|
-
const secrets = await this.scanFileForSecrets(file);
|
|
161
|
+
const secrets = await scanFileForSecrets(file);
|
|
236
162
|
secretsFound.push(...secrets);
|
|
237
163
|
}
|
|
238
|
-
return ok({
|
|
239
|
-
secretsFound,
|
|
240
|
-
filesScanned,
|
|
241
|
-
});
|
|
164
|
+
return ok({ secretsFound, filesScanned });
|
|
242
165
|
}
|
|
243
166
|
catch (error) {
|
|
244
|
-
return err(
|
|
167
|
+
return err(toError(error));
|
|
245
168
|
}
|
|
246
169
|
}
|
|
247
|
-
/**
|
|
248
|
-
* Get security posture summary
|
|
249
|
-
*/
|
|
250
170
|
async getSecurityPosture() {
|
|
251
171
|
try {
|
|
252
|
-
// Get historical audit data
|
|
253
172
|
const audits = await this.getRecentAudits();
|
|
254
|
-
// Calculate metrics
|
|
255
173
|
const latestAudit = audits[0];
|
|
256
174
|
const previousAudit = audits[1];
|
|
257
|
-
const criticalIssues =
|
|
258
|
-
const highIssues =
|
|
259
|
-
const openVulnerabilities =
|
|
260
|
-
|
|
261
|
-
const
|
|
262
|
-
|
|
263
|
-
const overallScore = this.calculatePostureScore(criticalIssues, highIssues, openVulnerabilities);
|
|
264
|
-
// Generate recommendations
|
|
265
|
-
const recommendations = this.generatePostureRecommendations(criticalIssues, highIssues, overallScore);
|
|
175
|
+
const criticalIssues = countBySeverity(latestAudit, 'critical');
|
|
176
|
+
const highIssues = countBySeverity(latestAudit, 'high');
|
|
177
|
+
const openVulnerabilities = countOpenVulnerabilities(latestAudit);
|
|
178
|
+
const trend = calculateTrend(latestAudit, previousAudit);
|
|
179
|
+
const overallScore = calculatePostureScore(criticalIssues, highIssues, openVulnerabilities);
|
|
180
|
+
const recommendations = generatePostureRecommendations(criticalIssues, highIssues, overallScore);
|
|
266
181
|
return ok({
|
|
267
182
|
overallScore,
|
|
268
183
|
trend,
|
|
@@ -276,12 +191,9 @@ export class SecurityAuditorService {
|
|
|
276
191
|
});
|
|
277
192
|
}
|
|
278
193
|
catch (error) {
|
|
279
|
-
return err(
|
|
194
|
+
return err(toError(error));
|
|
280
195
|
}
|
|
281
196
|
}
|
|
282
|
-
/**
|
|
283
|
-
* Triage vulnerabilities by priority
|
|
284
|
-
*/
|
|
285
197
|
async triageVulnerabilities(vulnerabilities) {
|
|
286
198
|
try {
|
|
287
199
|
const triaged = {
|
|
@@ -292,10 +204,9 @@ export class SecurityAuditorService {
|
|
|
292
204
|
accepted: [],
|
|
293
205
|
};
|
|
294
206
|
for (const vuln of vulnerabilities) {
|
|
295
|
-
const bucket =
|
|
207
|
+
const bucket = determinePriorityBucket(vuln);
|
|
296
208
|
triaged[bucket].push(vuln);
|
|
297
209
|
}
|
|
298
|
-
// Sort each bucket by severity
|
|
299
210
|
const severityOrder = ['critical', 'high', 'medium', 'low', 'informational'];
|
|
300
211
|
for (const bucket of Object.values(triaged)) {
|
|
301
212
|
bucket.sort((a, b) => severityOrder.indexOf(a.severity) - severityOrder.indexOf(b.severity));
|
|
@@ -303,11 +214,11 @@ export class SecurityAuditorService {
|
|
|
303
214
|
return ok(triaged);
|
|
304
215
|
}
|
|
305
216
|
catch (error) {
|
|
306
|
-
return err(
|
|
217
|
+
return err(toError(error));
|
|
307
218
|
}
|
|
308
219
|
}
|
|
309
220
|
// ==========================================================================
|
|
310
|
-
//
|
|
221
|
+
// Dependency Analysis Helpers
|
|
311
222
|
// ==========================================================================
|
|
312
223
|
detectEcosystem(manifest) {
|
|
313
224
|
if (manifest.includes('package.json'))
|
|
@@ -326,33 +237,26 @@ export class SecurityAuditorService {
|
|
|
326
237
|
const dependencies = [];
|
|
327
238
|
try {
|
|
328
239
|
if (ecosystem === 'npm') {
|
|
329
|
-
// Read and parse package.json
|
|
330
240
|
const content = await fs.readFile(manifest, 'utf-8');
|
|
331
|
-
const packageJson =
|
|
332
|
-
// Collect all dependency types
|
|
241
|
+
const packageJson = safeJsonParse(content);
|
|
333
242
|
const allDeps = {
|
|
334
243
|
...packageJson.dependencies,
|
|
335
244
|
...packageJson.devDependencies,
|
|
336
245
|
...packageJson.peerDependencies,
|
|
337
246
|
...packageJson.optionalDependencies,
|
|
338
247
|
};
|
|
339
|
-
// Convert to DependencyInfo array
|
|
340
248
|
for (const [name, versionSpec] of Object.entries(allDeps)) {
|
|
341
|
-
// Clean version specifiers (^, ~, >=, etc.)
|
|
342
249
|
const version = this.cleanVersionSpec(versionSpec);
|
|
343
250
|
dependencies.push({ name, version, ecosystem: 'npm' });
|
|
344
251
|
}
|
|
345
252
|
}
|
|
346
253
|
else if (ecosystem === 'pip') {
|
|
347
|
-
// Parse requirements.txt or Pipfile
|
|
348
254
|
const content = await fs.readFile(manifest, 'utf-8');
|
|
349
255
|
const lines = content.split('\n');
|
|
350
256
|
for (const line of lines) {
|
|
351
257
|
const trimmed = line.trim();
|
|
352
|
-
// Skip comments and empty lines
|
|
353
258
|
if (!trimmed || trimmed.startsWith('#'))
|
|
354
259
|
continue;
|
|
355
|
-
// Parse package==version or package>=version patterns
|
|
356
260
|
const match = trimmed.match(/^([a-zA-Z0-9_-]+)(?:[=<>~!]+(.+))?$/);
|
|
357
261
|
if (match) {
|
|
358
262
|
dependencies.push({
|
|
@@ -363,32 +267,21 @@ export class SecurityAuditorService {
|
|
|
363
267
|
}
|
|
364
268
|
}
|
|
365
269
|
}
|
|
366
|
-
// Additional ecosystems (maven, cargo, nuget) would be implemented similarly
|
|
367
270
|
}
|
|
368
271
|
catch (error) {
|
|
369
|
-
// If file reading fails, return empty array rather than throwing
|
|
370
272
|
console.error(`Failed to parse dependencies from ${manifest}:`, error);
|
|
371
273
|
}
|
|
372
274
|
return dependencies;
|
|
373
275
|
}
|
|
374
|
-
/**
|
|
375
|
-
* Clean version specifier to extract actual version
|
|
376
|
-
*/
|
|
377
276
|
cleanVersionSpec(versionSpec) {
|
|
378
|
-
// Remove leading specifiers like ^, ~, >=, <=, >, <, =
|
|
379
277
|
return versionSpec.replace(/^[\^~>=<]+/, '').trim();
|
|
380
278
|
}
|
|
381
279
|
async checkDependencyVulnerabilities(dep, ecosystem) {
|
|
382
280
|
const vulnerabilities = [];
|
|
383
281
|
try {
|
|
384
|
-
// Map ecosystem to OSV ecosystem name
|
|
385
282
|
const osvEcosystem = this.mapToOSVEcosystem(ecosystem);
|
|
386
|
-
// Query OSV API for vulnerabilities
|
|
387
283
|
const osvQuery = {
|
|
388
|
-
package: {
|
|
389
|
-
name: dep.name,
|
|
390
|
-
ecosystem: osvEcosystem,
|
|
391
|
-
},
|
|
284
|
+
package: { name: dep.name, ecosystem: osvEcosystem },
|
|
392
285
|
version: dep.version,
|
|
393
286
|
};
|
|
394
287
|
const response = await httpPost('https://api.osv.dev/v1/query', osvQuery);
|
|
@@ -400,14 +293,10 @@ export class SecurityAuditorService {
|
|
|
400
293
|
}
|
|
401
294
|
}
|
|
402
295
|
catch (error) {
|
|
403
|
-
// Log error but don't fail the entire scan
|
|
404
296
|
console.error(`Failed to check vulnerabilities for ${dep.name}@${dep.version}:`, error);
|
|
405
297
|
}
|
|
406
298
|
return vulnerabilities;
|
|
407
299
|
}
|
|
408
|
-
/**
|
|
409
|
-
* Map internal ecosystem to OSV ecosystem name
|
|
410
|
-
*/
|
|
411
300
|
mapToOSVEcosystem(ecosystem) {
|
|
412
301
|
const ecosystemMap = {
|
|
413
302
|
npm: 'npm',
|
|
@@ -418,17 +307,10 @@ export class SecurityAuditorService {
|
|
|
418
307
|
};
|
|
419
308
|
return ecosystemMap[ecosystem];
|
|
420
309
|
}
|
|
421
|
-
/**
|
|
422
|
-
* Map OSV vulnerability to our Vulnerability type
|
|
423
|
-
*/
|
|
424
310
|
mapOSVVulnerability(osvVuln, dep) {
|
|
425
|
-
// Extract CVE ID from aliases
|
|
426
311
|
const cveId = osvVuln.aliases?.find((alias) => alias.startsWith('CVE-'));
|
|
427
|
-
// Determine severity from OSV severity scores
|
|
428
312
|
const severity = this.mapOSVSeverity(osvVuln.severity);
|
|
429
|
-
// Extract fixed version from affected ranges
|
|
430
313
|
const fixedVersion = this.extractFixedVersion(osvVuln);
|
|
431
|
-
// Build references list
|
|
432
314
|
const references = osvVuln.references?.map((ref) => ref.url) || [];
|
|
433
315
|
const location = {
|
|
434
316
|
file: 'package.json',
|
|
@@ -454,14 +336,10 @@ export class SecurityAuditorService {
|
|
|
454
336
|
references,
|
|
455
337
|
};
|
|
456
338
|
}
|
|
457
|
-
/**
|
|
458
|
-
* Map OSV severity to our severity levels
|
|
459
|
-
*/
|
|
460
339
|
mapOSVSeverity(severityScores) {
|
|
461
340
|
if (!severityScores || severityScores.length === 0) {
|
|
462
|
-
return 'medium';
|
|
341
|
+
return 'medium';
|
|
463
342
|
}
|
|
464
|
-
// Find CVSS score
|
|
465
343
|
const cvssScore = severityScores.find((s) => s.type === 'CVSS_V3' || s.type === 'CVSS_V2');
|
|
466
344
|
if (cvssScore) {
|
|
467
345
|
const score = parseFloat(cvssScore.score);
|
|
@@ -476,9 +354,6 @@ export class SecurityAuditorService {
|
|
|
476
354
|
}
|
|
477
355
|
return 'medium';
|
|
478
356
|
}
|
|
479
|
-
/**
|
|
480
|
-
* Extract fixed version from OSV vulnerability data
|
|
481
|
-
*/
|
|
482
357
|
extractFixedVersion(osvVuln) {
|
|
483
358
|
if (!osvVuln.affected)
|
|
484
359
|
return undefined;
|
|
@@ -496,43 +371,29 @@ export class SecurityAuditorService {
|
|
|
496
371
|
}
|
|
497
372
|
return undefined;
|
|
498
373
|
}
|
|
499
|
-
/**
|
|
500
|
-
* Categorize vulnerability based on OSV data
|
|
501
|
-
*/
|
|
502
374
|
categorizeVulnerability(osvVuln) {
|
|
503
375
|
const summary = (osvVuln.summary || '').toLowerCase();
|
|
504
376
|
const details = (osvVuln.details || '').toLowerCase();
|
|
505
377
|
const combined = `${summary} ${details}`;
|
|
506
|
-
|
|
507
|
-
if (combined.includes('injection') || combined.includes('sql')) {
|
|
378
|
+
if (combined.includes('injection') || combined.includes('sql'))
|
|
508
379
|
return 'injection';
|
|
509
|
-
|
|
510
|
-
if (combined.includes('xss') || combined.includes('cross-site scripting')) {
|
|
380
|
+
if (combined.includes('xss') || combined.includes('cross-site scripting'))
|
|
511
381
|
return 'xss';
|
|
512
|
-
|
|
513
|
-
if (combined.includes('authentication') || combined.includes('auth bypass')) {
|
|
382
|
+
if (combined.includes('authentication') || combined.includes('auth bypass'))
|
|
514
383
|
return 'broken-auth';
|
|
515
|
-
|
|
516
|
-
if (combined.includes('sensitive data') || combined.includes('exposure')) {
|
|
384
|
+
if (combined.includes('sensitive data') || combined.includes('exposure'))
|
|
517
385
|
return 'sensitive-data';
|
|
518
|
-
|
|
519
|
-
if (combined.includes('xxe') || combined.includes('xml external')) {
|
|
386
|
+
if (combined.includes('xxe') || combined.includes('xml external'))
|
|
520
387
|
return 'xxe';
|
|
521
|
-
|
|
522
|
-
if (combined.includes('access control') || combined.includes('authorization')) {
|
|
388
|
+
if (combined.includes('access control') || combined.includes('authorization'))
|
|
523
389
|
return 'access-control';
|
|
524
|
-
|
|
525
|
-
if (combined.includes('deseriali')) {
|
|
390
|
+
if (combined.includes('deseriali'))
|
|
526
391
|
return 'insecure-deserialization';
|
|
527
|
-
|
|
528
|
-
if (combined.includes('prototype pollution') || combined.includes('dependency')) {
|
|
392
|
+
if (combined.includes('prototype pollution') || combined.includes('dependency'))
|
|
529
393
|
return 'vulnerable-components';
|
|
530
|
-
}
|
|
531
|
-
// Default to vulnerable-components for dependency vulnerabilities
|
|
532
394
|
return 'vulnerable-components';
|
|
533
395
|
}
|
|
534
396
|
async checkOutdated(dep) {
|
|
535
|
-
// Check if package is outdated by comparing with latest version from registry
|
|
536
397
|
const latestVersion = await this.getLatestVersion(dep.name, dep.ecosystem);
|
|
537
398
|
if (latestVersion !== dep.version) {
|
|
538
399
|
return {
|
|
@@ -545,27 +406,23 @@ export class SecurityAuditorService {
|
|
|
545
406
|
return null;
|
|
546
407
|
}
|
|
547
408
|
async queryVulnerabilityDatabase(name, version, ecosystem) {
|
|
548
|
-
// Query OSV API for vulnerabilities
|
|
549
409
|
const dep = { name, version, ecosystem };
|
|
550
410
|
return this.checkDependencyVulnerabilities(dep, ecosystem);
|
|
551
411
|
}
|
|
552
412
|
async getLatestVersion(name, ecosystem) {
|
|
553
413
|
try {
|
|
554
414
|
if (ecosystem === 'npm') {
|
|
555
|
-
// Query npm registry for latest version
|
|
556
415
|
const response = await httpGet(`https://registry.npmjs.org/${encodeURIComponent(name)}/latest`);
|
|
557
416
|
if (response.ok && response.data.version) {
|
|
558
417
|
return response.data.version;
|
|
559
418
|
}
|
|
560
419
|
}
|
|
561
420
|
else if (ecosystem === 'pip') {
|
|
562
|
-
// Query PyPI for latest version
|
|
563
421
|
const response = await httpGet(`https://pypi.org/pypi/${encodeURIComponent(name)}/json`);
|
|
564
422
|
if (response.ok && response.data.info?.version) {
|
|
565
423
|
return response.data.info.version;
|
|
566
424
|
}
|
|
567
425
|
}
|
|
568
|
-
// Additional registries (Maven, NuGet, Cargo) would be implemented similarly
|
|
569
426
|
}
|
|
570
427
|
catch (error) {
|
|
571
428
|
console.error(`Failed to get latest version for ${name}:`, error);
|
|
@@ -575,13 +432,11 @@ export class SecurityAuditorService {
|
|
|
575
432
|
async checkDeprecation(name, ecosystem) {
|
|
576
433
|
try {
|
|
577
434
|
if (ecosystem === 'npm') {
|
|
578
|
-
// Query npm registry for deprecation notice
|
|
579
435
|
const response = await httpGet(`https://registry.npmjs.org/${encodeURIComponent(name)}/latest`);
|
|
580
436
|
if (response.ok && response.data.deprecated) {
|
|
581
437
|
return true;
|
|
582
438
|
}
|
|
583
439
|
}
|
|
584
|
-
// Additional registries would be implemented similarly
|
|
585
440
|
}
|
|
586
441
|
catch (error) {
|
|
587
442
|
console.error(`Failed to check deprecation for ${name}:`, error);
|
|
@@ -603,12 +458,7 @@ export class SecurityAuditorService {
|
|
|
603
458
|
return latestMajor > currentMajor;
|
|
604
459
|
}
|
|
605
460
|
createDependencySummary(vulnerabilities, totalDeps) {
|
|
606
|
-
|
|
607
|
-
let critical = 0;
|
|
608
|
-
let high = 0;
|
|
609
|
-
let medium = 0;
|
|
610
|
-
let low = 0;
|
|
611
|
-
let informational = 0;
|
|
461
|
+
let critical = 0, high = 0, medium = 0, low = 0, informational = 0;
|
|
612
462
|
for (const vuln of vulnerabilities) {
|
|
613
463
|
switch (vuln.severity) {
|
|
614
464
|
case 'critical':
|
|
@@ -628,16 +478,11 @@ export class SecurityAuditorService {
|
|
|
628
478
|
break;
|
|
629
479
|
}
|
|
630
480
|
}
|
|
631
|
-
return {
|
|
632
|
-
critical,
|
|
633
|
-
high,
|
|
634
|
-
medium,
|
|
635
|
-
low,
|
|
636
|
-
informational,
|
|
637
|
-
totalFiles: totalDeps,
|
|
638
|
-
scanDurationMs: 0,
|
|
639
|
-
};
|
|
481
|
+
return { critical, high, medium, low, informational, totalFiles: totalDeps, scanDurationMs: 0 };
|
|
640
482
|
}
|
|
483
|
+
// ==========================================================================
|
|
484
|
+
// File & Scan Helpers
|
|
485
|
+
// ==========================================================================
|
|
641
486
|
shouldExclude(filePath) {
|
|
642
487
|
return this.config.excludePatterns.some((pattern) => {
|
|
643
488
|
if (pattern.startsWith('*')) {
|
|
@@ -646,789 +491,16 @@ export class SecurityAuditorService {
|
|
|
646
491
|
return filePath.includes(pattern);
|
|
647
492
|
});
|
|
648
493
|
}
|
|
649
|
-
async scanFileForSecrets(file) {
|
|
650
|
-
const secrets = [];
|
|
651
|
-
try {
|
|
652
|
-
// Read the file content
|
|
653
|
-
const content = await fs.readFile(file.value, 'utf-8');
|
|
654
|
-
const lines = content.split('\n');
|
|
655
|
-
// Comprehensive secret detection patterns
|
|
656
|
-
const secretPatterns = [
|
|
657
|
-
// AWS Keys
|
|
658
|
-
{
|
|
659
|
-
name: 'AWS Access Key ID',
|
|
660
|
-
type: 'api-key',
|
|
661
|
-
regex: /AKIA[0-9A-Z]{16}/g,
|
|
662
|
-
},
|
|
663
|
-
{
|
|
664
|
-
name: 'AWS Secret Access Key',
|
|
665
|
-
type: 'api-key',
|
|
666
|
-
regex: /(?:aws[_-]?secret[_-]?access[_-]?key|AWS_SECRET_ACCESS_KEY)['"]?\s*[:=]\s*['"]?([A-Za-z0-9/+=]{40})['"]?/gi,
|
|
667
|
-
entropyThreshold: 4.0,
|
|
668
|
-
},
|
|
669
|
-
// GitHub Tokens
|
|
670
|
-
{
|
|
671
|
-
name: 'GitHub Personal Access Token',
|
|
672
|
-
type: 'token',
|
|
673
|
-
regex: /ghp_[A-Za-z0-9]{36}/g,
|
|
674
|
-
},
|
|
675
|
-
{
|
|
676
|
-
name: 'GitHub OAuth Access Token',
|
|
677
|
-
type: 'token',
|
|
678
|
-
regex: /gho_[A-Za-z0-9]{36}/g,
|
|
679
|
-
},
|
|
680
|
-
{
|
|
681
|
-
name: 'GitHub App Token',
|
|
682
|
-
type: 'token',
|
|
683
|
-
regex: /(?:ghu|ghs)_[A-Za-z0-9]{36}/g,
|
|
684
|
-
},
|
|
685
|
-
// Generic API Keys
|
|
686
|
-
{
|
|
687
|
-
name: 'Generic API Key',
|
|
688
|
-
type: 'api-key',
|
|
689
|
-
regex: /(?:api[_-]?key|apikey|api_secret)['"]?\s*[:=]\s*['"]([A-Za-z0-9_\-]{20,})['"]?/gi,
|
|
690
|
-
entropyThreshold: 3.5,
|
|
691
|
-
},
|
|
692
|
-
// OpenAI API Key
|
|
693
|
-
{
|
|
694
|
-
name: 'OpenAI API Key',
|
|
695
|
-
type: 'api-key',
|
|
696
|
-
regex: /sk-[A-Za-z0-9]{48}/g,
|
|
697
|
-
},
|
|
698
|
-
// Stripe Keys
|
|
699
|
-
{
|
|
700
|
-
name: 'Stripe Secret Key',
|
|
701
|
-
type: 'api-key',
|
|
702
|
-
regex: /sk_live_[A-Za-z0-9]{24,}/g,
|
|
703
|
-
},
|
|
704
|
-
{
|
|
705
|
-
name: 'Stripe Publishable Key',
|
|
706
|
-
type: 'api-key',
|
|
707
|
-
regex: /pk_live_[A-Za-z0-9]{24,}/g,
|
|
708
|
-
},
|
|
709
|
-
// Private Keys
|
|
710
|
-
{
|
|
711
|
-
name: 'RSA Private Key',
|
|
712
|
-
type: 'private-key',
|
|
713
|
-
regex: /-----BEGIN\s+(?:RSA\s+)?PRIVATE\s+KEY-----/gi,
|
|
714
|
-
},
|
|
715
|
-
{
|
|
716
|
-
name: 'PGP Private Key',
|
|
717
|
-
type: 'private-key',
|
|
718
|
-
regex: /-----BEGIN\s+PGP\s+PRIVATE\s+KEY\s+BLOCK-----/gi,
|
|
719
|
-
},
|
|
720
|
-
{
|
|
721
|
-
name: 'SSH Private Key',
|
|
722
|
-
type: 'private-key',
|
|
723
|
-
regex: /-----BEGIN\s+(?:OPENSSH|DSA|EC)?\s*PRIVATE\s+KEY-----/gi,
|
|
724
|
-
},
|
|
725
|
-
// Passwords
|
|
726
|
-
{
|
|
727
|
-
name: 'Password Assignment',
|
|
728
|
-
type: 'password',
|
|
729
|
-
regex: /(?:password|passwd|pwd|secret)['"]?\s*[:=]\s*['"]([^'"\s]{8,})['"]?/gi,
|
|
730
|
-
entropyThreshold: 3.0,
|
|
731
|
-
},
|
|
732
|
-
// Database Connection Strings
|
|
733
|
-
{
|
|
734
|
-
name: 'Database Connection String',
|
|
735
|
-
type: 'password',
|
|
736
|
-
regex: /(?:mongodb|postgres|mysql|redis):\/\/[^:]+:[^@]+@[^\s'"]+/gi,
|
|
737
|
-
},
|
|
738
|
-
// JWT Tokens
|
|
739
|
-
{
|
|
740
|
-
name: 'JWT Token',
|
|
741
|
-
type: 'token',
|
|
742
|
-
regex: /eyJ[A-Za-z0-9_-]*\.eyJ[A-Za-z0-9_-]*\.[A-Za-z0-9_-]*/g,
|
|
743
|
-
entropyThreshold: 4.0,
|
|
744
|
-
},
|
|
745
|
-
// Slack Tokens
|
|
746
|
-
{
|
|
747
|
-
name: 'Slack Token',
|
|
748
|
-
type: 'token',
|
|
749
|
-
regex: /xox[baprs]-[A-Za-z0-9-]{10,}/g,
|
|
750
|
-
},
|
|
751
|
-
// Google API Key
|
|
752
|
-
{
|
|
753
|
-
name: 'Google API Key',
|
|
754
|
-
type: 'api-key',
|
|
755
|
-
regex: /AIza[A-Za-z0-9_-]{35}/g,
|
|
756
|
-
},
|
|
757
|
-
// Twilio
|
|
758
|
-
{
|
|
759
|
-
name: 'Twilio API Key',
|
|
760
|
-
type: 'api-key',
|
|
761
|
-
regex: /SK[A-Za-z0-9]{32}/g,
|
|
762
|
-
},
|
|
763
|
-
// SendGrid
|
|
764
|
-
{
|
|
765
|
-
name: 'SendGrid API Key',
|
|
766
|
-
type: 'api-key',
|
|
767
|
-
regex: /SG\.[A-Za-z0-9_-]{22}\.[A-Za-z0-9_-]{43}/g,
|
|
768
|
-
},
|
|
769
|
-
// Certificates
|
|
770
|
-
{
|
|
771
|
-
name: 'X.509 Certificate',
|
|
772
|
-
type: 'certificate',
|
|
773
|
-
regex: /-----BEGIN\s+CERTIFICATE-----/gi,
|
|
774
|
-
},
|
|
775
|
-
];
|
|
776
|
-
// Scan each line for secrets
|
|
777
|
-
for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
|
|
778
|
-
const line = lines[lineIndex];
|
|
779
|
-
const lineNumber = lineIndex + 1;
|
|
780
|
-
for (const pattern of secretPatterns) {
|
|
781
|
-
// Reset regex lastIndex for global patterns
|
|
782
|
-
pattern.regex.lastIndex = 0;
|
|
783
|
-
let match;
|
|
784
|
-
while ((match = pattern.regex.exec(line)) !== null) {
|
|
785
|
-
const matchedValue = match[1] || match[0];
|
|
786
|
-
// Calculate entropy if threshold is specified
|
|
787
|
-
const entropy = this.calculateEntropy(matchedValue);
|
|
788
|
-
// Skip low-entropy matches if threshold is specified
|
|
789
|
-
if (pattern.entropyThreshold && entropy < pattern.entropyThreshold) {
|
|
790
|
-
continue;
|
|
791
|
-
}
|
|
792
|
-
// Create masked snippet (show context but mask the actual secret)
|
|
793
|
-
const snippet = this.createMaskedSnippet(line, match.index, matchedValue.length);
|
|
794
|
-
const location = {
|
|
795
|
-
file: file.value,
|
|
796
|
-
line: lineNumber,
|
|
797
|
-
column: match.index + 1,
|
|
798
|
-
snippet,
|
|
799
|
-
};
|
|
800
|
-
secrets.push({
|
|
801
|
-
type: pattern.type,
|
|
802
|
-
location,
|
|
803
|
-
entropy,
|
|
804
|
-
isValid: this.validateSecret(pattern.type, matchedValue),
|
|
805
|
-
});
|
|
806
|
-
}
|
|
807
|
-
}
|
|
808
|
-
}
|
|
809
|
-
}
|
|
810
|
-
catch (error) {
|
|
811
|
-
// File reading error - skip this file
|
|
812
|
-
console.error(`Failed to scan file for secrets: ${file.value}`, error);
|
|
813
|
-
}
|
|
814
|
-
return secrets;
|
|
815
|
-
}
|
|
816
|
-
/**
|
|
817
|
-
* Calculate Shannon entropy of a string
|
|
818
|
-
*/
|
|
819
|
-
calculateEntropy(str) {
|
|
820
|
-
if (!str || str.length === 0)
|
|
821
|
-
return 0;
|
|
822
|
-
const charFrequency = {};
|
|
823
|
-
for (const char of str) {
|
|
824
|
-
charFrequency[char] = (charFrequency[char] || 0) + 1;
|
|
825
|
-
}
|
|
826
|
-
let entropy = 0;
|
|
827
|
-
const len = str.length;
|
|
828
|
-
for (const char in charFrequency) {
|
|
829
|
-
const probability = charFrequency[char] / len;
|
|
830
|
-
entropy -= probability * Math.log2(probability);
|
|
831
|
-
}
|
|
832
|
-
return entropy;
|
|
833
|
-
}
|
|
834
|
-
/**
|
|
835
|
-
* Create a masked snippet for display
|
|
836
|
-
*/
|
|
837
|
-
createMaskedSnippet(line, matchIndex, matchLength) {
|
|
838
|
-
const contextBefore = 20;
|
|
839
|
-
const contextAfter = 10;
|
|
840
|
-
const start = Math.max(0, matchIndex - contextBefore);
|
|
841
|
-
const end = Math.min(line.length, matchIndex + matchLength + contextAfter);
|
|
842
|
-
let snippet = line.substring(start, end);
|
|
843
|
-
// Mask the secret value (show first 4 and last 4 characters)
|
|
844
|
-
const secretStart = matchIndex - start;
|
|
845
|
-
const secretInSnippet = snippet.substring(secretStart, secretStart + matchLength);
|
|
846
|
-
if (secretInSnippet.length > 8) {
|
|
847
|
-
const masked = secretInSnippet.substring(0, 4) + '...' + secretInSnippet.substring(secretInSnippet.length - 4);
|
|
848
|
-
snippet = snippet.substring(0, secretStart) + masked + snippet.substring(secretStart + matchLength);
|
|
849
|
-
}
|
|
850
|
-
if (start > 0)
|
|
851
|
-
snippet = '...' + snippet;
|
|
852
|
-
if (end < line.length)
|
|
853
|
-
snippet = snippet + '...';
|
|
854
|
-
return snippet;
|
|
855
|
-
}
|
|
856
|
-
/**
|
|
857
|
-
* Validate if a detected secret is likely valid (basic validation)
|
|
858
|
-
*/
|
|
859
|
-
validateSecret(type, value) {
|
|
860
|
-
// Basic validation - in production, could do more sophisticated checks
|
|
861
|
-
switch (type) {
|
|
862
|
-
case 'api-key':
|
|
863
|
-
// Check minimum length and character variety
|
|
864
|
-
return value.length >= 20 && /[a-z]/.test(value) && /[A-Z0-9]/.test(value);
|
|
865
|
-
case 'token':
|
|
866
|
-
return value.length >= 20;
|
|
867
|
-
case 'password':
|
|
868
|
-
// Likely not a placeholder password
|
|
869
|
-
return !['password', 'secret', 'changeme', '12345678', 'qwerty'].includes(value.toLowerCase());
|
|
870
|
-
case 'private-key':
|
|
871
|
-
return true; // Private key headers are already specific
|
|
872
|
-
case 'certificate':
|
|
873
|
-
return true;
|
|
874
|
-
default:
|
|
875
|
-
return true;
|
|
876
|
-
}
|
|
877
|
-
}
|
|
878
|
-
/**
|
|
879
|
-
* Perform SAST scan using AST-based analysis for JavaScript/TypeScript
|
|
880
|
-
* Scans for common vulnerability patterns: XSS, SQL injection, command injection, path traversal
|
|
881
|
-
*/
|
|
882
|
-
async performSASTScan() {
|
|
883
|
-
const scanId = uuidv4();
|
|
884
|
-
const startTime = Date.now();
|
|
885
|
-
const vulnerabilities = [];
|
|
886
|
-
let filesScanned = 0;
|
|
887
|
-
let linesScanned = 0;
|
|
888
|
-
try {
|
|
889
|
-
// Find source files to scan
|
|
890
|
-
const sourceFiles = await this.findSourceFiles(process.cwd());
|
|
891
|
-
// Define vulnerability patterns for AST-like analysis
|
|
892
|
-
const vulnerabilityPatterns = [
|
|
893
|
-
// SQL Injection patterns
|
|
894
|
-
{
|
|
895
|
-
id: 'sqli-concat',
|
|
896
|
-
pattern: /(?:query|execute|exec|run)\s*\(\s*(?:['"`].*?\s*\+|`[^`]*\$\{)/gi,
|
|
897
|
-
title: 'SQL Injection via String Concatenation',
|
|
898
|
-
description: 'SQL query constructed using string concatenation with potentially untrusted input',
|
|
899
|
-
severity: 'critical',
|
|
900
|
-
category: 'injection',
|
|
901
|
-
remediation: 'Use parameterized queries or prepared statements',
|
|
902
|
-
fixExample: 'db.query("SELECT * FROM users WHERE id = $1", [userId])',
|
|
903
|
-
cweId: 'CWE-89',
|
|
904
|
-
},
|
|
905
|
-
// XSS patterns
|
|
906
|
-
{
|
|
907
|
-
id: 'xss-innerhtml',
|
|
908
|
-
pattern: /\.innerHTML\s*=\s*(?!['"`])/g,
|
|
909
|
-
title: 'XSS via innerHTML Assignment',
|
|
910
|
-
description: 'Direct innerHTML assignment with potentially unsanitized content',
|
|
911
|
-
severity: 'high',
|
|
912
|
-
category: 'xss',
|
|
913
|
-
remediation: 'Use textContent for text, or sanitize HTML with DOMPurify',
|
|
914
|
-
fixExample: 'element.textContent = userInput;',
|
|
915
|
-
cweId: 'CWE-79',
|
|
916
|
-
},
|
|
917
|
-
{
|
|
918
|
-
id: 'xss-document-write',
|
|
919
|
-
pattern: /document\.write\s*\([^)]+\)/g,
|
|
920
|
-
title: 'XSS via document.write',
|
|
921
|
-
description: 'document.write() can execute scripts from untrusted data',
|
|
922
|
-
severity: 'high',
|
|
923
|
-
category: 'xss',
|
|
924
|
-
remediation: 'Avoid document.write(); use DOM manipulation methods',
|
|
925
|
-
cweId: 'CWE-79',
|
|
926
|
-
},
|
|
927
|
-
{
|
|
928
|
-
id: 'xss-eval',
|
|
929
|
-
pattern: /(?<!\.)\beval\s*\([^)]+\)/g,
|
|
930
|
-
title: 'Code Injection via eval()',
|
|
931
|
-
description: 'eval() executes arbitrary code and is a major security risk',
|
|
932
|
-
severity: 'critical',
|
|
933
|
-
category: 'xss',
|
|
934
|
-
remediation: 'Never use eval(); use JSON.parse() for JSON data',
|
|
935
|
-
fixExample: 'JSON.parse(jsonString)',
|
|
936
|
-
cweId: 'CWE-95',
|
|
937
|
-
},
|
|
938
|
-
{
|
|
939
|
-
id: 'xss-dangerous-react',
|
|
940
|
-
pattern: /dangerouslySetInnerHTML\s*=\s*\{/g,
|
|
941
|
-
title: 'React dangerouslySetInnerHTML Usage',
|
|
942
|
-
description: 'dangerouslySetInnerHTML bypasses React XSS protections',
|
|
943
|
-
severity: 'medium',
|
|
944
|
-
category: 'xss',
|
|
945
|
-
remediation: 'Sanitize HTML content with DOMPurify before use',
|
|
946
|
-
fixExample: 'dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(content) }}',
|
|
947
|
-
cweId: 'CWE-79',
|
|
948
|
-
},
|
|
949
|
-
// Command Injection patterns
|
|
950
|
-
{
|
|
951
|
-
id: 'cmd-injection-exec',
|
|
952
|
-
pattern: /(?:child_process\.)?exec\s*\(\s*(?:[^,)]*\s*\+|`[^`]*\$\{)/g,
|
|
953
|
-
title: 'Command Injection via exec()',
|
|
954
|
-
description: 'Shell command execution with unsanitized input',
|
|
955
|
-
severity: 'critical',
|
|
956
|
-
category: 'injection',
|
|
957
|
-
remediation: 'Use execFile() with argument array instead of exec()',
|
|
958
|
-
fixExample: 'execFile("command", [arg1, arg2], callback)',
|
|
959
|
-
cweId: 'CWE-78',
|
|
960
|
-
},
|
|
961
|
-
{
|
|
962
|
-
id: 'cmd-injection-spawn-shell',
|
|
963
|
-
pattern: /spawn\s*\([^)]+,\s*\{[^}]*shell\s*:\s*true/g,
|
|
964
|
-
title: 'Dangerous Shell Option in spawn()',
|
|
965
|
-
description: 'spawn() with shell: true can enable command injection',
|
|
966
|
-
severity: 'high',
|
|
967
|
-
category: 'injection',
|
|
968
|
-
remediation: 'Avoid shell: true option; use direct command execution',
|
|
969
|
-
cweId: 'CWE-78',
|
|
970
|
-
},
|
|
971
|
-
// Path Traversal patterns
|
|
972
|
-
{
|
|
973
|
-
id: 'path-traversal-readfile',
|
|
974
|
-
pattern: /(?:readFile|readFileSync)\s*\([^)]*\+/g,
|
|
975
|
-
title: 'Path Traversal via File Read',
|
|
976
|
-
description: 'File read operation with concatenated path may allow directory traversal',
|
|
977
|
-
severity: 'high',
|
|
978
|
-
category: 'access-control',
|
|
979
|
-
remediation: 'Validate and sanitize file paths; use path.resolve() and check against base directory',
|
|
980
|
-
fixExample: 'const safePath = path.resolve(baseDir, path.basename(userInput))',
|
|
981
|
-
cweId: 'CWE-22',
|
|
982
|
-
},
|
|
983
|
-
{
|
|
984
|
-
id: 'path-traversal-writefile',
|
|
985
|
-
pattern: /(?:writeFile|writeFileSync)\s*\([^)]*\+/g,
|
|
986
|
-
title: 'Path Traversal via File Write',
|
|
987
|
-
description: 'File write operation with concatenated path may allow directory traversal',
|
|
988
|
-
severity: 'high',
|
|
989
|
-
category: 'access-control',
|
|
990
|
-
remediation: 'Validate file paths before writing; ensure path is within allowed directory',
|
|
991
|
-
cweId: 'CWE-22',
|
|
992
|
-
},
|
|
993
|
-
// Hardcoded secrets
|
|
994
|
-
{
|
|
995
|
-
id: 'secret-private-key',
|
|
996
|
-
pattern: /-----BEGIN\s+(?:RSA\s+)?PRIVATE\s+KEY-----/g,
|
|
997
|
-
title: 'Private Key Detected in Source',
|
|
998
|
-
description: 'Private key found in source code',
|
|
999
|
-
severity: 'critical',
|
|
1000
|
-
category: 'sensitive-data',
|
|
1001
|
-
remediation: 'Store private keys in secure key management systems, not in code',
|
|
1002
|
-
cweId: 'CWE-798',
|
|
1003
|
-
},
|
|
1004
|
-
// Insecure configurations
|
|
1005
|
-
{
|
|
1006
|
-
id: 'config-tls-disabled',
|
|
1007
|
-
pattern: /rejectUnauthorized\s*:\s*false/g,
|
|
1008
|
-
title: 'TLS Certificate Validation Disabled',
|
|
1009
|
-
description: 'Disabling TLS certificate validation exposes to MITM attacks',
|
|
1010
|
-
severity: 'high',
|
|
1011
|
-
category: 'security-misconfiguration',
|
|
1012
|
-
remediation: 'Always enable TLS certificate validation in production',
|
|
1013
|
-
cweId: 'CWE-295',
|
|
1014
|
-
},
|
|
1015
|
-
{
|
|
1016
|
-
id: 'config-cors-wildcard',
|
|
1017
|
-
pattern: /cors\s*\(\s*\{[^}]*origin\s*:\s*['"]\*['"]/gi,
|
|
1018
|
-
title: 'Permissive CORS Configuration',
|
|
1019
|
-
description: 'CORS allows all origins (*) which may expose sensitive data',
|
|
1020
|
-
severity: 'medium',
|
|
1021
|
-
category: 'security-misconfiguration',
|
|
1022
|
-
remediation: 'Restrict CORS to specific trusted origins',
|
|
1023
|
-
fixExample: 'cors({ origin: ["https://trusted-domain.com"] })',
|
|
1024
|
-
cweId: 'CWE-942',
|
|
1025
|
-
},
|
|
1026
|
-
];
|
|
1027
|
-
for (const filePath of sourceFiles) {
|
|
1028
|
-
if (this.shouldExclude(filePath)) {
|
|
1029
|
-
continue;
|
|
1030
|
-
}
|
|
1031
|
-
// Only scan JS/TS files
|
|
1032
|
-
const ext = path.extname(filePath).toLowerCase();
|
|
1033
|
-
if (!['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'].includes(ext)) {
|
|
1034
|
-
continue;
|
|
1035
|
-
}
|
|
1036
|
-
try {
|
|
1037
|
-
const content = await fs.readFile(filePath, 'utf-8');
|
|
1038
|
-
const lines = content.split('\n');
|
|
1039
|
-
filesScanned++;
|
|
1040
|
-
linesScanned += lines.length;
|
|
1041
|
-
// Check each vulnerability pattern
|
|
1042
|
-
for (const vulnPattern of vulnerabilityPatterns) {
|
|
1043
|
-
// Reset regex state
|
|
1044
|
-
vulnPattern.pattern.lastIndex = 0;
|
|
1045
|
-
let match;
|
|
1046
|
-
while ((match = vulnPattern.pattern.exec(content)) !== null) {
|
|
1047
|
-
// Calculate line and column
|
|
1048
|
-
const beforeMatch = content.substring(0, match.index);
|
|
1049
|
-
const linesBefore = beforeMatch.split('\n');
|
|
1050
|
-
const lineNumber = linesBefore.length;
|
|
1051
|
-
const column = linesBefore[linesBefore.length - 1].length + 1;
|
|
1052
|
-
// Check if in comment
|
|
1053
|
-
const currentLine = lines[lineNumber - 1] || '';
|
|
1054
|
-
if (currentLine.trimStart().startsWith('//') || currentLine.trimStart().startsWith('*')) {
|
|
1055
|
-
continue;
|
|
1056
|
-
}
|
|
1057
|
-
// Check for nosec annotation
|
|
1058
|
-
if (currentLine.includes('// nosec') || currentLine.includes('// security-ignore')) {
|
|
1059
|
-
continue;
|
|
1060
|
-
}
|
|
1061
|
-
// Extract snippet with context
|
|
1062
|
-
const startLine = Math.max(0, lineNumber - 2);
|
|
1063
|
-
const endLine = Math.min(lines.length, lineNumber + 1);
|
|
1064
|
-
const snippet = lines.slice(startLine, endLine).join('\n');
|
|
1065
|
-
const location = {
|
|
1066
|
-
file: filePath,
|
|
1067
|
-
line: lineNumber,
|
|
1068
|
-
column,
|
|
1069
|
-
snippet,
|
|
1070
|
-
};
|
|
1071
|
-
const remediation = {
|
|
1072
|
-
description: vulnPattern.remediation,
|
|
1073
|
-
fixExample: vulnPattern.fixExample,
|
|
1074
|
-
estimatedEffort: vulnPattern.severity === 'critical' ? 'moderate' : 'minor',
|
|
1075
|
-
automatable: vulnPattern.severity === 'low' || vulnPattern.severity === 'medium',
|
|
1076
|
-
};
|
|
1077
|
-
vulnerabilities.push({
|
|
1078
|
-
id: uuidv4(),
|
|
1079
|
-
cveId: undefined,
|
|
1080
|
-
title: vulnPattern.title,
|
|
1081
|
-
description: `${vulnPattern.description} [${vulnPattern.cweId}]`,
|
|
1082
|
-
severity: vulnPattern.severity,
|
|
1083
|
-
category: vulnPattern.category,
|
|
1084
|
-
location,
|
|
1085
|
-
remediation,
|
|
1086
|
-
references: [
|
|
1087
|
-
`https://cwe.mitre.org/data/definitions/${vulnPattern.cweId.replace('CWE-', '')}.html`,
|
|
1088
|
-
],
|
|
1089
|
-
});
|
|
1090
|
-
}
|
|
1091
|
-
}
|
|
1092
|
-
}
|
|
1093
|
-
catch {
|
|
1094
|
-
// Skip files that can't be read
|
|
1095
|
-
}
|
|
1096
|
-
}
|
|
1097
|
-
}
|
|
1098
|
-
catch (error) {
|
|
1099
|
-
console.error('SAST scan failed:', error);
|
|
1100
|
-
}
|
|
1101
|
-
const scanDurationMs = Date.now() - startTime;
|
|
1102
|
-
// Calculate summary
|
|
1103
|
-
let critical = 0, high = 0, medium = 0, low = 0, informational = 0;
|
|
1104
|
-
for (const vuln of vulnerabilities) {
|
|
1105
|
-
switch (vuln.severity) {
|
|
1106
|
-
case 'critical':
|
|
1107
|
-
critical++;
|
|
1108
|
-
break;
|
|
1109
|
-
case 'high':
|
|
1110
|
-
high++;
|
|
1111
|
-
break;
|
|
1112
|
-
case 'medium':
|
|
1113
|
-
medium++;
|
|
1114
|
-
break;
|
|
1115
|
-
case 'low':
|
|
1116
|
-
low++;
|
|
1117
|
-
break;
|
|
1118
|
-
case 'informational':
|
|
1119
|
-
informational++;
|
|
1120
|
-
break;
|
|
1121
|
-
}
|
|
1122
|
-
}
|
|
1123
|
-
return {
|
|
1124
|
-
scanId,
|
|
1125
|
-
vulnerabilities,
|
|
1126
|
-
summary: {
|
|
1127
|
-
critical,
|
|
1128
|
-
high,
|
|
1129
|
-
medium,
|
|
1130
|
-
low,
|
|
1131
|
-
informational,
|
|
1132
|
-
totalFiles: filesScanned,
|
|
1133
|
-
scanDurationMs,
|
|
1134
|
-
},
|
|
1135
|
-
coverage: {
|
|
1136
|
-
filesScanned,
|
|
1137
|
-
linesScanned,
|
|
1138
|
-
rulesApplied: 12, // Number of vulnerability patterns
|
|
1139
|
-
},
|
|
1140
|
-
};
|
|
1141
|
-
}
|
|
1142
|
-
/**
|
|
1143
|
-
* Perform DAST scan using HTTP requests to test for vulnerabilities
|
|
1144
|
-
* Tests for common web vulnerabilities: XSS, SQL injection, security headers, etc.
|
|
1145
|
-
*/
|
|
1146
|
-
async performDASTScan(targetUrl) {
|
|
1147
|
-
const scanId = uuidv4();
|
|
1148
|
-
const startTime = Date.now();
|
|
1149
|
-
const vulnerabilities = [];
|
|
1150
|
-
let crawledUrls = 0;
|
|
1151
|
-
try {
|
|
1152
|
-
// Validate URL
|
|
1153
|
-
let parsedUrl;
|
|
1154
|
-
try {
|
|
1155
|
-
parsedUrl = new URL(targetUrl);
|
|
1156
|
-
}
|
|
1157
|
-
catch {
|
|
1158
|
-
return {
|
|
1159
|
-
scanId,
|
|
1160
|
-
targetUrl,
|
|
1161
|
-
vulnerabilities: [{
|
|
1162
|
-
id: uuidv4(),
|
|
1163
|
-
title: 'Invalid Target URL',
|
|
1164
|
-
description: 'The provided target URL is not valid',
|
|
1165
|
-
severity: 'informational',
|
|
1166
|
-
category: 'security-misconfiguration',
|
|
1167
|
-
location: { file: targetUrl },
|
|
1168
|
-
remediation: { description: 'Provide a valid URL', estimatedEffort: 'trivial', automatable: false },
|
|
1169
|
-
references: [],
|
|
1170
|
-
}],
|
|
1171
|
-
summary: { critical: 0, high: 0, medium: 0, low: 0, informational: 1, totalFiles: 0, scanDurationMs: Date.now() - startTime },
|
|
1172
|
-
crawledUrls: 0,
|
|
1173
|
-
};
|
|
1174
|
-
}
|
|
1175
|
-
// Perform HTTP request to check security headers and response characteristics
|
|
1176
|
-
const controller = new AbortController();
|
|
1177
|
-
const timeoutId = setTimeout(() => controller.abort(), 30000); // 30s timeout
|
|
1178
|
-
try {
|
|
1179
|
-
const response = await fetch(targetUrl, {
|
|
1180
|
-
method: 'GET',
|
|
1181
|
-
headers: {
|
|
1182
|
-
'User-Agent': 'AgenticQE-SecurityScanner/3.0',
|
|
1183
|
-
'Accept': 'text/html,application/json,*/*',
|
|
1184
|
-
},
|
|
1185
|
-
signal: controller.signal,
|
|
1186
|
-
redirect: 'follow',
|
|
1187
|
-
});
|
|
1188
|
-
clearTimeout(timeoutId);
|
|
1189
|
-
crawledUrls = 1;
|
|
1190
|
-
// Check security headers
|
|
1191
|
-
const headers = response.headers;
|
|
1192
|
-
// Check for missing security headers
|
|
1193
|
-
const securityHeaderChecks = [
|
|
1194
|
-
{
|
|
1195
|
-
header: 'strict-transport-security',
|
|
1196
|
-
title: 'Missing HTTP Strict Transport Security (HSTS)',
|
|
1197
|
-
description: 'HSTS header is missing, allowing downgrade attacks',
|
|
1198
|
-
severity: 'medium',
|
|
1199
|
-
remediation: 'Add Strict-Transport-Security header with appropriate max-age',
|
|
1200
|
-
},
|
|
1201
|
-
{
|
|
1202
|
-
header: 'x-content-type-options',
|
|
1203
|
-
title: 'Missing X-Content-Type-Options Header',
|
|
1204
|
-
description: 'X-Content-Type-Options header is missing, allowing MIME sniffing attacks',
|
|
1205
|
-
severity: 'low',
|
|
1206
|
-
remediation: 'Add X-Content-Type-Options: nosniff header',
|
|
1207
|
-
},
|
|
1208
|
-
{
|
|
1209
|
-
header: 'x-frame-options',
|
|
1210
|
-
title: 'Missing X-Frame-Options Header',
|
|
1211
|
-
description: 'X-Frame-Options header is missing, allowing clickjacking attacks',
|
|
1212
|
-
severity: 'medium',
|
|
1213
|
-
remediation: 'Add X-Frame-Options: DENY or SAMEORIGIN header',
|
|
1214
|
-
},
|
|
1215
|
-
{
|
|
1216
|
-
header: 'content-security-policy',
|
|
1217
|
-
title: 'Missing Content Security Policy',
|
|
1218
|
-
description: 'CSP header is missing, increasing XSS attack surface',
|
|
1219
|
-
severity: 'medium',
|
|
1220
|
-
remediation: 'Implement a Content-Security-Policy header',
|
|
1221
|
-
},
|
|
1222
|
-
{
|
|
1223
|
-
header: 'x-xss-protection',
|
|
1224
|
-
title: 'Missing X-XSS-Protection Header',
|
|
1225
|
-
description: 'X-XSS-Protection header is missing (legacy XSS filter)',
|
|
1226
|
-
severity: 'low',
|
|
1227
|
-
remediation: 'Add X-XSS-Protection: 1; mode=block header',
|
|
1228
|
-
},
|
|
1229
|
-
];
|
|
1230
|
-
for (const check of securityHeaderChecks) {
|
|
1231
|
-
if (!headers.get(check.header)) {
|
|
1232
|
-
vulnerabilities.push({
|
|
1233
|
-
id: uuidv4(),
|
|
1234
|
-
title: check.title,
|
|
1235
|
-
description: check.description,
|
|
1236
|
-
severity: check.severity,
|
|
1237
|
-
category: 'security-misconfiguration',
|
|
1238
|
-
location: {
|
|
1239
|
-
file: targetUrl,
|
|
1240
|
-
snippet: `Response Headers: ${check.header} not present`,
|
|
1241
|
-
},
|
|
1242
|
-
remediation: {
|
|
1243
|
-
description: check.remediation,
|
|
1244
|
-
estimatedEffort: 'minor',
|
|
1245
|
-
automatable: true,
|
|
1246
|
-
},
|
|
1247
|
-
references: [
|
|
1248
|
-
'https://owasp.org/www-project-secure-headers/',
|
|
1249
|
-
],
|
|
1250
|
-
});
|
|
1251
|
-
}
|
|
1252
|
-
}
|
|
1253
|
-
// Check for insecure cookies
|
|
1254
|
-
const cookies = headers.get('set-cookie');
|
|
1255
|
-
if (cookies) {
|
|
1256
|
-
if (!cookies.toLowerCase().includes('secure')) {
|
|
1257
|
-
vulnerabilities.push({
|
|
1258
|
-
id: uuidv4(),
|
|
1259
|
-
title: 'Cookie Without Secure Flag',
|
|
1260
|
-
description: 'Session cookie is set without the Secure flag',
|
|
1261
|
-
severity: 'medium',
|
|
1262
|
-
category: 'sensitive-data',
|
|
1263
|
-
location: { file: targetUrl, snippet: `Set-Cookie: ${cookies.substring(0, 50)}...` },
|
|
1264
|
-
remediation: { description: 'Add Secure flag to cookies', estimatedEffort: 'trivial', automatable: true },
|
|
1265
|
-
references: ['https://owasp.org/www-community/controls/SecureCookieAttribute'],
|
|
1266
|
-
});
|
|
1267
|
-
}
|
|
1268
|
-
if (!cookies.toLowerCase().includes('httponly')) {
|
|
1269
|
-
vulnerabilities.push({
|
|
1270
|
-
id: uuidv4(),
|
|
1271
|
-
title: 'Cookie Without HttpOnly Flag',
|
|
1272
|
-
description: 'Session cookie is set without the HttpOnly flag, making it accessible to JavaScript',
|
|
1273
|
-
severity: 'medium',
|
|
1274
|
-
category: 'sensitive-data',
|
|
1275
|
-
location: { file: targetUrl, snippet: `Set-Cookie: ${cookies.substring(0, 50)}...` },
|
|
1276
|
-
remediation: { description: 'Add HttpOnly flag to session cookies', estimatedEffort: 'trivial', automatable: true },
|
|
1277
|
-
references: ['https://owasp.org/www-community/HttpOnly'],
|
|
1278
|
-
});
|
|
1279
|
-
}
|
|
1280
|
-
if (!cookies.toLowerCase().includes('samesite')) {
|
|
1281
|
-
vulnerabilities.push({
|
|
1282
|
-
id: uuidv4(),
|
|
1283
|
-
title: 'Cookie Without SameSite Attribute',
|
|
1284
|
-
description: 'Cookie is set without the SameSite attribute, potentially vulnerable to CSRF',
|
|
1285
|
-
severity: 'low',
|
|
1286
|
-
category: 'broken-auth',
|
|
1287
|
-
location: { file: targetUrl, snippet: `Set-Cookie: ${cookies.substring(0, 50)}...` },
|
|
1288
|
-
remediation: { description: 'Add SameSite=Strict or SameSite=Lax to cookies', estimatedEffort: 'trivial', automatable: true },
|
|
1289
|
-
references: ['https://owasp.org/www-community/SameSite'],
|
|
1290
|
-
});
|
|
1291
|
-
}
|
|
1292
|
-
}
|
|
1293
|
-
// Check for server information disclosure
|
|
1294
|
-
const server = headers.get('server');
|
|
1295
|
-
if (server && /[0-9]+\.[0-9]+/.test(server)) {
|
|
1296
|
-
vulnerabilities.push({
|
|
1297
|
-
id: uuidv4(),
|
|
1298
|
-
title: 'Server Version Disclosure',
|
|
1299
|
-
description: `Server header reveals version information: ${server}`,
|
|
1300
|
-
severity: 'low',
|
|
1301
|
-
category: 'security-misconfiguration',
|
|
1302
|
-
location: { file: targetUrl, snippet: `Server: ${server}` },
|
|
1303
|
-
remediation: { description: 'Remove or obfuscate server version information', estimatedEffort: 'trivial', automatable: true },
|
|
1304
|
-
references: ['https://owasp.org/www-project-web-security-testing-guide/'],
|
|
1305
|
-
});
|
|
1306
|
-
}
|
|
1307
|
-
// Check for HTTPS
|
|
1308
|
-
if (parsedUrl.protocol === 'http:') {
|
|
1309
|
-
vulnerabilities.push({
|
|
1310
|
-
id: uuidv4(),
|
|
1311
|
-
title: 'Insecure HTTP Protocol',
|
|
1312
|
-
description: 'Target is using HTTP instead of HTTPS, exposing data in transit',
|
|
1313
|
-
severity: 'high',
|
|
1314
|
-
category: 'sensitive-data',
|
|
1315
|
-
location: { file: targetUrl },
|
|
1316
|
-
remediation: { description: 'Use HTTPS with valid TLS certificate', estimatedEffort: 'moderate', automatable: false },
|
|
1317
|
-
references: ['https://owasp.org/www-project-web-security-testing-guide/'],
|
|
1318
|
-
});
|
|
1319
|
-
}
|
|
1320
|
-
// Try common test endpoints for additional checks
|
|
1321
|
-
const testEndpoints = [
|
|
1322
|
-
{ path: '/.git/config', vuln: 'Git Repository Exposed', severity: 'high' },
|
|
1323
|
-
{ path: '/.env', vuln: 'Environment File Exposed', severity: 'critical' },
|
|
1324
|
-
{ path: '/phpinfo.php', vuln: 'PHP Info Exposed', severity: 'medium' },
|
|
1325
|
-
{ path: '/wp-config.php.bak', vuln: 'WordPress Config Backup Exposed', severity: 'critical' },
|
|
1326
|
-
];
|
|
1327
|
-
for (const endpoint of testEndpoints) {
|
|
1328
|
-
try {
|
|
1329
|
-
const testUrl = new URL(endpoint.path, parsedUrl.origin).toString();
|
|
1330
|
-
const testResponse = await fetch(testUrl, {
|
|
1331
|
-
method: 'GET',
|
|
1332
|
-
signal: AbortSignal.timeout(5000),
|
|
1333
|
-
});
|
|
1334
|
-
if (testResponse.ok && testResponse.status === 200) {
|
|
1335
|
-
const text = await testResponse.text();
|
|
1336
|
-
// Verify it's actually the sensitive content, not a custom 404
|
|
1337
|
-
if (text.length > 10 && !text.toLowerCase().includes('not found')) {
|
|
1338
|
-
crawledUrls++;
|
|
1339
|
-
vulnerabilities.push({
|
|
1340
|
-
id: uuidv4(),
|
|
1341
|
-
title: endpoint.vuln,
|
|
1342
|
-
description: `Sensitive file found at ${endpoint.path}`,
|
|
1343
|
-
severity: endpoint.severity,
|
|
1344
|
-
category: 'sensitive-data',
|
|
1345
|
-
location: { file: testUrl },
|
|
1346
|
-
remediation: { description: 'Remove or restrict access to sensitive files', estimatedEffort: 'trivial', automatable: true },
|
|
1347
|
-
references: ['https://owasp.org/www-project-web-security-testing-guide/'],
|
|
1348
|
-
});
|
|
1349
|
-
}
|
|
1350
|
-
}
|
|
1351
|
-
}
|
|
1352
|
-
catch {
|
|
1353
|
-
// Endpoint not accessible, which is expected/good
|
|
1354
|
-
}
|
|
1355
|
-
}
|
|
1356
|
-
}
|
|
1357
|
-
catch (fetchError) {
|
|
1358
|
-
clearTimeout(timeoutId);
|
|
1359
|
-
const errorMessage = fetchError instanceof Error ? fetchError.message : String(fetchError);
|
|
1360
|
-
// Network errors might indicate issues
|
|
1361
|
-
if (errorMessage.includes('certificate') || errorMessage.includes('SSL') || errorMessage.includes('TLS')) {
|
|
1362
|
-
vulnerabilities.push({
|
|
1363
|
-
id: uuidv4(),
|
|
1364
|
-
title: 'TLS/SSL Certificate Issue',
|
|
1365
|
-
description: `Certificate error: ${errorMessage}`,
|
|
1366
|
-
severity: 'high',
|
|
1367
|
-
category: 'security-misconfiguration',
|
|
1368
|
-
location: { file: targetUrl },
|
|
1369
|
-
remediation: { description: 'Fix TLS certificate configuration', estimatedEffort: 'moderate', automatable: false },
|
|
1370
|
-
references: ['https://owasp.org/www-project-web-security-testing-guide/'],
|
|
1371
|
-
});
|
|
1372
|
-
}
|
|
1373
|
-
}
|
|
1374
|
-
}
|
|
1375
|
-
catch (error) {
|
|
1376
|
-
console.error('DAST scan failed:', error);
|
|
1377
|
-
}
|
|
1378
|
-
const scanDurationMs = Date.now() - startTime;
|
|
1379
|
-
// Calculate summary
|
|
1380
|
-
let critical = 0, high = 0, medium = 0, low = 0, informational = 0;
|
|
1381
|
-
for (const vuln of vulnerabilities) {
|
|
1382
|
-
switch (vuln.severity) {
|
|
1383
|
-
case 'critical':
|
|
1384
|
-
critical++;
|
|
1385
|
-
break;
|
|
1386
|
-
case 'high':
|
|
1387
|
-
high++;
|
|
1388
|
-
break;
|
|
1389
|
-
case 'medium':
|
|
1390
|
-
medium++;
|
|
1391
|
-
break;
|
|
1392
|
-
case 'low':
|
|
1393
|
-
low++;
|
|
1394
|
-
break;
|
|
1395
|
-
case 'informational':
|
|
1396
|
-
informational++;
|
|
1397
|
-
break;
|
|
1398
|
-
}
|
|
1399
|
-
}
|
|
1400
|
-
return {
|
|
1401
|
-
scanId,
|
|
1402
|
-
targetUrl,
|
|
1403
|
-
vulnerabilities,
|
|
1404
|
-
summary: {
|
|
1405
|
-
critical,
|
|
1406
|
-
high,
|
|
1407
|
-
medium,
|
|
1408
|
-
low,
|
|
1409
|
-
informational,
|
|
1410
|
-
totalFiles: 1,
|
|
1411
|
-
scanDurationMs,
|
|
1412
|
-
},
|
|
1413
|
-
crawledUrls,
|
|
1414
|
-
};
|
|
1415
|
-
}
|
|
1416
|
-
/**
|
|
1417
|
-
* Perform dependency scan using OSV API
|
|
1418
|
-
*/
|
|
1419
494
|
async performDependencyScan() {
|
|
1420
495
|
const startTime = Date.now();
|
|
1421
496
|
const vulnerabilities = [];
|
|
1422
497
|
const outdatedPackages = [];
|
|
1423
498
|
try {
|
|
1424
|
-
// Look for package.json in current working directory
|
|
1425
499
|
const manifestPath = path.join(process.cwd(), 'package.json');
|
|
1426
500
|
const dependencies = await this.parseDependencies(manifestPath, 'npm');
|
|
1427
501
|
for (const dep of dependencies) {
|
|
1428
|
-
// Check for vulnerabilities via OSV API
|
|
1429
502
|
const vulns = await this.checkDependencyVulnerabilities(dep, dep.ecosystem);
|
|
1430
503
|
vulnerabilities.push(...vulns);
|
|
1431
|
-
// Check for outdated packages
|
|
1432
504
|
const outdated = await this.checkOutdated(dep);
|
|
1433
505
|
if (outdated) {
|
|
1434
506
|
outdatedPackages.push(outdated);
|
|
@@ -1436,14 +508,7 @@ export class SecurityAuditorService {
|
|
|
1436
508
|
}
|
|
1437
509
|
const scanDurationMs = Date.now() - startTime;
|
|
1438
510
|
const baseSummary = this.createDependencySummary(vulnerabilities, dependencies.length);
|
|
1439
|
-
return {
|
|
1440
|
-
vulnerabilities,
|
|
1441
|
-
outdatedPackages,
|
|
1442
|
-
summary: {
|
|
1443
|
-
...baseSummary,
|
|
1444
|
-
scanDurationMs,
|
|
1445
|
-
},
|
|
1446
|
-
};
|
|
511
|
+
return { vulnerabilities, outdatedPackages, summary: { ...baseSummary, scanDurationMs } };
|
|
1447
512
|
}
|
|
1448
513
|
catch (error) {
|
|
1449
514
|
console.error('Dependency scan failed:', error);
|
|
@@ -1451,25 +516,16 @@ export class SecurityAuditorService {
|
|
|
1451
516
|
vulnerabilities: [],
|
|
1452
517
|
outdatedPackages: [],
|
|
1453
518
|
summary: {
|
|
1454
|
-
critical: 0,
|
|
1455
|
-
|
|
1456
|
-
medium: 0,
|
|
1457
|
-
low: 0,
|
|
1458
|
-
informational: 0,
|
|
1459
|
-
totalFiles: 0,
|
|
1460
|
-
scanDurationMs: Date.now() - startTime,
|
|
519
|
+
critical: 0, high: 0, medium: 0, low: 0, informational: 0,
|
|
520
|
+
totalFiles: 0, scanDurationMs: Date.now() - startTime,
|
|
1461
521
|
},
|
|
1462
522
|
};
|
|
1463
523
|
}
|
|
1464
524
|
}
|
|
1465
|
-
/**
|
|
1466
|
-
* Perform secret scan on source files
|
|
1467
|
-
*/
|
|
1468
525
|
async performSecretScan() {
|
|
1469
526
|
const secretsFound = [];
|
|
1470
527
|
let filesScanned = 0;
|
|
1471
528
|
try {
|
|
1472
|
-
// Get list of source files to scan
|
|
1473
529
|
const sourceFiles = await this.findSourceFiles(process.cwd());
|
|
1474
530
|
for (const filePath of sourceFiles) {
|
|
1475
531
|
if (this.shouldExclude(filePath)) {
|
|
@@ -1477,28 +533,21 @@ export class SecurityAuditorService {
|
|
|
1477
533
|
}
|
|
1478
534
|
filesScanned++;
|
|
1479
535
|
const filePathObj = { value: filePath };
|
|
1480
|
-
const secrets = await
|
|
536
|
+
const secrets = await scanFileForSecrets(filePathObj);
|
|
1481
537
|
secretsFound.push(...secrets);
|
|
1482
538
|
}
|
|
1483
539
|
}
|
|
1484
540
|
catch (error) {
|
|
1485
541
|
console.error('Secret scan failed:', error);
|
|
1486
542
|
}
|
|
1487
|
-
return {
|
|
1488
|
-
secretsFound,
|
|
1489
|
-
filesScanned,
|
|
1490
|
-
};
|
|
543
|
+
return { secretsFound, filesScanned };
|
|
1491
544
|
}
|
|
1492
|
-
/**
|
|
1493
|
-
* Find source files in a directory (recursively)
|
|
1494
|
-
*/
|
|
1495
545
|
async findSourceFiles(dir, files = []) {
|
|
1496
546
|
const sourceExtensions = ['.ts', '.js', '.tsx', '.jsx', '.json', '.env', '.yaml', '.yml', '.config'];
|
|
1497
547
|
try {
|
|
1498
548
|
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
1499
549
|
for (const entry of entries) {
|
|
1500
550
|
const fullPath = path.join(dir, entry.name);
|
|
1501
|
-
// Skip excluded directories
|
|
1502
551
|
if (this.shouldExclude(fullPath)) {
|
|
1503
552
|
continue;
|
|
1504
553
|
}
|
|
@@ -1514,87 +563,14 @@ export class SecurityAuditorService {
|
|
|
1514
563
|
}
|
|
1515
564
|
}
|
|
1516
565
|
catch (error) {
|
|
1517
|
-
// Non-critical: permission errors when reading directories are expected
|
|
1518
566
|
console.debug('[SecurityAuditor] Directory read error:', error instanceof Error ? error.message : error);
|
|
1519
567
|
}
|
|
1520
568
|
return files;
|
|
1521
569
|
}
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
if (sast) {
|
|
1526
|
-
riskValue +=
|
|
1527
|
-
this.calculateScanRisk(sast.summary) * 0.35;
|
|
1528
|
-
weights += 0.35;
|
|
1529
|
-
}
|
|
1530
|
-
if (dast) {
|
|
1531
|
-
riskValue +=
|
|
1532
|
-
this.calculateScanRisk(dast.summary) * 0.25;
|
|
1533
|
-
weights += 0.25;
|
|
1534
|
-
}
|
|
1535
|
-
if (deps) {
|
|
1536
|
-
riskValue +=
|
|
1537
|
-
this.calculateScanRisk(deps.summary) * 0.25;
|
|
1538
|
-
weights += 0.25;
|
|
1539
|
-
}
|
|
1540
|
-
if (secrets) {
|
|
1541
|
-
const secretRisk = secrets.secretsFound.length > 0 ? 0.9 : 0.1;
|
|
1542
|
-
riskValue += secretRisk * 0.15;
|
|
1543
|
-
weights += 0.15;
|
|
1544
|
-
}
|
|
1545
|
-
const normalizedRisk = weights > 0 ? riskValue / weights : 0;
|
|
1546
|
-
// Return RiskScore-compatible object
|
|
1547
|
-
return {
|
|
1548
|
-
value: Math.min(1, normalizedRisk),
|
|
1549
|
-
percentage: normalizedRisk * 100,
|
|
1550
|
-
level: normalizedRisk >= 0.8 ? 'critical' :
|
|
1551
|
-
normalizedRisk >= 0.6 ? 'high' :
|
|
1552
|
-
normalizedRisk >= 0.3 ? 'medium' : 'low',
|
|
1553
|
-
};
|
|
1554
|
-
}
|
|
1555
|
-
calculateScanRisk(summary) {
|
|
1556
|
-
const weights = {
|
|
1557
|
-
critical: 1.0,
|
|
1558
|
-
high: 0.7,
|
|
1559
|
-
medium: 0.4,
|
|
1560
|
-
low: 0.1,
|
|
1561
|
-
informational: 0.02,
|
|
1562
|
-
};
|
|
1563
|
-
const totalIssues = summary.critical +
|
|
1564
|
-
summary.high +
|
|
1565
|
-
summary.medium +
|
|
1566
|
-
summary.low +
|
|
1567
|
-
summary.informational;
|
|
1568
|
-
if (totalIssues === 0)
|
|
1569
|
-
return 0;
|
|
1570
|
-
const weightedSum = summary.critical * weights.critical +
|
|
1571
|
-
summary.high * weights.high +
|
|
1572
|
-
summary.medium * weights.medium +
|
|
1573
|
-
summary.low * weights.low +
|
|
1574
|
-
summary.informational * weights.informational;
|
|
1575
|
-
return Math.min(1, weightedSum / 10);
|
|
1576
|
-
}
|
|
1577
|
-
generateRecommendations(sast, dast, deps, secrets) {
|
|
1578
|
-
const recommendations = [];
|
|
1579
|
-
if (sast && sast.summary.critical > 0) {
|
|
1580
|
-
recommendations.push(`Address ${sast.summary.critical} critical vulnerabilities found in static analysis`);
|
|
1581
|
-
}
|
|
1582
|
-
if (dast && dast.summary.high > 0) {
|
|
1583
|
-
recommendations.push(`Fix ${dast.summary.high} high-severity issues found in dynamic testing`);
|
|
1584
|
-
}
|
|
1585
|
-
if (deps && deps.outdatedPackages.length > 5) {
|
|
1586
|
-
recommendations.push(`Update ${deps.outdatedPackages.length} outdated dependencies`);
|
|
1587
|
-
}
|
|
1588
|
-
if (secrets && secrets.secretsFound.length > 0) {
|
|
1589
|
-
recommendations.push(`Remove ${secrets.secretsFound.length} exposed secrets and rotate credentials`);
|
|
1590
|
-
}
|
|
1591
|
-
if (recommendations.length === 0) {
|
|
1592
|
-
recommendations.push('Security posture is good. Continue regular scanning.');
|
|
1593
|
-
}
|
|
1594
|
-
return recommendations;
|
|
1595
|
-
}
|
|
570
|
+
// ==========================================================================
|
|
571
|
+
// Historical Analysis Helpers
|
|
572
|
+
// ==========================================================================
|
|
1596
573
|
async getRecentAudits() {
|
|
1597
|
-
// Query recent audits from memory storage
|
|
1598
574
|
const keys = await this.memory.search('security:audit:*', 10);
|
|
1599
575
|
const audits = [];
|
|
1600
576
|
for (const key of keys) {
|
|
@@ -1605,87 +581,19 @@ export class SecurityAuditorService {
|
|
|
1605
581
|
}
|
|
1606
582
|
return audits.sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
|
|
1607
583
|
}
|
|
1608
|
-
countBySeverity(audit, severity) {
|
|
1609
|
-
if (!audit)
|
|
1610
|
-
return 0;
|
|
1611
|
-
let count = 0;
|
|
1612
|
-
if (audit.sastResults)
|
|
1613
|
-
count += audit.sastResults.summary[severity];
|
|
1614
|
-
if (audit.dastResults)
|
|
1615
|
-
count += audit.dastResults.summary[severity];
|
|
1616
|
-
if (audit.dependencyResults)
|
|
1617
|
-
count += audit.dependencyResults.summary[severity];
|
|
1618
|
-
return count;
|
|
1619
|
-
}
|
|
1620
|
-
countOpenVulnerabilities(audit) {
|
|
1621
|
-
if (!audit)
|
|
1622
|
-
return 0;
|
|
1623
|
-
let count = 0;
|
|
1624
|
-
if (audit.sastResults)
|
|
1625
|
-
count += audit.sastResults.vulnerabilities.length;
|
|
1626
|
-
if (audit.dastResults)
|
|
1627
|
-
count += audit.dastResults.vulnerabilities.length;
|
|
1628
|
-
if (audit.dependencyResults)
|
|
1629
|
-
count += audit.dependencyResults.vulnerabilities.length;
|
|
1630
|
-
return count;
|
|
1631
|
-
}
|
|
1632
|
-
calculateTrend(latest, previous) {
|
|
1633
|
-
if (!latest || !previous)
|
|
1634
|
-
return 'stable';
|
|
1635
|
-
const latestScore = this.countOpenVulnerabilities(latest);
|
|
1636
|
-
const previousScore = this.countOpenVulnerabilities(previous);
|
|
1637
|
-
if (latestScore < previousScore * 0.9)
|
|
1638
|
-
return 'improving';
|
|
1639
|
-
if (latestScore > previousScore * 1.1)
|
|
1640
|
-
return 'declining';
|
|
1641
|
-
return 'stable';
|
|
1642
|
-
}
|
|
1643
|
-
calculatePostureScore(critical, high, open) {
|
|
1644
|
-
// Start at 100, deduct points for issues
|
|
1645
|
-
let score = 100;
|
|
1646
|
-
score -= critical * 20;
|
|
1647
|
-
score -= high * 10;
|
|
1648
|
-
score -= open * 2;
|
|
1649
|
-
return Math.max(0, Math.min(100, score));
|
|
1650
|
-
}
|
|
1651
|
-
generatePostureRecommendations(critical, high, score) {
|
|
1652
|
-
const recommendations = [];
|
|
1653
|
-
if (critical > 0) {
|
|
1654
|
-
recommendations.push('Immediately address all critical vulnerabilities');
|
|
1655
|
-
}
|
|
1656
|
-
if (high > 3) {
|
|
1657
|
-
recommendations.push('Prioritize fixing high-severity issues');
|
|
1658
|
-
}
|
|
1659
|
-
if (score < 50) {
|
|
1660
|
-
recommendations.push('Consider a comprehensive security review');
|
|
1661
|
-
recommendations.push('Implement automated security scanning in CI/CD');
|
|
1662
|
-
}
|
|
1663
|
-
if (score >= 80) {
|
|
1664
|
-
recommendations.push('Maintain current security practices');
|
|
1665
|
-
recommendations.push('Consider penetration testing for deeper analysis');
|
|
1666
|
-
}
|
|
1667
|
-
return recommendations;
|
|
1668
|
-
}
|
|
1669
|
-
/**
|
|
1670
|
-
* Count vulnerabilities resolved in the last week
|
|
1671
|
-
* Calculates by comparing consecutive audit reports
|
|
1672
|
-
*/
|
|
1673
584
|
async countResolvedLastWeek() {
|
|
1674
585
|
try {
|
|
1675
586
|
const audits = await this.getRecentAudits();
|
|
1676
587
|
if (audits.length < 2)
|
|
1677
588
|
return 0;
|
|
1678
589
|
const oneWeekAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000);
|
|
1679
|
-
// Find audits from this week
|
|
1680
590
|
const recentAudits = audits.filter((audit) => new Date(audit.timestamp) >= oneWeekAgo);
|
|
1681
591
|
if (recentAudits.length < 2)
|
|
1682
592
|
return 0;
|
|
1683
|
-
// Compare vulnerability counts between first and last audit of the week
|
|
1684
593
|
const oldest = recentAudits[recentAudits.length - 1];
|
|
1685
594
|
const newest = recentAudits[0];
|
|
1686
|
-
const oldCount =
|
|
1687
|
-
const newCount =
|
|
1688
|
-
// Resolved = old count - new count (if positive)
|
|
595
|
+
const oldCount = countOpenVulnerabilities(oldest);
|
|
596
|
+
const newCount = countOpenVulnerabilities(newest);
|
|
1689
597
|
return Math.max(0, oldCount - newCount);
|
|
1690
598
|
}
|
|
1691
599
|
catch (error) {
|
|
@@ -1693,22 +601,16 @@ export class SecurityAuditorService {
|
|
|
1693
601
|
return 0;
|
|
1694
602
|
}
|
|
1695
603
|
}
|
|
1696
|
-
/**
|
|
1697
|
-
* Calculate average resolution time from historical audit data
|
|
1698
|
-
*/
|
|
1699
604
|
async calculateAverageResolutionTime() {
|
|
1700
605
|
try {
|
|
1701
606
|
const audits = await this.getRecentAudits();
|
|
1702
607
|
if (audits.length < 2)
|
|
1703
|
-
return 72;
|
|
1704
|
-
// Track vulnerabilities across audits to calculate resolution time
|
|
608
|
+
return 72;
|
|
1705
609
|
const vulnFirstSeen = new Map();
|
|
1706
610
|
const resolutionTimes = [];
|
|
1707
|
-
// Process audits from oldest to newest
|
|
1708
611
|
const sortedAudits = [...audits].reverse();
|
|
1709
612
|
for (const audit of sortedAudits) {
|
|
1710
613
|
const currentVulnIds = new Set();
|
|
1711
|
-
// Collect all vulnerability IDs in this audit
|
|
1712
614
|
if (audit.sastResults) {
|
|
1713
615
|
audit.sastResults.vulnerabilities.forEach((v) => currentVulnIds.add(v.id));
|
|
1714
616
|
}
|
|
@@ -1718,13 +620,11 @@ export class SecurityAuditorService {
|
|
|
1718
620
|
if (audit.dependencyResults) {
|
|
1719
621
|
audit.dependencyResults.vulnerabilities.forEach((v) => currentVulnIds.add(v.id));
|
|
1720
622
|
}
|
|
1721
|
-
// Track new vulnerabilities
|
|
1722
623
|
for (const vulnId of currentVulnIds) {
|
|
1723
624
|
if (!vulnFirstSeen.has(vulnId)) {
|
|
1724
625
|
vulnFirstSeen.set(vulnId, audit.timestamp);
|
|
1725
626
|
}
|
|
1726
627
|
}
|
|
1727
|
-
// Check for resolved vulnerabilities
|
|
1728
628
|
for (const [vulnId, firstSeen] of vulnFirstSeen) {
|
|
1729
629
|
if (!currentVulnIds.has(vulnId)) {
|
|
1730
630
|
const resolutionTime = (audit.timestamp.getTime() - firstSeen.getTime()) / (1000 * 60 * 60);
|
|
@@ -1734,31 +634,14 @@ export class SecurityAuditorService {
|
|
|
1734
634
|
}
|
|
1735
635
|
}
|
|
1736
636
|
if (resolutionTimes.length === 0)
|
|
1737
|
-
return 72;
|
|
1738
|
-
// Calculate average
|
|
637
|
+
return 72;
|
|
1739
638
|
const sum = resolutionTimes.reduce((acc, time) => acc + time, 0);
|
|
1740
639
|
return Math.round(sum / resolutionTimes.length);
|
|
1741
640
|
}
|
|
1742
641
|
catch (error) {
|
|
1743
642
|
console.error('Failed to calculate average resolution time:', error);
|
|
1744
|
-
return 72;
|
|
1745
|
-
}
|
|
1746
|
-
}
|
|
1747
|
-
determinePriorityBucket(vuln) {
|
|
1748
|
-
const effort = vuln.remediation.estimatedEffort;
|
|
1749
|
-
if (vuln.severity === 'critical') {
|
|
1750
|
-
return 'immediate';
|
|
1751
|
-
}
|
|
1752
|
-
if (vuln.severity === 'high') {
|
|
1753
|
-
return effort === 'trivial' || effort === 'minor' ? 'immediate' : 'shortTerm';
|
|
1754
|
-
}
|
|
1755
|
-
if (vuln.severity === 'medium') {
|
|
1756
|
-
return effort === 'major' ? 'longTerm' : 'mediumTerm';
|
|
1757
|
-
}
|
|
1758
|
-
if (vuln.severity === 'low' || vuln.severity === 'informational') {
|
|
1759
|
-
return 'longTerm';
|
|
643
|
+
return 72;
|
|
1760
644
|
}
|
|
1761
|
-
return 'accepted';
|
|
1762
645
|
}
|
|
1763
646
|
}
|
|
1764
647
|
//# sourceMappingURL=security-auditor.js.map
|