framework-mcp 1.3.7 → 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.
@@ -1,333 +0,0 @@
1
- export class CapabilityAnalyzer {
2
- constructor() {
3
- this.cache = new Map();
4
- this.performanceMetrics = {
5
- uptime: Date.now(),
6
- totalRequests: 0,
7
- errorCount: 0,
8
- requestCounts: new Map(),
9
- executionTimes: new Map(),
10
- lastStatsLog: Date.now()
11
- };
12
- // Set up periodic cache cleanup
13
- setInterval(() => {
14
- this.cleanupExpiredCache();
15
- }, 10 * 60 * 1000); // Every 10 minutes
16
- }
17
- performCapabilityAnalysis(vendorName, safeguard, responseText) {
18
- const startTime = Date.now();
19
- try {
20
- this.performanceMetrics.totalRequests++;
21
- const text = responseText.toLowerCase();
22
- // Step 1: Determine what type of capability this tool is claiming
23
- const claimedCapability = this.determineClaimedCapability(text, safeguard);
24
- // Step 2: Assess how well the tool executes that specific capability type
25
- const qualityAssessment = this.assessCapabilityQuality(text, safeguard, claimedCapability);
26
- // Step 3: Generate capability-focused analysis
27
- const result = this.generateCapabilityAnalysis(vendorName, safeguard, responseText, claimedCapability, qualityAssessment);
28
- // Record performance metrics
29
- this.recordToolExecution('performCapabilityAnalysis', Date.now() - startTime);
30
- return result;
31
- }
32
- catch (error) {
33
- this.performanceMetrics.errorCount++;
34
- this.recordToolExecution('performCapabilityAnalysis_error', Date.now() - startTime);
35
- throw error;
36
- }
37
- }
38
- determineClaimedCapability(text, safeguard) {
39
- // Capability detection keywords - focused on what the tool DOES, not what elements it covers
40
- const governanceIndicators = [
41
- 'policy', 'policies', 'manage', 'process', 'workflow', 'governance', 'grc',
42
- 'compliance management', 'documented', 'establish', 'maintain', 'procedure',
43
- 'control', 'controls', 'framework', 'standard', 'enterprise risk management',
44
- 'centralized management', 'oversight'
45
- ];
46
- const facilitatesIndicators = [
47
- 'improve', 'enhance', 'optimize', 'faster', 'better', 'stronger', 'automate',
48
- 'streamline', 'efficiency', 'facilitate', 'support', 'enable', 'accelerate',
49
- 'api', 'integration', 'data', 'export', 'import', 'sync', 'feed',
50
- 'provides data', 'data source', 'data feeds', 'enrichment', 'data enrichment',
51
- 'supplemental data', 'additional data', 'contextual data', 'threat data',
52
- 'intelligence feeds', 'data aggregation', 'data collection', 'data gathering',
53
- 'feeds data', 'populates', 'informs', 'enriches', 'supplements',
54
- 'enables compliance', 'facilitates implementation', 'supports compliance',
55
- 'creates framework', 'enables organizations', 'infrastructure', 'foundation',
56
- 'template', 'templates', 'workflow automation', 'orchestration'
57
- ];
58
- const validatesIndicators = [
59
- 'audit', 'report', 'evidence', 'verify', 'validate', 'check', 'monitor',
60
- 'compliance', 'compliance report', 'assessment', 'logging', 'tracking', 'review', 'attest',
61
- 'dashboard', 'metrics', 'analytics', 'visibility', 'alert', 'attestation',
62
- 'compliance tracking', 'audit trail', 'reporting capabilities', 'audit capabilities'
63
- ];
64
- // General implementation indicators for all safeguards
65
- const implementationIndicators = [
66
- 'implement', 'implements', 'implementation', 'deploy', 'execute', 'perform',
67
- 'provides', 'delivers', 'complete', 'fully', 'comprehensive', 'directly',
68
- 'natively', 'built-in', 'core functionality', 'primary function', 'main feature'
69
- ];
70
- // Calculate keyword presence scores
71
- const governanceScore = this.calculateKeywordScore(text, governanceIndicators);
72
- const facilitatesScore = this.calculateKeywordScore(text, facilitatesIndicators);
73
- const validatesScore = this.calculateKeywordScore(text, validatesIndicators);
74
- const implementationScore = this.calculateKeywordScore(text, implementationIndicators);
75
- // Determine claimed capability based on strongest indicators and patterns
76
- if (implementationScore > 0.2 && implementationScore >= Math.max(facilitatesScore, governanceScore, validatesScore)) {
77
- // Tool claims to directly implement the safeguard
78
- return implementationScore > 0.5 ? 'full' : 'partial';
79
- }
80
- else if (governanceScore > 0.2 && governanceScore >= Math.max(facilitatesScore, validatesScore)) {
81
- return 'governance';
82
- }
83
- else if (validatesScore > 0.2 && validatesScore >= facilitatesScore) {
84
- return 'validates';
85
- }
86
- else {
87
- return 'facilitates';
88
- }
89
- }
90
- assessCapabilityQuality(text, safeguard, claimedCapability) {
91
- // Assess how well the tool executes the claimed capability type
92
- const evidence = [];
93
- const gaps = [];
94
- // Quality assessment based on capability type
95
- let qualityScore = 0;
96
- switch (claimedCapability) {
97
- case 'full':
98
- case 'partial':
99
- qualityScore = this.assessImplementationQuality(text, safeguard, evidence, gaps);
100
- break;
101
- case 'facilitates':
102
- qualityScore = this.assessFacilitationQuality(text, evidence, gaps);
103
- break;
104
- case 'governance':
105
- qualityScore = this.assessGovernanceQuality(text, evidence, gaps);
106
- break;
107
- case 'validates':
108
- qualityScore = this.assessValidationQuality(text, evidence, gaps);
109
- break;
110
- }
111
- const quality = qualityScore >= 0.8 ? 'excellent' :
112
- qualityScore >= 0.6 ? 'good' :
113
- qualityScore >= 0.4 ? 'fair' : 'poor';
114
- return {
115
- quality,
116
- confidence: Math.round(qualityScore * 100),
117
- evidence,
118
- gaps
119
- };
120
- }
121
- assessImplementationQuality(text, safeguard, evidence, gaps) {
122
- let score = 0;
123
- // Check for core implementation elements
124
- const coreScore = this.calculateElementCoverage(text, safeguard.coreRequirements);
125
- const subElementScore = this.calculateElementCoverage(text, safeguard.subTaxonomicalElements);
126
- const governanceScore = this.calculateElementCoverage(text, safeguard.governanceElements);
127
- if (coreScore > 0.5) {
128
- evidence.push('Strong coverage of core requirements');
129
- score += 0.4;
130
- }
131
- else if (coreScore > 0.2) {
132
- evidence.push('Partial coverage of core requirements');
133
- score += 0.2;
134
- }
135
- else {
136
- gaps.push('Limited coverage of core requirements');
137
- }
138
- if (subElementScore > 0.3) {
139
- evidence.push('Good coverage of sub-taxonomical elements');
140
- score += 0.3;
141
- }
142
- else {
143
- gaps.push('Limited sub-element coverage');
144
- }
145
- if (governanceScore > 0.3) {
146
- evidence.push('Addresses governance requirements');
147
- score += 0.3;
148
- }
149
- else {
150
- gaps.push('Limited governance element coverage');
151
- }
152
- return Math.min(score, 1.0);
153
- }
154
- assessFacilitationQuality(text, evidence, gaps) {
155
- let score = 0;
156
- const facilitationKeywords = ['enhance', 'improve', 'optimize', 'enable', 'support', 'facilitate', 'streamline'];
157
- const integrationKeywords = ['api', 'integration', 'data feed', 'export', 'import', 'sync'];
158
- const automationKeywords = ['automate', 'automated', 'orchestration', 'workflow'];
159
- if (this.calculateKeywordScore(text, facilitationKeywords) > 0.1) {
160
- evidence.push('Clear facilitation capabilities');
161
- score += 0.4;
162
- }
163
- if (this.calculateKeywordScore(text, integrationKeywords) > 0.1) {
164
- evidence.push('Integration and data sharing capabilities');
165
- score += 0.3;
166
- }
167
- if (this.calculateKeywordScore(text, automationKeywords) > 0.1) {
168
- evidence.push('Automation and workflow capabilities');
169
- score += 0.3;
170
- }
171
- if (score < 0.4) {
172
- gaps.push('Limited evidence of facilitation capabilities');
173
- }
174
- return Math.min(score, 1.0);
175
- }
176
- assessGovernanceQuality(text, evidence, gaps) {
177
- let score = 0;
178
- const policyKeywords = ['policy', 'policies', 'procedure', 'standard', 'framework'];
179
- const processKeywords = ['process', 'workflow', 'governance', 'management', 'oversight'];
180
- const complianceKeywords = ['compliance', 'grc', 'audit', 'risk management'];
181
- if (this.calculateKeywordScore(text, policyKeywords) > 0.1) {
182
- evidence.push('Policy and procedure management');
183
- score += 0.4;
184
- }
185
- if (this.calculateKeywordScore(text, processKeywords) > 0.1) {
186
- evidence.push('Process and workflow capabilities');
187
- score += 0.3;
188
- }
189
- if (this.calculateKeywordScore(text, complianceKeywords) > 0.1) {
190
- evidence.push('Compliance and risk management features');
191
- score += 0.3;
192
- }
193
- if (score < 0.4) {
194
- gaps.push('Limited governance capabilities evident');
195
- }
196
- return Math.min(score, 1.0);
197
- }
198
- assessValidationQuality(text, evidence, gaps) {
199
- let score = 0;
200
- const auditKeywords = ['audit', 'audit trail', 'evidence', 'verification', 'validation'];
201
- const reportingKeywords = ['report', 'reporting', 'dashboard', 'metrics', 'analytics'];
202
- const monitoringKeywords = ['monitor', 'monitoring', 'tracking', 'logging', 'alerting'];
203
- if (this.calculateKeywordScore(text, auditKeywords) > 0.1) {
204
- evidence.push('Audit and evidence collection capabilities');
205
- score += 0.4;
206
- }
207
- if (this.calculateKeywordScore(text, reportingKeywords) > 0.1) {
208
- evidence.push('Reporting and analytics features');
209
- score += 0.3;
210
- }
211
- if (this.calculateKeywordScore(text, monitoringKeywords) > 0.1) {
212
- evidence.push('Monitoring and tracking capabilities');
213
- score += 0.3;
214
- }
215
- if (score < 0.4) {
216
- gaps.push('Limited validation and evidence capabilities');
217
- }
218
- return Math.min(score, 1.0);
219
- }
220
- generateCapabilityAnalysis(vendorName, safeguard, responseText, claimedCapability, qualityAssessment) {
221
- const capabilities = {
222
- full: claimedCapability === 'full',
223
- partial: claimedCapability === 'partial',
224
- facilitates: claimedCapability === 'facilitates',
225
- governance: claimedCapability === 'governance',
226
- validates: claimedCapability === 'validates'
227
- };
228
- const toolCapabilityDescription = this.generateToolCapabilityDescription(claimedCapability, qualityAssessment);
229
- const recommendedUse = this.generateRecommendedUse(claimedCapability, safeguard);
230
- return {
231
- vendor: vendorName,
232
- safeguardId: safeguard.id,
233
- safeguardTitle: safeguard.title,
234
- capability: claimedCapability,
235
- capabilities,
236
- confidence: qualityAssessment.confidence,
237
- reasoning: `Primary capability: ${claimedCapability.toUpperCase()} (${qualityAssessment.quality} quality)`,
238
- evidence: qualityAssessment.evidence,
239
- toolCapabilityDescription,
240
- recommendedUse
241
- };
242
- }
243
- generateToolCapabilityDescription(capability, quality) {
244
- const qualityDescriptions = {
245
- excellent: 'comprehensive and well-implemented',
246
- good: 'solid and effective',
247
- fair: 'basic but functional',
248
- poor: 'limited or unclear'
249
- };
250
- const capabilityDescriptions = {
251
- full: 'directly implements the complete safeguard functionality',
252
- partial: 'implements specific aspects of the safeguard with defined scope',
253
- facilitates: 'enhances and enables safeguard implementation by other tools or processes',
254
- governance: 'provides policy, process management, and oversight capabilities',
255
- validates: 'provides evidence collection, audit, and compliance validation capabilities'
256
- };
257
- return `This tool ${capabilityDescriptions[capability]} with ${qualityDescriptions[quality.quality]} capabilities.`;
258
- }
259
- generateRecommendedUse(capability, safeguard) {
260
- const recommendations = {
261
- full: `Use as the primary implementation tool for ${safeguard.title}. Ensure comprehensive deployment and configuration.`,
262
- partial: `Use as a component within a broader safeguard implementation strategy. Supplement with additional tools or processes.`,
263
- facilitates: `Use to enhance and optimize existing safeguard implementation. Integrate with primary implementation tools.`,
264
- governance: `Use for policy management, process oversight, and compliance framework establishment for ${safeguard.title}.`,
265
- validates: `Use for evidence collection, audit preparation, and compliance validation of ${safeguard.title} implementation.`
266
- };
267
- return recommendations[capability];
268
- }
269
- calculateKeywordScore(text, keywords) {
270
- let matches = 0;
271
- for (const keyword of keywords) {
272
- if (text.includes(keyword.toLowerCase())) {
273
- matches++;
274
- }
275
- }
276
- return keywords.length > 0 ? matches / keywords.length : 0;
277
- }
278
- calculateElementCoverage(text, elements) {
279
- let matches = 0;
280
- for (const element of elements) {
281
- if (text.includes(element.toLowerCase())) {
282
- matches++;
283
- }
284
- }
285
- return elements.length > 0 ? matches / elements.length : 0;
286
- }
287
- recordToolExecution(toolName, executionTime) {
288
- // Update request count
289
- const currentCount = this.performanceMetrics.requestCounts.get(toolName) || 0;
290
- this.performanceMetrics.requestCounts.set(toolName, currentCount + 1);
291
- // Update execution times (keep last 100 measurements for rolling average)
292
- const times = this.performanceMetrics.executionTimes.get(toolName) || [];
293
- times.push(executionTime);
294
- if (times.length > 100) {
295
- times.shift(); // Remove oldest measurement
296
- }
297
- this.performanceMetrics.executionTimes.set(toolName, times);
298
- // Log performance stats every 5 minutes in production
299
- if (process.env.NODE_ENV === 'production' &&
300
- Date.now() - this.performanceMetrics.lastStatsLog > 5 * 60 * 1000) {
301
- this.logPerformanceStats();
302
- }
303
- }
304
- logPerformanceStats() {
305
- const uptime = Math.round((Date.now() - this.performanceMetrics.uptime) / 1000);
306
- const errorRate = (this.performanceMetrics.errorCount / this.performanceMetrics.totalRequests * 100).toFixed(1);
307
- console.log(`[Framework MCP Performance] Uptime: ${uptime}s, Requests: ${this.performanceMetrics.totalRequests}, Error Rate: ${errorRate}%`);
308
- // Log per-tool average execution times
309
- for (const [toolName, times] of this.performanceMetrics.executionTimes.entries()) {
310
- const avgTime = times.reduce((a, b) => a + b, 0) / times.length;
311
- console.log(`[Framework MCP Performance] ${toolName}: ${Math.round(avgTime)}ms avg`);
312
- }
313
- this.performanceMetrics.lastStatsLog = Date.now();
314
- }
315
- cleanupExpiredCache() {
316
- const now = Date.now();
317
- const expiredKeys = [];
318
- for (const [key, entry] of this.cache.entries()) {
319
- // Cache TTL: 5 minutes for most entries
320
- if (now - entry.timestamp > 5 * 60 * 1000) {
321
- expiredKeys.push(key);
322
- }
323
- }
324
- expiredKeys.forEach(key => this.cache.delete(key));
325
- if (expiredKeys.length > 0) {
326
- console.log(`[Framework MCP Cache] Cleaned up ${expiredKeys.length} expired entries`);
327
- }
328
- }
329
- getPerformanceMetrics() {
330
- return { ...this.performanceMetrics };
331
- }
332
- }
333
- //# 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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"}