agentic-flow 2.0.13 → 2.0.14

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.
Files changed (71) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/agents/directApiAgent.d.ts.map +1 -1
  3. package/dist/agents/directApiAgent.js +37 -19
  4. package/dist/agents/directApiAgent.js.map +1 -1
  5. package/dist/cli/commands/hooks.d.ts.map +1 -1
  6. package/dist/cli/commands/hooks.js +4 -1
  7. package/dist/cli/commands/hooks.js.map +1 -1
  8. package/dist/cli/mcp-manager.js +13 -6
  9. package/dist/cli/mcp-manager.js.map +1 -1
  10. package/dist/intelligence/EmbeddingService.js +3 -3
  11. package/dist/intelligence/EmbeddingService.js.map +1 -1
  12. package/dist/intelligence/agent-booster-enhanced.d.ts.map +1 -1
  13. package/dist/intelligence/agent-booster-enhanced.js +5 -3
  14. package/dist/intelligence/agent-booster-enhanced.js.map +1 -1
  15. package/dist/mcp/claudeFlowSdkServer.d.ts.map +1 -1
  16. package/dist/mcp/claudeFlowSdkServer.js +76 -29
  17. package/dist/mcp/claudeFlowSdkServer.js.map +1 -1
  18. package/dist/mcp/fastmcp/servers/claude-flow-sdk.js +27 -22
  19. package/dist/mcp/fastmcp/servers/claude-flow-sdk.js.map +1 -1
  20. package/dist/mcp/fastmcp/servers/http-sse.js +31 -20
  21. package/dist/mcp/fastmcp/servers/http-sse.js.map +1 -1
  22. package/dist/mcp/fastmcp/servers/http-streaming-updated.js +33 -32
  23. package/dist/mcp/fastmcp/servers/http-streaming-updated.js.map +1 -1
  24. package/dist/mcp/fastmcp/servers/poc-stdio.js +10 -11
  25. package/dist/mcp/fastmcp/servers/poc-stdio.js.map +1 -1
  26. package/dist/mcp/fastmcp/servers/stdio-full.js +33 -32
  27. package/dist/mcp/fastmcp/servers/stdio-full.js.map +1 -1
  28. package/dist/mcp/fastmcp/tools/agent/execute.d.ts.map +1 -1
  29. package/dist/mcp/fastmcp/tools/agent/execute.js +8 -5
  30. package/dist/mcp/fastmcp/tools/agent/execute.js.map +1 -1
  31. package/dist/mcp/fastmcp/tools/agent/list.d.ts.map +1 -1
  32. package/dist/mcp/fastmcp/tools/agent/list.js +4 -2
  33. package/dist/mcp/fastmcp/tools/agent/list.js.map +1 -1
  34. package/dist/mcp/fastmcp/tools/agent/parallel.d.ts.map +1 -1
  35. package/dist/mcp/fastmcp/tools/agent/parallel.js +4 -2
  36. package/dist/mcp/fastmcp/tools/agent/parallel.js.map +1 -1
  37. package/dist/mcp/fastmcp/tools/hooks/pretrain.d.ts.map +1 -1
  38. package/dist/mcp/fastmcp/tools/hooks/pretrain.js +11 -3
  39. package/dist/mcp/fastmcp/tools/hooks/pretrain.js.map +1 -1
  40. package/dist/mcp/fastmcp/tools/swarm/orchestrate.d.ts.map +1 -1
  41. package/dist/mcp/fastmcp/tools/swarm/orchestrate.js +9 -5
  42. package/dist/mcp/fastmcp/tools/swarm/orchestrate.js.map +1 -1
  43. package/dist/mcp/standalone-stdio.js +72 -57
  44. package/dist/mcp/standalone-stdio.js.map +1 -1
  45. package/dist/reasoningbank/utils/embeddings.d.ts +0 -6
  46. package/dist/reasoningbank/utils/embeddings.d.ts.map +1 -1
  47. package/dist/reasoningbank/utils/embeddings.js +9 -43
  48. package/dist/reasoningbank/utils/embeddings.js.map +1 -1
  49. package/dist/router/providers/onnx-local-optimized.d.ts +1 -10
  50. package/dist/router/providers/onnx-local-optimized.d.ts.map +1 -1
  51. package/dist/router/providers/onnx-local-optimized.js +9 -10
  52. package/dist/router/providers/onnx-local-optimized.js.map +1 -1
  53. package/dist/router/providers/onnx-local.d.ts +0 -9
  54. package/dist/router/providers/onnx-local.d.ts.map +1 -1
  55. package/dist/router/providers/onnx-local.js +7 -22
  56. package/dist/router/providers/onnx-local.js.map +1 -1
  57. package/dist/sdk/plugins.d.ts +6 -6
  58. package/dist/sdk/plugins.d.ts.map +1 -1
  59. package/dist/sdk/plugins.js +37 -0
  60. package/dist/sdk/plugins.js.map +1 -1
  61. package/dist/transport/index.d.ts +1 -0
  62. package/dist/transport/index.d.ts.map +1 -1
  63. package/dist/transport/index.js +1 -0
  64. package/dist/transport/index.js.map +1 -1
  65. package/dist/transport/quic-loader.d.ts +217 -0
  66. package/dist/transport/quic-loader.d.ts.map +1 -0
  67. package/dist/transport/quic-loader.js +412 -0
  68. package/dist/transport/quic-loader.js.map +1 -0
  69. package/dist/utils/agentBoosterPreprocessor.js +16 -22
  70. package/dist/utils/agentBoosterPreprocessor.js.map +1 -1
  71. package/package.json +5 -4
@@ -1 +1 @@
1
- {"version":3,"file":"poc-stdio.js","sourceRoot":"","sources":["../../../../src/mcp/fastmcp/servers/poc-stdio.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n// POC: FastMCP server with stdio transport and 2 basic tools\nimport { FastMCP } from 'fastmcp';\nimport { z } from 'zod';\nimport { execSync } from 'child_process';\n\nconsole.error('🚀 Starting FastMCP POC Server (stdio transport)...');\n\n// Create server\nconst server = new FastMCP({\n name: 'fastmcp-poc',\n version: '0.1.0'\n});\n\n// Tool 1: Memory Store\nserver.addTool({\n name: 'memory_store',\n description: 'Store a value in persistent memory',\n parameters: z.object({\n key: z.string().min(1).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().positive().optional().describe('Time-to-live in seconds')\n }),\n execute: async ({ key, value, namespace, ttl }) => {\n try {\n const cmd = [\n 'npx claude-flow@alpha memory store',\n `\"${key}\"`,\n `\"${value}\"`,\n `--namespace \"${namespace}\"`,\n ttl ? `--ttl ${ttl}` : ''\n ].filter(Boolean).join(' ');\n\n const result = execSync(cmd, { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });\n\n // Return as text content (fastmcp requirement)\n return JSON.stringify({\n success: true,\n key,\n namespace,\n size: value.length,\n ttl,\n timestamp: new Date().toISOString(),\n message: 'Memory stored successfully'\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to store memory: ${error.message}`);\n }\n }\n});\n\n// Tool 2: Memory Retrieve\nserver.addTool({\n name: 'memory_retrieve',\n description: 'Retrieve a value from persistent memory',\n parameters: z.object({\n key: z.string().min(1).describe('Memory key'),\n namespace: z.string().optional().default('default').describe('Memory namespace')\n }),\n execute: 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', maxBuffer: 10 * 1024 * 1024 });\n\n // Return as text content (fastmcp requirement)\n return JSON.stringify({\n success: true,\n key,\n namespace,\n value: result.trim(),\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to retrieve memory: ${error.message}`);\n }\n }\n});\n\nconsole.error('📦 Registered 2 tools: memory_store, memory_retrieve');\nconsole.error('🔌 Starting stdio transport...');\n\n// Start with stdio transport\nserver.start({ transportType: 'stdio' }).then(() => {\n console.error('✅ FastMCP POC server running on stdio');\n}).catch((error) => {\n console.error('❌ Failed to start server:', error);\n process.exit(1);\n});\n"]}
1
+ {"version":3,"file":"poc-stdio.js","sourceRoot":"","sources":["../../../../src/mcp/fastmcp/servers/poc-stdio.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n/* eslint-disable @typescript-eslint/no-explicit-any -- pre-existing catch(error: any) handlers; outside scope of CWE-78 fix */\n// POC: FastMCP server with stdio transport and 2 basic tools\nimport { FastMCP } from 'fastmcp';\nimport { z } from 'zod';\nimport { execFileSync } from 'child_process';\n\n// Security: All shell-outs use execFileSync with argv arrays (shell: false) to\n// prevent OS command injection via tool parameters (CWE-78).\nconst NPX_EXEC_OPTS = { shell: false as const };\n\nconsole.error('🚀 Starting FastMCP POC Server (stdio transport)...');\n\n// Create server\nconst server = new FastMCP({\n name: 'fastmcp-poc',\n version: '0.1.0'\n});\n\n// Tool 1: Memory Store\nserver.addTool({\n name: 'memory_store',\n description: 'Store a value in persistent memory',\n parameters: z.object({\n key: z.string().min(1).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().positive().optional().describe('Time-to-live in seconds')\n }),\n execute: async ({ key, value, namespace, ttl }) => {\n try {\n const args = ['claude-flow@alpha', 'memory', 'store', key, value, '--namespace', namespace];\n if (ttl) args.push('--ttl', String(ttl));\n\n execFileSync('npx', args, { ...NPX_EXEC_OPTS, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });\n\n // Return as text content (fastmcp requirement)\n return JSON.stringify({\n success: true,\n key,\n namespace,\n size: value.length,\n ttl,\n timestamp: new Date().toISOString(),\n message: 'Memory stored successfully'\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to store memory: ${error.message}`);\n }\n }\n});\n\n// Tool 2: Memory Retrieve\nserver.addTool({\n name: 'memory_retrieve',\n description: 'Retrieve a value from persistent memory',\n parameters: z.object({\n key: z.string().min(1).describe('Memory key'),\n namespace: z.string().optional().default('default').describe('Memory namespace')\n }),\n execute: async ({ key, namespace }) => {\n try {\n const result = execFileSync(\n 'npx',\n ['claude-flow@alpha', 'memory', 'retrieve', key, '--namespace', namespace],\n { ...NPX_EXEC_OPTS, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 }\n );\n\n // Return as text content (fastmcp requirement)\n return JSON.stringify({\n success: true,\n key,\n namespace,\n value: result.trim(),\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to retrieve memory: ${error.message}`);\n }\n }\n});\n\nconsole.error('📦 Registered 2 tools: memory_store, memory_retrieve');\nconsole.error('🔌 Starting stdio transport...');\n\n// Start with stdio transport\nserver.start({ transportType: 'stdio' }).then(() => {\n console.error('✅ FastMCP POC server running on stdio');\n}).catch((error) => {\n console.error('❌ Failed to start server:', error);\n process.exit(1);\n});\n"]}
@@ -1,8 +1,13 @@
1
1
  #!/usr/bin/env node
2
+ /* eslint-disable @typescript-eslint/no-explicit-any -- pre-existing catch(error: any) handlers; outside scope of CWE-78 fix */
2
3
  // Full FastMCP server with stdio transport - All 11 claude-flow-sdk tools
3
4
  import { FastMCP } from 'fastmcp';
4
5
  import { z } from 'zod';
5
- import { execSync } from 'child_process';
6
+ import { execFileSync } from 'child_process';
7
+ // Security: All shell-outs use execFileSync with argv arrays (shell: false) to
8
+ // prevent OS command injection via tool parameters (CWE-78). Do NOT reintroduce
9
+ // execSync with template-string interpolation here.
10
+ const NPX_EXEC_OPTS = { shell: false };
6
11
  console.error('🚀 Starting FastMCP Full Server (stdio transport)...');
7
12
  console.error('📦 Loading 11 tools: memory (3), swarm (3), agent (5)');
8
13
  // Create server
@@ -22,14 +27,10 @@ server.addTool({
22
27
  }),
23
28
  execute: async ({ key, value, namespace, ttl }) => {
24
29
  try {
25
- const cmd = [
26
- 'npx claude-flow@alpha memory store',
27
- `"${key}"`,
28
- `"${value}"`,
29
- `--namespace "${namespace}"`,
30
- ttl ? `--ttl ${ttl}` : ''
31
- ].filter(Boolean).join(' ');
32
- const result = execSync(cmd, { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });
30
+ const args = ['claude-flow@alpha', 'memory', 'store', key, value, '--namespace', namespace];
31
+ if (ttl)
32
+ args.push('--ttl', String(ttl));
33
+ execFileSync('npx', args, { ...NPX_EXEC_OPTS, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });
33
34
  return JSON.stringify({
34
35
  success: true,
35
36
  key,
@@ -55,8 +56,7 @@ server.addTool({
55
56
  }),
56
57
  execute: async ({ key, namespace }) => {
57
58
  try {
58
- const cmd = `npx claude-flow@alpha memory retrieve "${key}" --namespace "${namespace}"`;
59
- const result = execSync(cmd, { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });
59
+ const result = execFileSync('npx', ['claude-flow@alpha', 'memory', 'retrieve', key, '--namespace', namespace], { ...NPX_EXEC_OPTS, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });
60
60
  return JSON.stringify({
61
61
  success: true,
62
62
  key,
@@ -82,13 +82,11 @@ server.addTool({
82
82
  }),
83
83
  execute: async ({ pattern, namespace, limit }) => {
84
84
  try {
85
- const cmd = [
86
- 'npx claude-flow@alpha memory search',
87
- `"${pattern}"`,
88
- namespace ? `--namespace "${namespace}"` : '',
89
- `--limit ${limit}`
90
- ].filter(Boolean).join(' ');
91
- const result = execSync(cmd, { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });
85
+ const args = ['claude-flow@alpha', 'memory', 'search', pattern];
86
+ if (namespace)
87
+ args.push('--namespace', namespace);
88
+ args.push('--limit', String(limit));
89
+ const result = execFileSync('npx', args, { ...NPX_EXEC_OPTS, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });
92
90
  return JSON.stringify({
93
91
  success: true,
94
92
  pattern,
@@ -117,8 +115,7 @@ server.addTool({
117
115
  }),
118
116
  execute: async ({ topology, maxAgents, strategy }) => {
119
117
  try {
120
- const cmd = `npx claude-flow@alpha swarm init --topology ${topology} --max-agents ${maxAgents} --strategy ${strategy}`;
121
- const result = execSync(cmd, { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });
118
+ const result = execFileSync('npx', ['claude-flow@alpha', 'swarm', 'init', '--topology', topology, '--max-agents', String(maxAgents), '--strategy', strategy], { ...NPX_EXEC_OPTS, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });
122
119
  return JSON.stringify({
123
120
  success: true,
124
121
  topology,
@@ -147,10 +144,12 @@ server.addTool({
147
144
  }),
148
145
  execute: async ({ type, capabilities, name }) => {
149
146
  try {
150
- const capStr = capabilities ? ` --capabilities "${capabilities.join(',')}"` : '';
151
- const nameStr = name ? ` --name "${name}"` : '';
152
- const cmd = `npx claude-flow@alpha agent spawn --type ${type}${capStr}${nameStr}`;
153
- const result = execSync(cmd, { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });
147
+ const args = ['claude-flow@alpha', 'agent', 'spawn', '--type', type];
148
+ if (capabilities && capabilities.length > 0)
149
+ args.push('--capabilities', capabilities.join(','));
150
+ if (name)
151
+ args.push('--name', name);
152
+ const result = execFileSync('npx', args, { ...NPX_EXEC_OPTS, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });
154
153
  return JSON.stringify({
155
154
  success: true,
156
155
  type,
@@ -181,9 +180,10 @@ server.addTool({
181
180
  }),
182
181
  execute: async ({ task, strategy, priority, maxAgents }) => {
183
182
  try {
184
- const maxStr = maxAgents ? ` --max-agents ${maxAgents}` : '';
185
- const cmd = `npx claude-flow@alpha task orchestrate "${task}" --strategy ${strategy} --priority ${priority}${maxStr}`;
186
- const result = execSync(cmd, { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024, timeout: 300000 });
183
+ const args = ['claude-flow@alpha', 'task', 'orchestrate', task, '--strategy', strategy, '--priority', priority];
184
+ if (maxAgents)
185
+ args.push('--max-agents', String(maxAgents));
186
+ const result = execFileSync('npx', args, { ...NPX_EXEC_OPTS, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024, timeout: 300000 });
187
187
  return JSON.stringify({
188
188
  success: true,
189
189
  task,
@@ -211,9 +211,10 @@ server.addTool({
211
211
  }),
212
212
  execute: async ({ agent, task, stream }) => {
213
213
  try {
214
- const streamFlag = stream ? '--stream' : '';
215
- const cmd = `npx agentic-flow --agent "${agent}" --task "${task}" ${streamFlag}`.trim();
216
- const result = execSync(cmd, { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024, timeout: 300000 });
214
+ const args = ['agentic-flow', '--agent', agent, '--task', task];
215
+ if (stream)
216
+ args.push('--stream');
217
+ const result = execFileSync('npx', args, { ...NPX_EXEC_OPTS, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024, timeout: 300000 });
217
218
  return JSON.stringify({
218
219
  success: true,
219
220
  agent,
@@ -246,7 +247,7 @@ server.addTool({
246
247
  ...(dataset && { DATASET: dataset }),
247
248
  ...(streaming && { ENABLE_STREAMING: 'true' })
248
249
  };
249
- const result = execSync('npx agentic-flow', { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024, timeout: 300000, env });
250
+ const result = execFileSync('npx', ['agentic-flow'], { ...NPX_EXEC_OPTS, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024, timeout: 300000, env });
250
251
  return JSON.stringify({
251
252
  success: true,
252
253
  mode: 'parallel',
@@ -269,7 +270,7 @@ server.addTool({
269
270
  }),
270
271
  execute: async ({ format }) => {
271
272
  try {
272
- const result = execSync('npx agentic-flow --list', { encoding: 'utf-8', maxBuffer: 5 * 1024 * 1024, timeout: 30000 });
273
+ const result = execFileSync('npx', ['agentic-flow', '--list'], { ...NPX_EXEC_OPTS, encoding: 'utf-8', maxBuffer: 5 * 1024 * 1024, timeout: 30000 });
273
274
  if (format === 'detailed') {
274
275
  return result;
275
276
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stdio-full.js","sourceRoot":"","sources":["../../../../src/mcp/fastmcp/servers/stdio-full.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n// Full FastMCP server with stdio transport - All 11 claude-flow-sdk tools\nimport { FastMCP } from 'fastmcp';\nimport { z } from 'zod';\nimport { execSync } from 'child_process';\n\nconsole.error('🚀 Starting FastMCP Full Server (stdio transport)...');\nconsole.error('📦 Loading 11 tools: memory (3), swarm (3), agent (5)');\n\n// Create server\nconst server = new FastMCP({\n name: 'fastmcp-stdio-full',\n version: '1.0.0'\n});\n\n// Tool 1: Memory Store\nserver.addTool({\n name: 'memory_store',\n description: 'Store a value in persistent memory with optional namespace and TTL',\n parameters: z.object({\n key: z.string().min(1).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().positive().optional().describe('Time-to-live in seconds')\n }),\n execute: async ({ key, value, namespace, ttl }) => {\n try {\n const cmd = [\n 'npx claude-flow@alpha memory store',\n `\"${key}\"`,\n `\"${value}\"`,\n `--namespace \"${namespace}\"`,\n ttl ? `--ttl ${ttl}` : ''\n ].filter(Boolean).join(' ');\n\n const result = execSync(cmd, { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });\n\n return JSON.stringify({\n success: true,\n key,\n namespace,\n size: value.length,\n ttl,\n timestamp: new Date().toISOString(),\n message: 'Memory stored successfully'\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to store memory: ${error.message}`);\n }\n }\n});\n\n// Tool 2: Memory Retrieve\nserver.addTool({\n name: 'memory_retrieve',\n description: 'Retrieve a value from persistent memory',\n parameters: z.object({\n key: z.string().min(1).describe('Memory key'),\n namespace: z.string().optional().default('default').describe('Memory namespace')\n }),\n execute: 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', maxBuffer: 10 * 1024 * 1024 });\n\n return JSON.stringify({\n success: true,\n key,\n namespace,\n value: result.trim(),\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to retrieve memory: ${error.message}`);\n }\n }\n});\n\n// Tool 3: Memory Search\nserver.addTool({\n name: 'memory_search',\n description: 'Search for keys matching a pattern in memory with wildcard support',\n parameters: z.object({\n pattern: z.string().min(1).describe('Search pattern (supports wildcards like * and ?)'),\n namespace: z.string().optional().describe('Memory namespace to search in (searches all if not specified)'),\n limit: z.number().positive().optional().default(10).describe('Maximum number of results to return (1-100)')\n .refine((val) => val >= 1 && val <= 100, { message: 'Limit must be between 1 and 100' })\n }),\n execute: async ({ pattern, namespace, limit }) => {\n try {\n const cmd = [\n 'npx claude-flow@alpha memory search',\n `\"${pattern}\"`,\n namespace ? `--namespace \"${namespace}\"` : '',\n `--limit ${limit}`\n ].filter(Boolean).join(' ');\n\n const result = execSync(cmd, { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });\n\n return JSON.stringify({\n success: true,\n pattern,\n namespace: namespace || 'all',\n limit,\n results: result.trim(),\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to search memory: ${error.message}`);\n }\n }\n});\n\n// Tool 4: Swarm Init\nserver.addTool({\n name: 'swarm_init',\n description: 'Initialize a multi-agent swarm with specified topology and strategy',\n parameters: z.object({\n topology: z.enum(['mesh', 'hierarchical', 'ring', 'star'])\n .describe('Swarm topology: mesh (peer-to-peer), hierarchical (tree), ring (circular), star (centralized)'),\n maxAgents: z.number().positive().optional().default(8).describe('Maximum number of agents in the swarm (1-100)')\n .refine((val) => val >= 1 && val <= 100, { message: 'maxAgents must be between 1 and 100' }),\n strategy: z.enum(['balanced', 'specialized', 'adaptive']).optional().default('balanced')\n .describe('Agent distribution strategy: balanced (equal), specialized (role-based), adaptive (dynamic)')\n }),\n execute: 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', maxBuffer: 10 * 1024 * 1024 });\n\n return JSON.stringify({\n success: true,\n topology,\n maxAgents,\n strategy,\n message: 'Swarm initialized successfully',\n details: result.trim(),\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to initialize swarm: ${error.message}`);\n }\n }\n});\n\n// Tool 5: Agent Spawn\nserver.addTool({\n name: 'agent_spawn',\n description: 'Spawn a new agent in the swarm with specified type and capabilities',\n parameters: z.object({\n type: z.enum(['researcher', 'coder', 'analyst', 'optimizer', 'coordinator'])\n .describe('Agent type: researcher (data gathering), coder (implementation), analyst (analysis), optimizer (performance), coordinator (orchestration)'),\n capabilities: z.array(z.string()).optional()\n .describe('Specific capabilities for the agent (e.g., [\"python\", \"testing\", \"documentation\"])'),\n name: z.string().optional().describe('Custom agent name/identifier')\n }),\n execute: 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', maxBuffer: 10 * 1024 * 1024 });\n\n return JSON.stringify({\n success: true,\n type,\n capabilities: capabilities || [],\n name: name || `${type}-${Date.now()}`,\n message: 'Agent spawned successfully',\n details: result.trim(),\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to spawn agent: ${error.message}`);\n }\n }\n});\n\n// Tool 6: Task Orchestrate\nserver.addTool({\n name: 'task_orchestrate',\n description: 'Orchestrate a complex task across the swarm with specified strategy and priority',\n parameters: z.object({\n task: z.string().min(1).describe('Task description or instructions for the swarm to execute'),\n strategy: z.enum(['parallel', 'sequential', 'adaptive']).optional().default('adaptive')\n .describe('Execution strategy: parallel (simultaneous), sequential (ordered), adaptive (dynamic based on task)'),\n priority: z.enum(['low', 'medium', 'high', 'critical']).optional().default('medium')\n .describe('Task priority level: low, medium, high, or critical'),\n maxAgents: z.number().positive().optional().describe('Maximum number of agents to use for this task (1-10)')\n .refine((val) => !val || (val >= 1 && val <= 10), { message: 'maxAgents must be between 1 and 10' })\n }),\n execute: 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', maxBuffer: 10 * 1024 * 1024, timeout: 300000 });\n\n return JSON.stringify({\n success: true,\n task,\n strategy,\n priority,\n maxAgents: maxAgents || 'auto',\n message: 'Task orchestrated successfully',\n details: result.trim(),\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to orchestrate task: ${error.message}`);\n }\n }\n});\n\n// Tool 7: Agent Execute\nserver.addTool({\n name: 'agent_execute',\n description: 'Execute a specific agent with a task (equivalent to --agent CLI command)',\n parameters: z.object({\n agent: z.string().describe('Agent name to execute'),\n task: z.string().describe('Task description'),\n stream: z.boolean().optional().default(false).describe('Enable streaming output')\n }),\n execute: async ({ agent, task, stream }) => {\n try {\n const streamFlag = stream ? '--stream' : '';\n const cmd = `npx agentic-flow --agent \"${agent}\" --task \"${task}\" ${streamFlag}`.trim();\n const result = execSync(cmd, { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024, timeout: 300000 });\n\n return JSON.stringify({\n success: true,\n agent,\n task: task.substring(0, 100),\n output: result,\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to execute agent: ${error.message}`);\n }\n }\n});\n\n// Tool 8: Agent Parallel\nserver.addTool({\n name: 'agent_parallel',\n description: 'Run parallel mode with 3 agents (research, code review, data analysis)',\n parameters: z.object({\n topic: z.string().optional().describe('Research topic'),\n diff: z.string().optional().describe('Code diff for review'),\n dataset: z.string().optional().describe('Dataset hint'),\n streaming: z.boolean().optional().default(false).describe('Enable streaming')\n }),\n execute: async ({ topic, diff, dataset, streaming }) => {\n try {\n const env = {\n ...process.env,\n ...(topic && { TOPIC: topic }),\n ...(diff && { DIFF: diff }),\n ...(dataset && { DATASET: dataset }),\n ...(streaming && { ENABLE_STREAMING: 'true' })\n };\n const result = execSync('npx agentic-flow', { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024, timeout: 300000, env });\n\n return JSON.stringify({\n success: true,\n mode: 'parallel',\n agents: ['research', 'code_review', 'data'],\n output: result,\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to run parallel mode: ${error.message}`);\n }\n }\n});\n\n// Tool 9: Agent List\nserver.addTool({\n name: 'agent_list',\n description: 'List all available agents',\n parameters: z.object({\n format: z.enum(['summary', 'detailed', 'json']).optional().default('summary')\n }),\n execute: async ({ format }) => {\n try {\n const result = execSync('npx agentic-flow --list', { encoding: 'utf-8', maxBuffer: 5 * 1024 * 1024, timeout: 30000 });\n\n if (format === 'detailed') {\n return result;\n }\n\n const agents: any[] = [];\n const lines = result.split('\\n');\n let currentCategory = '';\n\n for (const line of lines) {\n if (line.includes(':') && line.trim().endsWith(':')) {\n currentCategory = line.replace(':', '').trim();\n } else if (line.trim().startsWith('•') || /^\\s{2,}\\w/.test(line)) {\n const match = line.match(/^\\s*[•\\s]*(\\S+)\\s+(.+)$/);\n if (match) {\n agents.push({ name: match[1], description: match[2].trim(), category: currentCategory });\n }\n }\n }\n\n return JSON.stringify({\n success: true,\n count: agents.length,\n agents,\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to list agents: ${error.message}`);\n }\n }\n});\n\n// Tool 10: Add Custom Agent\nserver.addTool({\n name: 'agent_add',\n description: 'Add a new custom agent defined in markdown',\n parameters: z.object({\n name: z.string().describe('Agent name (kebab-case)'),\n description: z.string().describe('Agent description'),\n systemPrompt: z.string().describe('System prompt'),\n category: z.string().optional().default('custom').describe('Category'),\n capabilities: z.array(z.string()).optional().describe('Capabilities')\n }),\n execute: async ({ name, description, systemPrompt, category, capabilities }) => {\n try {\n const { writeFileSync, existsSync, mkdirSync } = await import('fs');\n const { join } = await import('path');\n\n const agentsDir = join(process.cwd(), '.claude', 'agents', category || 'custom');\n if (!existsSync(agentsDir)) mkdirSync(agentsDir, { recursive: true });\n\n const markdown = `# ${name.split('-').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ')}\n\n## Description\n${description}\n\n## System Prompt\n${systemPrompt}\n\n${capabilities && capabilities.length > 0 ? `## Capabilities\\n${capabilities.map(c => `- ${c}`).join('\\n')}\\n` : ''}\n\n## Usage\n\\`\\`\\`bash\nnpx agentic-flow --agent ${name} --task \"Your task\"\n\\`\\`\\`\n\n---\n*Generated: ${new Date().toISOString()}*\n`;\n\n const filePath = join(agentsDir, `${name}.md`);\n if (existsSync(filePath)) throw new Error(`Agent '${name}' already exists`);\n\n writeFileSync(filePath, markdown, 'utf8');\n\n return JSON.stringify({\n success: true,\n agent: name,\n category: category || 'custom',\n filePath,\n message: `Agent '${name}' created successfully`,\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to add agent: ${error.message}`);\n }\n }\n});\n\n// Tool 11: Add Custom Command\nserver.addTool({\n name: 'command_add',\n description: 'Add a new custom command defined in markdown',\n parameters: z.object({\n name: z.string().describe('Command name (kebab-case)'),\n description: z.string().describe('Command description'),\n usage: z.string().describe('Usage example'),\n parameters: z.array(z.object({\n name: z.string(),\n type: z.string(),\n required: z.boolean(),\n description: z.string()\n })).optional().describe('Parameters'),\n examples: z.array(z.string()).optional().describe('Examples')\n }),\n execute: async ({ name, description, usage, parameters, examples }) => {\n try {\n const { writeFileSync, existsSync, mkdirSync } = await import('fs');\n const { join } = await import('path');\n\n const commandsDir = join(process.cwd(), '.claude', 'commands');\n if (!existsSync(commandsDir)) mkdirSync(commandsDir, { recursive: true });\n\n const markdown = `# ${name.split('-').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ')} Command\n\n## Description\n${description}\n\n## Usage\n\\`\\`\\`bash\n${usage}\n\\`\\`\\`\n\n${parameters && parameters.length > 0 ? `## Parameters\\n| Name | Type | Required | Description |\\n|------|------|----------|-------------|\\n${parameters.map(p => `| \\`${p.name}\\` | ${p.type} | ${p.required ? 'Yes' : 'No'} | ${p.description} |`).join('\\n')}\\n` : ''}\n\n${examples && examples.length > 0 ? `## Examples\\n\\n${examples.map((ex, i) => `### Example ${i + 1}\\n\\`\\`\\`bash\\n${ex}\\n\\`\\`\\`\\n`).join('\\n')}` : ''}\n\n---\n*Generated: ${new Date().toISOString()}*\n`;\n\n const filePath = join(commandsDir, `${name}.md`);\n if (existsSync(filePath)) throw new Error(`Command '${name}' already exists`);\n\n writeFileSync(filePath, markdown, 'utf8');\n\n return JSON.stringify({\n success: true,\n command: name,\n filePath,\n message: `Command '${name}' created successfully`,\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to add command: ${error.message}`);\n }\n }\n});\n\nconsole.error('✅ Registered 11 tools successfully');\nconsole.error('🔌 Starting stdio transport...');\n\n// Start with stdio transport\nserver.start({ transportType: 'stdio' }).then(() => {\n console.error('✅ FastMCP Full Server running on stdio');\n}).catch((error) => {\n console.error('❌ Failed to start server:', error);\n process.exit(1);\n});\n"]}
1
+ {"version":3,"file":"stdio-full.js","sourceRoot":"","sources":["../../../../src/mcp/fastmcp/servers/stdio-full.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n/* eslint-disable @typescript-eslint/no-explicit-any -- pre-existing catch(error: any) handlers; outside scope of CWE-78 fix */\n// Full FastMCP server with stdio transport - All 11 claude-flow-sdk tools\nimport { FastMCP } from 'fastmcp';\nimport { z } from 'zod';\nimport { execFileSync } from 'child_process';\n\n// Security: All shell-outs use execFileSync with argv arrays (shell: false) to\n// prevent OS command injection via tool parameters (CWE-78). Do NOT reintroduce\n// execSync with template-string interpolation here.\nconst NPX_EXEC_OPTS = { shell: false as const };\n\nconsole.error('🚀 Starting FastMCP Full Server (stdio transport)...');\nconsole.error('📦 Loading 11 tools: memory (3), swarm (3), agent (5)');\n\n// Create server\nconst server = new FastMCP({\n name: 'fastmcp-stdio-full',\n version: '1.0.0'\n});\n\n// Tool 1: Memory Store\nserver.addTool({\n name: 'memory_store',\n description: 'Store a value in persistent memory with optional namespace and TTL',\n parameters: z.object({\n key: z.string().min(1).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().positive().optional().describe('Time-to-live in seconds')\n }),\n execute: async ({ key, value, namespace, ttl }) => {\n try {\n const args = ['claude-flow@alpha', 'memory', 'store', key, value, '--namespace', namespace];\n if (ttl) args.push('--ttl', String(ttl));\n\n execFileSync('npx', args, { ...NPX_EXEC_OPTS, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });\n\n return JSON.stringify({\n success: true,\n key,\n namespace,\n size: value.length,\n ttl,\n timestamp: new Date().toISOString(),\n message: 'Memory stored successfully'\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to store memory: ${error.message}`);\n }\n }\n});\n\n// Tool 2: Memory Retrieve\nserver.addTool({\n name: 'memory_retrieve',\n description: 'Retrieve a value from persistent memory',\n parameters: z.object({\n key: z.string().min(1).describe('Memory key'),\n namespace: z.string().optional().default('default').describe('Memory namespace')\n }),\n execute: async ({ key, namespace }) => {\n try {\n const result = execFileSync(\n 'npx',\n ['claude-flow@alpha', 'memory', 'retrieve', key, '--namespace', namespace],\n { ...NPX_EXEC_OPTS, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 }\n );\n\n return JSON.stringify({\n success: true,\n key,\n namespace,\n value: result.trim(),\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to retrieve memory: ${error.message}`);\n }\n }\n});\n\n// Tool 3: Memory Search\nserver.addTool({\n name: 'memory_search',\n description: 'Search for keys matching a pattern in memory with wildcard support',\n parameters: z.object({\n pattern: z.string().min(1).describe('Search pattern (supports wildcards like * and ?)'),\n namespace: z.string().optional().describe('Memory namespace to search in (searches all if not specified)'),\n limit: z.number().positive().optional().default(10).describe('Maximum number of results to return (1-100)')\n .refine((val) => val >= 1 && val <= 100, { message: 'Limit must be between 1 and 100' })\n }),\n execute: async ({ pattern, namespace, limit }) => {\n try {\n const args = ['claude-flow@alpha', 'memory', 'search', pattern];\n if (namespace) args.push('--namespace', namespace);\n args.push('--limit', String(limit));\n\n const result = execFileSync('npx', args, { ...NPX_EXEC_OPTS, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });\n\n return JSON.stringify({\n success: true,\n pattern,\n namespace: namespace || 'all',\n limit,\n results: result.trim(),\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to search memory: ${error.message}`);\n }\n }\n});\n\n// Tool 4: Swarm Init\nserver.addTool({\n name: 'swarm_init',\n description: 'Initialize a multi-agent swarm with specified topology and strategy',\n parameters: z.object({\n topology: z.enum(['mesh', 'hierarchical', 'ring', 'star'])\n .describe('Swarm topology: mesh (peer-to-peer), hierarchical (tree), ring (circular), star (centralized)'),\n maxAgents: z.number().positive().optional().default(8).describe('Maximum number of agents in the swarm (1-100)')\n .refine((val) => val >= 1 && val <= 100, { message: 'maxAgents must be between 1 and 100' }),\n strategy: z.enum(['balanced', 'specialized', 'adaptive']).optional().default('balanced')\n .describe('Agent distribution strategy: balanced (equal), specialized (role-based), adaptive (dynamic)')\n }),\n execute: async ({ topology, maxAgents, strategy }) => {\n try {\n const result = execFileSync(\n 'npx',\n ['claude-flow@alpha', 'swarm', 'init', '--topology', topology, '--max-agents', String(maxAgents), '--strategy', strategy],\n { ...NPX_EXEC_OPTS, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 }\n );\n\n return JSON.stringify({\n success: true,\n topology,\n maxAgents,\n strategy,\n message: 'Swarm initialized successfully',\n details: result.trim(),\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to initialize swarm: ${error.message}`);\n }\n }\n});\n\n// Tool 5: Agent Spawn\nserver.addTool({\n name: 'agent_spawn',\n description: 'Spawn a new agent in the swarm with specified type and capabilities',\n parameters: z.object({\n type: z.enum(['researcher', 'coder', 'analyst', 'optimizer', 'coordinator'])\n .describe('Agent type: researcher (data gathering), coder (implementation), analyst (analysis), optimizer (performance), coordinator (orchestration)'),\n capabilities: z.array(z.string()).optional()\n .describe('Specific capabilities for the agent (e.g., [\"python\", \"testing\", \"documentation\"])'),\n name: z.string().optional().describe('Custom agent name/identifier')\n }),\n execute: async ({ type, capabilities, name }) => {\n try {\n const args = ['claude-flow@alpha', 'agent', 'spawn', '--type', type];\n if (capabilities && capabilities.length > 0) args.push('--capabilities', capabilities.join(','));\n if (name) args.push('--name', name);\n const result = execFileSync('npx', args, { ...NPX_EXEC_OPTS, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });\n\n return JSON.stringify({\n success: true,\n type,\n capabilities: capabilities || [],\n name: name || `${type}-${Date.now()}`,\n message: 'Agent spawned successfully',\n details: result.trim(),\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to spawn agent: ${error.message}`);\n }\n }\n});\n\n// Tool 6: Task Orchestrate\nserver.addTool({\n name: 'task_orchestrate',\n description: 'Orchestrate a complex task across the swarm with specified strategy and priority',\n parameters: z.object({\n task: z.string().min(1).describe('Task description or instructions for the swarm to execute'),\n strategy: z.enum(['parallel', 'sequential', 'adaptive']).optional().default('adaptive')\n .describe('Execution strategy: parallel (simultaneous), sequential (ordered), adaptive (dynamic based on task)'),\n priority: z.enum(['low', 'medium', 'high', 'critical']).optional().default('medium')\n .describe('Task priority level: low, medium, high, or critical'),\n maxAgents: z.number().positive().optional().describe('Maximum number of agents to use for this task (1-10)')\n .refine((val) => !val || (val >= 1 && val <= 10), { message: 'maxAgents must be between 1 and 10' })\n }),\n execute: async ({ task, strategy, priority, maxAgents }) => {\n try {\n const args = ['claude-flow@alpha', 'task', 'orchestrate', task, '--strategy', strategy, '--priority', priority];\n if (maxAgents) args.push('--max-agents', String(maxAgents));\n const result = execFileSync('npx', args, { ...NPX_EXEC_OPTS, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024, timeout: 300000 });\n\n return JSON.stringify({\n success: true,\n task,\n strategy,\n priority,\n maxAgents: maxAgents || 'auto',\n message: 'Task orchestrated successfully',\n details: result.trim(),\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to orchestrate task: ${error.message}`);\n }\n }\n});\n\n// Tool 7: Agent Execute\nserver.addTool({\n name: 'agent_execute',\n description: 'Execute a specific agent with a task (equivalent to --agent CLI command)',\n parameters: z.object({\n agent: z.string().describe('Agent name to execute'),\n task: z.string().describe('Task description'),\n stream: z.boolean().optional().default(false).describe('Enable streaming output')\n }),\n execute: async ({ agent, task, stream }) => {\n try {\n const args = ['agentic-flow', '--agent', agent, '--task', task];\n if (stream) args.push('--stream');\n const result = execFileSync('npx', args, { ...NPX_EXEC_OPTS, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024, timeout: 300000 });\n\n return JSON.stringify({\n success: true,\n agent,\n task: task.substring(0, 100),\n output: result,\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to execute agent: ${error.message}`);\n }\n }\n});\n\n// Tool 8: Agent Parallel\nserver.addTool({\n name: 'agent_parallel',\n description: 'Run parallel mode with 3 agents (research, code review, data analysis)',\n parameters: z.object({\n topic: z.string().optional().describe('Research topic'),\n diff: z.string().optional().describe('Code diff for review'),\n dataset: z.string().optional().describe('Dataset hint'),\n streaming: z.boolean().optional().default(false).describe('Enable streaming')\n }),\n execute: async ({ topic, diff, dataset, streaming }) => {\n try {\n const env = {\n ...process.env,\n ...(topic && { TOPIC: topic }),\n ...(diff && { DIFF: diff }),\n ...(dataset && { DATASET: dataset }),\n ...(streaming && { ENABLE_STREAMING: 'true' })\n };\n const result = execFileSync('npx', ['agentic-flow'], { ...NPX_EXEC_OPTS, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024, timeout: 300000, env });\n\n return JSON.stringify({\n success: true,\n mode: 'parallel',\n agents: ['research', 'code_review', 'data'],\n output: result,\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to run parallel mode: ${error.message}`);\n }\n }\n});\n\n// Tool 9: Agent List\nserver.addTool({\n name: 'agent_list',\n description: 'List all available agents',\n parameters: z.object({\n format: z.enum(['summary', 'detailed', 'json']).optional().default('summary')\n }),\n execute: async ({ format }) => {\n try {\n const result = execFileSync('npx', ['agentic-flow', '--list'], { ...NPX_EXEC_OPTS, encoding: 'utf-8', maxBuffer: 5 * 1024 * 1024, timeout: 30000 });\n\n if (format === 'detailed') {\n return result;\n }\n\n const agents: any[] = [];\n const lines = result.split('\\n');\n let currentCategory = '';\n\n for (const line of lines) {\n if (line.includes(':') && line.trim().endsWith(':')) {\n currentCategory = line.replace(':', '').trim();\n } else if (line.trim().startsWith('•') || /^\\s{2,}\\w/.test(line)) {\n const match = line.match(/^\\s*[•\\s]*(\\S+)\\s+(.+)$/);\n if (match) {\n agents.push({ name: match[1], description: match[2].trim(), category: currentCategory });\n }\n }\n }\n\n return JSON.stringify({\n success: true,\n count: agents.length,\n agents,\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to list agents: ${error.message}`);\n }\n }\n});\n\n// Tool 10: Add Custom Agent\nserver.addTool({\n name: 'agent_add',\n description: 'Add a new custom agent defined in markdown',\n parameters: z.object({\n name: z.string().describe('Agent name (kebab-case)'),\n description: z.string().describe('Agent description'),\n systemPrompt: z.string().describe('System prompt'),\n category: z.string().optional().default('custom').describe('Category'),\n capabilities: z.array(z.string()).optional().describe('Capabilities')\n }),\n execute: async ({ name, description, systemPrompt, category, capabilities }) => {\n try {\n const { writeFileSync, existsSync, mkdirSync } = await import('fs');\n const { join } = await import('path');\n\n const agentsDir = join(process.cwd(), '.claude', 'agents', category || 'custom');\n if (!existsSync(agentsDir)) mkdirSync(agentsDir, { recursive: true });\n\n const markdown = `# ${name.split('-').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ')}\n\n## Description\n${description}\n\n## System Prompt\n${systemPrompt}\n\n${capabilities && capabilities.length > 0 ? `## Capabilities\\n${capabilities.map(c => `- ${c}`).join('\\n')}\\n` : ''}\n\n## Usage\n\\`\\`\\`bash\nnpx agentic-flow --agent ${name} --task \"Your task\"\n\\`\\`\\`\n\n---\n*Generated: ${new Date().toISOString()}*\n`;\n\n const filePath = join(agentsDir, `${name}.md`);\n if (existsSync(filePath)) throw new Error(`Agent '${name}' already exists`);\n\n writeFileSync(filePath, markdown, 'utf8');\n\n return JSON.stringify({\n success: true,\n agent: name,\n category: category || 'custom',\n filePath,\n message: `Agent '${name}' created successfully`,\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to add agent: ${error.message}`);\n }\n }\n});\n\n// Tool 11: Add Custom Command\nserver.addTool({\n name: 'command_add',\n description: 'Add a new custom command defined in markdown',\n parameters: z.object({\n name: z.string().describe('Command name (kebab-case)'),\n description: z.string().describe('Command description'),\n usage: z.string().describe('Usage example'),\n parameters: z.array(z.object({\n name: z.string(),\n type: z.string(),\n required: z.boolean(),\n description: z.string()\n })).optional().describe('Parameters'),\n examples: z.array(z.string()).optional().describe('Examples')\n }),\n execute: async ({ name, description, usage, parameters, examples }) => {\n try {\n const { writeFileSync, existsSync, mkdirSync } = await import('fs');\n const { join } = await import('path');\n\n const commandsDir = join(process.cwd(), '.claude', 'commands');\n if (!existsSync(commandsDir)) mkdirSync(commandsDir, { recursive: true });\n\n const markdown = `# ${name.split('-').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ')} Command\n\n## Description\n${description}\n\n## Usage\n\\`\\`\\`bash\n${usage}\n\\`\\`\\`\n\n${parameters && parameters.length > 0 ? `## Parameters\\n| Name | Type | Required | Description |\\n|------|------|----------|-------------|\\n${parameters.map(p => `| \\`${p.name}\\` | ${p.type} | ${p.required ? 'Yes' : 'No'} | ${p.description} |`).join('\\n')}\\n` : ''}\n\n${examples && examples.length > 0 ? `## Examples\\n\\n${examples.map((ex, i) => `### Example ${i + 1}\\n\\`\\`\\`bash\\n${ex}\\n\\`\\`\\`\\n`).join('\\n')}` : ''}\n\n---\n*Generated: ${new Date().toISOString()}*\n`;\n\n const filePath = join(commandsDir, `${name}.md`);\n if (existsSync(filePath)) throw new Error(`Command '${name}' already exists`);\n\n writeFileSync(filePath, markdown, 'utf8');\n\n return JSON.stringify({\n success: true,\n command: name,\n filePath,\n message: `Command '${name}' created successfully`,\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to add command: ${error.message}`);\n }\n }\n});\n\nconsole.error('✅ Registered 11 tools successfully');\nconsole.error('🔌 Starting stdio transport...');\n\n// Start with stdio transport\nserver.start({ transportType: 'stdio' }).then(() => {\n console.error('✅ FastMCP Full Server running on stdio');\n}).catch((error) => {\n console.error('❌ Failed to start server:', error);\n process.exit(1);\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/agent/execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAe,MAAM,sBAAsB,CAAC;AASnE,eAAO,MAAM,gBAAgB,EAAE,cAqD9B,CAAC"}
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/agent/execute.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAe,MAAM,sBAAsB,CAAC;AASnE,eAAO,MAAM,gBAAgB,EAAE,cAsD9B,CAAC"}
@@ -1,5 +1,6 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any -- pre-existing catch(error: any) handlers; outside scope of CWE-78 fix */
1
2
  import { z } from 'zod';
2
- import { execSync } from 'child_process';
3
+ import { execFileSync } from 'child_process';
3
4
  const executeAgentSchema = z.object({
4
5
  agent: z.string().describe('Agent name to execute (e.g., coder, researcher, reviewer)'),
5
6
  task: z.string().describe('Task description for the agent'),
@@ -12,12 +13,14 @@ export const executeAgentTool = {
12
13
  async execute({ agent, task, stream }, { onProgress }) {
13
14
  try {
14
15
  onProgress?.({ progress: 0.1, message: `Starting agent: ${agent}` });
15
- // Build command
16
- const streamFlag = stream ? '--stream' : '';
17
- const cmd = `npx agentic-flow --agent "${agent}" --task "${task}" ${streamFlag}`.trim();
16
+ // Security (CWE-78): use execFileSync with argv; `agent` and `task` are attacker-influenceable.
17
+ const args = ['agentic-flow', '--agent', agent, '--task', task];
18
+ if (stream)
19
+ args.push('--stream');
18
20
  onProgress?.({ progress: 0.3, message: 'Executing agent...' });
19
21
  // Execute with timeout and capture output
20
- const result = execSync(cmd, {
22
+ const result = execFileSync('npx', args, {
23
+ shell: false,
21
24
  encoding: 'utf8',
22
25
  maxBuffer: 10 * 1024 * 1024, // 10MB buffer
23
26
  timeout: 300000, // 5 minute timeout
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/agent/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;IACvF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC3D,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;CAC5F,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC9C,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,0EAA0E;IACvF,UAAU,EAAE,kBAAkB;IAE9B,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAsC,EAAE,EAAE,UAAU,EAAe;QACpG,IAAI,CAAC;YACH,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,mBAAmB,KAAK,EAAE,EAAE,CAAC,CAAC;YAErE,gBAAgB;YAChB,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,6BAA6B,KAAK,aAAa,IAAI,KAAK,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC;YAExF,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;YAE/D,0CAA0C;YAC1C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE;gBAC3B,QAAQ,EAAE,MAAM;gBAChB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,cAAc;gBAC3C,OAAO,EAAE,MAAM,EAAE,mBAAmB;gBACpC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;aACxB,CAAC,CAAC;YAEH,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC,CAAC;YAEtE,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,OAAO,EAAE,IAAI;4BACb,KAAK;4BACL,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;4BAC5B,MAAM,EAAE,MAAM;4BACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;yBACpC,EAAE,IAAI,EAAE,CAAC,CAAC;qBACZ,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,OAAO,EAAE,KAAK;4BACd,KAAK;4BACL,KAAK,EAAE,KAAK,CAAC,OAAO;4BACpB,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE;4BAChC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;yBACpC,EAAE,IAAI,EAAE,CAAC,CAAC;qBACZ,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC","sourcesContent":["import { z } from 'zod';\nimport { ToolDefinition, ToolContext } from '../../types/index.js';\nimport { execSync } from 'child_process';\n\nconst executeAgentSchema = z.object({\n agent: z.string().describe('Agent name to execute (e.g., coder, researcher, reviewer)'),\n task: z.string().describe('Task description for the agent'),\n stream: z.boolean().optional().default(false).describe('Enable real-time streaming output')\n});\n\nexport const executeAgentTool: ToolDefinition = {\n name: 'agent_execute',\n description: 'Execute a specific agent with a task (equivalent to --agent CLI command)',\n parameters: executeAgentSchema,\n\n async execute({ agent, task, stream }: z.infer<typeof executeAgentSchema>, { onProgress }: ToolContext) {\n try {\n onProgress?.({ progress: 0.1, message: `Starting agent: ${agent}` });\n\n // Build command\n const streamFlag = stream ? '--stream' : '';\n const cmd = `npx agentic-flow --agent \"${agent}\" --task \"${task}\" ${streamFlag}`.trim();\n\n onProgress?.({ progress: 0.3, message: 'Executing agent...' });\n\n // Execute with timeout and capture output\n const result = execSync(cmd, {\n encoding: 'utf8',\n maxBuffer: 10 * 1024 * 1024, // 10MB buffer\n timeout: 300000, // 5 minute timeout\n env: { ...process.env }\n });\n\n onProgress?.({ progress: 1.0, message: 'Agent execution completed' });\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: true,\n agent,\n task: task.substring(0, 100),\n output: result,\n timestamp: new Date().toISOString()\n }, null, 2)\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n agent,\n error: error.message,\n stderr: error.stderr?.toString(),\n timestamp: new Date().toISOString()\n }, null, 2)\n }],\n isError: true\n };\n }\n }\n};\n"]}
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/agent/execute.ts"],"names":[],"mappings":"AAAA,+HAA+H;AAC/H,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;IACvF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC3D,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;CAC5F,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC9C,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,0EAA0E;IACvF,UAAU,EAAE,kBAAkB;IAE9B,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAsC,EAAE,EAAE,UAAU,EAAe;QACpG,IAAI,CAAC;YACH,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,mBAAmB,KAAK,EAAE,EAAE,CAAC,CAAC;YAErE,gGAAgG;YAChG,MAAM,IAAI,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YAChE,IAAI,MAAM;gBAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAElC,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;YAE/D,0CAA0C;YAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE;gBACvC,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,MAAM;gBAChB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,cAAc;gBAC3C,OAAO,EAAE,MAAM,EAAE,mBAAmB;gBACpC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;aACxB,CAAC,CAAC;YAEH,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC,CAAC;YAEtE,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,OAAO,EAAE,IAAI;4BACb,KAAK;4BACL,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;4BAC5B,MAAM,EAAE,MAAM;4BACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;yBACpC,EAAE,IAAI,EAAE,CAAC,CAAC;qBACZ,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,OAAO,EAAE,KAAK;4BACd,KAAK;4BACL,KAAK,EAAE,KAAK,CAAC,OAAO;4BACpB,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE;4BAChC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;yBACpC,EAAE,IAAI,EAAE,CAAC,CAAC;qBACZ,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any -- pre-existing catch(error: any) handlers; outside scope of CWE-78 fix */\nimport { z } from 'zod';\nimport { ToolDefinition, ToolContext } from '../../types/index.js';\nimport { execFileSync } from 'child_process';\n\nconst executeAgentSchema = z.object({\n agent: z.string().describe('Agent name to execute (e.g., coder, researcher, reviewer)'),\n task: z.string().describe('Task description for the agent'),\n stream: z.boolean().optional().default(false).describe('Enable real-time streaming output')\n});\n\nexport const executeAgentTool: ToolDefinition = {\n name: 'agent_execute',\n description: 'Execute a specific agent with a task (equivalent to --agent CLI command)',\n parameters: executeAgentSchema,\n\n async execute({ agent, task, stream }: z.infer<typeof executeAgentSchema>, { onProgress }: ToolContext) {\n try {\n onProgress?.({ progress: 0.1, message: `Starting agent: ${agent}` });\n\n // Security (CWE-78): use execFileSync with argv; `agent` and `task` are attacker-influenceable.\n const args = ['agentic-flow', '--agent', agent, '--task', task];\n if (stream) args.push('--stream');\n\n onProgress?.({ progress: 0.3, message: 'Executing agent...' });\n\n // Execute with timeout and capture output\n const result = execFileSync('npx', args, {\n shell: false,\n encoding: 'utf8',\n maxBuffer: 10 * 1024 * 1024, // 10MB buffer\n timeout: 300000, // 5 minute timeout\n env: { ...process.env }\n });\n\n onProgress?.({ progress: 1.0, message: 'Agent execution completed' });\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: true,\n agent,\n task: task.substring(0, 100),\n output: result,\n timestamp: new Date().toISOString()\n }, null, 2)\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n agent,\n error: error.message,\n stderr: error.stderr?.toString(),\n timestamp: new Date().toISOString()\n }, null, 2)\n }],\n isError: true\n };\n }\n }\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/agent/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAe,MAAM,sBAAsB,CAAC;AAQnE,eAAO,MAAM,cAAc,EAAE,cA+E5B,CAAC"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/agent/list.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAe,MAAM,sBAAsB,CAAC;AAQnE,eAAO,MAAM,cAAc,EAAE,cAgF5B,CAAC"}
@@ -1,5 +1,6 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any -- pre-existing catch(error: any) handlers; outside scope of CWE-78 fix */
1
2
  import { z } from 'zod';
2
- import { execSync } from 'child_process';
3
+ import { execFileSync } from 'child_process';
3
4
  const listAgentsSchema = z.object({
4
5
  format: z.enum(['summary', 'detailed', 'json']).optional().default('summary')
5
6
  .describe('Output format for agent list')
@@ -12,7 +13,8 @@ export const listAgentsTool = {
12
13
  try {
13
14
  onProgress?.({ progress: 0.3, message: 'Loading available agents...' });
14
15
  // Execute list command
15
- const result = execSync('npx agentic-flow --list', {
16
+ const result = execFileSync('npx', ['agentic-flow', '--list'], {
17
+ shell: false,
16
18
  encoding: 'utf8',
17
19
  maxBuffer: 5 * 1024 * 1024,
18
20
  timeout: 30000
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/agent/list.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport { ToolDefinition, ToolContext } from '../../types/index.js';\nimport { execSync } from 'child_process';\n\nconst listAgentsSchema = z.object({\n format: z.enum(['summary', 'detailed', 'json']).optional().default('summary')\n .describe('Output format for agent list')\n});\n\nexport const listAgentsTool: ToolDefinition = {\n name: 'agent_list',\n description: 'List all available agents (equivalent to --list CLI command)',\n parameters: listAgentsSchema,\n\n async execute({ format }: z.infer<typeof listAgentsSchema>, { onProgress }: ToolContext) {\n try {\n onProgress?.({ progress: 0.3, message: 'Loading available agents...' });\n\n // Execute list command\n const result = execSync('npx agentic-flow --list', {\n encoding: 'utf8',\n maxBuffer: 5 * 1024 * 1024,\n timeout: 30000\n });\n\n onProgress?.({ progress: 0.8, message: 'Processing agent list...' });\n\n // Parse the output to extract agent info\n const agents: any[] = [];\n const lines = result.split('\\n');\n\n let currentCategory = '';\n for (const line of lines) {\n if (line.includes(':') && line.trim().endsWith(':')) {\n currentCategory = line.replace(':', '').trim();\n } else if (line.trim().startsWith('•') || /^\\s{2,}\\w/.test(line)) {\n const match = line.match(/^\\s*[•\\s]*(\\S+)\\s+(.+)$/);\n if (match) {\n agents.push({\n name: match[1],\n description: match[2].trim(),\n category: currentCategory\n });\n }\n }\n }\n\n onProgress?.({ progress: 1.0, message: `Found ${agents.length} agents` });\n\n let output;\n if (format === 'json') {\n output = JSON.stringify({ agents, count: agents.length }, null, 2);\n } else if (format === 'detailed') {\n output = result;\n } else {\n output = JSON.stringify({\n success: true,\n count: agents.length,\n agents: agents.map(a => ({\n name: a.name,\n category: a.category,\n description: a.description.substring(0, 100) + (a.description.length > 100 ? '...' : '')\n })),\n timestamp: new Date().toISOString()\n }, null, 2);\n }\n\n return {\n content: [{\n type: 'text',\n text: output\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: error.message,\n stderr: error.stderr?.toString(),\n timestamp: new Date().toISOString()\n }, null, 2)\n }],\n isError: true\n };\n }\n }\n};\n"]}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/agent/list.ts"],"names":[],"mappings":"AAAA,+HAA+H;AAC/H,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;SAC1E,QAAQ,CAAC,8BAA8B,CAAC;CAC5C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,8DAA8D;IAC3E,UAAU,EAAE,gBAAgB;IAE5B,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAoC,EAAE,EAAE,UAAU,EAAe;QACrF,IAAI,CAAC;YACH,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,CAAC;YAExE,uBAAuB;YACvB,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAE;gBAC7D,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,MAAM;gBAChB,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;gBAC1B,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YAEH,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;YAErE,yCAAyC;YACzC,MAAM,MAAM,GAAU,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEjC,IAAI,eAAe,GAAG,EAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpD,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACjD,CAAC;qBAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;oBACpD,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;4BACd,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;4BAC5B,QAAQ,EAAE,eAAe;yBAC1B,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;YAED,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,MAAM,CAAC,MAAM,SAAS,EAAE,CAAC,CAAC;YAE1E,IAAI,MAAM,CAAC;YACX,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACrE,CAAC;iBAAM,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;gBACjC,MAAM,GAAG,MAAM,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;oBACtB,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,MAAM,CAAC,MAAM;oBACpB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACvB,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;wBACpB,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;qBACzF,CAAC,CAAC;oBACH,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACd,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,MAAM;qBACb,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,KAAK,CAAC,OAAO;4BACpB,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE;4BAChC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;yBACpC,EAAE,IAAI,EAAE,CAAC,CAAC;qBACZ,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any -- pre-existing catch(error: any) handlers; outside scope of CWE-78 fix */\nimport { z } from 'zod';\nimport { ToolDefinition, ToolContext } from '../../types/index.js';\nimport { execFileSync } from 'child_process';\n\nconst listAgentsSchema = z.object({\n format: z.enum(['summary', 'detailed', 'json']).optional().default('summary')\n .describe('Output format for agent list')\n});\n\nexport const listAgentsTool: ToolDefinition = {\n name: 'agent_list',\n description: 'List all available agents (equivalent to --list CLI command)',\n parameters: listAgentsSchema,\n\n async execute({ format }: z.infer<typeof listAgentsSchema>, { onProgress }: ToolContext) {\n try {\n onProgress?.({ progress: 0.3, message: 'Loading available agents...' });\n\n // Execute list command\n const result = execFileSync('npx', ['agentic-flow', '--list'], {\n shell: false,\n encoding: 'utf8',\n maxBuffer: 5 * 1024 * 1024,\n timeout: 30000\n });\n\n onProgress?.({ progress: 0.8, message: 'Processing agent list...' });\n\n // Parse the output to extract agent info\n const agents: any[] = [];\n const lines = result.split('\\n');\n\n let currentCategory = '';\n for (const line of lines) {\n if (line.includes(':') && line.trim().endsWith(':')) {\n currentCategory = line.replace(':', '').trim();\n } else if (line.trim().startsWith('•') || /^\\s{2,}\\w/.test(line)) {\n const match = line.match(/^\\s*[•\\s]*(\\S+)\\s+(.+)$/);\n if (match) {\n agents.push({\n name: match[1],\n description: match[2].trim(),\n category: currentCategory\n });\n }\n }\n }\n\n onProgress?.({ progress: 1.0, message: `Found ${agents.length} agents` });\n\n let output;\n if (format === 'json') {\n output = JSON.stringify({ agents, count: agents.length }, null, 2);\n } else if (format === 'detailed') {\n output = result;\n } else {\n output = JSON.stringify({\n success: true,\n count: agents.length,\n agents: agents.map(a => ({\n name: a.name,\n category: a.category,\n description: a.description.substring(0, 100) + (a.description.length > 100 ? '...' : '')\n })),\n timestamp: new Date().toISOString()\n }, null, 2);\n }\n\n return {\n content: [{\n type: 'text',\n text: output\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: error.message,\n stderr: error.stderr?.toString(),\n timestamp: new Date().toISOString()\n }, null, 2)\n }],\n isError: true\n };\n }\n }\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"parallel.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/agent/parallel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAe,MAAM,sBAAsB,CAAC;AAUnE,eAAO,MAAM,gBAAgB,EAAE,cA2D9B,CAAC"}
1
+ {"version":3,"file":"parallel.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/agent/parallel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAe,MAAM,sBAAsB,CAAC;AAUnE,eAAO,MAAM,gBAAgB,EAAE,cA4D9B,CAAC"}
@@ -1,5 +1,6 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any -- pre-existing catch(error: any) handlers; outside scope of CWE-78 fix */
1
2
  import { z } from 'zod';
2
- import { execSync } from 'child_process';
3
+ import { execFileSync } from 'child_process';
3
4
  const parallelModeSchema = z.object({
4
5
  topic: z.string().optional().describe('Research topic for parallel mode'),
5
6
  diff: z.string().optional().describe('Code diff for review'),
@@ -23,7 +24,8 @@ export const parallelModeTool = {
23
24
  };
24
25
  onProgress?.({ progress: 0.3, message: 'Executing 3 agents in parallel...' });
25
26
  // Execute parallel mode
26
- const result = execSync('npx agentic-flow', {
27
+ const result = execFileSync('npx', ['agentic-flow'], {
28
+ shell: false,
27
29
  encoding: 'utf8',
28
30
  maxBuffer: 10 * 1024 * 1024,
29
31
  timeout: 300000,
@@ -1 +1 @@
1
- {"version":3,"file":"parallel.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/agent/parallel.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport { ToolDefinition, ToolContext } from '../../types/index.js';\nimport { execSync } from 'child_process';\n\nconst parallelModeSchema = z.object({\n topic: z.string().optional().describe('Research topic for parallel mode'),\n diff: z.string().optional().describe('Code diff for review'),\n dataset: z.string().optional().describe('Dataset hint for analysis'),\n streaming: z.boolean().optional().default(false).describe('Enable streaming output')\n});\n\nexport const parallelModeTool: ToolDefinition = {\n name: 'agent_parallel',\n description: 'Run parallel mode with 3 agents (research, code review, data analysis)',\n parameters: parallelModeSchema,\n\n async execute({ topic, diff, dataset, streaming }: z.infer<typeof parallelModeSchema>, { onProgress }: ToolContext) {\n try {\n onProgress?.({ progress: 0.1, message: 'Starting parallel agent execution' });\n\n // Set environment variables\n const env = {\n ...process.env,\n ...(topic && { TOPIC: topic }),\n ...(diff && { DIFF: diff }),\n ...(dataset && { DATASET: dataset }),\n ...(streaming && { ENABLE_STREAMING: 'true' })\n };\n\n onProgress?.({ progress: 0.3, message: 'Executing 3 agents in parallel...' });\n\n // Execute parallel mode\n const result = execSync('npx agentic-flow', {\n encoding: 'utf8',\n maxBuffer: 10 * 1024 * 1024,\n timeout: 300000,\n env\n });\n\n onProgress?.({ progress: 1.0, message: 'Parallel execution completed' });\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: true,\n mode: 'parallel',\n agents: ['research', 'code_review', 'data'],\n config: { topic, diff, dataset, streaming },\n output: result,\n timestamp: new Date().toISOString()\n }, null, 2)\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n mode: 'parallel',\n error: error.message,\n stderr: error.stderr?.toString(),\n timestamp: new Date().toISOString()\n }, null, 2)\n }],\n isError: true\n };\n }\n }\n};\n"]}
1
+ {"version":3,"file":"parallel.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/agent/parallel.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any -- pre-existing catch(error: any) handlers; outside scope of CWE-78 fix */\nimport { z } from 'zod';\nimport { ToolDefinition, ToolContext } from '../../types/index.js';\nimport { execFileSync } from 'child_process';\n\nconst parallelModeSchema = z.object({\n topic: z.string().optional().describe('Research topic for parallel mode'),\n diff: z.string().optional().describe('Code diff for review'),\n dataset: z.string().optional().describe('Dataset hint for analysis'),\n streaming: z.boolean().optional().default(false).describe('Enable streaming output')\n});\n\nexport const parallelModeTool: ToolDefinition = {\n name: 'agent_parallel',\n description: 'Run parallel mode with 3 agents (research, code review, data analysis)',\n parameters: parallelModeSchema,\n\n async execute({ topic, diff, dataset, streaming }: z.infer<typeof parallelModeSchema>, { onProgress }: ToolContext) {\n try {\n onProgress?.({ progress: 0.1, message: 'Starting parallel agent execution' });\n\n // Set environment variables\n const env = {\n ...process.env,\n ...(topic && { TOPIC: topic }),\n ...(diff && { DIFF: diff }),\n ...(dataset && { DATASET: dataset }),\n ...(streaming && { ENABLE_STREAMING: 'true' })\n };\n\n onProgress?.({ progress: 0.3, message: 'Executing 3 agents in parallel...' });\n\n // Execute parallel mode\n const result = execFileSync('npx', ['agentic-flow'], {\n shell: false,\n encoding: 'utf8',\n maxBuffer: 10 * 1024 * 1024,\n timeout: 300000,\n env\n });\n\n onProgress?.({ progress: 1.0, message: 'Parallel execution completed' });\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: true,\n mode: 'parallel',\n agents: ['research', 'code_review', 'data'],\n config: { topic, diff, dataset, streaming },\n output: result,\n timestamp: new Date().toISOString()\n }, null, 2)\n }]\n };\n } catch (error: any) {\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n mode: 'parallel',\n error: error.message,\n stderr: error.stderr?.toString(),\n timestamp: new Date().toISOString()\n }, null, 2)\n }],\n isError: true\n };\n }\n }\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"pretrain.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/pretrain.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAS3D,eAAO,MAAM,gBAAgB,EAAE,cAyL9B,CAAC"}
1
+ {"version":3,"file":"pretrain.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/pretrain.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQ3D,eAAO,MAAM,gBAAgB,EAAE,cAkM9B,CAAC"}
@@ -5,7 +5,7 @@
5
5
  import { z } from 'zod';
6
6
  import * as path from 'path';
7
7
  import * as fs from 'fs';
8
- import { execSync } from 'child_process';
8
+ import { execSync, execFileSync } from 'child_process';
9
9
  import { loadIntelligence, saveIntelligence, getAgentForFile, simpleEmbed } from './shared.js';
10
10
  export const hookPretrainTool = {
11
11
  name: 'hook_pretrain',
@@ -17,7 +17,7 @@ export const hookPretrainTool = {
17
17
  skipFiles: z.boolean().optional().default(false).describe('Skip file structure analysis'),
18
18
  verbose: z.boolean().optional().default(false).describe('Show detailed progress')
19
19
  }),
20
- execute: async ({ depth, incremental, skipGit, skipFiles, verbose }, { onProgress }) => {
20
+ execute: async ({ depth, incremental: _incremental, skipGit, skipFiles, verbose }, { onProgress }) => {
21
21
  const startTime = Date.now();
22
22
  const intel = loadIntelligence();
23
23
  const stats = { files: 0, patterns: 0, memories: 0, coedits: 0 };
@@ -26,6 +26,8 @@ export const hookPretrainTool = {
26
26
  if (!skipFiles) {
27
27
  onProgress?.({ progress: 0.1, message: 'Analyzing file structure...' });
28
28
  try {
29
+ // Static command, no user input — shell is required for the `||` fallback
30
+ // and `2>/dev/null` redirection. NOT a CWE-78 sink.
29
31
  const filesOutput = execSync('git ls-files 2>/dev/null || find . -type f -not -path "./.git/*" -not -path "./node_modules/*" -not -path "./target/*" 2>/dev/null', { encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 });
30
32
  const files = filesOutput.trim().split('\n').filter(f => f);
31
33
  for (const file of files) {
@@ -58,7 +60,11 @@ export const hookPretrainTool = {
58
60
  if (!skipGit) {
59
61
  onProgress?.({ progress: 0.4, message: 'Analyzing git history...' });
60
62
  try {
61
- const gitLog = execSync(`git log --name-only --pretty=format:"COMMIT:%H" -n ${depth} 2>/dev/null`, { encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 });
63
+ // Security (CWE-78): depth is z.number() validated, but use execFileSync
64
+ // with argv to hard-prevent any future schema relaxation from becoming
65
+ // an injection sink. Coerce to a positive integer explicitly.
66
+ const safeDepth = Math.max(1, Math.floor(Number(depth) || 100));
67
+ const gitLog = execFileSync('git', ['log', '--name-only', '--pretty=format:COMMIT:%H', '-n', String(safeDepth)], { shell: false, encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024, stdio: ['pipe', 'pipe', 'ignore'] });
62
68
  const commits = gitLog.split('COMMIT:').filter(c => c.trim());
63
69
  const coEditMap = {};
64
70
  for (const commit of commits) {
@@ -125,6 +131,8 @@ export const hookPretrainTool = {
125
131
  // Phase 4: Build directory-agent mappings
126
132
  onProgress?.({ progress: 0.85, message: 'Building directory mappings...' });
127
133
  try {
134
+ // Static command, no user input — shell required for `2>/dev/null || echo`.
135
+ // NOT a CWE-78 sink.
128
136
  const dirs = execSync('find . -type d -maxdepth 2 -not -path "./.git*" -not -path "./node_modules*" 2>/dev/null || echo "."', { encoding: 'utf-8' }).trim().split('\n');
129
137
  for (const dir of dirs) {
130
138
  const name = path.basename(dir);