claude-flow 2.7.35 → 2.7.36

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 (121) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/bin/claude-flow +1 -1
  3. package/dist/src/__tests__/benchmarks/performance.bench.js +0 -19
  4. package/dist/src/__tests__/benchmarks/performance.bench.js.map +1 -1
  5. package/dist/src/__tests__/hook-matchers.test.js.map +1 -1
  6. package/dist/src/agents/agent-registry.js.map +1 -1
  7. package/dist/src/api/auth-service.js.map +1 -1
  8. package/dist/src/api/claude-client-enhanced.js +4 -2
  9. package/dist/src/api/claude-client-enhanced.js.map +1 -1
  10. package/dist/src/api/claude-client.js +4 -2
  11. package/dist/src/api/claude-client.js.map +1 -1
  12. package/dist/src/api/database-service.js.map +1 -1
  13. package/dist/src/api/swarm-api.js +1 -1
  14. package/dist/src/api/swarm-api.js.map +1 -1
  15. package/dist/src/cli/commands/hive-mind/wizard.js +1 -1
  16. package/dist/src/cli/commands/hive-mind/wizard.js.map +1 -1
  17. package/dist/src/cli/simple-cli.js +172 -182
  18. package/dist/src/cli/simple-cli.js.map +1 -1
  19. package/dist/src/cli/simple-commands/init/skills-copier.js +1 -1
  20. package/dist/src/cli/simple-commands/init/skills-copier.js.map +1 -1
  21. package/dist/src/cli/simple-orchestrator.js +1 -1
  22. package/dist/src/cli/simple-orchestrator.js.map +1 -1
  23. package/dist/src/coordination/conflict-resolution.js +1 -1
  24. package/dist/src/coordination/conflict-resolution.js.map +1 -1
  25. package/dist/src/coordination/load-balancer.js +1 -1
  26. package/dist/src/coordination/load-balancer.js.map +1 -1
  27. package/dist/src/core/config.js +1 -1
  28. package/dist/src/core/config.js.map +1 -1
  29. package/dist/src/core/version.js +1 -1
  30. package/dist/src/enterprise/audit-manager.js +1 -1
  31. package/dist/src/enterprise/audit-manager.js.map +1 -1
  32. package/dist/src/providers/openai-provider.js +2 -2
  33. package/dist/src/providers/openai-provider.js.map +1 -1
  34. package/dist/src/sdk/checkpoint-manager.js +1 -1
  35. package/dist/src/sdk/checkpoint-manager.js.map +1 -1
  36. package/dist/src/services/agentic-flow-hooks/workflow-hooks.js +1 -1
  37. package/dist/src/services/agentic-flow-hooks/workflow-hooks.js.map +1 -1
  38. package/dist/src/swarm/coordinator.js +1 -1
  39. package/dist/src/swarm/coordinator.js.map +1 -1
  40. package/dist/src/utils/key-redactor.js.map +1 -1
  41. package/dist/src/utils/metrics-reader.js.map +1 -1
  42. package/dist/src/verification/rollback.js +2 -2
  43. package/dist/src/verification/rollback.js.map +1 -1
  44. package/dist/src/verification/tests/mocks/false-reporting-scenarios.test.js +4 -2
  45. package/dist/src/verification/tests/mocks/false-reporting-scenarios.test.js.map +1 -1
  46. package/docs/.claude-flow/metrics/performance.json +3 -3
  47. package/docs/.claude-flow/metrics/task-metrics.json +3 -3
  48. package/docs/architecture/README.md +555 -0
  49. package/docs/architecture/github-workflows-optimization-strategy.md +1079 -0
  50. package/docs/architecture/workflow-architecture-diagram.md +615 -0
  51. package/docs/architecture/workflow-optimization-implementation-guide.md +593 -0
  52. package/docs/fixes/WORKFLOW_FIXES.md +292 -0
  53. package/docs/fixes/WORKFLOW_FIXES_FINAL_STATUS.md +291 -0
  54. package/docs/fixes/github-workflow-fixes-pr888.md +279 -0
  55. package/docs/fixes/workflow-fixes-action-plan.md +388 -0
  56. package/docs/github-workflow-fixes.md +219 -0
  57. package/docs/reviews/github-workflows-analysis-report.md +820 -0
  58. package/docs/reviews/pr-888-review-report.md +560 -0
  59. package/docs/validation/workflow-fix-verification.md +206 -0
  60. package/package.json +7 -7
  61. package/src/__tests__/benchmarks/performance.bench.ts +2 -25
  62. package/src/__tests__/hook-matchers.test.ts +2 -0
  63. package/src/agents/agent-registry.ts +1 -1
  64. package/src/api/auth-service.ts +1 -1
  65. package/src/api/claude-client-enhanced.ts +2 -1
  66. package/src/api/claude-client.ts +2 -2
  67. package/src/api/database-service.ts +1 -2
  68. package/src/api/swarm-api.ts +2 -2
  69. package/src/cli/commands/hive-mind/wizard.ts +1 -1
  70. package/src/cli/simple-commands/init/skills-copier.js +1 -1
  71. package/src/cli/simple-orchestrator.ts +1 -1
  72. package/src/coordination/conflict-resolution.ts +1 -1
  73. package/src/coordination/load-balancer.ts +1 -1
  74. package/src/core/config.ts +1 -1
  75. package/src/enterprise/audit-manager.ts +1 -1
  76. package/src/providers/openai-provider.ts +2 -2
  77. package/src/sdk/checkpoint-manager.ts +1 -1
  78. package/src/services/agentic-flow-hooks/workflow-hooks.ts +1 -1
  79. package/src/swarm/coordinator.ts +1 -1
  80. package/src/verification/rollback.ts +2 -2
  81. package/src/verification/tests/mocks/false-reporting-scenarios.test.ts +6 -3
  82. /package/docs/{BUG_REPORT_MEMORY_STATS.md → bug-reports/BUG_REPORT_MEMORY_STATS.md} +0 -0
  83. /package/docs/{AUTOMATIC_ERROR_RECOVERY_v2.7.35.md → features/AUTOMATIC_ERROR_RECOVERY_v2.7.35.md} +0 -0
  84. /package/docs/{MCP_2025_FEATURE_CONFIRMATION.md → features/MCP_2025_FEATURE_CONFIRMATION.md} +0 -0
  85. /package/docs/{OPTIONAL_LOCAL_EMBEDDINGS.md → features/OPTIONAL_LOCAL_EMBEDDINGS.md} +0 -0
  86. /package/docs/{mcp-2025-implementation-summary.md → features/mcp-2025-implementation-summary.md} +0 -0
  87. /package/docs/{mcp-spec-2025-implementation-plan.md → features/mcp-spec-2025-implementation-plan.md} +0 -0
  88. /package/docs/{AGENTIC_FLOW_ENABLED_LOG_FIX.md → fixes/AGENTIC_FLOW_ENABLED_LOG_FIX.md} +0 -0
  89. /package/docs/{MEMORY_COMMAND_FIX.md → fixes/MEMORY_COMMAND_FIX.md} +0 -0
  90. /package/docs/{NPX_MEMORY_FIX_v2.7.19.md → fixes/NPX_MEMORY_FIX_v2.7.19.md} +0 -0
  91. /package/docs/{REMOTE_INSTALL_FIX.md → fixes/REMOTE_INSTALL_FIX.md} +0 -0
  92. /package/docs/{SQLITE_FIX_COMPLETE_v2.7.21.md → fixes/SQLITE_FIX_COMPLETE_v2.7.21.md} +0 -0
  93. /package/docs/{NPM_PUBLISH_GUIDE_v2.7.33.md → guides/NPM_PUBLISH_GUIDE_v2.7.33.md} +0 -0
  94. /package/docs/{SWARM_INITIALIZATION_GUIDE.md → guides/SWARM_INITIALIZATION_GUIDE.md} +0 -0
  95. /package/docs/{AGENTDB_BRANCH_MERGE_VERIFICATION.md → integration/AGENTDB_BRANCH_MERGE_VERIFICATION.md} +0 -0
  96. /package/docs/{INTEGRATION_STATUS_FINAL.md → integration/INTEGRATION_STATUS_FINAL.md} +0 -0
  97. /package/docs/{agentic-flow-agentdb-mcp-integration.md → integration/agentic-flow-agentdb-mcp-integration.md} +0 -0
  98. /package/docs/{phase-1-2-implementation-summary.md → integration/phase-1-2-implementation-summary.md} +0 -0
  99. /package/docs/{.github-release-issue-v2.7.33.md → releases/.github-release-issue-v2.7.33.md} +0 -0
  100. /package/docs/{RELEASE_NOTES_v2.7.15.md → releases/RELEASE_NOTES_v2.7.15.md} +0 -0
  101. /package/docs/{RELEASE_NOTES_v2.7.33.md → releases/RELEASE_NOTES_v2.7.33.md} +0 -0
  102. /package/docs/{RELEASE_READINESS_SUMMARY.md → releases/RELEASE_READINESS_SUMMARY.md} +0 -0
  103. /package/docs/{RELEASE_SUMMARY_v2.7.33.md → releases/RELEASE_SUMMARY_v2.7.33.md} +0 -0
  104. /package/docs/{V2.7.14_RELEASE_NOTES.md → releases/V2.7.14_RELEASE_NOTES.md} +0 -0
  105. /package/docs/{V2.7.25_RELEASE_NOTES.md → releases/V2.7.25_RELEASE_NOTES.md} +0 -0
  106. /package/docs/{V2.7.26_RELEASE_SUMMARY.md → releases/V2.7.26_RELEASE_SUMMARY.md} +0 -0
  107. /package/docs/{V2.7.27_RELEASE_NOTES.md → releases/V2.7.27_RELEASE_NOTES.md} +0 -0
  108. /package/docs/{V2.7.28_RELEASE_NOTES.md → releases/V2.7.28_RELEASE_NOTES.md} +0 -0
  109. /package/docs/{AGENTIC_FLOW_INTEGRATION_REVIEW.md → reviews/AGENTIC_FLOW_INTEGRATION_REVIEW.md} +0 -0
  110. /package/docs/{BRANCH_REVIEW_SUMMARY.md → reviews/BRANCH_REVIEW_SUMMARY.md} +0 -0
  111. /package/docs/{DEEP_CODE_REVIEW_v2.7.33.md → reviews/DEEP_CODE_REVIEW_v2.7.33.md} +0 -0
  112. /package/docs/{LATEST_LIBRARIES_REVIEW.md → reviews/LATEST_LIBRARIES_REVIEW.md} +0 -0
  113. /package/docs/{CONFIRMATION_AUTOMATIC_ERROR_RECOVERY.md → testing/CONFIRMATION_AUTOMATIC_ERROR_RECOVERY.md} +0 -0
  114. /package/docs/{DOCKER_TEST_RESULTS_v2.7.35.md → testing/DOCKER_TEST_RESULTS_v2.7.35.md} +0 -0
  115. /package/docs/{REGRESSION_TEST_REPORT_v2.7.33.md → testing/REGRESSION_TEST_REPORT_v2.7.33.md} +0 -0
  116. /package/docs/{V2.7.27_TEST_REPORT.md → testing/V2.7.27_TEST_REPORT.md} +0 -0
  117. /package/docs/{regression-analysis-phase-1-2.md → testing/regression-analysis-phase-1-2.md} +0 -0
  118. /package/docs/{TRANSFORMER_INITIALIZATION_ISSUE.md → troubleshooting/TRANSFORMER_INITIALIZATION_ISSUE.md} +0 -0
  119. /package/docs/{FIX_VERIFICATION_MEMORY_STATS.md → validation/FIX_VERIFICATION_MEMORY_STATS.md} +0 -0
  120. /package/docs/{TOOL_VALIDATION_REPORT.md → validation/TOOL_VALIDATION_REPORT.md} +0 -0
  121. /package/docs/{VALIDATION_REPORT_v2.7.1.md → validation/VALIDATION_REPORT_v2.7.1.md} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/config.ts"],"sourcesContent":["/**\n * Enterprise Configuration Management for Claude-Flow\n * Features: Security masking, change tracking, multi-format support, credential management\n */\n\nimport { promises as fs } from 'fs';\nimport { join } from 'path';\nimport { homedir } from 'os';\nimport { createHash, randomBytes, createCipheriv, createDecipheriv } from 'crypto';\nimport type { Config } from '../utils/types.js';\nimport { deepMerge, safeParseJSON } from '../utils/helpers.js';\nimport { ConfigError, ValidationError } from '../utils/errors.js';\n\n// Format parsers\ninterface FormatParser {\n parse(content: string): any;\n stringify(obj: any): string;\n extension: string;\n}\n\n// Configuration change record\ninterface ConfigChange {\n timestamp: string;\n path: string;\n oldValue: any;\n newValue: any;\n user?: string;\n reason?: string;\n source: 'cli' | 'api' | 'file' | 'env';\n}\n\n// Security classification\ninterface SecurityClassification {\n level: 'public' | 'internal' | 'confidential' | 'secret';\n maskPattern?: string;\n encrypted?: boolean;\n}\n\n// Validation rule\ninterface ValidationRule {\n type: string;\n required?: boolean;\n min?: number;\n max?: number;\n values?: string[];\n pattern?: RegExp;\n validator?: (value: any, config: Config) => string | null;\n dependencies?: string[];\n}\n\n/**\n * Security classifications for configuration paths\n */\nconst SECURITY_CLASSIFICATIONS: Record<string, SecurityClassification> = {\n credentials: { level: 'secret', encrypted: true },\n 'credentials.apiKey': { level: 'secret', maskPattern: '****...****', encrypted: true },\n 'credentials.token': { level: 'secret', maskPattern: '****...****', encrypted: true },\n 'credentials.password': { level: 'secret', maskPattern: '********', encrypted: true },\n 'mcp.apiKey': { level: 'confidential', maskPattern: '****...****' },\n 'logging.destination': { level: 'internal' },\n orchestrator: { level: 'internal' },\n terminal: { level: 'public' },\n};\n\n/**\n * Sensitive configuration paths that should be masked in output\n */\nconst SENSITIVE_PATHS = ['credentials', 'apiKey', 'token', 'password', 'secret', 'key', 'auth'];\n\n/**\n * Format parsers for different configuration file types\n */\nconst FORMAT_PARSERS: Record<string, FormatParser> = {\n json: {\n parse: JSON.parse,\n stringify: (obj) => JSON.stringify(obj, null, 2),\n extension: '.json',\n },\n yaml: {\n parse: (content) => {\n // Simple YAML parser for basic key-value pairs\n const lines = content.split('\\n');\n const result: any = {};\n let current = result;\n const stack: any[] = [result];\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n\n const indent = line.length - line.trimStart().length;\n const colonIndex = trimmed.indexOf(':');\n\n if (colonIndex === -1) continue;\n\n const key = trimmed.substring(0, colonIndex).trim();\n const value = trimmed.substring(colonIndex + 1).trim();\n\n // Simple value parsing\n let parsedValue: any = value;\n if (value === 'true') parsedValue = true;\n else if (value === 'false') parsedValue = false;\n else if (!isNaN(Number(value)) && value !== '') parsedValue = Number(value);\n else if (value.startsWith('\"') && value.endsWith('\"')) {\n parsedValue = value.slice(1, -1);\n }\n\n current[key] = parsedValue;\n }\n\n return result;\n },\n stringify: (obj) => {\n const stringify = (obj: any, indent = 0): string => {\n const spaces = ' '.repeat(indent);\n let result = '';\n\n for (const [key, value] of Object.entries(obj)) {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n result += `${spaces}${key}:\\n${stringify(value, indent + 1)}`;\n } else {\n const formattedValue = typeof value === 'string' ? `\"${value}\"` : String(value);\n result += `${spaces}${key}: ${formattedValue}\\n`;\n }\n }\n\n return result;\n };\n\n return stringify(obj);\n },\n extension: '.yaml',\n },\n toml: {\n parse: (content) => {\n // Simple TOML parser for basic sections and key-value pairs\n const lines = content.split('\\n');\n const result: any = {};\n let currentSection = result;\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n\n // Section header\n if (trimmed.startsWith('[') && trimmed.endsWith(']')) {\n const sectionName = trimmed.slice(1, -1);\n currentSection = result[sectionName] = {};\n continue;\n }\n\n // Key-value pair\n const equalsIndex = trimmed.indexOf('=');\n if (equalsIndex === -1) continue;\n\n const key = trimmed.substring(0, equalsIndex).trim();\n const value = trimmed.substring(equalsIndex + 1).trim();\n\n // Simple value parsing\n let parsedValue: any = value;\n if (value === 'true') parsedValue = true;\n else if (value === 'false') parsedValue = false;\n else if (!isNaN(Number(value)) && value !== '') parsedValue = Number(value);\n else if (value.startsWith('\"') && value.endsWith('\"')) {\n parsedValue = value.slice(1, -1);\n }\n\n currentSection[key] = parsedValue;\n }\n\n return result;\n },\n stringify: (obj) => {\n let result = '';\n\n for (const [section, values] of Object.entries(obj)) {\n if (typeof values === 'object' && values !== null && !Array.isArray(values)) {\n result += `[${section}]\\n`;\n for (const [key, value] of Object.entries(values)) {\n const formattedValue = typeof value === 'string' ? `\"${value}\"` : String(value);\n result += `${key} = ${formattedValue}\\n`;\n }\n result += '\\n';\n }\n }\n\n return result;\n },\n extension: '.toml',\n },\n};\n\n/**\n * Default configuration values\n */\nconst DEFAULT_CONFIG: Config = {\n orchestrator: {\n maxConcurrentAgents: 10,\n taskQueueSize: 100,\n healthCheckInterval: 30000, // 30 seconds\n shutdownTimeout: 30000, // 30 seconds\n },\n terminal: {\n type: 'auto',\n poolSize: 5,\n recycleAfter: 10, // recycle after 10 uses\n healthCheckInterval: 60000, // 1 minute\n commandTimeout: 300000, // 5 minutes\n },\n memory: {\n backend: 'hybrid',\n cacheSizeMB: 100,\n syncInterval: 5000, // 5 seconds\n conflictResolution: 'crdt',\n retentionDays: 30,\n },\n coordination: {\n maxRetries: 3,\n retryDelay: 1000, // 1 second\n deadlockDetection: true,\n resourceTimeout: 60000, // 1 minute\n messageTimeout: 30000, // 30 seconds\n },\n mcp: {\n transport: 'stdio',\n port: 3000,\n tlsEnabled: false,\n },\n logging: {\n level: 'info',\n format: 'json',\n destination: 'console',\n },\n credentials: {\n // Encrypted credentials storage\n },\n security: {\n encryptionEnabled: true,\n auditLogging: true,\n maskSensitiveValues: true,\n allowEnvironmentOverrides: true,\n },\n};\n\n/**\n * Configuration manager\n */\nexport class ConfigManager {\n private static instance: ConfigManager;\n private config: Config;\n private configPath?: string;\n private profiles: Map<string, Partial<Config>> = new Map();\n private currentProfile?: string;\n private userConfigDir: string;\n private changeHistory: ConfigChange[] = [];\n private encryptionKey?: Buffer;\n private validationRules: Map<string, ValidationRule> = new Map();\n private formatParsers = FORMAT_PARSERS;\n\n private constructor() {\n this.config = deepClone(DEFAULT_CONFIG);\n this.userConfigDir = this.getUserConfigDir();\n this.setupValidationRules();\n // Encryption will be initialized via init() method\n }\n\n /**\n * Gets the singleton instance\n */\n static getInstance(): ConfigManager {\n if (!ConfigManager.instance) {\n ConfigManager.instance = new ConfigManager();\n }\n return ConfigManager.instance;\n }\n\n /**\n * Initialize async components\n */\n async init(): Promise<void> {\n await this.initializeEncryption();\n }\n\n /**\n * Initializes encryption for sensitive configuration values\n */\n private async initializeEncryption(): Promise<void> {\n try {\n const keyFile = join(this.userConfigDir, '.encryption-key');\n // Check if key file exists (simplified for demo)\n try {\n await fs.access(keyFile);\n // In a real implementation, this would be more secure\n this.encryptionKey = randomBytes(32);\n } catch {\n this.encryptionKey = randomBytes(32);\n // Store key securely (in production, use proper key management)\n }\n } catch (error) {\n console.warn('Failed to initialize encryption:', (error as Error).message);\n }\n }\n\n /**\n * Sets up validation rules for configuration paths\n */\n private setupValidationRules(): void {\n // Orchestrator validation rules\n this.validationRules.set('orchestrator.maxConcurrentAgents', {\n type: 'number',\n required: true,\n min: 1,\n max: 100,\n validator: (value, config) => {\n if (value > config.terminal?.poolSize * 2) {\n return 'maxConcurrentAgents should not exceed 2x terminal pool size';\n }\n return null;\n },\n });\n\n this.validationRules.set('orchestrator.taskQueueSize', {\n type: 'number',\n required: true,\n min: 1,\n max: 10000,\n dependencies: ['orchestrator.maxConcurrentAgents'],\n validator: (value, config) => {\n const maxAgents = config.orchestrator?.maxConcurrentAgents || 1;\n if (value < maxAgents * 10) {\n return 'taskQueueSize should be at least 10x maxConcurrentAgents';\n }\n return null;\n },\n });\n\n // Terminal validation rules\n this.validationRules.set('terminal.type', {\n type: 'string',\n required: true,\n values: ['auto', 'vscode', 'native'],\n });\n\n this.validationRules.set('terminal.poolSize', {\n type: 'number',\n required: true,\n min: 1,\n max: 50,\n });\n\n // Memory validation rules\n this.validationRules.set('memory.backend', {\n type: 'string',\n required: true,\n values: ['sqlite', 'markdown', 'hybrid'],\n });\n\n this.validationRules.set('memory.cacheSizeMB', {\n type: 'number',\n required: true,\n min: 1,\n max: 10000,\n validator: (value) => {\n if (value > 1000) {\n return 'Large cache sizes may impact system performance';\n }\n return null;\n },\n });\n\n // Security validation rules\n this.validationRules.set('security.encryptionEnabled', {\n type: 'boolean',\n required: true,\n });\n\n // Credentials validation\n this.validationRules.set('credentials.apiKey', {\n type: 'string',\n pattern: /^[a-zA-Z0-9_-]+$/,\n validator: (value) => {\n if (value && value.length < 16) {\n return 'API key should be at least 16 characters long';\n }\n return null;\n },\n });\n }\n\n /**\n * Loads configuration from various sources\n */\n async load(configPath?: string): Promise<Config> {\n if (configPath !== undefined) {\n this.configPath = configPath;\n }\n\n // Start with defaults\n let config = deepClone(DEFAULT_CONFIG);\n\n // Load from file if specified\n if (configPath) {\n const fileConfig = await this.loadFromFile(configPath);\n config = deepMergeConfig(config, fileConfig);\n }\n\n // Load from environment variables\n const envConfig = this.loadFromEnv();\n config = deepMergeConfig(config, envConfig);\n\n // Validate the final configuration\n this.validate(config);\n\n this.config = config;\n return config;\n }\n\n /**\n * Gets the current configuration with optional security masking\n */\n get(maskSensitive = false): Config {\n const config = deepClone(this.config);\n\n if (maskSensitive && this.config.security?.maskSensitiveValues) {\n return this.maskSensitiveValues(config);\n }\n\n return config;\n }\n\n /**\n * Gets configuration with security masking applied\n */\n getSecure(): Config {\n return this.get(true);\n }\n\n /**\n * Gets all configuration values (alias for get method for backward compatibility)\n */\n async getAll(): Promise<Config> {\n return this.get();\n }\n\n /**\n * Updates configuration values with change tracking\n */\n update(\n updates: Partial<Config>,\n options: { user?: string; reason?: string; source?: 'cli' | 'api' | 'file' | 'env' } = {},\n ): Config {\n const oldConfig = deepClone(this.config);\n\n // Track changes before applying\n this.trackChanges(oldConfig, updates, options);\n\n // Apply updates\n this.config = deepMergeConfig(this.config, updates);\n\n // Validate the updated configuration\n this.validateWithDependencies(this.config);\n\n return this.get();\n }\n\n /**\n * Loads default configuration\n */\n loadDefault(): void {\n this.config = deepClone(DEFAULT_CONFIG);\n }\n\n /**\n * Saves configuration to file with format support\n */\n async save(path?: string, format?: string): Promise<void> {\n const savePath = path || this.configPath;\n if (!savePath) {\n throw new ConfigError('No configuration file path specified');\n }\n\n const detectedFormat = format || this.detectFormat(savePath);\n const parser = this.formatParsers[detectedFormat];\n\n if (!parser) {\n throw new ConfigError(`Unsupported format for saving: ${detectedFormat}`);\n }\n\n // Get configuration without sensitive values for saving\n const configToSave = this.getConfigForSaving();\n const content = parser.stringify(configToSave);\n\n await fs.writeFile(savePath, content, 'utf8');\n\n // Record the save operation\n this.recordChange({\n timestamp: new Date().toISOString(),\n path: 'CONFIG_SAVED',\n oldValue: null,\n newValue: savePath,\n source: 'file',\n });\n }\n\n /**\n * Gets configuration suitable for saving (excludes runtime-only values)\n */\n private getConfigForSaving(): Partial<Config> {\n const config = deepClone(this.config);\n\n // Remove encrypted credentials from the saved config\n // They should be stored separately in a secure location\n if (config.credentials) {\n delete config.credentials;\n }\n\n return config;\n }\n\n /**\n * Gets user configuration directory\n */\n private getUserConfigDir(): string {\n const home = homedir();\n return join(home, '.claude-flow');\n }\n\n /**\n * Creates user config directory if it doesn't exist\n */\n private async ensureUserConfigDir(): Promise<void> {\n try {\n await fs.mkdir(this.userConfigDir, { recursive: true });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'EEXIST') {\n throw new ConfigError(`Failed to create config directory: ${(error as Error).message}`);\n }\n }\n }\n\n /**\n * Loads all profiles from the profiles directory\n */\n async loadProfiles(): Promise<void> {\n const profilesDir = join(this.userConfigDir, 'profiles');\n\n try {\n const entries = await fs.readdir(profilesDir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith('.json')) {\n const profileName = entry.name.replace('.json', '');\n const profilePath = join(profilesDir, entry.name);\n\n try {\n const content = await fs.readFile(profilePath, 'utf8');\n const profileConfig = safeParseJSON<Partial<Config>>(content);\n\n if (profileConfig) {\n this.profiles.set(profileName, profileConfig);\n }\n } catch (error) {\n console.warn(`Failed to load profile ${profileName}: ${(error as Error).message}`);\n }\n }\n }\n } catch (error) {\n // Profiles directory doesn't exist - this is okay\n }\n }\n\n /**\n * Applies a named profile\n */\n async applyProfile(profileName: string): Promise<void> {\n await this.loadProfiles();\n\n const profile = this.profiles.get(profileName);\n if (!profile) {\n throw new ConfigError(`Profile '${profileName}' not found`);\n }\n\n this.config = deepMergeConfig(this.config, profile);\n this.currentProfile = profileName;\n this.validate(this.config);\n }\n\n /**\n * Saves current configuration as a profile\n */\n async saveProfile(profileName: string, config?: Partial<Config>): Promise<void> {\n await this.ensureUserConfigDir();\n\n const profilesDir = join(this.userConfigDir, 'profiles');\n await fs.mkdir(profilesDir, { recursive: true });\n\n const profileConfig = config || this.config;\n const profilePath = join(profilesDir, `${profileName}.json`);\n\n const content = JSON.stringify(profileConfig, null, 2);\n await fs.writeFile(profilePath, content, 'utf8');\n\n this.profiles.set(profileName, profileConfig);\n }\n\n /**\n * Deletes a profile\n */\n async deleteProfile(profileName: string): Promise<void> {\n const profilePath = join(this.userConfigDir, 'profiles', `${profileName}.json`);\n\n try {\n await fs.unlink(profilePath);\n this.profiles.delete(profileName);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n throw new ConfigError(`Profile '${profileName}' not found`);\n }\n throw new ConfigError(`Failed to delete profile: ${(error as Error).message}`);\n }\n }\n\n /**\n * Lists all available profiles\n */\n async listProfiles(): Promise<string[]> {\n await this.loadProfiles();\n return Array.from(this.profiles.keys());\n }\n\n /**\n * Gets a specific profile configuration\n */\n async getProfile(profileName: string): Promise<Partial<Config> | undefined> {\n await this.loadProfiles();\n return this.profiles.get(profileName);\n }\n\n /**\n * Gets the current active profile name\n */\n getCurrentProfile(): string | undefined {\n return this.currentProfile;\n }\n\n /**\n * Sets a configuration value by path with change tracking and validation\n */\n set(\n path: string,\n value: any,\n options: { user?: string; reason?: string; source?: 'cli' | 'api' | 'file' | 'env' } = {},\n ): void {\n const oldValue = this.getValue(path);\n\n // Record the change\n this.recordChange({\n timestamp: new Date().toISOString(),\n path,\n oldValue,\n newValue: value,\n user: options.user,\n reason: options.reason,\n source: options.source || 'cli',\n });\n\n // Encrypt sensitive values\n if (this.isSensitivePath(path) && this.config.security?.encryptionEnabled) {\n value = this.encryptValue(value);\n }\n\n const keys = path.split('.');\n let current: any = this.config;\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n if (!(key in current)) {\n current[key] = {};\n }\n current = current[key];\n }\n\n current[keys[keys.length - 1]] = value;\n\n // Validate the path-specific rule and dependencies\n this.validatePath(path, value);\n this.validateWithDependencies(this.config);\n }\n\n /**\n * Gets a configuration value by path with decryption for sensitive values\n */\n getValue(path: string, decrypt = true): any {\n const keys = path.split('.');\n let current: any = this.config;\n\n for (const key of keys) {\n if (current && typeof current === 'object' && key in current) {\n current = current[key];\n } else {\n return undefined;\n }\n }\n\n // Decrypt sensitive values if requested\n if (decrypt && this.isSensitivePath(path) && this.isEncryptedValue(current)) {\n try {\n return this.decryptValue(current);\n } catch (error) {\n console.warn(`Failed to decrypt value at path ${path}:`, (error as Error).message);\n return current;\n }\n }\n\n return current;\n }\n\n /**\n * Resets configuration to defaults\n */\n reset(): void {\n this.config = deepClone(DEFAULT_CONFIG);\n delete this.currentProfile;\n }\n\n /**\n * Gets configuration schema for validation\n */\n getSchema(): any {\n return {\n orchestrator: {\n maxConcurrentAgents: { type: 'number', min: 1, max: 100 },\n taskQueueSize: { type: 'number', min: 1, max: 10000 },\n healthCheckInterval: { type: 'number', min: 1000, max: 300000 },\n shutdownTimeout: { type: 'number', min: 1000, max: 300000 },\n },\n terminal: {\n type: { type: 'string', values: ['auto', 'vscode', 'native'] },\n poolSize: { type: 'number', min: 1, max: 50 },\n recycleAfter: { type: 'number', min: 1, max: 1000 },\n healthCheckInterval: { type: 'number', min: 1000, max: 3600000 },\n commandTimeout: { type: 'number', min: 1000, max: 3600000 },\n },\n memory: {\n backend: { type: 'string', values: ['sqlite', 'markdown', 'hybrid'] },\n cacheSizeMB: { type: 'number', min: 1, max: 10000 },\n syncInterval: { type: 'number', min: 1000, max: 300000 },\n conflictResolution: { type: 'string', values: ['crdt', 'timestamp', 'manual'] },\n retentionDays: { type: 'number', min: 1, max: 3650 },\n },\n coordination: {\n maxRetries: { type: 'number', min: 0, max: 100 },\n retryDelay: { type: 'number', min: 100, max: 60000 },\n deadlockDetection: { type: 'boolean' },\n resourceTimeout: { type: 'number', min: 1000, max: 3600000 },\n messageTimeout: { type: 'number', min: 1000, max: 300000 },\n },\n mcp: {\n transport: { type: 'string', values: ['stdio', 'http', 'websocket'] },\n port: { type: 'number', min: 1, max: 65535 },\n tlsEnabled: { type: 'boolean' },\n },\n logging: {\n level: { type: 'string', values: ['debug', 'info', 'warn', 'error'] },\n format: { type: 'string', values: ['json', 'text'] },\n destination: { type: 'string', values: ['console', 'file'] },\n },\n };\n }\n\n /**\n * Validates a value against schema\n */\n private validateValue(value: any, schema: any, path: string): void {\n if (schema.type === 'number') {\n if (typeof value !== 'number' || isNaN(value)) {\n throw new ValidationError(`${path}: must be a number`);\n }\n if (schema.min !== undefined && value < schema.min) {\n throw new ValidationError(`${path}: must be at least ${schema.min}`);\n }\n if (schema.max !== undefined && value > schema.max) {\n throw new ValidationError(`${path}: must be at most ${schema.max}`);\n }\n } else if (schema.type === 'string') {\n if (typeof value !== 'string') {\n throw new ValidationError(`${path}: must be a string`);\n }\n if (schema.values && !schema.values.includes(value)) {\n throw new ValidationError(`${path}: must be one of [${schema.values.join(', ')}]`);\n }\n } else if (schema.type === 'boolean') {\n if (typeof value !== 'boolean') {\n throw new ValidationError(`${path}: must be a boolean`);\n }\n }\n }\n\n /**\n * Gets configuration diff between current and default\n */\n getDiff(): any {\n const defaultConfig = DEFAULT_CONFIG;\n const diff: any = {};\n\n const findDifferences = (current: any, defaults: any, path: string = '') => {\n for (const key in current) {\n const currentValue = current[key];\n const defaultValue = defaults[key];\n const fullPath = path ? `${path}.${key}` : key;\n\n if (\n typeof currentValue === 'object' &&\n currentValue !== null &&\n !Array.isArray(currentValue)\n ) {\n if (typeof defaultValue === 'object' && defaultValue !== null) {\n const nestedDiff = {};\n findDifferences(currentValue, defaultValue, fullPath);\n if (Object.keys(nestedDiff).length > 0) {\n if (!path) {\n diff[key] = nestedDiff;\n }\n }\n }\n } else if (currentValue !== defaultValue) {\n const pathParts = fullPath.split('.');\n let target = diff;\n for (let i = 0; i < pathParts.length - 1; i++) {\n if (!target[pathParts[i]]) {\n target[pathParts[i]] = {};\n }\n target = target[pathParts[i]];\n }\n target[pathParts[pathParts.length - 1]] = currentValue;\n }\n }\n };\n\n findDifferences(this.config, defaultConfig);\n return diff;\n }\n\n /**\n * Exports configuration with metadata\n */\n export(): any {\n return {\n version: '1.0.0',\n exported: new Date().toISOString(),\n profile: this.currentProfile,\n config: this.config,\n diff: this.getDiff(),\n };\n }\n\n /**\n * Imports configuration from export\n */\n import(data: any): void {\n if (!data.config) {\n throw new ConfigError('Invalid configuration export format');\n }\n\n this.validateWithDependencies(data.config);\n this.config = data.config;\n this.currentProfile = data.profile;\n\n // Record the import operation\n this.recordChange({\n timestamp: new Date().toISOString(),\n path: 'CONFIG_IMPORTED',\n oldValue: null,\n newValue: data.version || 'unknown',\n source: 'file',\n });\n }\n\n /**\n * Loads configuration from file with format detection\n */\n private async loadFromFile(path: string): Promise<Partial<Config>> {\n try {\n const content = await fs.readFile(path, 'utf8');\n const format = this.detectFormat(path, content);\n const parser = this.formatParsers[format];\n\n if (!parser) {\n throw new ConfigError(`Unsupported configuration format: ${format}`);\n }\n\n const config = parser.parse(content) as Partial<Config>;\n\n if (!config) {\n throw new ConfigError(`Invalid ${format.toUpperCase()} in configuration file: ${path}`);\n }\n\n return config;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n // File doesn't exist, use defaults\n return {};\n }\n throw new ConfigError(\n `Failed to load configuration from ${path}: ${(error as Error).message}`,\n );\n }\n }\n\n /**\n * Detects configuration file format\n */\n private detectFormat(path: string, content?: string): string {\n const ext = path.split('.').pop()?.toLowerCase();\n\n if (ext === 'yaml' || ext === 'yml') return 'yaml';\n if (ext === 'toml') return 'toml';\n if (ext === 'json') return 'json';\n\n // Try to detect from content\n if (content) {\n const trimmed = content.trim();\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) return 'json';\n if (trimmed.includes('=') && trimmed.includes('[')) return 'toml';\n if (trimmed.includes(':') && !trimmed.includes('=')) return 'yaml';\n }\n\n // Default to JSON\n return 'json';\n }\n\n /**\n * Loads configuration from environment variables\n */\n private loadFromEnv(): Partial<Config> {\n const config: Partial<Config> = {};\n\n // Orchestrator settings\n const maxAgents = process.env.CLAUDE_FLOW_MAX_AGENTS;\n if (maxAgents) {\n if (!config.orchestrator) {\n config.orchestrator = {} as any;\n }\n config.orchestrator = {\n ...DEFAULT_CONFIG.orchestrator,\n ...config.orchestrator,\n maxConcurrentAgents: parseInt(maxAgents, 10),\n };\n }\n\n // Terminal settings\n const terminalType = process.env.CLAUDE_FLOW_TERMINAL_TYPE;\n if (terminalType === 'vscode' || terminalType === 'native' || terminalType === 'auto') {\n config.terminal = {\n ...DEFAULT_CONFIG.terminal,\n ...config.terminal,\n type: terminalType,\n };\n }\n\n // Memory settings\n const memoryBackend = process.env.CLAUDE_FLOW_MEMORY_BACKEND;\n if (memoryBackend === 'sqlite' || memoryBackend === 'markdown' || memoryBackend === 'hybrid') {\n config.memory = {\n ...DEFAULT_CONFIG.memory,\n ...config.memory,\n backend: memoryBackend,\n };\n }\n\n // MCP settings\n const mcpTransport = process.env.CLAUDE_FLOW_MCP_TRANSPORT;\n if (mcpTransport === 'stdio' || mcpTransport === 'http' || mcpTransport === 'websocket') {\n config.mcp = {\n ...DEFAULT_CONFIG.mcp,\n ...config.mcp,\n transport: mcpTransport,\n };\n }\n\n const mcpPort = process.env.CLAUDE_FLOW_MCP_PORT;\n if (mcpPort) {\n config.mcp = {\n ...DEFAULT_CONFIG.mcp,\n ...config.mcp,\n port: parseInt(mcpPort, 10),\n };\n }\n\n // Logging settings\n const logLevel = process.env.CLAUDE_FLOW_LOG_LEVEL;\n if (\n logLevel === 'debug' ||\n logLevel === 'info' ||\n logLevel === 'warn' ||\n logLevel === 'error'\n ) {\n config.logging = {\n ...DEFAULT_CONFIG.logging,\n ...config.logging,\n level: logLevel,\n };\n }\n\n return config;\n }\n\n /**\n * Validates configuration with dependency checking\n */\n private validateWithDependencies(config: Config): void {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Validate all paths with rules\n for (const [path, rule] of this.validationRules.entries()) {\n const value = this.getValueByPath(config, path);\n\n try {\n this.validatePath(path, value, config);\n } catch (error) {\n errors.push((error as Error).message);\n }\n }\n\n // Additional cross-field validations\n if (config.orchestrator.maxConcurrentAgents > config.terminal.poolSize * 3) {\n warnings.push('High agent-to-terminal ratio may cause resource contention');\n }\n\n if (config.memory.cacheSizeMB > 1000 && config.memory.backend === 'sqlite') {\n warnings.push('Large cache size with SQLite backend may impact performance');\n }\n\n if (config.mcp.transport === 'http' && !config.mcp.tlsEnabled) {\n warnings.push('HTTP transport without TLS is not recommended for production');\n }\n\n // Log warnings\n if (warnings.length > 0 && config.logging?.level === 'debug') {\n console.warn('Configuration warnings:', warnings);\n }\n\n // Throw errors\n if (errors.length > 0) {\n throw new ValidationError(`Configuration validation failed:\\n${errors.join('\\n')}`);\n }\n }\n\n /**\n * Validates a specific configuration path\n */\n private validatePath(path: string, value: any, config?: Config): void {\n const rule = this.validationRules.get(path);\n if (!rule) return;\n\n const currentConfig = config || this.config;\n\n // Required validation\n if (rule.required && (value === undefined || value === null)) {\n throw new ValidationError(`${path} is required`);\n }\n\n if (value === undefined || value === null) return;\n\n // Type validation\n if (rule.type === 'number' && (typeof value !== 'number' || isNaN(value))) {\n throw new ValidationError(`${path} must be a number`);\n }\n\n if (rule.type === 'string' && typeof value !== 'string') {\n throw new ValidationError(`${path} must be a string`);\n }\n\n if (rule.type === 'boolean' && typeof value !== 'boolean') {\n throw new ValidationError(`${path} must be a boolean`);\n }\n\n // Range validation\n if (typeof value === 'number') {\n if (rule.min !== undefined && value < rule.min) {\n throw new ValidationError(`${path} must be at least ${rule.min}`);\n }\n if (rule.max !== undefined && value > rule.max) {\n throw new ValidationError(`${path} must be at most ${rule.max}`);\n }\n }\n\n // Values validation\n if (rule.values && !rule.values.includes(value)) {\n throw new ValidationError(`${path} must be one of: ${rule.values.join(', ')}`);\n }\n\n // Pattern validation\n if (rule.pattern && typeof value === 'string' && !rule.pattern.test(value)) {\n throw new ValidationError(`${path} does not match required pattern`);\n }\n\n // Custom validator\n if (rule.validator) {\n const result = rule.validator(value, currentConfig);\n if (result) {\n throw new ValidationError(`${path}: ${result}`);\n }\n }\n }\n\n /**\n * Gets a value from a configuration object by path\n */\n private getValueByPath(obj: any, path: string): any {\n const keys = path.split('.');\n let current = obj;\n\n for (const key of keys) {\n if (current && typeof current === 'object' && key in current) {\n current = current[key];\n } else {\n return undefined;\n }\n }\n\n return current;\n }\n\n /**\n * Legacy validate method for backward compatibility\n */\n private validate(config: Config): void {\n this.validateWithDependencies(config);\n }\n\n /**\n * Masks sensitive values in configuration\n */\n private maskSensitiveValues(config: Config): Config {\n const maskedConfig = deepClone(config);\n\n // Recursively mask sensitive paths\n const maskObject = (obj: any, path: string = ''): any => {\n if (!obj || typeof obj !== 'object') return obj;\n\n const masked: any = {};\n for (const [key, value] of Object.entries(obj)) {\n const currentPath = path ? `${path}.${key}` : key;\n\n if (this.isSensitivePath(currentPath)) {\n const classification = SECURITY_CLASSIFICATIONS[currentPath];\n masked[key] = classification?.maskPattern || '****';\n } else if (typeof value === 'object' && value !== null) {\n masked[key] = maskObject(value, currentPath);\n } else {\n masked[key] = value;\n }\n }\n return masked;\n };\n\n return maskObject(maskedConfig);\n }\n\n /**\n * Tracks changes to configuration\n */\n private trackChanges(\n oldConfig: Config,\n updates: Partial<Config>,\n options: { user?: string; reason?: string; source?: 'cli' | 'api' | 'file' | 'env' },\n ): void {\n // Simple implementation for tracking changes\n for (const [key, value] of Object.entries(updates)) {\n this.recordChange({\n timestamp: new Date().toISOString(),\n path: key,\n oldValue: (oldConfig as any)[key],\n newValue: value,\n user: options.user,\n reason: options.reason,\n source: options.source || 'cli',\n });\n }\n }\n\n /**\n * Records a configuration change\n */\n private recordChange(change: ConfigChange): void {\n this.changeHistory.push(change);\n\n // Keep only last 1000 changes\n if (this.changeHistory.length > 1000) {\n this.changeHistory.shift();\n }\n }\n\n /**\n * Checks if a path contains sensitive information\n */\n private isSensitivePath(path: string): boolean {\n return SENSITIVE_PATHS.some((sensitive) =>\n path.toLowerCase().includes(sensitive.toLowerCase()),\n );\n }\n\n /**\n * Encrypts a sensitive value\n */\n private encryptValue(value: any): string {\n if (!this.encryptionKey) {\n return value; // Return original if encryption not available\n }\n\n try {\n // Simplified encryption - in production use proper encryption\n const iv = randomBytes(16);\n const key = createHash('sha256').update(this.encryptionKey).digest();\n const cipher = createCipheriv('aes-256-cbc', key, iv);\n let encrypted = cipher.update(JSON.stringify(value), 'utf8', 'hex');\n encrypted += cipher.final('hex');\n return `encrypted:${iv.toString('hex')}:${encrypted}`;\n } catch (error) {\n console.warn('Failed to encrypt value:', (error as Error).message);\n return value;\n }\n }\n\n /**\n * Decrypts a sensitive value\n */\n private decryptValue(encryptedValue: string): any {\n if (!this.encryptionKey || !this.isEncryptedValue(encryptedValue)) {\n return encryptedValue;\n }\n\n try {\n const parts = encryptedValue.replace('encrypted:', '').split(':');\n if (parts.length !== 2) return encryptedValue; // Handle old format\n const iv = Buffer.from(parts[0], 'hex');\n const encrypted = parts[1];\n const key = createHash('sha256').update(this.encryptionKey).digest();\n const decipher = createDecipheriv('aes-256-cbc', key, iv);\n let decrypted = decipher.update(encrypted, 'hex', 'utf8');\n decrypted += decipher.final('utf8');\n return JSON.parse(decrypted);\n } catch (error) {\n console.warn('Failed to decrypt value:', (error as Error).message);\n return encryptedValue;\n }\n }\n\n /**\n * Checks if a value is encrypted\n */\n private isEncryptedValue(value: any): boolean {\n return typeof value === 'string' && value.startsWith('encrypted:');\n }\n}\n\n// Export singleton instance\nexport const configManager = ConfigManager.getInstance();\n\n// Helper function to load configuration\nexport async function loadConfig(path?: string): Promise<Config> {\n return await configManager.load(path);\n}\n\nfunction deepClone<T>(obj: T): T {\n return JSON.parse(JSON.stringify(obj));\n}\n\n// Export types for external use\nexport type { FormatParser, ConfigChange, SecurityClassification, ValidationRule };\n\nexport { SENSITIVE_PATHS, SECURITY_CLASSIFICATIONS };\n\n// Custom deepMerge for Config type\nfunction deepMergeConfig(target: Config, ...sources: Partial<Config>[]): Config {\n const result = deepClone(target);\n\n for (const source of sources) {\n if (!source) continue;\n\n // Merge each section\n if (source.orchestrator) {\n result.orchestrator = { ...result.orchestrator, ...source.orchestrator };\n }\n if (source.terminal) {\n result.terminal = { ...result.terminal, ...source.terminal };\n }\n if (source.memory) {\n result.memory = { ...result.memory, ...source.memory };\n }\n if (source.coordination) {\n result.coordination = { ...result.coordination, ...source.coordination };\n }\n if (source.mcp) {\n result.mcp = { ...result.mcp, ...source.mcp };\n }\n if (source.logging) {\n result.logging = { ...result.logging, ...source.logging };\n }\n if (source.credentials) {\n result.credentials = { ...result.credentials, ...source.credentials };\n }\n if (source.security) {\n result.security = { ...result.security, ...source.security };\n }\n }\n\n return result;\n}\n"],"names":["promises","fs","join","homedir","createHash","randomBytes","createCipheriv","createDecipheriv","safeParseJSON","ConfigError","ValidationError","SECURITY_CLASSIFICATIONS","credentials","level","encrypted","maskPattern","orchestrator","terminal","SENSITIVE_PATHS","FORMAT_PARSERS","json","parse","JSON","stringify","obj","extension","yaml","content","lines","split","result","current","stack","line","trimmed","trim","startsWith","indent","length","trimStart","colonIndex","indexOf","key","substring","value","parsedValue","isNaN","Number","endsWith","slice","spaces","repeat","Object","entries","Array","isArray","formattedValue","String","toml","currentSection","sectionName","equalsIndex","section","values","DEFAULT_CONFIG","maxConcurrentAgents","taskQueueSize","healthCheckInterval","shutdownTimeout","type","poolSize","recycleAfter","commandTimeout","memory","backend","cacheSizeMB","syncInterval","conflictResolution","retentionDays","coordination","maxRetries","retryDelay","deadlockDetection","resourceTimeout","messageTimeout","mcp","transport","port","tlsEnabled","logging","format","destination","security","encryptionEnabled","auditLogging","maskSensitiveValues","allowEnvironmentOverrides","ConfigManager","instance","config","configPath","profiles","Map","currentProfile","userConfigDir","changeHistory","encryptionKey","validationRules","formatParsers","deepClone","getUserConfigDir","setupValidationRules","getInstance","init","initializeEncryption","keyFile","access","error","console","warn","message","set","required","min","max","validator","dependencies","maxAgents","pattern","load","undefined","fileConfig","loadFromFile","deepMergeConfig","envConfig","loadFromEnv","validate","get","maskSensitive","getSecure","getAll","update","updates","options","oldConfig","trackChanges","validateWithDependencies","loadDefault","save","path","savePath","detectedFormat","detectFormat","parser","configToSave","getConfigForSaving","writeFile","recordChange","timestamp","Date","toISOString","oldValue","newValue","source","home","ensureUserConfigDir","mkdir","recursive","code","loadProfiles","profilesDir","readdir","withFileTypes","entry","isFile","name","profileName","replace","profilePath","readFile","profileConfig","applyProfile","profile","saveProfile","deleteProfile","unlink","delete","listProfiles","from","keys","getProfile","getCurrentProfile","getValue","user","reason","isSensitivePath","encryptValue","i","validatePath","decrypt","isEncryptedValue","decryptValue","reset","getSchema","validateValue","schema","includes","getDiff","defaultConfig","diff","findDifferences","defaults","currentValue","defaultValue","fullPath","nestedDiff","pathParts","target","export","version","exported","import","data","toUpperCase","ext","pop","toLowerCase","process","env","CLAUDE_FLOW_MAX_AGENTS","parseInt","terminalType","CLAUDE_FLOW_TERMINAL_TYPE","memoryBackend","CLAUDE_FLOW_MEMORY_BACKEND","mcpTransport","CLAUDE_FLOW_MCP_TRANSPORT","mcpPort","CLAUDE_FLOW_MCP_PORT","logLevel","CLAUDE_FLOW_LOG_LEVEL","errors","warnings","rule","getValueByPath","push","currentConfig","test","maskedConfig","maskObject","masked","currentPath","classification","change","shift","some","sensitive","iv","digest","cipher","final","toString","encryptedValue","parts","Buffer","decipher","decrypted","configManager","loadConfig","sources"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/core/config.ts"],"sourcesContent":["/**\n * Enterprise Configuration Management for Claude-Flow\n * Features: Security masking, change tracking, multi-format support, credential management\n */\n\nimport { promises as fs } from 'fs';\nimport { join } from 'path';\nimport { homedir } from 'os';\nimport { createHash, randomBytes, createCipheriv, createDecipheriv } from 'crypto';\nimport type { Config } from '../utils/types.js';\nimport { deepMerge, safeParseJSON } from '../utils/helpers.js';\nimport { ConfigError, ValidationError } from '../utils/errors.js';\n\n// Format parsers\ninterface FormatParser {\n parse(content: string): any;\n stringify(obj: any): string;\n extension: string;\n}\n\n// Configuration change record\ninterface ConfigChange {\n timestamp: string;\n path: string;\n oldValue: any;\n newValue: any;\n user?: string;\n reason?: string;\n source: 'cli' | 'api' | 'file' | 'env';\n}\n\n// Security classification\ninterface SecurityClassification {\n level: 'public' | 'internal' | 'confidential' | 'secret';\n maskPattern?: string;\n encrypted?: boolean;\n}\n\n// Validation rule\ninterface ValidationRule {\n type: string;\n required?: boolean;\n min?: number;\n max?: number;\n values?: string[];\n pattern?: RegExp;\n validator?: (value: any, config: Config) => string | null;\n dependencies?: string[];\n}\n\n/**\n * Security classifications for configuration paths\n */\nconst SECURITY_CLASSIFICATIONS: Record<string, SecurityClassification> = {\n credentials: { level: 'secret', encrypted: true },\n 'credentials.apiKey': { level: 'secret', maskPattern: '****...****', encrypted: true },\n 'credentials.token': { level: 'secret', maskPattern: '****...****', encrypted: true },\n 'credentials.password': { level: 'secret', maskPattern: '********', encrypted: true },\n 'mcp.apiKey': { level: 'confidential', maskPattern: '****...****' },\n 'logging.destination': { level: 'internal' },\n orchestrator: { level: 'internal' },\n terminal: { level: 'public' },\n};\n\n/**\n * Sensitive configuration paths that should be masked in output\n */\nconst SENSITIVE_PATHS = ['credentials', 'apiKey', 'token', 'password', 'secret', 'key', 'auth'];\n\n/**\n * Format parsers for different configuration file types\n */\nconst FORMAT_PARSERS: Record<string, FormatParser> = {\n json: {\n parse: JSON.parse,\n stringify: (obj) => JSON.stringify(obj, null, 2),\n extension: '.json',\n },\n yaml: {\n parse: (content) => {\n // Simple YAML parser for basic key-value pairs\n const lines = content.split('\\n');\n const result: any = {};\n const current = result;\n const stack: any[] = [result];\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n\n const indent = line.length - line.trimStart().length;\n const colonIndex = trimmed.indexOf(':');\n\n if (colonIndex === -1) continue;\n\n const key = trimmed.substring(0, colonIndex).trim();\n const value = trimmed.substring(colonIndex + 1).trim();\n\n // Simple value parsing\n let parsedValue: any = value;\n if (value === 'true') parsedValue = true;\n else if (value === 'false') parsedValue = false;\n else if (!isNaN(Number(value)) && value !== '') parsedValue = Number(value);\n else if (value.startsWith('\"') && value.endsWith('\"')) {\n parsedValue = value.slice(1, -1);\n }\n\n current[key] = parsedValue;\n }\n\n return result;\n },\n stringify: (obj) => {\n const stringify = (obj: any, indent = 0): string => {\n const spaces = ' '.repeat(indent);\n let result = '';\n\n for (const [key, value] of Object.entries(obj)) {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n result += `${spaces}${key}:\\n${stringify(value, indent + 1)}`;\n } else {\n const formattedValue = typeof value === 'string' ? `\"${value}\"` : String(value);\n result += `${spaces}${key}: ${formattedValue}\\n`;\n }\n }\n\n return result;\n };\n\n return stringify(obj);\n },\n extension: '.yaml',\n },\n toml: {\n parse: (content) => {\n // Simple TOML parser for basic sections and key-value pairs\n const lines = content.split('\\n');\n const result: any = {};\n let currentSection = result;\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n\n // Section header\n if (trimmed.startsWith('[') && trimmed.endsWith(']')) {\n const sectionName = trimmed.slice(1, -1);\n currentSection = result[sectionName] = {};\n continue;\n }\n\n // Key-value pair\n const equalsIndex = trimmed.indexOf('=');\n if (equalsIndex === -1) continue;\n\n const key = trimmed.substring(0, equalsIndex).trim();\n const value = trimmed.substring(equalsIndex + 1).trim();\n\n // Simple value parsing\n let parsedValue: any = value;\n if (value === 'true') parsedValue = true;\n else if (value === 'false') parsedValue = false;\n else if (!isNaN(Number(value)) && value !== '') parsedValue = Number(value);\n else if (value.startsWith('\"') && value.endsWith('\"')) {\n parsedValue = value.slice(1, -1);\n }\n\n currentSection[key] = parsedValue;\n }\n\n return result;\n },\n stringify: (obj) => {\n let result = '';\n\n for (const [section, values] of Object.entries(obj)) {\n if (typeof values === 'object' && values !== null && !Array.isArray(values)) {\n result += `[${section}]\\n`;\n for (const [key, value] of Object.entries(values)) {\n const formattedValue = typeof value === 'string' ? `\"${value}\"` : String(value);\n result += `${key} = ${formattedValue}\\n`;\n }\n result += '\\n';\n }\n }\n\n return result;\n },\n extension: '.toml',\n },\n};\n\n/**\n * Default configuration values\n */\nconst DEFAULT_CONFIG: Config = {\n orchestrator: {\n maxConcurrentAgents: 10,\n taskQueueSize: 100,\n healthCheckInterval: 30000, // 30 seconds\n shutdownTimeout: 30000, // 30 seconds\n },\n terminal: {\n type: 'auto',\n poolSize: 5,\n recycleAfter: 10, // recycle after 10 uses\n healthCheckInterval: 60000, // 1 minute\n commandTimeout: 300000, // 5 minutes\n },\n memory: {\n backend: 'hybrid',\n cacheSizeMB: 100,\n syncInterval: 5000, // 5 seconds\n conflictResolution: 'crdt',\n retentionDays: 30,\n },\n coordination: {\n maxRetries: 3,\n retryDelay: 1000, // 1 second\n deadlockDetection: true,\n resourceTimeout: 60000, // 1 minute\n messageTimeout: 30000, // 30 seconds\n },\n mcp: {\n transport: 'stdio',\n port: 3000,\n tlsEnabled: false,\n },\n logging: {\n level: 'info',\n format: 'json',\n destination: 'console',\n },\n credentials: {\n // Encrypted credentials storage\n },\n security: {\n encryptionEnabled: true,\n auditLogging: true,\n maskSensitiveValues: true,\n allowEnvironmentOverrides: true,\n },\n};\n\n/**\n * Configuration manager\n */\nexport class ConfigManager {\n private static instance: ConfigManager;\n private config: Config;\n private configPath?: string;\n private profiles: Map<string, Partial<Config>> = new Map();\n private currentProfile?: string;\n private userConfigDir: string;\n private changeHistory: ConfigChange[] = [];\n private encryptionKey?: Buffer;\n private validationRules: Map<string, ValidationRule> = new Map();\n private formatParsers = FORMAT_PARSERS;\n\n private constructor() {\n this.config = deepClone(DEFAULT_CONFIG);\n this.userConfigDir = this.getUserConfigDir();\n this.setupValidationRules();\n // Encryption will be initialized via init() method\n }\n\n /**\n * Gets the singleton instance\n */\n static getInstance(): ConfigManager {\n if (!ConfigManager.instance) {\n ConfigManager.instance = new ConfigManager();\n }\n return ConfigManager.instance;\n }\n\n /**\n * Initialize async components\n */\n async init(): Promise<void> {\n await this.initializeEncryption();\n }\n\n /**\n * Initializes encryption for sensitive configuration values\n */\n private async initializeEncryption(): Promise<void> {\n try {\n const keyFile = join(this.userConfigDir, '.encryption-key');\n // Check if key file exists (simplified for demo)\n try {\n await fs.access(keyFile);\n // In a real implementation, this would be more secure\n this.encryptionKey = randomBytes(32);\n } catch {\n this.encryptionKey = randomBytes(32);\n // Store key securely (in production, use proper key management)\n }\n } catch (error) {\n console.warn('Failed to initialize encryption:', (error as Error).message);\n }\n }\n\n /**\n * Sets up validation rules for configuration paths\n */\n private setupValidationRules(): void {\n // Orchestrator validation rules\n this.validationRules.set('orchestrator.maxConcurrentAgents', {\n type: 'number',\n required: true,\n min: 1,\n max: 100,\n validator: (value, config) => {\n if (value > config.terminal?.poolSize * 2) {\n return 'maxConcurrentAgents should not exceed 2x terminal pool size';\n }\n return null;\n },\n });\n\n this.validationRules.set('orchestrator.taskQueueSize', {\n type: 'number',\n required: true,\n min: 1,\n max: 10000,\n dependencies: ['orchestrator.maxConcurrentAgents'],\n validator: (value, config) => {\n const maxAgents = config.orchestrator?.maxConcurrentAgents || 1;\n if (value < maxAgents * 10) {\n return 'taskQueueSize should be at least 10x maxConcurrentAgents';\n }\n return null;\n },\n });\n\n // Terminal validation rules\n this.validationRules.set('terminal.type', {\n type: 'string',\n required: true,\n values: ['auto', 'vscode', 'native'],\n });\n\n this.validationRules.set('terminal.poolSize', {\n type: 'number',\n required: true,\n min: 1,\n max: 50,\n });\n\n // Memory validation rules\n this.validationRules.set('memory.backend', {\n type: 'string',\n required: true,\n values: ['sqlite', 'markdown', 'hybrid'],\n });\n\n this.validationRules.set('memory.cacheSizeMB', {\n type: 'number',\n required: true,\n min: 1,\n max: 10000,\n validator: (value) => {\n if (value > 1000) {\n return 'Large cache sizes may impact system performance';\n }\n return null;\n },\n });\n\n // Security validation rules\n this.validationRules.set('security.encryptionEnabled', {\n type: 'boolean',\n required: true,\n });\n\n // Credentials validation\n this.validationRules.set('credentials.apiKey', {\n type: 'string',\n pattern: /^[a-zA-Z0-9_-]+$/,\n validator: (value) => {\n if (value && value.length < 16) {\n return 'API key should be at least 16 characters long';\n }\n return null;\n },\n });\n }\n\n /**\n * Loads configuration from various sources\n */\n async load(configPath?: string): Promise<Config> {\n if (configPath !== undefined) {\n this.configPath = configPath;\n }\n\n // Start with defaults\n let config = deepClone(DEFAULT_CONFIG);\n\n // Load from file if specified\n if (configPath) {\n const fileConfig = await this.loadFromFile(configPath);\n config = deepMergeConfig(config, fileConfig);\n }\n\n // Load from environment variables\n const envConfig = this.loadFromEnv();\n config = deepMergeConfig(config, envConfig);\n\n // Validate the final configuration\n this.validate(config);\n\n this.config = config;\n return config;\n }\n\n /**\n * Gets the current configuration with optional security masking\n */\n get(maskSensitive = false): Config {\n const config = deepClone(this.config);\n\n if (maskSensitive && this.config.security?.maskSensitiveValues) {\n return this.maskSensitiveValues(config);\n }\n\n return config;\n }\n\n /**\n * Gets configuration with security masking applied\n */\n getSecure(): Config {\n return this.get(true);\n }\n\n /**\n * Gets all configuration values (alias for get method for backward compatibility)\n */\n async getAll(): Promise<Config> {\n return this.get();\n }\n\n /**\n * Updates configuration values with change tracking\n */\n update(\n updates: Partial<Config>,\n options: { user?: string; reason?: string; source?: 'cli' | 'api' | 'file' | 'env' } = {},\n ): Config {\n const oldConfig = deepClone(this.config);\n\n // Track changes before applying\n this.trackChanges(oldConfig, updates, options);\n\n // Apply updates\n this.config = deepMergeConfig(this.config, updates);\n\n // Validate the updated configuration\n this.validateWithDependencies(this.config);\n\n return this.get();\n }\n\n /**\n * Loads default configuration\n */\n loadDefault(): void {\n this.config = deepClone(DEFAULT_CONFIG);\n }\n\n /**\n * Saves configuration to file with format support\n */\n async save(path?: string, format?: string): Promise<void> {\n const savePath = path || this.configPath;\n if (!savePath) {\n throw new ConfigError('No configuration file path specified');\n }\n\n const detectedFormat = format || this.detectFormat(savePath);\n const parser = this.formatParsers[detectedFormat];\n\n if (!parser) {\n throw new ConfigError(`Unsupported format for saving: ${detectedFormat}`);\n }\n\n // Get configuration without sensitive values for saving\n const configToSave = this.getConfigForSaving();\n const content = parser.stringify(configToSave);\n\n await fs.writeFile(savePath, content, 'utf8');\n\n // Record the save operation\n this.recordChange({\n timestamp: new Date().toISOString(),\n path: 'CONFIG_SAVED',\n oldValue: null,\n newValue: savePath,\n source: 'file',\n });\n }\n\n /**\n * Gets configuration suitable for saving (excludes runtime-only values)\n */\n private getConfigForSaving(): Partial<Config> {\n const config = deepClone(this.config);\n\n // Remove encrypted credentials from the saved config\n // They should be stored separately in a secure location\n if (config.credentials) {\n delete config.credentials;\n }\n\n return config;\n }\n\n /**\n * Gets user configuration directory\n */\n private getUserConfigDir(): string {\n const home = homedir();\n return join(home, '.claude-flow');\n }\n\n /**\n * Creates user config directory if it doesn't exist\n */\n private async ensureUserConfigDir(): Promise<void> {\n try {\n await fs.mkdir(this.userConfigDir, { recursive: true });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'EEXIST') {\n throw new ConfigError(`Failed to create config directory: ${(error as Error).message}`);\n }\n }\n }\n\n /**\n * Loads all profiles from the profiles directory\n */\n async loadProfiles(): Promise<void> {\n const profilesDir = join(this.userConfigDir, 'profiles');\n\n try {\n const entries = await fs.readdir(profilesDir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith('.json')) {\n const profileName = entry.name.replace('.json', '');\n const profilePath = join(profilesDir, entry.name);\n\n try {\n const content = await fs.readFile(profilePath, 'utf8');\n const profileConfig = safeParseJSON<Partial<Config>>(content);\n\n if (profileConfig) {\n this.profiles.set(profileName, profileConfig);\n }\n } catch (error) {\n console.warn(`Failed to load profile ${profileName}: ${(error as Error).message}`);\n }\n }\n }\n } catch (error) {\n // Profiles directory doesn't exist - this is okay\n }\n }\n\n /**\n * Applies a named profile\n */\n async applyProfile(profileName: string): Promise<void> {\n await this.loadProfiles();\n\n const profile = this.profiles.get(profileName);\n if (!profile) {\n throw new ConfigError(`Profile '${profileName}' not found`);\n }\n\n this.config = deepMergeConfig(this.config, profile);\n this.currentProfile = profileName;\n this.validate(this.config);\n }\n\n /**\n * Saves current configuration as a profile\n */\n async saveProfile(profileName: string, config?: Partial<Config>): Promise<void> {\n await this.ensureUserConfigDir();\n\n const profilesDir = join(this.userConfigDir, 'profiles');\n await fs.mkdir(profilesDir, { recursive: true });\n\n const profileConfig = config || this.config;\n const profilePath = join(profilesDir, `${profileName}.json`);\n\n const content = JSON.stringify(profileConfig, null, 2);\n await fs.writeFile(profilePath, content, 'utf8');\n\n this.profiles.set(profileName, profileConfig);\n }\n\n /**\n * Deletes a profile\n */\n async deleteProfile(profileName: string): Promise<void> {\n const profilePath = join(this.userConfigDir, 'profiles', `${profileName}.json`);\n\n try {\n await fs.unlink(profilePath);\n this.profiles.delete(profileName);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n throw new ConfigError(`Profile '${profileName}' not found`);\n }\n throw new ConfigError(`Failed to delete profile: ${(error as Error).message}`);\n }\n }\n\n /**\n * Lists all available profiles\n */\n async listProfiles(): Promise<string[]> {\n await this.loadProfiles();\n return Array.from(this.profiles.keys());\n }\n\n /**\n * Gets a specific profile configuration\n */\n async getProfile(profileName: string): Promise<Partial<Config> | undefined> {\n await this.loadProfiles();\n return this.profiles.get(profileName);\n }\n\n /**\n * Gets the current active profile name\n */\n getCurrentProfile(): string | undefined {\n return this.currentProfile;\n }\n\n /**\n * Sets a configuration value by path with change tracking and validation\n */\n set(\n path: string,\n value: any,\n options: { user?: string; reason?: string; source?: 'cli' | 'api' | 'file' | 'env' } = {},\n ): void {\n const oldValue = this.getValue(path);\n\n // Record the change\n this.recordChange({\n timestamp: new Date().toISOString(),\n path,\n oldValue,\n newValue: value,\n user: options.user,\n reason: options.reason,\n source: options.source || 'cli',\n });\n\n // Encrypt sensitive values\n if (this.isSensitivePath(path) && this.config.security?.encryptionEnabled) {\n value = this.encryptValue(value);\n }\n\n const keys = path.split('.');\n let current: any = this.config;\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n if (!(key in current)) {\n current[key] = {};\n }\n current = current[key];\n }\n\n current[keys[keys.length - 1]] = value;\n\n // Validate the path-specific rule and dependencies\n this.validatePath(path, value);\n this.validateWithDependencies(this.config);\n }\n\n /**\n * Gets a configuration value by path with decryption for sensitive values\n */\n getValue(path: string, decrypt = true): any {\n const keys = path.split('.');\n let current: any = this.config;\n\n for (const key of keys) {\n if (current && typeof current === 'object' && key in current) {\n current = current[key];\n } else {\n return undefined;\n }\n }\n\n // Decrypt sensitive values if requested\n if (decrypt && this.isSensitivePath(path) && this.isEncryptedValue(current)) {\n try {\n return this.decryptValue(current);\n } catch (error) {\n console.warn(`Failed to decrypt value at path ${path}:`, (error as Error).message);\n return current;\n }\n }\n\n return current;\n }\n\n /**\n * Resets configuration to defaults\n */\n reset(): void {\n this.config = deepClone(DEFAULT_CONFIG);\n delete this.currentProfile;\n }\n\n /**\n * Gets configuration schema for validation\n */\n getSchema(): any {\n return {\n orchestrator: {\n maxConcurrentAgents: { type: 'number', min: 1, max: 100 },\n taskQueueSize: { type: 'number', min: 1, max: 10000 },\n healthCheckInterval: { type: 'number', min: 1000, max: 300000 },\n shutdownTimeout: { type: 'number', min: 1000, max: 300000 },\n },\n terminal: {\n type: { type: 'string', values: ['auto', 'vscode', 'native'] },\n poolSize: { type: 'number', min: 1, max: 50 },\n recycleAfter: { type: 'number', min: 1, max: 1000 },\n healthCheckInterval: { type: 'number', min: 1000, max: 3600000 },\n commandTimeout: { type: 'number', min: 1000, max: 3600000 },\n },\n memory: {\n backend: { type: 'string', values: ['sqlite', 'markdown', 'hybrid'] },\n cacheSizeMB: { type: 'number', min: 1, max: 10000 },\n syncInterval: { type: 'number', min: 1000, max: 300000 },\n conflictResolution: { type: 'string', values: ['crdt', 'timestamp', 'manual'] },\n retentionDays: { type: 'number', min: 1, max: 3650 },\n },\n coordination: {\n maxRetries: { type: 'number', min: 0, max: 100 },\n retryDelay: { type: 'number', min: 100, max: 60000 },\n deadlockDetection: { type: 'boolean' },\n resourceTimeout: { type: 'number', min: 1000, max: 3600000 },\n messageTimeout: { type: 'number', min: 1000, max: 300000 },\n },\n mcp: {\n transport: { type: 'string', values: ['stdio', 'http', 'websocket'] },\n port: { type: 'number', min: 1, max: 65535 },\n tlsEnabled: { type: 'boolean' },\n },\n logging: {\n level: { type: 'string', values: ['debug', 'info', 'warn', 'error'] },\n format: { type: 'string', values: ['json', 'text'] },\n destination: { type: 'string', values: ['console', 'file'] },\n },\n };\n }\n\n /**\n * Validates a value against schema\n */\n private validateValue(value: any, schema: any, path: string): void {\n if (schema.type === 'number') {\n if (typeof value !== 'number' || isNaN(value)) {\n throw new ValidationError(`${path}: must be a number`);\n }\n if (schema.min !== undefined && value < schema.min) {\n throw new ValidationError(`${path}: must be at least ${schema.min}`);\n }\n if (schema.max !== undefined && value > schema.max) {\n throw new ValidationError(`${path}: must be at most ${schema.max}`);\n }\n } else if (schema.type === 'string') {\n if (typeof value !== 'string') {\n throw new ValidationError(`${path}: must be a string`);\n }\n if (schema.values && !schema.values.includes(value)) {\n throw new ValidationError(`${path}: must be one of [${schema.values.join(', ')}]`);\n }\n } else if (schema.type === 'boolean') {\n if (typeof value !== 'boolean') {\n throw new ValidationError(`${path}: must be a boolean`);\n }\n }\n }\n\n /**\n * Gets configuration diff between current and default\n */\n getDiff(): any {\n const defaultConfig = DEFAULT_CONFIG;\n const diff: any = {};\n\n const findDifferences = (current: any, defaults: any, path: string = '') => {\n for (const key in current) {\n const currentValue = current[key];\n const defaultValue = defaults[key];\n const fullPath = path ? `${path}.${key}` : key;\n\n if (\n typeof currentValue === 'object' &&\n currentValue !== null &&\n !Array.isArray(currentValue)\n ) {\n if (typeof defaultValue === 'object' && defaultValue !== null) {\n const nestedDiff = {};\n findDifferences(currentValue, defaultValue, fullPath);\n if (Object.keys(nestedDiff).length > 0) {\n if (!path) {\n diff[key] = nestedDiff;\n }\n }\n }\n } else if (currentValue !== defaultValue) {\n const pathParts = fullPath.split('.');\n let target = diff;\n for (let i = 0; i < pathParts.length - 1; i++) {\n if (!target[pathParts[i]]) {\n target[pathParts[i]] = {};\n }\n target = target[pathParts[i]];\n }\n target[pathParts[pathParts.length - 1]] = currentValue;\n }\n }\n };\n\n findDifferences(this.config, defaultConfig);\n return diff;\n }\n\n /**\n * Exports configuration with metadata\n */\n export(): any {\n return {\n version: '1.0.0',\n exported: new Date().toISOString(),\n profile: this.currentProfile,\n config: this.config,\n diff: this.getDiff(),\n };\n }\n\n /**\n * Imports configuration from export\n */\n import(data: any): void {\n if (!data.config) {\n throw new ConfigError('Invalid configuration export format');\n }\n\n this.validateWithDependencies(data.config);\n this.config = data.config;\n this.currentProfile = data.profile;\n\n // Record the import operation\n this.recordChange({\n timestamp: new Date().toISOString(),\n path: 'CONFIG_IMPORTED',\n oldValue: null,\n newValue: data.version || 'unknown',\n source: 'file',\n });\n }\n\n /**\n * Loads configuration from file with format detection\n */\n private async loadFromFile(path: string): Promise<Partial<Config>> {\n try {\n const content = await fs.readFile(path, 'utf8');\n const format = this.detectFormat(path, content);\n const parser = this.formatParsers[format];\n\n if (!parser) {\n throw new ConfigError(`Unsupported configuration format: ${format}`);\n }\n\n const config = parser.parse(content) as Partial<Config>;\n\n if (!config) {\n throw new ConfigError(`Invalid ${format.toUpperCase()} in configuration file: ${path}`);\n }\n\n return config;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n // File doesn't exist, use defaults\n return {};\n }\n throw new ConfigError(\n `Failed to load configuration from ${path}: ${(error as Error).message}`,\n );\n }\n }\n\n /**\n * Detects configuration file format\n */\n private detectFormat(path: string, content?: string): string {\n const ext = path.split('.').pop()?.toLowerCase();\n\n if (ext === 'yaml' || ext === 'yml') return 'yaml';\n if (ext === 'toml') return 'toml';\n if (ext === 'json') return 'json';\n\n // Try to detect from content\n if (content) {\n const trimmed = content.trim();\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) return 'json';\n if (trimmed.includes('=') && trimmed.includes('[')) return 'toml';\n if (trimmed.includes(':') && !trimmed.includes('=')) return 'yaml';\n }\n\n // Default to JSON\n return 'json';\n }\n\n /**\n * Loads configuration from environment variables\n */\n private loadFromEnv(): Partial<Config> {\n const config: Partial<Config> = {};\n\n // Orchestrator settings\n const maxAgents = process.env.CLAUDE_FLOW_MAX_AGENTS;\n if (maxAgents) {\n if (!config.orchestrator) {\n config.orchestrator = {} as any;\n }\n config.orchestrator = {\n ...DEFAULT_CONFIG.orchestrator,\n ...config.orchestrator,\n maxConcurrentAgents: parseInt(maxAgents, 10),\n };\n }\n\n // Terminal settings\n const terminalType = process.env.CLAUDE_FLOW_TERMINAL_TYPE;\n if (terminalType === 'vscode' || terminalType === 'native' || terminalType === 'auto') {\n config.terminal = {\n ...DEFAULT_CONFIG.terminal,\n ...config.terminal,\n type: terminalType,\n };\n }\n\n // Memory settings\n const memoryBackend = process.env.CLAUDE_FLOW_MEMORY_BACKEND;\n if (memoryBackend === 'sqlite' || memoryBackend === 'markdown' || memoryBackend === 'hybrid') {\n config.memory = {\n ...DEFAULT_CONFIG.memory,\n ...config.memory,\n backend: memoryBackend,\n };\n }\n\n // MCP settings\n const mcpTransport = process.env.CLAUDE_FLOW_MCP_TRANSPORT;\n if (mcpTransport === 'stdio' || mcpTransport === 'http' || mcpTransport === 'websocket') {\n config.mcp = {\n ...DEFAULT_CONFIG.mcp,\n ...config.mcp,\n transport: mcpTransport,\n };\n }\n\n const mcpPort = process.env.CLAUDE_FLOW_MCP_PORT;\n if (mcpPort) {\n config.mcp = {\n ...DEFAULT_CONFIG.mcp,\n ...config.mcp,\n port: parseInt(mcpPort, 10),\n };\n }\n\n // Logging settings\n const logLevel = process.env.CLAUDE_FLOW_LOG_LEVEL;\n if (\n logLevel === 'debug' ||\n logLevel === 'info' ||\n logLevel === 'warn' ||\n logLevel === 'error'\n ) {\n config.logging = {\n ...DEFAULT_CONFIG.logging,\n ...config.logging,\n level: logLevel,\n };\n }\n\n return config;\n }\n\n /**\n * Validates configuration with dependency checking\n */\n private validateWithDependencies(config: Config): void {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Validate all paths with rules\n for (const [path, rule] of this.validationRules.entries()) {\n const value = this.getValueByPath(config, path);\n\n try {\n this.validatePath(path, value, config);\n } catch (error) {\n errors.push((error as Error).message);\n }\n }\n\n // Additional cross-field validations\n if (config.orchestrator.maxConcurrentAgents > config.terminal.poolSize * 3) {\n warnings.push('High agent-to-terminal ratio may cause resource contention');\n }\n\n if (config.memory.cacheSizeMB > 1000 && config.memory.backend === 'sqlite') {\n warnings.push('Large cache size with SQLite backend may impact performance');\n }\n\n if (config.mcp.transport === 'http' && !config.mcp.tlsEnabled) {\n warnings.push('HTTP transport without TLS is not recommended for production');\n }\n\n // Log warnings\n if (warnings.length > 0 && config.logging?.level === 'debug') {\n console.warn('Configuration warnings:', warnings);\n }\n\n // Throw errors\n if (errors.length > 0) {\n throw new ValidationError(`Configuration validation failed:\\n${errors.join('\\n')}`);\n }\n }\n\n /**\n * Validates a specific configuration path\n */\n private validatePath(path: string, value: any, config?: Config): void {\n const rule = this.validationRules.get(path);\n if (!rule) return;\n\n const currentConfig = config || this.config;\n\n // Required validation\n if (rule.required && (value === undefined || value === null)) {\n throw new ValidationError(`${path} is required`);\n }\n\n if (value === undefined || value === null) return;\n\n // Type validation\n if (rule.type === 'number' && (typeof value !== 'number' || isNaN(value))) {\n throw new ValidationError(`${path} must be a number`);\n }\n\n if (rule.type === 'string' && typeof value !== 'string') {\n throw new ValidationError(`${path} must be a string`);\n }\n\n if (rule.type === 'boolean' && typeof value !== 'boolean') {\n throw new ValidationError(`${path} must be a boolean`);\n }\n\n // Range validation\n if (typeof value === 'number') {\n if (rule.min !== undefined && value < rule.min) {\n throw new ValidationError(`${path} must be at least ${rule.min}`);\n }\n if (rule.max !== undefined && value > rule.max) {\n throw new ValidationError(`${path} must be at most ${rule.max}`);\n }\n }\n\n // Values validation\n if (rule.values && !rule.values.includes(value)) {\n throw new ValidationError(`${path} must be one of: ${rule.values.join(', ')}`);\n }\n\n // Pattern validation\n if (rule.pattern && typeof value === 'string' && !rule.pattern.test(value)) {\n throw new ValidationError(`${path} does not match required pattern`);\n }\n\n // Custom validator\n if (rule.validator) {\n const result = rule.validator(value, currentConfig);\n if (result) {\n throw new ValidationError(`${path}: ${result}`);\n }\n }\n }\n\n /**\n * Gets a value from a configuration object by path\n */\n private getValueByPath(obj: any, path: string): any {\n const keys = path.split('.');\n let current = obj;\n\n for (const key of keys) {\n if (current && typeof current === 'object' && key in current) {\n current = current[key];\n } else {\n return undefined;\n }\n }\n\n return current;\n }\n\n /**\n * Legacy validate method for backward compatibility\n */\n private validate(config: Config): void {\n this.validateWithDependencies(config);\n }\n\n /**\n * Masks sensitive values in configuration\n */\n private maskSensitiveValues(config: Config): Config {\n const maskedConfig = deepClone(config);\n\n // Recursively mask sensitive paths\n const maskObject = (obj: any, path: string = ''): any => {\n if (!obj || typeof obj !== 'object') return obj;\n\n const masked: any = {};\n for (const [key, value] of Object.entries(obj)) {\n const currentPath = path ? `${path}.${key}` : key;\n\n if (this.isSensitivePath(currentPath)) {\n const classification = SECURITY_CLASSIFICATIONS[currentPath];\n masked[key] = classification?.maskPattern || '****';\n } else if (typeof value === 'object' && value !== null) {\n masked[key] = maskObject(value, currentPath);\n } else {\n masked[key] = value;\n }\n }\n return masked;\n };\n\n return maskObject(maskedConfig);\n }\n\n /**\n * Tracks changes to configuration\n */\n private trackChanges(\n oldConfig: Config,\n updates: Partial<Config>,\n options: { user?: string; reason?: string; source?: 'cli' | 'api' | 'file' | 'env' },\n ): void {\n // Simple implementation for tracking changes\n for (const [key, value] of Object.entries(updates)) {\n this.recordChange({\n timestamp: new Date().toISOString(),\n path: key,\n oldValue: (oldConfig as any)[key],\n newValue: value,\n user: options.user,\n reason: options.reason,\n source: options.source || 'cli',\n });\n }\n }\n\n /**\n * Records a configuration change\n */\n private recordChange(change: ConfigChange): void {\n this.changeHistory.push(change);\n\n // Keep only last 1000 changes\n if (this.changeHistory.length > 1000) {\n this.changeHistory.shift();\n }\n }\n\n /**\n * Checks if a path contains sensitive information\n */\n private isSensitivePath(path: string): boolean {\n return SENSITIVE_PATHS.some((sensitive) =>\n path.toLowerCase().includes(sensitive.toLowerCase()),\n );\n }\n\n /**\n * Encrypts a sensitive value\n */\n private encryptValue(value: any): string {\n if (!this.encryptionKey) {\n return value; // Return original if encryption not available\n }\n\n try {\n // Simplified encryption - in production use proper encryption\n const iv = randomBytes(16);\n const key = createHash('sha256').update(this.encryptionKey).digest();\n const cipher = createCipheriv('aes-256-cbc', key, iv);\n let encrypted = cipher.update(JSON.stringify(value), 'utf8', 'hex');\n encrypted += cipher.final('hex');\n return `encrypted:${iv.toString('hex')}:${encrypted}`;\n } catch (error) {\n console.warn('Failed to encrypt value:', (error as Error).message);\n return value;\n }\n }\n\n /**\n * Decrypts a sensitive value\n */\n private decryptValue(encryptedValue: string): any {\n if (!this.encryptionKey || !this.isEncryptedValue(encryptedValue)) {\n return encryptedValue;\n }\n\n try {\n const parts = encryptedValue.replace('encrypted:', '').split(':');\n if (parts.length !== 2) return encryptedValue; // Handle old format\n const iv = Buffer.from(parts[0], 'hex');\n const encrypted = parts[1];\n const key = createHash('sha256').update(this.encryptionKey).digest();\n const decipher = createDecipheriv('aes-256-cbc', key, iv);\n let decrypted = decipher.update(encrypted, 'hex', 'utf8');\n decrypted += decipher.final('utf8');\n return JSON.parse(decrypted);\n } catch (error) {\n console.warn('Failed to decrypt value:', (error as Error).message);\n return encryptedValue;\n }\n }\n\n /**\n * Checks if a value is encrypted\n */\n private isEncryptedValue(value: any): boolean {\n return typeof value === 'string' && value.startsWith('encrypted:');\n }\n}\n\n// Export singleton instance\nexport const configManager = ConfigManager.getInstance();\n\n// Helper function to load configuration\nexport async function loadConfig(path?: string): Promise<Config> {\n return await configManager.load(path);\n}\n\nfunction deepClone<T>(obj: T): T {\n return JSON.parse(JSON.stringify(obj));\n}\n\n// Export types for external use\nexport type { FormatParser, ConfigChange, SecurityClassification, ValidationRule };\n\nexport { SENSITIVE_PATHS, SECURITY_CLASSIFICATIONS };\n\n// Custom deepMerge for Config type\nfunction deepMergeConfig(target: Config, ...sources: Partial<Config>[]): Config {\n const result = deepClone(target);\n\n for (const source of sources) {\n if (!source) continue;\n\n // Merge each section\n if (source.orchestrator) {\n result.orchestrator = { ...result.orchestrator, ...source.orchestrator };\n }\n if (source.terminal) {\n result.terminal = { ...result.terminal, ...source.terminal };\n }\n if (source.memory) {\n result.memory = { ...result.memory, ...source.memory };\n }\n if (source.coordination) {\n result.coordination = { ...result.coordination, ...source.coordination };\n }\n if (source.mcp) {\n result.mcp = { ...result.mcp, ...source.mcp };\n }\n if (source.logging) {\n result.logging = { ...result.logging, ...source.logging };\n }\n if (source.credentials) {\n result.credentials = { ...result.credentials, ...source.credentials };\n }\n if (source.security) {\n result.security = { ...result.security, ...source.security };\n }\n }\n\n return result;\n}\n"],"names":["promises","fs","join","homedir","createHash","randomBytes","createCipheriv","createDecipheriv","safeParseJSON","ConfigError","ValidationError","SECURITY_CLASSIFICATIONS","credentials","level","encrypted","maskPattern","orchestrator","terminal","SENSITIVE_PATHS","FORMAT_PARSERS","json","parse","JSON","stringify","obj","extension","yaml","content","lines","split","result","current","stack","line","trimmed","trim","startsWith","indent","length","trimStart","colonIndex","indexOf","key","substring","value","parsedValue","isNaN","Number","endsWith","slice","spaces","repeat","Object","entries","Array","isArray","formattedValue","String","toml","currentSection","sectionName","equalsIndex","section","values","DEFAULT_CONFIG","maxConcurrentAgents","taskQueueSize","healthCheckInterval","shutdownTimeout","type","poolSize","recycleAfter","commandTimeout","memory","backend","cacheSizeMB","syncInterval","conflictResolution","retentionDays","coordination","maxRetries","retryDelay","deadlockDetection","resourceTimeout","messageTimeout","mcp","transport","port","tlsEnabled","logging","format","destination","security","encryptionEnabled","auditLogging","maskSensitiveValues","allowEnvironmentOverrides","ConfigManager","instance","config","configPath","profiles","Map","currentProfile","userConfigDir","changeHistory","encryptionKey","validationRules","formatParsers","deepClone","getUserConfigDir","setupValidationRules","getInstance","init","initializeEncryption","keyFile","access","error","console","warn","message","set","required","min","max","validator","dependencies","maxAgents","pattern","load","undefined","fileConfig","loadFromFile","deepMergeConfig","envConfig","loadFromEnv","validate","get","maskSensitive","getSecure","getAll","update","updates","options","oldConfig","trackChanges","validateWithDependencies","loadDefault","save","path","savePath","detectedFormat","detectFormat","parser","configToSave","getConfigForSaving","writeFile","recordChange","timestamp","Date","toISOString","oldValue","newValue","source","home","ensureUserConfigDir","mkdir","recursive","code","loadProfiles","profilesDir","readdir","withFileTypes","entry","isFile","name","profileName","replace","profilePath","readFile","profileConfig","applyProfile","profile","saveProfile","deleteProfile","unlink","delete","listProfiles","from","keys","getProfile","getCurrentProfile","getValue","user","reason","isSensitivePath","encryptValue","i","validatePath","decrypt","isEncryptedValue","decryptValue","reset","getSchema","validateValue","schema","includes","getDiff","defaultConfig","diff","findDifferences","defaults","currentValue","defaultValue","fullPath","nestedDiff","pathParts","target","export","version","exported","import","data","toUpperCase","ext","pop","toLowerCase","process","env","CLAUDE_FLOW_MAX_AGENTS","parseInt","terminalType","CLAUDE_FLOW_TERMINAL_TYPE","memoryBackend","CLAUDE_FLOW_MEMORY_BACKEND","mcpTransport","CLAUDE_FLOW_MCP_TRANSPORT","mcpPort","CLAUDE_FLOW_MCP_PORT","logLevel","CLAUDE_FLOW_LOG_LEVEL","errors","warnings","rule","getValueByPath","push","currentConfig","test","maskedConfig","maskObject","masked","currentPath","classification","change","shift","some","sensitive","iv","digest","cipher","final","toString","encryptedValue","parts","Buffer","decipher","decrypted","configManager","loadConfig","sources"],"mappings":"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"}
@@ -23,4 +23,4 @@ export function displayVersion() {
23
23
  console.log(getVersionString());
24
24
  }
25
25
 
26
- //# sourceMappingURL=version.js.map
26
+ //# sourceMappingURL=version.js.mapp
@@ -291,7 +291,7 @@ export class AuditManager extends EventEmitter {
291
291
  let totalEntries = 0;
292
292
  let verifiedEntries = 0;
293
293
  let corruptedEntries = 0;
294
- let missingEntries = 0;
294
+ const missingEntries = 0;
295
295
  const trails = trailId ? [
296
296
  this.auditTrails.get(trailId)
297
297
  ].filter(Boolean) : Array.from(this.auditTrails.values());