@defai.digital/ax-cli 3.15.21 → 3.15.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -2
- package/dist/agent/agent-executor.d.ts +1 -1
- package/dist/agent/agent-executor.js +15 -17
- package/dist/agent/agent-executor.js.map +1 -1
- package/dist/agent/execution/tool-executor.d.ts +6 -0
- package/dist/agent/execution/tool-executor.js +16 -1
- package/dist/agent/execution/tool-executor.js.map +1 -1
- package/dist/agent/llm-agent.js +91 -22
- package/dist/agent/llm-agent.js.map +1 -1
- package/dist/agent/parallel-tools.d.ts +65 -0
- package/dist/agent/parallel-tools.js +146 -0
- package/dist/agent/parallel-tools.js.map +1 -0
- package/dist/llm/tools.js +1 -1
- package/dist/llm/tools.js.map +1 -1
- package/dist/ui/components/chat-interface.js +14 -0
- package/dist/ui/components/chat-interface.js.map +1 -1
- package/dist/ui/hooks/use-input-handler.js +2 -2
- package/dist/ui/hooks/use-input-handler.js.map +1 -1
- package/dist/ui/utils/image-handler.js +8 -5
- package/dist/ui/utils/image-handler.js.map +1 -1
- package/package.json +1 -1
- package/dist/analyzers/architecture/anti-pattern-detectors/god-object-detector.d.ts +0 -29
- package/dist/analyzers/architecture/anti-pattern-detectors/god-object-detector.js +0 -103
- package/dist/analyzers/architecture/anti-pattern-detectors/god-object-detector.js.map +0 -1
- package/dist/analyzers/architecture/architecture-analyzer.d.ts +0 -58
- package/dist/analyzers/architecture/architecture-analyzer.js +0 -276
- package/dist/analyzers/architecture/architecture-analyzer.js.map +0 -1
- package/dist/analyzers/architecture/index.d.ts +0 -12
- package/dist/analyzers/architecture/index.js +0 -14
- package/dist/analyzers/architecture/index.js.map +0 -1
- package/dist/analyzers/architecture/pattern-detectors/base-detector.d.ts +0 -27
- package/dist/analyzers/architecture/pattern-detectors/base-detector.js +0 -31
- package/dist/analyzers/architecture/pattern-detectors/base-detector.js.map +0 -1
- package/dist/analyzers/architecture/pattern-detectors/clean-architecture-detector.d.ts +0 -11
- package/dist/analyzers/architecture/pattern-detectors/clean-architecture-detector.js +0 -57
- package/dist/analyzers/architecture/pattern-detectors/clean-architecture-detector.js.map +0 -1
- package/dist/analyzers/architecture/pattern-detectors/mvc-detector.d.ts +0 -11
- package/dist/analyzers/architecture/pattern-detectors/mvc-detector.js +0 -43
- package/dist/analyzers/architecture/pattern-detectors/mvc-detector.js.map +0 -1
- package/dist/analyzers/architecture/pattern-detectors/repository-detector.d.ts +0 -11
- package/dist/analyzers/architecture/pattern-detectors/repository-detector.js +0 -49
- package/dist/analyzers/architecture/pattern-detectors/repository-detector.js.map +0 -1
- package/dist/analyzers/architecture/project-structure-scanner.d.ts +0 -54
- package/dist/analyzers/architecture/project-structure-scanner.js +0 -204
- package/dist/analyzers/architecture/project-structure-scanner.js.map +0 -1
- package/dist/analyzers/ast/index.d.ts +0 -13
- package/dist/analyzers/ast/index.js +0 -16
- package/dist/analyzers/ast/index.js.map +0 -1
- package/dist/analyzers/ast/language-parser.d.ts +0 -59
- package/dist/analyzers/ast/language-parser.js +0 -107
- package/dist/analyzers/ast/language-parser.js.map +0 -1
- package/dist/analyzers/ast/multi-language-parser.d.ts +0 -79
- package/dist/analyzers/ast/multi-language-parser.js +0 -157
- package/dist/analyzers/ast/multi-language-parser.js.map +0 -1
- package/dist/analyzers/ast/node-helpers.d.ts +0 -81
- package/dist/analyzers/ast/node-helpers.js +0 -128
- package/dist/analyzers/ast/node-helpers.js.map +0 -1
- package/dist/analyzers/ast/parser.d.ts +0 -60
- package/dist/analyzers/ast/parser.js +0 -305
- package/dist/analyzers/ast/parser.js.map +0 -1
- package/dist/analyzers/ast/traverser.d.ts +0 -67
- package/dist/analyzers/ast/traverser.js +0 -156
- package/dist/analyzers/ast/traverser.js.map +0 -1
- package/dist/analyzers/ast/types.d.ts +0 -107
- package/dist/analyzers/ast/types.js +0 -7
- package/dist/analyzers/ast/types.js.map +0 -1
- package/dist/analyzers/best-practices/base-rule.d.ts +0 -45
- package/dist/analyzers/best-practices/base-rule.js +0 -45
- package/dist/analyzers/best-practices/base-rule.js.map +0 -1
- package/dist/analyzers/best-practices/best-practice-validator.d.ts +0 -35
- package/dist/analyzers/best-practices/best-practice-validator.js +0 -181
- package/dist/analyzers/best-practices/best-practice-validator.js.map +0 -1
- package/dist/analyzers/best-practices/index.d.ts +0 -10
- package/dist/analyzers/best-practices/index.js +0 -11
- package/dist/analyzers/best-practices/index.js.map +0 -1
- package/dist/analyzers/best-practices/rules/index.d.ts +0 -7
- package/dist/analyzers/best-practices/rules/index.js +0 -56
- package/dist/analyzers/best-practices/rules/index.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/consistent-naming.d.ts +0 -17
- package/dist/analyzers/best-practices/rules/typescript/consistent-naming.js +0 -41
- package/dist/analyzers/best-practices/rules/typescript/consistent-naming.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/function-complexity.d.ts +0 -27
- package/dist/analyzers/best-practices/rules/typescript/function-complexity.js +0 -76
- package/dist/analyzers/best-practices/rules/typescript/function-complexity.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/index.d.ts +0 -15
- package/dist/analyzers/best-practices/rules/typescript/index.js +0 -16
- package/dist/analyzers/best-practices/rules/typescript/index.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/max-file-length.d.ts +0 -18
- package/dist/analyzers/best-practices/rules/typescript/max-file-length.js +0 -25
- package/dist/analyzers/best-practices/rules/typescript/max-file-length.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/no-any-type.d.ts +0 -17
- package/dist/analyzers/best-practices/rules/typescript/no-any-type.js +0 -27
- package/dist/analyzers/best-practices/rules/typescript/no-any-type.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/no-implicit-any.d.ts +0 -18
- package/dist/analyzers/best-practices/rules/typescript/no-implicit-any.js +0 -39
- package/dist/analyzers/best-practices/rules/typescript/no-implicit-any.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.d.ts +0 -17
- package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js +0 -38
- package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.d.ts +0 -17
- package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js +0 -38
- package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/prefer-const.d.ts +0 -17
- package/dist/analyzers/best-practices/rules/typescript/prefer-const.js +0 -35
- package/dist/analyzers/best-practices/rules/typescript/prefer-const.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.d.ts +0 -17
- package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js +0 -36
- package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/proper-error-handling.d.ts +0 -17
- package/dist/analyzers/best-practices/rules/typescript/proper-error-handling.js +0 -27
- package/dist/analyzers/best-practices/rules/typescript/proper-error-handling.js.map +0 -1
- package/dist/analyzers/best-practices/types.d.ts +0 -86
- package/dist/analyzers/best-practices/types.js +0 -7
- package/dist/analyzers/best-practices/types.js.map +0 -1
- package/dist/analyzers/cache/analysis-cache.d.ts +0 -41
- package/dist/analyzers/cache/analysis-cache.js +0 -84
- package/dist/analyzers/cache/analysis-cache.js.map +0 -1
- package/dist/analyzers/code-smells/base-smell-detector.d.ts +0 -30
- package/dist/analyzers/code-smells/base-smell-detector.js +0 -44
- package/dist/analyzers/code-smells/base-smell-detector.js.map +0 -1
- package/dist/analyzers/code-smells/code-smell-analyzer.d.ts +0 -30
- package/dist/analyzers/code-smells/code-smell-analyzer.js +0 -167
- package/dist/analyzers/code-smells/code-smell-analyzer.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/data-clumps-detector.d.ts +0 -11
- package/dist/analyzers/code-smells/detectors/data-clumps-detector.js +0 -64
- package/dist/analyzers/code-smells/detectors/data-clumps-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/dead-code-detector.d.ts +0 -11
- package/dist/analyzers/code-smells/detectors/dead-code-detector.js +0 -58
- package/dist/analyzers/code-smells/detectors/dead-code-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/duplicate-code-detector.d.ts +0 -11
- package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js +0 -69
- package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/feature-envy-detector.d.ts +0 -11
- package/dist/analyzers/code-smells/detectors/feature-envy-detector.js +0 -70
- package/dist/analyzers/code-smells/detectors/feature-envy-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/inappropriate-intimacy-detector.d.ts +0 -11
- package/dist/analyzers/code-smells/detectors/inappropriate-intimacy-detector.js +0 -59
- package/dist/analyzers/code-smells/detectors/inappropriate-intimacy-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/large-class-detector.d.ts +0 -13
- package/dist/analyzers/code-smells/detectors/large-class-detector.js +0 -61
- package/dist/analyzers/code-smells/detectors/large-class-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/long-method-detector.d.ts +0 -12
- package/dist/analyzers/code-smells/detectors/long-method-detector.js +0 -55
- package/dist/analyzers/code-smells/detectors/long-method-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/long-parameter-list-detector.d.ts +0 -12
- package/dist/analyzers/code-smells/detectors/long-parameter-list-detector.js +0 -53
- package/dist/analyzers/code-smells/detectors/long-parameter-list-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/magic-numbers-detector.d.ts +0 -12
- package/dist/analyzers/code-smells/detectors/magic-numbers-detector.js +0 -56
- package/dist/analyzers/code-smells/detectors/magic-numbers-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/nested-conditionals-detector.d.ts +0 -13
- package/dist/analyzers/code-smells/detectors/nested-conditionals-detector.js +0 -77
- package/dist/analyzers/code-smells/detectors/nested-conditionals-detector.js.map +0 -1
- package/dist/analyzers/code-smells/index.d.ts +0 -16
- package/dist/analyzers/code-smells/index.js +0 -19
- package/dist/analyzers/code-smells/index.js.map +0 -1
- package/dist/analyzers/code-smells/types.d.ts +0 -82
- package/dist/analyzers/code-smells/types.js +0 -30
- package/dist/analyzers/code-smells/types.js.map +0 -1
- package/dist/analyzers/dependency/circular-detector.d.ts +0 -17
- package/dist/analyzers/dependency/circular-detector.js +0 -73
- package/dist/analyzers/dependency/circular-detector.js.map +0 -1
- package/dist/analyzers/dependency/coupling-calculator.d.ts +0 -24
- package/dist/analyzers/dependency/coupling-calculator.js +0 -86
- package/dist/analyzers/dependency/coupling-calculator.js.map +0 -1
- package/dist/analyzers/dependency/dependency-analyzer.d.ts +0 -44
- package/dist/analyzers/dependency/dependency-analyzer.js +0 -218
- package/dist/analyzers/dependency/dependency-analyzer.js.map +0 -1
- package/dist/analyzers/dependency/dependency-graph.d.ts +0 -57
- package/dist/analyzers/dependency/dependency-graph.js +0 -198
- package/dist/analyzers/dependency/dependency-graph.js.map +0 -1
- package/dist/analyzers/dependency/index.d.ts +0 -8
- package/dist/analyzers/dependency/index.js +0 -8
- package/dist/analyzers/dependency/index.js.map +0 -1
- package/dist/analyzers/dependency/types.d.ts +0 -105
- package/dist/analyzers/dependency/types.js +0 -5
- package/dist/analyzers/dependency/types.js.map +0 -1
- package/dist/analyzers/errors.d.ts +0 -51
- package/dist/analyzers/errors.js +0 -79
- package/dist/analyzers/errors.js.map +0 -1
- package/dist/analyzers/git/churn-calculator.d.ts +0 -36
- package/dist/analyzers/git/churn-calculator.js +0 -257
- package/dist/analyzers/git/churn-calculator.js.map +0 -1
- package/dist/analyzers/git/git-analyzer.d.ts +0 -19
- package/dist/analyzers/git/git-analyzer.js +0 -79
- package/dist/analyzers/git/git-analyzer.js.map +0 -1
- package/dist/analyzers/git/hotspot-detector.d.ts +0 -34
- package/dist/analyzers/git/hotspot-detector.js +0 -173
- package/dist/analyzers/git/hotspot-detector.js.map +0 -1
- package/dist/analyzers/git/index.d.ts +0 -7
- package/dist/analyzers/git/index.js +0 -7
- package/dist/analyzers/git/index.js.map +0 -1
- package/dist/analyzers/git/types.d.ts +0 -88
- package/dist/analyzers/git/types.js +0 -5
- package/dist/analyzers/git/types.js.map +0 -1
- package/dist/analyzers/metrics/halstead-calculator.d.ts +0 -30
- package/dist/analyzers/metrics/halstead-calculator.js +0 -150
- package/dist/analyzers/metrics/halstead-calculator.js.map +0 -1
- package/dist/analyzers/metrics/index.d.ts +0 -9
- package/dist/analyzers/metrics/index.js +0 -9
- package/dist/analyzers/metrics/index.js.map +0 -1
- package/dist/analyzers/metrics/maintainability-calculator.d.ts +0 -17
- package/dist/analyzers/metrics/maintainability-calculator.js +0 -46
- package/dist/analyzers/metrics/maintainability-calculator.js.map +0 -1
- package/dist/analyzers/metrics/metrics-analyzer.d.ts +0 -32
- package/dist/analyzers/metrics/metrics-analyzer.js +0 -144
- package/dist/analyzers/metrics/metrics-analyzer.js.map +0 -1
- package/dist/analyzers/metrics/types.d.ts +0 -67
- package/dist/analyzers/metrics/types.js +0 -5
- package/dist/analyzers/metrics/types.js.map +0 -1
- package/dist/analyzers/security/base-detector.d.ts +0 -58
- package/dist/analyzers/security/base-detector.js +0 -104
- package/dist/analyzers/security/base-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/command-injection-detector.d.ts +0 -12
- package/dist/analyzers/security/detectors/command-injection-detector.js +0 -84
- package/dist/analyzers/security/detectors/command-injection-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/hardcoded-secrets-detector.d.ts +0 -16
- package/dist/analyzers/security/detectors/hardcoded-secrets-detector.js +0 -140
- package/dist/analyzers/security/detectors/hardcoded-secrets-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/insecure-deserialization-detector.d.ts +0 -12
- package/dist/analyzers/security/detectors/insecure-deserialization-detector.js +0 -109
- package/dist/analyzers/security/detectors/insecure-deserialization-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/insecure-random-detector.d.ts +0 -12
- package/dist/analyzers/security/detectors/insecure-random-detector.js +0 -61
- package/dist/analyzers/security/detectors/insecure-random-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/path-traversal-detector.d.ts +0 -12
- package/dist/analyzers/security/detectors/path-traversal-detector.js +0 -82
- package/dist/analyzers/security/detectors/path-traversal-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/sql-injection-detector.d.ts +0 -12
- package/dist/analyzers/security/detectors/sql-injection-detector.js +0 -88
- package/dist/analyzers/security/detectors/sql-injection-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/weak-crypto-detector.d.ts +0 -12
- package/dist/analyzers/security/detectors/weak-crypto-detector.js +0 -104
- package/dist/analyzers/security/detectors/weak-crypto-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/xss-detector.d.ts +0 -12
- package/dist/analyzers/security/detectors/xss-detector.js +0 -90
- package/dist/analyzers/security/detectors/xss-detector.js.map +0 -1
- package/dist/analyzers/security/index.d.ts +0 -16
- package/dist/analyzers/security/index.js +0 -18
- package/dist/analyzers/security/index.js.map +0 -1
- package/dist/analyzers/security/security-analyzer.d.ts +0 -38
- package/dist/analyzers/security/security-analyzer.js +0 -215
- package/dist/analyzers/security/security-analyzer.js.map +0 -1
- package/dist/analyzers/security/types.d.ts +0 -95
- package/dist/analyzers/security/types.js +0 -7
- package/dist/analyzers/security/types.js.map +0 -1
- package/dist/tools/analysis-tools/architecture-tool.d.ts +0 -46
- package/dist/tools/analysis-tools/architecture-tool.js +0 -124
- package/dist/tools/analysis-tools/architecture-tool.js.map +0 -1
- package/dist/tools/analysis-tools/validation-tool.d.ts +0 -51
- package/dist/tools/analysis-tools/validation-tool.js +0 -121
- package/dist/tools/analysis-tools/validation-tool.js.map +0 -1
- package/dist/tools/analysis-tools.d.ts +0 -73
- package/dist/tools/analysis-tools.js +0 -422
- package/dist/tools/analysis-tools.js.map +0 -1
- package/dist/types/analysis.d.ts +0 -177
- package/dist/types/analysis.js +0 -8
- package/dist/types/analysis.js.map +0 -1
- package/dist/utils/analysis-logger.d.ts +0 -50
- package/dist/utils/analysis-logger.js +0 -73
- package/dist/utils/analysis-logger.js.map +0 -1
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Security Analyzer
|
|
3
|
-
*
|
|
4
|
-
* Main orchestrator for security vulnerability detection
|
|
5
|
-
*/
|
|
6
|
-
import { promises as fs } from 'fs';
|
|
7
|
-
import { glob } from 'glob';
|
|
8
|
-
// Import all detectors
|
|
9
|
-
import { SQLInjectionDetector } from './detectors/sql-injection-detector.js';
|
|
10
|
-
import { XSSDetector } from './detectors/xss-detector.js';
|
|
11
|
-
import { HardcodedSecretsDetector } from './detectors/hardcoded-secrets-detector.js';
|
|
12
|
-
import { InsecureRandomDetector } from './detectors/insecure-random-detector.js';
|
|
13
|
-
import { PathTraversalDetector } from './detectors/path-traversal-detector.js';
|
|
14
|
-
import { CommandInjectionDetector } from './detectors/command-injection-detector.js';
|
|
15
|
-
import { WeakCryptoDetector } from './detectors/weak-crypto-detector.js';
|
|
16
|
-
import { InsecureDeserializationDetector } from './detectors/insecure-deserialization-detector.js';
|
|
17
|
-
export class SecurityAnalyzer {
|
|
18
|
-
detectors;
|
|
19
|
-
constructor() {
|
|
20
|
-
this.detectors = new Map();
|
|
21
|
-
this.registerDefaultDetectors();
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Register all default security detectors
|
|
25
|
-
*/
|
|
26
|
-
registerDefaultDetectors() {
|
|
27
|
-
const detectors = [
|
|
28
|
-
new SQLInjectionDetector(),
|
|
29
|
-
new XSSDetector(),
|
|
30
|
-
new HardcodedSecretsDetector(),
|
|
31
|
-
new InsecureRandomDetector(),
|
|
32
|
-
new PathTraversalDetector(),
|
|
33
|
-
new CommandInjectionDetector(),
|
|
34
|
-
new WeakCryptoDetector(),
|
|
35
|
-
new InsecureDeserializationDetector(),
|
|
36
|
-
];
|
|
37
|
-
for (const detector of detectors) {
|
|
38
|
-
this.detectors.set(detector.id, detector);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Scan a single file for security vulnerabilities
|
|
43
|
-
*/
|
|
44
|
-
async scanFile(filePath, options = {}) {
|
|
45
|
-
const startTime = Date.now();
|
|
46
|
-
try {
|
|
47
|
-
// Read file content
|
|
48
|
-
const content = await fs.readFile(filePath, 'utf-8');
|
|
49
|
-
// Check file size limit
|
|
50
|
-
const maxFileSize = options.maxFileSize || 1024 * 1024; // 1MB default
|
|
51
|
-
if (content.length > maxFileSize) {
|
|
52
|
-
return Object.freeze({
|
|
53
|
-
file: filePath,
|
|
54
|
-
vulnerabilities: Object.freeze([]),
|
|
55
|
-
riskScore: 0,
|
|
56
|
-
timestamp: new Date(),
|
|
57
|
-
durationMs: Date.now() - startTime,
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
// Run all applicable detectors in parallel
|
|
61
|
-
const detectorPromises = [];
|
|
62
|
-
for (const detector of this.detectors.values()) {
|
|
63
|
-
// Check if detector is enabled
|
|
64
|
-
const detectorConfig = options.detectors?.[detector.id];
|
|
65
|
-
if (detectorConfig && !detectorConfig.enabled) {
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
68
|
-
// Check if detector applies to this file
|
|
69
|
-
if (!detector.appliesTo(filePath)) {
|
|
70
|
-
continue;
|
|
71
|
-
}
|
|
72
|
-
// Run detector
|
|
73
|
-
detectorPromises.push(detector.scan(content, filePath));
|
|
74
|
-
}
|
|
75
|
-
// Wait for all detectors to complete
|
|
76
|
-
const results = await Promise.all(detectorPromises);
|
|
77
|
-
// Flatten vulnerabilities
|
|
78
|
-
let vulnerabilities = results.flat();
|
|
79
|
-
// Filter out info-level findings if not requested
|
|
80
|
-
if (!options.includeInfo) {
|
|
81
|
-
vulnerabilities = vulnerabilities.filter(v => v.severity !== 'info');
|
|
82
|
-
}
|
|
83
|
-
// Calculate risk score
|
|
84
|
-
const riskScore = this.calculateRiskScore(vulnerabilities);
|
|
85
|
-
return Object.freeze({
|
|
86
|
-
file: filePath,
|
|
87
|
-
vulnerabilities: Object.freeze(vulnerabilities),
|
|
88
|
-
riskScore,
|
|
89
|
-
timestamp: new Date(),
|
|
90
|
-
durationMs: Date.now() - startTime,
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
catch {
|
|
94
|
-
// Return empty result on error
|
|
95
|
-
return Object.freeze({
|
|
96
|
-
file: filePath,
|
|
97
|
-
vulnerabilities: Object.freeze([]),
|
|
98
|
-
riskScore: 0,
|
|
99
|
-
timestamp: new Date(),
|
|
100
|
-
durationMs: Date.now() - startTime,
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Scan multiple files in batch
|
|
106
|
-
*/
|
|
107
|
-
async scanBatch(files, options = {}) {
|
|
108
|
-
const timestamp = new Date();
|
|
109
|
-
// Scan files with concurrency control
|
|
110
|
-
const maxConcurrent = 5;
|
|
111
|
-
const fileResults = [];
|
|
112
|
-
for (let i = 0; i < files.length; i += maxConcurrent) {
|
|
113
|
-
const batch = files.slice(i, i + maxConcurrent);
|
|
114
|
-
const batchResults = await Promise.all(batch.map(file => this.scanFile(file, options)));
|
|
115
|
-
fileResults.push(...batchResults);
|
|
116
|
-
}
|
|
117
|
-
// Calculate summary statistics
|
|
118
|
-
const totalVulnerabilities = fileResults.reduce((sum, result) => sum + result.vulnerabilities.length, 0);
|
|
119
|
-
let criticalCount = 0;
|
|
120
|
-
let highCount = 0;
|
|
121
|
-
let mediumCount = 0;
|
|
122
|
-
let lowCount = 0;
|
|
123
|
-
let infoCount = 0;
|
|
124
|
-
for (const result of fileResults) {
|
|
125
|
-
for (const vuln of result.vulnerabilities) {
|
|
126
|
-
switch (vuln.severity) {
|
|
127
|
-
case 'critical':
|
|
128
|
-
criticalCount++;
|
|
129
|
-
break;
|
|
130
|
-
case 'high':
|
|
131
|
-
highCount++;
|
|
132
|
-
break;
|
|
133
|
-
case 'medium':
|
|
134
|
-
mediumCount++;
|
|
135
|
-
break;
|
|
136
|
-
case 'low':
|
|
137
|
-
lowCount++;
|
|
138
|
-
break;
|
|
139
|
-
case 'info':
|
|
140
|
-
infoCount++;
|
|
141
|
-
break;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
// Calculate average risk score
|
|
146
|
-
const averageRiskScore = fileResults.length > 0
|
|
147
|
-
? fileResults.reduce((sum, r) => sum + r.riskScore, 0) / fileResults.length
|
|
148
|
-
: 0;
|
|
149
|
-
// Find highest risk files
|
|
150
|
-
const highestRiskFiles = fileResults
|
|
151
|
-
.filter(r => r.riskScore > 0)
|
|
152
|
-
.sort((a, b) => b.riskScore - a.riskScore)
|
|
153
|
-
.slice(0, 10)
|
|
154
|
-
.map(r => ({ file: r.file, score: r.riskScore }));
|
|
155
|
-
return Object.freeze({
|
|
156
|
-
files: Object.freeze(fileResults),
|
|
157
|
-
totalVulnerabilities,
|
|
158
|
-
criticalCount,
|
|
159
|
-
highCount,
|
|
160
|
-
mediumCount,
|
|
161
|
-
lowCount,
|
|
162
|
-
infoCount,
|
|
163
|
-
averageRiskScore,
|
|
164
|
-
highestRiskFiles: Object.freeze(highestRiskFiles),
|
|
165
|
-
timestamp,
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Scan directory with pattern
|
|
170
|
-
*/
|
|
171
|
-
async scanDirectory(directory, pattern = '**/*.{ts,tsx,js,jsx}', options = {}) {
|
|
172
|
-
// Find all matching files
|
|
173
|
-
const files = await glob(pattern, {
|
|
174
|
-
cwd: directory,
|
|
175
|
-
absolute: true,
|
|
176
|
-
nodir: true,
|
|
177
|
-
ignore: ['**/node_modules/**', '**/dist/**', '**/build/**', '**/.git/**'],
|
|
178
|
-
});
|
|
179
|
-
return this.scanBatch(files, options);
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Calculate risk score for a file based on vulnerabilities
|
|
183
|
-
*/
|
|
184
|
-
calculateRiskScore(vulnerabilities) {
|
|
185
|
-
if (vulnerabilities.length === 0)
|
|
186
|
-
return 0;
|
|
187
|
-
const severityWeights = {
|
|
188
|
-
critical: 10,
|
|
189
|
-
high: 7,
|
|
190
|
-
medium: 4,
|
|
191
|
-
low: 2,
|
|
192
|
-
info: 1,
|
|
193
|
-
};
|
|
194
|
-
let totalScore = 0;
|
|
195
|
-
for (const vuln of vulnerabilities) {
|
|
196
|
-
totalScore += severityWeights[vuln.severity];
|
|
197
|
-
}
|
|
198
|
-
// Normalize to 0-100 scale
|
|
199
|
-
const maxScore = vulnerabilities.length * 10; // Assume all critical
|
|
200
|
-
return Math.min(100, Math.round((totalScore / maxScore) * 100));
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Get list of all registered detectors
|
|
204
|
-
*/
|
|
205
|
-
getDetectors() {
|
|
206
|
-
return Array.from(this.detectors.values());
|
|
207
|
-
}
|
|
208
|
-
/**
|
|
209
|
-
* Get detector by ID
|
|
210
|
-
*/
|
|
211
|
-
getDetector(id) {
|
|
212
|
-
return this.detectors.get(id);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
//# sourceMappingURL=security-analyzer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"security-analyzer.js","sourceRoot":"","sources":["../../../src/analyzers/security/security-analyzer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,uBAAuB;AACvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,+BAA+B,EAAE,MAAM,kDAAkD,CAAC;AAEnG,MAAM,OAAO,gBAAgB;IACnB,SAAS,CAAgC;IAEjD;QACE,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACK,wBAAwB;QAC9B,MAAM,SAAS,GAAG;YAChB,IAAI,oBAAoB,EAAE;YAC1B,IAAI,WAAW,EAAE;YACjB,IAAI,wBAAwB,EAAE;YAC9B,IAAI,sBAAsB,EAAE;YAC5B,IAAI,qBAAqB,EAAE;YAC3B,IAAI,wBAAwB,EAAE;YAC9B,IAAI,kBAAkB,EAAE;YACxB,IAAI,+BAA+B,EAAE;SACtC,CAAC;QAEF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,UAA+B,EAAE;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,oBAAoB;YACpB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAErD,wBAAwB;YACxB,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,cAAc;YACtE,IAAI,OAAO,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;gBACjC,OAAO,MAAM,CAAC,MAAM,CAAC;oBACnB,IAAI,EAAE,QAAQ;oBACd,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;oBAClC,SAAS,EAAE,CAAC;oBACZ,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBACnC,CAAC,CAAC;YACL,CAAC;YAED,2CAA2C;YAC3C,MAAM,gBAAgB,GAAuC,EAAE,CAAC;YAEhE,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC/C,+BAA+B;gBAC/B,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACxD,IAAI,cAAc,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;oBAC9C,SAAS;gBACX,CAAC;gBAED,yCAAyC;gBACzC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAClC,SAAS;gBACX,CAAC;gBAED,eAAe;gBACf,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC1D,CAAC;YAED,qCAAqC;YACrC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAEpD,0BAA0B;YAC1B,IAAI,eAAe,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAErC,kDAAkD;YAClD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBACzB,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;YACvE,CAAC;YAED,uBAAuB;YACvB,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;YAE3D,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,IAAI,EAAE,QAAQ;gBACd,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;gBAC/C,SAAS;gBACT,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACnC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;YAC/B,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,IAAI,EAAE,QAAQ;gBACd,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClC,SAAS,EAAE,CAAC;gBACZ,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CACb,KAAe,EACf,UAA+B,EAAE;QAEjC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAE7B,sCAAsC;QACtC,MAAM,aAAa,GAAG,CAAC,CAAC;QACxB,MAAM,WAAW,GAAyB,EAAE,CAAC;QAE7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,aAAa,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC;YAChD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAChD,CAAC;YACF,WAAW,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;QACpC,CAAC;QAED,+BAA+B;QAC/B,MAAM,oBAAoB,GAAG,WAAW,CAAC,MAAM,CAC7C,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,EACpD,CAAC,CACF,CAAC;QAEF,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;gBAC1C,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACtB,KAAK,UAAU;wBACb,aAAa,EAAE,CAAC;wBAChB,MAAM;oBACR,KAAK,MAAM;wBACT,SAAS,EAAE,CAAC;wBACZ,MAAM;oBACR,KAAK,QAAQ;wBACX,WAAW,EAAE,CAAC;wBACd,MAAM;oBACR,KAAK,KAAK;wBACR,QAAQ,EAAE,CAAC;wBACX,MAAM;oBACR,KAAK,MAAM;wBACT,SAAS,EAAE,CAAC;wBACZ,MAAM;gBACV,CAAC;YACH,CAAC;QACH,CAAC;QAED,+BAA+B;QAC/B,MAAM,gBAAgB,GACpB,WAAW,CAAC,MAAM,GAAG,CAAC;YACpB,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM;YAC3E,CAAC,CAAC,CAAC,CAAC;QAER,0BAA0B;QAC1B,MAAM,gBAAgB,GAAG,WAAW;aACjC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;aAC5B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;aACzC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;aACZ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAEpD,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;YACjC,oBAAoB;YACpB,aAAa;YACb,SAAS;YACT,WAAW;YACX,QAAQ;YACR,SAAS;YACT,gBAAgB;YAChB,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;YACjD,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CACjB,SAAiB,EACjB,UAAkB,sBAAsB,EACxC,UAA+B,EAAE;QAEjC,0BAA0B;QAC1B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;YAChC,GAAG,EAAE,SAAS;YACd,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,CAAC,oBAAoB,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,CAAC;SAC1E,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,eAAiD;QAC1E,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAE3C,MAAM,eAAe,GAAqC;YACxD,QAAQ,EAAE,EAAE;YACZ,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,CAAC;SACR,CAAC;QAEF,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;YACnC,UAAU,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC;QAED,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,sBAAsB;QACpE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;CACF"}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Security Analyzer Types
|
|
3
|
-
*
|
|
4
|
-
* Type definitions for security vulnerability detection
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* Severity level for security vulnerabilities
|
|
8
|
-
*/
|
|
9
|
-
export type SecuritySeverity = 'critical' | 'high' | 'medium' | 'low' | 'info';
|
|
10
|
-
/**
|
|
11
|
-
* OWASP Top 10 categories
|
|
12
|
-
*/
|
|
13
|
-
export type OWASPCategory = 'A01:2021 - Broken Access Control' | 'A02:2021 - Cryptographic Failures' | 'A03:2021 - Injection' | 'A04:2021 - Insecure Design' | 'A05:2021 - Security Misconfiguration' | 'A06:2021 - Vulnerable and Outdated Components' | 'A07:2021 - Identification and Authentication Failures' | 'A08:2021 - Software and Data Integrity Failures' | 'A09:2021 - Security Logging and Monitoring Failures' | 'A10:2021 - Server-Side Request Forgery';
|
|
14
|
-
/**
|
|
15
|
-
* Security vulnerability finding
|
|
16
|
-
*/
|
|
17
|
-
export interface SecurityVulnerability {
|
|
18
|
-
readonly id: string;
|
|
19
|
-
readonly name: string;
|
|
20
|
-
readonly description: string;
|
|
21
|
-
readonly severity: SecuritySeverity;
|
|
22
|
-
readonly owaspCategory?: OWASPCategory;
|
|
23
|
-
readonly cweId?: string;
|
|
24
|
-
readonly file: string;
|
|
25
|
-
readonly line: number;
|
|
26
|
-
readonly column?: number;
|
|
27
|
-
readonly code: string;
|
|
28
|
-
readonly recommendation: string;
|
|
29
|
-
readonly references: readonly string[];
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Security scan result for a single file
|
|
33
|
-
*/
|
|
34
|
-
export interface FileSecurityResult {
|
|
35
|
-
readonly file: string;
|
|
36
|
-
readonly vulnerabilities: readonly SecurityVulnerability[];
|
|
37
|
-
readonly riskScore: number;
|
|
38
|
-
readonly timestamp: Date;
|
|
39
|
-
readonly durationMs: number;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Batch security scan result
|
|
43
|
-
*/
|
|
44
|
-
export interface BatchSecurityResult {
|
|
45
|
-
readonly files: readonly FileSecurityResult[];
|
|
46
|
-
readonly totalVulnerabilities: number;
|
|
47
|
-
readonly criticalCount: number;
|
|
48
|
-
readonly highCount: number;
|
|
49
|
-
readonly mediumCount: number;
|
|
50
|
-
readonly lowCount: number;
|
|
51
|
-
readonly infoCount: number;
|
|
52
|
-
readonly averageRiskScore: number;
|
|
53
|
-
readonly highestRiskFiles: readonly {
|
|
54
|
-
file: string;
|
|
55
|
-
score: number;
|
|
56
|
-
}[];
|
|
57
|
-
readonly timestamp: Date;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Security detector configuration
|
|
61
|
-
*/
|
|
62
|
-
export interface SecurityDetectorConfig {
|
|
63
|
-
readonly enabled: boolean;
|
|
64
|
-
readonly severity?: SecuritySeverity;
|
|
65
|
-
readonly customPatterns?: readonly string[];
|
|
66
|
-
readonly excludePatterns?: readonly string[];
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Security scan options
|
|
70
|
-
*/
|
|
71
|
-
export interface SecurityScanOptions {
|
|
72
|
-
readonly detectors?: Record<string, SecurityDetectorConfig>;
|
|
73
|
-
readonly includeInfo?: boolean;
|
|
74
|
-
readonly maxFileSize?: number;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Base security detector interface
|
|
78
|
-
*/
|
|
79
|
-
export interface SecurityDetector {
|
|
80
|
-
readonly id: string;
|
|
81
|
-
readonly name: string;
|
|
82
|
-
readonly description: string;
|
|
83
|
-
readonly severity: SecuritySeverity;
|
|
84
|
-
readonly owaspCategory?: OWASPCategory;
|
|
85
|
-
readonly cweId?: string;
|
|
86
|
-
readonly enabled: boolean;
|
|
87
|
-
/**
|
|
88
|
-
* Scan file content for vulnerabilities
|
|
89
|
-
*/
|
|
90
|
-
scan(content: string, filePath: string): Promise<SecurityVulnerability[]>;
|
|
91
|
-
/**
|
|
92
|
-
* Check if detector applies to this file type
|
|
93
|
-
*/
|
|
94
|
-
appliesTo(filePath: string): boolean;
|
|
95
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/analyzers/security/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Architecture Analysis Tool
|
|
3
|
-
*
|
|
4
|
-
* LLM tool for architecture analysis
|
|
5
|
-
*/
|
|
6
|
-
import type { ToolResult } from '../../types/index.js';
|
|
7
|
-
export declare class ArchitectureTool {
|
|
8
|
-
private analyzer;
|
|
9
|
-
constructor();
|
|
10
|
-
/**
|
|
11
|
-
* Analyze project architecture
|
|
12
|
-
*/
|
|
13
|
-
execute(args: {
|
|
14
|
-
projectPath?: string;
|
|
15
|
-
depth?: string;
|
|
16
|
-
}): Promise<ToolResult>;
|
|
17
|
-
/**
|
|
18
|
-
* Format analysis result for display
|
|
19
|
-
*/
|
|
20
|
-
private formatOutput;
|
|
21
|
-
/**
|
|
22
|
-
* Get tool definition for LLM
|
|
23
|
-
*/
|
|
24
|
-
getToolDefinition(): {
|
|
25
|
-
type: "function";
|
|
26
|
-
function: {
|
|
27
|
-
name: string;
|
|
28
|
-
description: string;
|
|
29
|
-
parameters: {
|
|
30
|
-
type: string;
|
|
31
|
-
properties: {
|
|
32
|
-
projectPath: {
|
|
33
|
-
type: string;
|
|
34
|
-
description: string;
|
|
35
|
-
};
|
|
36
|
-
depth: {
|
|
37
|
-
type: string;
|
|
38
|
-
enum: string[];
|
|
39
|
-
default: string;
|
|
40
|
-
description: string;
|
|
41
|
-
};
|
|
42
|
-
};
|
|
43
|
-
};
|
|
44
|
-
};
|
|
45
|
-
};
|
|
46
|
-
}
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Architecture Analysis Tool
|
|
3
|
-
*
|
|
4
|
-
* LLM tool for architecture analysis
|
|
5
|
-
*/
|
|
6
|
-
import { ArchitectureAnalyzer } from '../../analyzers/architecture/index.js';
|
|
7
|
-
export class ArchitectureTool {
|
|
8
|
-
analyzer;
|
|
9
|
-
constructor() {
|
|
10
|
-
this.analyzer = new ArchitectureAnalyzer();
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Analyze project architecture
|
|
14
|
-
*/
|
|
15
|
-
async execute(args) {
|
|
16
|
-
try {
|
|
17
|
-
// Use current directory if no path specified
|
|
18
|
-
const projectPath = args.projectPath || process.cwd();
|
|
19
|
-
// Validate depth parameter
|
|
20
|
-
const depth = args.depth === 'deep' ? 'deep' : 'quick';
|
|
21
|
-
// Run analysis
|
|
22
|
-
const result = await this.analyzer.analyzeProject(projectPath, depth);
|
|
23
|
-
// Format output
|
|
24
|
-
const output = this.formatOutput(result);
|
|
25
|
-
return {
|
|
26
|
-
success: true,
|
|
27
|
-
output,
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
catch (error) {
|
|
31
|
-
return {
|
|
32
|
-
success: false,
|
|
33
|
-
error: `Architecture analysis failed: ${error.message}`,
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Format analysis result for display
|
|
39
|
-
*/
|
|
40
|
-
formatOutput(result) {
|
|
41
|
-
const lines = [];
|
|
42
|
-
lines.push('# Architecture Analysis\n');
|
|
43
|
-
lines.push(`**Project**: ${result.projectPath}`);
|
|
44
|
-
lines.push(`**Score**: ${result.architectureScore}/100`);
|
|
45
|
-
lines.push(`**Duration**: ${result.durationMs}ms\n`);
|
|
46
|
-
// Summary
|
|
47
|
-
lines.push('## Summary\n');
|
|
48
|
-
lines.push(result.summary);
|
|
49
|
-
lines.push('');
|
|
50
|
-
// Detected Patterns
|
|
51
|
-
if (result.detectedPatterns.length > 0) {
|
|
52
|
-
lines.push('## Detected Patterns\n');
|
|
53
|
-
for (const pattern of result.detectedPatterns) {
|
|
54
|
-
lines.push(`### ${pattern.name}`);
|
|
55
|
-
lines.push(`- **Category**: ${pattern.category}`);
|
|
56
|
-
lines.push(`- **Confidence**: ${Math.round(pattern.confidence * 100)}%`);
|
|
57
|
-
lines.push(`- **Description**: ${pattern.description}`);
|
|
58
|
-
lines.push(`- **Locations**: ${pattern.locations.join(', ')}`);
|
|
59
|
-
lines.push('');
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
// Anti-Patterns
|
|
63
|
-
if (result.antiPatterns.length > 0) {
|
|
64
|
-
lines.push('## Anti-Patterns Found\n');
|
|
65
|
-
for (const antiPattern of result.antiPatterns) {
|
|
66
|
-
lines.push(`### ⚠️ ${antiPattern.name} (${antiPattern.severity})`);
|
|
67
|
-
lines.push(`- **Description**: ${antiPattern.description}`);
|
|
68
|
-
lines.push(`- **Impact**: ${antiPattern.impact}`);
|
|
69
|
-
lines.push(`- **Suggestion**: ${antiPattern.suggestion}`);
|
|
70
|
-
lines.push(`- **Locations**: ${antiPattern.locations.join(', ')}`);
|
|
71
|
-
lines.push('');
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
// Recommendations
|
|
75
|
-
if (result.recommendations.length > 0) {
|
|
76
|
-
lines.push('## Recommendations\n');
|
|
77
|
-
for (const rec of result.recommendations) {
|
|
78
|
-
lines.push(`### ${rec.title} (Priority: ${rec.priority})`);
|
|
79
|
-
lines.push(`**Description**: ${rec.description}\n`);
|
|
80
|
-
lines.push(`**Rationale**: ${rec.rationale}\n`);
|
|
81
|
-
lines.push(`**Estimated Effort**: ${rec.estimatedEffort}\n`);
|
|
82
|
-
if (rec.benefits.length > 0) {
|
|
83
|
-
lines.push('**Benefits**:');
|
|
84
|
-
for (const benefit of rec.benefits) {
|
|
85
|
-
lines.push(`- ${benefit}`);
|
|
86
|
-
}
|
|
87
|
-
lines.push('');
|
|
88
|
-
}
|
|
89
|
-
if (rec.relatedPatterns.length > 0) {
|
|
90
|
-
lines.push(`**Related Patterns**: ${rec.relatedPatterns.join(', ')}\n`);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return lines.join('\n');
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Get tool definition for LLM
|
|
98
|
-
*/
|
|
99
|
-
getToolDefinition() {
|
|
100
|
-
return {
|
|
101
|
-
type: 'function',
|
|
102
|
-
function: {
|
|
103
|
-
name: 'analyze_architecture',
|
|
104
|
-
description: 'Analyze project architecture to detect patterns, anti-patterns, and generate improvement recommendations',
|
|
105
|
-
parameters: {
|
|
106
|
-
type: 'object',
|
|
107
|
-
properties: {
|
|
108
|
-
projectPath: {
|
|
109
|
-
type: 'string',
|
|
110
|
-
description: 'Path to project root directory (default: current directory)',
|
|
111
|
-
},
|
|
112
|
-
depth: {
|
|
113
|
-
type: 'string',
|
|
114
|
-
enum: ['quick', 'deep'],
|
|
115
|
-
default: 'quick',
|
|
116
|
-
description: 'Analysis depth: "quick" for pattern detection only, "deep" includes anti-pattern detection',
|
|
117
|
-
},
|
|
118
|
-
},
|
|
119
|
-
},
|
|
120
|
-
},
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
//# sourceMappingURL=architecture-tool.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"architecture-tool.js","sourceRoot":"","sources":["../../../src/tools/analysis-tools/architecture-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Validation Tool
|
|
3
|
-
*
|
|
4
|
-
* LLM tool for best practice validation
|
|
5
|
-
*/
|
|
6
|
-
import type { ToolResult } from '../../types/index.js';
|
|
7
|
-
export declare class ValidationTool {
|
|
8
|
-
private validator;
|
|
9
|
-
constructor();
|
|
10
|
-
/**
|
|
11
|
-
* Validate files
|
|
12
|
-
*/
|
|
13
|
-
execute(args: {
|
|
14
|
-
path?: string;
|
|
15
|
-
pattern?: string;
|
|
16
|
-
rules?: Record<string, {
|
|
17
|
-
enabled: boolean;
|
|
18
|
-
}>;
|
|
19
|
-
}): Promise<ToolResult>;
|
|
20
|
-
/**
|
|
21
|
-
* Format validation result for display
|
|
22
|
-
*/
|
|
23
|
-
private formatOutput;
|
|
24
|
-
/**
|
|
25
|
-
* Get tool definition for LLM
|
|
26
|
-
*/
|
|
27
|
-
getToolDefinition(): {
|
|
28
|
-
type: "function";
|
|
29
|
-
function: {
|
|
30
|
-
name: string;
|
|
31
|
-
description: string;
|
|
32
|
-
parameters: {
|
|
33
|
-
type: string;
|
|
34
|
-
properties: {
|
|
35
|
-
path: {
|
|
36
|
-
type: string;
|
|
37
|
-
description: string;
|
|
38
|
-
};
|
|
39
|
-
pattern: {
|
|
40
|
-
type: string;
|
|
41
|
-
description: string;
|
|
42
|
-
};
|
|
43
|
-
rules: {
|
|
44
|
-
type: string;
|
|
45
|
-
description: string;
|
|
46
|
-
};
|
|
47
|
-
};
|
|
48
|
-
};
|
|
49
|
-
};
|
|
50
|
-
};
|
|
51
|
-
}
|