framework-mcp 1.3.6 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/mcp-developer.md +41 -0
- package/.claude/agents/project-orchestrator.md +43 -0
- package/.claude/agents/version-consistency-reviewer.md +50 -0
- package/COPILOT_INTEGRATION.md +49 -62
- package/DEPLOYMENT_GUIDE.md +48 -49
- package/MCP_INTEGRATION_GUIDE.md +96 -129
- package/MIGRATION_GUIDE_v1.4.0.md +190 -0
- package/README.md +149 -173
- package/RELEASE_NOTES_v1.3.7.md +275 -0
- package/RELEASE_NOTES_v1.4.0.md +178 -0
- package/SAFEGUARDS_VERIFICATION_LOG.md +157 -0
- package/dist/core/safeguard-manager.d.ts.map +1 -1
- package/dist/core/safeguard-manager.js +747 -1191
- package/dist/core/safeguard-manager.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/interfaces/http/http-server.d.ts +0 -4
- package/dist/interfaces/http/http-server.d.ts.map +1 -1
- package/dist/interfaces/http/http-server.js +6 -113
- package/dist/interfaces/http/http-server.js.map +1 -1
- package/dist/interfaces/mcp/mcp-server.d.ts +0 -5
- package/dist/interfaces/mcp/mcp-server.d.ts.map +1 -1
- package/dist/interfaces/mcp/mcp-server.js +4 -120
- package/dist/interfaces/mcp/mcp-server.js.map +1 -1
- package/dist/shared/types.d.ts +0 -37
- package/dist/shared/types.d.ts.map +1 -1
- package/examples/example-usage.md +43 -38
- package/examples/llm-analysis-patterns.md +553 -0
- package/package.json +2 -3
- package/scripts/validate-documentation.sh +4 -4
- package/src/core/safeguard-manager.ts +729 -1173
- package/src/index.ts +1 -2
- package/src/interfaces/http/http-server.ts +6 -139
- package/src/interfaces/mcp/mcp-server.ts +4 -145
- package/src/shared/types.ts +0 -40
- package/swagger.json +64 -313
- package/dist/core/capability-analyzer.d.ts +0 -29
- package/dist/core/capability-analyzer.d.ts.map +0 -1
- package/dist/core/capability-analyzer.js +0 -568
- package/dist/core/capability-analyzer.js.map +0 -1
- package/src/core/capability-analyzer.ts +0 -708
|
@@ -1,568 +0,0 @@
|
|
|
1
|
-
// Domain-specific validation mapping
|
|
2
|
-
const SAFEGUARD_DOMAIN_REQUIREMENTS = {
|
|
3
|
-
"1.1": {
|
|
4
|
-
domain: "Asset Inventory",
|
|
5
|
-
required_tool_types: ["inventory", "asset_management", "cmdb", "discovery"],
|
|
6
|
-
description: "Only asset inventory and discovery tools can provide FULL/PARTIAL implementation capability"
|
|
7
|
-
},
|
|
8
|
-
"1.2": {
|
|
9
|
-
domain: "Asset Management",
|
|
10
|
-
required_tool_types: ["inventory", "asset_management", "network_security", "nac"],
|
|
11
|
-
description: "Asset management or network access control tools required for FULL/PARTIAL implementation capability"
|
|
12
|
-
},
|
|
13
|
-
"5.1": {
|
|
14
|
-
domain: "Account Management",
|
|
15
|
-
required_tool_types: ["identity_management", "iam", "directory", "account_management"],
|
|
16
|
-
description: "Identity and account management tools required for FULL/PARTIAL implementation capability"
|
|
17
|
-
},
|
|
18
|
-
"6.3": {
|
|
19
|
-
domain: "Authentication",
|
|
20
|
-
required_tool_types: ["mfa", "authentication", "identity_management", "iam"],
|
|
21
|
-
description: "Multi-factor authentication and identity tools required for FULL/PARTIAL implementation capability"
|
|
22
|
-
},
|
|
23
|
-
"7.1": {
|
|
24
|
-
domain: "Vulnerability Management",
|
|
25
|
-
required_tool_types: ["vulnerability_management", "vulnerability_scanner", "patch_management"],
|
|
26
|
-
description: "Vulnerability management and scanning tools required for FULL/PARTIAL implementation capability"
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
// Tool type detection weights for enhanced accuracy
|
|
30
|
-
const TOOL_TYPE_DETECTION_WEIGHTS = {
|
|
31
|
-
inventory: {
|
|
32
|
-
keywords: ['inventory', 'asset discovery', 'device enumeration', 'cmdb', 'configuration management database'],
|
|
33
|
-
baseWeight: 3,
|
|
34
|
-
contextBonuses: ['asset', 'device', 'hardware', 'software', 'endpoint']
|
|
35
|
-
},
|
|
36
|
-
asset_management: {
|
|
37
|
-
keywords: ['asset management', 'asset tracking', 'asset lifecycle', 'asset monitoring'],
|
|
38
|
-
baseWeight: 3,
|
|
39
|
-
contextBonuses: ['lifecycle', 'tracking', 'monitoring', 'management']
|
|
40
|
-
},
|
|
41
|
-
identity_management: {
|
|
42
|
-
keywords: ['identity', 'iam', 'identity management', 'user management', 'directory'],
|
|
43
|
-
baseWeight: 3,
|
|
44
|
-
contextBonuses: ['user', 'account', 'authentication', 'authorization', 'ldap', 'active directory']
|
|
45
|
-
},
|
|
46
|
-
vulnerability_management: {
|
|
47
|
-
keywords: ['vulnerability', 'vuln', 'security scanning', 'penetration testing', 'patch management'],
|
|
48
|
-
baseWeight: 3,
|
|
49
|
-
contextBonuses: ['scan', 'test', 'patch', 'remediation', 'cve']
|
|
50
|
-
},
|
|
51
|
-
threat_intelligence: {
|
|
52
|
-
keywords: ['threat intelligence', 'threat feeds', 'ioc', 'indicators', 'threat data'],
|
|
53
|
-
baseWeight: 2,
|
|
54
|
-
contextBonuses: ['intelligence', 'feeds', 'indicators', 'malware', 'threat']
|
|
55
|
-
},
|
|
56
|
-
governance: {
|
|
57
|
-
keywords: ['grc', 'governance', 'compliance management', 'policy management', 'risk management'],
|
|
58
|
-
baseWeight: 2,
|
|
59
|
-
contextBonuses: ['policy', 'compliance', 'governance', 'risk', 'audit']
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
export class CapabilityAnalyzer {
|
|
63
|
-
constructor() {
|
|
64
|
-
this.cache = new Map();
|
|
65
|
-
this.performanceMetrics = {
|
|
66
|
-
uptime: Date.now(),
|
|
67
|
-
totalRequests: 0,
|
|
68
|
-
errorCount: 0,
|
|
69
|
-
requestCounts: new Map(),
|
|
70
|
-
executionTimes: new Map(),
|
|
71
|
-
lastStatsLog: Date.now()
|
|
72
|
-
};
|
|
73
|
-
// Set up periodic cache cleanup
|
|
74
|
-
setInterval(() => {
|
|
75
|
-
this.cleanupExpiredCache();
|
|
76
|
-
}, 10 * 60 * 1000); // Every 10 minutes
|
|
77
|
-
}
|
|
78
|
-
performCapabilityAnalysis(vendorName, safeguard, responseText) {
|
|
79
|
-
const startTime = Date.now();
|
|
80
|
-
try {
|
|
81
|
-
this.performanceMetrics.totalRequests++;
|
|
82
|
-
const text = responseText.toLowerCase();
|
|
83
|
-
// Step 1: Determine what type of capability this tool is claiming
|
|
84
|
-
const claimedCapability = this.determineClaimedCapability(text, safeguard);
|
|
85
|
-
// Step 2: Assess how well the tool executes that specific capability type
|
|
86
|
-
const qualityAssessment = this.assessCapabilityQuality(text, safeguard, claimedCapability);
|
|
87
|
-
// Step 3: Generate capability-focused analysis
|
|
88
|
-
const result = this.generateCapabilityAnalysis(vendorName, safeguard, responseText, claimedCapability, qualityAssessment);
|
|
89
|
-
// Record performance metrics
|
|
90
|
-
this.recordToolExecution('performCapabilityAnalysis', Date.now() - startTime);
|
|
91
|
-
return result;
|
|
92
|
-
}
|
|
93
|
-
catch (error) {
|
|
94
|
-
this.performanceMetrics.errorCount++;
|
|
95
|
-
this.recordToolExecution('performCapabilityAnalysis_error', Date.now() - startTime);
|
|
96
|
-
throw error;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
validateVendorMapping(vendorName, safeguardId, claimedCapability, supportingText, safeguard) {
|
|
100
|
-
const startTime = Date.now();
|
|
101
|
-
try {
|
|
102
|
-
this.performanceMetrics.totalRequests++;
|
|
103
|
-
const text = supportingText.toLowerCase();
|
|
104
|
-
// Detect tool type and validate domain match
|
|
105
|
-
const detectedToolType = this.detectToolType(supportingText, safeguard.id);
|
|
106
|
-
const domainValidation = this.validateDomainMatch(safeguard.id, claimedCapability, detectedToolType);
|
|
107
|
-
// Adjust capability if domain mismatch detected
|
|
108
|
-
let effectiveCapability = claimedCapability;
|
|
109
|
-
let originalClaim;
|
|
110
|
-
if (domainValidation.should_adjust_capability) {
|
|
111
|
-
originalClaim = claimedCapability;
|
|
112
|
-
effectiveCapability = domainValidation.adjusted_capability;
|
|
113
|
-
}
|
|
114
|
-
// Perform capability-focused analysis of the supporting text
|
|
115
|
-
const actualAnalysis = this.performCapabilityAnalysis(vendorName, safeguard, supportingText);
|
|
116
|
-
// Validate claimed capability against actual capability analysis and domain requirements
|
|
117
|
-
const validation = this.assessCapabilityClaimAlignment(claimedCapability, effectiveCapability, actualAnalysis, domainValidation, text);
|
|
118
|
-
// Add domain validation gaps if capability was adjusted
|
|
119
|
-
if (domainValidation.should_adjust_capability) {
|
|
120
|
-
validation.gaps.unshift(`Domain mismatch: ${domainValidation.reasoning}`);
|
|
121
|
-
validation.recommendations.unshift(`Correct capability mapping should be '${effectiveCapability.toUpperCase()}' for ${detectedToolType} tools`);
|
|
122
|
-
// Reduce confidence for domain mismatches
|
|
123
|
-
validation.confidence = Math.max(validation.confidence - 20, 0);
|
|
124
|
-
}
|
|
125
|
-
const result = {
|
|
126
|
-
vendor: vendorName,
|
|
127
|
-
safeguard_id: safeguard.id,
|
|
128
|
-
safeguard_title: safeguard.title,
|
|
129
|
-
claimed_capability: claimedCapability,
|
|
130
|
-
validation_status: validation.status,
|
|
131
|
-
confidence_score: validation.confidence,
|
|
132
|
-
evidence_analysis: {
|
|
133
|
-
core_requirements_coverage: validation.core_requirements_coverage || 0,
|
|
134
|
-
sub_elements_coverage: validation.sub_elements_coverage || 0,
|
|
135
|
-
governance_alignment: validation.governance_alignment || 0,
|
|
136
|
-
language_consistency: validation.language_consistency || 0
|
|
137
|
-
},
|
|
138
|
-
domain_validation: {
|
|
139
|
-
required_tool_type: domainValidation.required_tool_types.join('/'),
|
|
140
|
-
detected_tool_type: detectedToolType,
|
|
141
|
-
domain_match: domainValidation.domain_match,
|
|
142
|
-
capability_adjusted: domainValidation.should_adjust_capability,
|
|
143
|
-
original_claim: originalClaim
|
|
144
|
-
},
|
|
145
|
-
gaps_identified: validation.gaps,
|
|
146
|
-
strengths_identified: validation.strengths,
|
|
147
|
-
recommendations: validation.recommendations,
|
|
148
|
-
detailed_feedback: validation.feedback
|
|
149
|
-
};
|
|
150
|
-
// Record performance metrics
|
|
151
|
-
this.recordToolExecution('validateVendorMapping', Date.now() - startTime);
|
|
152
|
-
return result;
|
|
153
|
-
}
|
|
154
|
-
catch (error) {
|
|
155
|
-
this.performanceMetrics.errorCount++;
|
|
156
|
-
this.recordToolExecution('validateVendorMapping_error', Date.now() - startTime);
|
|
157
|
-
throw error;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
determineClaimedCapability(text, safeguard) {
|
|
161
|
-
// Capability detection keywords - focused on what the tool DOES, not what elements it covers
|
|
162
|
-
const governanceIndicators = [
|
|
163
|
-
'policy', 'policies', 'manage', 'process', 'workflow', 'governance', 'grc',
|
|
164
|
-
'compliance management', 'documented', 'establish', 'maintain', 'procedure',
|
|
165
|
-
'control', 'controls', 'framework', 'standard', 'enterprise risk management',
|
|
166
|
-
'centralized management', 'oversight'
|
|
167
|
-
];
|
|
168
|
-
const facilitatesIndicators = [
|
|
169
|
-
'improve', 'enhance', 'optimize', 'faster', 'better', 'stronger', 'automate',
|
|
170
|
-
'streamline', 'efficiency', 'facilitate', 'support', 'enable', 'accelerate',
|
|
171
|
-
'api', 'integration', 'data', 'export', 'import', 'sync', 'feed',
|
|
172
|
-
'provides data', 'data source', 'data feeds', 'enrichment', 'data enrichment',
|
|
173
|
-
'supplemental data', 'additional data', 'contextual data', 'threat data',
|
|
174
|
-
'intelligence feeds', 'data aggregation', 'data collection', 'data gathering',
|
|
175
|
-
'feeds data', 'populates', 'informs', 'enriches', 'supplements',
|
|
176
|
-
'enables compliance', 'facilitates implementation', 'supports compliance',
|
|
177
|
-
'creates framework', 'enables organizations', 'infrastructure', 'foundation',
|
|
178
|
-
'template', 'templates', 'workflow automation', 'orchestration'
|
|
179
|
-
];
|
|
180
|
-
const validatesIndicators = [
|
|
181
|
-
'audit', 'report', 'evidence', 'verify', 'validate', 'check', 'monitor',
|
|
182
|
-
'compliance', 'compliance report', 'assessment', 'logging', 'tracking', 'review', 'attest',
|
|
183
|
-
'dashboard', 'metrics', 'analytics', 'visibility', 'alert', 'attestation',
|
|
184
|
-
'compliance tracking', 'audit trail', 'reporting capabilities', 'audit capabilities'
|
|
185
|
-
];
|
|
186
|
-
// Direct implementation indicators (tools that actually perform the safeguard)
|
|
187
|
-
const implementationIndicators = this.getImplementationIndicators(safeguard.id);
|
|
188
|
-
// Calculate keyword presence scores
|
|
189
|
-
const governanceScore = this.calculateKeywordScore(text, governanceIndicators);
|
|
190
|
-
const facilitatesScore = this.calculateKeywordScore(text, facilitatesIndicators);
|
|
191
|
-
const validatesScore = this.calculateKeywordScore(text, validatesIndicators);
|
|
192
|
-
const implementationScore = this.calculateKeywordScore(text, implementationIndicators);
|
|
193
|
-
// Determine claimed capability based on strongest indicators and patterns
|
|
194
|
-
if (implementationScore > 0.2 && implementationScore >= Math.max(facilitatesScore, governanceScore, validatesScore)) {
|
|
195
|
-
// Tool claims to directly implement the safeguard
|
|
196
|
-
return implementationScore > 0.5 ? 'full' : 'partial';
|
|
197
|
-
}
|
|
198
|
-
else if (governanceScore > 0.2 && governanceScore >= Math.max(facilitatesScore, validatesScore)) {
|
|
199
|
-
return 'governance';
|
|
200
|
-
}
|
|
201
|
-
else if (validatesScore > 0.2 && validatesScore >= facilitatesScore) {
|
|
202
|
-
return 'validates';
|
|
203
|
-
}
|
|
204
|
-
else {
|
|
205
|
-
return 'facilitates';
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
getImplementationIndicators(safeguardId) {
|
|
209
|
-
// Return specific indicators for what constitutes direct implementation for each safeguard
|
|
210
|
-
const implementationMap = {
|
|
211
|
-
"1.1": ['inventory', 'discovery', 'asset management', 'catalog', 'enumerate', 'scan devices', 'device database'],
|
|
212
|
-
"1.2": ['unauthorized', 'rogue', 'detect', 'identify unauthorized', 'quarantine', 'block unauthorized'],
|
|
213
|
-
"5.1": ['account inventory', 'user management', 'identity management', 'account lifecycle', 'user provisioning'],
|
|
214
|
-
"6.3": ['multi-factor', 'mfa', '2fa', 'authentication', 'two-factor', 'multi-factor authentication'],
|
|
215
|
-
"7.1": ['vulnerability', 'vuln', 'scanning', 'vulnerability management', 'security testing', 'penetration testing']
|
|
216
|
-
};
|
|
217
|
-
return implementationMap[safeguardId] || [];
|
|
218
|
-
}
|
|
219
|
-
assessCapabilityQuality(text, safeguard, claimedCapability) {
|
|
220
|
-
// Assess how well the tool executes the claimed capability type
|
|
221
|
-
const evidence = [];
|
|
222
|
-
const gaps = [];
|
|
223
|
-
// Quality assessment based on capability type
|
|
224
|
-
let qualityScore = 0;
|
|
225
|
-
switch (claimedCapability) {
|
|
226
|
-
case 'full':
|
|
227
|
-
case 'partial':
|
|
228
|
-
qualityScore = this.assessImplementationQuality(text, safeguard, evidence, gaps);
|
|
229
|
-
break;
|
|
230
|
-
case 'facilitates':
|
|
231
|
-
qualityScore = this.assessFacilitationQuality(text, evidence, gaps);
|
|
232
|
-
break;
|
|
233
|
-
case 'governance':
|
|
234
|
-
qualityScore = this.assessGovernanceQuality(text, evidence, gaps);
|
|
235
|
-
break;
|
|
236
|
-
case 'validates':
|
|
237
|
-
qualityScore = this.assessValidationQuality(text, evidence, gaps);
|
|
238
|
-
break;
|
|
239
|
-
}
|
|
240
|
-
const quality = qualityScore >= 0.8 ? 'excellent' :
|
|
241
|
-
qualityScore >= 0.6 ? 'good' :
|
|
242
|
-
qualityScore >= 0.4 ? 'fair' : 'poor';
|
|
243
|
-
return {
|
|
244
|
-
quality,
|
|
245
|
-
confidence: Math.round(qualityScore * 100),
|
|
246
|
-
evidence,
|
|
247
|
-
gaps
|
|
248
|
-
};
|
|
249
|
-
}
|
|
250
|
-
assessImplementationQuality(text, safeguard, evidence, gaps) {
|
|
251
|
-
let score = 0;
|
|
252
|
-
// Check for core implementation elements
|
|
253
|
-
const coreScore = this.calculateElementCoverage(text, safeguard.coreRequirements);
|
|
254
|
-
const subElementScore = this.calculateElementCoverage(text, safeguard.subTaxonomicalElements);
|
|
255
|
-
const governanceScore = this.calculateElementCoverage(text, safeguard.governanceElements);
|
|
256
|
-
if (coreScore > 0.5) {
|
|
257
|
-
evidence.push('Strong coverage of core requirements');
|
|
258
|
-
score += 0.4;
|
|
259
|
-
}
|
|
260
|
-
else if (coreScore > 0.2) {
|
|
261
|
-
evidence.push('Partial coverage of core requirements');
|
|
262
|
-
score += 0.2;
|
|
263
|
-
}
|
|
264
|
-
else {
|
|
265
|
-
gaps.push('Limited coverage of core requirements');
|
|
266
|
-
}
|
|
267
|
-
if (subElementScore > 0.3) {
|
|
268
|
-
evidence.push('Good coverage of sub-taxonomical elements');
|
|
269
|
-
score += 0.3;
|
|
270
|
-
}
|
|
271
|
-
else {
|
|
272
|
-
gaps.push('Limited sub-element coverage');
|
|
273
|
-
}
|
|
274
|
-
if (governanceScore > 0.3) {
|
|
275
|
-
evidence.push('Addresses governance requirements');
|
|
276
|
-
score += 0.3;
|
|
277
|
-
}
|
|
278
|
-
else {
|
|
279
|
-
gaps.push('Limited governance element coverage');
|
|
280
|
-
}
|
|
281
|
-
return Math.min(score, 1.0);
|
|
282
|
-
}
|
|
283
|
-
assessFacilitationQuality(text, evidence, gaps) {
|
|
284
|
-
let score = 0;
|
|
285
|
-
const facilitationKeywords = ['enhance', 'improve', 'optimize', 'enable', 'support', 'facilitate', 'streamline'];
|
|
286
|
-
const integrationKeywords = ['api', 'integration', 'data feed', 'export', 'import', 'sync'];
|
|
287
|
-
const automationKeywords = ['automate', 'automated', 'orchestration', 'workflow'];
|
|
288
|
-
if (this.calculateKeywordScore(text, facilitationKeywords) > 0.1) {
|
|
289
|
-
evidence.push('Clear facilitation capabilities');
|
|
290
|
-
score += 0.4;
|
|
291
|
-
}
|
|
292
|
-
if (this.calculateKeywordScore(text, integrationKeywords) > 0.1) {
|
|
293
|
-
evidence.push('Integration and data sharing capabilities');
|
|
294
|
-
score += 0.3;
|
|
295
|
-
}
|
|
296
|
-
if (this.calculateKeywordScore(text, automationKeywords) > 0.1) {
|
|
297
|
-
evidence.push('Automation and workflow capabilities');
|
|
298
|
-
score += 0.3;
|
|
299
|
-
}
|
|
300
|
-
if (score < 0.4) {
|
|
301
|
-
gaps.push('Limited evidence of facilitation capabilities');
|
|
302
|
-
}
|
|
303
|
-
return Math.min(score, 1.0);
|
|
304
|
-
}
|
|
305
|
-
assessGovernanceQuality(text, evidence, gaps) {
|
|
306
|
-
let score = 0;
|
|
307
|
-
const policyKeywords = ['policy', 'policies', 'procedure', 'standard', 'framework'];
|
|
308
|
-
const processKeywords = ['process', 'workflow', 'governance', 'management', 'oversight'];
|
|
309
|
-
const complianceKeywords = ['compliance', 'grc', 'audit', 'risk management'];
|
|
310
|
-
if (this.calculateKeywordScore(text, policyKeywords) > 0.1) {
|
|
311
|
-
evidence.push('Policy and procedure management');
|
|
312
|
-
score += 0.4;
|
|
313
|
-
}
|
|
314
|
-
if (this.calculateKeywordScore(text, processKeywords) > 0.1) {
|
|
315
|
-
evidence.push('Process and workflow capabilities');
|
|
316
|
-
score += 0.3;
|
|
317
|
-
}
|
|
318
|
-
if (this.calculateKeywordScore(text, complianceKeywords) > 0.1) {
|
|
319
|
-
evidence.push('Compliance and risk management features');
|
|
320
|
-
score += 0.3;
|
|
321
|
-
}
|
|
322
|
-
if (score < 0.4) {
|
|
323
|
-
gaps.push('Limited governance capabilities evident');
|
|
324
|
-
}
|
|
325
|
-
return Math.min(score, 1.0);
|
|
326
|
-
}
|
|
327
|
-
assessValidationQuality(text, evidence, gaps) {
|
|
328
|
-
let score = 0;
|
|
329
|
-
const auditKeywords = ['audit', 'audit trail', 'evidence', 'verification', 'validation'];
|
|
330
|
-
const reportingKeywords = ['report', 'reporting', 'dashboard', 'metrics', 'analytics'];
|
|
331
|
-
const monitoringKeywords = ['monitor', 'monitoring', 'tracking', 'logging', 'alerting'];
|
|
332
|
-
if (this.calculateKeywordScore(text, auditKeywords) > 0.1) {
|
|
333
|
-
evidence.push('Audit and evidence collection capabilities');
|
|
334
|
-
score += 0.4;
|
|
335
|
-
}
|
|
336
|
-
if (this.calculateKeywordScore(text, reportingKeywords) > 0.1) {
|
|
337
|
-
evidence.push('Reporting and analytics features');
|
|
338
|
-
score += 0.3;
|
|
339
|
-
}
|
|
340
|
-
if (this.calculateKeywordScore(text, monitoringKeywords) > 0.1) {
|
|
341
|
-
evidence.push('Monitoring and tracking capabilities');
|
|
342
|
-
score += 0.3;
|
|
343
|
-
}
|
|
344
|
-
if (score < 0.4) {
|
|
345
|
-
gaps.push('Limited validation and evidence capabilities');
|
|
346
|
-
}
|
|
347
|
-
return Math.min(score, 1.0);
|
|
348
|
-
}
|
|
349
|
-
generateCapabilityAnalysis(vendorName, safeguard, responseText, claimedCapability, qualityAssessment) {
|
|
350
|
-
const capabilities = {
|
|
351
|
-
full: claimedCapability === 'full',
|
|
352
|
-
partial: claimedCapability === 'partial',
|
|
353
|
-
facilitates: claimedCapability === 'facilitates',
|
|
354
|
-
governance: claimedCapability === 'governance',
|
|
355
|
-
validates: claimedCapability === 'validates'
|
|
356
|
-
};
|
|
357
|
-
const toolCapabilityDescription = this.generateToolCapabilityDescription(claimedCapability, qualityAssessment);
|
|
358
|
-
const recommendedUse = this.generateRecommendedUse(claimedCapability, safeguard);
|
|
359
|
-
return {
|
|
360
|
-
vendor: vendorName,
|
|
361
|
-
safeguardId: safeguard.id,
|
|
362
|
-
safeguardTitle: safeguard.title,
|
|
363
|
-
capability: claimedCapability,
|
|
364
|
-
capabilities,
|
|
365
|
-
confidence: qualityAssessment.confidence,
|
|
366
|
-
reasoning: `Primary capability: ${claimedCapability.toUpperCase()} (${qualityAssessment.quality} quality)`,
|
|
367
|
-
evidence: qualityAssessment.evidence,
|
|
368
|
-
toolCapabilityDescription,
|
|
369
|
-
recommendedUse
|
|
370
|
-
};
|
|
371
|
-
}
|
|
372
|
-
generateToolCapabilityDescription(capability, quality) {
|
|
373
|
-
const qualityDescriptions = {
|
|
374
|
-
excellent: 'comprehensive and well-implemented',
|
|
375
|
-
good: 'solid and effective',
|
|
376
|
-
fair: 'basic but functional',
|
|
377
|
-
poor: 'limited or unclear'
|
|
378
|
-
};
|
|
379
|
-
const capabilityDescriptions = {
|
|
380
|
-
full: 'directly implements the complete safeguard functionality',
|
|
381
|
-
partial: 'implements specific aspects of the safeguard with defined scope',
|
|
382
|
-
facilitates: 'enhances and enables safeguard implementation by other tools or processes',
|
|
383
|
-
governance: 'provides policy, process management, and oversight capabilities',
|
|
384
|
-
validates: 'provides evidence collection, audit, and compliance validation capabilities'
|
|
385
|
-
};
|
|
386
|
-
return `This tool ${capabilityDescriptions[capability]} with ${qualityDescriptions[quality.quality]} capabilities.`;
|
|
387
|
-
}
|
|
388
|
-
generateRecommendedUse(capability, safeguard) {
|
|
389
|
-
const recommendations = {
|
|
390
|
-
full: `Use as the primary implementation tool for ${safeguard.title}. Ensure comprehensive deployment and configuration.`,
|
|
391
|
-
partial: `Use as a component within a broader safeguard implementation strategy. Supplement with additional tools or processes.`,
|
|
392
|
-
facilitates: `Use to enhance and optimize existing safeguard implementation. Integrate with primary implementation tools.`,
|
|
393
|
-
governance: `Use for policy management, process oversight, and compliance framework establishment for ${safeguard.title}.`,
|
|
394
|
-
validates: `Use for evidence collection, audit preparation, and compliance validation of ${safeguard.title} implementation.`
|
|
395
|
-
};
|
|
396
|
-
return recommendations[capability];
|
|
397
|
-
}
|
|
398
|
-
detectToolType(text, safeguardId) {
|
|
399
|
-
const lowerText = text.toLowerCase();
|
|
400
|
-
let bestMatch = 'unknown';
|
|
401
|
-
let highestScore = 0;
|
|
402
|
-
for (const [toolType, config] of Object.entries(TOOL_TYPE_DETECTION_WEIGHTS)) {
|
|
403
|
-
let score = 0;
|
|
404
|
-
// Base keyword matching
|
|
405
|
-
for (const keyword of config.keywords) {
|
|
406
|
-
if (lowerText.includes(keyword.toLowerCase())) {
|
|
407
|
-
score += config.baseWeight;
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
// Context bonus keywords
|
|
411
|
-
for (const bonus of config.contextBonuses) {
|
|
412
|
-
if (lowerText.includes(bonus.toLowerCase())) {
|
|
413
|
-
score += 1;
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
if (score > highestScore) {
|
|
417
|
-
highestScore = score;
|
|
418
|
-
bestMatch = toolType;
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
return bestMatch;
|
|
422
|
-
}
|
|
423
|
-
validateDomainMatch(safeguardId, claimedCapability, detectedToolType) {
|
|
424
|
-
const domainReq = SAFEGUARD_DOMAIN_REQUIREMENTS[safeguardId];
|
|
425
|
-
if (!domainReq) {
|
|
426
|
-
return {
|
|
427
|
-
domain_match: true,
|
|
428
|
-
should_adjust_capability: false,
|
|
429
|
-
required_tool_types: ['any'],
|
|
430
|
-
reasoning: 'No specific domain requirements for this safeguard'
|
|
431
|
-
};
|
|
432
|
-
}
|
|
433
|
-
const needsDomainValidation = ['full', 'partial'].includes(claimedCapability.toLowerCase());
|
|
434
|
-
if (!needsDomainValidation) {
|
|
435
|
-
return {
|
|
436
|
-
domain_match: true,
|
|
437
|
-
should_adjust_capability: false,
|
|
438
|
-
required_tool_types: domainReq.required_tool_types,
|
|
439
|
-
reasoning: 'Domain validation not required for this capability type'
|
|
440
|
-
};
|
|
441
|
-
}
|
|
442
|
-
const domainMatch = domainReq.required_tool_types.includes(detectedToolType);
|
|
443
|
-
return {
|
|
444
|
-
domain_match: domainMatch,
|
|
445
|
-
should_adjust_capability: !domainMatch,
|
|
446
|
-
adjusted_capability: !domainMatch ? 'facilitates' : undefined,
|
|
447
|
-
required_tool_types: domainReq.required_tool_types,
|
|
448
|
-
reasoning: !domainMatch ?
|
|
449
|
-
`Tool type '${detectedToolType}' cannot provide ${claimedCapability.toUpperCase()} coverage for ${domainReq.domain} safeguards` :
|
|
450
|
-
'Tool type matches domain requirements'
|
|
451
|
-
};
|
|
452
|
-
}
|
|
453
|
-
assessCapabilityClaimAlignment(claimedCapability, effectiveCapability, actualAnalysis, domainValidation, text) {
|
|
454
|
-
const gaps = [];
|
|
455
|
-
const strengths = [];
|
|
456
|
-
const recommendations = [];
|
|
457
|
-
let confidence = actualAnalysis.confidence;
|
|
458
|
-
let status = 'SUPPORTED';
|
|
459
|
-
// Assess alignment between claimed and detected capabilities
|
|
460
|
-
if (actualAnalysis.capability !== effectiveCapability.toLowerCase()) {
|
|
461
|
-
gaps.push(`Claimed capability '${claimedCapability}' differs from detected capability '${actualAnalysis.capability}'`);
|
|
462
|
-
confidence = Math.max(confidence - 15, 0);
|
|
463
|
-
}
|
|
464
|
-
// Add evidence from actual analysis
|
|
465
|
-
if (actualAnalysis.evidence.length > 0) {
|
|
466
|
-
strengths.push(...actualAnalysis.evidence);
|
|
467
|
-
}
|
|
468
|
-
// Determine final validation status
|
|
469
|
-
if (confidence < 40) {
|
|
470
|
-
status = 'UNSUPPORTED';
|
|
471
|
-
}
|
|
472
|
-
else if (confidence < 70 || !domainValidation.domain_match) {
|
|
473
|
-
status = 'QUESTIONABLE';
|
|
474
|
-
}
|
|
475
|
-
return {
|
|
476
|
-
status,
|
|
477
|
-
confidence,
|
|
478
|
-
gaps,
|
|
479
|
-
strengths,
|
|
480
|
-
recommendations,
|
|
481
|
-
feedback: this.generateValidationFeedback(claimedCapability, actualAnalysis, domainValidation, confidence, status),
|
|
482
|
-
core_requirements_coverage: 85, // Placeholder - would calculate from actual analysis
|
|
483
|
-
sub_elements_coverage: 75,
|
|
484
|
-
governance_alignment: 80,
|
|
485
|
-
language_consistency: 90
|
|
486
|
-
};
|
|
487
|
-
}
|
|
488
|
-
generateValidationFeedback(claimedCapability, actualAnalysis, domainValidation, confidence, status) {
|
|
489
|
-
let feedback = `Validation of ${claimedCapability.toUpperCase()} capability claim: ${status} (${confidence}% alignment)\n\n`;
|
|
490
|
-
if (domainValidation.should_adjust_capability) {
|
|
491
|
-
feedback += `DOMAIN VALIDATION: Tool type '${domainValidation.detected_tool_type}' cannot provide ${claimedCapability.toUpperCase()} coverage for this safeguard. Capability automatically adjusted to FACILITATES.\n\n`;
|
|
492
|
-
}
|
|
493
|
-
if (actualAnalysis.evidence.length > 0) {
|
|
494
|
-
feedback += 'STRENGTHS:\n';
|
|
495
|
-
actualAnalysis.evidence.forEach(evidence => {
|
|
496
|
-
feedback += `• ${evidence}\n`;
|
|
497
|
-
});
|
|
498
|
-
feedback += '\n';
|
|
499
|
-
}
|
|
500
|
-
feedback += `ASSESSMENT: ${actualAnalysis.toolCapabilityDescription}\n\n`;
|
|
501
|
-
feedback += `RECOMMENDED USE: ${actualAnalysis.recommendedUse}`;
|
|
502
|
-
return feedback;
|
|
503
|
-
}
|
|
504
|
-
calculateKeywordScore(text, keywords) {
|
|
505
|
-
let matches = 0;
|
|
506
|
-
for (const keyword of keywords) {
|
|
507
|
-
if (text.includes(keyword.toLowerCase())) {
|
|
508
|
-
matches++;
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
return keywords.length > 0 ? matches / keywords.length : 0;
|
|
512
|
-
}
|
|
513
|
-
calculateElementCoverage(text, elements) {
|
|
514
|
-
let matches = 0;
|
|
515
|
-
for (const element of elements) {
|
|
516
|
-
if (text.includes(element.toLowerCase())) {
|
|
517
|
-
matches++;
|
|
518
|
-
}
|
|
519
|
-
}
|
|
520
|
-
return elements.length > 0 ? matches / elements.length : 0;
|
|
521
|
-
}
|
|
522
|
-
recordToolExecution(toolName, executionTime) {
|
|
523
|
-
// Update request count
|
|
524
|
-
const currentCount = this.performanceMetrics.requestCounts.get(toolName) || 0;
|
|
525
|
-
this.performanceMetrics.requestCounts.set(toolName, currentCount + 1);
|
|
526
|
-
// Update execution times (keep last 100 measurements for rolling average)
|
|
527
|
-
const times = this.performanceMetrics.executionTimes.get(toolName) || [];
|
|
528
|
-
times.push(executionTime);
|
|
529
|
-
if (times.length > 100) {
|
|
530
|
-
times.shift(); // Remove oldest measurement
|
|
531
|
-
}
|
|
532
|
-
this.performanceMetrics.executionTimes.set(toolName, times);
|
|
533
|
-
// Log performance stats every 5 minutes in production
|
|
534
|
-
if (process.env.NODE_ENV === 'production' &&
|
|
535
|
-
Date.now() - this.performanceMetrics.lastStatsLog > 5 * 60 * 1000) {
|
|
536
|
-
this.logPerformanceStats();
|
|
537
|
-
}
|
|
538
|
-
}
|
|
539
|
-
logPerformanceStats() {
|
|
540
|
-
const uptime = Math.round((Date.now() - this.performanceMetrics.uptime) / 1000);
|
|
541
|
-
const errorRate = (this.performanceMetrics.errorCount / this.performanceMetrics.totalRequests * 100).toFixed(1);
|
|
542
|
-
console.log(`[Framework MCP Performance] Uptime: ${uptime}s, Requests: ${this.performanceMetrics.totalRequests}, Error Rate: ${errorRate}%`);
|
|
543
|
-
// Log per-tool average execution times
|
|
544
|
-
for (const [toolName, times] of this.performanceMetrics.executionTimes.entries()) {
|
|
545
|
-
const avgTime = times.reduce((a, b) => a + b, 0) / times.length;
|
|
546
|
-
console.log(`[Framework MCP Performance] ${toolName}: ${Math.round(avgTime)}ms avg`);
|
|
547
|
-
}
|
|
548
|
-
this.performanceMetrics.lastStatsLog = Date.now();
|
|
549
|
-
}
|
|
550
|
-
cleanupExpiredCache() {
|
|
551
|
-
const now = Date.now();
|
|
552
|
-
const expiredKeys = [];
|
|
553
|
-
for (const [key, entry] of this.cache.entries()) {
|
|
554
|
-
// Cache TTL: 5 minutes for most entries
|
|
555
|
-
if (now - entry.timestamp > 5 * 60 * 1000) {
|
|
556
|
-
expiredKeys.push(key);
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
expiredKeys.forEach(key => this.cache.delete(key));
|
|
560
|
-
if (expiredKeys.length > 0) {
|
|
561
|
-
console.log(`[Framework MCP Cache] Cleaned up ${expiredKeys.length} expired entries`);
|
|
562
|
-
}
|
|
563
|
-
}
|
|
564
|
-
getPerformanceMetrics() {
|
|
565
|
-
return { ...this.performanceMetrics };
|
|
566
|
-
}
|
|
567
|
-
}
|
|
568
|
-
//# sourceMappingURL=capability-analyzer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"capability-analyzer.js","sourceRoot":"","sources":["../../src/core/capability-analyzer.ts"],"names":[],"mappings":"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"}
|