agentic-flow 2.0.12 → 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 (63) 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/sdk/plugins.d.ts +6 -6
  50. package/dist/sdk/plugins.d.ts.map +1 -1
  51. package/dist/sdk/plugins.js +37 -0
  52. package/dist/sdk/plugins.js.map +1 -1
  53. package/dist/transport/index.d.ts +1 -0
  54. package/dist/transport/index.d.ts.map +1 -1
  55. package/dist/transport/index.js +1 -0
  56. package/dist/transport/index.js.map +1 -1
  57. package/dist/transport/quic-loader.d.ts +217 -0
  58. package/dist/transport/quic-loader.d.ts.map +1 -0
  59. package/dist/transport/quic-loader.js +412 -0
  60. package/dist/transport/quic-loader.js.map +1 -0
  61. package/dist/utils/agentBoosterPreprocessor.js +16 -22
  62. package/dist/utils/agentBoosterPreprocessor.js.map +1 -1
  63. package/package.json +5 -4
@@ -1 +1 @@
1
- {"version":3,"file":"pretrain.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/pretrain.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Pretrain Hook - Analyze repository and bootstrap intelligence\n * Swarm-distributed when available, falls back to sequential\n */\n\nimport { z } from 'zod';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { execSync } from 'child_process';\nimport type { ToolDefinition } from '../../types/index.js';\nimport {\n loadIntelligence,\n saveIntelligence,\n getAgentForFile,\n simpleEmbed,\n agentMapping\n} from './shared.js';\n\nexport const hookPretrainTool: ToolDefinition = {\n name: 'hook_pretrain',\n description: 'Analyze repository with swarm for intelligent patterns',\n parameters: z.object({\n depth: z.number().optional().default(100).describe('Git history depth'),\n incremental: z.boolean().optional().default(false).describe('Only analyze changes since last pretrain'),\n skipGit: z.boolean().optional().default(false).describe('Skip git history analysis'),\n skipFiles: z.boolean().optional().default(false).describe('Skip file structure analysis'),\n verbose: z.boolean().optional().default(false).describe('Show detailed progress')\n }),\n execute: async ({ depth, incremental, skipGit, skipFiles, verbose }, { onProgress }) => {\n const startTime = Date.now();\n const intel = loadIntelligence();\n const stats = { files: 0, patterns: 0, memories: 0, coedits: 0 };\n\n onProgress?.({ progress: 0, message: 'Starting pretrain analysis...' });\n\n // Phase 1: Analyze file structure\n if (!skipFiles) {\n onProgress?.({ progress: 0.1, message: 'Analyzing file structure...' });\n\n try {\n const filesOutput = execSync(\n 'git ls-files 2>/dev/null || find . -type f -not -path \"./.git/*\" -not -path \"./node_modules/*\" -not -path \"./target/*\" 2>/dev/null',\n { encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 }\n );\n\n const files = filesOutput.trim().split('\\n').filter(f => f);\n\n for (const file of files) {\n stats.files++;\n const ext = path.extname(file);\n const agent = getAgentForFile(file);\n\n // Create Q-learning pattern\n const state = `edit:${ext || 'unknown'}`;\n if (!intel.patterns[state]) {\n intel.patterns[state] = {};\n }\n intel.patterns[state][agent] = (intel.patterns[state][agent] || 0) + 0.3;\n stats.patterns++;\n\n // Track directory patterns\n const dir = path.dirname(file);\n const dirParts = dir.split('/');\n if (dirParts[0] && !intel.dirPatterns[dirParts[0]]) {\n intel.dirPatterns[dirParts[0]] = agent;\n }\n }\n\n if (verbose) {\n console.log(`[Pretrain] Analyzed ${stats.files} files`);\n }\n } catch (e) {\n // Continue without file analysis\n }\n }\n\n // Phase 2: Analyze git history for co-edit patterns\n if (!skipGit) {\n onProgress?.({ progress: 0.4, message: 'Analyzing git history...' });\n\n try {\n const gitLog = execSync(\n `git log --name-only --pretty=format:\"COMMIT:%H\" -n ${depth} 2>/dev/null`,\n { encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 }\n );\n\n const commits = gitLog.split('COMMIT:').filter(c => c.trim());\n const coEditMap: Record<string, number> = {};\n\n for (const commit of commits) {\n const lines = commit.trim().split('\\n').filter(l => l && !l.match(/^[a-f0-9]{40}$/));\n const files = lines.filter(f => f.trim());\n\n // Track co-edits\n for (let i = 0; i < files.length; i++) {\n for (let j = i + 1; j < files.length; j++) {\n const key = [files[i], files[j]].sort().join('|');\n coEditMap[key] = (coEditMap[key] || 0) + 1;\n }\n }\n }\n\n // Store strong co-edit patterns\n const strongPatterns = Object.entries(coEditMap)\n .filter(([, count]) => count >= 3)\n .sort((a, b) => b[1] - a[1]);\n\n for (const [key, count] of strongPatterns.slice(0, 100)) {\n const [file1, file2] = key.split('|');\n if (!intel.sequences[file1]) {\n intel.sequences[file1] = [];\n }\n\n const existing = intel.sequences[file1].find(s => s.file === file2);\n if (existing) {\n existing.score += count;\n } else {\n intel.sequences[file1].push({ file: file2, score: count });\n }\n stats.coedits++;\n }\n\n if (verbose) {\n console.log(`[Pretrain] Found ${strongPatterns.length} co-edit patterns`);\n }\n } catch (e) {\n // Continue without git analysis\n }\n }\n\n // Phase 3: Create memories from important files\n onProgress?.({ progress: 0.7, message: 'Creating memories from key files...' });\n\n const importantFiles = [\n 'README.md', 'CLAUDE.md', 'package.json', 'Cargo.toml',\n 'pyproject.toml', 'go.mod', '.claude/settings.json', 'tsconfig.json'\n ];\n\n for (const filename of importantFiles) {\n const filePath = path.join(process.cwd(), filename);\n if (fs.existsSync(filePath)) {\n try {\n const content = fs.readFileSync(filePath, 'utf-8').slice(0, 2000);\n intel.memories.push({\n content: `[${filename}] ${content.replace(/\\n/g, ' ').slice(0, 500)}`,\n type: 'project',\n created: new Date().toISOString(),\n embedding: simpleEmbed(content)\n });\n stats.memories++;\n } catch (e) {\n // Skip unreadable files\n }\n }\n }\n\n // Phase 4: Build directory-agent mappings\n onProgress?.({ progress: 0.85, message: 'Building directory mappings...' });\n\n try {\n const dirs = execSync(\n 'find . -type d -maxdepth 2 -not -path \"./.git*\" -not -path \"./node_modules*\" 2>/dev/null || echo \".\"',\n { encoding: 'utf-8' }\n ).trim().split('\\n');\n\n for (const dir of dirs) {\n const name = path.basename(dir);\n if (['src', 'lib', 'core'].includes(name)) intel.dirPatterns[dir] = 'coder';\n else if (['test', 'tests', '__tests__', 'spec'].includes(name)) intel.dirPatterns[dir] = 'test-engineer';\n else if (['docs', 'documentation'].includes(name)) intel.dirPatterns[dir] = 'documentation-specialist';\n else if (['scripts', 'bin'].includes(name)) intel.dirPatterns[dir] = 'devops-engineer';\n else if (['components', 'views', 'pages'].includes(name)) intel.dirPatterns[dir] = 'frontend-developer';\n else if (['api', 'routes', 'handlers'].includes(name)) intel.dirPatterns[dir] = 'backend-developer';\n else if (['models', 'entities', 'schemas'].includes(name)) intel.dirPatterns[dir] = 'database-specialist';\n }\n } catch (e) {\n // Continue without directory analysis\n }\n\n // Save pretrain metadata\n intel.pretrained = {\n date: new Date().toISOString(),\n stats\n };\n\n // Save intelligence\n saveIntelligence(intel);\n\n onProgress?.({ progress: 1.0, message: 'Pretrain complete!' });\n\n const latency = Date.now() - startTime;\n\n return {\n success: true,\n filesAnalyzed: stats.files,\n patternsCreated: stats.patterns,\n memoriesStored: stats.memories,\n coEditsFound: stats.coedits,\n directoryMappings: Object.keys(intel.dirPatterns).length,\n latencyMs: latency,\n timestamp: new Date().toISOString()\n };\n }\n};\n"]}
1
+ {"version":3,"file":"pretrain.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/pretrain.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Pretrain Hook - Analyze repository and bootstrap intelligence\n * Swarm-distributed when available, falls back to sequential\n */\n\nimport { z } from 'zod';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { execSync, execFileSync } from 'child_process';\nimport type { ToolDefinition } from '../../types/index.js';\nimport {\n loadIntelligence,\n saveIntelligence,\n getAgentForFile,\n simpleEmbed\n} from './shared.js';\n\nexport const hookPretrainTool: ToolDefinition = {\n name: 'hook_pretrain',\n description: 'Analyze repository with swarm for intelligent patterns',\n parameters: z.object({\n depth: z.number().optional().default(100).describe('Git history depth'),\n incremental: z.boolean().optional().default(false).describe('Only analyze changes since last pretrain'),\n skipGit: z.boolean().optional().default(false).describe('Skip git history analysis'),\n skipFiles: z.boolean().optional().default(false).describe('Skip file structure analysis'),\n verbose: z.boolean().optional().default(false).describe('Show detailed progress')\n }),\n execute: async ({ depth, incremental: _incremental, skipGit, skipFiles, verbose }, { onProgress }) => {\n const startTime = Date.now();\n const intel = loadIntelligence();\n const stats = { files: 0, patterns: 0, memories: 0, coedits: 0 };\n\n onProgress?.({ progress: 0, message: 'Starting pretrain analysis...' });\n\n // Phase 1: Analyze file structure\n if (!skipFiles) {\n onProgress?.({ progress: 0.1, message: 'Analyzing file structure...' });\n\n try {\n // Static command, no user input — shell is required for the `||` fallback\n // and `2>/dev/null` redirection. NOT a CWE-78 sink.\n const filesOutput = execSync(\n 'git ls-files 2>/dev/null || find . -type f -not -path \"./.git/*\" -not -path \"./node_modules/*\" -not -path \"./target/*\" 2>/dev/null',\n { encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 }\n );\n\n const files = filesOutput.trim().split('\\n').filter(f => f);\n\n for (const file of files) {\n stats.files++;\n const ext = path.extname(file);\n const agent = getAgentForFile(file);\n\n // Create Q-learning pattern\n const state = `edit:${ext || 'unknown'}`;\n if (!intel.patterns[state]) {\n intel.patterns[state] = {};\n }\n intel.patterns[state][agent] = (intel.patterns[state][agent] || 0) + 0.3;\n stats.patterns++;\n\n // Track directory patterns\n const dir = path.dirname(file);\n const dirParts = dir.split('/');\n if (dirParts[0] && !intel.dirPatterns[dirParts[0]]) {\n intel.dirPatterns[dirParts[0]] = agent;\n }\n }\n\n if (verbose) {\n console.log(`[Pretrain] Analyzed ${stats.files} files`);\n }\n } catch (e) {\n // Continue without file analysis\n }\n }\n\n // Phase 2: Analyze git history for co-edit patterns\n if (!skipGit) {\n onProgress?.({ progress: 0.4, message: 'Analyzing git history...' });\n\n try {\n // Security (CWE-78): depth is z.number() validated, but use execFileSync\n // with argv to hard-prevent any future schema relaxation from becoming\n // an injection sink. Coerce to a positive integer explicitly.\n const safeDepth = Math.max(1, Math.floor(Number(depth) || 100));\n const gitLog = execFileSync(\n 'git',\n ['log', '--name-only', '--pretty=format:COMMIT:%H', '-n', String(safeDepth)],\n { shell: false, encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024, stdio: ['pipe', 'pipe', 'ignore'] }\n );\n\n const commits = gitLog.split('COMMIT:').filter(c => c.trim());\n const coEditMap: Record<string, number> = {};\n\n for (const commit of commits) {\n const lines = commit.trim().split('\\n').filter(l => l && !l.match(/^[a-f0-9]{40}$/));\n const files = lines.filter(f => f.trim());\n\n // Track co-edits\n for (let i = 0; i < files.length; i++) {\n for (let j = i + 1; j < files.length; j++) {\n const key = [files[i], files[j]].sort().join('|');\n coEditMap[key] = (coEditMap[key] || 0) + 1;\n }\n }\n }\n\n // Store strong co-edit patterns\n const strongPatterns = Object.entries(coEditMap)\n .filter(([, count]) => count >= 3)\n .sort((a, b) => b[1] - a[1]);\n\n for (const [key, count] of strongPatterns.slice(0, 100)) {\n const [file1, file2] = key.split('|');\n if (!intel.sequences[file1]) {\n intel.sequences[file1] = [];\n }\n\n const existing = intel.sequences[file1].find(s => s.file === file2);\n if (existing) {\n existing.score += count;\n } else {\n intel.sequences[file1].push({ file: file2, score: count });\n }\n stats.coedits++;\n }\n\n if (verbose) {\n console.log(`[Pretrain] Found ${strongPatterns.length} co-edit patterns`);\n }\n } catch (e) {\n // Continue without git analysis\n }\n }\n\n // Phase 3: Create memories from important files\n onProgress?.({ progress: 0.7, message: 'Creating memories from key files...' });\n\n const importantFiles = [\n 'README.md', 'CLAUDE.md', 'package.json', 'Cargo.toml',\n 'pyproject.toml', 'go.mod', '.claude/settings.json', 'tsconfig.json'\n ];\n\n for (const filename of importantFiles) {\n const filePath = path.join(process.cwd(), filename);\n if (fs.existsSync(filePath)) {\n try {\n const content = fs.readFileSync(filePath, 'utf-8').slice(0, 2000);\n intel.memories.push({\n content: `[${filename}] ${content.replace(/\\n/g, ' ').slice(0, 500)}`,\n type: 'project',\n created: new Date().toISOString(),\n embedding: simpleEmbed(content)\n });\n stats.memories++;\n } catch (e) {\n // Skip unreadable files\n }\n }\n }\n\n // Phase 4: Build directory-agent mappings\n onProgress?.({ progress: 0.85, message: 'Building directory mappings...' });\n\n try {\n // Static command, no user input — shell required for `2>/dev/null || echo`.\n // NOT a CWE-78 sink.\n const dirs = execSync(\n 'find . -type d -maxdepth 2 -not -path \"./.git*\" -not -path \"./node_modules*\" 2>/dev/null || echo \".\"',\n { encoding: 'utf-8' }\n ).trim().split('\\n');\n\n for (const dir of dirs) {\n const name = path.basename(dir);\n if (['src', 'lib', 'core'].includes(name)) intel.dirPatterns[dir] = 'coder';\n else if (['test', 'tests', '__tests__', 'spec'].includes(name)) intel.dirPatterns[dir] = 'test-engineer';\n else if (['docs', 'documentation'].includes(name)) intel.dirPatterns[dir] = 'documentation-specialist';\n else if (['scripts', 'bin'].includes(name)) intel.dirPatterns[dir] = 'devops-engineer';\n else if (['components', 'views', 'pages'].includes(name)) intel.dirPatterns[dir] = 'frontend-developer';\n else if (['api', 'routes', 'handlers'].includes(name)) intel.dirPatterns[dir] = 'backend-developer';\n else if (['models', 'entities', 'schemas'].includes(name)) intel.dirPatterns[dir] = 'database-specialist';\n }\n } catch (e) {\n // Continue without directory analysis\n }\n\n // Save pretrain metadata\n intel.pretrained = {\n date: new Date().toISOString(),\n stats\n };\n\n // Save intelligence\n saveIntelligence(intel);\n\n onProgress?.({ progress: 1.0, message: 'Pretrain complete!' });\n\n const latency = Date.now() - startTime;\n\n return {\n success: true,\n filesAnalyzed: stats.files,\n patternsCreated: stats.patterns,\n memoriesStored: stats.memories,\n coEditsFound: stats.coedits,\n directoryMappings: Object.keys(intel.dirPatterns).length,\n latencyMs: latency,\n timestamp: new Date().toISOString()\n };\n }\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrate.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/swarm/orchestrate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,eAAO,MAAM,mBAAmB,EAAE,cA4CjC,CAAC"}
1
+ {"version":3,"file":"orchestrate.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/swarm/orchestrate.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,eAAO,MAAM,mBAAmB,EAAE,cA8CjC,CAAC"}
@@ -1,6 +1,7 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any -- pre-existing catch(error: any) handlers; outside scope of CWE-78 fix */
1
2
  // Task orchestration tool implementation using FastMCP
2
3
  import { z } from 'zod';
3
- import { execSync } from 'child_process';
4
+ import { execFileSync } from 'child_process';
4
5
  export const taskOrchestrateTool = {
5
6
  name: 'task_orchestrate',
6
7
  description: 'Orchestrate a complex task across the swarm',
@@ -21,11 +22,14 @@ export const taskOrchestrateTool = {
21
22
  .optional()
22
23
  .describe('Maximum agents to use for this task')
23
24
  }),
24
- execute: async ({ task, strategy, priority, maxAgents }, { onProgress, auth }) => {
25
+ execute: async ({ task, strategy, priority, maxAgents }, { onProgress: _onProgress, auth }) => {
25
26
  try {
26
- const maxStr = maxAgents ? ` --max-agents ${maxAgents}` : '';
27
- const cmd = `npx claude-flow@alpha task orchestrate "${task}" --strategy ${strategy} --priority ${priority}${maxStr}`;
28
- const result = execSync(cmd, {
27
+ // Security (CWE-78): use execFileSync with argv array; `task` is attacker-influenceable.
28
+ const args = ['claude-flow@alpha', 'task', 'orchestrate', task, '--strategy', strategy, '--priority', priority];
29
+ if (maxAgents)
30
+ args.push('--max-agents', String(maxAgents));
31
+ const result = execFileSync('npx', args, {
32
+ shell: false,
29
33
  encoding: 'utf-8',
30
34
  maxBuffer: 10 * 1024 * 1024
31
35
  });
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrate.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/swarm/orchestrate.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,MAAM,CAAC,MAAM,mBAAmB,GAAmB;IACjD,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,6CAA6C;IAC1D,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;aACb,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,kCAAkC,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;aACrD,QAAQ,EAAE;aACV,OAAO,CAAC,UAAU,CAAC;aACnB,QAAQ,CAAC,oBAAoB,CAAC;QACjC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;aACpD,QAAQ,EAAE;aACV,OAAO,CAAC,QAAQ,CAAC;aACjB,QAAQ,CAAC,eAAe,CAAC;QAC5B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;aAClB,QAAQ,EAAE;aACV,QAAQ,EAAE;aACV,QAAQ,CAAC,qCAAqC,CAAC;KACnD,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE;QAC/E,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,MAAM,GAAG,GAAG,2CAA2C,IAAI,gBAAgB,QAAQ,eAAe,QAAQ,GAAG,MAAM,EAAE,CAAC;YAEtH,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE;gBAC3B,QAAQ,EAAE,OAAO;gBACjB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;aAC5B,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI;gBACJ,QAAQ;gBACR,QAAQ;gBACR,SAAS;gBACT,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;gBACrB,MAAM,EAAE,IAAI,EAAE,MAAM;gBACpB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;CACF,CAAC","sourcesContent":["// Task orchestration tool implementation using FastMCP\nimport { z } from 'zod';\nimport { execSync } from 'child_process';\nimport type { ToolDefinition } from '../../types/index.js';\n\nexport const taskOrchestrateTool: ToolDefinition = {\n name: 'task_orchestrate',\n description: 'Orchestrate a complex task across the swarm',\n parameters: z.object({\n task: z.string()\n .min(1)\n .describe('Task description or instructions'),\n strategy: z.enum(['parallel', 'sequential', 'adaptive'])\n .optional()\n .default('adaptive')\n .describe('Execution strategy'),\n priority: z.enum(['low', 'medium', 'high', 'critical'])\n .optional()\n .default('medium')\n .describe('Task priority'),\n maxAgents: z.number()\n .positive()\n .optional()\n .describe('Maximum agents to use for this task')\n }),\n execute: async ({ task, strategy, priority, maxAgents }, { onProgress, auth }) => {\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\n const result = execSync(cmd, {\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024\n });\n\n return {\n success: true,\n task,\n strategy,\n priority,\n maxAgents,\n result: result.trim(),\n userId: auth?.userId,\n timestamp: new Date().toISOString()\n };\n } catch (error: any) {\n throw new Error(`Failed to orchestrate task: ${error.message}`);\n }\n }\n};\n"]}
1
+ {"version":3,"file":"orchestrate.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/swarm/orchestrate.ts"],"names":[],"mappings":"AAAA,+HAA+H;AAC/H,uDAAuD;AACvD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,MAAM,CAAC,MAAM,mBAAmB,GAAmB;IACjD,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,6CAA6C;IAC1D,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;aACb,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,kCAAkC,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;aACrD,QAAQ,EAAE;aACV,OAAO,CAAC,UAAU,CAAC;aACnB,QAAQ,CAAC,oBAAoB,CAAC;QACjC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;aACpD,QAAQ,EAAE;aACV,OAAO,CAAC,QAAQ,CAAC;aACjB,QAAQ,CAAC,eAAe,CAAC;QAC5B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;aAClB,QAAQ,EAAE;aACV,QAAQ,EAAE;aACV,QAAQ,CAAC,qCAAqC,CAAC;KACnD,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE;QAC5F,IAAI,CAAC;YACH,yFAAyF;YACzF,MAAM,IAAI,GAAa,CAAC,mBAAmB,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC1H,IAAI,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAE5D,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE;gBACvC,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,OAAO;gBACjB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;aAC5B,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI;gBACJ,QAAQ;gBACR,QAAQ;gBACR,SAAS;gBACT,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;gBACrB,MAAM,EAAE,IAAI,EAAE,MAAM;gBACpB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAClE,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 */\n// Task orchestration tool implementation using FastMCP\nimport { z } from 'zod';\nimport { execFileSync } from 'child_process';\nimport type { ToolDefinition } from '../../types/index.js';\n\nexport const taskOrchestrateTool: ToolDefinition = {\n name: 'task_orchestrate',\n description: 'Orchestrate a complex task across the swarm',\n parameters: z.object({\n task: z.string()\n .min(1)\n .describe('Task description or instructions'),\n strategy: z.enum(['parallel', 'sequential', 'adaptive'])\n .optional()\n .default('adaptive')\n .describe('Execution strategy'),\n priority: z.enum(['low', 'medium', 'high', 'critical'])\n .optional()\n .default('medium')\n .describe('Task priority'),\n maxAgents: z.number()\n .positive()\n .optional()\n .describe('Maximum agents to use for this task')\n }),\n execute: async ({ task, strategy, priority, maxAgents }, { onProgress: _onProgress, auth }) => {\n try {\n // Security (CWE-78): use execFileSync with argv array; `task` is attacker-influenceable.\n const args: string[] = ['claude-flow@alpha', 'task', 'orchestrate', task, '--strategy', strategy, '--priority', priority];\n if (maxAgents) args.push('--max-agents', String(maxAgents));\n\n const result = execFileSync('npx', args, {\n shell: false,\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024\n });\n\n return {\n success: true,\n task,\n strategy,\n priority,\n maxAgents,\n result: result.trim(),\n userId: auth?.userId,\n timestamp: new Date().toISOString()\n };\n } catch (error: any) {\n throw new Error(`Failed to orchestrate task: ${error.message}`);\n }\n }\n};\n"]}
@@ -1,8 +1,14 @@
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
  // Standalone agentic-flow MCP server - runs directly via stdio without spawning subprocesses
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 — every prior occurrence in
10
+ // this file was an injection sink reachable through MCP tool arguments.
11
+ const NPX_EXEC_OPTS = { shell: false };
6
12
  // Suppress FastMCP internal warnings for cleaner output
7
13
  const originalConsoleWarn = console.warn;
8
14
  console.warn = (...args) => {
@@ -49,13 +55,14 @@ server.addTool({
49
55
  }),
50
56
  execute: async ({ agent, task, model, provider, anthropicApiKey, openrouterApiKey, stream, temperature, maxTokens, agentsDir, outputFormat, verbose, timeout, retryOnError }) => {
51
57
  try {
52
- // Build command with all parameters
53
- let cmd = `npx --yes agentic-flow --agent "${agent}" --task "${task}"`;
58
+ // Build argv (NOT a shell string) — every user-supplied value stays a
59
+ // separate argv element and cannot be reinterpreted by the shell.
60
+ const args = ['--yes', 'agentic-flow', '--agent', agent, '--task', task];
54
61
  // Provider & Model
55
62
  if (model)
56
- cmd += ` --model "${model}"`;
63
+ args.push('--model', model);
57
64
  if (provider)
58
- cmd += ` --provider ${provider}`;
65
+ args.push('--provider', provider);
59
66
  // API Keys (set as env vars)
60
67
  const env = { ...process.env };
61
68
  if (anthropicApiKey)
@@ -64,23 +71,24 @@ server.addTool({
64
71
  env.OPENROUTER_API_KEY = openrouterApiKey;
65
72
  // Agent Behavior
66
73
  if (stream)
67
- cmd += ' --stream';
74
+ args.push('--stream');
68
75
  if (temperature !== undefined)
69
- cmd += ` --temperature ${temperature}`;
76
+ args.push('--temperature', String(temperature));
70
77
  if (maxTokens)
71
- cmd += ` --max-tokens ${maxTokens}`;
78
+ args.push('--max-tokens', String(maxTokens));
72
79
  // Directories
73
80
  if (agentsDir)
74
- cmd += ` --agents-dir "${agentsDir}"`;
81
+ args.push('--agents-dir', agentsDir);
75
82
  // Output
76
83
  if (outputFormat)
77
- cmd += ` --output ${outputFormat}`;
84
+ args.push('--output', outputFormat);
78
85
  if (verbose)
79
- cmd += ' --verbose';
86
+ args.push('--verbose');
80
87
  // Execution
81
88
  if (retryOnError)
82
- cmd += ' --retry';
83
- const result = execSync(cmd, {
89
+ args.push('--retry');
90
+ const result = execFileSync('npx', args, {
91
+ ...NPX_EXEC_OPTS,
84
92
  encoding: 'utf-8',
85
93
  maxBuffer: 10 * 1024 * 1024,
86
94
  timeout: timeout || 300000,
@@ -107,9 +115,8 @@ server.addTool({
107
115
  parameters: z.object({}),
108
116
  execute: async () => {
109
117
  try {
110
- // Use npx to run agentic-flow from npm registry
111
- const cmd = `npx --yes agentic-flow --list`;
112
- const result = execSync(cmd, {
118
+ const result = execFileSync('npx', ['--yes', 'agentic-flow', '--list'], {
119
+ ...NPX_EXEC_OPTS,
113
120
  encoding: 'utf-8',
114
121
  maxBuffer: 5 * 1024 * 1024,
115
122
  timeout: 30000
@@ -137,12 +144,18 @@ server.addTool({
137
144
  }),
138
145
  execute: async ({ name, description, systemPrompt, category, tools }) => {
139
146
  try {
140
- let cmd = `npx --yes agentic-flow agent create --name "${name}" --description "${description}" --prompt "${systemPrompt}"`;
147
+ const args = [
148
+ '--yes', 'agentic-flow', 'agent', 'create',
149
+ '--name', name,
150
+ '--description', description,
151
+ '--prompt', systemPrompt
152
+ ];
141
153
  if (category && category !== 'custom')
142
- cmd += ` --category "${category}"`;
154
+ args.push('--category', category);
143
155
  if (tools && tools.length > 0)
144
- cmd += ` --tools "${tools.join(',')}"`;
145
- const result = execSync(cmd, {
156
+ args.push('--tools', tools.join(','));
157
+ const result = execFileSync('npx', args, {
158
+ ...NPX_EXEC_OPTS,
146
159
  encoding: 'utf-8',
147
160
  maxBuffer: 10 * 1024 * 1024,
148
161
  timeout: 60000,
@@ -171,8 +184,8 @@ server.addTool({
171
184
  }),
172
185
  execute: async ({ format, filterSource }) => {
173
186
  try {
174
- const cmd = `npx --yes agentic-flow agent list ${format || 'summary'}`;
175
- const result = execSync(cmd, {
187
+ const result = execFileSync('npx', ['--yes', 'agentic-flow', 'agent', 'list', format || 'summary'], {
188
+ ...NPX_EXEC_OPTS,
176
189
  encoding: 'utf-8',
177
190
  maxBuffer: 10 * 1024 * 1024,
178
191
  timeout: 30000
@@ -209,8 +222,8 @@ server.addTool({
209
222
  }),
210
223
  execute: async ({ name }) => {
211
224
  try {
212
- const cmd = `npx --yes agentic-flow agent info "${name}"`;
213
- const result = execSync(cmd, {
225
+ const result = execFileSync('npx', ['--yes', 'agentic-flow', 'agent', 'info', name], {
226
+ ...NPX_EXEC_OPTS,
214
227
  encoding: 'utf-8',
215
228
  maxBuffer: 10 * 1024 * 1024,
216
229
  timeout: 30000
@@ -233,8 +246,8 @@ server.addTool({
233
246
  parameters: z.object({}),
234
247
  execute: async () => {
235
248
  try {
236
- const cmd = `npx --yes agentic-flow agent conflicts`;
237
- const result = execSync(cmd, {
249
+ const result = execFileSync('npx', ['--yes', 'agentic-flow', 'agent', 'conflicts'], {
250
+ ...NPX_EXEC_OPTS,
238
251
  encoding: 'utf-8',
239
252
  maxBuffer: 10 * 1024 * 1024,
240
253
  timeout: 30000
@@ -261,16 +274,17 @@ server.addTool({
261
274
  }),
262
275
  execute: async ({ agent, task, priority, max_cost }) => {
263
276
  try {
264
- let cmd = `npx --yes agentic-flow --agent "${agent}" --task "${task}" --optimize`;
277
+ const args = ['--yes', 'agentic-flow', '--agent', agent, '--task', task, '--optimize'];
265
278
  if (priority && priority !== 'balanced') {
266
- cmd += ` --priority ${priority}`;
279
+ args.push('--priority', priority);
267
280
  }
268
281
  if (max_cost) {
269
- cmd += ` --max-cost ${max_cost}`;
282
+ args.push('--max-cost', String(max_cost));
270
283
  }
271
284
  // Add dry-run to just get recommendation without execution
272
- cmd += ' --help'; // This will show the optimization without running
273
- const result = execSync(cmd, {
285
+ args.push('--help'); // This will show the optimization without running
286
+ execFileSync('npx', args, {
287
+ ...NPX_EXEC_OPTS,
274
288
  encoding: 'utf-8',
275
289
  maxBuffer: 10 * 1024 * 1024,
276
290
  timeout: 10000
@@ -323,8 +337,8 @@ server.addTool({
323
337
  language = langMap[ext] || 'javascript';
324
338
  }
325
339
  // Apply edit using agent-booster@0.2.2 CLI (automatically installs from npm if not available)
326
- const cmd = `npx --yes agent-booster@0.2.2 apply --language ${language}`;
327
- const result = execSync(cmd, {
340
+ const result = execFileSync('npx', ['--yes', 'agent-booster@0.2.2', 'apply', '--language', language], {
341
+ ...NPX_EXEC_OPTS,
328
342
  encoding: 'utf-8',
329
343
  input: JSON.stringify({ code: originalCode, edit: code_edit }),
330
344
  maxBuffer: 10 * 1024 * 1024,
@@ -404,8 +418,8 @@ server.addTool({
404
418
  language = langMap[ext] || 'javascript';
405
419
  }
406
420
  // Apply edit
407
- const cmd = `npx --yes agent-booster@0.2.2 apply --language ${language}`;
408
- const result = execSync(cmd, {
421
+ const result = execFileSync('npx', ['--yes', 'agent-booster@0.2.2', 'apply', '--language', language], {
422
+ ...NPX_EXEC_OPTS,
409
423
  encoding: 'utf-8',
410
424
  input: JSON.stringify({ code: originalCode, edit: edit.code_edit }),
411
425
  maxBuffer: 10 * 1024 * 1024,
@@ -464,7 +478,7 @@ server.addTool({
464
478
  const edits = [];
465
479
  let match;
466
480
  while ((match = regex.exec(markdown)) !== null) {
467
- const [_, language, filepath, instruction, code_edit] = match;
481
+ const [, language, filepath, instruction, code_edit] = match;
468
482
  edits.push({
469
483
  target_filepath: filepath.trim(),
470
484
  instructions: instruction.trim(),
@@ -492,8 +506,8 @@ server.addTool({
492
506
  };
493
507
  language = langMap[ext] || 'javascript';
494
508
  }
495
- const cmd = `npx --yes agent-booster@0.2.2 apply --language ${language}`;
496
- const result = execSync(cmd, {
509
+ const result = execFileSync('npx', ['--yes', 'agent-booster@0.2.2', 'apply', '--language', language], {
510
+ ...NPX_EXEC_OPTS,
497
511
  encoding: 'utf-8',
498
512
  input: JSON.stringify({ code: originalCode, edit: edit.code_edit }),
499
513
  maxBuffer: 10 * 1024 * 1024,
@@ -543,8 +557,8 @@ server.addTool({
543
557
  parameters: z.object({}),
544
558
  execute: async () => {
545
559
  try {
546
- const cmd = `npx agentdb db stats`;
547
- const result = execSync(cmd, {
560
+ const result = execFileSync('npx', ['agentdb', 'db', 'stats'], {
561
+ ...NPX_EXEC_OPTS,
548
562
  encoding: 'utf-8',
549
563
  maxBuffer: 5 * 1024 * 1024,
550
564
  timeout: 10000
@@ -577,24 +591,25 @@ server.addTool({
577
591
  }),
578
592
  execute: async ({ sessionId, task, reward, success, critique, input, output, latencyMs, tokensUsed }) => {
579
593
  try {
580
- const args = [
594
+ const cliArgs = [
595
+ 'agentdb', 'reflexion', 'store',
581
596
  sessionId,
582
- `"${task}"`,
597
+ task,
583
598
  reward.toString(),
584
599
  success.toString()
585
600
  ];
586
601
  if (critique)
587
- args.push(`"${critique}"`);
602
+ cliArgs.push(critique);
588
603
  if (input)
589
- args.push(`"${input}"`);
604
+ cliArgs.push(input);
590
605
  if (output)
591
- args.push(`"${output}"`);
606
+ cliArgs.push(output);
592
607
  if (latencyMs !== undefined)
593
- args.push(latencyMs.toString());
608
+ cliArgs.push(latencyMs.toString());
594
609
  if (tokensUsed !== undefined)
595
- args.push(tokensUsed.toString());
596
- const cmd = `npx agentdb reflexion store ${args.join(' ')}`;
597
- const result = execSync(cmd, {
610
+ cliArgs.push(tokensUsed.toString());
611
+ const result = execFileSync('npx', cliArgs, {
612
+ ...NPX_EXEC_OPTS,
598
613
  encoding: 'utf-8',
599
614
  maxBuffer: 10 * 1024 * 1024,
600
615
  timeout: 30000
@@ -627,15 +642,15 @@ server.addTool({
627
642
  }),
628
643
  execute: async ({ task, k, minReward, onlySuccesses, onlyFailures }) => {
629
644
  try {
630
- const args = [`"${task}"`, (k || 5).toString()];
645
+ const cliArgs = ['agentdb', 'reflexion', 'retrieve', task, (k || 5).toString()];
631
646
  if (minReward !== undefined)
632
- args.push(minReward.toString());
647
+ cliArgs.push(minReward.toString());
633
648
  if (onlyFailures)
634
- args.push('true', 'false');
649
+ cliArgs.push('true', 'false');
635
650
  else if (onlySuccesses)
636
- args.push('false', 'true');
637
- const cmd = `npx agentdb reflexion retrieve ${args.join(' ')}`;
638
- const result = execSync(cmd, {
651
+ cliArgs.push('false', 'true');
652
+ const result = execFileSync('npx', cliArgs, {
653
+ ...NPX_EXEC_OPTS,
639
654
  encoding: 'utf-8',
640
655
  maxBuffer: 10 * 1024 * 1024,
641
656
  timeout: 30000
@@ -668,8 +683,8 @@ server.addTool({
668
683
  }),
669
684
  execute: async ({ task, k }) => {
670
685
  try {
671
- const cmd = `npx agentdb reflexion critique-summary "${task}" ${k || 5}`;
672
- const result = execSync(cmd, {
686
+ const result = execFileSync('npx', ['agentdb', 'reflexion', 'critique-summary', task, String(k || 5)], {
687
+ ...NPX_EXEC_OPTS,
673
688
  encoding: 'utf-8',
674
689
  maxBuffer: 10 * 1024 * 1024,
675
690
  timeout: 30000