| /** | |
| * Combines settings validation errors with MCP configuration errors. | |
| * | |
| * This module exists to break a circular dependency: | |
| * settings.ts → mcp/config.ts → settings.ts | |
| * | |
| * By moving the MCP error aggregation here (a leaf that imports both | |
| * settings.ts and mcp/config.ts, but is imported by neither), the cycle | |
| * is eliminated. | |
| */ | |
| import { getMcpConfigsByScope } from '../../services/mcp/config.js' | |
| import { getSettingsWithErrors } from './settings.js' | |
| import type { SettingsWithErrors } from './validation.js' | |
| /** | |
| * Get merged settings with all validation errors, including MCP config errors. | |
| * | |
| * Use this instead of getSettingsWithErrors() when you need the full set of | |
| * errors (settings + MCP). The underlying getSettingsWithErrors() no longer | |
| * includes MCP errors to avoid the circular dependency. | |
| */ | |
| export function getSettingsWithAllErrors(): SettingsWithErrors { | |
| const result = getSettingsWithErrors() | |
| // 'dynamic' scope does not have errors returned; it throws and is set on cli startup | |
| const scopes = ['user', 'project', 'local'] as const | |
| const mcpErrors = scopes.flatMap(scope => getMcpConfigsByScope(scope).errors) | |
| return { | |
| settings: result.settings, | |
| errors: [...result.errors, ...mcpErrors], | |
| } | |
| } | |