claude-flow-novice 2.0.3 → 2.0.4
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/src/cli/commands/guidance.js +487 -668
- package/dist/src/cli/commands/index-validate.js +18 -29
- package/dist/src/cli/commands/mcp-troubleshoot.js +230 -282
- package/dist/src/cli/commands/neural-goal-init.js +92 -125
- package/dist/src/cli/commands/swarm-exec.js +317 -393
- package/dist/src/cli/commands/swarm.js +1 -1
- package/dist/src/cli/commands/validate-framework.js +983 -1100
- package/dist/src/cli/commands/validate.js +144 -223
- package/dist/src/cli/simple-commands/__tests__/agent.test.js +265 -277
- package/dist/src/cli/simple-commands/__tests__/memory.test.js +6 -7
- package/dist/src/cli/simple-commands/__tests__/swarm.test.js +373 -356
- package/dist/src/cli/simple-commands/__tests__/task.test.js +6 -7
- package/dist/src/cli/simple-commands/agent.js +157 -193
- package/dist/src/cli/simple-commands/analysis.js +336 -446
- package/dist/src/cli/simple-commands/automation-executor.js +1095 -1339
- package/dist/src/cli/simple-commands/automation.js +481 -469
- package/dist/src/cli/simple-commands/batch-manager.js +261 -313
- package/dist/src/cli/simple-commands/claude-telemetry.js +241 -267
- package/dist/src/cli/simple-commands/claude-track.js +68 -90
- package/dist/src/cli/simple-commands/concurrent-display.js +266 -320
- package/dist/src/cli/simple-commands/config.js +245 -290
- package/dist/src/cli/simple-commands/coordination.js +182 -234
- package/dist/src/cli/simple-commands/enhanced-ui-views.js +812 -615
- package/dist/src/cli/simple-commands/enhanced-webui-complete.js +922 -981
- package/dist/src/cli/simple-commands/fix-hook-variables.js +274 -294
- package/dist/src/cli/simple-commands/github/gh-coordinator.js +378 -457
- package/dist/src/cli/simple-commands/github/github-api.js +535 -574
- package/dist/src/cli/simple-commands/github/init.js +276 -303
- package/dist/src/cli/simple-commands/github.js +222 -247
- package/dist/src/cli/simple-commands/goal.js +51 -63
- package/dist/src/cli/simple-commands/hive-mind/auto-save-middleware.js +208 -278
- package/dist/src/cli/simple-commands/hive-mind/communication.js +601 -696
- package/dist/src/cli/simple-commands/hive-mind/core.js +907 -979
- package/dist/src/cli/simple-commands/hive-mind/db-optimizer.js +406 -655
- package/dist/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1125 -1245
- package/dist/src/cli/simple-commands/hive-mind/memory.js +854 -1090
- package/dist/src/cli/simple-commands/hive-mind/performance-optimizer.js +459 -574
- package/dist/src/cli/simple-commands/hive-mind/performance-test.js +263 -347
- package/dist/src/cli/simple-commands/hive-mind/queen.js +727 -768
- package/dist/src/cli/simple-commands/hive-mind/session-manager.js +745 -1049
- package/dist/src/cli/simple-commands/hive-mind-optimize.js +227 -283
- package/dist/src/cli/simple-commands/hive-mind-wizard.js +174 -217
- package/dist/src/cli/simple-commands/hive-mind.js +1842 -2283
- package/dist/src/cli/simple-commands/hive.js +90 -79
- package/dist/src/cli/simple-commands/hook-safety.js +431 -521
- package/dist/src/cli/simple-commands/hooks/session-start-soul.js +203 -254
- package/dist/src/cli/simple-commands/hooks.js +1064 -1204
- package/dist/src/cli/simple-commands/init/agent-copier.js +294 -319
- package/dist/src/cli/simple-commands/init/batch-init.js +496 -562
- package/dist/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +61 -88
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +125 -150
- package/dist/src/cli/simple-commands/init/claude-commands/slash-commands.js +42 -49
- package/dist/src/cli/simple-commands/init/claude-commands/sparc-commands.js +43 -61
- package/dist/src/cli/simple-commands/init/copy-revised-templates.js +141 -147
- package/dist/src/cli/simple-commands/init/executable-wrapper.js +31 -44
- package/dist/src/cli/simple-commands/init/gitignore-updater.js +64 -90
- package/dist/src/cli/simple-commands/init/help.js +104 -107
- package/dist/src/cli/simple-commands/init/hive-mind-init.js +509 -528
- package/dist/src/cli/simple-commands/init/index.js +1510 -1759
- package/dist/src/cli/simple-commands/init/performance-monitor.js +234 -317
- package/dist/src/cli/simple-commands/init/rollback/backup-manager.js +441 -504
- package/dist/src/cli/simple-commands/init/rollback/index.js +289 -364
- package/dist/src/cli/simple-commands/init/rollback/recovery-manager.js +652 -728
- package/dist/src/cli/simple-commands/init/rollback/rollback-executor.js +416 -481
- package/dist/src/cli/simple-commands/init/rollback/state-tracker.js +369 -448
- package/dist/src/cli/simple-commands/init/sparc/roo-readme.js +1 -2
- package/dist/src/cli/simple-commands/init/sparc/roomodes-config.js +122 -99
- package/dist/src/cli/simple-commands/init/sparc/workflows.js +32 -37
- package/dist/src/cli/simple-commands/init/sparc-structure.js +55 -62
- package/dist/src/cli/simple-commands/init/template-copier.js +421 -533
- package/dist/src/cli/simple-commands/init/templates/coordination-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/enhanced-templates.js +344 -318
- package/dist/src/cli/simple-commands/init/templates/github-safe-enhanced.js +173 -218
- package/dist/src/cli/simple-commands/init/templates/github-safe.js +65 -75
- package/dist/src/cli/simple-commands/init/templates/memory-bank-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/readme-files.js +2 -4
- package/dist/src/cli/simple-commands/init/templates/safe-hook-patterns.js +187 -230
- package/dist/src/cli/simple-commands/init/templates/sparc-modes.js +53 -80
- package/dist/src/cli/simple-commands/init/templates/verification-claude-md.js +101 -85
- package/dist/src/cli/simple-commands/init/validation/config-validator.js +283 -330
- package/dist/src/cli/simple-commands/init/validation/health-checker.js +495 -561
- package/dist/src/cli/simple-commands/init/validation/index.js +302 -358
- package/dist/src/cli/simple-commands/init/validation/mode-validator.js +308 -359
- package/dist/src/cli/simple-commands/init/validation/post-init-validator.js +389 -366
- package/dist/src/cli/simple-commands/init/validation/pre-init-validator.js +270 -268
- package/dist/src/cli/simple-commands/init/validation/test-runner.js +427 -447
- package/dist/src/cli/simple-commands/init.js +1 -2
- package/dist/src/cli/simple-commands/mcp-health.js +131 -158
- package/dist/src/cli/simple-commands/mcp-integration-layer.js +533 -634
- package/dist/src/cli/simple-commands/mcp.js +345 -400
- package/dist/src/cli/simple-commands/memory-consolidation.js +426 -537
- package/dist/src/cli/simple-commands/memory.js +247 -311
- package/dist/src/cli/simple-commands/migrate-hooks.js +39 -46
- package/dist/src/cli/simple-commands/monitor.js +294 -363
- package/dist/src/cli/simple-commands/neural.js +51 -65
- package/dist/src/cli/simple-commands/pair-autofix-only.js +538 -662
- package/dist/src/cli/simple-commands/pair-basic.js +528 -656
- package/dist/src/cli/simple-commands/pair-old.js +430 -543
- package/dist/src/cli/simple-commands/pair-working.js +615 -751
- package/dist/src/cli/simple-commands/pair.js +615 -751
- package/dist/src/cli/simple-commands/performance-hooks.js +83 -111
- package/dist/src/cli/simple-commands/performance-metrics.js +348 -433
- package/dist/src/cli/simple-commands/process-ui-enhanced.js +708 -787
- package/dist/src/cli/simple-commands/process-ui.js +230 -254
- package/dist/src/cli/simple-commands/realtime-update-system.js +525 -611
- package/dist/src/cli/simple-commands/sparc/architecture.js +1704 -1530
- package/dist/src/cli/simple-commands/sparc/commands.js +438 -516
- package/dist/src/cli/simple-commands/sparc/completion.js +1224 -1481
- package/dist/src/cli/simple-commands/sparc/coordinator.js +913 -978
- package/dist/src/cli/simple-commands/sparc/index.js +241 -298
- package/dist/src/cli/simple-commands/sparc/phase-base.js +314 -390
- package/dist/src/cli/simple-commands/sparc/pseudocode.js +965 -869
- package/dist/src/cli/simple-commands/sparc/refinement.js +980 -1273
- package/dist/src/cli/simple-commands/sparc/specification.js +559 -645
- package/dist/src/cli/simple-commands/sparc-modes/architect.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/ask.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/code.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/debug.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/devops.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/docs-writer.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/generic.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/index.js +47 -55
- package/dist/src/cli/simple-commands/sparc-modes/integration.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/mcp.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/monitoring.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/optimization.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/security-review.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/supabase-admin.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/swarm.js +101 -87
- package/dist/src/cli/simple-commands/sparc-modes/tdd.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/tutorial.js +1 -1
- package/dist/src/cli/simple-commands/sparc.js +465 -493
- package/dist/src/cli/simple-commands/start-ui.js +108 -132
- package/dist/src/cli/simple-commands/start-wrapper.js +240 -268
- package/dist/src/cli/simple-commands/start.js +1 -1
- package/dist/src/cli/simple-commands/status.js +254 -275
- package/dist/src/cli/simple-commands/stream-chain-clean.js +128 -171
- package/dist/src/cli/simple-commands/stream-chain-fixed.js +61 -82
- package/dist/src/cli/simple-commands/stream-chain-real.js +267 -331
- package/dist/src/cli/simple-commands/stream-chain-working.js +211 -263
- package/dist/src/cli/simple-commands/stream-chain.js +260 -318
- package/dist/src/cli/simple-commands/stream-processor.js +290 -315
- package/dist/src/cli/simple-commands/swarm-executor.js +189 -222
- package/dist/src/cli/simple-commands/swarm-metrics-integration.js +208 -300
- package/dist/src/cli/simple-commands/swarm-ui.js +623 -703
- package/dist/src/cli/simple-commands/swarm-webui-integration.js +258 -286
- package/dist/src/cli/simple-commands/swarm.js +887 -1082
- package/dist/src/cli/simple-commands/task.js +161 -206
- package/dist/src/cli/simple-commands/timestamp-fix.js +59 -89
- package/dist/src/cli/simple-commands/token-tracker.js +258 -316
- package/dist/src/cli/simple-commands/tool-execution-framework.js +433 -519
- package/dist/src/cli/simple-commands/train-and-stream.js +275 -331
- package/dist/src/cli/simple-commands/training-pipeline.js +619 -725
- package/dist/src/cli/simple-commands/training.js +170 -227
- package/dist/src/cli/simple-commands/verification-hooks.js +261 -284
- package/dist/src/cli/simple-commands/verification-integration.js +389 -417
- package/dist/src/cli/simple-commands/verification-training-integration.js +486 -606
- package/dist/src/cli/simple-commands/verification.js +493 -513
- package/dist/src/cli/simple-commands/web-server.js +766 -836
- package/dist/src/cli/simple-commands/webui-validator.js +106 -124
- package/dist/src/coordination/event-bus/demo-wasm-integration.js +212 -251
- package/dist/src/coordination/event-bus/qe-event-bus.js +608 -748
- package/dist/src/coordination/event-bus/qe-event-bus.test.js +379 -454
- package/dist/src/coordination/iteration-tracker.js +363 -454
- package/dist/src/enterprise/analytics-manager.js +1135 -0
- package/dist/src/enterprise/audit-manager.js +1115 -0
- package/dist/src/enterprise/cloud-manager.js +891 -0
- package/dist/src/enterprise/deployment-manager.js +966 -0
- package/dist/src/enterprise/index.js +6 -0
- package/dist/src/enterprise/project-manager.js +584 -0
- package/dist/src/enterprise/security-manager.js +991 -0
- package/dist/src/index.js +1 -1
- package/dist/src/mcp/DEPRECATED.js +46 -60
- package/dist/src/mcp/fixes/mcp-error-fixes.js +115 -134
- package/dist/src/mcp/implementations/agent-tracker.js +114 -128
- package/dist/src/mcp/implementations/daa-tools.js +292 -350
- package/dist/src/mcp/implementations/workflow-tools.js +329 -361
- package/dist/src/mcp/mcp-config-manager.js +1183 -1331
- package/dist/src/mcp/mcp-server-novice-simplified.js +11 -17
- package/dist/src/mcp/mcp-server-novice.js +11 -17
- package/dist/src/mcp/mcp-server-sdk.js +11 -17
- package/dist/src/mcp/mcp-server.js +1620 -1484
- package/dist/src/mcp/ruv-swarm-wrapper.js +209 -239
- package/dist/src/memory/advanced-serializer.js +609 -589
- package/dist/src/memory/enhanced-examples.js +220 -305
- package/dist/src/memory/enhanced-memory.js +295 -336
- package/dist/src/memory/enhanced-session-serializer.js +408 -492
- package/dist/src/memory/fallback-memory-system.js +900 -1021
- package/dist/src/memory/fallback-store.js +93 -131
- package/dist/src/memory/high-performance-serialization.js +592 -730
- package/dist/src/memory/in-memory-store.js +161 -213
- package/dist/src/memory/index.js +123 -157
- package/dist/src/memory/lock-free-structures.js +578 -764
- package/dist/src/memory/memory-mapped-persistence.js +585 -766
- package/dist/src/memory/memory-pressure-manager.js +569 -707
- package/dist/src/memory/migration.js +358 -445
- package/dist/src/memory/shared-memory.js +641 -768
- package/dist/src/memory/sqlite-store.js +245 -325
- package/dist/src/memory/sqlite-wrapper.js +122 -151
- package/dist/src/memory/swarm-memory.js +470 -603
- package/dist/src/memory/test-example.js +126 -134
- package/dist/src/memory/ultra-fast-memory-store.js +622 -821
- package/dist/src/memory/unified-memory-manager.js +356 -437
- package/dist/src/migration/index.js +92 -0
- package/dist/src/migration/logger.js +121 -0
- package/dist/src/migration/migration-analyzer.js +268 -0
- package/dist/src/migration/migration-runner.js +522 -0
- package/dist/src/migration/migration-validator.js +285 -0
- package/dist/src/migration/progress-reporter.js +150 -0
- package/dist/src/migration/rollback-manager.js +321 -0
- package/dist/src/migration/tests/migration-system.test.js +7 -0
- package/dist/src/migration/types.js +3 -0
- package/dist/src/swarm/CodeRefactoringSwarm.js +777 -952
- package/dist/src/swarm/__tests__/integration.test.js +227 -0
- package/dist/src/swarm/__tests__/prompt-copier.test.js +344 -0
- package/dist/src/swarm/advanced-orchestrator.js +1095 -0
- package/dist/src/swarm/claude-code-interface.js +961 -0
- package/dist/src/swarm/claude-flow-executor.js +229 -0
- package/dist/src/swarm/consensus-coordinator.js +475 -0
- package/dist/src/swarm/coordinator.js +2993 -0
- package/dist/src/swarm/direct-executor.js +1180 -0
- package/dist/src/swarm/error-recovery/advanced-error-detection.js +691 -0
- package/dist/src/swarm/error-recovery/automated-recovery-workflows.js +998 -0
- package/dist/src/swarm/error-recovery/error-recovery-coordinator.js +1197 -0
- package/dist/src/swarm/error-recovery/recovery-monitoring.js +772 -0
- package/dist/src/swarm/error-recovery/resilience-architecture.js +714 -0
- package/dist/src/swarm/error-recovery/self-healing-mechanisms.js +1319 -0
- package/dist/src/swarm/error-recovery/test-error-recovery-effectiveness.js +808 -0
- package/dist/src/swarm/executor-v2.js +322 -0
- package/dist/src/swarm/executor.js +815 -0
- package/dist/src/swarm/hive-mind-integration.js +703 -0
- package/dist/src/swarm/index.js +41 -0
- package/dist/src/swarm/json-output-aggregator.js +267 -0
- package/dist/src/swarm/large-scale-coordinator.js +542 -0
- package/dist/src/swarm/mcp-integration-wrapper.js +628 -0
- package/dist/src/swarm/memory.js +1117 -0
- package/dist/src/swarm/optimizations/__tests__/optimization.test.js +348 -0
- package/dist/src/swarm/optimizations/async-file-manager.js +285 -0
- package/dist/src/swarm/optimizations/circular-buffer.js +162 -0
- package/dist/src/swarm/optimizations/connection-pool.js +244 -0
- package/dist/src/swarm/optimizations/index.js +28 -0
- package/dist/src/swarm/optimizations/optimized-executor.js +320 -0
- package/dist/src/swarm/optimizations/ttl-map.js +234 -0
- package/dist/src/swarm/prompt-cli.js +200 -0
- package/dist/src/swarm/prompt-copier-enhanced.js +202 -0
- package/dist/src/swarm/prompt-copier.js +381 -0
- package/dist/src/swarm/prompt-manager.js +295 -0
- package/dist/src/swarm/prompt-utils.js +310 -0
- package/dist/src/swarm/result-aggregator.js +718 -0
- package/dist/src/swarm/sparc-executor.js +1568 -0
- package/dist/src/swarm/strategies/auto.js +758 -0
- package/dist/src/swarm/strategies/base.js +128 -0
- package/dist/src/swarm/strategies/research.js +914 -0
- package/dist/src/swarm/strategies/strategy-metrics-patch.js +2 -0
- package/dist/src/swarm/types.js +52 -0
- package/dist/src/swarm/workers/copy-worker.js +56 -0
- package/dist/src/utils/__tests__/github-cli-safety-wrapper.test.js +332 -400
- package/dist/src/utils/github-cli-safe.js +56 -64
- package/dist/src/utils/github-cli-safety-wrapper.js +451 -546
- package/dist/src/utils/npx-isolated-cache.js +104 -119
- package/dist/src/utils/preference-manager.js +622 -652
- package/dist/src/utils/timezone-utils.js +86 -105
- package/dist/src/validators/epic-config-schema.js +214 -0
- package/dist/src/validators/index.js +10 -0
- package/dist/src/validators/swarm-init-validator.js +259 -0
- package/dist/src/validators/todowrite-batching-validator.js +215 -0
- package/dist/src/validators/todowrite-integration.js +187 -0
- package/package.json +2 -2
|
@@ -0,0 +1,628 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Integration Wrapper for Swarm System
|
|
3
|
+
*
|
|
4
|
+
* This module provides a comprehensive wrapper around MCP tools to enable
|
|
5
|
+
* seamless integration with the swarm orchestration system. It handles
|
|
6
|
+
* tool discovery, execution, error handling, and result aggregation.
|
|
7
|
+
*/ function _define_property(obj, key, value) {
|
|
8
|
+
if (key in obj) {
|
|
9
|
+
Object.defineProperty(obj, key, {
|
|
10
|
+
value: value,
|
|
11
|
+
enumerable: true,
|
|
12
|
+
configurable: true,
|
|
13
|
+
writable: true
|
|
14
|
+
});
|
|
15
|
+
} else {
|
|
16
|
+
obj[key] = value;
|
|
17
|
+
}
|
|
18
|
+
return obj;
|
|
19
|
+
}
|
|
20
|
+
import { EventEmitter } from "node:events";
|
|
21
|
+
import { Logger } from "../core/logger.js";
|
|
22
|
+
import { generateId } from "../utils/helpers.js";
|
|
23
|
+
import { createClaudeFlowTools } from "../mcp/claude-flow-tools.js";
|
|
24
|
+
import { createRuvSwarmTools } from "../mcp/ruv-swarm-tools.js";
|
|
25
|
+
export class MCPIntegrationWrapper extends EventEmitter {
|
|
26
|
+
/**
|
|
27
|
+
* Initialize the MCP integration wrapper
|
|
28
|
+
*/ async initialize() {
|
|
29
|
+
this.logger.info('Initializing MCP integration wrapper...');
|
|
30
|
+
try {
|
|
31
|
+
// Register Claude Flow tools
|
|
32
|
+
if (this.config.enableClaudeFlowTools) {
|
|
33
|
+
await this.registerClaudeFlowTools();
|
|
34
|
+
}
|
|
35
|
+
// Register ruv-swarm tools
|
|
36
|
+
if (this.config.enableRuvSwarmTools) {
|
|
37
|
+
await this.registerRuvSwarmTools();
|
|
38
|
+
}
|
|
39
|
+
// Start cache cleanup if enabled
|
|
40
|
+
if (this.config.enableCaching) {
|
|
41
|
+
this.startCacheCleanup();
|
|
42
|
+
}
|
|
43
|
+
this.logger.info('MCP integration wrapper initialized successfully', {
|
|
44
|
+
totalTools: this.toolRegistry.tools.size,
|
|
45
|
+
categories: this.toolRegistry.categories.size,
|
|
46
|
+
capabilities: this.toolRegistry.capabilities.size
|
|
47
|
+
});
|
|
48
|
+
this.emit('initialized', {
|
|
49
|
+
toolCount: this.toolRegistry.tools.size,
|
|
50
|
+
config: this.config
|
|
51
|
+
});
|
|
52
|
+
} catch (error) {
|
|
53
|
+
this.logger.error('Failed to initialize MCP integration wrapper', error);
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Shutdown the wrapper gracefully
|
|
59
|
+
*/ async shutdown() {
|
|
60
|
+
this.logger.info('Shutting down MCP integration wrapper...');
|
|
61
|
+
try {
|
|
62
|
+
// Cancel all active executions
|
|
63
|
+
for (const [executionId, controller] of this.activeExecutions){
|
|
64
|
+
controller.abort();
|
|
65
|
+
this.logger.debug('Cancelled execution', {
|
|
66
|
+
executionId
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
this.activeExecutions.clear();
|
|
70
|
+
// Clear cache if needed
|
|
71
|
+
this.executionCache.clear();
|
|
72
|
+
this.logger.info('MCP integration wrapper shut down successfully');
|
|
73
|
+
this.emit('shutdown');
|
|
74
|
+
} catch (error) {
|
|
75
|
+
this.logger.error('Error during MCP wrapper shutdown', error);
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Execute an MCP tool within a swarm context
|
|
81
|
+
*/ async executeTool(toolName, input, context) {
|
|
82
|
+
const executionId = generateId('mcp-execution');
|
|
83
|
+
const startTime = performance.now();
|
|
84
|
+
this.logger.info('Executing MCP tool', {
|
|
85
|
+
toolName,
|
|
86
|
+
executionId,
|
|
87
|
+
agentId: context.agent.id,
|
|
88
|
+
taskId: context.task?.id,
|
|
89
|
+
swarmId: context.swarmId
|
|
90
|
+
});
|
|
91
|
+
try {
|
|
92
|
+
// Check if tool exists
|
|
93
|
+
const tool = this.toolRegistry.tools.get(toolName);
|
|
94
|
+
if (!tool) {
|
|
95
|
+
throw new Error(`Tool not found: ${toolName}`);
|
|
96
|
+
}
|
|
97
|
+
// Check cache if enabled
|
|
98
|
+
if (this.config.enableCaching) {
|
|
99
|
+
const cached = await this.getCachedResult(toolName, input, context);
|
|
100
|
+
if (cached) {
|
|
101
|
+
this.logger.debug('Using cached result', {
|
|
102
|
+
toolName,
|
|
103
|
+
executionId
|
|
104
|
+
});
|
|
105
|
+
return cached;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Create abort controller for timeout
|
|
109
|
+
const abortController = new AbortController();
|
|
110
|
+
this.activeExecutions.set(executionId, abortController);
|
|
111
|
+
// Set up timeout
|
|
112
|
+
const timeoutHandle = setTimeout(()=>{
|
|
113
|
+
abortController.abort();
|
|
114
|
+
}, context.timeout || this.config.toolTimeout);
|
|
115
|
+
try {
|
|
116
|
+
// Execute tool with retry logic
|
|
117
|
+
const result = await this.executeWithRetry(tool, input, context, executionId, abortController.signal);
|
|
118
|
+
clearTimeout(timeoutHandle);
|
|
119
|
+
const duration = performance.now() - startTime;
|
|
120
|
+
const executionResult = {
|
|
121
|
+
success: true,
|
|
122
|
+
result,
|
|
123
|
+
duration,
|
|
124
|
+
toolName,
|
|
125
|
+
agentId: context.agent.id,
|
|
126
|
+
taskId: context.task?.id,
|
|
127
|
+
metadata: {
|
|
128
|
+
timestamp: new Date(),
|
|
129
|
+
executionId,
|
|
130
|
+
attempts: 1
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
// Cache result if enabled
|
|
134
|
+
if (this.config.enableCaching) {
|
|
135
|
+
await this.cacheResult(toolName, input, context, executionResult);
|
|
136
|
+
}
|
|
137
|
+
// Update metrics
|
|
138
|
+
this.updateMetrics(executionResult);
|
|
139
|
+
this.logger.info('MCP tool executed successfully', {
|
|
140
|
+
toolName,
|
|
141
|
+
executionId,
|
|
142
|
+
duration
|
|
143
|
+
});
|
|
144
|
+
this.emit('tool:executed', executionResult);
|
|
145
|
+
return executionResult;
|
|
146
|
+
} finally{
|
|
147
|
+
clearTimeout(timeoutHandle);
|
|
148
|
+
this.activeExecutions.delete(executionId);
|
|
149
|
+
}
|
|
150
|
+
} catch (error) {
|
|
151
|
+
const duration = performance.now() - startTime;
|
|
152
|
+
const executionResult = {
|
|
153
|
+
success: false,
|
|
154
|
+
error: error instanceof Error ? error.message : String(error),
|
|
155
|
+
duration,
|
|
156
|
+
toolName,
|
|
157
|
+
agentId: context.agent.id,
|
|
158
|
+
taskId: context.task?.id,
|
|
159
|
+
metadata: {
|
|
160
|
+
timestamp: new Date(),
|
|
161
|
+
executionId,
|
|
162
|
+
attempts: 1
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
this.updateMetrics(executionResult);
|
|
166
|
+
this.logger.error('MCP tool execution failed', {
|
|
167
|
+
toolName,
|
|
168
|
+
executionId,
|
|
169
|
+
error: executionResult.error,
|
|
170
|
+
duration
|
|
171
|
+
});
|
|
172
|
+
this.emit('tool:failed', executionResult);
|
|
173
|
+
return executionResult;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Execute multiple tools in parallel
|
|
178
|
+
*/ async executeToolsParallel(toolExecutions) {
|
|
179
|
+
if (!this.config.parallelExecution) {
|
|
180
|
+
// Execute sequentially if parallel execution is disabled
|
|
181
|
+
const results = [];
|
|
182
|
+
for (const execution of toolExecutions){
|
|
183
|
+
const result = await this.executeTool(execution.toolName, execution.input, execution.context);
|
|
184
|
+
results.push(result);
|
|
185
|
+
}
|
|
186
|
+
return results;
|
|
187
|
+
}
|
|
188
|
+
this.logger.info('Executing tools in parallel', {
|
|
189
|
+
toolCount: toolExecutions.length,
|
|
190
|
+
maxConcurrent: this.config.maxConcurrentTools
|
|
191
|
+
});
|
|
192
|
+
// Limit concurrent executions
|
|
193
|
+
const semaphore = new Semaphore(this.config.maxConcurrentTools);
|
|
194
|
+
const promises = toolExecutions.map(async (execution)=>{
|
|
195
|
+
await semaphore.acquire();
|
|
196
|
+
try {
|
|
197
|
+
return await this.executeTool(execution.toolName, execution.input, execution.context);
|
|
198
|
+
} finally{
|
|
199
|
+
semaphore.release();
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
const results = await Promise.allSettled(promises);
|
|
203
|
+
return results.map((result, index)=>{
|
|
204
|
+
if (result.status === 'fulfilled') {
|
|
205
|
+
return result.value;
|
|
206
|
+
} else {
|
|
207
|
+
// Create error result
|
|
208
|
+
return {
|
|
209
|
+
success: false,
|
|
210
|
+
error: result.reason instanceof Error ? result.reason.message : String(result.reason),
|
|
211
|
+
duration: 0,
|
|
212
|
+
toolName: toolExecutions[index].toolName,
|
|
213
|
+
agentId: toolExecutions[index].context.agent.id,
|
|
214
|
+
taskId: toolExecutions[index].context.task?.id,
|
|
215
|
+
metadata: {
|
|
216
|
+
timestamp: new Date(),
|
|
217
|
+
executionId: generateId('failed-execution'),
|
|
218
|
+
attempts: 1
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Get available tools with filtering options
|
|
226
|
+
*/ getAvailableTools(options = {}) {
|
|
227
|
+
let tools = Array.from(this.toolRegistry.tools.values());
|
|
228
|
+
// Filter by category
|
|
229
|
+
if (options.category) {
|
|
230
|
+
const categoryTools = this.toolRegistry.categories.get(options.category) || [];
|
|
231
|
+
tools = tools.filter((tool)=>categoryTools.includes(tool.name));
|
|
232
|
+
}
|
|
233
|
+
// Filter by capability
|
|
234
|
+
if (options.capability) {
|
|
235
|
+
const capabilityTools = this.toolRegistry.capabilities.get(options.capability) || [];
|
|
236
|
+
tools = tools.filter((tool)=>capabilityTools.includes(tool.name));
|
|
237
|
+
}
|
|
238
|
+
// Filter by agent permissions
|
|
239
|
+
if (options.agent) {
|
|
240
|
+
tools = tools.filter((tool)=>this.hasPermission(tool, options.agent));
|
|
241
|
+
}
|
|
242
|
+
return tools;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Get tool information
|
|
246
|
+
*/ getToolInfo(toolName) {
|
|
247
|
+
return this.toolRegistry.tools.get(toolName) || null;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Get integration metrics
|
|
251
|
+
*/ getMetrics() {
|
|
252
|
+
return {
|
|
253
|
+
...this.metrics,
|
|
254
|
+
cacheHitRate: this.calculateCacheHitRate(),
|
|
255
|
+
averageExecutionTime: this.calculateAverageExecutionTime(),
|
|
256
|
+
toolUsageDistribution: this.calculateToolUsageDistribution()
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Create MCP execution context for swarm operations
|
|
261
|
+
*/ createExecutionContext(orchestrator, agent, swarmId, task) {
|
|
262
|
+
return {
|
|
263
|
+
sessionId: generateId('mcp-session'),
|
|
264
|
+
orchestrator,
|
|
265
|
+
agent,
|
|
266
|
+
task,
|
|
267
|
+
swarmId,
|
|
268
|
+
executionId: generateId('mcp-execution'),
|
|
269
|
+
timeout: this.config.toolTimeout,
|
|
270
|
+
maxRetries: this.config.maxRetries
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
// Private methods
|
|
274
|
+
async registerClaudeFlowTools() {
|
|
275
|
+
this.logger.info('Registering Claude Flow tools...');
|
|
276
|
+
const claudeFlowTools = createClaudeFlowTools(this.logger);
|
|
277
|
+
for (const tool of claudeFlowTools){
|
|
278
|
+
this.toolRegistry.tools.set(tool.name, tool);
|
|
279
|
+
// Categorize tool
|
|
280
|
+
const category = this.categorizeClaudeFlowTool(tool.name);
|
|
281
|
+
if (!this.toolRegistry.categories.has(category)) {
|
|
282
|
+
this.toolRegistry.categories.set(category, []);
|
|
283
|
+
}
|
|
284
|
+
this.toolRegistry.categories.get(category).push(tool.name);
|
|
285
|
+
// Add capabilities
|
|
286
|
+
const capabilities = this.extractCapabilities(tool);
|
|
287
|
+
for (const capability of capabilities){
|
|
288
|
+
if (!this.toolRegistry.capabilities.has(capability)) {
|
|
289
|
+
this.toolRegistry.capabilities.set(capability, []);
|
|
290
|
+
}
|
|
291
|
+
this.toolRegistry.capabilities.get(capability).push(tool.name);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
this.logger.info(`Registered ${claudeFlowTools.length} Claude Flow tools`);
|
|
295
|
+
}
|
|
296
|
+
async registerRuvSwarmTools() {
|
|
297
|
+
this.logger.info('Registering ruv-swarm tools...');
|
|
298
|
+
const ruvSwarmTools = createRuvSwarmTools(this.logger);
|
|
299
|
+
for (const tool of ruvSwarmTools){
|
|
300
|
+
this.toolRegistry.tools.set(tool.name, tool);
|
|
301
|
+
// Categorize tool
|
|
302
|
+
const category = this.categorizeRuvSwarmTool(tool.name);
|
|
303
|
+
if (!this.toolRegistry.categories.has(category)) {
|
|
304
|
+
this.toolRegistry.categories.set(category, []);
|
|
305
|
+
}
|
|
306
|
+
this.toolRegistry.categories.get(category).push(tool.name);
|
|
307
|
+
// Add capabilities
|
|
308
|
+
const capabilities = this.extractCapabilities(tool);
|
|
309
|
+
for (const capability of capabilities){
|
|
310
|
+
if (!this.toolRegistry.capabilities.has(capability)) {
|
|
311
|
+
this.toolRegistry.capabilities.set(capability, []);
|
|
312
|
+
}
|
|
313
|
+
this.toolRegistry.capabilities.get(capability).push(tool.name);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
this.logger.info(`Registered ${ruvSwarmTools.length} ruv-swarm tools`);
|
|
317
|
+
}
|
|
318
|
+
async executeWithRetry(tool, input, context, executionId, signal) {
|
|
319
|
+
let lastError = null;
|
|
320
|
+
const maxRetries = context.maxRetries || this.config.maxRetries;
|
|
321
|
+
for(let attempt = 1; attempt <= maxRetries; attempt++){
|
|
322
|
+
try {
|
|
323
|
+
// Check if execution was aborted
|
|
324
|
+
if (signal.aborted) {
|
|
325
|
+
throw new Error('Execution aborted');
|
|
326
|
+
}
|
|
327
|
+
this.logger.debug('Executing tool attempt', {
|
|
328
|
+
toolName: tool.name,
|
|
329
|
+
executionId,
|
|
330
|
+
attempt,
|
|
331
|
+
maxRetries
|
|
332
|
+
});
|
|
333
|
+
const result = await tool.handler(input, context);
|
|
334
|
+
if (attempt > 1) {
|
|
335
|
+
this.logger.info('Tool execution succeeded after retry', {
|
|
336
|
+
toolName: tool.name,
|
|
337
|
+
executionId,
|
|
338
|
+
attempt
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
return result;
|
|
342
|
+
} catch (error) {
|
|
343
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
344
|
+
this.logger.warn('Tool execution attempt failed', {
|
|
345
|
+
toolName: tool.name,
|
|
346
|
+
executionId,
|
|
347
|
+
attempt,
|
|
348
|
+
maxRetries,
|
|
349
|
+
error: lastError.message
|
|
350
|
+
});
|
|
351
|
+
// Don't retry on certain errors
|
|
352
|
+
if (this.isNonRetryableError(lastError)) {
|
|
353
|
+
break;
|
|
354
|
+
}
|
|
355
|
+
// Wait before retry (exponential backoff)
|
|
356
|
+
if (attempt < maxRetries) {
|
|
357
|
+
const delay = Math.min(1000 * Math.pow(2, attempt - 1), 10000);
|
|
358
|
+
await new Promise((resolve)=>setTimeout(resolve, delay));
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
throw lastError || new Error('Tool execution failed after all retries');
|
|
363
|
+
}
|
|
364
|
+
isNonRetryableError(error) {
|
|
365
|
+
const nonRetryablePatterns = [
|
|
366
|
+
/not found/i,
|
|
367
|
+
/invalid input/i,
|
|
368
|
+
/permission denied/i,
|
|
369
|
+
/unauthorized/i,
|
|
370
|
+
/forbidden/i
|
|
371
|
+
];
|
|
372
|
+
return nonRetryablePatterns.some((pattern)=>pattern.test(error.message));
|
|
373
|
+
}
|
|
374
|
+
async getCachedResult(toolName, input, context) {
|
|
375
|
+
const cacheKey = this.generateCacheKey(toolName, input, context);
|
|
376
|
+
const cached = this.executionCache.get(cacheKey);
|
|
377
|
+
if (cached) {
|
|
378
|
+
const age = Date.now() - cached.metadata.timestamp.getTime();
|
|
379
|
+
if (age < this.config.cacheTimeout) {
|
|
380
|
+
this.metrics.cacheHits++;
|
|
381
|
+
return cached;
|
|
382
|
+
} else {
|
|
383
|
+
// Remove expired entry
|
|
384
|
+
this.executionCache.delete(cacheKey);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
this.metrics.cacheMisses++;
|
|
388
|
+
return null;
|
|
389
|
+
}
|
|
390
|
+
async cacheResult(toolName, input, context, result) {
|
|
391
|
+
const cacheKey = this.generateCacheKey(toolName, input, context);
|
|
392
|
+
this.executionCache.set(cacheKey, result);
|
|
393
|
+
}
|
|
394
|
+
generateCacheKey(toolName, input, context) {
|
|
395
|
+
const inputHash = this.hashObject(input);
|
|
396
|
+
const contextHash = this.hashObject({
|
|
397
|
+
agentId: context.agent.id,
|
|
398
|
+
swarmId: context.swarmId,
|
|
399
|
+
taskId: context.task?.id
|
|
400
|
+
});
|
|
401
|
+
return `${toolName}:${inputHash}:${contextHash}`;
|
|
402
|
+
}
|
|
403
|
+
hashObject(obj) {
|
|
404
|
+
// Simple hash function for caching
|
|
405
|
+
const str = JSON.stringify(obj, Object.keys(obj).sort());
|
|
406
|
+
let hash = 0;
|
|
407
|
+
for(let i = 0; i < str.length; i++){
|
|
408
|
+
const char = str.charCodeAt(i);
|
|
409
|
+
hash = (hash << 5) - hash + char;
|
|
410
|
+
hash = hash & hash; // Convert to 32bit integer
|
|
411
|
+
}
|
|
412
|
+
return hash.toString(36);
|
|
413
|
+
}
|
|
414
|
+
hasPermission(tool, agent) {
|
|
415
|
+
// Check if agent has permission to use this tool
|
|
416
|
+
const toolPermissions = this.toolRegistry.permissions.get(tool.name) || [];
|
|
417
|
+
// If no specific permissions defined, allow all
|
|
418
|
+
if (toolPermissions.length === 0) {
|
|
419
|
+
return true;
|
|
420
|
+
}
|
|
421
|
+
// Check agent capabilities against tool permissions
|
|
422
|
+
return agent.capabilities.some((capability)=>toolPermissions.includes(capability));
|
|
423
|
+
}
|
|
424
|
+
categorizeClaudeFlowTool(toolName) {
|
|
425
|
+
if (toolName.includes('agents/')) return 'agent-management';
|
|
426
|
+
if (toolName.includes('tasks/')) return 'task-management';
|
|
427
|
+
if (toolName.includes('memory/')) return 'memory-management';
|
|
428
|
+
if (toolName.includes('system/')) return 'system-monitoring';
|
|
429
|
+
if (toolName.includes('config/')) return 'configuration';
|
|
430
|
+
if (toolName.includes('workflow/')) return 'workflow-management';
|
|
431
|
+
if (toolName.includes('terminal/')) return 'terminal-management';
|
|
432
|
+
return 'general';
|
|
433
|
+
}
|
|
434
|
+
categorizeRuvSwarmTool(toolName) {
|
|
435
|
+
if (toolName.includes('swarm_')) return 'swarm-lifecycle';
|
|
436
|
+
if (toolName.includes('agent_')) return 'agent-management';
|
|
437
|
+
if (toolName.includes('task_')) return 'task-orchestration';
|
|
438
|
+
if (toolName.includes('memory_')) return 'memory-persistence';
|
|
439
|
+
if (toolName.includes('neural_')) return 'neural-capabilities';
|
|
440
|
+
if (toolName.includes('benchmark_')) return 'performance-benchmarking';
|
|
441
|
+
return 'general';
|
|
442
|
+
}
|
|
443
|
+
extractCapabilities(tool) {
|
|
444
|
+
const capabilities = [];
|
|
445
|
+
// Extract capabilities from tool name and description
|
|
446
|
+
const text = `${tool.name} ${tool.description}`.toLowerCase();
|
|
447
|
+
const capabilityPatterns = [
|
|
448
|
+
'agent',
|
|
449
|
+
'task',
|
|
450
|
+
'memory',
|
|
451
|
+
'system',
|
|
452
|
+
'config',
|
|
453
|
+
'workflow',
|
|
454
|
+
'terminal',
|
|
455
|
+
'swarm',
|
|
456
|
+
'neural',
|
|
457
|
+
'benchmark',
|
|
458
|
+
'monitoring',
|
|
459
|
+
'orchestration',
|
|
460
|
+
'coordination',
|
|
461
|
+
'analysis',
|
|
462
|
+
'research',
|
|
463
|
+
'development',
|
|
464
|
+
'testing',
|
|
465
|
+
'documentation',
|
|
466
|
+
'optimization'
|
|
467
|
+
];
|
|
468
|
+
for (const pattern of capabilityPatterns){
|
|
469
|
+
if (text.includes(pattern)) {
|
|
470
|
+
capabilities.push(pattern);
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
return capabilities.length > 0 ? capabilities : [
|
|
474
|
+
'general'
|
|
475
|
+
];
|
|
476
|
+
}
|
|
477
|
+
updateMetrics(result) {
|
|
478
|
+
this.metrics.totalExecutions++;
|
|
479
|
+
if (result.success) {
|
|
480
|
+
this.metrics.successfulExecutions++;
|
|
481
|
+
} else {
|
|
482
|
+
this.metrics.failedExecutions++;
|
|
483
|
+
}
|
|
484
|
+
this.metrics.totalExecutionTime += result.duration;
|
|
485
|
+
// Update tool-specific metrics
|
|
486
|
+
if (!this.metrics.toolExecutions.has(result.toolName)) {
|
|
487
|
+
this.metrics.toolExecutions.set(result.toolName, {
|
|
488
|
+
count: 0,
|
|
489
|
+
totalTime: 0,
|
|
490
|
+
successCount: 0,
|
|
491
|
+
failureCount: 0
|
|
492
|
+
});
|
|
493
|
+
}
|
|
494
|
+
const toolStats = this.metrics.toolExecutions.get(result.toolName);
|
|
495
|
+
toolStats.count++;
|
|
496
|
+
toolStats.totalTime += result.duration;
|
|
497
|
+
if (result.success) {
|
|
498
|
+
toolStats.successCount++;
|
|
499
|
+
} else {
|
|
500
|
+
toolStats.failureCount++;
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
calculateCacheHitRate() {
|
|
504
|
+
const total = this.metrics.cacheHits + this.metrics.cacheMisses;
|
|
505
|
+
return total > 0 ? this.metrics.cacheHits / total : 0;
|
|
506
|
+
}
|
|
507
|
+
calculateAverageExecutionTime() {
|
|
508
|
+
return this.metrics.totalExecutions > 0 ? this.metrics.totalExecutionTime / this.metrics.totalExecutions : 0;
|
|
509
|
+
}
|
|
510
|
+
calculateToolUsageDistribution() {
|
|
511
|
+
const distribution = {};
|
|
512
|
+
for (const [toolName, stats] of this.metrics.toolExecutions){
|
|
513
|
+
distribution[toolName] = stats.count;
|
|
514
|
+
}
|
|
515
|
+
return distribution;
|
|
516
|
+
}
|
|
517
|
+
startCacheCleanup() {
|
|
518
|
+
// Clean up expired cache entries every 5 minutes
|
|
519
|
+
setInterval(()=>{
|
|
520
|
+
const now = Date.now();
|
|
521
|
+
const expired = [];
|
|
522
|
+
for (const [key, result] of this.executionCache){
|
|
523
|
+
const age = now - result.metadata.timestamp.getTime();
|
|
524
|
+
if (age > this.config.cacheTimeout) {
|
|
525
|
+
expired.push(key);
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
expired.forEach((key)=>this.executionCache.delete(key));
|
|
529
|
+
if (expired.length > 0) {
|
|
530
|
+
this.logger.debug('Cleaned up expired cache entries', {
|
|
531
|
+
count: expired.length
|
|
532
|
+
});
|
|
533
|
+
}
|
|
534
|
+
}, 300000); // 5 minutes
|
|
535
|
+
}
|
|
536
|
+
initializeToolRegistry() {
|
|
537
|
+
return {
|
|
538
|
+
tools: new Map(),
|
|
539
|
+
categories: new Map(),
|
|
540
|
+
capabilities: new Map(),
|
|
541
|
+
permissions: new Map()
|
|
542
|
+
};
|
|
543
|
+
}
|
|
544
|
+
initializeMetrics() {
|
|
545
|
+
return {
|
|
546
|
+
totalExecutions: 0,
|
|
547
|
+
successfulExecutions: 0,
|
|
548
|
+
failedExecutions: 0,
|
|
549
|
+
totalExecutionTime: 0,
|
|
550
|
+
cacheHits: 0,
|
|
551
|
+
cacheMisses: 0,
|
|
552
|
+
toolExecutions: new Map(),
|
|
553
|
+
cacheHitRate: 0,
|
|
554
|
+
averageExecutionTime: 0,
|
|
555
|
+
toolUsageDistribution: {}
|
|
556
|
+
};
|
|
557
|
+
}
|
|
558
|
+
createDefaultConfig(config) {
|
|
559
|
+
return {
|
|
560
|
+
enableClaudeFlowTools: true,
|
|
561
|
+
enableRuvSwarmTools: true,
|
|
562
|
+
enableCustomTools: true,
|
|
563
|
+
toolTimeout: 30000,
|
|
564
|
+
maxRetries: 3,
|
|
565
|
+
enableCaching: true,
|
|
566
|
+
cacheTimeout: 300000,
|
|
567
|
+
enableMetrics: true,
|
|
568
|
+
enableLogging: true,
|
|
569
|
+
enableErrorRecovery: true,
|
|
570
|
+
parallelExecution: true,
|
|
571
|
+
maxConcurrentTools: 5,
|
|
572
|
+
...config
|
|
573
|
+
};
|
|
574
|
+
}
|
|
575
|
+
setupEventHandlers() {
|
|
576
|
+
this.on('tool:executed', (result)=>{
|
|
577
|
+
if (this.config.enableLogging) {
|
|
578
|
+
this.logger.debug('Tool execution completed', {
|
|
579
|
+
toolName: result.toolName,
|
|
580
|
+
success: result.success,
|
|
581
|
+
duration: result.duration
|
|
582
|
+
});
|
|
583
|
+
}
|
|
584
|
+
});
|
|
585
|
+
this.on('tool:failed', (result)=>{
|
|
586
|
+
if (this.config.enableLogging) {
|
|
587
|
+
this.logger.warn('Tool execution failed', {
|
|
588
|
+
toolName: result.toolName,
|
|
589
|
+
error: result.error,
|
|
590
|
+
duration: result.duration
|
|
591
|
+
});
|
|
592
|
+
}
|
|
593
|
+
});
|
|
594
|
+
}
|
|
595
|
+
constructor(config = {}){
|
|
596
|
+
super(), _define_property(this, "logger", void 0), _define_property(this, "config", void 0), _define_property(this, "toolRegistry", void 0), _define_property(this, "executionCache", new Map()), _define_property(this, "activeExecutions", new Map()), _define_property(this, "metrics", void 0);
|
|
597
|
+
this.logger = new Logger('MCPIntegrationWrapper');
|
|
598
|
+
this.config = this.createDefaultConfig(config);
|
|
599
|
+
this.toolRegistry = this.initializeToolRegistry();
|
|
600
|
+
this.metrics = this.initializeMetrics();
|
|
601
|
+
this.setupEventHandlers();
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
let Semaphore = class Semaphore {
|
|
605
|
+
async acquire() {
|
|
606
|
+
if (this.permits > 0) {
|
|
607
|
+
this.permits--;
|
|
608
|
+
return Promise.resolve();
|
|
609
|
+
}
|
|
610
|
+
return new Promise((resolve)=>{
|
|
611
|
+
this.waitQueue.push(resolve);
|
|
612
|
+
});
|
|
613
|
+
}
|
|
614
|
+
release() {
|
|
615
|
+
if (this.waitQueue.length > 0) {
|
|
616
|
+
const resolve = this.waitQueue.shift();
|
|
617
|
+
resolve();
|
|
618
|
+
} else {
|
|
619
|
+
this.permits++;
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
constructor(permits){
|
|
623
|
+
_define_property(this, "permits", void 0);
|
|
624
|
+
_define_property(this, "waitQueue", []);
|
|
625
|
+
this.permits = permits;
|
|
626
|
+
}
|
|
627
|
+
};
|
|
628
|
+
export default MCPIntegrationWrapper;
|