agentic-flow 2.0.1-alpha.5 ā 2.0.1-alpha.9
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/CHANGELOG.md +26 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/agentdb/controllers/EmbeddingService.d.ts +37 -0
- package/dist/agentdb/controllers/EmbeddingService.d.ts.map +1 -0
- package/dist/agentdb/controllers/EmbeddingService.js +1 -0
- package/dist/agentdb/controllers/EmbeddingService.js.map +1 -0
- package/dist/billing/mcp/tools.d.ts.map +1 -1
- package/dist/billing/mcp/tools.js +2 -0
- package/dist/billing/mcp/tools.js.map +1 -1
- package/dist/cli/commands/hooks.d.ts +18 -0
- package/dist/cli/commands/hooks.d.ts.map +1 -0
- package/dist/cli/commands/hooks.js +750 -0
- package/dist/cli/commands/hooks.js.map +1 -0
- package/dist/cli-proxy.js +26 -1
- package/dist/cli-proxy.js.map +1 -1
- package/dist/core/agentdb-fast.js +3 -3
- package/dist/core/agentdb-fast.js.map +1 -1
- package/dist/core/agentdb-wrapper-enhanced.d.ts.map +1 -1
- package/dist/core/agentdb-wrapper-enhanced.js +32 -17
- package/dist/core/agentdb-wrapper-enhanced.js.map +1 -1
- package/dist/core/attention-native.d.ts +1 -0
- package/dist/core/attention-native.d.ts.map +1 -1
- package/dist/core/attention-native.js +6 -1
- package/dist/core/attention-native.js.map +1 -1
- package/dist/federation/integrations/supabase-adapter-debug.js +3 -3
- package/dist/federation/integrations/supabase-adapter-debug.js.map +1 -1
- package/dist/intelligence/RuVectorIntelligence.d.ts +362 -0
- package/dist/intelligence/RuVectorIntelligence.d.ts.map +1 -0
- package/dist/intelligence/RuVectorIntelligence.js +852 -0
- package/dist/intelligence/RuVectorIntelligence.js.map +1 -0
- package/dist/intelligence/index.d.ts +14 -0
- package/dist/intelligence/index.d.ts.map +1 -0
- package/dist/intelligence/index.js +14 -0
- package/dist/intelligence/index.js.map +1 -0
- package/dist/llm/RuvLLMOrchestrator.d.ts +184 -0
- package/dist/llm/RuvLLMOrchestrator.d.ts.map +1 -0
- package/dist/llm/RuvLLMOrchestrator.js +442 -0
- package/dist/llm/RuvLLMOrchestrator.js.map +1 -0
- package/dist/llm/index.d.ts +9 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +8 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/mcp/claudeFlowSdkServer.d.ts.map +1 -1
- package/dist/mcp/claudeFlowSdkServer.js +86 -21
- package/dist/mcp/claudeFlowSdkServer.js.map +1 -1
- package/dist/mcp/fastmcp/servers/hooks-server.d.ts +15 -0
- package/dist/mcp/fastmcp/servers/hooks-server.d.ts.map +1 -0
- package/dist/mcp/fastmcp/servers/hooks-server.js +63 -0
- package/dist/mcp/fastmcp/servers/hooks-server.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/benchmark.d.ts +20 -0
- package/dist/mcp/fastmcp/tools/hooks/benchmark.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/benchmark.js +110 -0
- package/dist/mcp/fastmcp/tools/hooks/benchmark.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/build-agents.d.ts +7 -0
- package/dist/mcp/fastmcp/tools/hooks/build-agents.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/build-agents.js +276 -0
- package/dist/mcp/fastmcp/tools/hooks/build-agents.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/explain.d.ts +6 -0
- package/dist/mcp/fastmcp/tools/hooks/explain.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/explain.js +164 -0
- package/dist/mcp/fastmcp/tools/hooks/explain.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/index.d.ts +28 -0
- package/dist/mcp/fastmcp/tools/hooks/index.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/index.js +59 -0
- package/dist/mcp/fastmcp/tools/hooks/index.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.d.ts +91 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js +269 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-tools.d.ts +58 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-tools.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-tools.js +416 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-tools.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/metrics.d.ts +6 -0
- package/dist/mcp/fastmcp/tools/hooks/metrics.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/metrics.js +137 -0
- package/dist/mcp/fastmcp/tools/hooks/metrics.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/post-command.d.ts +7 -0
- package/dist/mcp/fastmcp/tools/hooks/post-command.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/post-command.js +91 -0
- package/dist/mcp/fastmcp/tools/hooks/post-command.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/post-edit.d.ts +12 -0
- package/dist/mcp/fastmcp/tools/hooks/post-edit.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/post-edit.js +146 -0
- package/dist/mcp/fastmcp/tools/hooks/post-edit.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-command.d.ts +7 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-command.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-command.js +70 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-command.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-edit.d.ts +14 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-edit.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-edit.js +121 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-edit.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/pretrain.d.ts +7 -0
- package/dist/mcp/fastmcp/tools/hooks/pretrain.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/pretrain.js +171 -0
- package/dist/mcp/fastmcp/tools/hooks/pretrain.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/route.d.ts +12 -0
- package/dist/mcp/fastmcp/tools/hooks/route.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/route.js +267 -0
- package/dist/mcp/fastmcp/tools/hooks/route.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/shared.d.ts +46 -0
- package/dist/mcp/fastmcp/tools/hooks/shared.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/shared.js +159 -0
- package/dist/mcp/fastmcp/tools/hooks/shared.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/transfer.d.ts +7 -0
- package/dist/mcp/fastmcp/tools/hooks/transfer.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/transfer.js +151 -0
- package/dist/mcp/fastmcp/tools/hooks/transfer.js.map +1 -0
- package/dist/mcp/tools/agent-booster-tools.d.ts +10 -1
- package/dist/mcp/tools/agent-booster-tools.d.ts.map +1 -1
- package/dist/mcp/tools/agent-booster-tools.js.map +1 -1
- package/dist/mcp/tools/sona-tools.d.ts.map +1 -1
- package/dist/mcp/tools/sona-tools.js +15 -3
- package/dist/mcp/tools/sona-tools.js.map +1 -1
- package/dist/memory/SharedMemoryPool.d.ts +16 -3
- package/dist/memory/SharedMemoryPool.d.ts.map +1 -1
- package/dist/memory/SharedMemoryPool.js +33 -1
- package/dist/memory/SharedMemoryPool.js.map +1 -1
- package/dist/middleware/auth.middleware.d.ts +114 -0
- package/dist/middleware/auth.middleware.d.ts.map +1 -0
- package/dist/middleware/auth.middleware.js +222 -0
- package/dist/middleware/auth.middleware.js.map +1 -0
- package/dist/optimizations/agent-booster-migration.d.ts.map +1 -1
- package/dist/optimizations/agent-booster-migration.js.map +1 -1
- package/dist/proxy/anthropic-to-gemini.d.ts.map +1 -1
- package/dist/proxy/anthropic-to-gemini.js.map +1 -1
- package/dist/proxy/anthropic-to-openrouter.d.ts.map +1 -1
- package/dist/proxy/anthropic-to-openrouter.js.map +1 -1
- package/dist/proxy/anthropic-to-requesty.d.ts.map +1 -1
- package/dist/proxy/anthropic-to-requesty.js.map +1 -1
- package/dist/proxy/quic-proxy.d.ts +0 -1
- package/dist/proxy/quic-proxy.d.ts.map +1 -1
- package/dist/proxy/quic-proxy.js +2 -1
- package/dist/proxy/quic-proxy.js.map +1 -1
- package/dist/reasoningbank/AdvancedMemory.d.ts.map +1 -1
- package/dist/reasoningbank/AdvancedMemory.js +12 -1
- package/dist/reasoningbank/AdvancedMemory.js.map +1 -1
- package/dist/reasoningbank/HybridBackend.d.ts +9 -0
- package/dist/reasoningbank/HybridBackend.d.ts.map +1 -1
- package/dist/reasoningbank/HybridBackend.js +48 -4
- package/dist/reasoningbank/HybridBackend.js.map +1 -1
- package/dist/reasoningbank/backend-selector.d.ts +1 -1
- package/dist/reasoningbank/backend-selector.d.ts.map +1 -1
- package/dist/reasoningbank/backend-selector.js.map +1 -1
- package/dist/reasoningbank/index-new.d.ts +0 -6
- package/dist/reasoningbank/index-new.d.ts.map +1 -1
- package/dist/reasoningbank/index-new.js +9 -7
- package/dist/reasoningbank/index-new.js.map +1 -1
- package/dist/reasoningbank/index.d.ts +1 -6
- package/dist/reasoningbank/index.d.ts.map +1 -1
- package/dist/reasoningbank/index.js +10 -7
- package/dist/reasoningbank/index.js.map +1 -1
- package/dist/router/providers/onnx-local.d.ts.map +1 -1
- package/dist/router/providers/onnx-local.js +3 -1
- package/dist/router/providers/onnx-local.js.map +1 -1
- package/dist/routing/CircuitBreakerRouter.d.ts +187 -0
- package/dist/routing/CircuitBreakerRouter.d.ts.map +1 -0
- package/dist/routing/CircuitBreakerRouter.js +460 -0
- package/dist/routing/CircuitBreakerRouter.js.map +1 -0
- package/dist/routing/SemanticRouter.d.ts +164 -0
- package/dist/routing/SemanticRouter.d.ts.map +1 -0
- package/dist/routing/SemanticRouter.js +291 -0
- package/dist/routing/SemanticRouter.js.map +1 -0
- package/dist/routing/index.d.ts +12 -0
- package/dist/routing/index.d.ts.map +1 -0
- package/dist/routing/index.js +10 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/services/embedding-service.d.ts.map +1 -1
- package/dist/services/embedding-service.js +5 -2
- package/dist/services/embedding-service.js.map +1 -1
- package/dist/services/sona-agent-training.js +1 -1
- package/dist/services/sona-agent-training.js.map +1 -1
- package/dist/services/sona-agentdb-integration.d.ts.map +1 -1
- package/dist/services/sona-agentdb-integration.js +10 -5
- package/dist/services/sona-agentdb-integration.js.map +1 -1
- package/dist/services/sona-service.d.ts +6 -6
- package/dist/services/sona-service.d.ts.map +1 -1
- package/dist/services/sona-service.js +3 -1
- package/dist/services/sona-service.js.map +1 -1
- package/dist/utils/audit-logger.d.ts +115 -0
- package/dist/utils/audit-logger.d.ts.map +1 -0
- package/dist/utils/audit-logger.js +228 -0
- package/dist/utils/audit-logger.js.map +1 -0
- package/dist/utils/cli.d.ts +1 -1
- package/dist/utils/cli.d.ts.map +1 -1
- package/dist/utils/cli.js +5 -0
- package/dist/utils/cli.js.map +1 -1
- package/dist/utils/input-validator.d.ts +116 -0
- package/dist/utils/input-validator.d.ts.map +1 -0
- package/dist/utils/input-validator.js +299 -0
- package/dist/utils/input-validator.js.map +1 -0
- package/dist/utils/rate-limiter.js +2 -2
- package/dist/utils/rate-limiter.js.map +1 -1
- package/package.json +7 -2
- package/scripts/postinstall.js +68 -0
- package/wasm/reasoningbank/reasoningbank_wasm_bg.js +2 -2
- package/wasm/reasoningbank/reasoningbank_wasm_bg.wasm +0 -0
|
@@ -1,11 +1,41 @@
|
|
|
1
1
|
// In-SDK MCP server for claude-flow tools (no subprocess required)
|
|
2
2
|
import { createSdkMcpServer, tool } from '@anthropic-ai/claude-agent-sdk';
|
|
3
3
|
import { z } from 'zod';
|
|
4
|
-
import {
|
|
4
|
+
import { spawnSync } from 'child_process';
|
|
5
5
|
import { readFileSync, writeFileSync } from 'fs';
|
|
6
6
|
import { extname } from 'path';
|
|
7
7
|
import { logger } from '../utils/logger.js';
|
|
8
8
|
import { AgentBooster } from 'agent-booster';
|
|
9
|
+
/**
|
|
10
|
+
* Sanitize string input to prevent command injection
|
|
11
|
+
* Removes shell metacharacters and validates format
|
|
12
|
+
*/
|
|
13
|
+
function sanitizeInput(input, maxLength = 10000) {
|
|
14
|
+
if (!input || typeof input !== 'string') {
|
|
15
|
+
return '';
|
|
16
|
+
}
|
|
17
|
+
// Limit length to prevent buffer overflow attacks
|
|
18
|
+
const limited = input.slice(0, maxLength);
|
|
19
|
+
// Remove common shell metacharacters
|
|
20
|
+
return limited.replace(/[;&|`$(){}[\]<>\\'"!#]/g, '');
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Execute claude-flow command safely using spawn with arguments array
|
|
24
|
+
*/
|
|
25
|
+
function safeExec(args) {
|
|
26
|
+
const result = spawnSync('npx', ['claude-flow@alpha', ...args], {
|
|
27
|
+
encoding: 'utf-8',
|
|
28
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
29
|
+
shell: false, // Important: disable shell interpretation
|
|
30
|
+
});
|
|
31
|
+
if (result.error) {
|
|
32
|
+
throw result.error;
|
|
33
|
+
}
|
|
34
|
+
if (result.status !== 0) {
|
|
35
|
+
throw new Error(result.stderr || `Command failed with exit code ${result.status}`);
|
|
36
|
+
}
|
|
37
|
+
return result.stdout;
|
|
38
|
+
}
|
|
9
39
|
/**
|
|
10
40
|
* Create an in-SDK MCP server that provides claude-flow memory and coordination tools
|
|
11
41
|
* This runs in-process without spawning Claude Code CLI subprocess
|
|
@@ -22,14 +52,22 @@ export const claudeFlowSdkServer = createSdkMcpServer({
|
|
|
22
52
|
ttl: z.number().optional().describe('Time-to-live in seconds')
|
|
23
53
|
}, async ({ key, value, namespace, ttl }) => {
|
|
24
54
|
try {
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
|
|
55
|
+
// Sanitize inputs to prevent command injection
|
|
56
|
+
const safeKey = sanitizeInput(key, 256);
|
|
57
|
+
const safeValue = sanitizeInput(value, 10000);
|
|
58
|
+
const safeNamespace = sanitizeInput(namespace || 'default', 64);
|
|
59
|
+
logger.info('Storing memory', { key: safeKey, namespace: safeNamespace });
|
|
60
|
+
// Use safe execution with argument array
|
|
61
|
+
const args = ['memory', 'store', safeKey, safeValue, '--namespace', safeNamespace];
|
|
62
|
+
if (ttl && typeof ttl === 'number' && ttl > 0) {
|
|
63
|
+
args.push('--ttl', String(ttl));
|
|
64
|
+
}
|
|
65
|
+
const result = safeExec(args);
|
|
66
|
+
logger.info('Memory stored successfully', { key: safeKey });
|
|
29
67
|
return {
|
|
30
68
|
content: [{
|
|
31
69
|
type: 'text',
|
|
32
|
-
text: `ā
Stored successfully\nš Key: ${
|
|
70
|
+
text: `ā
Stored successfully\nš Key: ${safeKey}\nš¦ Namespace: ${safeNamespace}\nš¾ Size: ${safeValue.length} bytes`
|
|
33
71
|
}]
|
|
34
72
|
};
|
|
35
73
|
}
|
|
@@ -50,8 +88,10 @@ export const claudeFlowSdkServer = createSdkMcpServer({
|
|
|
50
88
|
namespace: z.string().optional().default('default').describe('Memory namespace')
|
|
51
89
|
}, async ({ key, namespace }) => {
|
|
52
90
|
try {
|
|
53
|
-
|
|
54
|
-
const
|
|
91
|
+
// Sanitize inputs
|
|
92
|
+
const safeKey = sanitizeInput(key, 256);
|
|
93
|
+
const safeNamespace = sanitizeInput(namespace || 'default', 64);
|
|
94
|
+
const result = safeExec(['memory', 'retrieve', safeKey, '--namespace', safeNamespace]);
|
|
55
95
|
return {
|
|
56
96
|
content: [{
|
|
57
97
|
type: 'text',
|
|
@@ -76,8 +116,15 @@ export const claudeFlowSdkServer = createSdkMcpServer({
|
|
|
76
116
|
limit: z.number().optional().default(10).describe('Maximum results to return')
|
|
77
117
|
}, async ({ pattern, namespace, limit }) => {
|
|
78
118
|
try {
|
|
79
|
-
|
|
80
|
-
const
|
|
119
|
+
// Sanitize inputs
|
|
120
|
+
const safePattern = sanitizeInput(pattern, 256);
|
|
121
|
+
const safeNamespace = sanitizeInput(namespace || '', 64);
|
|
122
|
+
const args = ['memory', 'search', safePattern];
|
|
123
|
+
if (safeNamespace) {
|
|
124
|
+
args.push('--namespace', safeNamespace);
|
|
125
|
+
}
|
|
126
|
+
args.push('--limit', String(limit));
|
|
127
|
+
const result = safeExec(args);
|
|
81
128
|
return {
|
|
82
129
|
content: [{
|
|
83
130
|
type: 'text',
|
|
@@ -102,8 +149,13 @@ export const claudeFlowSdkServer = createSdkMcpServer({
|
|
|
102
149
|
strategy: z.enum(['balanced', 'specialized', 'adaptive']).optional().default('balanced').describe('Agent distribution strategy')
|
|
103
150
|
}, async ({ topology, maxAgents, strategy }) => {
|
|
104
151
|
try {
|
|
105
|
-
|
|
106
|
-
const result =
|
|
152
|
+
// Topology, maxAgents, and strategy are validated by zod enum/number
|
|
153
|
+
const result = safeExec([
|
|
154
|
+
'swarm', 'init',
|
|
155
|
+
'--topology', topology,
|
|
156
|
+
'--max-agents', String(maxAgents),
|
|
157
|
+
'--strategy', strategy || 'balanced'
|
|
158
|
+
]);
|
|
107
159
|
return {
|
|
108
160
|
content: [{
|
|
109
161
|
type: 'text',
|
|
@@ -128,10 +180,16 @@ export const claudeFlowSdkServer = createSdkMcpServer({
|
|
|
128
180
|
name: z.string().optional().describe('Custom agent name')
|
|
129
181
|
}, async ({ type, capabilities, name }) => {
|
|
130
182
|
try {
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
183
|
+
const args = ['agent', 'spawn', '--type', type];
|
|
184
|
+
if (capabilities && capabilities.length > 0) {
|
|
185
|
+
// Sanitize each capability
|
|
186
|
+
const safeCaps = capabilities.map(c => sanitizeInput(c, 64)).join(',');
|
|
187
|
+
args.push('--capabilities', safeCaps);
|
|
188
|
+
}
|
|
189
|
+
if (name) {
|
|
190
|
+
args.push('--name', sanitizeInput(name, 64));
|
|
191
|
+
}
|
|
192
|
+
const result = safeExec(args);
|
|
135
193
|
return {
|
|
136
194
|
content: [{
|
|
137
195
|
type: 'text',
|
|
@@ -157,9 +215,13 @@ export const claudeFlowSdkServer = createSdkMcpServer({
|
|
|
157
215
|
maxAgents: z.number().optional().describe('Maximum agents to use for this task')
|
|
158
216
|
}, async ({ task, strategy, priority, maxAgents }) => {
|
|
159
217
|
try {
|
|
160
|
-
|
|
161
|
-
const
|
|
162
|
-
const
|
|
218
|
+
// Sanitize task description
|
|
219
|
+
const safeTask = sanitizeInput(task, 2000);
|
|
220
|
+
const args = ['task', 'orchestrate', safeTask, '--strategy', strategy || 'adaptive', '--priority', priority || 'medium'];
|
|
221
|
+
if (maxAgents && typeof maxAgents === 'number' && maxAgents > 0) {
|
|
222
|
+
args.push('--max-agents', String(maxAgents));
|
|
223
|
+
}
|
|
224
|
+
const result = safeExec(args);
|
|
163
225
|
return {
|
|
164
226
|
content: [{
|
|
165
227
|
type: 'text',
|
|
@@ -182,8 +244,11 @@ export const claudeFlowSdkServer = createSdkMcpServer({
|
|
|
182
244
|
verbose: z.boolean().optional().default(false).describe('Include detailed metrics')
|
|
183
245
|
}, async ({ verbose }) => {
|
|
184
246
|
try {
|
|
185
|
-
const
|
|
186
|
-
|
|
247
|
+
const args = ['swarm', 'status'];
|
|
248
|
+
if (verbose) {
|
|
249
|
+
args.push('--verbose');
|
|
250
|
+
}
|
|
251
|
+
const result = safeExec(args);
|
|
187
252
|
return {
|
|
188
253
|
content: [{
|
|
189
254
|
type: 'text',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeFlowSdkServer.js","sourceRoot":"","sources":["../../src/mcp/claudeFlowSdkServer.ts"],"names":[],"mappings":"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","sourcesContent":["// In-SDK MCP server for claude-flow tools (no subprocess required)\nimport { createSdkMcpServer, tool } from '@anthropic-ai/claude-agent-sdk';\nimport { z } from 'zod';\nimport { execSync } from 'child_process';\nimport { readFileSync, writeFileSync } from 'fs';\nimport { extname } from 'path';\nimport { logger } from '../utils/logger.js';\nimport { AgentBooster } from 'agent-booster';\n\n/**\n * Create an in-SDK MCP server that provides claude-flow memory and coordination tools\n * This runs in-process without spawning Claude Code CLI subprocess\n */\nexport const claudeFlowSdkServer = createSdkMcpServer({\n name: 'claude-flow-sdk',\n version: '1.0.0',\n\n tools: [\n // Memory storage tool\n tool(\n 'memory_store',\n 'Store a value in persistent memory with optional namespace and TTL',\n {\n key: z.string().describe('Memory key'),\n value: z.string().describe('Value to store'),\n namespace: z.string().optional().default('default').describe('Memory namespace'),\n ttl: z.number().optional().describe('Time-to-live in seconds')\n },\n async ({ key, value, namespace, ttl }) => {\n try {\n logger.info('Storing memory', { key, namespace });\n const cmd = `npx claude-flow@alpha memory store \"${key}\" \"${value}\" --namespace \"${namespace}\"${ttl ? ` --ttl ${ttl}` : ''}`;\n const result = execSync(cmd, { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });\n\n logger.info('Memory stored successfully', { key });\n return {\n content: [{\n type: 'text',\n text: `ā
Stored successfully\\nš Key: ${key}\\nš¦ Namespace: ${namespace}\\nš¾ Size: ${value.length} bytes`\n }]\n };\n } catch (error: any) {\n logger.error('Failed to store memory', { error: error.message });\n return {\n content: [{\n type: 'text',\n text: `ā Failed to store: ${error.message}`\n }],\n isError: true\n };\n }\n }\n ),\n\n // Memory retrieval tool\n tool(\n 'memory_retrieve',\n 'Retrieve a value from persistent memory',\n {\n key: z.string().describe('Memory key'),\n namespace: z.string().optional().default('default').describe('Memory namespace')\n },\n async ({ key, namespace }) => {\n try {\n const cmd = `npx claude-flow@alpha memory retrieve \"${key}\" --namespace \"${namespace}\"`;\n const result = execSync(cmd, { encoding: 'utf-8' });\n\n return {\n content: [{\n type: 'text',\n text: `ā
Retrieved:\\n${result}`\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: `ā Failed to retrieve: ${error.message}`\n }],\n isError: true\n };\n }\n }\n ),\n\n // Memory search tool\n tool(\n 'memory_search',\n 'Search for keys matching a pattern in memory',\n {\n pattern: z.string().describe('Search pattern (supports wildcards)'),\n namespace: z.string().optional().describe('Memory namespace to search in'),\n limit: z.number().optional().default(10).describe('Maximum results to return')\n },\n async ({ pattern, namespace, limit }) => {\n try {\n const cmd = `npx claude-flow@alpha memory search \"${pattern}\"${namespace ? ` --namespace \"${namespace}\"` : ''} --limit ${limit}`;\n const result = execSync(cmd, { encoding: 'utf-8' });\n\n return {\n content: [{\n type: 'text',\n text: `š Search results:\\n${result}`\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: `ā Search failed: ${error.message}`\n }],\n isError: true\n };\n }\n }\n ),\n\n // Swarm initialization tool\n tool(\n 'swarm_init',\n 'Initialize a multi-agent swarm with specified topology',\n {\n topology: z.enum(['mesh', 'hierarchical', 'ring', 'star']).describe('Swarm topology'),\n maxAgents: z.number().optional().default(8).describe('Maximum number of agents'),\n strategy: z.enum(['balanced', 'specialized', 'adaptive']).optional().default('balanced').describe('Agent distribution strategy')\n },\n async ({ topology, maxAgents, strategy }) => {\n try {\n const cmd = `npx claude-flow@alpha swarm init --topology ${topology} --max-agents ${maxAgents} --strategy ${strategy}`;\n const result = execSync(cmd, { encoding: 'utf-8' });\n\n return {\n content: [{\n type: 'text',\n text: `š Swarm initialized:\\n${result}`\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: `ā Swarm init failed: ${error.message}`\n }],\n isError: true\n };\n }\n }\n ),\n\n // Agent spawn tool\n tool(\n 'agent_spawn',\n 'Spawn a new agent in the swarm',\n {\n type: z.enum(['researcher', 'coder', 'analyst', 'optimizer', 'coordinator']).describe('Agent type'),\n capabilities: z.array(z.string()).optional().describe('Agent capabilities'),\n name: z.string().optional().describe('Custom agent name')\n },\n async ({ type, capabilities, name }) => {\n try {\n const capStr = capabilities ? ` --capabilities \"${capabilities.join(',')}\"` : '';\n const nameStr = name ? ` --name \"${name}\"` : '';\n const cmd = `npx claude-flow@alpha agent spawn --type ${type}${capStr}${nameStr}`;\n const result = execSync(cmd, { encoding: 'utf-8' });\n\n return {\n content: [{\n type: 'text',\n text: `š¤ Agent spawned:\\n${result}`\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: `ā Agent spawn failed: ${error.message}`\n }],\n isError: true\n };\n }\n }\n ),\n\n // Task orchestration tool\n tool(\n 'task_orchestrate',\n 'Orchestrate a complex task across the swarm',\n {\n task: z.string().describe('Task description or instructions'),\n strategy: z.enum(['parallel', 'sequential', 'adaptive']).optional().default('adaptive').describe('Execution strategy'),\n priority: z.enum(['low', 'medium', 'high', 'critical']).optional().default('medium').describe('Task priority'),\n maxAgents: z.number().optional().describe('Maximum agents to use for this task')\n },\n async ({ task, strategy, priority, maxAgents }) => {\n try {\n const maxStr = maxAgents ? ` --max-agents ${maxAgents}` : '';\n const cmd = `npx claude-flow@alpha task orchestrate \"${task}\" --strategy ${strategy} --priority ${priority}${maxStr}`;\n const result = execSync(cmd, { encoding: 'utf-8' });\n\n return {\n content: [{\n type: 'text',\n text: `ā” Task orchestrated:\\n${result}`\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: `ā Task orchestration failed: ${error.message}`\n }],\n isError: true\n };\n }\n }\n ),\n\n // Swarm status tool\n tool(\n 'swarm_status',\n 'Get current swarm status and metrics',\n {\n verbose: z.boolean().optional().default(false).describe('Include detailed metrics')\n },\n async ({ verbose }) => {\n try {\n const cmd = `npx claude-flow@alpha swarm status${verbose ? ' --verbose' : ''}`;\n const result = execSync(cmd, { encoding: 'utf-8' });\n\n return {\n content: [{\n type: 'text',\n text: `š Swarm status:\\n${result}`\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: `ā Status check failed: ${error.message}`\n }],\n isError: true\n };\n }\n }\n ),\n\n // Agent Booster - Ultra-fast code editing\n tool(\n 'agent_booster_edit_file',\n 'Ultra-fast code editing (352x faster than cloud APIs, $0 cost). Apply precise code edits using Agent Booster\\'s local WASM engine.',\n {\n target_filepath: z.string().describe('Path of the file to modify'),\n instructions: z.string().describe('Description of what changes to make'),\n code_edit: z.string().describe('The new code or edit to apply'),\n language: z.string().optional().describe('Programming language (auto-detected if not provided)')\n },\n async ({ target_filepath, instructions, code_edit, language }) => {\n try {\n // Initialize Agent Booster\n const booster = new AgentBooster({ confidenceThreshold: 0.5 });\n\n // Read original file\n const originalCode = readFileSync(target_filepath, 'utf8');\n\n // Auto-detect language if not provided\n const lang = language || extname(target_filepath).slice(1);\n\n // Apply edit\n const result = await booster.apply({\n code: originalCode,\n edit: code_edit,\n language: lang\n });\n\n // Write if successful\n if (result.success) {\n writeFileSync(target_filepath, result.output, 'utf8');\n }\n\n return {\n content: [{\n type: 'text',\n text: `ā” Agent Booster Edit Result:\\n` +\n `š File: ${target_filepath}\\n` +\n `ā
Success: ${result.success}\\n` +\n `ā±ļø Latency: ${result.latency}ms\\n` +\n `šÆ Confidence: ${(result.confidence * 100).toFixed(1)}%\\n` +\n `š§ Strategy: ${result.strategy}\\n` +\n `š Speedup: ~${Math.round(352 / result.latency)}x vs cloud APIs\\n` +\n `š° Cost: $0 (vs ~$0.01 for cloud API)\\n\\n` +\n `${result.success ? '⨠Edit applied successfully!' : 'ā Edit failed - check confidence score'}`\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: `ā Agent Booster edit failed: ${error.message}`\n }],\n isError: true\n };\n }\n }\n ),\n\n // Agent Booster - Batch editing\n tool(\n 'agent_booster_batch_edit',\n 'Apply multiple code edits in parallel using Agent Booster. Perfect for multi-file refactoring.',\n {\n edits: z.array(z.object({\n target_filepath: z.string(),\n instructions: z.string(),\n code_edit: z.string(),\n language: z.string().optional()\n })).describe('Array of edit operations to apply')\n },\n async ({ edits }) => {\n try {\n const booster = new AgentBooster({ confidenceThreshold: 0.5 });\n let successCount = 0;\n let totalLatency = 0;\n const results: string[] = [];\n\n for (const edit of edits) {\n const originalCode = readFileSync(edit.target_filepath, 'utf8');\n const lang = edit.language || extname(edit.target_filepath).slice(1);\n\n const result = await booster.apply({\n code: originalCode,\n edit: edit.code_edit,\n language: lang\n });\n\n if (result.success) {\n writeFileSync(edit.target_filepath, result.output, 'utf8');\n successCount++;\n }\n\n totalLatency += result.latency;\n results.push(` ${result.success ? 'ā
' : 'ā'} ${edit.target_filepath} (${result.latency}ms, ${(result.confidence * 100).toFixed(0)}%)`);\n }\n\n const avgLatency = totalLatency / edits.length;\n const avgSpeedup = Math.round(352 / avgLatency);\n\n return {\n content: [{\n type: 'text',\n text: `ā” Agent Booster Batch Edit Results:\\n\\n` +\n `š Summary:\\n` +\n ` Total edits: ${edits.length}\\n` +\n ` Successful: ${successCount}\\n` +\n ` Failed: ${edits.length - successCount}\\n` +\n ` Total time: ${totalLatency.toFixed(1)}ms\\n` +\n ` Avg latency: ${avgLatency.toFixed(1)}ms\\n` +\n ` Avg speedup: ~${avgSpeedup}x vs cloud APIs\\n` +\n ` Cost savings: ~$${(edits.length * 0.01).toFixed(2)}\\n\\n` +\n `š Results:\\n${results.join('\\n')}`\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: `ā Batch edit failed: ${error.message}`\n }],\n isError: true\n };\n }\n }\n )\n ]\n});\n"]}
|
|
1
|
+
{"version":3,"file":"claudeFlowSdkServer.js","sourceRoot":"","sources":["../../src/mcp/claudeFlowSdkServer.ts"],"names":[],"mappings":"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","sourcesContent":["// In-SDK MCP server for claude-flow tools (no subprocess required)\nimport { createSdkMcpServer, tool } from '@anthropic-ai/claude-agent-sdk';\nimport { z } from 'zod';\nimport { spawnSync } from 'child_process';\nimport { readFileSync, writeFileSync } from 'fs';\nimport { extname } from 'path';\nimport { logger } from '../utils/logger.js';\nimport { AgentBooster } from 'agent-booster';\n\n/**\n * Sanitize string input to prevent command injection\n * Removes shell metacharacters and validates format\n */\nfunction sanitizeInput(input: string, maxLength: number = 10000): string {\n if (!input || typeof input !== 'string') {\n return '';\n }\n // Limit length to prevent buffer overflow attacks\n const limited = input.slice(0, maxLength);\n // Remove common shell metacharacters\n return limited.replace(/[;&|`$(){}[\\]<>\\\\'\"!#]/g, '');\n}\n\n/**\n * Execute claude-flow command safely using spawn with arguments array\n */\nfunction safeExec(args: string[]): string {\n const result = spawnSync('npx', ['claude-flow@alpha', ...args], {\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024,\n shell: false, // Important: disable shell interpretation\n });\n if (result.error) {\n throw result.error;\n }\n if (result.status !== 0) {\n throw new Error(result.stderr || `Command failed with exit code ${result.status}`);\n }\n return result.stdout;\n}\n\n/**\n * Create an in-SDK MCP server that provides claude-flow memory and coordination tools\n * This runs in-process without spawning Claude Code CLI subprocess\n */\nexport const claudeFlowSdkServer = createSdkMcpServer({\n name: 'claude-flow-sdk',\n version: '1.0.0',\n\n tools: [\n // Memory storage tool\n tool(\n 'memory_store',\n 'Store a value in persistent memory with optional namespace and TTL',\n {\n key: z.string().describe('Memory key'),\n value: z.string().describe('Value to store'),\n namespace: z.string().optional().default('default').describe('Memory namespace'),\n ttl: z.number().optional().describe('Time-to-live in seconds')\n },\n async ({ key, value, namespace, ttl }) => {\n try {\n // Sanitize inputs to prevent command injection\n const safeKey = sanitizeInput(key, 256);\n const safeValue = sanitizeInput(value, 10000);\n const safeNamespace = sanitizeInput(namespace || 'default', 64);\n\n logger.info('Storing memory', { key: safeKey, namespace: safeNamespace });\n\n // Use safe execution with argument array\n const args = ['memory', 'store', safeKey, safeValue, '--namespace', safeNamespace];\n if (ttl && typeof ttl === 'number' && ttl > 0) {\n args.push('--ttl', String(ttl));\n }\n const result = safeExec(args);\n\n logger.info('Memory stored successfully', { key: safeKey });\n return {\n content: [{\n type: 'text',\n text: `ā
Stored successfully\\nš Key: ${safeKey}\\nš¦ Namespace: ${safeNamespace}\\nš¾ Size: ${safeValue.length} bytes`\n }]\n };\n } catch (error: any) {\n logger.error('Failed to store memory', { error: error.message });\n return {\n content: [{\n type: 'text',\n text: `ā Failed to store: ${error.message}`\n }],\n isError: true\n };\n }\n }\n ),\n\n // Memory retrieval tool\n tool(\n 'memory_retrieve',\n 'Retrieve a value from persistent memory',\n {\n key: z.string().describe('Memory key'),\n namespace: z.string().optional().default('default').describe('Memory namespace')\n },\n async ({ key, namespace }) => {\n try {\n // Sanitize inputs\n const safeKey = sanitizeInput(key, 256);\n const safeNamespace = sanitizeInput(namespace || 'default', 64);\n\n const result = safeExec(['memory', 'retrieve', safeKey, '--namespace', safeNamespace]);\n\n return {\n content: [{\n type: 'text',\n text: `ā
Retrieved:\\n${result}`\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: `ā Failed to retrieve: ${error.message}`\n }],\n isError: true\n };\n }\n }\n ),\n\n // Memory search tool\n tool(\n 'memory_search',\n 'Search for keys matching a pattern in memory',\n {\n pattern: z.string().describe('Search pattern (supports wildcards)'),\n namespace: z.string().optional().describe('Memory namespace to search in'),\n limit: z.number().optional().default(10).describe('Maximum results to return')\n },\n async ({ pattern, namespace, limit }) => {\n try {\n // Sanitize inputs\n const safePattern = sanitizeInput(pattern, 256);\n const safeNamespace = sanitizeInput(namespace || '', 64);\n\n const args = ['memory', 'search', safePattern];\n if (safeNamespace) {\n args.push('--namespace', safeNamespace);\n }\n args.push('--limit', String(limit));\n const result = safeExec(args);\n\n return {\n content: [{\n type: 'text',\n text: `š Search results:\\n${result}`\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: `ā Search failed: ${error.message}`\n }],\n isError: true\n };\n }\n }\n ),\n\n // Swarm initialization tool\n tool(\n 'swarm_init',\n 'Initialize a multi-agent swarm with specified topology',\n {\n topology: z.enum(['mesh', 'hierarchical', 'ring', 'star']).describe('Swarm topology'),\n maxAgents: z.number().optional().default(8).describe('Maximum number of agents'),\n strategy: z.enum(['balanced', 'specialized', 'adaptive']).optional().default('balanced').describe('Agent distribution strategy')\n },\n async ({ topology, maxAgents, strategy }) => {\n try {\n // Topology, maxAgents, and strategy are validated by zod enum/number\n const result = safeExec([\n 'swarm', 'init',\n '--topology', topology,\n '--max-agents', String(maxAgents),\n '--strategy', strategy || 'balanced'\n ]);\n\n return {\n content: [{\n type: 'text',\n text: `š Swarm initialized:\\n${result}`\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: `ā Swarm init failed: ${error.message}`\n }],\n isError: true\n };\n }\n }\n ),\n\n // Agent spawn tool\n tool(\n 'agent_spawn',\n 'Spawn a new agent in the swarm',\n {\n type: z.enum(['researcher', 'coder', 'analyst', 'optimizer', 'coordinator']).describe('Agent type'),\n capabilities: z.array(z.string()).optional().describe('Agent capabilities'),\n name: z.string().optional().describe('Custom agent name')\n },\n async ({ type, capabilities, name }) => {\n try {\n const args = ['agent', 'spawn', '--type', type];\n if (capabilities && capabilities.length > 0) {\n // Sanitize each capability\n const safeCaps = capabilities.map(c => sanitizeInput(c, 64)).join(',');\n args.push('--capabilities', safeCaps);\n }\n if (name) {\n args.push('--name', sanitizeInput(name, 64));\n }\n const result = safeExec(args);\n\n return {\n content: [{\n type: 'text',\n text: `š¤ Agent spawned:\\n${result}`\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: `ā Agent spawn failed: ${error.message}`\n }],\n isError: true\n };\n }\n }\n ),\n\n // Task orchestration tool\n tool(\n 'task_orchestrate',\n 'Orchestrate a complex task across the swarm',\n {\n task: z.string().describe('Task description or instructions'),\n strategy: z.enum(['parallel', 'sequential', 'adaptive']).optional().default('adaptive').describe('Execution strategy'),\n priority: z.enum(['low', 'medium', 'high', 'critical']).optional().default('medium').describe('Task priority'),\n maxAgents: z.number().optional().describe('Maximum agents to use for this task')\n },\n async ({ task, strategy, priority, maxAgents }) => {\n try {\n // Sanitize task description\n const safeTask = sanitizeInput(task, 2000);\n const args = ['task', 'orchestrate', safeTask, '--strategy', strategy || 'adaptive', '--priority', priority || 'medium'];\n if (maxAgents && typeof maxAgents === 'number' && maxAgents > 0) {\n args.push('--max-agents', String(maxAgents));\n }\n const result = safeExec(args);\n\n return {\n content: [{\n type: 'text',\n text: `ā” Task orchestrated:\\n${result}`\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: `ā Task orchestration failed: ${error.message}`\n }],\n isError: true\n };\n }\n }\n ),\n\n // Swarm status tool\n tool(\n 'swarm_status',\n 'Get current swarm status and metrics',\n {\n verbose: z.boolean().optional().default(false).describe('Include detailed metrics')\n },\n async ({ verbose }) => {\n try {\n const args = ['swarm', 'status'];\n if (verbose) {\n args.push('--verbose');\n }\n const result = safeExec(args);\n\n return {\n content: [{\n type: 'text',\n text: `š Swarm status:\\n${result}`\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: `ā Status check failed: ${error.message}`\n }],\n isError: true\n };\n }\n }\n ),\n\n // Agent Booster - Ultra-fast code editing\n tool(\n 'agent_booster_edit_file',\n 'Ultra-fast code editing (352x faster than cloud APIs, $0 cost). Apply precise code edits using Agent Booster\\'s local WASM engine.',\n {\n target_filepath: z.string().describe('Path of the file to modify'),\n instructions: z.string().describe('Description of what changes to make'),\n code_edit: z.string().describe('The new code or edit to apply'),\n language: z.string().optional().describe('Programming language (auto-detected if not provided)')\n },\n async ({ target_filepath, instructions, code_edit, language }) => {\n try {\n // Initialize Agent Booster\n const booster = new AgentBooster({ confidenceThreshold: 0.5 });\n\n // Read original file\n const originalCode = readFileSync(target_filepath, 'utf8');\n\n // Auto-detect language if not provided\n const lang = language || extname(target_filepath).slice(1);\n\n // Apply edit\n const result = await booster.apply({\n code: originalCode,\n edit: code_edit,\n language: lang\n });\n\n // Write if successful\n if (result.success) {\n writeFileSync(target_filepath, result.output, 'utf8');\n }\n\n return {\n content: [{\n type: 'text',\n text: `ā” Agent Booster Edit Result:\\n` +\n `š File: ${target_filepath}\\n` +\n `ā
Success: ${result.success}\\n` +\n `ā±ļø Latency: ${result.latency}ms\\n` +\n `šÆ Confidence: ${(result.confidence * 100).toFixed(1)}%\\n` +\n `š§ Strategy: ${result.strategy}\\n` +\n `š Speedup: ~${Math.round(352 / result.latency)}x vs cloud APIs\\n` +\n `š° Cost: $0 (vs ~$0.01 for cloud API)\\n\\n` +\n `${result.success ? '⨠Edit applied successfully!' : 'ā Edit failed - check confidence score'}`\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: `ā Agent Booster edit failed: ${error.message}`\n }],\n isError: true\n };\n }\n }\n ),\n\n // Agent Booster - Batch editing\n tool(\n 'agent_booster_batch_edit',\n 'Apply multiple code edits in parallel using Agent Booster. Perfect for multi-file refactoring.',\n {\n edits: z.array(z.object({\n target_filepath: z.string(),\n instructions: z.string(),\n code_edit: z.string(),\n language: z.string().optional()\n })).describe('Array of edit operations to apply')\n },\n async ({ edits }) => {\n try {\n const booster = new AgentBooster({ confidenceThreshold: 0.5 });\n let successCount = 0;\n let totalLatency = 0;\n const results: string[] = [];\n\n for (const edit of edits) {\n const originalCode = readFileSync(edit.target_filepath, 'utf8');\n const lang = edit.language || extname(edit.target_filepath).slice(1);\n\n const result = await booster.apply({\n code: originalCode,\n edit: edit.code_edit,\n language: lang\n });\n\n if (result.success) {\n writeFileSync(edit.target_filepath, result.output, 'utf8');\n successCount++;\n }\n\n totalLatency += result.latency;\n results.push(` ${result.success ? 'ā
' : 'ā'} ${edit.target_filepath} (${result.latency}ms, ${(result.confidence * 100).toFixed(0)}%)`);\n }\n\n const avgLatency = totalLatency / edits.length;\n const avgSpeedup = Math.round(352 / avgLatency);\n\n return {\n content: [{\n type: 'text',\n text: `ā” Agent Booster Batch Edit Results:\\n\\n` +\n `š Summary:\\n` +\n ` Total edits: ${edits.length}\\n` +\n ` Successful: ${successCount}\\n` +\n ` Failed: ${edits.length - successCount}\\n` +\n ` Total time: ${totalLatency.toFixed(1)}ms\\n` +\n ` Avg latency: ${avgLatency.toFixed(1)}ms\\n` +\n ` Avg speedup: ~${avgSpeedup}x vs cloud APIs\\n` +\n ` Cost savings: ~$${(edits.length * 0.01).toFixed(2)}\\n\\n` +\n `š Results:\\n${results.join('\\n')}`\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: `ā Batch edit failed: ${error.message}`\n }],\n isError: true\n };\n }\n }\n )\n ]\n});\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* FastMCP Hook Server - Intelligent agent routing and self-learning
|
|
4
|
+
*
|
|
5
|
+
* 19 tools total:
|
|
6
|
+
* - 10 hook tools (pre/post edit, command, routing, etc.)
|
|
7
|
+
* - 9 intelligence tools (SONA, attention, trajectory, patterns)
|
|
8
|
+
*
|
|
9
|
+
* RuVector Intelligence Features:
|
|
10
|
+
* - @ruvector/sona: Micro-LoRA (~0.05ms), EWC++, Trajectory tracking
|
|
11
|
+
* - @ruvector/attention: MoE, Flash, Hyperbolic, Graph attention
|
|
12
|
+
* - ruvector core: HNSW indexing (150x faster)
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=hooks-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-server.d.ts","sourceRoot":"","sources":["../../../../src/mcp/fastmcp/servers/hooks-server.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* FastMCP Hook Server - Intelligent agent routing and self-learning
|
|
4
|
+
*
|
|
5
|
+
* 19 tools total:
|
|
6
|
+
* - 10 hook tools (pre/post edit, command, routing, etc.)
|
|
7
|
+
* - 9 intelligence tools (SONA, attention, trajectory, patterns)
|
|
8
|
+
*
|
|
9
|
+
* RuVector Intelligence Features:
|
|
10
|
+
* - @ruvector/sona: Micro-LoRA (~0.05ms), EWC++, Trajectory tracking
|
|
11
|
+
* - @ruvector/attention: MoE, Flash, Hyperbolic, Graph attention
|
|
12
|
+
* - ruvector core: HNSW indexing (150x faster)
|
|
13
|
+
*/
|
|
14
|
+
import { FastMCP } from 'fastmcp';
|
|
15
|
+
import { allHookTools, hookTools, intelligenceTools } from '../tools/hooks/index.js';
|
|
16
|
+
console.error('š§ Starting FastMCP Hook Server with RuVector Intelligence...');
|
|
17
|
+
console.error(`š¦ Loading ${allHookTools.length} tools (${hookTools.length} hooks + ${intelligenceTools.length} intelligence)`);
|
|
18
|
+
// Create server
|
|
19
|
+
const server = new FastMCP({
|
|
20
|
+
name: 'agentic-flow-hooks',
|
|
21
|
+
version: '2.0.0'
|
|
22
|
+
});
|
|
23
|
+
// Register all hook tools (includes intelligence tools)
|
|
24
|
+
for (const tool of allHookTools) {
|
|
25
|
+
server.addTool({
|
|
26
|
+
name: tool.name,
|
|
27
|
+
description: tool.description,
|
|
28
|
+
parameters: tool.parameters,
|
|
29
|
+
execute: async (args) => {
|
|
30
|
+
const result = await tool.execute(args, {
|
|
31
|
+
onProgress: (update) => {
|
|
32
|
+
console.error(`[${tool.name}] ${update.message} (${Math.round(update.progress * 100)}%)`);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
return JSON.stringify(result, null, 2);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
// Mark intelligence tools differently
|
|
39
|
+
const isIntelligence = tool.name.startsWith('intelligence_');
|
|
40
|
+
const marker = isIntelligence ? 'ā”' : 'ā';
|
|
41
|
+
console.error(` ${marker} Registered: ${tool.name}`);
|
|
42
|
+
}
|
|
43
|
+
console.error('');
|
|
44
|
+
console.error('ā
Hook Tools (10):');
|
|
45
|
+
console.error(' hook_pre_edit, hook_post_edit, hook_pre_command, hook_post_command');
|
|
46
|
+
console.error(' hook_route, hook_explain, hook_pretrain, hook_build_agents');
|
|
47
|
+
console.error(' hook_metrics, hook_transfer');
|
|
48
|
+
console.error('');
|
|
49
|
+
console.error('ā” Intelligence Tools (9):');
|
|
50
|
+
console.error(' intelligence_route (SONA + MoE + HNSW)');
|
|
51
|
+
console.error(' intelligence_trajectory_start/step/end (learning)');
|
|
52
|
+
console.error(' intelligence_pattern_store/search (ReasoningBank)');
|
|
53
|
+
console.error(' intelligence_stats, intelligence_learn, intelligence_attention');
|
|
54
|
+
console.error('');
|
|
55
|
+
console.error('š Starting stdio transport...');
|
|
56
|
+
// Start server
|
|
57
|
+
server.start({ transportType: 'stdio' }).then(() => {
|
|
58
|
+
console.error('ā
Hook Server running on stdio with RuVector Intelligence');
|
|
59
|
+
}).catch((error) => {
|
|
60
|
+
console.error('ā Failed to start:', error);
|
|
61
|
+
process.exit(1);
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=hooks-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-server.js","sourceRoot":"","sources":["../../../../src/mcp/fastmcp/servers/hooks-server.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n/**\n * FastMCP Hook Server - Intelligent agent routing and self-learning\n *\n * 19 tools total:\n * - 10 hook tools (pre/post edit, command, routing, etc.)\n * - 9 intelligence tools (SONA, attention, trajectory, patterns)\n *\n * RuVector Intelligence Features:\n * - @ruvector/sona: Micro-LoRA (~0.05ms), EWC++, Trajectory tracking\n * - @ruvector/attention: MoE, Flash, Hyperbolic, Graph attention\n * - ruvector core: HNSW indexing (150x faster)\n */\n\nimport { FastMCP } from 'fastmcp';\nimport { allHookTools, hookTools, intelligenceTools } from '../tools/hooks/index.js';\n\nconsole.error('š§ Starting FastMCP Hook Server with RuVector Intelligence...');\nconsole.error(`š¦ Loading ${allHookTools.length} tools (${hookTools.length} hooks + ${intelligenceTools.length} intelligence)`);\n\n// Create server\nconst server = new FastMCP({\n name: 'agentic-flow-hooks',\n version: '2.0.0'\n});\n\n// Register all hook tools (includes intelligence tools)\nfor (const tool of allHookTools) {\n server.addTool({\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n execute: async (args: any) => {\n const result = await tool.execute(args, {\n onProgress: (update) => {\n console.error(`[${tool.name}] ${update.message} (${Math.round(update.progress * 100)}%)`);\n }\n });\n return JSON.stringify(result, null, 2);\n }\n });\n\n // Mark intelligence tools differently\n const isIntelligence = tool.name.startsWith('intelligence_');\n const marker = isIntelligence ? 'ā”' : 'ā';\n console.error(` ${marker} Registered: ${tool.name}`);\n}\n\nconsole.error('');\nconsole.error('ā
Hook Tools (10):');\nconsole.error(' hook_pre_edit, hook_post_edit, hook_pre_command, hook_post_command');\nconsole.error(' hook_route, hook_explain, hook_pretrain, hook_build_agents');\nconsole.error(' hook_metrics, hook_transfer');\nconsole.error('');\nconsole.error('ā” Intelligence Tools (9):');\nconsole.error(' intelligence_route (SONA + MoE + HNSW)');\nconsole.error(' intelligence_trajectory_start/step/end (learning)');\nconsole.error(' intelligence_pattern_store/search (ReasoningBank)');\nconsole.error(' intelligence_stats, intelligence_learn, intelligence_attention');\nconsole.error('');\nconsole.error('š Starting stdio transport...');\n\n// Start server\nserver.start({ transportType: 'stdio' }).then(() => {\n console.error('ā
Hook Server running on stdio with RuVector Intelligence');\n}).catch((error) => {\n console.error('ā Failed to start:', error);\n process.exit(1);\n});\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Benchmark for Hook Tools
|
|
4
|
+
* Tests latency and throughput
|
|
5
|
+
*/
|
|
6
|
+
interface BenchmarkResult {
|
|
7
|
+
tool: string;
|
|
8
|
+
iterations: number;
|
|
9
|
+
avgLatencyMs: number;
|
|
10
|
+
p50Ms: number;
|
|
11
|
+
p95Ms: number;
|
|
12
|
+
p99Ms: number;
|
|
13
|
+
minMs: number;
|
|
14
|
+
maxMs: number;
|
|
15
|
+
throughputOpsPerSec: number;
|
|
16
|
+
}
|
|
17
|
+
declare function benchmark(name: string, fn: () => Promise<any>, iterations?: number): Promise<BenchmarkResult>;
|
|
18
|
+
declare function runBenchmarks(): Promise<BenchmarkResult[]>;
|
|
19
|
+
export { runBenchmarks, benchmark };
|
|
20
|
+
//# sourceMappingURL=benchmark.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/benchmark.ts"],"names":[],"mappings":";AACA;;;GAGG;AAaH,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,iBAAe,SAAS,CACtB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EACtB,UAAU,GAAE,MAAY,GACvB,OAAO,CAAC,eAAe,CAAC,CAkC1B;AAED,iBAAe,aAAa,+BA8F3B;AAKD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Benchmark for Hook Tools
|
|
4
|
+
* Tests latency and throughput
|
|
5
|
+
*/
|
|
6
|
+
import { hookPreEditTool } from './pre-edit.js';
|
|
7
|
+
import { hookPostEditTool } from './post-edit.js';
|
|
8
|
+
import { hookPreCommandTool } from './pre-command.js';
|
|
9
|
+
import { hookRouteTool } from './route.js';
|
|
10
|
+
import { hookMetricsTool } from './metrics.js';
|
|
11
|
+
const mockContext = {
|
|
12
|
+
onProgress: () => { }
|
|
13
|
+
};
|
|
14
|
+
async function benchmark(name, fn, iterations = 100) {
|
|
15
|
+
const latencies = [];
|
|
16
|
+
// Warmup
|
|
17
|
+
for (let i = 0; i < 5; i++) {
|
|
18
|
+
await fn();
|
|
19
|
+
}
|
|
20
|
+
// Benchmark
|
|
21
|
+
const startTime = Date.now();
|
|
22
|
+
for (let i = 0; i < iterations; i++) {
|
|
23
|
+
const start = performance.now();
|
|
24
|
+
await fn();
|
|
25
|
+
latencies.push(performance.now() - start);
|
|
26
|
+
}
|
|
27
|
+
const totalTime = Date.now() - startTime;
|
|
28
|
+
// Calculate percentiles
|
|
29
|
+
latencies.sort((a, b) => a - b);
|
|
30
|
+
const p50 = latencies[Math.floor(iterations * 0.5)];
|
|
31
|
+
const p95 = latencies[Math.floor(iterations * 0.95)];
|
|
32
|
+
const p99 = latencies[Math.floor(iterations * 0.99)];
|
|
33
|
+
return {
|
|
34
|
+
tool: name,
|
|
35
|
+
iterations,
|
|
36
|
+
avgLatencyMs: latencies.reduce((a, b) => a + b, 0) / iterations,
|
|
37
|
+
p50Ms: p50,
|
|
38
|
+
p95Ms: p95,
|
|
39
|
+
p99Ms: p99,
|
|
40
|
+
minMs: latencies[0],
|
|
41
|
+
maxMs: latencies[latencies.length - 1],
|
|
42
|
+
throughputOpsPerSec: (iterations / totalTime) * 1000
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
async function runBenchmarks() {
|
|
46
|
+
console.log('š Hook Tools Benchmark\n');
|
|
47
|
+
console.log('='.repeat(80));
|
|
48
|
+
const results = [];
|
|
49
|
+
// Pre-edit benchmark
|
|
50
|
+
console.log('\nš Benchmarking hook_pre_edit...');
|
|
51
|
+
results.push(await benchmark('hook_pre_edit', async () => {
|
|
52
|
+
await hookPreEditTool.execute({ filePath: 'src/index.ts', task: 'Fix bug' }, mockContext);
|
|
53
|
+
}));
|
|
54
|
+
// Post-edit benchmark
|
|
55
|
+
console.log('š Benchmarking hook_post_edit...');
|
|
56
|
+
results.push(await benchmark('hook_post_edit', async () => {
|
|
57
|
+
await hookPostEditTool.execute({ filePath: 'src/test.ts', success: true, agent: 'coder' }, mockContext);
|
|
58
|
+
}));
|
|
59
|
+
// Pre-command benchmark
|
|
60
|
+
console.log('š Benchmarking hook_pre_command...');
|
|
61
|
+
results.push(await benchmark('hook_pre_command', async () => {
|
|
62
|
+
await hookPreCommandTool.execute({ command: 'npm test' }, mockContext);
|
|
63
|
+
}));
|
|
64
|
+
// Route benchmark
|
|
65
|
+
console.log('š Benchmarking hook_route...');
|
|
66
|
+
results.push(await benchmark('hook_route', async () => {
|
|
67
|
+
await hookRouteTool.execute({ task: 'Implement authentication feature' }, mockContext);
|
|
68
|
+
}));
|
|
69
|
+
// Metrics benchmark
|
|
70
|
+
console.log('š Benchmarking hook_metrics...');
|
|
71
|
+
results.push(await benchmark('hook_metrics', async () => {
|
|
72
|
+
await hookMetricsTool.execute({ timeframe: '24h', detailed: false }, mockContext);
|
|
73
|
+
}));
|
|
74
|
+
// Print results
|
|
75
|
+
console.log('\n' + '='.repeat(80));
|
|
76
|
+
console.log('\nš Results:\n');
|
|
77
|
+
console.log('| Tool | Avg (ms) | P50 (ms) | P95 (ms) | P99 (ms) | Ops/sec |');
|
|
78
|
+
console.log('|------|----------|----------|----------|----------|---------|');
|
|
79
|
+
for (const r of results) {
|
|
80
|
+
console.log(`| ${r.tool.padEnd(16)} | ${r.avgLatencyMs.toFixed(2).padStart(8)} | ` +
|
|
81
|
+
`${r.p50Ms.toFixed(2).padStart(8)} | ${r.p95Ms.toFixed(2).padStart(8)} | ` +
|
|
82
|
+
`${r.p99Ms.toFixed(2).padStart(8)} | ${r.throughputOpsPerSec.toFixed(0).padStart(7)} |`);
|
|
83
|
+
}
|
|
84
|
+
// Latency targets check
|
|
85
|
+
console.log('\n' + '='.repeat(80));
|
|
86
|
+
console.log('\nā
Latency Target Check:\n');
|
|
87
|
+
const targets = {
|
|
88
|
+
'hook_pre_edit': 20,
|
|
89
|
+
'hook_post_edit': 50,
|
|
90
|
+
'hook_pre_command': 10,
|
|
91
|
+
'hook_route': 30,
|
|
92
|
+
'hook_metrics': 50
|
|
93
|
+
};
|
|
94
|
+
let allPassed = true;
|
|
95
|
+
for (const r of results) {
|
|
96
|
+
const target = targets[r.tool] || 50;
|
|
97
|
+
const passed = r.p95Ms < target;
|
|
98
|
+
allPassed = allPassed && passed;
|
|
99
|
+
console.log(` ${passed ? 'ā
' : 'ā'} ${r.tool}: P95=${r.p95Ms.toFixed(2)}ms ` +
|
|
100
|
+
`(target: <${target}ms) - ${passed ? 'PASS' : 'FAIL'}`);
|
|
101
|
+
}
|
|
102
|
+
console.log('\n' + '='.repeat(80));
|
|
103
|
+
console.log(`\n${allPassed ? 'š All latency targets met!' : 'ā ļø Some targets not met'}`);
|
|
104
|
+
// Return results for programmatic use
|
|
105
|
+
return results;
|
|
106
|
+
}
|
|
107
|
+
// Run if called directly
|
|
108
|
+
runBenchmarks().catch(console.error);
|
|
109
|
+
export { runBenchmarks, benchmark };
|
|
110
|
+
//# sourceMappingURL=benchmark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/benchmark.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n/**\n * Benchmark for Hook Tools\n * Tests latency and throughput\n */\n\nimport { hookPreEditTool } from './pre-edit.js';\nimport { hookPostEditTool } from './post-edit.js';\nimport { hookPreCommandTool } from './pre-command.js';\nimport { hookRouteTool } from './route.js';\nimport { hookMetricsTool } from './metrics.js';\nimport { hookPretrainTool } from './pretrain.js';\n\nconst mockContext = {\n onProgress: () => {}\n};\n\ninterface BenchmarkResult {\n tool: string;\n iterations: number;\n avgLatencyMs: number;\n p50Ms: number;\n p95Ms: number;\n p99Ms: number;\n minMs: number;\n maxMs: number;\n throughputOpsPerSec: number;\n}\n\nasync function benchmark(\n name: string,\n fn: () => Promise<any>,\n iterations: number = 100\n): Promise<BenchmarkResult> {\n const latencies: number[] = [];\n\n // Warmup\n for (let i = 0; i < 5; i++) {\n await fn();\n }\n\n // Benchmark\n const startTime = Date.now();\n for (let i = 0; i < iterations; i++) {\n const start = performance.now();\n await fn();\n latencies.push(performance.now() - start);\n }\n const totalTime = Date.now() - startTime;\n\n // Calculate percentiles\n latencies.sort((a, b) => a - b);\n const p50 = latencies[Math.floor(iterations * 0.5)];\n const p95 = latencies[Math.floor(iterations * 0.95)];\n const p99 = latencies[Math.floor(iterations * 0.99)];\n\n return {\n tool: name,\n iterations,\n avgLatencyMs: latencies.reduce((a, b) => a + b, 0) / iterations,\n p50Ms: p50,\n p95Ms: p95,\n p99Ms: p99,\n minMs: latencies[0],\n maxMs: latencies[latencies.length - 1],\n throughputOpsPerSec: (iterations / totalTime) * 1000\n };\n}\n\nasync function runBenchmarks() {\n console.log('š Hook Tools Benchmark\\n');\n console.log('='.repeat(80));\n\n const results: BenchmarkResult[] = [];\n\n // Pre-edit benchmark\n console.log('\\nš Benchmarking hook_pre_edit...');\n results.push(await benchmark('hook_pre_edit', async () => {\n await hookPreEditTool.execute(\n { filePath: 'src/index.ts', task: 'Fix bug' },\n mockContext\n );\n }));\n\n // Post-edit benchmark\n console.log('š Benchmarking hook_post_edit...');\n results.push(await benchmark('hook_post_edit', async () => {\n await hookPostEditTool.execute(\n { filePath: 'src/test.ts', success: true, agent: 'coder' },\n mockContext\n );\n }));\n\n // Pre-command benchmark\n console.log('š Benchmarking hook_pre_command...');\n results.push(await benchmark('hook_pre_command', async () => {\n await hookPreCommandTool.execute(\n { command: 'npm test' },\n mockContext\n );\n }));\n\n // Route benchmark\n console.log('š Benchmarking hook_route...');\n results.push(await benchmark('hook_route', async () => {\n await hookRouteTool.execute(\n { task: 'Implement authentication feature' },\n mockContext\n );\n }));\n\n // Metrics benchmark\n console.log('š Benchmarking hook_metrics...');\n results.push(await benchmark('hook_metrics', async () => {\n await hookMetricsTool.execute(\n { timeframe: '24h', detailed: false },\n mockContext\n );\n }));\n\n // Print results\n console.log('\\n' + '='.repeat(80));\n console.log('\\nš Results:\\n');\n\n console.log('| Tool | Avg (ms) | P50 (ms) | P95 (ms) | P99 (ms) | Ops/sec |');\n console.log('|------|----------|----------|----------|----------|---------|');\n\n for (const r of results) {\n console.log(\n `| ${r.tool.padEnd(16)} | ${r.avgLatencyMs.toFixed(2).padStart(8)} | ` +\n `${r.p50Ms.toFixed(2).padStart(8)} | ${r.p95Ms.toFixed(2).padStart(8)} | ` +\n `${r.p99Ms.toFixed(2).padStart(8)} | ${r.throughputOpsPerSec.toFixed(0).padStart(7)} |`\n );\n }\n\n // Latency targets check\n console.log('\\n' + '='.repeat(80));\n console.log('\\nā
Latency Target Check:\\n');\n\n const targets: Record<string, number> = {\n 'hook_pre_edit': 20,\n 'hook_post_edit': 50,\n 'hook_pre_command': 10,\n 'hook_route': 30,\n 'hook_metrics': 50\n };\n\n let allPassed = true;\n for (const r of results) {\n const target = targets[r.tool] || 50;\n const passed = r.p95Ms < target;\n allPassed = allPassed && passed;\n console.log(\n ` ${passed ? 'ā
' : 'ā'} ${r.tool}: P95=${r.p95Ms.toFixed(2)}ms ` +\n `(target: <${target}ms) - ${passed ? 'PASS' : 'FAIL'}`\n );\n }\n\n console.log('\\n' + '='.repeat(80));\n console.log(`\\n${allPassed ? 'š All latency targets met!' : 'ā ļø Some targets not met'}`);\n\n // Return results for programmatic use\n return results;\n}\n\n// Run if called directly\nrunBenchmarks().catch(console.error);\n\nexport { runBenchmarks, benchmark };\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build Agents Hook - Generate optimized agent configurations
|
|
3
|
+
* Creates YAML agent definitions based on pretrain analysis
|
|
4
|
+
*/
|
|
5
|
+
import type { ToolDefinition } from '../../types/index.js';
|
|
6
|
+
export declare const hookBuildAgentsTool: ToolDefinition;
|
|
7
|
+
//# sourceMappingURL=build-agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-agents.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/build-agents.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AA8C3D,eAAO,MAAM,mBAAmB,EAAE,cA8PjC,CAAC"}
|