@bryan-thompson/inspector-assessment-client 1.25.1 → 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-CkzX_H4T.js → OAuthCallback-Dl4GYls3.js} +1 -1
- package/dist/assets/{OAuthDebugCallback-jZEkm74B.js → OAuthDebugCallback-BdJ38Z-r.js} +1 -1
- package/dist/assets/{index-Df9Sx1jt.css → index-cHhcEXbr.css} +4 -0
- package/dist/assets/{index-BVx1dGJT.js → index-pfUiTdQb.js} +4 -4
- package/dist/index.html +2 -2
- package/lib/lib/assessment/configTypes.d.ts +3 -0
- package/lib/lib/assessment/configTypes.d.ts.map +1 -1
- package/lib/lib/assessment/configTypes.js +11 -6
- 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 +4 -12
- package/lib/services/assessment/AssessmentOrchestrator.d.ts.map +1 -1
- package/lib/services/assessment/AssessmentOrchestrator.js +49 -238
- 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/ToolClassifier.d.ts +154 -27
- package/lib/services/assessment/ToolClassifier.d.ts.map +1 -1
- package/lib/services/assessment/ToolClassifier.js +171 -318
- 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/orchestratorHelpers.d.ts +83 -0
- package/lib/services/assessment/orchestratorHelpers.d.ts.map +1 -0
- package/lib/services/assessment/orchestratorHelpers.js +212 -0
- package/lib/services/assessment/tool-classifier-patterns.d.ts +85 -0
- package/lib/services/assessment/tool-classifier-patterns.d.ts.map +1 -0
- package/lib/services/assessment/tool-classifier-patterns.js +365 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssessmentOrchestrator.d.ts","sourceRoot":"","sources":["../../../src/services/assessment/AssessmentOrchestrator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,sBAAsB,EACtB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"AssessmentOrchestrator.d.ts","sourceRoot":"","sources":["../../../src/services/assessment/AssessmentOrchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,8 @@ import { SecurityAssessor } from "./modules/SecurityAssessor.js";
|
|
|
9
9
|
import { DocumentationAssessor } from "./modules/DocumentationAssessor.js";
|
|
10
10
|
import { ErrorHandlingAssessor } from "./modules/ErrorHandlingAssessor.js";
|
|
11
11
|
import { UsabilityAssessor } from "./modules/UsabilityAssessor.js";
|
|
12
|
-
// Extended assessment modules
|
|
13
|
-
import {
|
|
12
|
+
// Extended assessment modules - unified protocol compliance
|
|
13
|
+
import { ProtocolComplianceAssessor } from "./modules/ProtocolComplianceAssessor.js";
|
|
14
14
|
// New MCP Directory Compliance Gap assessors
|
|
15
15
|
import { AUPComplianceAssessor } from "./modules/AUPComplianceAssessor.js";
|
|
16
16
|
import { ToolAnnotationAssessor } from "./modules/ToolAnnotationAssessor.js";
|
|
@@ -23,133 +23,16 @@ import { TemporalAssessor } from "./modules/TemporalAssessor.js";
|
|
|
23
23
|
import { ResourceAssessor } from "./modules/ResourceAssessor.js";
|
|
24
24
|
import { PromptAssessor } from "./modules/PromptAssessor.js";
|
|
25
25
|
import { CrossCapabilitySecurityAssessor } from "./modules/CrossCapabilitySecurityAssessor.js";
|
|
26
|
-
//
|
|
27
|
-
import { ProtocolConformanceAssessor } from "./modules/ProtocolConformanceAssessor.js";
|
|
26
|
+
// Note: ProtocolConformanceAssessor merged into ProtocolComplianceAssessor (v1.25.2)
|
|
28
27
|
// Pattern configuration for tool annotation assessment
|
|
29
28
|
import { loadPatternConfig, compilePatterns, } from "./config/annotationPatterns.js";
|
|
30
29
|
// Claude Code integration for intelligent analysis
|
|
31
30
|
import { ClaudeCodeBridge, FULL_CLAUDE_CODE_CONFIG, } from "./lib/claudeCodeBridge.js";
|
|
32
31
|
import { TestDataGenerator } from "./TestDataGenerator.js";
|
|
33
|
-
// Import score calculation helpers from shared module
|
|
34
|
-
import { calculateModuleScore, normalizeModuleKey, INSPECTOR_VERSION, } from "../../lib/moduleScoring.js";
|
|
35
32
|
// Structured logging
|
|
36
33
|
import { createLogger, DEFAULT_LOGGING_CONFIG } from "./lib/logger.js";
|
|
37
|
-
//
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Emit module_started event and track start time for duration calculation.
|
|
41
|
-
* Emits JSONL to stderr with version field for consistent event structure.
|
|
42
|
-
*/
|
|
43
|
-
function emitModuleStartedEvent(moduleName, estimatedTests, toolCount) {
|
|
44
|
-
const moduleKey = normalizeModuleKey(moduleName);
|
|
45
|
-
moduleStartTimes.set(moduleKey, Date.now());
|
|
46
|
-
// Emit JSONL to stderr with version field
|
|
47
|
-
console.error(JSON.stringify({
|
|
48
|
-
event: "module_started",
|
|
49
|
-
module: moduleKey,
|
|
50
|
-
estimatedTests,
|
|
51
|
-
toolCount,
|
|
52
|
-
version: INSPECTOR_VERSION,
|
|
53
|
-
}));
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Emit module_complete event with score and duration.
|
|
57
|
-
* Uses shared score calculator for consistent scoring logic.
|
|
58
|
-
* For AUP module, includes enriched violation data for Claude analysis.
|
|
59
|
-
*/
|
|
60
|
-
function emitModuleProgress(moduleName, status, result, testsRun = 0) {
|
|
61
|
-
// Calculate score using shared helper
|
|
62
|
-
const score = calculateModuleScore(result);
|
|
63
|
-
// Don't emit events for skipped modules (null score means module wasn't run)
|
|
64
|
-
if (score === null)
|
|
65
|
-
return;
|
|
66
|
-
const moduleKey = normalizeModuleKey(moduleName);
|
|
67
|
-
// Calculate duration from module start time
|
|
68
|
-
const startTime = moduleStartTimes.get(moduleKey);
|
|
69
|
-
const duration = startTime ? Date.now() - startTime : 0;
|
|
70
|
-
moduleStartTimes.delete(moduleKey);
|
|
71
|
-
// Build base event
|
|
72
|
-
const event = {
|
|
73
|
-
event: "module_complete",
|
|
74
|
-
module: moduleKey,
|
|
75
|
-
status,
|
|
76
|
-
score,
|
|
77
|
-
testsRun,
|
|
78
|
-
duration,
|
|
79
|
-
version: INSPECTOR_VERSION,
|
|
80
|
-
};
|
|
81
|
-
// Add AUP enrichment when module is AUP
|
|
82
|
-
if (moduleKey === "aup" && result) {
|
|
83
|
-
const aupEnrichment = buildAUPEnrichment(result);
|
|
84
|
-
Object.assign(event, aupEnrichment);
|
|
85
|
-
}
|
|
86
|
-
// Emit JSONL to stderr with version field
|
|
87
|
-
console.error(JSON.stringify(event));
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Build AUP enrichment data from an AUP compliance assessment result.
|
|
91
|
-
* Samples violations prioritizing by severity (CRITICAL > HIGH > MEDIUM).
|
|
92
|
-
*/
|
|
93
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
94
|
-
function buildAUPEnrichment(aupResult, maxSamples = 10) {
|
|
95
|
-
const violations = aupResult.violations || [];
|
|
96
|
-
// Calculate metrics
|
|
97
|
-
const metrics = {
|
|
98
|
-
total: violations.length,
|
|
99
|
-
critical: violations.filter((v) => v.severity === "CRITICAL").length,
|
|
100
|
-
high: violations.filter((v) => v.severity === "HIGH")
|
|
101
|
-
.length,
|
|
102
|
-
medium: violations.filter((v) => v.severity === "MEDIUM").length,
|
|
103
|
-
byCategory: {},
|
|
104
|
-
};
|
|
105
|
-
// Count by category
|
|
106
|
-
for (const v of violations) {
|
|
107
|
-
metrics.byCategory[v.category] = (metrics.byCategory[v.category] || 0) + 1;
|
|
108
|
-
}
|
|
109
|
-
// Sample violations prioritizing by severity
|
|
110
|
-
const sampled = [];
|
|
111
|
-
const severityOrder = ["CRITICAL", "HIGH", "MEDIUM"];
|
|
112
|
-
for (const severity of severityOrder) {
|
|
113
|
-
if (sampled.length >= maxSamples)
|
|
114
|
-
break;
|
|
115
|
-
const bySeverity = violations.filter((v) => v.severity === severity);
|
|
116
|
-
for (const v of bySeverity) {
|
|
117
|
-
if (sampled.length >= maxSamples)
|
|
118
|
-
break;
|
|
119
|
-
sampled.push({
|
|
120
|
-
category: v.category,
|
|
121
|
-
categoryName: v.categoryName,
|
|
122
|
-
severity: v.severity,
|
|
123
|
-
matchedText: v.matchedText,
|
|
124
|
-
location: v.location,
|
|
125
|
-
confidence: v.confidence,
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
// Build sampling note
|
|
130
|
-
let samplingNote = "";
|
|
131
|
-
if (violations.length === 0) {
|
|
132
|
-
samplingNote = "No violations detected.";
|
|
133
|
-
}
|
|
134
|
-
else if (violations.length <= maxSamples) {
|
|
135
|
-
samplingNote = `All ${violations.length} violation(s) included.`;
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
samplingNote = `Sampled ${sampled.length} of ${violations.length} violations, prioritized by severity (CRITICAL > HIGH > MEDIUM).`;
|
|
139
|
-
}
|
|
140
|
-
return {
|
|
141
|
-
violationsSample: sampled,
|
|
142
|
-
samplingNote,
|
|
143
|
-
violationMetrics: metrics,
|
|
144
|
-
scannedLocations: aupResult.scannedLocations || {
|
|
145
|
-
toolNames: false,
|
|
146
|
-
toolDescriptions: false,
|
|
147
|
-
readme: false,
|
|
148
|
-
sourceCode: false,
|
|
149
|
-
},
|
|
150
|
-
highRiskDomains: (aupResult.highRiskDomains || []).slice(0, 10),
|
|
151
|
-
};
|
|
152
|
-
}
|
|
34
|
+
// Extracted helpers for testability
|
|
35
|
+
import { emitModuleStartedEvent, emitModuleProgress, determineOverallStatus, generateSummary, generateRecommendations, } from "./orchestratorHelpers.js";
|
|
153
36
|
export class AssessmentOrchestrator {
|
|
154
37
|
config;
|
|
155
38
|
logger;
|
|
@@ -164,8 +47,8 @@ export class AssessmentOrchestrator {
|
|
|
164
47
|
documentationAssessor;
|
|
165
48
|
errorHandlingAssessor;
|
|
166
49
|
usabilityAssessor;
|
|
167
|
-
// Extended assessors
|
|
168
|
-
|
|
50
|
+
// Extended assessors - unified protocol compliance
|
|
51
|
+
protocolComplianceAssessor;
|
|
169
52
|
// New MCP Directory Compliance Gap assessors
|
|
170
53
|
aupComplianceAssessor;
|
|
171
54
|
toolAnnotationAssessor;
|
|
@@ -178,12 +61,20 @@ export class AssessmentOrchestrator {
|
|
|
178
61
|
resourceAssessor;
|
|
179
62
|
promptAssessor;
|
|
180
63
|
crossCapabilityAssessor;
|
|
181
|
-
//
|
|
182
|
-
protocolConformanceAssessor;
|
|
64
|
+
// Note: protocolConformanceAssessor merged into protocolComplianceAssessor (v1.25.2)
|
|
183
65
|
constructor(config = {}) {
|
|
184
66
|
this.config = { ...DEFAULT_ASSESSMENT_CONFIG, ...config };
|
|
185
67
|
// Initialize logger
|
|
186
68
|
this.logger = createLogger("AssessmentOrchestrator", this.config.logging ?? DEFAULT_LOGGING_CONFIG);
|
|
69
|
+
// Emit deprecation warnings for deprecated config flags
|
|
70
|
+
if (this.config.assessmentCategories?.mcpSpecCompliance !== undefined) {
|
|
71
|
+
this.logger.warn("Config flag 'mcpSpecCompliance' is deprecated. Use 'protocolCompliance' instead. " +
|
|
72
|
+
"This flag will be removed in v2.0.0.", { flag: "mcpSpecCompliance", replacement: "protocolCompliance" });
|
|
73
|
+
}
|
|
74
|
+
if (this.config.assessmentCategories?.protocolConformance !== undefined) {
|
|
75
|
+
this.logger.warn("Config flag 'protocolConformance' is deprecated. Use 'protocolCompliance' instead. " +
|
|
76
|
+
"This flag will be removed in v2.0.0.", { flag: "protocolConformance", replacement: "protocolCompliance" });
|
|
77
|
+
}
|
|
187
78
|
// Initialize Claude Code Bridge if enabled in config
|
|
188
79
|
if (this.config.claudeCode?.enabled) {
|
|
189
80
|
this.initializeClaudeBridge(this.config.claudeCode);
|
|
@@ -206,8 +97,12 @@ export class AssessmentOrchestrator {
|
|
|
206
97
|
}
|
|
207
98
|
// Initialize extended assessors if enabled
|
|
208
99
|
if (this.config.enableExtendedAssessment) {
|
|
209
|
-
|
|
210
|
-
|
|
100
|
+
// Initialize unified protocol compliance assessor
|
|
101
|
+
// Supports new protocolCompliance flag and deprecated mcpSpecCompliance/protocolConformance
|
|
102
|
+
if (this.config.assessmentCategories?.protocolCompliance ||
|
|
103
|
+
this.config.assessmentCategories?.mcpSpecCompliance ||
|
|
104
|
+
this.config.assessmentCategories?.protocolConformance) {
|
|
105
|
+
this.protocolComplianceAssessor = new ProtocolComplianceAssessor(this.config);
|
|
211
106
|
}
|
|
212
107
|
// Initialize new MCP Directory Compliance Gap assessors
|
|
213
108
|
if (this.config.assessmentCategories?.aupCompliance) {
|
|
@@ -225,7 +120,7 @@ export class AssessmentOrchestrator {
|
|
|
225
120
|
}
|
|
226
121
|
// Load custom pattern configuration if provided
|
|
227
122
|
if (this.config.patternConfigPath) {
|
|
228
|
-
const patternConfig = loadPatternConfig(this.config.patternConfigPath);
|
|
123
|
+
const patternConfig = loadPatternConfig(this.config.patternConfigPath, this.logger);
|
|
229
124
|
const compiledPatterns = compilePatterns(patternConfig);
|
|
230
125
|
this.toolAnnotationAssessor.setPatterns(compiledPatterns);
|
|
231
126
|
}
|
|
@@ -255,15 +150,14 @@ export class AssessmentOrchestrator {
|
|
|
255
150
|
if (this.config.assessmentCategories?.crossCapability) {
|
|
256
151
|
this.crossCapabilityAssessor = new CrossCapabilitySecurityAssessor(this.config);
|
|
257
152
|
}
|
|
258
|
-
//
|
|
259
|
-
if (this.config.assessmentCategories?.protocolConformance) {
|
|
260
|
-
this.protocolConformanceAssessor = new ProtocolConformanceAssessor(this.config);
|
|
261
|
-
}
|
|
153
|
+
// Note: Protocol conformance now handled by unified ProtocolComplianceAssessor above
|
|
262
154
|
}
|
|
263
155
|
// Wire up Claude bridge to TestDataGenerator for intelligent test generation
|
|
264
156
|
if (this.claudeBridge) {
|
|
265
157
|
TestDataGenerator.setClaudeBridge(this.claudeBridge);
|
|
266
158
|
}
|
|
159
|
+
// Set logger for TestDataGenerator diagnostic output
|
|
160
|
+
TestDataGenerator.setLogger(this.logger);
|
|
267
161
|
}
|
|
268
162
|
/**
|
|
269
163
|
* Get the count of tools that will actually be tested based on selectedToolsForTesting config.
|
|
@@ -282,7 +176,7 @@ export class AssessmentOrchestrator {
|
|
|
282
176
|
*/
|
|
283
177
|
initializeClaudeBridge(bridgeConfig) {
|
|
284
178
|
try {
|
|
285
|
-
this.claudeBridge = new ClaudeCodeBridge(bridgeConfig);
|
|
179
|
+
this.claudeBridge = new ClaudeCodeBridge(bridgeConfig, this.logger);
|
|
286
180
|
this.claudeEnabled = true;
|
|
287
181
|
this.logger.info("Claude Code Bridge initialized", {
|
|
288
182
|
features: bridgeConfig.features,
|
|
@@ -338,8 +232,8 @@ export class AssessmentOrchestrator {
|
|
|
338
232
|
this.documentationAssessor?.resetTestCount();
|
|
339
233
|
this.errorHandlingAssessor?.resetTestCount();
|
|
340
234
|
this.usabilityAssessor?.resetTestCount();
|
|
341
|
-
if (this.
|
|
342
|
-
this.
|
|
235
|
+
if (this.protocolComplianceAssessor) {
|
|
236
|
+
this.protocolComplianceAssessor.resetTestCount();
|
|
343
237
|
}
|
|
344
238
|
// Reset new assessors
|
|
345
239
|
if (this.aupComplianceAssessor) {
|
|
@@ -427,11 +321,11 @@ export class AssessmentOrchestrator {
|
|
|
427
321
|
return (assessmentResults.usability = r);
|
|
428
322
|
}));
|
|
429
323
|
}
|
|
430
|
-
// Extended assessments
|
|
431
|
-
if (this.
|
|
432
|
-
emitModuleStartedEvent("
|
|
433
|
-
assessmentPromises.push(this.
|
|
434
|
-
emitModuleProgress("
|
|
324
|
+
// Extended assessments - unified protocol compliance
|
|
325
|
+
if (this.protocolComplianceAssessor) {
|
|
326
|
+
emitModuleStartedEvent("Protocol Compliance", 10, toolCount);
|
|
327
|
+
assessmentPromises.push(this.protocolComplianceAssessor.assess(context).then((r) => {
|
|
328
|
+
emitModuleProgress("Protocol Compliance", r.status, r, this.protocolComplianceAssessor.getTestCount());
|
|
435
329
|
return (assessmentResults.mcpSpecCompliance = r);
|
|
436
330
|
}));
|
|
437
331
|
}
|
|
@@ -507,14 +401,7 @@ export class AssessmentOrchestrator {
|
|
|
507
401
|
return (assessmentResults.crossCapability = r);
|
|
508
402
|
}));
|
|
509
403
|
}
|
|
510
|
-
// Protocol Conformance
|
|
511
|
-
if (this.protocolConformanceAssessor) {
|
|
512
|
-
emitModuleStartedEvent("Protocol-Conformance", 3, toolCount);
|
|
513
|
-
assessmentPromises.push(this.protocolConformanceAssessor.assess(context).then((r) => {
|
|
514
|
-
emitModuleProgress("Protocol-Conformance", r.status, r, this.protocolConformanceAssessor.getTestCount());
|
|
515
|
-
return (assessmentResults.protocolConformance = r);
|
|
516
|
-
}));
|
|
517
|
-
}
|
|
404
|
+
// Note: Protocol Conformance now handled by unified ProtocolComplianceAssessor above
|
|
518
405
|
await Promise.all(assessmentPromises);
|
|
519
406
|
}
|
|
520
407
|
else {
|
|
@@ -558,11 +445,11 @@ export class AssessmentOrchestrator {
|
|
|
558
445
|
await this.usabilityAssessor.assess(context);
|
|
559
446
|
emitModuleProgress("Usability", assessmentResults.usability.status, assessmentResults.usability, this.usabilityAssessor.getTestCount());
|
|
560
447
|
}
|
|
561
|
-
if (this.
|
|
562
|
-
emitModuleStartedEvent("
|
|
448
|
+
if (this.protocolComplianceAssessor) {
|
|
449
|
+
emitModuleStartedEvent("Protocol Compliance", 10, toolCount);
|
|
563
450
|
assessmentResults.mcpSpecCompliance =
|
|
564
|
-
await this.
|
|
565
|
-
emitModuleProgress("
|
|
451
|
+
await this.protocolComplianceAssessor.assess(context);
|
|
452
|
+
emitModuleProgress("Protocol Compliance", assessmentResults.mcpSpecCompliance.status, assessmentResults.mcpSpecCompliance, this.protocolComplianceAssessor.getTestCount());
|
|
566
453
|
}
|
|
567
454
|
// New MCP Directory Compliance Gap assessments (sequential)
|
|
568
455
|
if (this.aupComplianceAssessor) {
|
|
@@ -625,13 +512,7 @@ export class AssessmentOrchestrator {
|
|
|
625
512
|
await this.crossCapabilityAssessor.assess(context);
|
|
626
513
|
emitModuleProgress("Cross-Capability", assessmentResults.crossCapability.status, assessmentResults.crossCapability, this.crossCapabilityAssessor.getTestCount());
|
|
627
514
|
}
|
|
628
|
-
// Protocol Conformance
|
|
629
|
-
if (this.protocolConformanceAssessor) {
|
|
630
|
-
emitModuleStartedEvent("Protocol-Conformance", 3, toolCount);
|
|
631
|
-
assessmentResults.protocolConformance =
|
|
632
|
-
await this.protocolConformanceAssessor.assess(context);
|
|
633
|
-
emitModuleProgress("Protocol-Conformance", assessmentResults.protocolConformance.status, assessmentResults.protocolConformance, this.protocolConformanceAssessor.getTestCount());
|
|
634
|
-
}
|
|
515
|
+
// Note: Protocol Conformance now handled by unified ProtocolComplianceAssessor above
|
|
635
516
|
}
|
|
636
517
|
// Integrate temporal findings into security.vulnerabilities for unified view
|
|
637
518
|
if (assessmentResults.temporal?.rugPullsDetected &&
|
|
@@ -644,10 +525,10 @@ export class AssessmentOrchestrator {
|
|
|
644
525
|
// Collect test counts from all assessors
|
|
645
526
|
this.totalTestsRun = this.collectTotalTestCount();
|
|
646
527
|
// Determine overall status
|
|
647
|
-
const overallStatus =
|
|
528
|
+
const overallStatus = determineOverallStatus(assessmentResults);
|
|
648
529
|
// Generate summary and recommendations
|
|
649
|
-
const summary =
|
|
650
|
-
const recommendations =
|
|
530
|
+
const summary = generateSummary(assessmentResults);
|
|
531
|
+
const recommendations = generateRecommendations(assessmentResults);
|
|
651
532
|
const executionTime = Date.now() - this.startTime;
|
|
652
533
|
// Type assertion needed because Partial<MCPDirectoryAssessment> has optional required fields
|
|
653
534
|
// When modules are skipped via --skip-modules, not all fields will be present
|
|
@@ -694,7 +575,7 @@ export class AssessmentOrchestrator {
|
|
|
694
575
|
const documentationCount = this.documentationAssessor?.getTestCount() || 0;
|
|
695
576
|
const errorHandlingCount = this.errorHandlingAssessor?.getTestCount() || 0;
|
|
696
577
|
const usabilityCount = this.usabilityAssessor?.getTestCount() || 0;
|
|
697
|
-
const mcpSpecCount = this.
|
|
578
|
+
const mcpSpecCount = this.protocolComplianceAssessor?.getTestCount() || 0;
|
|
698
579
|
// New assessor counts
|
|
699
580
|
const aupCount = this.aupComplianceAssessor?.getTestCount() || 0;
|
|
700
581
|
const annotationCount = this.toolAnnotationAssessor?.getTestCount() || 0;
|
|
@@ -707,8 +588,7 @@ export class AssessmentOrchestrator {
|
|
|
707
588
|
const resourcesCount = this.resourceAssessor?.getTestCount() || 0;
|
|
708
589
|
const promptsCount = this.promptAssessor?.getTestCount() || 0;
|
|
709
590
|
const crossCapabilityCount = this.crossCapabilityAssessor?.getTestCount() || 0;
|
|
710
|
-
// Protocol conformance
|
|
711
|
-
const protocolConformanceCount = this.protocolConformanceAssessor?.getTestCount() || 0;
|
|
591
|
+
// Note: Protocol conformance now included in mcpSpecCount (unified ProtocolComplianceAssessor)
|
|
712
592
|
this.logger.debug("Test counts by assessor", {
|
|
713
593
|
functionality: functionalityCount,
|
|
714
594
|
security: securityCount,
|
|
@@ -726,7 +606,7 @@ export class AssessmentOrchestrator {
|
|
|
726
606
|
resources: resourcesCount,
|
|
727
607
|
prompts: promptsCount,
|
|
728
608
|
crossCapability: crossCapabilityCount,
|
|
729
|
-
|
|
609
|
+
// Note: protocolConformance now included in mcpSpec (unified)
|
|
730
610
|
});
|
|
731
611
|
total =
|
|
732
612
|
functionalityCount +
|
|
@@ -744,80 +624,11 @@ export class AssessmentOrchestrator {
|
|
|
744
624
|
temporalCount +
|
|
745
625
|
resourcesCount +
|
|
746
626
|
promptsCount +
|
|
747
|
-
crossCapabilityCount
|
|
748
|
-
|
|
627
|
+
crossCapabilityCount;
|
|
628
|
+
// Note: protocolConformance now included in mcpSpecCount (unified)
|
|
749
629
|
this.logger.debug("Total test count", { total });
|
|
750
630
|
return total;
|
|
751
631
|
}
|
|
752
|
-
determineOverallStatus(results) {
|
|
753
|
-
const statuses = [];
|
|
754
|
-
// Collect all statuses from assessment results
|
|
755
|
-
Object.values(results).forEach((assessment) => {
|
|
756
|
-
if (assessment &&
|
|
757
|
-
typeof assessment === "object" &&
|
|
758
|
-
"status" in assessment) {
|
|
759
|
-
statuses.push(assessment.status);
|
|
760
|
-
}
|
|
761
|
-
});
|
|
762
|
-
// If any critical category fails, overall fails
|
|
763
|
-
if (statuses.includes("FAIL"))
|
|
764
|
-
return "FAIL";
|
|
765
|
-
// If any category needs more info, overall needs more info
|
|
766
|
-
if (statuses.includes("NEED_MORE_INFO"))
|
|
767
|
-
return "NEED_MORE_INFO";
|
|
768
|
-
// All must pass for overall pass
|
|
769
|
-
return "PASS";
|
|
770
|
-
}
|
|
771
|
-
generateSummary(results) {
|
|
772
|
-
const parts = [];
|
|
773
|
-
const totalCategories = Object.keys(results).length;
|
|
774
|
-
const passedCategories = Object.values(results).filter((r) => r?.status === "PASS").length;
|
|
775
|
-
parts.push(`Assessment complete: ${passedCategories}/${totalCategories} categories passed.`);
|
|
776
|
-
// Add key findings
|
|
777
|
-
if (results.security?.vulnerabilities?.length > 0) {
|
|
778
|
-
parts.push(`Found ${results.security.vulnerabilities.length} security vulnerabilities.`);
|
|
779
|
-
}
|
|
780
|
-
if (results.functionality?.brokenTools?.length > 0) {
|
|
781
|
-
parts.push(`${results.functionality.brokenTools.length} tools are not functioning correctly.`);
|
|
782
|
-
}
|
|
783
|
-
// New assessor findings
|
|
784
|
-
if (results.aupCompliance?.violations?.length > 0) {
|
|
785
|
-
const criticalCount = results.aupCompliance.violations.filter((v) => v.severity === "CRITICAL").length;
|
|
786
|
-
if (criticalCount > 0) {
|
|
787
|
-
parts.push(`CRITICAL: ${criticalCount} AUP violation(s) detected.`);
|
|
788
|
-
}
|
|
789
|
-
else {
|
|
790
|
-
parts.push(`${results.aupCompliance.violations.length} AUP item(s) flagged for review.`);
|
|
791
|
-
}
|
|
792
|
-
}
|
|
793
|
-
if (results.toolAnnotations?.missingAnnotationsCount > 0) {
|
|
794
|
-
parts.push(`${results.toolAnnotations.missingAnnotationsCount} tools missing annotations.`);
|
|
795
|
-
}
|
|
796
|
-
if (results.prohibitedLibraries?.matches?.length > 0) {
|
|
797
|
-
const blockingCount = results.prohibitedLibraries.matches.filter((m) => m.severity === "BLOCKING").length;
|
|
798
|
-
if (blockingCount > 0) {
|
|
799
|
-
parts.push(`BLOCKING: ${blockingCount} prohibited library/libraries detected.`);
|
|
800
|
-
}
|
|
801
|
-
}
|
|
802
|
-
if (results.portability?.usesBundleRoot) {
|
|
803
|
-
parts.push("Uses ${BUNDLE_ROOT} anti-pattern.");
|
|
804
|
-
}
|
|
805
|
-
return parts.join(" ");
|
|
806
|
-
}
|
|
807
|
-
generateRecommendations(results) {
|
|
808
|
-
const recommendations = [];
|
|
809
|
-
// Aggregate recommendations from all assessments
|
|
810
|
-
Object.values(results).forEach((assessment) => {
|
|
811
|
-
if (assessment &&
|
|
812
|
-
typeof assessment === "object" &&
|
|
813
|
-
"recommendations" in assessment &&
|
|
814
|
-
Array.isArray(assessment.recommendations)) {
|
|
815
|
-
recommendations.push(...assessment.recommendations);
|
|
816
|
-
}
|
|
817
|
-
});
|
|
818
|
-
// De-duplicate and prioritize
|
|
819
|
-
return [...new Set(recommendations)].slice(0, 10);
|
|
820
|
-
}
|
|
821
632
|
/**
|
|
822
633
|
* Get assessment configuration
|
|
823
634
|
*/
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
9
9
|
import type { ClaudeCodeBridge } from "./lib/claudeCodeBridge.js";
|
|
10
|
+
import type { Logger } from "./lib/logger.js";
|
|
11
|
+
import { JSONSchema7 } from "../../lib/assessmentTypes.js";
|
|
10
12
|
export interface TestScenario {
|
|
11
13
|
name: string;
|
|
12
14
|
description: string;
|
|
@@ -17,11 +19,17 @@ export interface TestScenario {
|
|
|
17
19
|
}
|
|
18
20
|
export declare class TestDataGenerator {
|
|
19
21
|
private static claudeBridge;
|
|
22
|
+
private static logger;
|
|
20
23
|
/**
|
|
21
24
|
* Set the Claude Code bridge for intelligent test generation
|
|
22
25
|
* Call this once during initialization if Claude integration is enabled
|
|
23
26
|
*/
|
|
24
27
|
static setClaudeBridge(bridge: ClaudeCodeBridge | null): void;
|
|
28
|
+
/**
|
|
29
|
+
* Set the logger for diagnostic output
|
|
30
|
+
* Call this once during initialization
|
|
31
|
+
*/
|
|
32
|
+
static setLogger(logger: Logger | null): void;
|
|
25
33
|
/**
|
|
26
34
|
* Check if Claude Code integration is available and enabled
|
|
27
35
|
*/
|
|
@@ -77,7 +85,7 @@ export declare class TestDataGenerator {
|
|
|
77
85
|
/**
|
|
78
86
|
* Generate a single realistic value for backward compatibility
|
|
79
87
|
*/
|
|
80
|
-
static generateSingleValue(fieldName: string, schema:
|
|
88
|
+
static generateSingleValue(fieldName: string, schema: JSONSchema7): unknown;
|
|
81
89
|
/**
|
|
82
90
|
* Generate value from JSON schema definition
|
|
83
91
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestDataGenerator.d.ts","sourceRoot":"","sources":["../../../src/services/assessment/TestDataGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"TestDataGenerator.d.ts","sourceRoot":"","sources":["../../../src/services/assessment/TestDataGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,YAAY,GAAG,WAAW,GAAG,UAAU,GAAG,YAAY,CAAC;IACjE,MAAM,CAAC,EAAE,cAAc,GAAG,kBAAkB,CAAC;CAC9C;AAED,qBAAa,iBAAiB;IAE5B,OAAO,CAAC,MAAM,CAAC,YAAY,CAAiC;IAE5D,OAAO,CAAC,MAAM,CAAC,MAAM,CAAuB;IAE5C;;;OAGG;IACH,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,GAAG,IAAI;IAI7D;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAI7C;;OAEG;IACH,MAAM,CAAC,eAAe,IAAI,OAAO;IAOjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CA2FpC;IAEF;;;;OAIG;IACH,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,YAAY,EAAE;IAoBxD;;;OAGG;WACU,0BAA0B,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAmD5E;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAWpC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAaxC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAYxC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAwCxC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IA2FxC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAgDpC;;OAEG;WACW,uBAAuB,CACnC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GACnD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAoB1B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAkTrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAgB9B;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO;IAI3E;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAsDtC;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAwBxE;IAEJ;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAe7C;IAEF;;;;;;;;;;OAUG;IACH,MAAM,CAAC,wBAAwB,CAC7B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,EAAE,MAAM,GACf,OAAO;CAoBX"}
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
export class TestDataGenerator {
|
|
9
9
|
// Optional Claude Code bridge for intelligent test generation
|
|
10
10
|
static claudeBridge = null;
|
|
11
|
+
// Optional logger for diagnostic output
|
|
12
|
+
static logger = null;
|
|
11
13
|
/**
|
|
12
14
|
* Set the Claude Code bridge for intelligent test generation
|
|
13
15
|
* Call this once during initialization if Claude integration is enabled
|
|
@@ -15,6 +17,13 @@ export class TestDataGenerator {
|
|
|
15
17
|
static setClaudeBridge(bridge) {
|
|
16
18
|
this.claudeBridge = bridge;
|
|
17
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Set the logger for diagnostic output
|
|
22
|
+
* Call this once during initialization
|
|
23
|
+
*/
|
|
24
|
+
static setLogger(logger) {
|
|
25
|
+
this.logger = logger;
|
|
26
|
+
}
|
|
18
27
|
/**
|
|
19
28
|
* Check if Claude Code integration is available and enabled
|
|
20
29
|
*/
|
|
@@ -144,7 +153,9 @@ export class TestDataGenerator {
|
|
|
144
153
|
try {
|
|
145
154
|
const claudeParams = await this.claudeBridge.generateTestParameters(tool);
|
|
146
155
|
if (claudeParams && claudeParams.length > 0) {
|
|
147
|
-
|
|
156
|
+
this.logger?.info("Using Claude-generated params", {
|
|
157
|
+
toolName: tool.name,
|
|
158
|
+
});
|
|
148
159
|
// Convert Claude params to TestScenario format
|
|
149
160
|
const claudeScenarios = claudeParams.map((params, index) => ({
|
|
150
161
|
name: this.getClaudeScenarioName(index),
|
|
@@ -163,7 +174,10 @@ export class TestDataGenerator {
|
|
|
163
174
|
}
|
|
164
175
|
}
|
|
165
176
|
catch (error) {
|
|
166
|
-
|
|
177
|
+
this.logger?.warn("Claude generation failed, falling back to schema-based", {
|
|
178
|
+
toolName: tool.name,
|
|
179
|
+
error: String(error),
|
|
180
|
+
});
|
|
167
181
|
}
|
|
168
182
|
}
|
|
169
183
|
// Fall back to schema-based generation
|
|
@@ -539,7 +553,10 @@ export class TestDataGenerator {
|
|
|
539
553
|
lowerFieldName.includes("documents");
|
|
540
554
|
if (isMutationField && schema.items) {
|
|
541
555
|
// Generate one minimal item even for "empty" variant
|
|
542
|
-
const
|
|
556
|
+
const itemSchema = Array.isArray(schema.items)
|
|
557
|
+
? schema.items[0]
|
|
558
|
+
: schema.items;
|
|
559
|
+
const item = this.generateValueFromSchema(itemSchema, "empty");
|
|
543
560
|
return [item];
|
|
544
561
|
}
|
|
545
562
|
return [];
|
|
@@ -548,9 +565,12 @@ export class TestDataGenerator {
|
|
|
548
565
|
// Generate multiple items
|
|
549
566
|
const count = 10;
|
|
550
567
|
if (schema.items) {
|
|
568
|
+
const itemSchema = Array.isArray(schema.items)
|
|
569
|
+
? schema.items[0]
|
|
570
|
+
: schema.items;
|
|
551
571
|
return Array(count)
|
|
552
572
|
.fill(0)
|
|
553
|
-
.map(() => this.generateValueFromSchema(
|
|
573
|
+
.map(() => this.generateValueFromSchema(itemSchema, variant));
|
|
554
574
|
}
|
|
555
575
|
return Array(count)
|
|
556
576
|
.fill(0)
|
|
@@ -559,7 +579,10 @@ export class TestDataGenerator {
|
|
|
559
579
|
// Typical variant - generate realistic array
|
|
560
580
|
if (schema.items) {
|
|
561
581
|
// Generate 1-2 items based on schema.items
|
|
562
|
-
const
|
|
582
|
+
const itemSchema = Array.isArray(schema.items)
|
|
583
|
+
? schema.items[0]
|
|
584
|
+
: schema.items;
|
|
585
|
+
const item = this.generateValueFromSchema(itemSchema, variant);
|
|
563
586
|
return [item];
|
|
564
587
|
}
|
|
565
588
|
// Context-aware array generation (fallback for simple arrays without schema.items)
|
|
@@ -650,7 +673,10 @@ export class TestDataGenerator {
|
|
|
650
673
|
}
|
|
651
674
|
case "array":
|
|
652
675
|
if (schema.items) {
|
|
653
|
-
const
|
|
676
|
+
const itemSchema = Array.isArray(schema.items)
|
|
677
|
+
? schema.items[0]
|
|
678
|
+
: schema.items;
|
|
679
|
+
const item = this.generateValueFromSchema(itemSchema, variant);
|
|
654
680
|
return [item];
|
|
655
681
|
}
|
|
656
682
|
return [];
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { Tool, CompatibilityCallToolResult } from "@modelcontextprotocol/sdk/types.js";
|
|
6
6
|
import { TestScenario } from "./TestDataGenerator.js";
|
|
7
7
|
import { ValidationResult } from "./ResponseValidator.js";
|
|
8
|
+
import { PerformanceConfig } from "./config/performanceConfig.js";
|
|
8
9
|
export interface ScenarioTestResult {
|
|
9
10
|
scenario: TestScenario;
|
|
10
11
|
executed: boolean;
|
|
@@ -42,7 +43,14 @@ export interface ComprehensiveToolTestResult {
|
|
|
42
43
|
export declare class TestScenarioEngine {
|
|
43
44
|
private testTimeout;
|
|
44
45
|
private delayBetweenTests;
|
|
45
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Create a new TestScenarioEngine.
|
|
48
|
+
*
|
|
49
|
+
* @param testTimeout - Timeout for each test in milliseconds (default from PerformanceConfig)
|
|
50
|
+
* @param delayBetweenTests - Delay between tests for rate limiting (default: 0)
|
|
51
|
+
* @param performanceConfig - Optional performance configuration for centralized tuning
|
|
52
|
+
*/
|
|
53
|
+
constructor(testTimeout?: number, delayBetweenTests?: number, performanceConfig?: Partial<PerformanceConfig>);
|
|
46
54
|
/**
|
|
47
55
|
* Sleep for specified milliseconds (for rate limiting)
|
|
48
56
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestScenarioEngine.d.ts","sourceRoot":"","sources":["../../../src/services/assessment/TestScenarioEngine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,IAAI,EACJ,2BAA2B,EAC5B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAqB,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAEL,gBAAgB,EAEjB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"TestScenarioEngine.d.ts","sourceRoot":"","sources":["../../../src/services/assessment/TestScenarioEngine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,IAAI,EACJ,2BAA2B,EAC5B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAqB,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAEL,gBAAgB,EAEjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,iBAAiB,EAElB,MAAM,4BAA4B,CAAC;AAGpC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,2BAA2B,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,gBAAgB,CAAC;CAC9B;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EACT,eAAe,GACf,mBAAmB,GACnB,mBAAmB,GACnB,QAAQ,GACR,UAAU,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,kBAAkB,EAAE,CAAC;IACtC,OAAO,EAAE;QACP,gBAAgB,EAAE,OAAO,CAAC;QAC1B,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;QACvB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,eAAe,EAAE,MAAM,CAAC;QACxB,kBAAkB,EAAE,OAAO,CAAC;KAC7B,CAAC;IAGF,qBAAqB,CAAC,EAAE;QACtB,YAAY,EAAE,OAAO,CAAC;QACtB,WAAW,EAAE,OAAO,CAAC;QACrB,YAAY,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;KAC9C,CAAC;IACF,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,iBAAiB,CAAS;IAElC;;;;;;OAMG;gBAED,WAAW,CAAC,EAAE,MAAM,EACpB,iBAAiB,GAAE,MAAU,EAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAShD;;OAEG;YACW,KAAK;IAInB;;OAEG;IACG,yBAAyB,CAC7B,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,CACR,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,OAAO,CAAC,2BAA2B,CAAC,GACxC,OAAO,CAAC,2BAA2B,CAAC,uBAAuB,CAAC,CAAC;IAoEhE;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuB5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;OAEG;IACG,uBAAuB,CAC3B,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,CACR,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,OAAO,CAAC,2BAA2B,CAAC,GACxC,OAAO,CAAC,2BAA2B,CAAC;IAiGvC;;OAEG;YACW,eAAe;IAwE7B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAoD9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuC3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAoK/B;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,2BAA2B,GAAG,MAAM;CAsD3E"}
|