@bryan-thompson/inspector-assessment-client 1.25.4 → 1.25.5
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/dist/assets/{OAuthCallback-DE62cdTZ.js → OAuthCallback-Dl4GYls3.js} +1 -1
- package/dist/assets/{OAuthDebugCallback-CWjFdCIE.js → OAuthDebugCallback-BdJ38Z-r.js} +1 -1
- package/dist/assets/{index-Df9Sx1jt.css → index-cHhcEXbr.css} +4 -0
- package/dist/assets/{index-PCQVSwHa.js → index-pfUiTdQb.js} +4 -4
- package/dist/index.html +2 -2
- package/lib/lib/assessment/coreTypes.d.ts +65 -0
- package/lib/lib/assessment/coreTypes.d.ts.map +1 -1
- package/lib/lib/assessment/extendedTypes.d.ts +127 -0
- package/lib/lib/assessment/extendedTypes.d.ts.map +1 -1
- package/lib/lib/assessment/resultTypes.d.ts +45 -0
- package/lib/lib/assessment/resultTypes.d.ts.map +1 -1
- package/lib/services/assessment/AssessmentOrchestrator.d.ts +3 -7
- package/lib/services/assessment/AssessmentOrchestrator.d.ts.map +1 -1
- package/lib/services/assessment/AssessmentOrchestrator.js +13 -2
- package/lib/services/assessment/TestDataGenerator.d.ts +9 -1
- package/lib/services/assessment/TestDataGenerator.d.ts.map +1 -1
- package/lib/services/assessment/TestDataGenerator.js +32 -6
- package/lib/services/assessment/TestScenarioEngine.d.ts +9 -1
- package/lib/services/assessment/TestScenarioEngine.d.ts.map +1 -1
- package/lib/services/assessment/TestScenarioEngine.js +17 -14
- package/lib/services/assessment/config/annotationPatterns.d.ts +3 -1
- package/lib/services/assessment/config/annotationPatterns.d.ts.map +1 -1
- package/lib/services/assessment/config/annotationPatterns.js +5 -2
- package/lib/services/assessment/config/architecturePatterns.d.ts +101 -0
- package/lib/services/assessment/config/architecturePatterns.d.ts.map +1 -0
- package/lib/services/assessment/config/architecturePatterns.js +248 -0
- package/lib/services/assessment/config/performanceConfig.d.ts +122 -0
- package/lib/services/assessment/config/performanceConfig.d.ts.map +1 -0
- package/lib/services/assessment/config/performanceConfig.js +154 -0
- package/lib/services/assessment/config/sanitizationPatterns.d.ts +63 -0
- package/lib/services/assessment/config/sanitizationPatterns.d.ts.map +1 -0
- package/lib/services/assessment/config/sanitizationPatterns.js +223 -0
- package/lib/services/assessment/lib/claudeCodeBridge.d.ts +3 -1
- package/lib/services/assessment/lib/claudeCodeBridge.d.ts.map +1 -1
- package/lib/services/assessment/lib/claudeCodeBridge.js +5 -3
- package/lib/services/assessment/lib/concurrencyLimit.d.ts +6 -2
- package/lib/services/assessment/lib/concurrencyLimit.d.ts.map +1 -1
- package/lib/services/assessment/lib/concurrencyLimit.js +13 -6
- package/lib/services/assessment/lib/errors.d.ts +90 -0
- package/lib/services/assessment/lib/errors.d.ts.map +1 -0
- package/lib/services/assessment/lib/errors.js +136 -0
- package/lib/services/assessment/lib/timeoutUtils.d.ts +69 -0
- package/lib/services/assessment/lib/timeoutUtils.d.ts.map +1 -0
- package/lib/services/assessment/lib/timeoutUtils.js +103 -0
- package/lib/services/assessment/modules/BaseAssessor.d.ts +43 -8
- package/lib/services/assessment/modules/BaseAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/BaseAssessor.js +103 -34
- package/lib/services/assessment/modules/DeveloperExperienceAssessor.d.ts +38 -1
- package/lib/services/assessment/modules/DeveloperExperienceAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/DeveloperExperienceAssessor.js +185 -19
- package/lib/services/assessment/modules/DocumentationAssessor.d.ts +5 -0
- package/lib/services/assessment/modules/DocumentationAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/DocumentationAssessor.js +11 -0
- package/lib/services/assessment/modules/ErrorHandlingAssessor.js +1 -1
- package/lib/services/assessment/modules/FunctionalityAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/FunctionalityAssessor.js +6 -3
- package/lib/services/assessment/modules/MCPSpecComplianceAssessor.d.ts +3 -0
- package/lib/services/assessment/modules/MCPSpecComplianceAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/MCPSpecComplianceAssessor.js +14 -2
- package/lib/services/assessment/modules/ManifestValidationAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/ManifestValidationAssessor.js +7 -2
- package/lib/services/assessment/modules/PromptAssessor.d.ts +1 -0
- package/lib/services/assessment/modules/PromptAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/PromptAssessor.js +26 -16
- package/lib/services/assessment/modules/ProtocolComplianceAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/ProtocolComplianceAssessor.js +6 -2
- package/lib/services/assessment/modules/ProtocolConformanceAssessor.d.ts +5 -0
- package/lib/services/assessment/modules/ProtocolConformanceAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/ProtocolConformanceAssessor.js +15 -0
- package/lib/services/assessment/modules/ResourceAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/ResourceAssessor.js +8 -2
- package/lib/services/assessment/modules/SecurityAssessor.d.ts +3 -171
- package/lib/services/assessment/modules/SecurityAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/SecurityAssessor.js +25 -1480
- package/lib/services/assessment/modules/ToolAnnotationAssessor.d.ts +27 -28
- package/lib/services/assessment/modules/ToolAnnotationAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/ToolAnnotationAssessor.js +340 -863
- package/lib/services/assessment/modules/UsabilityAssessor.d.ts +5 -0
- package/lib/services/assessment/modules/UsabilityAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/UsabilityAssessor.js +11 -0
- package/lib/services/assessment/modules/annotations/AnnotationDeceptionDetector.d.ts +57 -0
- package/lib/services/assessment/modules/annotations/AnnotationDeceptionDetector.d.ts.map +1 -0
- package/lib/services/assessment/modules/annotations/AnnotationDeceptionDetector.js +176 -0
- package/lib/services/assessment/modules/annotations/ArchitectureDetector.d.ts +67 -0
- package/lib/services/assessment/modules/annotations/ArchitectureDetector.d.ts.map +1 -0
- package/lib/services/assessment/modules/annotations/ArchitectureDetector.js +239 -0
- package/lib/services/assessment/modules/annotations/BehaviorInference.d.ts +46 -0
- package/lib/services/assessment/modules/annotations/BehaviorInference.d.ts.map +1 -0
- package/lib/services/assessment/modules/annotations/BehaviorInference.js +394 -0
- package/lib/services/assessment/modules/annotations/DescriptionAnalyzer.d.ts +64 -0
- package/lib/services/assessment/modules/annotations/DescriptionAnalyzer.d.ts.map +1 -0
- package/lib/services/assessment/modules/annotations/DescriptionAnalyzer.js +304 -0
- package/lib/services/assessment/modules/annotations/DescriptionPoisoningDetector.d.ts +43 -0
- package/lib/services/assessment/modules/annotations/DescriptionPoisoningDetector.d.ts.map +1 -0
- package/lib/services/assessment/modules/annotations/DescriptionPoisoningDetector.js +276 -0
- package/lib/services/assessment/modules/annotations/SchemaAnalyzer.d.ts +122 -0
- package/lib/services/assessment/modules/annotations/SchemaAnalyzer.d.ts.map +1 -0
- package/lib/services/assessment/modules/annotations/SchemaAnalyzer.js +388 -0
- package/lib/services/assessment/modules/annotations/index.d.ts +13 -0
- package/lib/services/assessment/modules/annotations/index.d.ts.map +1 -0
- package/lib/services/assessment/modules/annotations/index.js +15 -0
- package/lib/services/assessment/modules/index.d.ts +10 -0
- package/lib/services/assessment/modules/index.d.ts.map +1 -1
- package/lib/services/assessment/modules/index.js +13 -0
- package/lib/services/assessment/modules/securityTests/SanitizationDetector.d.ts +125 -0
- package/lib/services/assessment/modules/securityTests/SanitizationDetector.d.ts.map +1 -0
- package/lib/services/assessment/modules/securityTests/SanitizationDetector.js +345 -0
- package/lib/services/assessment/modules/securityTests/SecurityPayloadGenerator.d.ts +33 -0
- package/lib/services/assessment/modules/securityTests/SecurityPayloadGenerator.d.ts.map +1 -0
- package/lib/services/assessment/modules/securityTests/SecurityPayloadGenerator.js +128 -0
- package/lib/services/assessment/modules/securityTests/SecurityPayloadTester.d.ts +67 -0
- package/lib/services/assessment/modules/securityTests/SecurityPayloadTester.d.ts.map +1 -0
- package/lib/services/assessment/modules/securityTests/SecurityPayloadTester.js +372 -0
- package/lib/services/assessment/modules/securityTests/SecurityResponseAnalyzer.d.ts +178 -0
- package/lib/services/assessment/modules/securityTests/SecurityResponseAnalyzer.d.ts.map +1 -0
- package/lib/services/assessment/modules/securityTests/SecurityResponseAnalyzer.js +1207 -0
- package/lib/services/assessment/modules/securityTests/index.d.ts +8 -0
- package/lib/services/assessment/modules/securityTests/index.d.ts.map +1 -0
- package/lib/services/assessment/modules/securityTests/index.js +7 -0
- package/lib/services/assessment/tool-classifier-patterns.d.ts +1 -0
- package/lib/services/assessment/tool-classifier-patterns.d.ts.map +1 -1
- package/lib/services/assessment/tool-classifier-patterns.js +17 -0
- package/package.json +1 -1
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance Configuration for Assessment Engine
|
|
3
|
+
*
|
|
4
|
+
* Centralizes performance-related magic numbers that were previously
|
|
5
|
+
* scattered across multiple modules. Supports JSON configuration files
|
|
6
|
+
* for runtime tuning via CLI flags.
|
|
7
|
+
*
|
|
8
|
+
* @see https://github.com/triepod-ai/inspector-assessment/issues/37
|
|
9
|
+
*/
|
|
10
|
+
import type { Logger } from "../lib/logger.js";
|
|
11
|
+
/**
|
|
12
|
+
* Performance configuration for assessment execution.
|
|
13
|
+
* Controls batching, timeouts, concurrency, and resource limits.
|
|
14
|
+
*/
|
|
15
|
+
export interface PerformanceConfig {
|
|
16
|
+
/**
|
|
17
|
+
* Interval in milliseconds between progress batch flushes.
|
|
18
|
+
* Controls how often batched test results are emitted.
|
|
19
|
+
* @default 500
|
|
20
|
+
*/
|
|
21
|
+
batchFlushIntervalMs: number;
|
|
22
|
+
/**
|
|
23
|
+
* Batch size for functionality assessment progress events.
|
|
24
|
+
* Smaller than security batch size because functionality tests are fewer.
|
|
25
|
+
* @default 5
|
|
26
|
+
*/
|
|
27
|
+
functionalityBatchSize: number;
|
|
28
|
+
/**
|
|
29
|
+
* Batch size for security assessment progress events.
|
|
30
|
+
* @default 10
|
|
31
|
+
*/
|
|
32
|
+
securityBatchSize: number;
|
|
33
|
+
/**
|
|
34
|
+
* Timeout for individual test scenario execution in milliseconds.
|
|
35
|
+
* Applied via Promise.race in TestScenarioEngine.
|
|
36
|
+
* @default 5000
|
|
37
|
+
*/
|
|
38
|
+
testTimeoutMs: number;
|
|
39
|
+
/**
|
|
40
|
+
* Timeout for individual security payload tests in milliseconds.
|
|
41
|
+
* Fallback when not specified in assessment configuration.
|
|
42
|
+
* @default 5000
|
|
43
|
+
*/
|
|
44
|
+
securityTestTimeoutMs: number;
|
|
45
|
+
/**
|
|
46
|
+
* Warning threshold for queue depth monitoring.
|
|
47
|
+
* Triggers warning when task queue exceeds this size.
|
|
48
|
+
*
|
|
49
|
+
* Derivation: Advanced security assessments can legitimately queue:
|
|
50
|
+
* 29 tools x 140 payloads (across 23 attack patterns) = 4,060 tasks
|
|
51
|
+
*
|
|
52
|
+
* Threshold of 10,000 provides ~146% headroom to accommodate larger
|
|
53
|
+
* tool sets while catching true runaway scenarios.
|
|
54
|
+
* @default 10000
|
|
55
|
+
*/
|
|
56
|
+
queueWarningThreshold: number;
|
|
57
|
+
/**
|
|
58
|
+
* Maximum EventEmitter listeners to prevent Node.js warnings.
|
|
59
|
+
* Assessment operations require more listeners than Node's default (10).
|
|
60
|
+
* @default 50
|
|
61
|
+
*/
|
|
62
|
+
eventEmitterMaxListeners: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Default performance configuration.
|
|
66
|
+
* These values preserve existing behavior across all modules.
|
|
67
|
+
*/
|
|
68
|
+
export declare const DEFAULT_PERFORMANCE_CONFIG: Readonly<Required<PerformanceConfig>>;
|
|
69
|
+
/**
|
|
70
|
+
* Performance presets for common use cases.
|
|
71
|
+
*/
|
|
72
|
+
export declare const PERFORMANCE_PRESETS: {
|
|
73
|
+
/** Default configuration - balanced performance */
|
|
74
|
+
readonly default: Readonly<Required<PerformanceConfig>>;
|
|
75
|
+
/** Optimized for speed with larger batches */
|
|
76
|
+
readonly fast: Readonly<{
|
|
77
|
+
functionalityBatchSize: 10;
|
|
78
|
+
securityBatchSize: 20;
|
|
79
|
+
batchFlushIntervalMs: number;
|
|
80
|
+
testTimeoutMs: number;
|
|
81
|
+
securityTestTimeoutMs: number;
|
|
82
|
+
queueWarningThreshold: number;
|
|
83
|
+
eventEmitterMaxListeners: number;
|
|
84
|
+
}>;
|
|
85
|
+
/** Conservative settings for resource-constrained environments */
|
|
86
|
+
readonly resourceConstrained: Readonly<{
|
|
87
|
+
functionalityBatchSize: 3;
|
|
88
|
+
securityBatchSize: 5;
|
|
89
|
+
queueWarningThreshold: 5000;
|
|
90
|
+
batchFlushIntervalMs: number;
|
|
91
|
+
testTimeoutMs: number;
|
|
92
|
+
securityTestTimeoutMs: number;
|
|
93
|
+
eventEmitterMaxListeners: number;
|
|
94
|
+
}>;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Validate a partial performance config.
|
|
98
|
+
* Ensures values are within reasonable bounds.
|
|
99
|
+
*
|
|
100
|
+
* @param config - Partial config to validate
|
|
101
|
+
* @returns Array of validation error messages (empty if valid)
|
|
102
|
+
*/
|
|
103
|
+
export declare function validatePerformanceConfig(config: Partial<PerformanceConfig>): string[];
|
|
104
|
+
/**
|
|
105
|
+
* Merge a partial config with defaults.
|
|
106
|
+
* User-provided values override defaults.
|
|
107
|
+
*
|
|
108
|
+
* @param partial - Partial config to merge
|
|
109
|
+
* @returns Complete config with defaults applied
|
|
110
|
+
*/
|
|
111
|
+
export declare function mergeWithDefaults(partial: Partial<PerformanceConfig>): Required<PerformanceConfig>;
|
|
112
|
+
/**
|
|
113
|
+
* Load performance configuration from a JSON file.
|
|
114
|
+
* Partial configs are validated and merged with defaults.
|
|
115
|
+
*
|
|
116
|
+
* @param configPath - Path to JSON configuration file
|
|
117
|
+
* @param logger - Optional logger for diagnostic output
|
|
118
|
+
* @returns Complete configuration with defaults applied
|
|
119
|
+
* @throws Error if config file has validation errors
|
|
120
|
+
*/
|
|
121
|
+
export declare function loadPerformanceConfig(configPath?: string, logger?: Logger): Required<PerformanceConfig>;
|
|
122
|
+
//# sourceMappingURL=performanceConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performanceConfig.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/config/performanceConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,oBAAoB,EAAE,MAAM,CAAC;IAE7B;;;;OAIG;IACH,sBAAsB,EAAE,MAAM,CAAC;IAE/B;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;;;OAIG;IACH,qBAAqB,EAAE,MAAM,CAAC;IAE9B;;;;;;;;;;OAUG;IACH,qBAAqB,EAAE,MAAM,CAAC;IAE9B;;;;OAIG;IACH,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAED;;;GAGG;AACH,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CASzE,CAAC;AAEL;;GAEG;AACH,eAAO,MAAM,mBAAmB;IAC9B,mDAAmD;;IAGnD,8CAA8C;;;;8BAxExB,MAAM;uBAoBb,MAAM;+BAOE,MAAM;+BAaN,MAAM;kCAOH,MAAM;;IAgChC,kEAAkE;;;;;8BA/E5C,MAAM;uBAoBb,MAAM;+BAOE,MAAM;kCAoBH,MAAM;;CAuCxB,CAAC;AAEX;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACjC,MAAM,EAAE,CAwDV;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAClC,QAAQ,CAAC,iBAAiB,CAAC,CAsB7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,QAAQ,CAAC,iBAAiB,CAAC,CAyC7B"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance Configuration for Assessment Engine
|
|
3
|
+
*
|
|
4
|
+
* Centralizes performance-related magic numbers that were previously
|
|
5
|
+
* scattered across multiple modules. Supports JSON configuration files
|
|
6
|
+
* for runtime tuning via CLI flags.
|
|
7
|
+
*
|
|
8
|
+
* @see https://github.com/triepod-ai/inspector-assessment/issues/37
|
|
9
|
+
*/
|
|
10
|
+
import * as fs from "fs";
|
|
11
|
+
/**
|
|
12
|
+
* Default performance configuration.
|
|
13
|
+
* These values preserve existing behavior across all modules.
|
|
14
|
+
*/
|
|
15
|
+
export const DEFAULT_PERFORMANCE_CONFIG = Object.freeze({
|
|
16
|
+
batchFlushIntervalMs: 500,
|
|
17
|
+
functionalityBatchSize: 5,
|
|
18
|
+
securityBatchSize: 10,
|
|
19
|
+
testTimeoutMs: 5000,
|
|
20
|
+
securityTestTimeoutMs: 5000,
|
|
21
|
+
queueWarningThreshold: 10000,
|
|
22
|
+
eventEmitterMaxListeners: 50,
|
|
23
|
+
});
|
|
24
|
+
/**
|
|
25
|
+
* Performance presets for common use cases.
|
|
26
|
+
*/
|
|
27
|
+
export const PERFORMANCE_PRESETS = {
|
|
28
|
+
/** Default configuration - balanced performance */
|
|
29
|
+
default: DEFAULT_PERFORMANCE_CONFIG,
|
|
30
|
+
/** Optimized for speed with larger batches */
|
|
31
|
+
fast: Object.freeze({
|
|
32
|
+
...DEFAULT_PERFORMANCE_CONFIG,
|
|
33
|
+
functionalityBatchSize: 10,
|
|
34
|
+
securityBatchSize: 20,
|
|
35
|
+
}),
|
|
36
|
+
/** Conservative settings for resource-constrained environments */
|
|
37
|
+
resourceConstrained: Object.freeze({
|
|
38
|
+
...DEFAULT_PERFORMANCE_CONFIG,
|
|
39
|
+
functionalityBatchSize: 3,
|
|
40
|
+
securityBatchSize: 5,
|
|
41
|
+
queueWarningThreshold: 5000,
|
|
42
|
+
}),
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Validate a partial performance config.
|
|
46
|
+
* Ensures values are within reasonable bounds.
|
|
47
|
+
*
|
|
48
|
+
* @param config - Partial config to validate
|
|
49
|
+
* @returns Array of validation error messages (empty if valid)
|
|
50
|
+
*/
|
|
51
|
+
export function validatePerformanceConfig(config) {
|
|
52
|
+
const errors = [];
|
|
53
|
+
if (config.batchFlushIntervalMs !== undefined &&
|
|
54
|
+
(config.batchFlushIntervalMs < 50 || config.batchFlushIntervalMs > 10000)) {
|
|
55
|
+
errors.push("batchFlushIntervalMs must be between 50 and 10000");
|
|
56
|
+
}
|
|
57
|
+
if (config.functionalityBatchSize !== undefined &&
|
|
58
|
+
(config.functionalityBatchSize < 1 || config.functionalityBatchSize > 100)) {
|
|
59
|
+
errors.push("functionalityBatchSize must be between 1 and 100");
|
|
60
|
+
}
|
|
61
|
+
if (config.securityBatchSize !== undefined &&
|
|
62
|
+
(config.securityBatchSize < 1 || config.securityBatchSize > 100)) {
|
|
63
|
+
errors.push("securityBatchSize must be between 1 and 100");
|
|
64
|
+
}
|
|
65
|
+
if (config.testTimeoutMs !== undefined &&
|
|
66
|
+
(config.testTimeoutMs < 100 || config.testTimeoutMs > 300000)) {
|
|
67
|
+
errors.push("testTimeoutMs must be between 100 and 300000");
|
|
68
|
+
}
|
|
69
|
+
if (config.securityTestTimeoutMs !== undefined &&
|
|
70
|
+
(config.securityTestTimeoutMs < 100 ||
|
|
71
|
+
config.securityTestTimeoutMs > 300000)) {
|
|
72
|
+
errors.push("securityTestTimeoutMs must be between 100 and 300000");
|
|
73
|
+
}
|
|
74
|
+
if (config.queueWarningThreshold !== undefined &&
|
|
75
|
+
(config.queueWarningThreshold < 100 ||
|
|
76
|
+
config.queueWarningThreshold > 1000000)) {
|
|
77
|
+
errors.push("queueWarningThreshold must be between 100 and 1000000");
|
|
78
|
+
}
|
|
79
|
+
if (config.eventEmitterMaxListeners !== undefined &&
|
|
80
|
+
(config.eventEmitterMaxListeners < 10 ||
|
|
81
|
+
config.eventEmitterMaxListeners > 1000)) {
|
|
82
|
+
errors.push("eventEmitterMaxListeners must be between 10 and 1000");
|
|
83
|
+
}
|
|
84
|
+
return errors;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Merge a partial config with defaults.
|
|
88
|
+
* User-provided values override defaults.
|
|
89
|
+
*
|
|
90
|
+
* @param partial - Partial config to merge
|
|
91
|
+
* @returns Complete config with defaults applied
|
|
92
|
+
*/
|
|
93
|
+
export function mergeWithDefaults(partial) {
|
|
94
|
+
return {
|
|
95
|
+
batchFlushIntervalMs: partial.batchFlushIntervalMs ??
|
|
96
|
+
DEFAULT_PERFORMANCE_CONFIG.batchFlushIntervalMs,
|
|
97
|
+
functionalityBatchSize: partial.functionalityBatchSize ??
|
|
98
|
+
DEFAULT_PERFORMANCE_CONFIG.functionalityBatchSize,
|
|
99
|
+
securityBatchSize: partial.securityBatchSize ?? DEFAULT_PERFORMANCE_CONFIG.securityBatchSize,
|
|
100
|
+
testTimeoutMs: partial.testTimeoutMs ?? DEFAULT_PERFORMANCE_CONFIG.testTimeoutMs,
|
|
101
|
+
securityTestTimeoutMs: partial.securityTestTimeoutMs ??
|
|
102
|
+
DEFAULT_PERFORMANCE_CONFIG.securityTestTimeoutMs,
|
|
103
|
+
queueWarningThreshold: partial.queueWarningThreshold ??
|
|
104
|
+
DEFAULT_PERFORMANCE_CONFIG.queueWarningThreshold,
|
|
105
|
+
eventEmitterMaxListeners: partial.eventEmitterMaxListeners ??
|
|
106
|
+
DEFAULT_PERFORMANCE_CONFIG.eventEmitterMaxListeners,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Load performance configuration from a JSON file.
|
|
111
|
+
* Partial configs are validated and merged with defaults.
|
|
112
|
+
*
|
|
113
|
+
* @param configPath - Path to JSON configuration file
|
|
114
|
+
* @param logger - Optional logger for diagnostic output
|
|
115
|
+
* @returns Complete configuration with defaults applied
|
|
116
|
+
* @throws Error if config file has validation errors
|
|
117
|
+
*/
|
|
118
|
+
export function loadPerformanceConfig(configPath, logger) {
|
|
119
|
+
if (!configPath) {
|
|
120
|
+
return { ...DEFAULT_PERFORMANCE_CONFIG };
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
const configContent = fs.readFileSync(configPath, "utf-8");
|
|
124
|
+
const userConfig = JSON.parse(configContent);
|
|
125
|
+
// Validate the config
|
|
126
|
+
const errors = validatePerformanceConfig(userConfig);
|
|
127
|
+
if (errors.length > 0) {
|
|
128
|
+
const errorMsg = `Invalid performance config: ${errors.join(", ")}`;
|
|
129
|
+
logger?.error(errorMsg, { configPath, errors });
|
|
130
|
+
throw new Error(errorMsg);
|
|
131
|
+
}
|
|
132
|
+
logger?.debug("Loaded performance config", { configPath, userConfig });
|
|
133
|
+
return mergeWithDefaults(userConfig);
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
if (error instanceof SyntaxError) {
|
|
137
|
+
logger?.error("Invalid JSON in performance config file", {
|
|
138
|
+
configPath,
|
|
139
|
+
error: error.message,
|
|
140
|
+
});
|
|
141
|
+
throw new Error(`Invalid JSON in performance config: ${configPath}`);
|
|
142
|
+
}
|
|
143
|
+
// Re-throw validation errors
|
|
144
|
+
if (error instanceof Error && error.message.includes("Invalid")) {
|
|
145
|
+
throw error;
|
|
146
|
+
}
|
|
147
|
+
// File read errors - use defaults with warning
|
|
148
|
+
logger?.warn("Could not load performance config, using defaults", {
|
|
149
|
+
configPath,
|
|
150
|
+
error: error instanceof Error ? error.message : String(error),
|
|
151
|
+
});
|
|
152
|
+
return { ...DEFAULT_PERFORMANCE_CONFIG };
|
|
153
|
+
}
|
|
154
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sanitization Library Pattern Configuration
|
|
3
|
+
*
|
|
4
|
+
* Detects security libraries and sanitization practices in tool metadata/descriptions.
|
|
5
|
+
* Used by SanitizationDetector to reduce false positives when tools have proper
|
|
6
|
+
* input sanitization in place.
|
|
7
|
+
*
|
|
8
|
+
* @see Issue #56: Improve security analysis granularity
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Categories of sanitization approaches
|
|
12
|
+
*/
|
|
13
|
+
export type SanitizationCategory = "xss" | "html" | "sql" | "input" | "encoding" | "framework";
|
|
14
|
+
/**
|
|
15
|
+
* Pattern definition for detecting a specific sanitization library
|
|
16
|
+
*/
|
|
17
|
+
export interface SanitizationLibraryPattern {
|
|
18
|
+
/** Library name for reporting */
|
|
19
|
+
name: string;
|
|
20
|
+
/** Regex patterns to detect this library */
|
|
21
|
+
patterns: RegExp[];
|
|
22
|
+
/** Type of sanitization this library provides */
|
|
23
|
+
category: SanitizationCategory;
|
|
24
|
+
/** Confidence boost when detected (15-25 points) */
|
|
25
|
+
confidenceBoost: number;
|
|
26
|
+
/** Languages this library is typically used with */
|
|
27
|
+
languageHint?: string[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Known sanitization libraries with detection patterns
|
|
31
|
+
*
|
|
32
|
+
* Detection is conservative - patterns match explicit mentions of libraries
|
|
33
|
+
* rather than generic terms that could have other meanings.
|
|
34
|
+
*/
|
|
35
|
+
export declare const SANITIZATION_LIBRARY_PATTERNS: SanitizationLibraryPattern[];
|
|
36
|
+
/**
|
|
37
|
+
* Generic sanitization keyword patterns
|
|
38
|
+
*
|
|
39
|
+
* These are less specific than library patterns and provide lower confidence boost.
|
|
40
|
+
* Used when no specific library is detected but sanitization is mentioned.
|
|
41
|
+
*/
|
|
42
|
+
export declare const GENERIC_SANITIZATION_KEYWORDS: RegExp[];
|
|
43
|
+
/**
|
|
44
|
+
* Response-time sanitization indicators
|
|
45
|
+
*
|
|
46
|
+
* Patterns that indicate sanitization was applied to the response.
|
|
47
|
+
* These provide evidence that input was processed safely.
|
|
48
|
+
*/
|
|
49
|
+
export declare const RESPONSE_SANITIZATION_INDICATORS: RegExp[];
|
|
50
|
+
/**
|
|
51
|
+
* Confidence boost values for different detection types
|
|
52
|
+
*/
|
|
53
|
+
export declare const CONFIDENCE_BOOSTS: {
|
|
54
|
+
/** Specific library detected (e.g., DOMPurify) */
|
|
55
|
+
readonly SPECIFIC_LIBRARY: 25;
|
|
56
|
+
/** Generic sanitization keyword detected */
|
|
57
|
+
readonly GENERIC_KEYWORD: 8;
|
|
58
|
+
/** Response-time sanitization evidence */
|
|
59
|
+
readonly RESPONSE_EVIDENCE: 10;
|
|
60
|
+
/** Maximum total adjustment (cap) */
|
|
61
|
+
readonly MAX_ADJUSTMENT: 50;
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=sanitizationPatterns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitizationPatterns.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/config/sanitizationPatterns.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC5B,KAAK,GACL,MAAM,GACN,KAAK,GACL,OAAO,GACP,UAAU,GACV,WAAW,CAAC;AAEhB;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iDAAiD;IACjD,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,oDAAoD;IACpD,eAAe,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,EAAE,0BAA0B,EAkKrE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,EAAE,MAAM,EAWjD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,EAAE,MAAM,EAWpD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB;IAC5B,kDAAkD;;IAElD,4CAA4C;;IAE5C,0CAA0C;;IAE1C,qCAAqC;;CAE7B,CAAC"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sanitization Library Pattern Configuration
|
|
3
|
+
*
|
|
4
|
+
* Detects security libraries and sanitization practices in tool metadata/descriptions.
|
|
5
|
+
* Used by SanitizationDetector to reduce false positives when tools have proper
|
|
6
|
+
* input sanitization in place.
|
|
7
|
+
*
|
|
8
|
+
* @see Issue #56: Improve security analysis granularity
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Known sanitization libraries with detection patterns
|
|
12
|
+
*
|
|
13
|
+
* Detection is conservative - patterns match explicit mentions of libraries
|
|
14
|
+
* rather than generic terms that could have other meanings.
|
|
15
|
+
*/
|
|
16
|
+
export const SANITIZATION_LIBRARY_PATTERNS = [
|
|
17
|
+
// XSS Prevention Libraries
|
|
18
|
+
{
|
|
19
|
+
name: "DOMPurify",
|
|
20
|
+
patterns: [/\bDOMPurify\b/i, /\bdom[\-_]?purify\b/i],
|
|
21
|
+
category: "xss",
|
|
22
|
+
confidenceBoost: 25,
|
|
23
|
+
languageHint: ["javascript", "typescript"],
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: "xss",
|
|
27
|
+
patterns: [
|
|
28
|
+
/\bxss\s*\(/i,
|
|
29
|
+
/require\s*\(\s*['"]xss['"]\s*\)/i,
|
|
30
|
+
/import.*from\s+['"]xss['"]/i,
|
|
31
|
+
/xss\s+library/i,
|
|
32
|
+
],
|
|
33
|
+
category: "xss",
|
|
34
|
+
confidenceBoost: 25,
|
|
35
|
+
languageHint: ["javascript", "typescript"],
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: "bleach",
|
|
39
|
+
patterns: [/\bbleach\b/i, /bleach\.clean/i, /import\s+bleach/i],
|
|
40
|
+
category: "xss",
|
|
41
|
+
confidenceBoost: 25,
|
|
42
|
+
languageHint: ["python"],
|
|
43
|
+
},
|
|
44
|
+
// HTML Sanitization
|
|
45
|
+
{
|
|
46
|
+
name: "sanitize-html",
|
|
47
|
+
patterns: [
|
|
48
|
+
/\bsanitize[\-_]?html\b/i,
|
|
49
|
+
/sanitizeHtml\s*\(/i,
|
|
50
|
+
/require\s*\(\s*['"]sanitize-html['"]\s*\)/i,
|
|
51
|
+
],
|
|
52
|
+
category: "html",
|
|
53
|
+
confidenceBoost: 20,
|
|
54
|
+
languageHint: ["javascript", "typescript"],
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: "escape-html",
|
|
58
|
+
patterns: [
|
|
59
|
+
/\bescape[\-_]?html\b/i,
|
|
60
|
+
/escapeHtml\s*\(/i,
|
|
61
|
+
/require\s*\(\s*['"]escape-html['"]\s*\)/i,
|
|
62
|
+
],
|
|
63
|
+
category: "encoding",
|
|
64
|
+
confidenceBoost: 15,
|
|
65
|
+
languageHint: ["javascript", "typescript"],
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: "he",
|
|
69
|
+
patterns: [
|
|
70
|
+
/\bhe\.encode/i,
|
|
71
|
+
/\bhe\.escape/i,
|
|
72
|
+
/require\s*\(\s*['"]he['"]\s*\)/i,
|
|
73
|
+
],
|
|
74
|
+
category: "encoding",
|
|
75
|
+
confidenceBoost: 15,
|
|
76
|
+
languageHint: ["javascript", "typescript"],
|
|
77
|
+
},
|
|
78
|
+
// Input Validation Libraries
|
|
79
|
+
{
|
|
80
|
+
name: "validator",
|
|
81
|
+
patterns: [
|
|
82
|
+
/validator\.js/i,
|
|
83
|
+
/\bvalidatorjs\b/i,
|
|
84
|
+
/validator\.(isEmail|escape|sanitize|isURL|isAlphanumeric)/i,
|
|
85
|
+
/require\s*\(\s*['"]validator['"]\s*\)/i,
|
|
86
|
+
],
|
|
87
|
+
category: "input",
|
|
88
|
+
confidenceBoost: 20,
|
|
89
|
+
languageHint: ["javascript", "typescript"],
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: "Zod",
|
|
93
|
+
patterns: [
|
|
94
|
+
/\bz\.string\s*\(\)/i,
|
|
95
|
+
/\bz\.object\s*\(/i,
|
|
96
|
+
/\bzod\b/i,
|
|
97
|
+
/\.safeParse\s*\(/i,
|
|
98
|
+
/import.*from\s+['"]zod['"]/i,
|
|
99
|
+
],
|
|
100
|
+
category: "input",
|
|
101
|
+
confidenceBoost: 15,
|
|
102
|
+
languageHint: ["typescript"],
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
name: "Joi",
|
|
106
|
+
patterns: [
|
|
107
|
+
/\bJoi\b/i,
|
|
108
|
+
/Joi\.string\s*\(\)/i,
|
|
109
|
+
/Joi\.object\s*\(/i,
|
|
110
|
+
/\.validate\s*\(/i,
|
|
111
|
+
/require\s*\(\s*['"]joi['"]\s*\)/i,
|
|
112
|
+
],
|
|
113
|
+
category: "input",
|
|
114
|
+
confidenceBoost: 15,
|
|
115
|
+
languageHint: ["javascript", "typescript"],
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: "yup",
|
|
119
|
+
patterns: [
|
|
120
|
+
/\byup\b/i,
|
|
121
|
+
/yup\.string\s*\(\)/i,
|
|
122
|
+
/yup\.object\s*\(/i,
|
|
123
|
+
/import.*from\s+['"]yup['"]/i,
|
|
124
|
+
],
|
|
125
|
+
category: "input",
|
|
126
|
+
confidenceBoost: 15,
|
|
127
|
+
languageHint: ["javascript", "typescript"],
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
name: "pydantic",
|
|
131
|
+
patterns: [
|
|
132
|
+
/\bpydantic\b/i,
|
|
133
|
+
/from\s+pydantic\s+import/i,
|
|
134
|
+
/BaseModel/i,
|
|
135
|
+
/Field\s*\(/i,
|
|
136
|
+
],
|
|
137
|
+
category: "input",
|
|
138
|
+
confidenceBoost: 15,
|
|
139
|
+
languageHint: ["python"],
|
|
140
|
+
},
|
|
141
|
+
// SQL Injection Prevention
|
|
142
|
+
{
|
|
143
|
+
name: "parameterized-queries",
|
|
144
|
+
patterns: [
|
|
145
|
+
/prepared[\s_]?statement/i,
|
|
146
|
+
/parameterized[\s_]?quer/i,
|
|
147
|
+
/\$\d+\s/i, // PostgreSQL style $1, $2
|
|
148
|
+
/:\w+\s/i, // Named parameters :name
|
|
149
|
+
/\?\s/i, // Positional parameters ?
|
|
150
|
+
],
|
|
151
|
+
category: "sql",
|
|
152
|
+
confidenceBoost: 20,
|
|
153
|
+
languageHint: ["sql"],
|
|
154
|
+
},
|
|
155
|
+
// Framework-level Protection
|
|
156
|
+
{
|
|
157
|
+
name: "helmet",
|
|
158
|
+
patterns: [
|
|
159
|
+
/\bhelmet\b/i,
|
|
160
|
+
/helmet\s*\(\)/i,
|
|
161
|
+
/require\s*\(\s*['"]helmet['"]\s*\)/i,
|
|
162
|
+
],
|
|
163
|
+
category: "framework",
|
|
164
|
+
confidenceBoost: 10,
|
|
165
|
+
languageHint: ["javascript", "typescript"],
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
name: "django-csrf",
|
|
169
|
+
patterns: [/csrf_token/i, /CsrfViewMiddleware/i, /@csrf_protect/i],
|
|
170
|
+
category: "framework",
|
|
171
|
+
confidenceBoost: 10,
|
|
172
|
+
languageHint: ["python"],
|
|
173
|
+
},
|
|
174
|
+
];
|
|
175
|
+
/**
|
|
176
|
+
* Generic sanitization keyword patterns
|
|
177
|
+
*
|
|
178
|
+
* These are less specific than library patterns and provide lower confidence boost.
|
|
179
|
+
* Used when no specific library is detected but sanitization is mentioned.
|
|
180
|
+
*/
|
|
181
|
+
export const GENERIC_SANITIZATION_KEYWORDS = [
|
|
182
|
+
/\bsanitiz(e|ed|es|ing|ation)\b/i,
|
|
183
|
+
/\bescap(e|ed|es|ing)\b/i,
|
|
184
|
+
/\bencod(e|ed|es|ing)\b/i,
|
|
185
|
+
/\bvalidat(e|ed|es|ing|ion)\b/i,
|
|
186
|
+
/\bfilter(ed|s|ing)?\b/i,
|
|
187
|
+
/\bclean(ed|s|ing)?\b/i,
|
|
188
|
+
/\bpurif(y|ied|ies|ying)\b/i,
|
|
189
|
+
/\bnormaliz(e|ed|es|ing)\b/i,
|
|
190
|
+
/\bstrip(ped|s|ping)?\b/i,
|
|
191
|
+
/\btrim(med|s|ming)?\b/i,
|
|
192
|
+
];
|
|
193
|
+
/**
|
|
194
|
+
* Response-time sanitization indicators
|
|
195
|
+
*
|
|
196
|
+
* Patterns that indicate sanitization was applied to the response.
|
|
197
|
+
* These provide evidence that input was processed safely.
|
|
198
|
+
*/
|
|
199
|
+
export const RESPONSE_SANITIZATION_INDICATORS = [
|
|
200
|
+
/\[sanitized\]/i,
|
|
201
|
+
/\[filtered\]/i,
|
|
202
|
+
/\[redacted\]/i,
|
|
203
|
+
/\[removed\]/i,
|
|
204
|
+
/\[cleaned\]/i,
|
|
205
|
+
/\[escaped\]/i,
|
|
206
|
+
/input.*sanitized/i,
|
|
207
|
+
/content.*filtered/i,
|
|
208
|
+
/value.*cleaned/i,
|
|
209
|
+
/data.*validated/i,
|
|
210
|
+
];
|
|
211
|
+
/**
|
|
212
|
+
* Confidence boost values for different detection types
|
|
213
|
+
*/
|
|
214
|
+
export const CONFIDENCE_BOOSTS = {
|
|
215
|
+
/** Specific library detected (e.g., DOMPurify) */
|
|
216
|
+
SPECIFIC_LIBRARY: 25,
|
|
217
|
+
/** Generic sanitization keyword detected */
|
|
218
|
+
GENERIC_KEYWORD: 8,
|
|
219
|
+
/** Response-time sanitization evidence */
|
|
220
|
+
RESPONSE_EVIDENCE: 10,
|
|
221
|
+
/** Maximum total adjustment (cap) */
|
|
222
|
+
MAX_ADJUSTMENT: 50,
|
|
223
|
+
};
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
14
14
|
import type { AUPCategory } from "../../../lib/assessmentTypes.js";
|
|
15
|
+
import { Logger } from "./logger.js";
|
|
15
16
|
/**
|
|
16
17
|
* Response from Claude Code execution
|
|
17
18
|
*/
|
|
@@ -103,7 +104,8 @@ export declare const FULL_CLAUDE_CODE_CONFIG: ClaudeCodeBridgeConfig;
|
|
|
103
104
|
export declare class ClaudeCodeBridge {
|
|
104
105
|
private config;
|
|
105
106
|
private isAvailable;
|
|
106
|
-
|
|
107
|
+
private logger?;
|
|
108
|
+
constructor(config: ClaudeCodeBridgeConfig, logger?: Logger);
|
|
107
109
|
/**
|
|
108
110
|
* Check if a specific feature is enabled
|
|
109
111
|
* Note: annotationInference is an alias for behaviorInference
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeCodeBridge.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/lib/claudeCodeBridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"claudeCodeBridge.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/lib/claudeCodeBridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,11 +50,13 @@ export const FULL_CLAUDE_CODE_CONFIG = {
|
|
|
50
50
|
export class ClaudeCodeBridge {
|
|
51
51
|
config;
|
|
52
52
|
isAvailable = false;
|
|
53
|
-
|
|
53
|
+
logger;
|
|
54
|
+
constructor(config, logger) {
|
|
54
55
|
this.config = config;
|
|
56
|
+
this.logger = logger;
|
|
55
57
|
this.isAvailable = this.checkClaudeAvailability();
|
|
56
58
|
if (!this.isAvailable) {
|
|
57
|
-
|
|
59
|
+
this.logger?.warn("Claude CLI not available - features will be disabled");
|
|
58
60
|
}
|
|
59
61
|
}
|
|
60
62
|
/**
|
|
@@ -151,7 +153,7 @@ export class ClaudeCodeBridge {
|
|
|
151
153
|
return JSON.parse(jsonStr);
|
|
152
154
|
}
|
|
153
155
|
catch {
|
|
154
|
-
|
|
156
|
+
this.logger?.warn("Failed to parse JSON response");
|
|
155
157
|
return null;
|
|
156
158
|
}
|
|
157
159
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Simple concurrency limiter for parallel async operations
|
|
3
3
|
* Provides the same interface as p-limit but is CJS-compatible
|
|
4
4
|
*/
|
|
5
|
+
import { Logger } from "./logger.js";
|
|
5
6
|
/**
|
|
6
7
|
* Warning threshold for queue depth monitoring.
|
|
7
8
|
* If queue exceeds this size, a warning is emitted to help diagnose
|
|
@@ -12,14 +13,17 @@
|
|
|
12
13
|
*
|
|
13
14
|
* Threshold of 10,000 provides ~146% headroom to accommodate larger
|
|
14
15
|
* tool sets while catching true runaway scenarios.
|
|
16
|
+
*
|
|
17
|
+
* @see PerformanceConfig.queueWarningThreshold (Issue #37)
|
|
15
18
|
*/
|
|
16
|
-
export declare const QUEUE_WARNING_THRESHOLD
|
|
19
|
+
export declare const QUEUE_WARNING_THRESHOLD: number;
|
|
17
20
|
export type LimitFunction = <T>(fn: () => Promise<T>) => Promise<T>;
|
|
18
21
|
/**
|
|
19
22
|
* Creates a concurrency limiter that allows only a specified number
|
|
20
23
|
* of async operations to run simultaneously
|
|
21
24
|
*
|
|
22
25
|
* @param concurrency - Maximum number of concurrent operations
|
|
26
|
+
* @param logger - Optional logger instance for queue depth warnings
|
|
23
27
|
* @returns A function that wraps async operations with the concurrency limit
|
|
24
28
|
*
|
|
25
29
|
* @example
|
|
@@ -28,5 +32,5 @@ export type LimitFunction = <T>(fn: () => Promise<T>) => Promise<T>;
|
|
|
28
32
|
* items.map(item => limit(() => processItem(item)))
|
|
29
33
|
* );
|
|
30
34
|
*/
|
|
31
|
-
export declare function createConcurrencyLimit(concurrency: number): LimitFunction;
|
|
35
|
+
export declare function createConcurrencyLimit(concurrency: number, logger?: Logger): LimitFunction;
|
|
32
36
|
//# sourceMappingURL=concurrencyLimit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"concurrencyLimit.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/lib/concurrencyLimit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH
|
|
1
|
+
{"version":3,"file":"concurrencyLimit.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/lib/concurrencyLimit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB,QACc,CAAC;AAEnD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAEpE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,aAAa,CAwDf"}
|