claude-flow 2.7.7 → 2.7.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,4 @@
1
- export * from './error-handler.ts';
2
-
3
- //# sourceMappingURL=error-handler.js.map as isErr } from './type-guards.js';
1
+ import { getErrorMessage as getErrorMsg, getErrorStack as getErrorStk, isError as isErr } from './type-guards.js';
4
2
  export class AppError extends Error {
5
3
  code;
6
4
  statusCode;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/error-handler.js"],"sourcesContent":["// Re-export from TypeScript file\nexport * from './error-handler.ts';\n"],"names":[],"mappings":"AACA,cAAc,qBAAqB"}rorStack as getErrorStk,\n isError as isErr,\n} from './type-guards.js';\n\nexport class AppError extends Error {\n constructor(\n message: string,\n public code?: string,\n public statusCode?: number,\n ) {\n super(message);\n this.name = 'AppError';\n Object.setPrototypeOf(this, AppError.prototype);\n }\n}\n\n// Re-export from type-guards for backward compatibility\nexport const isError = isErr;\nexport const getErrorMessage = getErrorMsg;\nexport const getErrorStack = getErrorStk;\n\nexport function handleError(error: unknown, context?: string): never {\n const message = getErrorMessage(error);\n const stack = getErrorStack(error);\n\n console.error(`Error${context ? ` in ${context}` : ''}: ${message}`);\n if (stack && process.env.NODE_ENV === 'development') {\n console.error('Stack trace:', stack);\n }\n\n process.exit(1);\n}\n"],"names":["getErrorMessage","getErrorMsg","getErrorStack","getErrorStk","isError","isErr","AppError","Error","message","code","statusCode","name","Object","setPrototypeOf","prototype","handleError","error","context","stack","console","process","env","NODE_ENV","exit"],"mappings":"AAIA,SACEA,mBAAmBC,WAAW,EAC9BC,iBAAiBC,WAAW,EAC5BC,WAAWC,KAAK,QACX,mBAAmB;AAE1B,OAAO,MAAMC,iBAAiBC;;;IAC5B,YACEC,OAAe,EACf,AAAOC,IAAa,EACpB,AAAOC,UAAmB,CAC1B;QACA,KAAK,CAACF,eAHCC,OAAAA,WACAC,aAAAA;QAGP,IAAI,CAACC,IAAI,GAAG;QACZC,OAAOC,cAAc,CAAC,IAAI,EAAEP,SAASQ,SAAS;IAChD;AACF;AAGA,OAAO,MAAMV,UAAUC,MAAM;AAC7B,OAAO,MAAML,kBAAkBC,YAAY;AAC3C,OAAO,MAAMC,gBAAgBC,YAAY;AAEzC,OAAO,SAASY,YAAYC,KAAc,EAAEC,OAAgB;IAC1D,MAAMT,UAAUR,gBAAgBgB;IAChC,MAAME,QAAQhB,cAAcc;IAE5BG,QAAQH,KAAK,CAAC,CAAC,KAAK,EAAEC,UAAU,CAAC,IAAI,EAAEA,SAAS,GAAG,GAAG,EAAE,EAAET,SAAS;IACnE,IAAIU,SAASE,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QACnDH,QAAQH,KAAK,CAAC,gBAAgBE;IAChC;IAEAE,QAAQG,IAAI,CAAC;AACf"}
1
+ {"version":3,"sources":["../../../src/utils/error-handler.ts"],"sourcesContent":["/**\n * Utility for proper error handling in TypeScript\n */\n\nimport {\n getErrorMessage as getErrorMsg,\n getErrorStack as getErrorStk,\n isError as isErr,\n} from './type-guards.js';\n\nexport class AppError extends Error {\n constructor(\n message: string,\n public code?: string,\n public statusCode?: number,\n ) {\n super(message);\n this.name = 'AppError';\n Object.setPrototypeOf(this, AppError.prototype);\n }\n}\n\n// Re-export from type-guards for backward compatibility\nexport const isError = isErr;\nexport const getErrorMessage = getErrorMsg;\nexport const getErrorStack = getErrorStk;\n\nexport function handleError(error: unknown, context?: string): never {\n const message = getErrorMessage(error);\n const stack = getErrorStack(error);\n\n console.error(`Error${context ? ` in ${context}` : ''}: ${message}`);\n if (stack && process.env.NODE_ENV === 'development') {\n console.error('Stack trace:', stack);\n }\n\n process.exit(1);\n}\n"],"names":["getErrorMessage","getErrorMsg","getErrorStack","getErrorStk","isError","isErr","AppError","Error","message","code","statusCode","name","Object","setPrototypeOf","prototype","handleError","error","context","stack","console","process","env","NODE_ENV","exit"],"mappings":"AAIA,SACEA,mBAAmBC,WAAW,EAC9BC,iBAAiBC,WAAW,EAC5BC,WAAWC,KAAK,QACX,mBAAmB;AAE1B,OAAO,MAAMC,iBAAiBC;;;IAC5B,YACEC,OAAe,EACf,AAAOC,IAAa,EACpB,AAAOC,UAAmB,CAC1B;QACA,KAAK,CAACF,eAHCC,OAAAA,WACAC,aAAAA;QAGP,IAAI,CAACC,IAAI,GAAG;QACZC,OAAOC,cAAc,CAAC,IAAI,EAAEP,SAASQ,SAAS;IAChD;AACF;AAGA,OAAO,MAAMV,UAAUC,MAAM;AAC7B,OAAO,MAAML,kBAAkBC,YAAY;AAC3C,OAAO,MAAMC,gBAAgBC,YAAY;AAEzC,OAAO,SAASY,YAAYC,KAAc,EAAEC,OAAgB;IAC1D,MAAMT,UAAUR,gBAAgBgB;IAChC,MAAME,QAAQhB,cAAcc;IAE5BG,QAAQH,KAAK,CAAC,CAAC,KAAK,EAAEC,UAAU,CAAC,IAAI,EAAEA,SAAS,GAAG,GAAG,EAAE,EAAET,SAAS;IACnE,IAAIU,SAASE,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QACnDH,QAAQH,KAAK,CAAC,gBAAgBE;IAChC;IAEAE,QAAQG,IAAI,CAAC;AACf"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/key-redactor.js"],"sourcesContent":["/**\n * API Key Redaction Utility\n * Prevents sensitive data from leaking into logs, memory, or git commits\n */\n\nexport class KeyRedactor {\n static API_KEY_PATTERNS = [\n // Anthropic API keys\n /sk-ant-[a-zA-Z0-9_-]{95,}/gi,\n\n // OpenRouter API keys\n /sk-or-[a-zA-Z0-9_-]{32,}/gi,\n\n // Google/Gemini API keys\n /AIza[a-zA-Z0-9_-]{35}/gi,\n\n // Generic API keys\n /[a-zA-Z0-9_-]{20,}API[a-zA-Z0-9_-]{20,}/gi,\n\n // Bearer tokens\n /Bearer\\s+[a-zA-Z0-9_\\-\\.]{20,}/gi,\n\n // Environment variable format\n /([A-Z_]+_API_KEY|[A-Z_]+_TOKEN|[A-Z_]+_SECRET)=[\"']?([^\"'\\s]+)[\"']?/gi,\n\n // Supabase keys\n /eyJ[a-zA-Z0-9_-]*\\.eyJ[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]*/gi,\n ];\n\n static SENSITIVE_FIELDS = [\n 'apiKey',\n 'api_key',\n 'token',\n 'secret',\n 'password',\n 'private_key',\n 'privateKey',\n 'accessToken',\n 'access_token',\n 'refreshToken',\n 'refresh_token',\n ];\n\n /**\n * Redact API keys and sensitive data from text\n */\n static redact(text, showPrefix = true) {\n if (!text) return text;\n\n let redacted = text;\n\n // Redact using patterns\n this.API_KEY_PATTERNS.forEach(pattern => {\n redacted = redacted.replace(pattern, (match) => {\n if (showPrefix && match.length > 8) {\n const prefix = match.substring(0, 8);\n return `${prefix}...[REDACTED]`;\n }\n return '[REDACTED_API_KEY]';\n });\n });\n\n return redacted;\n }\n\n /**\n * Redact sensitive fields in objects\n */\n static redactObject(obj, deep = true) {\n if (!obj || typeof obj !== 'object') return obj;\n\n const redacted = { ...obj };\n\n Object.keys(redacted).forEach(key => {\n const lowerKey = key.toLowerCase();\n\n // Check if field name is sensitive\n const isSensitive = this.SENSITIVE_FIELDS.some(field =>\n lowerKey.includes(field)\n );\n\n if (isSensitive && typeof redacted[key] === 'string') {\n const value = redacted[key];\n if (value && value.length > 8) {\n redacted[key] = `${value.substring(0, 4)}...[REDACTED]`;\n } else {\n redacted[key] = '[REDACTED]';\n }\n } else if (deep && typeof redacted[key] === 'object' && redacted[key] !== null) {\n redacted[key] = this.redactObject(redacted[key], deep);\n } else if (typeof redacted[key] === 'string') {\n // Redact any API keys in string values\n redacted[key] = this.redact(redacted[key]);\n }\n });\n\n return redacted;\n }\n\n /**\n * Sanitize text for safe logging\n */\n static sanitize(text) {\n return this.redact(text, true);\n }\n\n /**\n * Sanitize command arguments\n */\n static sanitizeArgs(args) {\n return args.map(arg => {\n // Check if arg is a flag value pair\n if (arg.includes('key') || arg.includes('token') || arg.includes('secret')) {\n return this.redact(arg);\n }\n return arg;\n });\n }\n\n /**\n * Check if text contains unredacted sensitive data\n */\n static containsSensitiveData(text) {\n return this.API_KEY_PATTERNS.some(pattern => pattern.test(text));\n }\n\n /**\n * Validate that text is safe for logging/storage\n */\n static validate(text) {\n const warnings = [];\n\n this.API_KEY_PATTERNS.forEach((pattern, index) => {\n if (pattern.test(text)) {\n warnings.push(`Potential API key detected (pattern ${index + 1})`);\n }\n });\n\n return {\n safe: warnings.length === 0,\n warnings,\n };\n }\n\n /**\n * Redact environment variables\n */\n static redactEnv(env) {\n const redacted = {};\n\n Object.keys(env).forEach(key => {\n const value = env[key];\n if (!value) {\n redacted[key] = '';\n return;\n }\n\n const lowerKey = key.toLowerCase();\n const isSensitive = lowerKey.includes('key') ||\n lowerKey.includes('token') ||\n lowerKey.includes('secret') ||\n lowerKey.includes('password');\n\n if (isSensitive) {\n redacted[key] = value.length > 8\n ? `${value.substring(0, 4)}...[REDACTED]`\n : '[REDACTED]';\n } else {\n redacted[key] = value;\n }\n });\n\n return redacted;\n }\n}\n\n// Export singleton instance\nexport const redactor = KeyRedactor;\n"],"names":["KeyRedactor","API_KEY_PATTERNS","SENSITIVE_FIELDS","redact","text","showPrefix","redacted","forEach","pattern","replace","match","length","prefix","substring","redactObject","obj","deep","Object","keys","key","lowerKey","toLowerCase","isSensitive","some","field","includes","value","sanitize","sanitizeArgs","args","map","arg","containsSensitiveData","test","validate","warnings","index","push","safe","redactEnv","env","redactor"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/key-redactor.ts"],"sourcesContent":["/**\n * API Key Redaction Utility\n * Prevents sensitive data from leaking into logs, memory, or git commits\n */\n\nexport interface RedactionConfig {\n patterns: RegExp[];\n replacement: string;\n maskLength: number;\n}\n\nexport class KeyRedactor {\n private static readonly API_KEY_PATTERNS = [\n // Anthropic API keys\n /sk-ant-[a-zA-Z0-9_-]{95,}/gi,\n\n // OpenRouter API keys\n /sk-or-[a-zA-Z0-9_-]{32,}/gi,\n\n // Google/Gemini API keys\n /AIza[a-zA-Z0-9_-]{35}/gi,\n\n // Generic API keys\n /[a-zA-Z0-9_-]{20,}API[a-zA-Z0-9_-]{20,}/gi,\n\n // Bearer tokens\n /Bearer\\s+[a-zA-Z0-9_\\-\\.]{20,}/gi,\n\n // Environment variable format\n /([A-Z_]+_API_KEY|[A-Z_]+_TOKEN|[A-Z_]+_SECRET)=[\"']?([^\"'\\s]+)[\"']?/gi,\n\n // Supabase keys\n /eyJ[a-zA-Z0-9_-]*\\.eyJ[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]*/gi,\n ];\n\n private static readonly SENSITIVE_FIELDS = [\n 'apiKey',\n 'api_key',\n 'token',\n 'secret',\n 'password',\n 'private_key',\n 'privateKey',\n 'accessToken',\n 'access_token',\n 'refreshToken',\n 'refresh_token',\n ];\n\n /**\n * Redact API keys and sensitive data from text\n */\n static redact(text: string, showPrefix = true): string {\n if (!text) return text;\n\n let redacted = text;\n\n // Redact using patterns\n this.API_KEY_PATTERNS.forEach(pattern => {\n redacted = redacted.replace(pattern, (match) => {\n if (showPrefix && match.length > 8) {\n const prefix = match.substring(0, 8);\n return `${prefix}...[REDACTED]`;\n }\n return '[REDACTED_API_KEY]';\n });\n });\n\n return redacted;\n }\n\n /**\n * Redact sensitive fields in objects\n */\n static redactObject<T extends Record<string, any>>(obj: T, deep = true): T {\n if (!obj || typeof obj !== 'object') return obj;\n\n const redacted = { ...obj };\n\n Object.keys(redacted).forEach(key => {\n const lowerKey = key.toLowerCase();\n\n // Check if field name is sensitive\n const isSensitive = this.SENSITIVE_FIELDS.some(field =>\n lowerKey.includes(field)\n );\n\n if (isSensitive && typeof redacted[key] === 'string') {\n const value = redacted[key] as string;\n if (value && value.length > 8) {\n redacted[key] = `${value.substring(0, 4)}...[REDACTED]` as any;\n } else {\n redacted[key] = '[REDACTED]' as any;\n }\n } else if (deep && typeof redacted[key] === 'object' && redacted[key] !== null) {\n redacted[key] = this.redactObject(redacted[key], deep);\n } else if (typeof redacted[key] === 'string') {\n // Redact any API keys in string values\n redacted[key] = this.redact(redacted[key]) as any;\n }\n });\n\n return redacted;\n }\n\n /**\n * Sanitize text for safe logging\n */\n static sanitize(text: string): string {\n return this.redact(text, true);\n }\n\n /**\n * Sanitize command arguments\n */\n static sanitizeArgs(args: string[]): string[] {\n return args.map(arg => {\n // Check if arg is a flag value pair\n if (arg.includes('key') || arg.includes('token') || arg.includes('secret')) {\n return this.redact(arg);\n }\n return arg;\n });\n }\n\n /**\n * Check if text contains unredacted sensitive data\n */\n static containsSensitiveData(text: string): boolean {\n return this.API_KEY_PATTERNS.some(pattern => pattern.test(text));\n }\n\n /**\n * Validate that text is safe for logging/storage\n */\n static validate(text: string): { safe: boolean; warnings: string[] } {\n const warnings: string[] = [];\n\n this.API_KEY_PATTERNS.forEach((pattern, index) => {\n if (pattern.test(text)) {\n warnings.push(`Potential API key detected (pattern ${index + 1})`);\n }\n });\n\n return {\n safe: warnings.length === 0,\n warnings,\n };\n }\n\n /**\n * Redact environment variables\n */\n static redactEnv(env: Record<string, string | undefined>): Record<string, string> {\n const redacted: Record<string, string> = {};\n\n Object.keys(env).forEach(key => {\n const value = env[key];\n if (!value) {\n redacted[key] = '';\n return;\n }\n\n const lowerKey = key.toLowerCase();\n const isSensitive = lowerKey.includes('key') ||\n lowerKey.includes('token') ||\n lowerKey.includes('secret') ||\n lowerKey.includes('password');\n\n if (isSensitive) {\n redacted[key] = value.length > 8\n ? `${value.substring(0, 4)}...[REDACTED]`\n : '[REDACTED]';\n } else {\n redacted[key] = value;\n }\n });\n\n return redacted;\n }\n}\n\n// Export singleton instance\nexport const redactor = KeyRedactor;\n"],"names":["KeyRedactor","API_KEY_PATTERNS","SENSITIVE_FIELDS","redact","text","showPrefix","redacted","forEach","pattern","replace","match","length","prefix","substring","redactObject","obj","deep","Object","keys","key","lowerKey","toLowerCase","isSensitive","some","field","includes","value","sanitize","sanitizeArgs","args","map","arg","containsSensitiveData","test","validate","warnings","index","push","safe","redactEnv","env","redactor"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-flow",
3
- "version": "2.7.7",
3
+ "version": "2.7.9",
4
4
  "description": "Enterprise-grade AI agent orchestration with WASM-powered ReasoningBank memory and AgentDB vector database (always uses latest agentic-flow)",
5
5
  "mcpName": "io.github.ruvnet/claude-flow",
6
6
  "main": "cli.mjs",
@@ -11,16 +11,6 @@ export { VERSION };
11
11
  export const MAIN_HELP = `
12
12
  🌊 Claude-Flow v${VERSION} - Enterprise-Grade AI Agent Orchestration Platform
13
13
 
14
- 🚀 v2.7.6 - MCP Stdio Fix & Production Ready
15
-
16
- 🔥 NEW IN v2.7.6:
17
- ✅ MCP Server Stdio Mode Fixed - Clean JSON-RPC protocol on stdout (#835)
18
- 🔧 Smart Logging Helpers - Auto-route output based on mode (stdio vs HTTP)
19
- 🐛 Protocol Corruption Resolved - Now compatible with standard MCP clients
20
- 📦 AgentDB Integration - 150x faster vector search with persistent memory
21
- 🧠 ReasoningBank Support - Self-learning with trajectory tracking
22
- 🎯 Backward Compatible - HTTP mode unchanged, stdio mode now works correctly
23
-
24
14
  🎯 ENTERPRISE FEATURES:
25
15
  • Complete ruv-swarm integration with 90+ MCP tools
26
16
  • Flow Nexus cloud platform with distributed sandboxes
@@ -63,16 +63,9 @@ async function startMcpServer(subArgs, flags) {
63
63
  isStdioMode = stdio;
64
64
 
65
65
  if (stdio) {
66
- // Start MCP server in stdio mode (like ruv-swarm)
67
- success('Starting Claude Flow MCP server in stdio mode...');
68
-
69
- if (autoOrchestrator) {
70
- log('🚀 Auto-starting orchestrator...');
71
- log('🧠 Neural network capabilities: ENABLED');
72
- log('🔧 WASM SIMD optimization: ACTIVE');
73
- log('📊 Performance monitoring: ENABLED');
74
- log('🐝 Swarm coordination: READY');
75
- }
66
+ // In stdio mode, don't output ANY messages before spawning the server
67
+ // The MCP server will handle all output (stderr for logs, stdout for JSON-RPC)
68
+ // Any output here would corrupt the JSON-RPC protocol stream
76
69
 
77
70
  // Import and start the MCP server
78
71
  try {
@@ -11,6 +11,7 @@ import { fileURLToPath } from 'url';
11
11
  import { EnhancedMemory } from '../memory/enhanced-memory.js';
12
12
  // Use the same memory system that npx commands use - singleton instance
13
13
  import { memoryStore } from '../memory/fallback-store.js';
14
+ import { VERSION } from '../core/version.js';
14
15
 
15
16
  // Initialize agent tracker
16
17
  await import('./implementations/agent-tracker.js').catch(() => {
@@ -18,7 +19,7 @@ await import('./implementations/agent-tracker.js').catch(() => {
18
19
  try {
19
20
  require('./implementations/agent-tracker');
20
21
  } catch (e) {
21
- console.log('Agent tracker not loaded');
22
+ console.error('Agent tracker not loaded');
22
23
  }
23
24
  });
24
25
 
@@ -28,7 +29,7 @@ await import('./implementations/daa-tools.js').catch(() => {
28
29
  try {
29
30
  require('./implementations/daa-tools');
30
31
  } catch (e) {
31
- console.log('DAA manager not loaded');
32
+ console.error('DAA manager not loaded');
32
33
  }
33
34
  });
34
35
 
@@ -38,7 +39,7 @@ await import('./implementations/workflow-tools.js').catch(() => {
38
39
  try {
39
40
  require('./implementations/workflow-tools');
40
41
  } catch (e) {
41
- console.log('Workflow tools not loaded');
42
+ console.error('Workflow tools not loaded');
42
43
  }
43
44
  });
44
45
 
@@ -63,7 +64,7 @@ function resolveLegacyAgentType(legacyType) {
63
64
 
64
65
  class ClaudeFlowMCPServer {
65
66
  constructor() {
66
- this.version = '2.5.0-alpha.131'; // Updated with Phase 4 SDK integration tools
67
+ this.version = VERSION; // Use version from package.json
67
68
  this.memoryStore = memoryStore; // Use shared singleton instance
68
69
  // Use the same memory system that already works
69
70
  this.capabilities = {
@@ -2545,7 +2546,8 @@ async function startMCPServer() {
2545
2546
  console.error(
2546
2547
  `[${new Date().toISOString()}] INFO [claude-flow-mcp] (${server.sessionId}) Claude-Flow MCP server starting in stdio mode`,
2547
2548
  );
2548
- console.error({
2549
+ // Log server info as a JSON string to stderr to ensure it doesn't corrupt stdout
2550
+ console.error(JSON.stringify({
2549
2551
  arch: process.arch,
2550
2552
  mode: 'mcp-stdio',
2551
2553
  nodeVersion: process.version,
@@ -2554,7 +2556,7 @@ async function startMCPServer() {
2554
2556
  protocol: 'stdio',
2555
2557
  sessionId: server.sessionId,
2556
2558
  version: server.version,
2557
- });
2559
+ }));
2558
2560
 
2559
2561
  // Send server capabilities
2560
2562
  console.log(