nexus-agents 2.55.1 → 2.56.0
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.
- package/dist/chunk-C3FGEDD7.js +2520 -0
- package/dist/chunk-C3FGEDD7.js.map +1 -0
- package/dist/{chunk-KVWHK72T.js → chunk-EJLWDYK7.js} +1983 -3651
- package/dist/chunk-EJLWDYK7.js.map +1 -0
- package/dist/{chunk-XYCS5X3H.js → chunk-KGMC6F5D.js} +357 -13
- package/dist/chunk-KGMC6F5D.js.map +1 -0
- package/dist/chunk-NUBSJGQZ.js +14 -0
- package/dist/chunk-NUBSJGQZ.js.map +1 -0
- package/dist/{chunk-JERFBN73.js → chunk-PCMWLXT4.js} +6 -16
- package/dist/chunk-PCMWLXT4.js.map +1 -0
- package/dist/cli.d.ts +6 -1
- package/dist/cli.js +284 -211
- package/dist/cli.js.map +1 -1
- package/dist/index.js +30 -29
- package/dist/index.js.map +1 -1
- package/dist/{research-helpers-synthesize-TFZIXBX3.js → research-helpers-synthesize-E6WQLQKP.js} +3 -2
- package/dist/{setup-command-B6AFJGZB.js → setup-command-AV4MODEL.js} +5 -3
- package/package.json +1 -1
- package/dist/chunk-JERFBN73.js.map +0 -1
- package/dist/chunk-KVWHK72T.js.map +0 -1
- package/dist/chunk-OC7RMLN2.js +0 -839
- package/dist/chunk-OC7RMLN2.js.map +0 -1
- package/dist/chunk-XYCS5X3H.js.map +0 -1
- /package/dist/{research-helpers-synthesize-TFZIXBX3.js.map → research-helpers-synthesize-E6WQLQKP.js.map} +0 -0
- /package/dist/{setup-command-B6AFJGZB.js.map → setup-command-AV4MODEL.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/version.ts","../src/config/schemas-core.ts","../src/config/schemas-expert.ts","../src/config/schemas-security.ts","../src/config/schemas.ts","../src/config/schemas-observability.ts","../src/config/schemas-skills.ts","../src/config/schemas-sica.ts","../src/config/schemas-gateway.ts","../src/config/schemas-routing.ts","../src/config/env-schema.ts","../src/config/model-availability.ts","../src/config/routing-config-adapter.ts","../src/config/defaults-env.ts","../src/config/defaults.ts","../src/config/config-manager.ts","../src/config/config-loader.ts","../src/cli/setup-data-dir.ts","../src/cli/doctor.ts","../src/mcp/server.ts","../src/mcp/task-store.ts","../src/cli/doctor-formatting.ts"],"sourcesContent":["/**\n * nexus-agents - Version constant\n *\n * Injected at build time via tsup define from package.json.\n * Do NOT edit this value manually — it is replaced during build.\n */\n\ndeclare const __NEXUS_VERSION__: string;\n\nexport const VERSION: string = typeof __NEXUS_VERSION__ !== 'undefined' ? __NEXUS_VERSION__ : 'dev';\n","/**\n * nexus-agents/config - Core Configuration Schemas\n *\n * Basic infrastructure schemas: Logging, Provider, Model configuration.\n */\n\nimport { z } from 'zod';\n\n/**\n * Logging configuration schema.\n */\nexport const LoggingConfigSchema = z.object({\n level: z.enum(['debug', 'info', 'warn', 'error']).default('info'),\n format: z.enum(['json', 'pretty']).default('json'),\n // Default to stderr: MCP stdio transport reserves stdout for JSON-RPC frames.\n destination: z.enum(['stdout', 'stderr', 'file']).default('stderr'),\n filePath: z.string().optional(),\n});\n\nexport type LoggingConfig = z.infer<typeof LoggingConfigSchema>;\n\n/**\n * Provider configuration schema.\n */\nexport const ProviderConfigSchema = z.object({\n apiKey: z.string().optional(),\n baseUrl: z.url().optional(),\n timeout: z.number().positive().default(30000),\n maxRetries: z.number().nonnegative().default(3),\n});\n\nexport type ProviderConfig = z.infer<typeof ProviderConfigSchema>;\n\n/**\n * Model tier configuration.\n */\nexport const ModelTiersSchema = z.object({\n fast: z.array(z.string()).min(1),\n balanced: z.array(z.string()).min(1),\n powerful: z.array(z.string()).min(1),\n});\n\nexport type ModelTiers = z.infer<typeof ModelTiersSchema>;\n\n/**\n * Model configuration schema.\n */\nexport const ModelConfigSchema = z.object({\n default: z.string(),\n tiers: ModelTiersSchema,\n providers: z.record(z.string(), ProviderConfigSchema).optional(),\n});\n\nexport type ModelConfig = z.infer<typeof ModelConfigSchema>;\n\n/**\n * Workflow configuration schema.\n */\nexport const WorkflowConfigSchema = z.object({\n templatesDir: z.string().default('./workflows'),\n timeout: z.number().positive().default(300000),\n maxParallel: z.number().positive().default(5),\n});\n\nexport type WorkflowConfig = z.infer<typeof WorkflowConfigSchema>;\n","/**\n * nexus-agents/config - Expert Configuration Schemas\n *\n * Schemas for expert definitions, custom experts, and related constants.\n */\n\nimport { z } from 'zod';\n\n/**\n * Valid model tiers for custom experts.\n */\nexport const VALID_EXPERT_TIERS = ['fast', 'balanced', 'powerful'] as const;\nexport type ExpertTier = (typeof VALID_EXPERT_TIERS)[number];\n\n/**\n * Valid task domains for custom experts.\n */\nexport const VALID_EXPERT_DOMAINS = [\n 'code',\n 'security',\n 'architecture',\n 'documentation',\n 'testing',\n 'general',\n] as const;\nexport type ExpertDomain = (typeof VALID_EXPERT_DOMAINS)[number];\n\n/**\n * Maximum system prompt length (4000 characters).\n * This matches typical LLM system prompt limits while allowing detailed instructions.\n */\nexport const MAX_SYSTEM_PROMPT_LENGTH = 4000;\n\n/**\n * Custom expert definition schema from YAML config.\n *\n * Defines a user-configurable expert with:\n * - systemPrompt: The expert's persona and instructions (max 4000 chars)\n * - tier: Model tier for routing (fast, balanced, powerful)\n * - domain: Primary domain of expertise\n * - capabilities: What this expert can do\n * - temperature: Model temperature (0-1)\n * - tools: Optional tool restrictions\n *\n * (Source: Issue #300)\n */\nexport const CustomExpertDefinitionSchema = z.object({\n /** System prompt defining the expert's persona (max 4000 characters) */\n systemPrompt: z\n .string()\n .min(1, 'System prompt is required')\n .max(\n MAX_SYSTEM_PROMPT_LENGTH,\n `System prompt must be at most ${String(MAX_SYSTEM_PROMPT_LENGTH)} characters`\n ),\n\n /** Model tier for routing */\n tier: z\n .enum(VALID_EXPERT_TIERS, {\n error: `Invalid tier. Valid options: ${VALID_EXPERT_TIERS.join(', ')}`,\n })\n .default('balanced'),\n\n /** Primary domain of expertise */\n domain: z\n .enum(VALID_EXPERT_DOMAINS, {\n error: `Invalid domain. Valid options: ${VALID_EXPERT_DOMAINS.join(', ')}`,\n })\n .default('general'),\n\n /** Secondary domains (optional) */\n secondaryDomains: z.array(z.enum(VALID_EXPERT_DOMAINS)).optional(),\n\n /** Expert capabilities */\n capabilities: z\n .array(z.string().min(1))\n .min(1, 'At least one capability is required')\n .default(['task_execution']),\n\n /** Model temperature (0-1) */\n temperature: z.number().min(0).max(1).default(0.3),\n\n /** Allowed tools (optional, unrestricted if not specified) */\n tools: z.array(z.string()).optional(),\n\n /** Human-readable description */\n description: z.string().optional(),\n\n /** Weight for expert selection scoring (0-1) */\n weight: z.number().min(0).max(1).default(1.0),\n\n /** Whether this expert is currently available */\n available: z.boolean().default(true),\n});\n\nexport type CustomExpertDefinition = z.infer<typeof CustomExpertDefinitionSchema>;\n\n/**\n * Legacy expert definition schema (for backwards compatibility).\n * Use CustomExpertDefinitionSchema for new implementations.\n */\nexport const ExpertDefinitionSchema = z.object({\n prompt: z.string().min(1),\n tier: z.enum(['fast', 'balanced', 'powerful']).default('balanced'),\n temperature: z.number().min(0).max(1).default(0.3),\n tools: z.array(z.string()).optional(),\n});\n\nexport type ExpertDefinition = z.infer<typeof ExpertDefinitionSchema>;\n\n/**\n * Expert configuration schema.\n */\nexport const ExpertConfigSchema = z.object({\n /** Enable built-in experts */\n builtin: z.boolean().default(true),\n\n /** Custom expert definitions keyed by expert ID */\n custom: z\n .record(\n z.string().regex(/^[a-z][a-z0-9_]*$/, {\n message:\n 'Expert ID must start with a letter and contain only lowercase letters, numbers, and underscores',\n }),\n CustomExpertDefinitionSchema\n )\n .optional(),\n});\n\nexport type ExpertConfig = z.infer<typeof ExpertConfigSchema>;\n","/**\n * nexus-agents/config - Security Configuration Schemas\n *\n * Schemas for security, policy, sandbox, timeout, and rate limiting.\n */\n\nimport { z } from 'zod';\n\n/**\n * Policy configuration schema.\n *\n * Controls authorization behavior for tool operations.\n * - defaultMode: Whether operations default to read-only or read-write\n * - policyMode: Whether to enforce denials or just warn (for migration)\n *\n * (Source: OWASP ASVS 4.0, Authorization Controls)\n */\nexport const PolicyConfigSchema = z.object({\n /** Default execution mode for tool operations (default: 'read-only') */\n defaultMode: z.enum(['read-only', 'read-write']).default('read-only'),\n /** Policy enforcement mode (default: 'enforce') */\n policyMode: z.enum(['enforce', 'warn']).default('enforce'),\n});\n\nexport type PolicyConfig = z.infer<typeof PolicyConfigSchema>;\n\n/**\n * Sandbox configuration schema.\n *\n * Controls agent execution isolation.\n * - mode: 'none' (no isolation), 'policy' (allowlist enforcement), 'container' (Docker)\n * - fallbackToPolicy: Whether to fall back to policy mode if container unavailable\n *\n * (Source: Issue #175, ALIGNMENT_ROADMAP Phase 4)\n */\nexport const SandboxConfigSchema = z.object({\n /** Sandbox execution mode (default: 'policy') */\n mode: z.enum(['none', 'policy', 'container']).default('policy'),\n /** Fall back to policy mode if container mode unavailable (default: true) */\n fallbackToPolicy: z.boolean().default(true),\n /** Docker image to use in container mode (default: 'node:22-alpine') */\n dockerImage: z.string().optional(),\n /** Enable network access in container mode (default: false) */\n networkEnabled: z.boolean().default(false),\n});\n\nexport type SandboxConfig = z.infer<typeof SandboxConfigSchema>;\n\n/**\n * Timeout configuration schema.\n *\n * Controls timeout behavior for MCP operations to mitigate CVE-2026-0621.\n * - defaultTimeoutMs: Default timeout for operations\n * - maxTimeoutMs: Maximum allowed timeout\n * - enableLogging: Whether to log timeout events\n * - uriValidation: Whether to validate URIs against ReDoS patterns\n *\n * (Source: Issue #271, CVE-2026-0621 mitigation)\n */\nexport const TimeoutConfigSchema = z.object({\n /** Default timeout in milliseconds (default: 30000) */\n defaultTimeoutMs: z.number().positive().default(30000),\n /** Maximum timeout in milliseconds (default: 300000) */\n maxTimeoutMs: z.number().positive().default(300000),\n /** Whether to log timeout events (default: true) */\n enableLogging: z.boolean().default(true),\n /** Enable URI validation to prevent ReDoS (default: true) */\n uriValidation: z.boolean().default(true),\n /** Per-tool timeout overrides in milliseconds (Issue #657) */\n perToolTimeout: z.record(z.string(), z.number().positive().max(600000)).optional(),\n});\n\nexport type TimeoutConfig = z.infer<typeof TimeoutConfigSchema>;\n\n/**\n * Per-tool rate limit configuration.\n * Allows different limits for each tool category.\n *\n * (Source: Issue #274 Phase 2 - per-tool rate limits)\n */\nexport const ToolRateLimitSchema = z.object({\n /** Maximum tokens (burst capacity) */\n capacity: z.number().positive().default(10),\n /** Tokens refilled per interval */\n refillRate: z.number().positive().default(10),\n /** Refill interval in milliseconds (default: 60000 = 1 minute) */\n refillIntervalMs: z.number().positive().default(60000),\n});\n\nexport type ToolRateLimit = z.infer<typeof ToolRateLimitSchema>;\n\n/**\n * Default per-tool rate limits per Issue #274.\n */\nexport const DEFAULT_TOOL_RATE_LIMITS = {\n orchestrate: { capacity: 10, refillRate: 10, refillIntervalMs: 60000 },\n delegate: { capacity: 20, refillRate: 20, refillIntervalMs: 60000 },\n workflow: { capacity: 5, refillRate: 5, refillIntervalMs: 60000 },\n expert: { capacity: 30, refillRate: 30, refillIntervalMs: 60000 },\n} as const satisfies Record<string, ToolRateLimit>;\n\n/**\n * Tool categories for rate limiting.\n */\nexport type ToolCategory = keyof typeof DEFAULT_TOOL_RATE_LIMITS;\n\n/**\n * Security configuration schema.\n */\nexport const SecurityConfigSchema = z.object({\n allowedPaths: z.array(z.string()).default(['./']),\n blockedPatterns: z.array(z.string()).default([]),\n rateLimit: z\n .object({\n enabled: z.boolean().default(true),\n requestsPerMinute: z.number().positive().default(60),\n /** Per-tool rate limits (Issue #274 Phase 2) */\n perTool: z.record(z.string(), ToolRateLimitSchema).optional(),\n })\n .default(() => ({ enabled: true, requestsPerMinute: 60 })),\n secretsFile: z.string().optional(),\n /** Policy firewall configuration */\n policy: PolicyConfigSchema.optional(),\n /** Sandbox execution configuration (Issue #175) */\n sandbox: SandboxConfigSchema.optional(),\n /** Timeout configuration (Issue #271, CVE-2026-0621) */\n timeout: TimeoutConfigSchema.optional(),\n /** Tool allowlist — when set, only listed tools are registered (Issue #740) */\n toolAllowlist: z.array(z.string()).optional(),\n /** Audit logging configuration (Issue #740 Phase 2) */\n audit: z\n .object({\n /** Enable audit logging (default: true) */\n enabled: z.boolean().default(true),\n /** Log directory (default: ~/.nexus-agents/audit) */\n logDir: z.string().optional(),\n /** Minimum severity to log (default: 'info') */\n minSeverity: z.enum(['info', 'warning', 'critical']).default('info'),\n /** Enable tamper-evident hash chain (default: true) */\n enableHashChain: z.boolean().default(true),\n /** Maximum log file size in bytes (default: 10MB) */\n maxFileSizeBytes: z\n .number()\n .positive()\n .default(10 * 1024 * 1024),\n /** Maximum number of log files to retain (default: 10) */\n maxFiles: z.number().positive().default(10),\n })\n .optional(),\n /** Authentication configuration (Issue #739) */\n auth: z\n .object({\n /** Enable authentication for network-exposed transports (default: true) */\n enabled: z.boolean().default(true),\n /** Authentication method (default: 'token') */\n method: z.enum(['token', 'oauth2']).default('token'),\n /** Header name for bearer token (default: 'Authorization') */\n tokenHeader: z.string().default('Authorization'),\n /** Token file path (default: ~/.nexus-agents/auth/server-token) */\n tokenFile: z.string().optional(),\n })\n .optional(),\n});\n\nexport type SecurityConfig = z.infer<typeof SecurityConfigSchema>;\n\n/**\n * Authentication configuration type.\n * (Source: Issue #739 - enable MCP authentication by default)\n */\nexport type AuthConfig = NonNullable<SecurityConfig['auth']>;\n","/**\n * nexus-agents/config - Configuration Schemas\n *\n * Aggregation module that re-exports all configuration schemas.\n * Individual schema categories are organized in separate files:\n * - schemas-core.ts: Logging, Provider, Model, Workflow\n * - schemas-expert.ts: Expert definitions and constants\n * - schemas-security.ts: Security, Policy, Sandbox, Timeout, RateLimit\n * - schemas-observability.ts: EventBus, Observability\n */\n\nimport { z } from 'zod';\n\n// Re-export core schemas\nexport {\n LoggingConfigSchema,\n ProviderConfigSchema,\n ModelTiersSchema,\n ModelConfigSchema,\n WorkflowConfigSchema,\n} from './schemas-core.js';\n\nexport type {\n LoggingConfig,\n ProviderConfig,\n ModelTiers,\n ModelConfig,\n WorkflowConfig,\n} from './schemas-core.js';\n\n// Re-export expert schemas\nexport {\n VALID_EXPERT_TIERS,\n VALID_EXPERT_DOMAINS,\n MAX_SYSTEM_PROMPT_LENGTH,\n CustomExpertDefinitionSchema,\n ExpertDefinitionSchema,\n ExpertConfigSchema,\n} from './schemas-expert.js';\n\nexport type {\n ExpertTier,\n ExpertDomain,\n CustomExpertDefinition,\n ExpertDefinition,\n ExpertConfig,\n} from './schemas-expert.js';\n\n// Re-export security schemas\nexport {\n PolicyConfigSchema,\n SandboxConfigSchema,\n TimeoutConfigSchema,\n ToolRateLimitSchema,\n DEFAULT_TOOL_RATE_LIMITS,\n SecurityConfigSchema,\n} from './schemas-security.js';\n\nexport type {\n PolicyConfig,\n SandboxConfig,\n TimeoutConfig,\n ToolRateLimit,\n ToolCategory,\n SecurityConfig,\n} from './schemas-security.js';\n\n// Re-export observability schemas\nexport { EventBusConfigSchema, ObservabilityConfigSchema } from './schemas-observability.js';\n\nexport type { EventBusConfig, ObservabilityConfig } from './schemas-observability.js';\n\n// Re-export skills schemas (Issue #491)\nexport {\n SkillLibraryConfigSchema,\n ExternalPackSourceSchema,\n DEFAULT_SKILL_LIBRARY_CONFIG as DEFAULT_SKILLS_CONFIG,\n} from './schemas-skills.js';\n\nexport type { SkillLibraryConfig, ExternalPackSource } from './schemas-skills.js';\n\n// Re-export SICA schemas (Issue #492)\nexport { SicaConfigSchema, DEFAULT_SICA_CONFIG } from './schemas-sica.js';\n\nexport type { SicaConfig } from './schemas-sica.js';\n\n// Re-export gateway schemas (Issue #897)\nexport { GatewayConfigSchema } from './schemas-gateway.js';\n\nexport type { GatewayConfigType } from './schemas-gateway.js';\n\n// Re-export routing schemas (Issue #475)\nexport {\n BudgetConstraintsSchema,\n TopsisCriterionSchema,\n TopsisConfigSchema,\n DifficultyWeightsConfigSchema,\n DifficultyThresholdsSchema,\n ZeroRouterConfigSchema,\n LatencyTrackerConfigSchema,\n RoutingMemoryConfigSchema,\n RoutingConfigSchema,\n DEFAULT_ROUTING_CONFIG,\n} from './schemas-routing.js';\n\nexport type {\n BudgetConstraints,\n TopsisCriterion,\n TopsisConfig,\n DifficultyWeightsConfig,\n DifficultyThresholds,\n ZeroRouterConfig,\n LatencyTrackerConfig,\n RoutingMemoryConfig,\n RoutingConfig,\n} from './schemas-routing.js';\n\n// Import for local use in AppConfigSchema\nimport { ModelConfigSchema, WorkflowConfigSchema, LoggingConfigSchema } from './schemas-core.js';\nimport { ExpertConfigSchema } from './schemas-expert.js';\nimport { SecurityConfigSchema } from './schemas-security.js';\nimport { ObservabilityConfigSchema } from './schemas-observability.js';\nimport { RoutingConfigSchema } from './schemas-routing.js';\nimport { SkillLibraryConfigSchema } from './schemas-skills.js';\nimport { SicaConfigSchema } from './schemas-sica.js';\nimport { GatewayConfigSchema } from './schemas-gateway.js';\n\n/**\n * Complete application configuration schema.\n */\nexport const AppConfigSchema = z.object({\n models: ModelConfigSchema,\n experts: ExpertConfigSchema.optional(),\n workflows: WorkflowConfigSchema.optional(),\n security: SecurityConfigSchema.optional(),\n logging: LoggingConfigSchema.optional(),\n /** Observability configuration (Issue #307) */\n observability: ObservabilityConfigSchema.optional(),\n /** Routing configuration (Issue #475) - used in orchestrator mode */\n routing: RoutingConfigSchema.optional(),\n /** Skill library configuration (Issue #491) */\n skills: SkillLibraryConfigSchema.optional(),\n /** SICA self-improvement configuration (Issue #492) */\n sica: SicaConfigSchema.optional(),\n /** Gateway middleware configuration (Issue #897) */\n gateway: GatewayConfigSchema.optional(),\n});\n\nexport type AppConfig = z.infer<typeof AppConfigSchema>;\n\n/**\n * Default configuration values.\n */\nexport const defaultConfig: Partial<AppConfig> = {\n models: {\n default: 'claude-sonnet',\n tiers: {\n fast: ['claude-haiku', 'gemini-flash'],\n balanced: ['claude-sonnet', 'gemini-pro'],\n powerful: ['claude-opus', 'codex-5.3'],\n },\n },\n logging: {\n level: 'info',\n format: 'json',\n // stderr is the safe default: MCP stdio transport reserves stdout for\n // JSON-RPC frames. Any log written to stdout corrupts the transport.\n destination: 'stderr',\n },\n security: {\n allowedPaths: ['./'],\n blockedPatterns: [],\n rateLimit: {\n enabled: true,\n requestsPerMinute: 60,\n },\n policy: {\n defaultMode: 'read-only',\n policyMode: 'enforce',\n },\n timeout: {\n defaultTimeoutMs: 30000,\n maxTimeoutMs: 300000,\n enableLogging: true,\n uriValidation: true,\n },\n },\n};\n","/**\n * nexus-agents/config - Observability Configuration Schemas\n *\n * Schemas for EventBus and observability configuration.\n */\n\nimport { z } from 'zod';\n\n/**\n * EventBus observability configuration schema.\n *\n * Controls EventBus integration with MCP server for agent-to-agent\n * communication visibility in Claude Desktop context.\n *\n * (Source: Issue #307 - EventBus MCP integration)\n */\nexport const EventBusConfigSchema = z.object({\n /** Enable EventBus integration (default: true) */\n enabled: z.boolean().default(true),\n /** Maximum events to retain in history (default: 1000) */\n maxHistorySize: z.number().positive().default(1000),\n /** Event patterns to subscribe to (default: all major patterns) */\n subscriptions: z\n .object({\n /** Subscribe to consensus events (consensus.*) */\n consensus: z.boolean().default(true),\n /** Subscribe to agent events (agent.*) */\n agent: z.boolean().default(true),\n /** Subscribe to protocol events (protocol.*) */\n protocol: z.boolean().default(true),\n /** Subscribe to session events (session.*) */\n session: z.boolean().default(true),\n /** Subscribe to message events (message.*) */\n message: z.boolean().default(false), // Off by default (high volume)\n /** Subscribe to byzantine detection events (byzantine.*) */\n byzantine: z.boolean().default(true),\n })\n .default(() => ({\n consensus: true,\n agent: true,\n protocol: true,\n session: true,\n message: false,\n byzantine: true,\n })),\n /** Logging configuration for events */\n logging: z\n .object({\n /** Log level for frequent events (default: debug) */\n frequentEventLevel: z.enum(['debug', 'info']).default('debug'),\n /** Log level for important events (default: info) */\n importantEventLevel: z.enum(['debug', 'info']).default('info'),\n })\n .default(() => ({\n frequentEventLevel: 'debug' as const,\n importantEventLevel: 'info' as const,\n })),\n});\n\nexport type EventBusConfig = z.infer<typeof EventBusConfigSchema>;\n\n/**\n * Observability configuration schema.\n *\n * Controls swarm-level observability features including EventBus integration.\n *\n * (Source: Issue #307 - EventBus MCP integration)\n */\nexport const ObservabilityConfigSchema = z.object({\n /** EventBus configuration */\n eventBus: EventBusConfigSchema.optional(),\n /** SwarmObserver maximum events (default: 10000) */\n swarmObserverMaxEvents: z.number().positive().default(10000),\n});\n\nexport type ObservabilityConfig = z.infer<typeof ObservabilityConfigSchema>;\n","/**\n * nexus-agents/config - Skills Configuration Schemas\n *\n * Zod schemas for SkillLibrary configuration.\n * Implements the Voyager skill library pattern configuration.\n *\n * @module config/schemas-skills\n * (Source: Issue #491 - Wire SkillLibrary to orchestration)\n */\n\nimport { z } from 'zod';\n\n/**\n * Schema for an external skill pack source (Issue #654).\n */\nexport const ExternalPackSourceSchema = z.object({\n /** Pack name for identification */\n name: z.string().min(1),\n /** Source: npm package name or local file path */\n source: z.string().min(1),\n /** Whether the pack is enabled (default: true) */\n enabled: z.boolean().default(true),\n});\n\nexport type ExternalPackSource = z.infer<typeof ExternalPackSourceSchema>;\n\n/**\n * SkillLibrary configuration schema.\n *\n * Maps to SkillLibraryConfig in agents/skills/skill-types.ts\n */\nexport const SkillLibraryConfigSchema = z.object({\n /** Whether skill library is enabled (default: true) */\n enabled: z.boolean().default(true),\n\n /** Maximum skills to store (default: 1000) */\n maxSkills: z.number().int().positive().default(1000),\n\n /** Minimum success rate to keep skill (0-1, default: 0.3) */\n minSuccessRateForRetention: z.number().min(0).max(1).default(0.3),\n\n /** Number of executions before evaluating retention (default: 5) */\n executionsBeforeEvaluation: z.number().int().nonnegative().default(5),\n\n /** Enable automatic skill pruning (default: true) */\n enablePruning: z.boolean().default(true),\n\n /** Whether to track detailed execution history (default: true) */\n trackExecutionHistory: z.boolean().default(true),\n\n /** Maximum execution history entries per skill (default: 100) */\n maxHistoryPerSkill: z.number().int().positive().default(100),\n\n /** External skill pack sources (Issue #654) */\n externalPacks: z.array(ExternalPackSourceSchema).optional(),\n});\n\nexport type SkillLibraryConfig = z.infer<typeof SkillLibraryConfigSchema>;\n\n/**\n * Default SkillLibrary configuration values.\n */\nexport const DEFAULT_SKILL_LIBRARY_CONFIG: SkillLibraryConfig = {\n enabled: true,\n maxSkills: 1000,\n minSuccessRateForRetention: 0.3,\n executionsBeforeEvaluation: 5,\n enablePruning: true,\n trackExecutionHistory: true,\n maxHistoryPerSkill: 100,\n};\n","/**\n * nexus-agents/config - SICA Configuration Schemas\n *\n * Zod schemas for Self-Improving Coding Agent configuration.\n * Implements SICA pattern configuration for agent self-improvement.\n *\n * @module config/schemas-sica\n * (Source: Issue #492 - Wire SicaAgent to orchestration)\n */\n\nimport { z } from 'zod';\n\n/**\n * SICA (Self-Improving Coding Agent) configuration schema.\n *\n * Maps to SicaConfig in agents/self-improving/sica-types.ts\n */\nexport const SicaConfigSchema = z.object({\n /** Whether SICA wrapping is enabled (default: false) */\n enabled: z.boolean().default(false),\n\n /** Minimum executions before considering improvement (default: 10) */\n minExecutionsForImprovement: z.number().int().positive().default(10),\n\n /** Success rate threshold to trigger improvement (0-1, default: 0.7) */\n improvementThreshold: z.number().min(0).max(1).default(0.7),\n\n /** Maximum concurrent versions to evaluate (default: 3) */\n maxActiveVersions: z.number().int().positive().max(10).default(3),\n\n /** Whether to auto-select best version (default: true) */\n autoSelectBest: z.boolean().default(true),\n\n /** Improvement cooldown in milliseconds (default: 60000) */\n improvementCooldownMs: z.number().int().nonnegative().default(60000),\n\n /** Enable observability logging for SICA events (default: true) */\n enableObservability: z.boolean().default(true),\n});\n\nexport type SicaConfig = z.infer<typeof SicaConfigSchema>;\n\n/**\n * Default SICA configuration values.\n *\n * SICA is disabled by default as it wraps agents with self-improvement\n * capabilities which adds overhead. Enable explicitly when needed.\n */\nexport const DEFAULT_SICA_CONFIG: SicaConfig = {\n enabled: false,\n minExecutionsForImprovement: 10,\n improvementThreshold: 0.7,\n maxActiveVersions: 3,\n autoSelectBest: true,\n improvementCooldownMs: 60000,\n enableObservability: true,\n};\n","/**\n * nexus-agents/config - Gateway Configuration Schema\n *\n * Schema for the MCP gateway middleware configuration.\n * Controls tier-aware dispatch logging, per-tool tier overrides,\n * and upstream MCP server composition (#1498).\n *\n * (Source: Issue #897, Epic #888, Issue #1498)\n */\n\nimport { z } from 'zod';\n\n/**\n * Valid tier names for configuration.\n * Maps to RequestTier enum values in tier-classifier.ts.\n */\nconst TierNameSchema = z.enum(['DIRECT', 'ANALYZED', 'ORCHESTRATED']);\n\n/** Allowed commands for upstream MCP servers (security: no arbitrary exec). */\nconst ALLOWED_COMMANDS = ['node', 'npx', 'python', 'python3', 'uvx', 'docker'] as const;\n\n/**\n * Upstream MCP server configuration (#1498).\n * Defines an external MCP server to connect to via stdio transport.\n */\nexport const UpstreamServerSchema = z.object({\n /** Unique name for this upstream server (used as tool prefix). */\n name: z\n .string()\n .min(1)\n .max(50)\n .regex(/^[a-z0-9_-]+$/),\n /** Command to spawn the server. Must be in allowlist. */\n command: z.enum(ALLOWED_COMMANDS),\n /** Arguments to pass to the command. */\n args: z.array(z.string().max(500)).default([]),\n /** Environment variables (use {env:VAR} references, not plaintext secrets). */\n env: z.record(z.string(), z.string()).optional(),\n /** Whether to connect lazily on first tool call (default: true). */\n lazy: z.boolean().default(true),\n /** Connection timeout in ms (default: 10000). */\n timeoutMs: z.number().int().min(1000).max(60000).default(10000),\n});\n\nexport type UpstreamServerConfig = z.infer<typeof UpstreamServerSchema>;\n\n/** Maximum number of upstream servers (resource limit). */\nexport const MAX_UPSTREAM_SERVERS = 5;\n\n/**\n * Gateway middleware configuration schema.\n *\n * Controls whether tier-aware dispatch logging is active,\n * allows per-tool tier overrides, and defines upstream MCP servers.\n */\nexport const GatewayConfigSchema = z.object({\n /** Enable gateway tier dispatch logging (default: true). */\n enabled: z.boolean().default(true),\n /**\n * Per-tool tier overrides.\n * Keys are tool names (e.g., 'delegate_to_model'), values are tier names.\n * Overrides the default tier from TOOL_TIER_MAP in tier-classifier.ts.\n */\n tierOverrides: z.record(z.string(), TierNameSchema).optional(),\n /**\n * Upstream MCP servers to compose with (#1498).\n * Tools from upstream servers are available as prefixed tools (e.g., tavily.search).\n */\n upstreamServers: z.array(UpstreamServerSchema).max(MAX_UPSTREAM_SERVERS).optional(),\n});\n\nexport type GatewayConfigType = z.infer<typeof GatewayConfigSchema>;\n","/**\n * nexus-agents/config - Routing Configuration Schemas\n *\n * Zod schemas for routing configuration exposed via nexus-agents.yaml.\n * Allows users to configure the CompositeRouter pipeline, TOPSIS criteria,\n * ZeroRouter thresholds, and other routing parameters.\n *\n * @module config/schemas-routing\n * (Source: Issue #475 - Add routing configuration section to nexus-agents.yaml)\n */\n\nimport { z } from 'zod';\nimport { CliNameSchema } from './model-capabilities-types.js';\n\n/**\n * Budget constraints schema for cost/token/latency limits.\n */\nexport const BudgetConstraintsSchema = z\n .object({\n /** Maximum tokens per request */\n maxTokens: z.number().positive().optional(),\n /** Maximum cost per request in USD */\n maxCostUsd: z.number().positive().optional(),\n /** Maximum latency per request in milliseconds */\n maxLatencyMs: z.number().positive().optional(),\n })\n .optional();\n\nexport type BudgetConstraints = z.infer<typeof BudgetConstraintsSchema>;\n\n/**\n * TOPSIS criterion schema for multi-criteria decision making.\n */\nexport const TopsisCriterionSchema = z.object({\n /** Criterion name (e.g., 'quality', 'cost', 'latency') */\n name: z.string().min(1),\n /** Weight for this criterion (0-1, should sum to 1 across all criteria) */\n weight: z.number().min(0).max(1),\n /** Whether higher values are better (true) or lower is better (false) */\n beneficial: z.boolean(),\n});\n\nexport type TopsisCriterion = z.infer<typeof TopsisCriterionSchema>;\n\n/**\n * TOPSIS configuration schema.\n */\nexport const TopsisConfigSchema = z\n .object({\n /** Criteria with weights (must sum to 1.0) */\n criteria: z.array(TopsisCriterionSchema).optional(),\n /** Minimum acceptable quality score (0-10) */\n minQualityThreshold: z.number().min(0).max(10).default(5),\n /** Maximum acceptable latency in milliseconds (optional) */\n maxLatencyMs: z.number().positive().optional(),\n /** Maximum acceptable cost per request in USD (optional) */\n maxCostPerRequest: z.number().positive().optional(),\n /** Whether to log detailed scoring info */\n verbose: z.boolean().default(false),\n })\n .optional();\n\nexport type TopsisConfig = z.infer<typeof TopsisConfigSchema>;\n\n/**\n * Difficulty weights schema for ZeroRouter aggregation.\n */\nexport const DifficultyWeightsConfigSchema = z.object({\n /** Weight for reasoning difficulty (0-1) */\n reasoning: z.number().min(0).max(1).default(0.3),\n /** Weight for knowledge difficulty (0-1) */\n knowledge: z.number().min(0).max(1).default(0.15),\n /** Weight for creativity difficulty (0-1) */\n creativity: z.number().min(0).max(1).default(0.15),\n /** Weight for precision difficulty (0-1) */\n precision: z.number().min(0).max(1).default(0.25),\n /** Weight for context length difficulty (0-1) */\n context_length: z.number().min(0).max(1).default(0.15),\n});\n\nexport type DifficultyWeightsConfig = z.infer<typeof DifficultyWeightsConfigSchema>;\n\n/**\n * Difficulty thresholds schema for level classification.\n */\nexport const DifficultyThresholdsSchema = z.object({\n /** Upper bound for 'easy' classification (0-1) */\n easyUpperBound: z.number().min(0).max(1).default(0.3),\n /** Lower bound for 'hard' classification (0-1) */\n hardLowerBound: z.number().min(0).max(1).default(0.7),\n});\n\nexport type DifficultyThresholds = z.infer<typeof DifficultyThresholdsSchema>;\n\n// CliNameSchema imported from model-capabilities-types.ts (canonical source)\n\n/**\n * Valid difficulty levels.\n */\nconst DifficultyLevelSchema = z.enum(['easy', 'medium', 'hard']);\n\n/**\n * Valid model tiers.\n */\nconst ModelTierSchema = z.enum(['fast', 'balanced', 'powerful']);\n\n/**\n * ZeroRouter configuration schema.\n */\nexport const ZeroRouterConfigSchema = z\n .object({\n /** Difficulty thresholds for level classification */\n thresholds: DifficultyThresholdsSchema.optional(),\n /** Weights for difficulty aggregation */\n weights: DifficultyWeightsConfigSchema.optional(),\n /** Mapping from difficulty level to model tier */\n difficultyToTier: z.record(DifficultyLevelSchema, ModelTierSchema).optional(),\n /** Mapping from model tier to CLI preference order */\n tierToClis: z.record(ModelTierSchema, z.array(CliNameSchema)).optional(),\n /** Enable adaptive calibration from outcomes */\n enableCalibration: z.boolean().default(true),\n /** Maximum outcomes to store for calibration */\n maxCalibrationOutcomes: z.number().int().positive().default(1000),\n /** Minimum outcomes before applying calibration adjustments */\n minCalibrationOutcomes: z.number().int().positive().default(50),\n /** Verbose logging */\n verbose: z.boolean().default(false),\n })\n .optional();\n\nexport type ZeroRouterConfig = z.infer<typeof ZeroRouterConfigSchema>;\n\n/**\n * Latency tracker configuration schema.\n */\nexport const LatencyTrackerConfigSchema = z\n .object({\n /** Maximum number of samples to keep per CLI */\n windowSize: z.number().int().positive().default(100),\n /** Time-weighted decay factor (0-1, higher = more weight to recent) */\n decayFactor: z.number().min(0).max(1).default(0.95),\n /** Maximum age of samples in milliseconds before forced eviction */\n maxSampleAgeMs: z.number().int().positive().default(3600000),\n /** Percentiles to calculate */\n percentiles: z.array(z.number().min(0).max(100)).max(20).default([50, 95, 99]),\n })\n .optional();\n\nexport type LatencyTrackerConfig = z.infer<typeof LatencyTrackerConfigSchema>;\n\n/**\n * Routing memory configuration schema.\n */\nexport const RoutingMemoryConfigSchema = z\n .object({\n /** Minimum observations before using learned routing */\n minObservations: z.number().int().positive().default(5),\n /** Confidence threshold for using cached decisions */\n confidenceThreshold: z.number().min(0).max(1).default(0.6),\n /** Success rate threshold for trusting a routing pattern */\n successRateThreshold: z.number().min(0).max(1).default(0.7),\n /** Maximum age of cached actions in milliseconds */\n actionCacheMaxAgeMs: z.number().int().positive().default(3600000),\n })\n .optional();\n\nexport type RoutingMemoryConfig = z.infer<typeof RoutingMemoryConfigSchema>;\n\n/**\n * Complete routing configuration schema.\n * Exposes all routing subsystem parameters via nexus-agents.yaml.\n */\nexport const RoutingConfigSchema = z.object({\n /**\n * Pipeline stage toggles.\n * Enable or disable individual routing stages.\n */\n stages: z\n .object({\n /** Enable budget filtering stage */\n budgetFilter: z.boolean().default(true),\n /** Enable ZeroRouter difficulty-based routing */\n zeroRouter: z.boolean().default(true),\n /** Enable preference-trained routing */\n preferenceRouting: z.boolean().default(false),\n /** Enable TOPSIS ranking */\n topsisRanking: z.boolean().default(true),\n /** Enable LinUCB selection */\n linucbSelection: z.boolean().default(true),\n /** Enable latency tracking */\n latencyTracking: z.boolean().default(true),\n /** Enable routing memory for learned routing */\n routingMemory: z.boolean().default(false),\n /** Enable confidence cascade stage (Issue #755, ADR-0005) */\n confidenceCascade: z.boolean().default(false),\n /** Enable capability match stage (Issue #755, ADR-0005) */\n capabilityMatch: z.boolean().default(false),\n /** Enable quality constraint stage (Issue #755, ADR-0005) */\n qualityConstraint: z.boolean().default(false),\n /** Enable resource strategy stage for budget-aware oscillation (Issue #998) */\n resourceStrategy: z.boolean().default(true),\n /** Enable strategy distillation for learned routing rules (Issue #999) */\n strategyDistillation: z.boolean().default(false),\n })\n .optional(),\n\n /**\n * Budget constraints for routing decisions.\n */\n budget: BudgetConstraintsSchema,\n\n /**\n * TOPSIS multi-criteria decision making configuration.\n */\n topsis: TopsisConfigSchema,\n\n /**\n * ZeroRouter difficulty-based routing configuration.\n */\n zeroRouter: ZeroRouterConfigSchema,\n\n /**\n * Latency tracker configuration.\n */\n latencyTracker: LatencyTrackerConfigSchema,\n\n /**\n * Routing memory configuration.\n */\n routingMemory: RoutingMemoryConfigSchema,\n\n /**\n * LinUCB bandit parameters.\n */\n linucb: z\n .object({\n /** Exploration parameter (higher = more exploration) */\n alpha: z.number().positive().default(1.0),\n /** Maximum routing decision time in milliseconds */\n maxDecisionTimeMs: z.number().positive().default(50),\n })\n .optional(),\n\n /**\n * Preference router parameters.\n */\n preference: z\n .object({\n /** Minimum data points before using learned preferences */\n minDataPoints: z.number().int().positive().default(10),\n })\n .optional(),\n\n /**\n * Weight for latency score in final routing (0-1).\n */\n latencyScoreWeight: z.number().min(0).max(1).default(0.2),\n});\n\nexport type RoutingConfig = z.infer<typeof RoutingConfigSchema>;\n\n/**\n * Default routing configuration values.\n * Used when no routing config is provided in nexus-agents.yaml.\n */\nexport const DEFAULT_ROUTING_CONFIG: RoutingConfig = {\n stages: {\n budgetFilter: true,\n zeroRouter: true,\n preferenceRouting: false,\n topsisRanking: true,\n linucbSelection: true,\n latencyTracking: true,\n routingMemory: false,\n // Issue #755: New replacement stages (disabled by default for backward compatibility)\n confidenceCascade: false,\n capabilityMatch: false,\n qualityConstraint: false,\n // Issue #998: Resource strategy (enabled by default)\n resourceStrategy: true,\n // Issue #999: Strategy distillation (opt-in)\n strategyDistillation: false,\n },\n topsis: {\n minQualityThreshold: 5,\n verbose: false,\n },\n zeroRouter: {\n enableCalibration: true,\n maxCalibrationOutcomes: 1000,\n minCalibrationOutcomes: 50,\n verbose: false,\n },\n latencyTracker: {\n windowSize: 100,\n decayFactor: 0.95,\n maxSampleAgeMs: 3600000,\n percentiles: [50, 95, 99],\n },\n routingMemory: {\n minObservations: 5,\n confidenceThreshold: 0.6,\n successRateThreshold: 0.7,\n actionCacheMaxAgeMs: 3600000,\n },\n linucb: {\n alpha: 1.0,\n maxDecisionTimeMs: 50,\n },\n preference: {\n minDataPoints: 10,\n },\n latencyScoreWeight: 0.2,\n};\n","/**\n * Centralized Zod schema for NEXUS_* environment variables (Issue #1016)\n *\n * Validates all known NEXUS_* env vars at startup (warn-only, never blocks).\n * Detects typos via Levenshtein distance and suggests corrections.\n *\n * Does NOT replace per-module parsing (parseIntEnv, resolveV2Config, etc.).\n * This is an additional safety net run once at startup.\n *\n * @module config/env-schema\n */\n\nimport { z } from 'zod';\nimport type { ILogger } from '../core/index.js';\n\n// ============================================================================\n// Helper Zod types for string-encoded values\n// ============================================================================\n\n/** String that parses to a positive integer. */\nconst positiveIntStr = z.string().regex(/^\\d+$/, 'Must be a positive integer string');\n\n/** String \"true\" or \"false\". */\nconst boolStr = z.enum(['true', 'false']);\n\n/** String that parses to a non-negative float. */\nconst floatStr = z.string().regex(/^\\d+(\\.\\d+)?$/, 'Must be a non-negative number string');\n\n// ============================================================================\n// Known NEXUS_* environment variables schema\n// ============================================================================\n\n/**\n * Schema for all known NEXUS_* environment variables.\n * Each field is optional (env vars may not be set).\n * Values are validated as strings matching expected patterns.\n */\nconst NexusEnvSchema = z.object({\n // --- Timeouts ---\n NEXUS_TIMEOUT_CLI: positiveIntStr.optional(),\n NEXUS_TIMEOUT_CLISIMPLE: positiveIntStr.optional(),\n NEXUS_TIMEOUT_CLICOMPLEX: positiveIntStr.optional(),\n NEXUS_TIMEOUT_API: positiveIntStr.optional(),\n NEXUS_TIMEOUT_WORKFLOW: positiveIntStr.optional(),\n NEXUS_TIMEOUT_MCP: positiveIntStr.optional(),\n NEXUS_VOTE_TIMEOUT_MS: positiveIntStr.optional(),\n NEXUS_MCP_TIMEOUT_MS: positiveIntStr.optional(),\n NEXUS_WORKFLOW_TIMEOUT_MS: positiveIntStr.optional(),\n NEXUS_GRAPH_TIMEOUT_MS: positiveIntStr.optional(),\n NEXUS_TEST_TIMEOUT_MS: positiveIntStr.optional(),\n NEXUS_EXPERT_TIMEOUT_MS: positiveIntStr.optional(),\n NEXUS_WORKER_TIMEOUT_MS: positiveIntStr.optional(),\n\n // --- Retry ---\n NEXUS_RETRY_MAX_RETRIES: positiveIntStr.optional(),\n NEXUS_RETRY_BASE_DELAY: positiveIntStr.optional(),\n NEXUS_RETRY_MAX_DELAY: positiveIntStr.optional(),\n NEXUS_RETRY_JITTER: floatStr.optional(),\n\n // --- Rate Limit ---\n NEXUS_RATE_LIMIT_ENABLED: boolStr.optional(),\n NEXUS_RATE_LIMIT_RPM: positiveIntStr.optional(),\n NEXUS_RATE_LIMIT_MAX_CONCURRENT: positiveIntStr.optional(),\n NEXUS_RATE_LIMIT_CAPACITY: positiveIntStr.optional(),\n NEXUS_RATE_LIMIT_REFILL_RATE: positiveIntStr.optional(),\n NEXUS_RATE_LIMIT_REFILL_INTERVAL: positiveIntStr.optional(),\n\n // --- Workers & Concurrency ---\n NEXUS_MAX_CONCURRENT_EXPERTS: positiveIntStr.optional(),\n NEXUS_WORKERS_MAX: positiveIntStr.optional(),\n NEXUS_WORKERS_POOL_SIZE: positiveIntStr.optional(),\n NEXUS_WORKERS_IDLE_TIMEOUT: positiveIntStr.optional(),\n NEXUS_WORKFLOW_MAX_PARALLEL: positiveIntStr.optional(),\n NEXUS_TEST_PARALLELISM: positiveIntStr.optional(),\n NEXUS_EVALUATION_MAX_WORKERS: positiveIntStr.optional(),\n NEXUS_SWARM_OBSERVER_MAX_EVENTS: positiveIntStr.optional(),\n\n // --- Circuit Breaker ---\n NEXUS_CIRCUIT_BREAKER_THRESHOLD: positiveIntStr.optional(),\n NEXUS_CIRCUIT_BREAKER_RESET_TIMEOUT: positiveIntStr.optional(),\n\n // --- V2 Pipeline ---\n NEXUS_V2_MODE: z.enum(['off', 'partial', 'full']).optional(),\n NEXUS_V2_DELEGATE: boolStr.optional(),\n NEXUS_V2_ORCHESTRATE: boolStr.optional(),\n NEXUS_V2_POLICY_MODE: z.enum(['off', 'warn', 'block']).optional(),\n NEXUS_AORCHESTRA: boolStr.optional(),\n NEXUS_AORCHESTRA_DISPATCH: boolStr.optional(),\n NEXUS_WORKER_MAX_CALLS: positiveIntStr.optional(),\n\n // --- Server ---\n NEXUS_AUTH_ENABLED: boolStr.optional(),\n NEXUS_AUTH_METHOD: z.string().optional(),\n\n // --- Logging ---\n NEXUS_LOG_LEVEL: z\n .enum(['trace', 'debug', 'info', 'warn', 'error', 'fatal', 'silent'])\n .optional(),\n\n // --- Features ---\n NEXUS_PERSIST_LEARNING: boolStr.optional(),\n NEXUS_REFLECTIVE_MEMORY: z.enum(['true', 'false', 'shadow']).optional(),\n NEXUS_EVENTBUS_ENABLED: boolStr.optional(),\n NEXUS_EVENTBUS_MAX_HISTORY: positiveIntStr.optional(),\n NEXUS_BILLING_MODE: z.enum(['plan', 'api']).optional(),\n NEXUS_CONFIG_PATH: z.string().optional(),\n NEXUS_ALLOW_MOCK_ORCHESTRATION: boolStr.optional(),\n\n // --- Hooks & Sessions ---\n NEXUS_HOOK_VERBOSE: boolStr.optional(),\n NEXUS_SESSIONS_DB: z.string().optional(),\n NEXUS_DISABLE_SESSIONS: boolStr.optional(),\n NEXUS_DISABLE_METRICS: boolStr.optional(),\n});\n\n// ============================================================================\n// Known variable names (derived from schema)\n// ============================================================================\n\nconst KNOWN_NAMES: readonly string[] = Object.keys(NexusEnvSchema.shape);\n\n// ============================================================================\n// Levenshtein distance\n// ============================================================================\n\n/** Safe array accessor — indices are always in-bounds by construction. */\nfunction at(arr: number[], i: number): number {\n return arr[i] ?? 0;\n}\n\n/** Standard Levenshtein edit distance between two strings. */\nfunction levenshtein(a: string, b: string): number {\n const m = a.length;\n const n = b.length;\n\n let prev = Array.from({ length: n + 1 }, (_, j) => j);\n let curr = new Array<number>(n + 1).fill(0);\n\n for (let i = 1; i <= m; i++) {\n curr[0] = i;\n for (let j = 1; j <= n; j++) {\n const cost = a[i - 1] === b[j - 1] ? 0 : 1;\n curr[j] = Math.min(at(prev, j) + 1, at(curr, j - 1) + 1, at(prev, j - 1) + cost);\n }\n [prev, curr] = [curr, prev];\n }\n\n return at(prev, n);\n}\n\n/** Returns the closest known var name if edit distance <= 3, or null. */\nfunction suggestSimilar(name: string, known: readonly string[]): string | null {\n let best: string | null = null;\n let bestDist = 4; // threshold: must be strictly less than 4\n\n for (const candidate of known) {\n const dist = levenshtein(name, candidate);\n if (dist < bestDist) {\n bestDist = dist;\n best = candidate;\n }\n }\n\n return best;\n}\n\n// ============================================================================\n// Validation result types\n// ============================================================================\n\n/** An unknown NEXUS_* env var with optional typo suggestion. */\nexport interface UnknownVar {\n readonly name: string;\n readonly suggestion: string | null;\n}\n\n/** An invalid NEXUS_* env var with error message. */\nexport interface InvalidVar {\n readonly name: string;\n readonly value: string;\n readonly error: string;\n}\n\n/** Result of validating NEXUS_* environment variables. */\nexport interface EnvValidationResult {\n readonly unknownVars: readonly UnknownVar[];\n readonly invalidVars: readonly InvalidVar[];\n}\n\n// ============================================================================\n// Internal helpers\n// ============================================================================\n\n/** Classifies NEXUS_* keys into known (with values) and unknown. */\nfunction classifyEnvKeys(\n nexusKeys: readonly string[],\n env: NodeJS.ProcessEnv\n): { knownRecord: Record<string, string>; unknownVars: UnknownVar[] } {\n const knownRecord: Record<string, string> = {};\n const unknownVars: UnknownVar[] = [];\n\n for (const key of nexusKeys) {\n if (KNOWN_NAMES.includes(key)) {\n const value = env[key];\n if (value !== undefined) {\n knownRecord[key] = value;\n }\n } else {\n unknownVars.push({\n name: key,\n suggestion: suggestSimilar(key, KNOWN_NAMES),\n });\n }\n }\n\n return { knownRecord, unknownVars };\n}\n\n/** Logs validation warnings via the provided logger. */\nfunction logValidationWarnings(\n logger: ILogger,\n unknownVars: readonly UnknownVar[],\n invalidVars: readonly InvalidVar[]\n): void {\n for (const u of unknownVars) {\n const hint = u.suggestion !== null ? ` (did you mean ${u.suggestion}?)` : '';\n logger.warn(`Unknown environment variable: ${u.name}${hint}`);\n }\n for (const inv of invalidVars) {\n logger.warn(`Invalid environment variable ${inv.name}=\"${inv.value}\": ${inv.error}`);\n }\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\n/**\n * Validates all NEXUS_* environment variables.\n *\n * - Detects unknown vars (potential typos) with Levenshtein suggestions\n * - Detects invalid values for known vars\n * - Warn-only: never throws, never blocks startup\n *\n * @param logger - Optional logger for direct warning output\n * @returns Validation result with unknown and invalid var lists\n */\nexport function validateNexusEnv(logger?: ILogger): EnvValidationResult {\n const nexusKeys = Object.keys(process.env).filter((k) => k.startsWith('NEXUS_'));\n const { knownRecord, unknownVars } = classifyEnvKeys(nexusKeys, process.env);\n\n // Validate known vars against the schema\n const invalidVars: InvalidVar[] = [];\n const result = NexusEnvSchema.safeParse(knownRecord);\n if (!result.success) {\n for (const issue of result.error.issues) {\n const varName = String(issue.path[0]);\n invalidVars.push({\n name: varName,\n value: knownRecord[varName] ?? '',\n error: issue.message,\n });\n }\n }\n\n if (logger !== undefined) {\n logValidationWarnings(logger, unknownVars, invalidVars);\n }\n\n return { unknownVars, invalidVars };\n}\n\n/**\n * Returns all known NEXUS_* variable names from the schema.\n */\nexport function getKnownNexusVarNames(): readonly string[] {\n return KNOWN_NAMES;\n}\n","/**\n * nexus-agents/config - Model Availability Probes & Fallback Chains\n *\n * Runtime availability tracking for model APIs. Maintains a bounded\n * TTL cache of probe results and provides fallback chain resolution\n * when a model is unavailable.\n *\n * @module config/model-availability\n * (Source: Issue #869)\n */\n\nimport { getTimeProvider } from '../core/index.js';\nimport type { ModelId, CliNameLiteral } from './model-capabilities-types.js';\nimport { DEFAULT_MODEL_PER_CLI } from './model-capabilities.js';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Status of a model probe. */\nexport interface ProbeResult {\n readonly modelId: ModelId;\n readonly available: boolean;\n readonly latencyMs: number;\n readonly checkedAt: number;\n readonly error?: string;\n}\n\n/** Configuration for the availability cache. */\nexport interface AvailabilityCacheConfig {\n /** Time-to-live in ms for probe results. Default: 60_000 (1 min). */\n readonly ttlMs?: number;\n /** Maximum entries in the cache. Default: 50. */\n readonly maxEntries?: number;\n}\n\n/** A function that probes whether a model is reachable. */\nexport type ProbeFn = (modelId: ModelId) => Promise<ProbeResult>;\n\n/** Fallback chain entry with model and reason for fallback. */\nexport interface FallbackEntry {\n readonly modelId: ModelId;\n readonly reason: string;\n}\n\n// ---------------------------------------------------------------------------\n// Availability Cache\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_TTL_MS = 60_000;\nconst DEFAULT_MAX_ENTRIES = 50;\n\n/**\n * Bounded TTL cache for model availability probe results.\n * Thread-safe for single-threaded Node.js; no locks needed.\n */\nexport class AvailabilityCache {\n private readonly cache = new Map<ModelId, ProbeResult>();\n private readonly ttlMs: number;\n private readonly maxEntries: number;\n\n constructor(config: AvailabilityCacheConfig = {}) {\n this.ttlMs = config.ttlMs ?? DEFAULT_TTL_MS;\n this.maxEntries = config.maxEntries ?? DEFAULT_MAX_ENTRIES;\n }\n\n /** Get a cached probe result, or undefined if expired/missing. */\n get(modelId: ModelId): ProbeResult | undefined {\n const entry = this.cache.get(modelId);\n if (entry === undefined) return undefined;\n if (getTimeProvider().now() - entry.checkedAt > this.ttlMs) {\n this.cache.delete(modelId);\n return undefined;\n }\n return entry;\n }\n\n /** Store a probe result, evicting oldest if at capacity. */\n set(result: ProbeResult): void {\n if (this.cache.size >= this.maxEntries && !this.cache.has(result.modelId)) {\n const oldest = this.cache.keys().next();\n if (oldest.done !== true) {\n this.cache.delete(oldest.value);\n }\n }\n this.cache.set(result.modelId, result);\n }\n\n /** Mark a model as unavailable without a full probe. */\n markUnavailable(modelId: ModelId, error: string): void {\n this.set({\n modelId,\n available: false,\n latencyMs: 0,\n checkedAt: getTimeProvider().now(),\n error,\n });\n }\n\n /** Mark a model as available. */\n markAvailable(modelId: ModelId, latencyMs: number): void {\n this.set({\n modelId,\n available: true,\n latencyMs,\n checkedAt: getTimeProvider().now(),\n });\n }\n\n /** Check if a model is known-unavailable (cached and not expired). */\n isKnownUnavailable(modelId: ModelId): boolean {\n const entry = this.get(modelId);\n return entry !== undefined && !entry.available;\n }\n\n /** Get all cached entries (for diagnostics). */\n entries(): ReadonlyArray<ProbeResult> {\n return [...this.cache.values()];\n }\n\n /** Number of cached entries. */\n get size(): number {\n return this.cache.size;\n }\n\n /** Clear all cached entries. */\n clear(): void {\n this.cache.clear();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Fallback Chain Resolution\n// ---------------------------------------------------------------------------\n\n/** Default fallback order per CLI (strongest → weakest). */\nconst FALLBACK_CHAINS: Readonly<Record<CliNameLiteral, readonly ModelId[]>> = {\n claude: ['claude-opus', 'claude-sonnet', 'claude-haiku'],\n gemini: ['gemini-3-pro', 'gemini-pro', 'gemini-3-flash', 'gemini-flash'],\n codex: ['codex-5.3', 'codex-5.2', 'codex-5.1-mini'],\n opencode: ['opencode-custom-opus', 'opencode-custom-sonnet', 'opencode-default'],\n};\n\n/**\n * Resolves a fallback chain for a given model.\n * Returns the first available model in the chain, skipping known-unavailable ones.\n */\nexport function resolveFallback(modelId: ModelId, cache: AvailabilityCache): FallbackEntry | null {\n const cli = getCliForModelId(modelId);\n if (cli === undefined) return null;\n\n const chain = FALLBACK_CHAINS[cli];\n for (const candidate of chain) {\n if (candidate === modelId) continue;\n if (!cache.isKnownUnavailable(candidate)) {\n return {\n modelId: candidate,\n reason: `Fallback from ${modelId} (unavailable) to ${candidate}`,\n };\n }\n }\n return null;\n}\n\n/**\n * Get the fallback chain for a CLI tool.\n */\nexport function getFallbackChain(cli: CliNameLiteral): readonly ModelId[] {\n return FALLBACK_CHAINS[cli];\n}\n\n/**\n * Get the CLI name for a model ID.\n */\nexport function getCliForModelId(modelId: ModelId): CliNameLiteral | undefined {\n for (const [cli, defaultModel] of Object.entries(DEFAULT_MODEL_PER_CLI)) {\n const chain = FALLBACK_CHAINS[cli as CliNameLiteral];\n if (chain.includes(modelId)) return cli as CliNameLiteral;\n if (defaultModel === modelId) return cli as CliNameLiteral;\n }\n return undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Singleton Cache (shared across the process)\n// ---------------------------------------------------------------------------\n\nlet globalCache: AvailabilityCache | undefined;\n\n/** Get the shared availability cache (lazy-init). */\nexport function getAvailabilityCache(): AvailabilityCache {\n globalCache ??= new AvailabilityCache();\n return globalCache;\n}\n\n/** Reset the global cache (for testing). */\nexport function resetAvailabilityCache(): void {\n globalCache = undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Filter Integration\n// ---------------------------------------------------------------------------\n\n/**\n * Filters out known-unavailable models from a set of model IDs.\n * Returns the filtered set, or null if no models were removed.\n * Used by scoreAllModels() to skip unavailable models.\n */\nexport function filterAvailableModels(\n modelIds: readonly string[],\n cache: AvailabilityCache\n): { available: string[]; removed: string[] } {\n const available: string[] = [];\n const removed: string[] = [];\n for (const id of modelIds) {\n if (cache.isKnownUnavailable(id as ModelId)) {\n removed.push(id);\n } else {\n available.push(id);\n }\n }\n return { available, removed };\n}\n","/**\n * nexus-agents/config - Routing Config Adapter\n *\n * Converts RoutingConfig from YAML schema to CompositeRouterConfigWithPreference\n * that the runtime routing system expects.\n *\n * @module config/routing-config-adapter\n * (Source: Issue #475 - Add routing configuration section to nexus-agents.yaml)\n */\n\nimport type {\n CompositeRouterConfig,\n CompositeRouterConfigWithPreference,\n} from '../cli-adapters/composite-router-types.js';\nimport { DEFAULT_COMPOSITE_CONFIG } from '../cli-adapters/composite-router-types.js';\nimport type { TopsisConfig as RuntimeTopsisConfig } from '../cli-adapters/topsis-types.js';\nimport { DEFAULT_TOPSIS_CONFIG, DEFAULT_TOPSIS_CRITERIA } from '../cli-adapters/topsis-types.js';\nimport type { ZeroRouterConfig as RuntimeZeroRouterConfig } from '../cli-adapters/zero-router-types.js';\nimport { DEFAULT_ZERO_ROUTER_CONFIG } from '../cli-adapters/zero-router-types.js';\nimport type { LatencyTrackerConfig as RuntimeLatencyConfig } from '../cli-adapters/latency-tracker-types.js';\nimport type { RoutingMemoryConfig as RuntimeMemoryConfig } from '../context/routing-memory.js';\nimport type {\n RoutingConfig,\n TopsisConfig as YamlTopsisConfig,\n ZeroRouterConfig as YamlZeroRouterConfig,\n LatencyTrackerConfig as YamlLatencyTrackerConfig,\n RoutingMemoryConfig as YamlRoutingMemoryConfig,\n} from './schemas-routing.js';\nimport { isPersistenceEnabled } from './learning-persistence.js';\n\n/** Non-nullable routing config for internal use. */\ntype DefinedRoutingConfig = NonNullable<RoutingConfig>;\n\n/** Default routing config with proper typing.\n * Note: `stages` is intentionally omitted so that persistence-aware flags\n * (routingMemory, strategyDistillation, preferenceRouting) resolve dynamically\n * via `resolveStageFlags()` instead of being hardcoded to false. (#1353)\n */\nconst ADAPTER_DEFAULTS: DefinedRoutingConfig = {\n latencyScoreWeight: 0.2,\n};\n\n/**\n * Converts YAML TopsisConfig to runtime TopsisConfig.\n */\nfunction adaptTopsisConfig(yaml: YamlTopsisConfig | undefined): Partial<RuntimeTopsisConfig> {\n if (yaml === undefined) return {};\n\n const result: Partial<RuntimeTopsisConfig> = {\n criteria: yaml.criteria ?? DEFAULT_TOPSIS_CRITERIA,\n minQualityThreshold: yaml.minQualityThreshold,\n verbose: yaml.verbose,\n };\n\n if (yaml.maxLatencyMs !== undefined) {\n (result as { maxLatencyMs?: number }).maxLatencyMs = yaml.maxLatencyMs;\n }\n if (yaml.maxCostPerRequest !== undefined) {\n (result as { maxCostPerRequest?: number }).maxCostPerRequest = yaml.maxCostPerRequest;\n }\n\n return result;\n}\n\n/**\n * Converts YAML ZeroRouterConfig to runtime ZeroRouterConfig.\n */\nfunction adaptZeroRouterConfig(\n yaml: YamlZeroRouterConfig | undefined\n): Partial<RuntimeZeroRouterConfig> {\n if (yaml === undefined) return {};\n\n return {\n thresholds: yaml.thresholds ?? DEFAULT_ZERO_ROUTER_CONFIG.thresholds,\n weights: yaml.weights ?? DEFAULT_ZERO_ROUTER_CONFIG.weights,\n difficultyToTier: yaml.difficultyToTier ?? DEFAULT_ZERO_ROUTER_CONFIG.difficultyToTier,\n tierToClis: yaml.tierToClis ?? DEFAULT_ZERO_ROUTER_CONFIG.tierToClis,\n enableCalibration: yaml.enableCalibration,\n maxCalibrationOutcomes: yaml.maxCalibrationOutcomes,\n minCalibrationOutcomes: yaml.minCalibrationOutcomes,\n verbose: yaml.verbose,\n };\n}\n\n/**\n * Converts YAML LatencyTrackerConfig to runtime LatencyTrackerConfig.\n */\nfunction adaptLatencyTrackerConfig(\n yaml: YamlLatencyTrackerConfig | undefined\n): Partial<RuntimeLatencyConfig> {\n if (yaml === undefined) return {};\n\n return {\n windowSize: yaml.windowSize,\n decayFactor: yaml.decayFactor,\n maxSampleAgeMs: yaml.maxSampleAgeMs,\n percentiles: yaml.percentiles,\n };\n}\n\n/**\n * Converts YAML RoutingMemoryConfig to runtime RoutingMemoryConfig.\n */\nfunction adaptRoutingMemoryConfig(\n yaml: YamlRoutingMemoryConfig | undefined\n): Partial<RuntimeMemoryConfig> {\n if (yaml === undefined) return {};\n\n return {\n minObservations: yaml.minObservations,\n confidenceThreshold: yaml.confidenceThreshold,\n successRateThreshold: yaml.successRateThreshold,\n actionCacheMaxAgeMs: yaml.actionCacheMaxAgeMs,\n };\n}\n\n/**\n * Converts YAML stages config to CompositeRouterConfig flags.\n */\nfunction adaptStagesConfig(\n yaml: DefinedRoutingConfig['stages'] | undefined\n): Partial<CompositeRouterConfig> {\n if (yaml === undefined) return {};\n\n return {\n enableBudgetFilter: yaml.budgetFilter,\n enableZeroRouter: yaml.zeroRouter,\n enablePreferenceRouting: yaml.preferenceRouting,\n enableTopsisRanking: yaml.topsisRanking,\n enableLinUCBSelection: yaml.linucbSelection,\n enableLatencyTracking: yaml.latencyTracking,\n enableRoutingMemory: yaml.routingMemory,\n // Issue #755: New replacement stages\n enableConfidenceCascade: yaml.confidenceCascade,\n enableCapabilityMatch: yaml.capabilityMatch,\n enableQualityConstraint: yaml.qualityConstraint,\n // Issue #998: Resource strategy\n enableResourceStrategy: yaml.resourceStrategy,\n // Issue #999: Strategy distillation\n enableStrategyDistillation: yaml.strategyDistillation,\n };\n}\n\n/** Stage flag keys that need to be resolved with defaults. */\nconst STAGE_FLAG_KEYS = [\n 'enableBudgetFilter',\n 'enableZeroRouter',\n 'enablePreferenceRouting',\n 'enableTopsisRanking',\n 'enableLinUCBSelection',\n 'enableLatencyTracking',\n 'enableRoutingMemory',\n 'enableConfidenceCascade',\n 'enableCapabilityMatch',\n 'enableQualityConstraint',\n 'enableResourceStrategy',\n 'enableStrategyDistillation',\n 'enableKnnRouting',\n 'enableCapacityBalancing',\n] as const;\n\ntype StageFlagKey = (typeof STAGE_FLAG_KEYS)[number];\ntype StageFlagsResult = Pick<CompositeRouterConfig, StageFlagKey>;\n\n/**\n * Stage flags that default to `true` when learning persistence is enabled.\n * These features consume data already recorded by OutcomeStore and add\n * no new data collection surface. (#1347, #1353)\n */\nconst PERSISTENCE_AWARE_FLAGS: ReadonlySet<StageFlagKey> = new Set([\n 'enableRoutingMemory',\n 'enableStrategyDistillation',\n 'enablePreferenceRouting',\n]);\n\n/**\n * Resolves stage flags with defaults using a data-driven approach.\n * routingMemory and strategyDistillation default to true when persistence is on.\n */\nfunction resolveStageFlags(stagesConfig: Partial<CompositeRouterConfig>): StageFlagsResult {\n const persistenceOn = isPersistenceEnabled();\n const result = {} as StageFlagsResult;\n for (const key of STAGE_FLAG_KEYS) {\n const explicit = stagesConfig[key];\n if (explicit !== undefined) {\n result[key] = explicit;\n } else if (PERSISTENCE_AWARE_FLAGS.has(key) && persistenceOn) {\n result[key] = true;\n } else {\n result[key] = DEFAULT_COMPOSITE_CONFIG[key];\n }\n }\n return result;\n}\n\n/**\n * Builds the base CompositeRouterConfig from YAML config and defaults.\n */\nfunction buildBaseConfig(\n config: DefinedRoutingConfig,\n stagesConfig: Partial<CompositeRouterConfig>\n): CompositeRouterConfig {\n const stageFlags = resolveStageFlags(stagesConfig);\n\n return {\n ...stageFlags,\n billingMode: DEFAULT_COMPOSITE_CONFIG.billingMode,\n latencyScoreWeight: config.latencyScoreWeight,\n budgetConstraints: config.budget,\n linucbAlpha: config.linucb?.alpha ?? DEFAULT_COMPOSITE_CONFIG.linucbAlpha,\n maxDecisionTimeMs:\n config.linucb?.maxDecisionTimeMs ?? DEFAULT_COMPOSITE_CONFIG.maxDecisionTimeMs,\n preferenceMinDataPoints:\n config.preference?.minDataPoints ?? DEFAULT_COMPOSITE_CONFIG.preferenceMinDataPoints,\n };\n}\n\n/**\n * Converts RoutingConfig from YAML schema to CompositeRouterConfigWithPreference.\n *\n * @param yamlConfig - Routing config from nexus-agents.yaml\n * @returns Runtime config for CompositeRouter\n */\nexport function adaptRoutingConfig(\n yamlConfig?: RoutingConfig\n): CompositeRouterConfigWithPreference {\n const config: DefinedRoutingConfig = yamlConfig ?? ADAPTER_DEFAULTS;\n const stagesConfig = adaptStagesConfig(config.stages);\n const baseConfig = buildBaseConfig(config, stagesConfig);\n\n return {\n ...baseConfig,\n zeroRouterConfig: adaptZeroRouterConfig(config.zeroRouter),\n latencyTrackerConfig: adaptLatencyTrackerConfig(config.latencyTracker),\n routingMemoryConfig: adaptRoutingMemoryConfig(config.routingMemory),\n };\n}\n\n/**\n * Gets TOPSIS config from YAML routing config.\n * Useful when TOPSIS is used independently of CompositeRouter.\n *\n * @param yamlConfig - Routing config from nexus-agents.yaml\n * @returns Runtime TOPSIS config\n */\nexport function getTopsisConfigFromYaml(yamlConfig?: RoutingConfig): RuntimeTopsisConfig {\n const config: DefinedRoutingConfig = yamlConfig ?? ADAPTER_DEFAULTS;\n const adapted = adaptTopsisConfig(config.topsis);\n\n const result: RuntimeTopsisConfig = {\n criteria: adapted.criteria ?? DEFAULT_TOPSIS_CONFIG.criteria,\n minQualityThreshold: adapted.minQualityThreshold ?? DEFAULT_TOPSIS_CONFIG.minQualityThreshold,\n verbose: adapted.verbose ?? DEFAULT_TOPSIS_CONFIG.verbose,\n };\n\n if (adapted.maxLatencyMs !== undefined) {\n (result as { maxLatencyMs?: number }).maxLatencyMs = adapted.maxLatencyMs;\n }\n if (adapted.maxCostPerRequest !== undefined) {\n (result as { maxCostPerRequest?: number }).maxCostPerRequest = adapted.maxCostPerRequest;\n }\n\n return result;\n}\n","/**\n * Environment Variable Override Helpers\n *\n * Provides utilities for reading configuration from environment variables\n * with type-safe fallbacks to defaults.\n *\n * @module config/defaults-env\n */\n\nimport type {\n CircuitBreakerDefaults,\n RateLimitDefaults,\n RetryDefaults,\n ToolRateLimitConfig,\n WorkerDefaults,\n} from './defaults-types.js';\n\n// ============================================================================\n// Environment Variable Parsers\n// ============================================================================\n\n/**\n * Parses an integer from an environment variable with fallback.\n */\nexport function parseIntEnv(envKey: string, fallback: number): number {\n const envValue = process.env[envKey];\n if (envValue === undefined) {\n return fallback;\n }\n const parsed = parseInt(envValue, 10);\n return isNaN(parsed) || parsed <= 0 ? fallback : parsed;\n}\n\n/**\n * Parses a float from an environment variable with fallback.\n */\nexport function parseFloatEnv(envKey: string, fallback: number): number {\n const envValue = process.env[envKey];\n if (envValue === undefined) {\n return fallback;\n }\n const parsed = parseFloat(envValue);\n return isNaN(parsed) || !isFinite(parsed) ? fallback : parsed;\n}\n\n/**\n * Parses a boolean from an environment variable with fallback.\n * Only 'true'/'1' are truthy, 'false'/'0' are falsy.\n * Any other value returns the fallback.\n */\nexport function parseBoolEnv(envKey: string, fallback: boolean): boolean {\n const envValue = process.env[envKey]?.toLowerCase();\n if (envValue === undefined) {\n return fallback;\n }\n if (envValue === 'true' || envValue === '1') return true;\n if (envValue === 'false' || envValue === '0') return false;\n return fallback;\n}\n\n// ============================================================================\n// Config Getter Types (for lazy initialization)\n// ============================================================================\n\n/** Timeout defaults type from DEFAULTS object */\nexport interface TimeoutDefaultsConst {\n readonly cliMs: number;\n readonly cliSimpleMs: number;\n readonly cliComplexMs: number;\n readonly apiMs: number;\n readonly apiMaxMs: number;\n readonly workflowMs: number;\n readonly workflowMaxMs: number;\n readonly stepMs: number;\n readonly mcpMs: number;\n readonly mcpMaxMs: number;\n readonly healthCheckMs: number;\n readonly testGlobalMs: number;\n readonly testTaskMs: number;\n readonly circuitBreakerResetMs: number;\n}\n\n/** Tool rate limits type from DEFAULTS object */\nexport interface ToolRateLimitsConst {\n readonly orchestrate: ToolRateLimitConfig;\n readonly delegate: ToolRateLimitConfig;\n readonly workflow: ToolRateLimitConfig;\n readonly expert: ToolRateLimitConfig;\n}\n\n/** Rate limit defaults type from DEFAULTS object */\ninterface RateLimitDefaultsConst {\n readonly requestsPerMinute: number;\n readonly enabled: boolean;\n readonly maxConcurrent: number;\n readonly capacity: number;\n readonly refillRate: number;\n readonly refillIntervalMs: number;\n}\n\n/** Retry defaults type from DEFAULTS object */\ninterface RetryDefaultsConst {\n readonly maxRetries: number;\n readonly baseDelayMs: number;\n readonly maxDelayMs: number;\n readonly jitterFactor: number;\n}\n\n/** Worker defaults type from DEFAULTS object */\ninterface WorkerDefaultsConst {\n readonly maxWorkers: number;\n readonly poolSize: number;\n readonly idleTimeoutMs: number;\n readonly workflowMaxParallel: number;\n readonly testParallelism: number;\n readonly evaluationMaxWorkers: number;\n readonly eventBusMaxHistory: number;\n readonly swarmObserverMaxEvents: number;\n}\n\n/** Circuit breaker defaults type from DEFAULTS object */\ninterface CircuitBreakerDefaultsConst {\n readonly failureThreshold: number;\n readonly resetTimeoutMs: number;\n readonly halfOpenSuccessThreshold: number;\n readonly countTimeoutsAsFailures: boolean;\n readonly countAuthFailuresAsFailures: boolean;\n readonly countRateLimitsAsFailures: boolean;\n readonly halfOpenMaxRequests: number;\n}\n\n// ============================================================================\n// Config Getter Factory Functions\n// ============================================================================\n\n/**\n * Creates a timeout getter function bound to the DEFAULTS object.\n */\nexport function createGetTimeout(\n timeoutDefaults: TimeoutDefaultsConst\n): (key: keyof TimeoutDefaultsConst) => number {\n return (key: keyof TimeoutDefaultsConst): number => {\n const envKey = `NEXUS_TIMEOUT_${key.replace(/Ms$/, '').toUpperCase()}`;\n return parseIntEnv(envKey, timeoutDefaults[key]);\n };\n}\n\n/**\n * Creates a retry config getter function bound to the DEFAULTS object.\n */\nexport function createGetRetryConfig(retryDefaults: RetryDefaultsConst): () => RetryDefaults {\n return (): RetryDefaults => {\n return {\n maxRetries: parseIntEnv('NEXUS_RETRY_MAX_RETRIES', retryDefaults.maxRetries),\n baseDelayMs: parseIntEnv('NEXUS_RETRY_BASE_DELAY', retryDefaults.baseDelayMs),\n maxDelayMs: parseIntEnv('NEXUS_RETRY_MAX_DELAY', retryDefaults.maxDelayMs),\n jitterFactor: parseFloatEnv('NEXUS_RETRY_JITTER', retryDefaults.jitterFactor),\n };\n };\n}\n\n/**\n * Creates a rate limit config getter function bound to the DEFAULTS object.\n */\nexport function createGetRateLimitConfig(\n rateLimitDefaults: RateLimitDefaultsConst\n): () => RateLimitDefaults {\n return (): RateLimitDefaults => {\n return {\n requestsPerMinute: parseIntEnv('NEXUS_RATE_LIMIT_RPM', rateLimitDefaults.requestsPerMinute),\n enabled: parseBoolEnv('NEXUS_RATE_LIMIT_ENABLED', rateLimitDefaults.enabled),\n maxConcurrent: parseIntEnv(\n 'NEXUS_RATE_LIMIT_MAX_CONCURRENT',\n rateLimitDefaults.maxConcurrent\n ),\n capacity: parseIntEnv('NEXUS_RATE_LIMIT_CAPACITY', rateLimitDefaults.capacity),\n refillRate: parseIntEnv('NEXUS_RATE_LIMIT_REFILL_RATE', rateLimitDefaults.refillRate),\n refillIntervalMs: parseIntEnv(\n 'NEXUS_RATE_LIMIT_REFILL_INTERVAL',\n rateLimitDefaults.refillIntervalMs\n ),\n };\n };\n}\n\n/**\n * Creates a worker config getter function bound to the DEFAULTS object.\n */\nexport function createGetWorkerConfig(workerDefaults: WorkerDefaultsConst): () => WorkerDefaults {\n return (): WorkerDefaults => {\n return {\n maxWorkers: parseIntEnv('NEXUS_WORKERS_MAX', workerDefaults.maxWorkers),\n poolSize: parseIntEnv('NEXUS_WORKERS_POOL_SIZE', workerDefaults.poolSize),\n idleTimeoutMs: parseIntEnv('NEXUS_WORKERS_IDLE_TIMEOUT', workerDefaults.idleTimeoutMs),\n workflowMaxParallel: parseIntEnv(\n 'NEXUS_WORKFLOW_MAX_PARALLEL',\n workerDefaults.workflowMaxParallel\n ),\n testParallelism: parseIntEnv('NEXUS_TEST_PARALLELISM', workerDefaults.testParallelism),\n evaluationMaxWorkers: parseIntEnv(\n 'NEXUS_EVALUATION_MAX_WORKERS',\n workerDefaults.evaluationMaxWorkers\n ),\n eventBusMaxHistory: parseIntEnv(\n 'NEXUS_EVENTBUS_MAX_HISTORY',\n workerDefaults.eventBusMaxHistory\n ),\n swarmObserverMaxEvents: parseIntEnv(\n 'NEXUS_SWARM_OBSERVER_MAX_EVENTS',\n workerDefaults.swarmObserverMaxEvents\n ),\n };\n };\n}\n\n/**\n * Creates a circuit breaker config getter function bound to the DEFAULTS object.\n */\nexport function createGetCircuitBreakerConfig(\n cbDefaults: CircuitBreakerDefaultsConst\n): () => CircuitBreakerDefaults {\n return (): CircuitBreakerDefaults => {\n return {\n failureThreshold: parseIntEnv('NEXUS_CIRCUIT_BREAKER_THRESHOLD', cbDefaults.failureThreshold),\n resetTimeoutMs: parseIntEnv('NEXUS_CIRCUIT_BREAKER_RESET_TIMEOUT', cbDefaults.resetTimeoutMs),\n halfOpenSuccessThreshold: cbDefaults.halfOpenSuccessThreshold,\n countTimeoutsAsFailures: cbDefaults.countTimeoutsAsFailures,\n countAuthFailuresAsFailures: cbDefaults.countAuthFailuresAsFailures,\n countRateLimitsAsFailures: cbDefaults.countRateLimitsAsFailures,\n halfOpenMaxRequests: cbDefaults.halfOpenMaxRequests,\n };\n };\n}\n\n/**\n * Creates a tool rate limit getter function bound to the DEFAULTS object.\n */\nexport function createGetToolRateLimit(\n toolRateLimits: ToolRateLimitsConst\n): (tool: keyof ToolRateLimitsConst) => ToolRateLimitConfig {\n return (tool: keyof ToolRateLimitsConst): ToolRateLimitConfig => {\n return toolRateLimits[tool];\n };\n}\n\n// ============================================================================\n// Documentation Helper\n// ============================================================================\n\n/** DEFAULTS structure for documentation generation */\ninterface DefaultsForDocs {\n readonly TIMEOUT_DEFAULTS: TimeoutDefaultsConst;\n readonly RATE_LIMIT_DEFAULTS: RateLimitDefaultsConst;\n readonly RETRY_DEFAULTS: RetryDefaultsConst;\n readonly WORKER_DEFAULTS: WorkerDefaultsConst;\n readonly CIRCUIT_BREAKER_DEFAULTS: CircuitBreakerDefaultsConst;\n}\n\n/**\n * Creates a documentation generator function bound to the DEFAULTS object.\n *\n * @param defaults - The DEFAULTS object\n * @returns Function that generates environment variable documentation\n */\nexport function createGetEnvVarDocumentation(defaults: DefaultsForDocs): () => string {\n return (): string => {\n const t = defaults.TIMEOUT_DEFAULTS;\n const r = defaults.RATE_LIMIT_DEFAULTS;\n const rt = defaults.RETRY_DEFAULTS;\n const w = defaults.WORKER_DEFAULTS;\n const cb = defaults.CIRCUIT_BREAKER_DEFAULTS;\n\n return `# Environment Variable Overrides\n\nAll defaults can be overridden via environment variables using the NEXUS_ prefix.\n\n## Timeouts\n\n| Variable | Default | Description |\n| -------- | ------- | ----------- |\n| NEXUS_TIMEOUT_CLI | ${String(t.cliMs)} | CLI execution timeout (ms) |\n| NEXUS_TIMEOUT_API | ${String(t.apiMs)} | API request timeout (ms) |\n| NEXUS_TIMEOUT_WORKFLOW | ${String(t.workflowMs)} | Workflow timeout (ms) |\n| NEXUS_TIMEOUT_MCP | ${String(t.mcpMs)} | MCP operation timeout (ms) |\n\n## Rate Limits\n\n| Variable | Default | Description |\n| -------- | ------- | ----------- |\n| NEXUS_RATE_LIMIT_RPM | ${String(r.requestsPerMinute)} | Requests per minute |\n| NEXUS_RATE_LIMIT_ENABLED | ${String(r.enabled)} | Enable rate limiting |\n| NEXUS_RATE_LIMIT_CAPACITY | ${String(r.capacity)} | Token bucket capacity |\n\n## Retries\n\n| Variable | Default | Description |\n| -------- | ------- | ----------- |\n| NEXUS_RETRY_MAX_RETRIES | ${String(rt.maxRetries)} | Maximum retry attempts |\n| NEXUS_RETRY_BASE_DELAY | ${String(rt.baseDelayMs)} | Base delay (ms) |\n| NEXUS_RETRY_MAX_DELAY | ${String(rt.maxDelayMs)} | Maximum delay (ms) |\n| NEXUS_RETRY_JITTER | ${String(rt.jitterFactor)} | Jitter factor (0-1) |\n\n## Workers\n\n| Variable | Default | Description |\n| -------- | ------- | ----------- |\n| NEXUS_WORKERS_MAX | ${String(w.maxWorkers)} | Maximum workers |\n| NEXUS_WORKERS_POOL_SIZE | ${String(w.poolSize)} | Worker pool size |\n| NEXUS_WORKFLOW_MAX_PARALLEL | ${String(w.workflowMaxParallel)} | Max parallel workflow steps |\n| NEXUS_TEST_PARALLELISM | ${String(w.testParallelism)} | Test parallelism |\n\n## Circuit Breaker\n\n| Variable | Default | Description |\n| -------- | ------- | ----------- |\n| NEXUS_CIRCUIT_BREAKER_THRESHOLD | ${String(cb.failureThreshold)} | Failure threshold |\n| NEXUS_CIRCUIT_BREAKER_RESET_TIMEOUT | ${String(cb.resetTimeoutMs)} | Reset timeout (ms) |\n`;\n };\n}\n","/**\n * Central Configuration Defaults\n *\n * Consolidates common default values used across the codebase.\n * This prevents scattered magic numbers and ensures consistency.\n *\n * Usage:\n * import { DEFAULTS, getTimeout, TIMEOUT_PROFILES } from '../config/defaults.js';\n * const timeout = options.timeout ?? DEFAULTS.TIMEOUT_DEFAULTS.cliMs;\n * const cliTimeout = getTimeoutForCli('claude', 'complex');\n *\n * Environment overrides can be added via NEXUS_* environment variables.\n *\n * @module config/defaults\n * (Source: Central config consolidation initiative)\n */\n\n// Re-export types from defaults-types\nexport type {\n TaskComplexity,\n TimeoutProfile,\n KnownCliName,\n TimeoutDefaults,\n RateLimitDefaults,\n ToolRateLimitConfig,\n RetryDefaults,\n WorkerDefaults,\n CircuitBreakerDefaults,\n} from './defaults-types.js';\n\nexport { isTaskComplexity, isKnownCliName } from './defaults-types.js';\n\n// Re-export timeout profiles (delegates to config/timeouts.ts)\nexport {\n TIMEOUT_PROFILES,\n getTimeoutProfile,\n getTimeoutForCli,\n} from './defaults-timeout-profiles.js';\n\n// Re-export canonical timeout modules (Issue #984)\nexport {\n CLI_TIMEOUTS,\n VOTE_TIMEOUTS,\n MCP_TIMEOUTS,\n WORKFLOW_TIMEOUTS,\n GRAPH_TIMEOUTS,\n PER_CLI_TASK_TIMEOUTS,\n API_TIMEOUTS,\n INTERNAL_TIMEOUTS,\n TEST_TIMEOUTS,\n TIMEOUT_ENV_VARS,\n getCliTimeoutProfile,\n getCliTimeout,\n resolveVoteTimeout,\n resolveEnvTimeout,\n validateTimeout,\n BACKOFF_CONFIG,\n AGENT_ROUTER_TIMEOUTS,\n CODEX_MCP_TIMEOUTS,\n} from './timeouts.js';\n\n// Re-export env helpers (internal use)\nexport { parseIntEnv, parseFloatEnv, parseBoolEnv } from './defaults-env.js';\n\nimport {\n createGetTimeout,\n createGetRetryConfig,\n createGetRateLimitConfig,\n createGetWorkerConfig,\n createGetCircuitBreakerConfig,\n createGetToolRateLimit,\n createGetEnvVarDocumentation,\n} from './defaults-env.js';\nimport {\n API_TIMEOUTS as _API,\n WORKFLOW_TIMEOUTS as _WF,\n MCP_TIMEOUTS as _MCP,\n INTERNAL_TIMEOUTS as _INT,\n TEST_TIMEOUTS as _TEST,\n CLI_TIMEOUTS as _CLI,\n} from './timeouts.js';\n\n// ============================================================================\n// Central Defaults Object\n// ============================================================================\n\n/**\n * Central defaults object containing all configuration categories.\n */\nexport const DEFAULTS = {\n /**\n * Default timeout settings in milliseconds.\n * Values sourced from config/timeouts.ts (Issue #984).\n */\n TIMEOUT_DEFAULTS: {\n /** CLI tool execution timeout in milliseconds. */\n cliMs: _CLI.default.standard,\n /** Simple CLI task timeout (single function, quick query). */\n cliSimpleMs: _CLI.default.simple,\n /** Complex CLI task timeout (codebase-wide, deep analysis). */\n cliComplexMs: _CLI.default.complex,\n /** API request timeout in milliseconds. */\n apiMs: _API.defaultMs,\n /** Maximum API timeout in milliseconds. */\n apiMaxMs: _API.maxMs,\n /** Workflow-level timeout in milliseconds (5 minutes). */\n workflowMs: _WF.workflowMs,\n /** Maximum workflow timeout in milliseconds (30 minutes). */\n workflowMaxMs: _WF.workflowMaxMs,\n /** Step-level timeout in milliseconds. */\n stepMs: _INT.selfEvalMs,\n /** MCP operation default timeout in milliseconds (generic, not per-tool). */\n mcpMs: _API.defaultMs,\n /** MCP operation maximum timeout in milliseconds. */\n mcpMaxMs: _MCP.maxMs,\n /** Health check timeout in milliseconds. */\n healthCheckMs: _INT.healthCheckMs,\n /** Global test run timeout in milliseconds (10 minutes). */\n testGlobalMs: _TEST.globalMs,\n /** Per-task test timeout in milliseconds. */\n testTaskMs: _TEST.taskMs,\n /** Circuit breaker reset timeout in milliseconds. */\n circuitBreakerResetMs: _INT.circuitBreakerResetMs,\n },\n\n /**\n * Default rate limit settings for outbound operations.\n */\n RATE_LIMIT_DEFAULTS: {\n /** Global requests per minute. */\n requestsPerMinute: 60,\n /** Whether rate limiting is enabled by default. */\n enabled: true,\n /** Maximum number of concurrent requests. */\n maxConcurrent: 4,\n /** Token bucket capacity. */\n capacity: 100,\n /** Token bucket refill rate per second. */\n refillRate: 10,\n /** Refill interval in milliseconds. */\n refillIntervalMs: 100,\n },\n\n /**\n * Per-tool rate limit defaults for MCP tools.\n * (Source: Issue #274 Phase 2 - per-tool rate limits)\n */\n TOOL_RATE_LIMITS: {\n orchestrate: { capacity: 10, refillRate: 10, refillIntervalMs: 60_000 },\n delegate: { capacity: 20, refillRate: 20, refillIntervalMs: 60_000 },\n workflow: { capacity: 5, refillRate: 5, refillIntervalMs: 60_000 },\n expert: { capacity: 30, refillRate: 30, refillIntervalMs: 60_000 },\n },\n\n /**\n * Default retry strategy settings for transient failures.\n */\n RETRY_DEFAULTS: {\n /** Maximum retry attempts before failing. */\n maxRetries: 3,\n /** Base delay between retries in milliseconds. */\n baseDelayMs: 1_000,\n /** Maximum delay between retries in milliseconds. */\n maxDelayMs: 30_000,\n /** Jitter factor (0-1) to randomize retry delays. */\n jitterFactor: 0.1,\n },\n\n /**\n * Workflow-specific retry defaults.\n */\n WORKFLOW_RETRY_DEFAULTS: {\n /** Maximum retry attempts for workflow steps. */\n maxRetries: 2,\n /** Base delay for workflow retries in milliseconds. */\n baseDelayMs: 2_000,\n /** Maximum delay for workflow retries in milliseconds. */\n maxDelayMs: 60_000,\n /** Jitter factor for workflow retries. */\n jitterFactor: 0.15,\n },\n\n /**\n * CLI-specific retry defaults.\n */\n CLI_RETRY_DEFAULTS: {\n /** Maximum retry attempts for CLI operations. */\n maxRetries: 2,\n /** Base delay for CLI retries in milliseconds. */\n baseDelayMs: 5_000,\n /** Maximum delay for CLI retries in milliseconds. */\n maxDelayMs: 60_000,\n /** Jitter factor for CLI retries. */\n jitterFactor: 0.2,\n },\n\n /**\n * Test framework retry defaults.\n */\n TEST_RETRY_DEFAULTS: {\n /** Maximum retries per test task. */\n maxRetries: 2,\n /** Whether to retry failed tasks by default. */\n retryFailedTasks: true,\n },\n\n /**\n * Default buffer sizing for batching and chunked processing.\n */\n BUFFER_DEFAULTS: {\n /** Preferred batch size for bulk operations. */\n batchSize: 100,\n /** Chunk size for streaming or segmented processing. */\n chunkSize: 256,\n /** Maximum items allowed in a buffer. */\n maxItems: 1_000,\n /** Maximum memory size in bytes (10 MB). */\n maxMemoryBytes: 10 * 1024 * 1024,\n /** Log buffer flush interval in milliseconds. */\n logFlushIntervalMs: 5_000,\n },\n\n /**\n * Default worker pool sizing.\n */\n WORKER_DEFAULTS: {\n /** Maximum number of workers. */\n maxWorkers: 8,\n /** Default worker pool size. */\n poolSize: 4,\n /** Worker idle timeout in milliseconds (5 minutes). */\n idleTimeoutMs: 5 * 60_000,\n /** Maximum parallel workflow steps. */\n workflowMaxParallel: 5,\n /** Test framework parallelism. */\n testParallelism: 3,\n /** Evaluation harness max workers. */\n evaluationMaxWorkers: 8,\n /** EventBus max history size. */\n eventBusMaxHistory: 1_000,\n /** Swarm observer max events. */\n swarmObserverMaxEvents: 10_000,\n },\n\n /**\n * Default circuit breaker settings.\n * (Source: Issue #81 - Circuit breaker for CLI failures)\n */\n CIRCUIT_BREAKER_DEFAULTS: {\n /** Failure threshold to open circuit. */\n failureThreshold: 5,\n /** Reset timeout in milliseconds. */\n resetTimeoutMs: 30_000,\n /** Success threshold to close circuit in half-open state. */\n halfOpenSuccessThreshold: 2,\n /** Whether to count timeouts as failures. */\n countTimeoutsAsFailures: true,\n /** Whether to count auth failures as failures. */\n countAuthFailuresAsFailures: false,\n /** Whether to count rate limit errors as failures (#1529). */\n countRateLimitsAsFailures: true,\n /** Maximum requests allowed in half-open state. */\n halfOpenMaxRequests: 3,\n },\n\n /**\n * Default context/memory settings.\n */\n CONTEXT_DEFAULTS: {\n /** Maximum context tokens. */\n maxTokens: 100_000,\n /** Token budget warning threshold (80%). */\n warningThreshold: 0.8,\n /** Token budget critical threshold (95%). */\n criticalThreshold: 0.95,\n /** Maximum history entries to retain. */\n maxHistoryEntries: 1_000,\n },\n\n /**\n * Default provider/model settings.\n */\n PROVIDER_DEFAULTS: {\n /** Default timeout for provider API calls in ms. */\n timeout: 30_000,\n /** Maximum retries for provider requests. */\n maxRetries: 3,\n /** Default model tier. */\n defaultTier: 'balanced' as const,\n /** Default temperature. */\n temperatureDefault: 0.3,\n /** Minimum temperature. */\n temperatureMin: 0,\n /** Maximum temperature. */\n temperatureMax: 1,\n /** Billing mode: 'plan' (monthly subscription) or 'api' (pay-per-token). Env: NEXUS_BILLING_MODE */\n billingMode: 'plan' as const,\n },\n\n /**\n * Security-related defaults.\n */\n SECURITY_DEFAULTS: {\n /** Maximum system prompt length in characters. */\n maxSystemPromptLength: 4_000,\n /** Default policy execution mode. */\n policyDefaultMode: 'read-only' as const,\n /** Default policy mode. */\n policyMode: 'enforce' as const,\n /** Default sandbox mode. */\n sandboxMode: 'policy' as const,\n /** Whether to fall back to policy mode if container unavailable. */\n sandboxFallbackToPolicy: true,\n /** Whether network is enabled in container mode. */\n sandboxNetworkEnabled: false,\n },\n} as const;\n\n// ============================================================================\n// Type Exports for DEFAULTS\n// ============================================================================\n\n/** Type for the DEFAULTS object (readonly/const). */\nexport type DefaultsConfig = typeof DEFAULTS;\n\n/** Type for timeout defaults (readonly/const). */\nexport type TimeoutDefaultsConst = typeof DEFAULTS.TIMEOUT_DEFAULTS;\n\n/** Type for rate limit defaults (readonly/const). */\nexport type RateLimitDefaultsConst = typeof DEFAULTS.RATE_LIMIT_DEFAULTS;\n\n/** Type for retry defaults (readonly/const). */\nexport type RetryDefaultsConst = typeof DEFAULTS.RETRY_DEFAULTS;\n\n/** Type for buffer defaults (readonly/const). */\nexport type BufferDefaults = typeof DEFAULTS.BUFFER_DEFAULTS;\n\n/** Type for worker defaults (readonly/const). */\nexport type WorkerDefaultsConst = typeof DEFAULTS.WORKER_DEFAULTS;\n\n/** Type for circuit breaker defaults (readonly/const). */\nexport type CircuitBreakerDefaultsConst = typeof DEFAULTS.CIRCUIT_BREAKER_DEFAULTS;\n\n/** Type for context defaults (readonly/const). */\nexport type ContextDefaults = typeof DEFAULTS.CONTEXT_DEFAULTS;\n\n/** Type for provider defaults (readonly/const). */\nexport type ProviderDefaults = typeof DEFAULTS.PROVIDER_DEFAULTS;\n\n/** Type for security defaults (readonly/const). */\nexport type SecurityDefaults = typeof DEFAULTS.SECURITY_DEFAULTS;\n\n// ============================================================================\n// Environment Override Functions (bound to DEFAULTS)\n// ============================================================================\n\n/**\n * Get timeout with environment override support.\n *\n * @param key - Timeout key (e.g., 'cliMs', 'apiMs')\n * @returns Timeout value in milliseconds\n */\nexport const getTimeout = createGetTimeout(DEFAULTS.TIMEOUT_DEFAULTS);\n\n/**\n * Get retry config with environment override support.\n *\n * @returns Retry configuration\n */\nexport const getRetryConfig = createGetRetryConfig(DEFAULTS.RETRY_DEFAULTS);\n\n/**\n * Get rate limit config with environment override support.\n *\n * @returns Rate limit configuration\n */\nexport const getRateLimitConfig = createGetRateLimitConfig(DEFAULTS.RATE_LIMIT_DEFAULTS);\n\n/**\n * Get worker config with environment override support.\n *\n * @returns Worker configuration\n */\nexport const getWorkerConfig = createGetWorkerConfig(DEFAULTS.WORKER_DEFAULTS);\n\n/**\n * Gets the circuit breaker configuration.\n *\n * @returns Circuit breaker configuration\n */\nexport const getCircuitBreakerConfig = createGetCircuitBreakerConfig(\n DEFAULTS.CIRCUIT_BREAKER_DEFAULTS\n);\n\n/**\n * Gets the tool rate limit configuration for a specific tool category.\n *\n * @param tool - Tool category (orchestrate, delegate, workflow, expert)\n * @returns Rate limit configuration\n */\nexport const getToolRateLimit = createGetToolRateLimit(DEFAULTS.TOOL_RATE_LIMITS);\n\n// ============================================================================\n// Documentation Helper\n// ============================================================================\n\n/**\n * Returns documentation for all environment variable overrides.\n *\n * @returns Markdown documentation string\n */\nexport const getEnvVarDocumentation = createGetEnvVarDocumentation(DEFAULTS);\n","/**\n * ConfigManager - Runtime Configuration Management (Issue #360 Phase 1)\n *\n * Precedence (highest to lowest):\n * 1. CLI overrides 2. Session overrides 3. Environment variables 4. Package defaults\n *\n * @module config/config-manager\n */\n\nimport { z } from 'zod';\nimport { getTimeProvider } from '../core/index.js';\nimport { DEFAULTS } from './defaults.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Configuration source indicating where a value originated. */\nexport type ConfigSource = 'package' | 'env' | 'user_file' | 'session' | 'cli';\n\n/** Metadata about a configuration value. */\nexport interface ConfigValueMeta<T> {\n readonly value: T;\n readonly source: ConfigSource;\n readonly key: string;\n readonly isOverride: boolean;\n readonly defaultValue: T;\n}\n\n/** An active override entry. */\nexport interface ConfigOverride<T = unknown> {\n readonly value: T;\n readonly source: ConfigSource;\n readonly setAt: Date;\n}\n\n/** Configuration categories matching DEFAULTS structure. */\nexport type ConfigCategory = keyof typeof DEFAULTS;\n\n/** Keys for a specific category. */\nexport type ConfigKey<C extends ConfigCategory> = keyof (typeof DEFAULTS)[C];\n\n/** Widens literal types: 60000 -> number, true -> boolean, 'foo' -> string */\ntype Widen<T> = T extends number\n ? number\n : T extends boolean\n ? boolean\n : T extends string\n ? string\n : T;\n\n/** Value type for category/key (widened for assignment). */\nexport type ConfigValue<C extends ConfigCategory, K extends ConfigKey<C>> = Widen<\n (typeof DEFAULTS)[C][K]\n>;\n\n// ============================================================================\n// Validation\n// ============================================================================\n\nconst NumericValueSchema = z.number();\nconst BooleanValueSchema = z.boolean();\nconst StringValueSchema = z.string();\n\nfunction validateValue<T>(value: unknown, expectedType: T): value is T {\n if (typeof expectedType === 'number') return NumericValueSchema.safeParse(value).success;\n if (typeof expectedType === 'boolean') return BooleanValueSchema.safeParse(value).success;\n if (typeof expectedType === 'string') return StringValueSchema.safeParse(value).success;\n return false;\n}\n\n// ============================================================================\n// Environment Variable Mapping\n// ============================================================================\n\n/** Maps category.key to NEXUS_* environment variable names. */\nconst ENV_VAR_MAP: Partial<Record<string, string>> = {\n 'TIMEOUT_DEFAULTS.cliMs': 'NEXUS_TIMEOUT_CLI',\n 'TIMEOUT_DEFAULTS.apiMs': 'NEXUS_TIMEOUT_API',\n 'TIMEOUT_DEFAULTS.workflowMs': 'NEXUS_TIMEOUT_WORKFLOW',\n 'TIMEOUT_DEFAULTS.mcpMs': 'NEXUS_TIMEOUT_MCP',\n 'RATE_LIMIT_DEFAULTS.requestsPerMinute': 'NEXUS_RATE_LIMIT_RPM',\n 'RATE_LIMIT_DEFAULTS.enabled': 'NEXUS_RATE_LIMIT_ENABLED',\n 'RATE_LIMIT_DEFAULTS.maxConcurrent': 'NEXUS_RATE_LIMIT_MAX_CONCURRENT',\n 'RATE_LIMIT_DEFAULTS.capacity': 'NEXUS_RATE_LIMIT_CAPACITY',\n 'RATE_LIMIT_DEFAULTS.refillRate': 'NEXUS_RATE_LIMIT_REFILL_RATE',\n 'RATE_LIMIT_DEFAULTS.refillIntervalMs': 'NEXUS_RATE_LIMIT_REFILL_INTERVAL',\n 'RETRY_DEFAULTS.maxRetries': 'NEXUS_RETRY_MAX_RETRIES',\n 'RETRY_DEFAULTS.baseDelayMs': 'NEXUS_RETRY_BASE_DELAY',\n 'RETRY_DEFAULTS.maxDelayMs': 'NEXUS_RETRY_MAX_DELAY',\n 'RETRY_DEFAULTS.jitterFactor': 'NEXUS_RETRY_JITTER',\n 'WORKER_DEFAULTS.maxWorkers': 'NEXUS_WORKERS_MAX',\n 'WORKER_DEFAULTS.poolSize': 'NEXUS_WORKERS_POOL_SIZE',\n 'WORKER_DEFAULTS.idleTimeoutMs': 'NEXUS_WORKERS_IDLE_TIMEOUT',\n 'WORKER_DEFAULTS.workflowMaxParallel': 'NEXUS_WORKFLOW_MAX_PARALLEL',\n 'WORKER_DEFAULTS.testParallelism': 'NEXUS_TEST_PARALLELISM',\n 'WORKER_DEFAULTS.evaluationMaxWorkers': 'NEXUS_EVALUATION_MAX_WORKERS',\n 'WORKER_DEFAULTS.eventBusMaxHistory': 'NEXUS_EVENTBUS_MAX_HISTORY',\n 'WORKER_DEFAULTS.swarmObserverMaxEvents': 'NEXUS_SWARM_OBSERVER_MAX_EVENTS',\n 'CIRCUIT_BREAKER_DEFAULTS.failureThreshold': 'NEXUS_CIRCUIT_BREAKER_THRESHOLD',\n 'CIRCUIT_BREAKER_DEFAULTS.resetTimeoutMs': 'NEXUS_CIRCUIT_BREAKER_RESET_TIMEOUT',\n};\n\nfunction parseEnvValue<T>(envValue: string, defaultValue: T): T | undefined {\n if (typeof defaultValue === 'number') {\n const parsed = Number(envValue);\n return !isNaN(parsed) && isFinite(parsed) ? (parsed as T) : undefined;\n }\n if (typeof defaultValue === 'boolean') {\n const lower = envValue.toLowerCase();\n if (lower === 'true' || lower === '1') return true as T;\n if (lower === 'false' || lower === '0') return false as T;\n return undefined; // Unknown value — use default\n }\n if (typeof defaultValue === 'string') return envValue as T;\n return undefined;\n}\n\n// ============================================================================\n// ConfigManager Class\n// ============================================================================\n\n/**\n * Singleton ConfigManager for runtime configuration management.\n *\n * @example\n * const config = ConfigManager.getInstance();\n * const timeout = config.get('TIMEOUT_DEFAULTS', 'cliMs');\n * config.setOverride('TIMEOUT_DEFAULTS', 'cliMs', 90000, 'session');\n */\nexport class ConfigManager {\n private static instance: ConfigManager | null = null;\n private readonly overrides: Map<string, ConfigOverride> = new Map();\n\n private constructor() {}\n\n /** Gets the singleton instance. */\n static getInstance(): ConfigManager {\n ConfigManager.instance ??= new ConfigManager();\n return ConfigManager.instance;\n }\n\n /** Resets the singleton instance (for testing). */\n static resetInstance(): void {\n ConfigManager.instance = null;\n }\n\n /** Gets the effective value for a configuration key. */\n get<C extends ConfigCategory, K extends ConfigKey<C>>(category: C, key: K): ConfigValue<C, K> {\n return this.getWithMeta(category, key).value;\n }\n\n /** Gets the effective value with source metadata. */\n getWithMeta<C extends ConfigCategory, K extends ConfigKey<C>>(\n category: C,\n key: K\n ): ConfigValueMeta<ConfigValue<C, K>> {\n const fullKey = `${category}.${String(key)}`;\n const defaultValue = DEFAULTS[category][key] as ConfigValue<C, K>;\n\n // Check overrides (CLI > session)\n const override = this.overrides.get(fullKey);\n if (override) {\n return {\n value: override.value as ConfigValue<C, K>,\n source: override.source,\n key: fullKey,\n isOverride: true,\n defaultValue,\n };\n }\n\n // Check environment variable\n const envVar = ENV_VAR_MAP[fullKey];\n if (envVar !== undefined && envVar.length > 0) {\n const envValue = process.env[envVar];\n if (envValue !== undefined) {\n const parsed = parseEnvValue(envValue, defaultValue);\n if (parsed !== undefined) {\n return { value: parsed, source: 'env', key: fullKey, isOverride: true, defaultValue };\n }\n }\n }\n\n return {\n value: defaultValue,\n source: 'package',\n key: fullKey,\n isOverride: false,\n defaultValue,\n };\n }\n\n /**\n * Sets an override for a configuration key.\n * @throws {Error} If value fails type validation\n */\n setOverride<C extends ConfigCategory, K extends ConfigKey<C>>(\n category: C,\n key: K,\n value: ConfigValue<C, K>,\n source: ConfigSource\n ): void {\n const fullKey = `${category}.${String(key)}`;\n const defaultValue = DEFAULTS[category][key];\n\n if (!validateValue(value, defaultValue)) {\n throw new Error(\n `Invalid value type for ${fullKey}: expected ${typeof defaultValue}, got ${typeof value}`\n );\n }\n\n this.overrides.set(fullKey, { value, source, setAt: new Date(getTimeProvider().now()) });\n }\n\n /** Clears an override. Returns true if it existed. */\n clearOverride<C extends ConfigCategory>(category: C, key: ConfigKey<C>): boolean {\n return this.overrides.delete(`${category}.${String(key)}`);\n }\n\n /** Clears all overrides. */\n clearAllOverrides(): void {\n this.overrides.clear();\n }\n\n /** Lists all active overrides. */\n listOverrides(): ReadonlyArray<{\n key: string;\n value: unknown;\n source: ConfigSource;\n setAt: Date;\n }> {\n return Array.from(this.overrides.entries()).map(([key, override]) => ({\n key,\n value: override.value,\n source: override.source,\n setAt: override.setAt,\n }));\n }\n\n /** Lists all configuration keys with their effective values. */\n listAll(categoryFilter?: ConfigCategory): ReadonlyArray<{\n category: string;\n key: string;\n value: unknown;\n source: ConfigSource;\n envVar: string | undefined;\n }> {\n const categories = categoryFilter\n ? [categoryFilter]\n : (Object.keys(DEFAULTS) as ConfigCategory[]);\n const result: Array<{\n category: string;\n key: string;\n value: unknown;\n source: ConfigSource;\n envVar: string | undefined;\n }> = [];\n\n for (const category of categories) {\n for (const key of Object.keys(DEFAULTS[category])) {\n const fullKey = `${category}.${key}`;\n const meta = this.getWithMeta(category, key as ConfigKey<typeof category>);\n result.push({\n category,\n key,\n value: meta.value,\n source: meta.source,\n envVar: ENV_VAR_MAP[fullKey],\n });\n }\n }\n return result;\n }\n\n /** Gets the environment variable name for a config key. */\n getEnvVarName<C extends ConfigCategory>(category: C, key: ConfigKey<C>): string | undefined {\n return ENV_VAR_MAP[`${category}.${String(key)}`];\n }\n\n /** Checks if a key has an active override. */\n hasOverride<C extends ConfigCategory>(category: C, key: ConfigKey<C>): boolean {\n return this.overrides.has(`${category}.${String(key)}`);\n }\n}\n\n/** Gets the ConfigManager singleton instance. */\nexport function getConfigManager(): ConfigManager {\n return ConfigManager.getInstance();\n}\n","/**\n * nexus-agents/config - Config File Loader\n *\n * Loads and validates nexus-agents.yaml using AppConfigSchema.\n * This module provides the missing link between the config file and runtime.\n *\n * @module config/config-loader\n * (Source: Issue #472 - Wire AppConfigSchema to runtime)\n */\n\nimport { readFileSync, existsSync } from 'node:fs';\nimport { resolve, join } from 'node:path';\nimport { resolveInsideRoot } from '../security/safe-path.js';\nimport { homedir } from 'node:os';\nimport * as yaml from 'yaml';\nimport { AppConfigSchema, type AppConfig, defaultConfig } from './schemas.js';\nimport type { Result } from '../core/index.js';\nimport { ok, err, formatZodIssuesAsArray } from '../core/index.js';\nimport type { ILogger } from '../core/index.js';\nimport { createLogger } from '../core/logger.js';\n\n/**\n * Default config file name.\n */\nconst DEFAULT_CONFIG_FILE = 'nexus-agents.yaml';\n\n/**\n * Alternate config file name.\n */\nconst ALTERNATE_CONFIG_FILE = 'nexus-agents.yml';\n\n/**\n * Result of loading configuration.\n */\nexport interface ConfigLoadResult {\n /** The validated configuration */\n config: AppConfig;\n /** Path to config file (if loaded from file) */\n configPath?: string;\n /** Whether defaults were used */\n usingDefaults: boolean;\n /** Validation warnings (partial config merged with defaults) */\n warnings: string[];\n}\n\n/**\n * Error when config loading fails.\n */\nexport class ConfigLoadError extends Error {\n public readonly code: ConfigLoadErrorCode;\n\n constructor(message: string, code: ConfigLoadErrorCode, cause?: Error) {\n super(message, { cause });\n this.name = 'ConfigLoadError';\n this.code = code;\n }\n}\n\nexport type ConfigLoadErrorCode =\n | 'FILE_READ_ERROR'\n | 'YAML_PARSE_ERROR'\n | 'VALIDATION_ERROR'\n | 'PATH_TRAVERSAL';\n\n/**\n * Options for loading configuration.\n */\nexport interface ConfigLoadOptions {\n /** Explicit path to config file */\n configPath?: string;\n /** Logger for diagnostics */\n logger?: ILogger;\n /** Working directory for relative paths (default: process.cwd()) */\n cwd?: string;\n /** Whether to merge with defaults (default: true) */\n mergeDefaults?: boolean;\n}\n\n/**\n * Validates that a path doesn't escape the allowed root.\n */\nfunction validatePath(userPath: string, root: string): Result<string, ConfigLoadError> {\n const resolved = resolveInsideRoot(userPath, root);\n if (resolved === null) {\n return err(\n new ConfigLoadError(\n `Config path traversal detected: ${userPath} escapes ${root}`,\n 'PATH_TRAVERSAL'\n )\n );\n }\n return ok(resolved);\n}\n\n/**\n * Finds the config file path.\n */\nfunction findConfigPath(cwd: string): string | undefined {\n // Check environment variable first\n const envPath = process.env['NEXUS_CONFIG_PATH'];\n if (envPath !== undefined && envPath !== '') {\n const validation = validatePath(envPath, cwd);\n if (validation.ok && existsSync(validation.value)) {\n return validation.value;\n }\n }\n\n // Check current directory for .yaml\n const yamlPath = resolve(cwd, DEFAULT_CONFIG_FILE);\n if (existsSync(yamlPath)) {\n return yamlPath;\n }\n\n // Check current directory for .yml\n const ymlPath = resolve(cwd, ALTERNATE_CONFIG_FILE);\n if (existsSync(ymlPath)) {\n return ymlPath;\n }\n\n // Check global config directory (~/.nexus-agents/) as fallback (#1265)\n const globalDir = join(homedir(), '.nexus-agents');\n const globalYamlPath = join(globalDir, DEFAULT_CONFIG_FILE);\n if (existsSync(globalYamlPath)) {\n return globalYamlPath;\n }\n const globalYmlPath = join(globalDir, ALTERNATE_CONFIG_FILE);\n if (existsSync(globalYmlPath)) {\n return globalYmlPath;\n }\n\n return undefined;\n}\n\n/**\n * Parses YAML content safely.\n */\nfunction parseYaml(content: string): Result<unknown, ConfigLoadError> {\n try {\n const parsed: unknown = yaml.parse(content);\n return ok(parsed);\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown YAML parse error';\n return err(\n new ConfigLoadError(`YAML parse error: ${message}`, 'YAML_PARSE_ERROR', error as Error)\n );\n }\n}\n\n/**\n * Deep merges two objects, with source taking precedence.\n */\nfunction deepMerge<T extends Record<string, unknown>>(target: T, source: Partial<T>): T {\n const result = { ...target };\n\n for (const key of Object.keys(source) as Array<keyof T>) {\n const sourceValue = source[key];\n const targetValue = target[key];\n\n if (\n sourceValue !== undefined &&\n typeof sourceValue === 'object' &&\n sourceValue !== null &&\n !Array.isArray(sourceValue) &&\n typeof targetValue === 'object' &&\n targetValue !== null &&\n !Array.isArray(targetValue)\n ) {\n result[key] = deepMerge(\n targetValue as Record<string, unknown>,\n sourceValue as Record<string, unknown>\n ) as T[keyof T];\n } else if (sourceValue !== undefined) {\n result[key] = sourceValue as T[keyof T];\n }\n }\n\n return result;\n}\n\n/** Returns default config when no file is found. */\nfunction loadDefaultConfig(logger: ILogger): Result<ConfigLoadResult, ConfigLoadError> {\n logger.debug('No config file found, using defaults');\n const validated = AppConfigSchema.safeParse(defaultConfig);\n if (!validated.success) {\n return err(\n new ConfigLoadError(\n `Default config validation failed: ${validated.error.message}`,\n 'VALIDATION_ERROR'\n )\n );\n }\n return ok({\n config: validated.data,\n usingDefaults: true,\n warnings: ['No config file found, using default configuration'],\n });\n}\n\n/** Reads and parses config file content. */\nfunction readAndParseConfig(\n configPath: string,\n mergeDefaults: boolean,\n logger: ILogger\n): Result<unknown, ConfigLoadError> {\n let content: string;\n try {\n content = readFileSync(configPath, 'utf-8');\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n return err(\n new ConfigLoadError(\n `Failed to read config file: ${message}`,\n 'FILE_READ_ERROR',\n error as Error\n )\n );\n }\n\n const parseResult = parseYaml(content);\n if (!parseResult.ok) return err(parseResult.error);\n\n if (mergeDefaults && typeof parseResult.value === 'object' && parseResult.value !== null) {\n logger.debug('Merged config with defaults');\n return ok(\n deepMerge(\n defaultConfig as Record<string, unknown>,\n parseResult.value as Record<string, unknown>\n )\n );\n }\n return ok(parseResult.value);\n}\n\n/** Validates parsed config against schema. */\nfunction validateConfig(\n configData: unknown,\n configPath: string,\n logger: ILogger\n): Result<ConfigLoadResult, ConfigLoadError> {\n const validation = AppConfigSchema.safeParse(configData);\n if (!validation.success) {\n const issues = formatZodIssuesAsArray(validation.error);\n return err(\n new ConfigLoadError(`Config validation failed:\\n${issues.join('\\n')}`, 'VALIDATION_ERROR')\n );\n }\n logger.info('Configuration loaded successfully', { configPath });\n return ok({ config: validation.data, configPath, usingDefaults: false, warnings: [] });\n}\n\n/**\n * Loads and validates configuration from a file.\n */\nexport function loadConfig(\n options: ConfigLoadOptions = {}\n): Result<ConfigLoadResult, ConfigLoadError> {\n const { configPath: explicitPath, cwd = process.cwd(), mergeDefaults = true } = options;\n const logger = options.logger ?? createLogger({ component: 'ConfigLoader' });\n\n // Resolve config file path\n let configPath: string | undefined;\n if (explicitPath !== undefined) {\n const validation = validatePath(explicitPath, cwd);\n if (!validation.ok) return err(validation.error);\n configPath = validation.value;\n } else {\n configPath = findConfigPath(cwd);\n }\n\n // Use defaults if no config file found\n if (configPath === undefined) return loadDefaultConfig(logger);\n\n // Read, parse, and validate\n const parseResult = readAndParseConfig(configPath, mergeDefaults, logger);\n if (!parseResult.ok) return err(parseResult.error);\n\n return validateConfig(parseResult.value, configPath, logger);\n}\n\n/**\n * Singleton instance of loaded configuration.\n * Lazily initialized on first access.\n */\nlet loadedConfig: ConfigLoadResult | undefined;\n\n/**\n * Gets the currently loaded configuration.\n * Loads from file on first call, then returns cached result.\n *\n * @param options - Load options (only used on first call)\n * @returns The loaded configuration\n * @throws ConfigLoadError if loading fails\n */\nexport function getConfig(options?: ConfigLoadOptions): ConfigLoadResult {\n if (loadedConfig !== undefined) {\n return loadedConfig;\n }\n\n const result = loadConfig(options);\n if (!result.ok) {\n throw result.error;\n }\n loadedConfig = result.value;\n return loadedConfig;\n}\n\n/**\n * Clears the cached configuration.\n * Useful for testing or hot-reloading.\n */\nexport function clearConfigCache(): void {\n loadedConfig = undefined;\n}\n\n/**\n * Reloads configuration from file.\n * Replaces the cached configuration.\n *\n * @param options - Load options\n * @returns Result with new configuration or error\n */\nexport function reloadConfig(\n options?: ConfigLoadOptions\n): Result<ConfigLoadResult, ConfigLoadError> {\n clearConfigCache();\n const result = loadConfig(options);\n if (result.ok) {\n loadedConfig = result.value;\n }\n return result;\n}\n","/**\n * nexus-agents data directory initialization\n *\n * Pre-creates ~/.nexus-agents/ directory structure with proper permissions.\n * Used by `nexus-agents setup` to ensure data directories exist before first use.\n *\n * @module cli/setup-data-dir\n * (Source: Issue #1249 - Developer experience improvements)\n */\n\nimport { mkdirSync, existsSync } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport { DATA_SUBDIRECTORIES } from './doctor.js';\n\n/** Root data directory path. */\nexport const NEXUS_DATA_DIR = join(homedir(), '.nexus-agents');\n\n/** Subdirectories requiring restricted permissions (owner-only). */\nconst RESTRICTED_DIRS = new Set(['auth']);\n\n/**\n * Result of data directory initialization.\n */\nexport interface DataDirInitResult {\n readonly success: boolean;\n readonly rootPath: string;\n readonly created: readonly string[];\n readonly alreadyExisted: readonly string[];\n readonly error: string | null;\n}\n\n/**\n * Creates the ~/.nexus-agents/ directory structure.\n * Sets restrictive permissions (0o700) on auth/ directory.\n *\n * @param dryRun - If true, reports what would be created without creating.\n * @returns Result of initialization.\n */\nexport function initDataDirectories(dryRun: boolean = false): DataDirInitResult {\n const created: string[] = [];\n const alreadyExisted: string[] = [];\n\n try {\n ensureDir(NEXUS_DATA_DIR, dryRun, created, alreadyExisted);\n\n for (const subdir of DATA_SUBDIRECTORIES) {\n const mode = RESTRICTED_DIRS.has(subdir) ? 0o700 : undefined;\n ensureDir(join(NEXUS_DATA_DIR, subdir), dryRun, created, alreadyExisted, mode);\n }\n\n return { success: true, rootPath: NEXUS_DATA_DIR, created, alreadyExisted, error: null };\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n return { success: false, rootPath: NEXUS_DATA_DIR, created, alreadyExisted, error: msg };\n }\n}\n\n/** Creates a single directory if it doesn't exist, tracking the result. */\nfunction ensureDir(\n dirPath: string,\n dryRun: boolean,\n created: string[],\n alreadyExisted: string[],\n mode?: number\n): void {\n if (existsSync(dirPath)) {\n alreadyExisted.push(dirPath);\n return;\n }\n if (!dryRun) {\n mkdirSync(dirPath, { recursive: true, ...(mode !== undefined ? { mode } : {}) });\n }\n created.push(dirPath);\n}\n","/* eslint-disable max-lines -- Cohesive doctor command module (governance: 400-600 OK if cohesive) */\n/**\n * nexus-agents doctor command\n *\n * Health check utility for CLI integration validation.\n * Verifies CLI installations, versions, authentication, Node.js version,\n * API keys, configuration files, and MCP server readiness.\n *\n * (Source: Issue #91, cli-project_plan.md DevEx amendment)\n * (Source: Issue #422 - Doctor command validations)\n */\n\nimport { existsSync, readFileSync, accessSync, constants as fsConstants } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport { getTimeProvider, getErrorMessage } from '../core/index.js';\nimport {\n isPersistenceEnabled,\n LEARNING_DIR,\n OUTCOMES_FILE,\n RULES_FILE,\n} from '../config/learning-persistence.js';\nimport { createAllAdapters } from '../cli-adapters/factory.js';\nimport type { CliName, HealthStatus, CapacityStatus } from '../cli-adapters/types.js';\nimport { DEFAULT_MODEL_CAPABILITIES } from '../config/model-capabilities.js';\nimport { createServer } from '../mcp/server.js';\nimport { printDoctorResults } from './doctor-formatting.js';\n\n/** Required Node.js major version. */\nconst REQUIRED_NODE_MAJOR = 22;\n\n/** API key environment variable names. */\nconst API_KEY_VARS = ['ANTHROPIC_API_KEY', 'OPENAI_API_KEY', 'GOOGLE_AI_API_KEY'] as const;\n\n/** Configuration file paths to check (in order of priority). */\nconst CONFIG_FILE_PATHS = ['./nexus-agents.yaml', './nexus-agents.yml'] as const;\n\n/**\n * Check result for a single CLI.\n */\nexport interface CliCheckResult {\n readonly name: CliName;\n readonly installed: boolean;\n readonly version: string;\n readonly versionStatus: 'supported' | 'outdated' | 'unsupported' | 'breaking';\n readonly authenticated: boolean;\n readonly authMethod?: string;\n readonly capacity?: CapacityStatus;\n readonly error?: string;\n readonly fix?: string;\n}\n\n/**\n * Node.js version check result.\n */\nexport interface NodeVersionCheck {\n readonly version: string;\n readonly major: number;\n readonly supported: boolean;\n}\n\n/**\n * API key check result.\n */\nexport interface ApiKeyCheck {\n readonly name: string;\n readonly configured: boolean;\n}\n\n/**\n * Configuration file check result.\n */\nexport interface ConfigFileCheck {\n readonly found: boolean;\n readonly path: string | null;\n}\n\n/**\n * Model availability advisory entry (#890).\n */\nexport interface ModelAdvisory {\n readonly modelId: string;\n readonly displayName: string;\n readonly cliName: string;\n readonly available: boolean;\n readonly reason: string;\n}\n\n/**\n * Learning persistence health check result (#1017).\n */\nexport interface LearningPersistenceCheck {\n readonly enabled: boolean;\n readonly dirExists: boolean;\n readonly dirWritable: boolean;\n readonly outcomeCount: number;\n readonly ruleCount: number;\n readonly rulesLastSaved: string | null;\n readonly error: string | null;\n}\n\n/**\n * Registry advisory summary (#890).\n */\nexport interface RegistryAdvisory {\n readonly totalModels: number;\n readonly availableModels: number;\n readonly unavailableModels: number;\n readonly models: readonly ModelAdvisory[];\n /** Days since the registry was last updated. */\n readonly registryAgeDays: number;\n /** True if the registry is >30 days old and may have stale model data. */\n readonly registryStale: boolean;\n}\n\n/**\n * SQLite (better-sqlite3) availability check (#1249).\n */\nexport interface SqliteCheck {\n readonly available: boolean;\n readonly error: string | null;\n}\n\n/**\n * Data directory health check (#1249).\n * Reports status of ~/.nexus-agents/ and its subdirectories.\n */\nexport interface DataDirectoryCheck {\n readonly rootExists: boolean;\n readonly rootPath: string;\n readonly subdirectories: readonly DataSubdirStatus[];\n}\n\n/**\n * Status of a single data subdirectory.\n */\nexport interface DataSubdirStatus {\n readonly name: string;\n readonly path: string;\n readonly exists: boolean;\n readonly writable: boolean;\n}\n\n/** Standard data subdirectories under ~/.nexus-agents/. */\nexport const DATA_SUBDIRECTORIES = [\n 'memory',\n 'memory/beliefs',\n 'learning',\n 'sessions',\n 'audit',\n 'voting',\n 'auth',\n 'research',\n 'checkpoints',\n] as const;\n\n/**\n * Complete doctor check results.\n */\nexport interface DoctorResult {\n readonly clis: CliCheckResult[];\n readonly nodeVersion: NodeVersionCheck;\n readonly apiKeys: ApiKeyCheck[];\n readonly configFile: ConfigFileCheck;\n readonly mcpServerReady: boolean;\n readonly mcpClientReady: boolean;\n /** Model registry advisory — which models are available (#890). */\n readonly registryAdvisory: RegistryAdvisory;\n /** Learning persistence health check (#1017). */\n readonly learningPersistence: LearningPersistenceCheck;\n /** SQLite (better-sqlite3) availability (#1249). */\n readonly sqliteCheck: SqliteCheck;\n /** Data directory health (#1249). */\n readonly dataDirectory: DataDirectoryCheck;\n readonly allHealthy: boolean;\n readonly timestamp: Date;\n}\n\n/**\n * Gets the CLI install/upgrade fix command.\n */\nfunction getFixCommand(name: CliName, issue: 'install' | 'upgrade' | 'auth'): string {\n const commands: Record<CliName, Record<string, string>> = {\n claude: {\n install: 'npm install -g @anthropic-ai/claude-code',\n upgrade: 'npm update -g @anthropic-ai/claude-code',\n auth: 'claude auth login',\n },\n gemini: {\n install: 'npm install -g @google/gemini-cli',\n upgrade: 'npm update -g @google/gemini-cli',\n auth: 'gemini auth login',\n },\n codex: {\n install: 'npm install -g @openai/codex',\n upgrade: 'npm update -g @openai/codex',\n auth: 'codex auth login',\n },\n opencode: {\n install: 'npm install -g opencode-ai',\n upgrade: 'npm update -g opencode-ai',\n auth: 'opencode auth login',\n },\n };\n return commands[name][issue] ?? '';\n}\n\n/**\n * Creates a result for when a CLI is not found.\n */\nfunction createNotFoundResult(name: CliName, errorMsg: string): CliCheckResult {\n return {\n name,\n installed: false,\n version: 'N/A',\n versionStatus: 'unsupported',\n authenticated: false,\n error: errorMsg,\n fix: getFixCommand(name, 'install'),\n };\n}\n\n/**\n * Determines the authentication method based on CLI name.\n * CLIs use their own auth mechanisms - we report the method type\n * rather than assuming a specific one like 'OAuth'.\n */\nfunction detectAuthMethod(name: CliName): string {\n const authMethods: Record<CliName, string> = {\n claude: 'CLI auth',\n gemini: 'ADC/CLI auth',\n codex: 'CLI auth',\n opencode: 'CLI auth',\n };\n return authMethods[name];\n}\n\n/**\n * Creates a result from a successful health check.\n */\nfunction createHealthyResult(\n name: CliName,\n health: HealthStatus,\n capacity?: CapacityStatus\n): CliCheckResult {\n const authenticated = health.healthy;\n\n const result: CliCheckResult = {\n name,\n installed: true,\n version: health.version,\n versionStatus: health.versionStatus,\n authenticated,\n ...(authenticated && { authMethod: detectAuthMethod(name) }),\n ...(capacity !== undefined && { capacity }),\n };\n\n if (health.message !== undefined && health.message !== '') {\n return { ...result, error: health.message };\n }\n if (!authenticated) {\n return { ...result, fix: getFixCommand(name, 'auth') };\n }\n if (health.versionStatus === 'outdated') {\n return { ...result, fix: getFixCommand(name, 'upgrade') };\n }\n\n return result;\n}\n\n/**\n * Runs health check on a single CLI adapter.\n */\nasync function checkCli(name: CliName): Promise<CliCheckResult> {\n const adapters = createAllAdapters();\n const adapter = adapters.get(name);\n\n if (!adapter) {\n return createNotFoundResult(name, 'Adapter not available');\n }\n\n try {\n const health: HealthStatus = await adapter.healthCheck();\n let capacity: CapacityStatus | undefined;\n\n try {\n capacity = await adapter.getCapacity();\n } catch (capErr: unknown) {\n // Capacity check is optional — some adapters don't support it\n void capErr; // Logged at debug via adapter internals\n }\n\n return createHealthyResult(name, health, capacity);\n } catch (error) {\n const message = getErrorMessage(error);\n const isNotFound = message.includes('ENOENT') || message.includes('not found');\n return createNotFoundResult(name, isNotFound ? 'Not found in PATH' : message);\n }\n}\n\n/**\n * Checks the Node.js version against the required version.\n */\nfunction checkNodeVersion(): NodeVersionCheck {\n const version = process.version;\n const major = Number(version.slice(1).split('.')[0]);\n return {\n version,\n major,\n supported: major >= REQUIRED_NODE_MAJOR,\n };\n}\n\n/**\n * Checks which API keys are configured in the environment.\n * Does NOT expose the actual key values - only reports presence.\n *\n * Exported so `verify` (#2136) and other health gates can reuse it without\n * running the full doctor pipeline.\n */\nexport function checkApiKeys(): ApiKeyCheck[] {\n return API_KEY_VARS.map((name) => ({\n name,\n configured: typeof process.env[name] === 'string' && process.env[name] !== '',\n }));\n}\n\n/**\n * Checks for the existence of a configuration file.\n */\nfunction checkConfigFile(): ConfigFileCheck {\n for (const configPath of CONFIG_FILE_PATHS) {\n if (existsSync(configPath)) {\n return { found: true, path: configPath };\n }\n }\n return { found: false, path: null };\n}\n\n/**\n * Validates that the MCP server can be created successfully.\n * This is a lightweight check that verifies server instantiation works.\n */\nfunction checkMcpServerReady(): boolean {\n try {\n const result = createServer({ name: 'nexus-agents-doctor-check' });\n return result.ok;\n } catch {\n return false;\n }\n}\n\n/**\n * Builds model registry advisory based on detected CLI availability (#890).\n */\nfunction buildRegistryAdvisory(cliResults: CliCheckResult[]): RegistryAdvisory {\n const installedClis = new Set(cliResults.filter((c) => c.installed).map((c) => c.name));\n\n const models: ModelAdvisory[] = DEFAULT_MODEL_CAPABILITIES.models\n .filter((m) => m.cliName !== undefined)\n .map((m) => {\n const cliName = m.cliName ?? '';\n const available = cliName.length > 0 && installedClis.has(cliName as CliName);\n const reason = available ? `${cliName} CLI is installed` : `${cliName} CLI is not installed`;\n return { modelId: m.id, displayName: m.displayName, cliName, available, reason };\n });\n\n // Registry staleness check (#1549)\n const STALE_THRESHOLD_DAYS = 30;\n const updatedAt = new Date(DEFAULT_MODEL_CAPABILITIES.updatedAt);\n const nowMs = getTimeProvider().now();\n const ageDays = Math.floor((nowMs - updatedAt.getTime()) / (1000 * 60 * 60 * 24));\n\n return {\n totalModels: models.length,\n availableModels: models.filter((m) => m.available).length,\n unavailableModels: models.filter((m) => !m.available).length,\n models,\n registryAgeDays: ageDays,\n registryStale: ageDays > STALE_THRESHOLD_DAYS,\n };\n}\n\n/** Counts non-empty lines in a JSONL file. Returns 0 if file doesn't exist. */\nfunction countJsonlLines(filePath: string): number {\n if (!existsSync(filePath)) return 0;\n return readFileSync(filePath, 'utf-8')\n .split('\\n')\n .filter((l) => l.trim().length > 0).length;\n}\n\n/** Reads rules snapshot metadata. Returns count and savedAt. */\nfunction readRulesMetadata(filePath: string): { count: number; savedAt: string | null } {\n if (!existsSync(filePath)) return { count: 0, savedAt: null };\n try {\n const raw = JSON.parse(readFileSync(filePath, 'utf-8')) as Record<string, unknown>;\n const rules = raw['rules'];\n const saved = raw['savedAt'];\n return {\n count: Array.isArray(rules) ? rules.length : 0,\n savedAt: typeof saved === 'string' ? saved : null,\n };\n } catch {\n return { count: 0, savedAt: null };\n }\n}\n\n/** Checks if a directory exists and is writable. */\nfunction checkDirAccess(dir: string): { exists: boolean; writable: boolean } {\n const exists = existsSync(dir);\n if (!exists) return { exists: false, writable: false };\n try {\n accessSync(dir, fsConstants.W_OK);\n return { exists: true, writable: true };\n } catch {\n return { exists: true, writable: false };\n }\n}\n\nconst DISABLED_CHECK: LearningPersistenceCheck = {\n enabled: false,\n dirExists: false,\n dirWritable: false,\n outcomeCount: 0,\n ruleCount: 0,\n rulesLastSaved: null,\n error: null,\n};\n\n/** Checks learning persistence health (#1017). */\nfunction checkLearningPersistence(): LearningPersistenceCheck {\n if (!isPersistenceEnabled()) return DISABLED_CHECK;\n try {\n const { exists: dirExists, writable: dirWritable } = checkDirAccess(LEARNING_DIR);\n const outcomeCount = countJsonlLines(OUTCOMES_FILE);\n const { count: ruleCount, savedAt: rulesLastSaved } = readRulesMetadata(RULES_FILE);\n return {\n enabled: true,\n dirExists,\n dirWritable,\n outcomeCount,\n ruleCount,\n rulesLastSaved,\n error: null,\n };\n } catch (error: unknown) {\n return {\n enabled: true,\n dirExists: false,\n dirWritable: false,\n outcomeCount: 0,\n ruleCount: 0,\n rulesLastSaved: null,\n error: getErrorMessage(error),\n };\n }\n}\n\n/**\n * Checks if better-sqlite3 is available (#1249).\n * Memory backends (agentic, adaptive, typed, mobimem, decay) require it.\n *\n * Exported so `verify` (#2136) can reuse it without running the full doctor\n * pipeline.\n */\nexport async function checkSqlite(): Promise<SqliteCheck> {\n try {\n await import('better-sqlite3');\n return { available: true, error: null };\n } catch (error: unknown) {\n const msg = getErrorMessage(error);\n const isNotFound = msg.includes('Cannot find') || msg.includes('MODULE_NOT_FOUND');\n return {\n available: false,\n error: isNotFound\n ? 'better-sqlite3 not installed — 5 memory backends unavailable'\n : `better-sqlite3 load error: ${msg}`,\n };\n }\n}\n\n/**\n * Checks the ~/.nexus-agents/ data directory health (#1249).\n *\n * Exported so `verify` (#2136) can reuse it without running the full doctor\n * pipeline.\n */\nexport function checkDataDirectory(): DataDirectoryCheck {\n const rootPath = join(homedir(), '.nexus-agents');\n const rootExists = existsSync(rootPath);\n\n const subdirectories: DataSubdirStatus[] = DATA_SUBDIRECTORIES.map((name) => {\n const fullPath = join(rootPath, name);\n const exists = existsSync(fullPath);\n return { name, path: fullPath, exists, writable: exists && isWritable(fullPath) };\n });\n\n return { rootExists, rootPath, subdirectories };\n}\n\n/** Checks if a directory is writable by the current user. */\nfunction isWritable(dirPath: string): boolean {\n try {\n accessSync(dirPath, fsConstants.W_OK);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Runs the complete doctor check.\n */\nexport async function runDoctor(): Promise<DoctorResult> {\n const clis = await Promise.all([\n checkCli('claude'),\n checkCli('gemini'),\n checkCli('codex'),\n checkCli('opencode'),\n ]);\n const nodeVersion = checkNodeVersion();\n const apiKeys = checkApiKeys();\n const configFile = checkConfigFile();\n const mcpServerReady = checkMcpServerReady();\n const codexCheck = clis.find((c) => c.name === 'codex');\n const mcpClientReady = codexCheck?.installed ?? false;\n const registryAdvisory = buildRegistryAdvisory(clis);\n const learningPersistence = checkLearningPersistence();\n const sqliteCheck = await checkSqlite();\n const dataDirectory = checkDataDirectory();\n\n // At least one API key configured or one CLI authenticated\n const hasAuthMethod =\n apiKeys.some((k) => k.configured) || clis.some((c) => c.installed && c.authenticated);\n\n const allHealthy =\n nodeVersion.supported &&\n hasAuthMethod &&\n mcpServerReady &&\n clis.every((c) => c.installed && c.authenticated && c.versionStatus !== 'unsupported');\n\n return {\n clis,\n nodeVersion,\n apiKeys,\n configFile,\n mcpServerReady,\n mcpClientReady,\n registryAdvisory,\n learningPersistence,\n sqliteCheck,\n dataDirectory,\n allHealthy,\n timestamp: new Date(getTimeProvider().now()),\n };\n}\n\n/** Doctor command options. */\nexport interface DoctorOptions {\n /** Auto-fix safe issues (run setup, generate config). */\n readonly fix?: boolean;\n}\n\n/**\n * Runs the doctor command and prints results.\n * Returns exit code (0 = healthy, 1 = issues found).\n */\nexport async function doctorCommand(options: DoctorOptions = {}): Promise<number> {\n const result = await runDoctor();\n printDoctorResults(result);\n\n if (options.fix === true) {\n await runDoctorFix(result);\n }\n\n return result.allHealthy ? 0 : 1;\n}\n\n/**\n * Auto-fixes safe issues found by doctor (#1254).\n * Only runs our own code — never execs external package managers.\n */\nasync function runDoctorFix(result: DoctorResult): Promise<void> {\n const writeLine = (text: string): void => {\n process.stdout.write(text + '\\n');\n };\n\n writeLine('');\n writeLine('\\x1b[1mAuto-fix\\x1b[0m');\n writeLine('─'.repeat(40));\n\n let fixCount = 0;\n\n // Fix: data directories (missing or not writable)\n if (\n !result.dataDirectory.rootExists ||\n result.dataDirectory.subdirectories.some((d) => !d.exists || !d.writable)\n ) {\n const { runSetup } = await import('./setup-command.js');\n const setupResult = runSetup({\n skipMcp: true,\n skipRules: true,\n skipHooks: true,\n skipConfig: true,\n skipOpencode: true,\n });\n if (setupResult.success) {\n writeLine('✓ Created missing data directories');\n fixCount++;\n }\n }\n\n // Fix: config file\n if (!result.configFile.found) {\n const { runConfigInitSync } = await import('./setup-config.js');\n const configResult = runConfigInitSync(process.cwd(), false, false);\n if (configResult.success && configResult.created) {\n writeLine(`✓ Generated config: ${configResult.path}`);\n fixCount++;\n }\n }\n\n // Display-only: better-sqlite3\n if (!result.sqliteCheck.available) {\n writeLine('');\n writeLine('⚠ better-sqlite3 not installed (manual step required):');\n writeLine(' npm install -g better-sqlite3');\n }\n\n if (fixCount > 0) {\n writeLine('');\n writeLine(\n `\\x1b[32m${String(fixCount)} issue(s) fixed.\\x1b[0m Re-run \\x1b[1mnexus-agents doctor\\x1b[0m to verify.`\n );\n } else {\n writeLine('No auto-fixable issues found.');\n }\n writeLine('');\n}\n\n// Re-export printDoctorResults for backward compatibility\nexport { printDoctorResults } from './doctor-formatting.js';\n","/**\n * nexus-agents/mcp - MCP Server\n *\n * Main MCP server implementation for Nexus Agents orchestration.\n * Provides factory functions to create and start the server with\n * stdio or custom transports.\n *\n * (Source: MCP Protocol 2025-11-25)\n */\n\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\n\nimport {\n getErrorMessage,\n createLogger,\n type Result,\n ok,\n err,\n type ILogger,\n} from '../core/index.js';\nimport { VERSION } from '../version.js';\nimport { getTaskStore } from './task-store.js';\nimport { initDataDirectories } from '../cli/setup-data-dir.js';\n\n/**\n * Server configuration options.\n */\nexport interface ServerConfig {\n /** Server name (default: \"nexus-agents\") */\n readonly name?: string;\n /** Server version (default: package version) */\n readonly version?: string;\n /** Logger instance */\n readonly logger?: ILogger;\n}\n\n/**\n * Server creation result containing the server and logger.\n */\nexport interface ServerInstance {\n /** The MCP server instance */\n readonly server: McpServer;\n /** The logger instance for this server */\n readonly logger: ILogger;\n}\n\n/**\n * Error type for server operations.\n */\nexport interface ServerError {\n code: 'SERVER_CREATION_FAILED' | 'SERVER_START_FAILED' | 'SERVER_STOP_FAILED';\n message: string;\n cause?: Error;\n}\n\nconst DEFAULT_SERVER_NAME = 'nexus-agents';\n\n/**\n * Creates a ServerError with the given code, message, and optional cause.\n */\nfunction createServerError(\n code: ServerError['code'],\n message: string,\n error: unknown\n): ServerError {\n const serverError: ServerError = { code, message };\n if (error instanceof Error) {\n serverError.cause = error;\n }\n return serverError;\n}\n\n/**\n * Creates a new MCP server instance.\n *\n * @param config - Optional server configuration\n * @returns Result containing the server instance or an error\n *\n * @example\n * ```typescript\n * const result = createServer({ name: 'my-server' });\n * if (result.ok) {\n * const { server, logger } = result.value;\n * // Register tools on server\n * }\n * ```\n */\nexport function createServer(config?: ServerConfig): Result<ServerInstance, ServerError> {\n const serverName = config?.name ?? DEFAULT_SERVER_NAME;\n const serverVersion = config?.version ?? VERSION;\n const logger = config?.logger ?? createLogger({ component: 'mcp-server' });\n\n try {\n // Ensure data directories exist on first MCP server startup (#1398)\n initDataDirectories();\n\n logger.info('Creating MCP server', {\n name: serverName,\n version: serverVersion,\n });\n\n const server = new McpServer(\n {\n name: serverName,\n version: serverVersion,\n },\n {\n capabilities: {\n logging: {},\n prompts: {},\n resources: {},\n tasks: {},\n },\n taskStore: getTaskStore(),\n }\n );\n\n logger.debug('MCP server created successfully');\n\n return ok({ server, logger });\n } catch (error) {\n const errorMessage = getErrorMessage(error);\n logger.error('Failed to create MCP server', error instanceof Error ? error : undefined);\n return err(\n createServerError(\n 'SERVER_CREATION_FAILED',\n `Failed to create MCP server: ${errorMessage}`,\n error\n )\n );\n }\n}\n\n/**\n * Connects the server to a transport.\n *\n * @param server - The MCP server instance\n * @param transport - The transport to connect to\n * @param logger - Logger for the operation\n * @returns Result indicating success or failure\n */\nexport async function connectTransport(\n server: McpServer,\n transport: Transport,\n logger?: ILogger\n): Promise<Result<void, ServerError>> {\n const log = logger ?? createLogger({ component: 'mcp-server' });\n\n try {\n log.info('Connecting server to transport');\n await server.connect(transport);\n log.debug('Server connected to transport successfully');\n return ok(undefined);\n } catch (error) {\n const errorMessage = getErrorMessage(error);\n log.error('Failed to connect to transport', error instanceof Error ? error : undefined);\n return err(\n createServerError(\n 'SERVER_START_FAILED',\n `Failed to connect to transport: ${errorMessage}`,\n error\n )\n );\n }\n}\n\n/**\n * Starts the MCP server with stdio transport.\n *\n * This is the main entry point for running the server as a standalone process.\n * The server will communicate over stdin/stdout using the MCP protocol.\n *\n * @param config - Optional server configuration\n * @returns Result indicating success or failure\n *\n * @example\n * ```typescript\n * const result = await startStdioServer();\n * if (!result.ok) {\n * console.error('Failed to start server:', result.error.message);\n * process.exit(1);\n * }\n * ```\n */\nexport async function startStdioServer(\n config?: ServerConfig\n): Promise<Result<ServerInstance, ServerError>> {\n const serverResult = createServer(config);\n if (!serverResult.ok) {\n return serverResult;\n }\n\n const { server, logger } = serverResult.value;\n\n try {\n // Defense-in-depth: stdio transport owns stdout for JSON-RPC frames.\n logger.setDestination?.('stderr');\n logger.info('Starting stdio transport');\n const transport = new StdioServerTransport();\n\n const connectResult = await connectTransport(server, transport, logger);\n if (!connectResult.ok) {\n return connectResult;\n }\n\n logger.info('MCP server running with stdio transport');\n return ok({ server, logger });\n } catch (error) {\n const errorMessage = getErrorMessage(error);\n logger.error('Failed to start stdio server', error instanceof Error ? error : undefined);\n return err(\n createServerError(\n 'SERVER_START_FAILED',\n `Failed to start stdio server: ${errorMessage}`,\n error\n )\n );\n }\n}\n\n/**\n * Gracefully closes the server connection.\n *\n * @param server - The MCP server to close\n * @param logger - Optional logger\n * @returns Result indicating success or failure\n */\nexport async function closeServer(\n server: McpServer,\n logger?: ILogger\n): Promise<Result<void, ServerError>> {\n const log = logger ?? createLogger({ component: 'mcp-server' });\n\n try {\n log.info('Closing MCP server');\n await server.close();\n log.info('MCP server closed successfully');\n return ok(undefined);\n } catch (error) {\n const errorMessage = getErrorMessage(error);\n log.error('Failed to close server', error instanceof Error ? error : undefined);\n return err(\n createServerError('SERVER_STOP_FAILED', `Failed to close server: ${errorMessage}`, error)\n );\n }\n}\n","/**\n * Nexus-Agents Task Store — wraps SDK InMemoryTaskStore with security controls.\n *\n * Provides:\n * - TTL enforcement (max 10 minutes per task)\n * - Capacity cap (max 50 tasks, FIFO eviction when exceeded)\n * - Singleton access via `getTaskStore()`\n * - Periodic cleanup of expired tasks\n *\n * @module mcp/task-store\n * (Source: Issue #1298 — Layer 2 MCP Tasks async execution)\n */\n\nimport { InMemoryTaskStore } from '@modelcontextprotocol/sdk/experimental/tasks';\nimport type { TaskStore } from '@modelcontextprotocol/sdk/experimental/tasks';\nimport { createLogger } from '../core/index.js';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/** Maximum TTL for any task (10 minutes). */\nexport const MAX_TASK_TTL_MS = 600_000;\n\n/** Default TTL applied when none specified (5 minutes). */\nexport const DEFAULT_TASK_TTL_MS = 300_000;\n\n/** Maximum number of tasks before FIFO eviction. */\nexport const MAX_TASK_CAPACITY = 50;\n\n/** Interval for periodic cleanup of expired tasks (60 seconds). */\nconst CLEANUP_INTERVAL_MS = 60_000;\n\n// ============================================================================\n// Singleton\n// ============================================================================\n\nconst logger = createLogger({ component: 'task-store' });\n\nlet singletonStore: InMemoryTaskStore | undefined;\nlet cleanupTimer: ReturnType<typeof setInterval> | undefined;\n\n/**\n * Returns the singleton InMemoryTaskStore, creating it on first call.\n *\n * The SDK's InMemoryTaskStore handles TTL cleanup internally.\n * We enforce our MAX_TASK_TTL_MS via `clampTaskTtl()` at task creation\n * (done by the ToolTaskHandler, not the store itself).\n */\nexport function getTaskStore(): TaskStore {\n if (singletonStore === undefined) {\n singletonStore = new InMemoryTaskStore();\n logger.info('Task store created', { maxCapacity: MAX_TASK_CAPACITY });\n\n // Periodic cleanup: evict oldest tasks if capacity exceeded\n cleanupTimer = setInterval(() => {\n evictExcessTasks();\n }, CLEANUP_INTERVAL_MS);\n\n // Prevent cleanup timer from keeping Node alive\n if (typeof cleanupTimer === 'object' && 'unref' in cleanupTimer) {\n cleanupTimer.unref();\n }\n }\n return singletonStore;\n}\n\n/**\n * Clamps a requested TTL to the maximum allowed value.\n * Returns DEFAULT_TASK_TTL_MS if no TTL is specified or null.\n */\nexport function clampTaskTtl(requestedTtl?: number | null): number {\n if (requestedTtl === undefined || requestedTtl === null) {\n return DEFAULT_TASK_TTL_MS;\n }\n if (requestedTtl > MAX_TASK_TTL_MS) {\n logger.warn('Task TTL clamped to maximum', {\n requested: requestedTtl,\n max: MAX_TASK_TTL_MS,\n });\n return MAX_TASK_TTL_MS;\n }\n return requestedTtl;\n}\n\n/**\n * Evicts oldest tasks when capacity is exceeded (FIFO).\n * Best-effort — logs warnings but does not throw.\n */\nfunction evictExcessTasks(): void {\n if (singletonStore === undefined) return;\n\n const allTasks = singletonStore.getAllTasks();\n if (allTasks.length <= MAX_TASK_CAPACITY) return;\n\n // Sort by creation time ascending (oldest first)\n const sorted = [...allTasks].sort(\n (a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()\n );\n\n const evictCount = sorted.length - MAX_TASK_CAPACITY;\n for (let i = 0; i < evictCount; i++) {\n const task = sorted[i];\n if (task === undefined) continue;\n singletonStore\n .updateTaskStatus(task.taskId, 'cancelled', 'Evicted: capacity exceeded')\n .catch((err: unknown) => {\n logger.debug('Failed to evict task', {\n taskId: task.taskId,\n error: String(err),\n });\n });\n }\n\n logger.info('Evicted excess tasks', { evicted: evictCount, total: sorted.length });\n}\n\n/**\n * Shuts down the task store and cleanup timer.\n * Call during server shutdown. Safe to call multiple times.\n * @internal\n */\nexport function shutdownTaskStore(): void {\n if (cleanupTimer !== undefined) {\n clearInterval(cleanupTimer);\n cleanupTimer = undefined;\n }\n if (singletonStore !== undefined) {\n singletonStore.cleanup();\n singletonStore = undefined;\n logger.info('Task store shut down');\n }\n}\n\n/** Resets the singleton for testing. @internal */\nexport function resetTaskStore(): void {\n shutdownTaskStore();\n}\n","/**\n * nexus-agents doctor command - Formatting utilities\n *\n * Terminal output formatting for doctor command results.\n * Extracted to comply with 400-line file limit.\n *\n * (Source: Issue #422 - Doctor command validations)\n */\n\nimport { DEFAULT_CAPABILITIES } from '../cli-adapters/types.js';\nimport type { CapacityStatus } from '../cli-adapters/types.js';\nimport type {\n CliCheckResult,\n NodeVersionCheck,\n ApiKeyCheck,\n ConfigFileCheck,\n RegistryAdvisory,\n LearningPersistenceCheck,\n SqliteCheck,\n DataDirectoryCheck,\n DoctorResult,\n} from './doctor.js';\nimport { colors, symbols, writeLine } from './ansi-output.js';\nimport { capitalize } from '../utils/text-utils.js';\n\n/** Required Node.js major version (for warning message). */\nconst REQUIRED_NODE_MAJOR = 22;\n\n/**\n * Formats a status symbol with color.\n */\nfunction formatStatus(healthy: boolean, warn = false): string {\n if (healthy) return `${colors.green}${symbols.check}${colors.reset}`;\n if (warn) return `${colors.yellow}${symbols.warn}${colors.reset}`;\n return `${colors.red}${symbols.cross}${colors.reset}`;\n}\n\n/**\n * Formats version status with color.\n */\nfunction formatVersionStatus(status: string): string {\n switch (status) {\n case 'supported':\n return `${colors.green}supported${colors.reset}`;\n case 'outdated':\n return `${colors.yellow}outdated${colors.reset}`;\n case 'unsupported':\n case 'breaking':\n return `${colors.red}${status}${colors.reset}`;\n default:\n return status;\n }\n}\n\n/**\n * Formats capacity as percentage string.\n */\nfunction formatCapacity(capacity?: CapacityStatus): string {\n if (capacity === undefined) return 'Unknown';\n const remaining = 100 - capacity.utilizationPercent;\n const remainingStr = String(remaining);\n if (remaining > 80) return `${colors.green}${remainingStr}% remaining${colors.reset}`;\n if (remaining > 20) return `${colors.yellow}${remainingStr}% remaining${colors.reset}`;\n return `${colors.red}${remainingStr}% remaining${colors.reset}`;\n}\n\n/**\n * Prints details for an installed CLI.\n */\nfunction printInstalledCliDetails(cli: CliCheckResult): void {\n writeLine(` Version: ${cli.version} (${formatVersionStatus(cli.versionStatus)})`);\n\n const authText = cli.authenticated\n ? `${colors.green}${cli.authMethod ?? 'Authenticated'}${colors.reset}`\n : `${colors.red}Not authenticated${colors.reset}`;\n writeLine(` Auth: ${authText}`);\n\n if (cli.capacity !== undefined) {\n writeLine(` Capacity: ${formatCapacity(cli.capacity)}`);\n }\n}\n\n/**\n * Prints a single CLI result.\n */\nfunction printCliResult(cli: CliCheckResult): void {\n const status = cli.installed && cli.authenticated;\n const warn = cli.installed && (!cli.authenticated || cli.versionStatus === 'outdated');\n\n writeLine(\n `${formatStatus(status, warn)} ${colors.bold}${capitalize(cli.name)} CLI${colors.reset}`\n );\n\n if (cli.installed) {\n printInstalledCliDetails(cli);\n } else {\n const errorText = cli.error ?? 'Not installed';\n writeLine(` ${colors.red}Error: ${errorText}${colors.reset}`);\n }\n\n if (cli.fix !== undefined && cli.fix !== '') {\n writeLine(` ${colors.dim}Fix: ${cli.fix}${colors.reset}`);\n }\n\n writeLine('');\n}\n\n/**\n * Prints capability summary for installed CLIs.\n */\nfunction printCapabilities(clis: CliCheckResult[]): void {\n const installedClis = clis.filter((c) => c.installed);\n\n if (installedClis.length === 0) {\n writeLine(`${formatStatus(false)} No CLIs installed`);\n return;\n }\n\n const caps = DEFAULT_CAPABILITIES;\n const bestReasoning = installedClis.reduce((best, c) =>\n caps[c.name].reasoning > caps[best.name].reasoning ? c : best\n );\n const bestContext = installedClis.reduce((best, c) =>\n caps[c.name].contextWindow > caps[best.name].contextWindow ? c : best\n );\n const bestSpeed = installedClis.reduce((best, c) =>\n caps[c.name].speed > caps[best.name].speed ? c : best\n );\n\n const contextTokensK = (caps[bestContext.name].contextWindow / 1000).toFixed(0);\n\n writeLine(\n `${formatStatus(true)} Complex reasoning: ${colors.bold}${capitalize(bestReasoning.name)}${colors.reset}`\n );\n writeLine(\n `${formatStatus(true)} Large context: ${colors.bold}${capitalize(bestContext.name)}${colors.reset} (${contextTokensK}K tokens)`\n );\n writeLine(\n `${formatStatus(true)} Fast execution: ${colors.bold}${capitalize(bestSpeed.name)}${colors.reset}`\n );\n}\n\n/**\n * Prints Node.js version check result.\n */\nfunction printNodeVersionCheck(check: NodeVersionCheck): void {\n const versionText = check.supported\n ? `${colors.green}${check.version}${colors.reset}`\n : `${colors.yellow}${check.version}${colors.reset}`;\n writeLine(`${formatStatus(check.supported, !check.supported)} Node.js version: ${versionText}`);\n if (!check.supported) {\n writeLine(\n ` ${colors.dim}Warning: Node.js ${String(REQUIRED_NODE_MAJOR)}.x LTS required${colors.reset}`\n );\n }\n}\n\n/**\n * Prints API key configuration check results.\n */\nfunction printApiKeysCheck(keys: ApiKeyCheck[]): void {\n const configuredCount = keys.filter((k) => k.configured).length;\n const configuredNames = keys.filter((k) => k.configured).map((k) => k.name);\n const hasAny = configuredCount > 0;\n\n writeLine(\n `${formatStatus(hasAny, !hasAny)} API keys configured: ${String(configuredCount)} of ${String(keys.length)}`\n );\n if (hasAny) {\n writeLine(` ${colors.dim}Keys: ${configuredNames.join(', ')}${colors.reset}`);\n } else {\n writeLine(\n ` ${colors.dim}Set ANTHROPIC_API_KEY, OPENAI_API_KEY, or GOOGLE_AI_API_KEY${colors.reset}`\n );\n }\n}\n\n/**\n * Prints configuration file check result.\n */\nfunction printConfigFileCheck(check: ConfigFileCheck): void {\n if (check.found && check.path !== null) {\n writeLine(`${formatStatus(true)} Configuration loaded: ${check.path}`);\n } else {\n writeLine(`${formatStatus(false, true)} Configuration file: Not found`);\n writeLine(` ${colors.dim}Run: nexus-agents config init${colors.reset}`);\n }\n}\n\n/**\n * Prints model registry advisory (#890).\n */\nfunction printRegistryAdvisory(advisory: RegistryAdvisory): void {\n const allAvailable = advisory.unavailableModels === 0;\n const countText = `${String(advisory.availableModels)} of ${String(advisory.totalModels)}`;\n writeLine(`${formatStatus(allAvailable, !allAvailable)} Models available: ${countText}`);\n if (advisory.unavailableModels > 0) {\n const missing = advisory.models.filter((m) => !m.available);\n for (const m of missing) {\n writeLine(` ${colors.dim}${m.displayName} — ${m.reason}${colors.reset}`);\n }\n }\n // Registry staleness warning (#1549)\n const ageText = `${String(advisory.registryAgeDays)} days old`;\n if (advisory.registryStale) {\n writeLine(\n `${colors.yellow}${symbols.warn}${colors.reset} Model registry is ${ageText} — may have stale model data`\n );\n writeLine(` ${colors.dim}Run: npx tsx scripts/probe-models.ts${colors.reset}`);\n } else {\n writeLine(`${formatStatus(true)} Model registry: ${ageText}`);\n }\n}\n\n/**\n * Prints learning persistence health check (#1017).\n */\nfunction printLearningPersistence(check: LearningPersistenceCheck): void {\n if (!check.enabled) {\n writeLine(`${formatStatus(true)} Learning persistence: ${colors.dim}Disabled${colors.reset}`);\n writeLine(` ${colors.dim}Set NEXUS_PERSIST_LEARNING=true to enable${colors.reset}`);\n return;\n }\n\n const healthy = check.dirExists && check.dirWritable && check.error === null;\n writeLine(`${formatStatus(healthy, !healthy)} Learning persistence: Enabled`);\n\n if (check.error !== null) {\n writeLine(` ${colors.red}Error: ${check.error}${colors.reset}`);\n return;\n }\n\n const dirStatus = check.dirExists\n ? check.dirWritable\n ? `${colors.green}writable${colors.reset}`\n : `${colors.red}not writable${colors.reset}`\n : `${colors.yellow}not created yet${colors.reset}`;\n writeLine(` Data directory: ${dirStatus}`);\n writeLine(` Outcomes: ${String(check.outcomeCount)} recorded`);\n writeLine(` Distilled rules: ${String(check.ruleCount)} active`);\n if (check.rulesLastSaved !== null) {\n writeLine(` Rules last saved: ${check.rulesLastSaved}`);\n }\n}\n\n/**\n * Prints SQLite (better-sqlite3) availability check (#1249).\n */\nfunction printSqliteCheck(check: SqliteCheck): void {\n if (check.available) {\n writeLine(\n `${formatStatus(true)} SQLite (better-sqlite3): ${colors.green}Available${colors.reset}`\n );\n } else {\n writeLine(\n `${formatStatus(false, true)} SQLite (better-sqlite3): ${colors.yellow}Not available${colors.reset}`\n );\n writeLine(\n ` ${colors.dim}Memory backends (agentic, adaptive, typed) require it${colors.reset}`\n );\n writeLine(` ${colors.dim}Fix: npm install -g better-sqlite3${colors.reset}`);\n }\n}\n\n/**\n * Prints data directory health check (#1249).\n */\nfunction printDataDirectory(check: DataDirectoryCheck): void {\n if (check.rootExists) {\n const existCount = check.subdirectories.filter((d) => d.exists).length;\n const totalCount = check.subdirectories.length;\n const allExist = existCount === totalCount;\n const allWritable = check.subdirectories.every((d) => !d.exists || d.writable);\n const healthy = allExist && allWritable;\n writeLine(\n `${formatStatus(healthy, !healthy)} Data directory: ${check.rootPath} (${String(existCount)}/${String(totalCount)} subdirs)`\n );\n if (!allExist) {\n const missing = check.subdirectories.filter((d) => !d.exists);\n for (const dir of missing) {\n writeLine(` ${colors.dim}Missing: ${dir.name}/${colors.reset}`);\n }\n writeLine(` ${colors.dim}Fix: nexus-agents setup${colors.reset}`);\n }\n if (!allWritable) {\n const readonly_ = check.subdirectories.filter((d) => d.exists && !d.writable);\n for (const dir of readonly_) {\n writeLine(` ${colors.yellow}Not writable: ${dir.name}/${colors.reset}`);\n }\n }\n } else {\n writeLine(\n `${formatStatus(false, true)} Data directory: ${colors.yellow}Not created${colors.reset}`\n );\n writeLine(` ${colors.dim}Run: nexus-agents setup${colors.reset}`);\n }\n}\n\n/** Prints the summary line with issue count. */\nfunction printDoctorSummary(result: DoctorResult): void {\n const unhealthyCount = result.clis.filter((c) => !c.installed || !c.authenticated).length;\n const nodeIssue = result.nodeVersion.supported ? 0 : 1;\n const totalIssues = unhealthyCount + nodeIssue + (result.mcpServerReady ? 0 : 1);\n const summary = result.allHealthy\n ? `${colors.green}${colors.bold}Status: Ready${colors.reset}`\n : `${colors.yellow}${colors.bold}Summary: ${String(totalIssues)} issue(s) found${colors.reset}`;\n writeLine(summary);\n writeLine('');\n}\n\n/**\n * Prints the doctor results to stdout.\n */\nexport function printDoctorResults(result: DoctorResult): void {\n writeLine('');\n writeLine(`${colors.bold}Nexus Agents Doctor${colors.reset}`);\n writeLine('===================');\n writeLine('');\n\n writeLine(`${colors.cyan}Checking environment...${colors.reset}`);\n writeLine('');\n printNodeVersionCheck(result.nodeVersion);\n printApiKeysCheck(result.apiKeys);\n printConfigFileCheck(result.configFile);\n writeLine('');\n\n writeLine(`${colors.cyan}Checking CLI installations...${colors.reset}`);\n writeLine('');\n for (const cli of result.clis) {\n printCliResult(cli);\n }\n\n writeLine(`${colors.cyan}Checking MCP configuration...${colors.reset}`);\n writeLine('');\n writeLine(\n `${formatStatus(result.mcpServerReady)} MCP Server mode: ${result.mcpServerReady ? 'Ready' : 'Not ready'}`\n );\n writeLine(\n `${formatStatus(result.mcpClientReady)} MCP Client mode: ${result.mcpClientReady ? 'Ready (Codex mcp-server)' : 'Not ready (Codex not installed)'}`\n );\n writeLine('');\n\n writeLine(`${colors.cyan}Checking capabilities...${colors.reset}`);\n writeLine('');\n printCapabilities(result.clis);\n writeLine('');\n\n writeLine(`${colors.cyan}Checking model registry...${colors.reset}`);\n writeLine('');\n printRegistryAdvisory(result.registryAdvisory);\n writeLine('');\n\n writeLine(`${colors.cyan}Checking learning subsystem...${colors.reset}`);\n writeLine('');\n printLearningPersistence(result.learningPersistence);\n writeLine('');\n\n writeLine(`${colors.cyan}Checking data storage...${colors.reset}`);\n writeLine('');\n printSqliteCheck(result.sqliteCheck);\n printDataDirectory(result.dataDirectory);\n writeLine('');\n\n printDoctorSummary(result);\n}\n"],"mappings":"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","names":["z","z","z","z","z","z","z","z","z","z","z","logger","yaml","z","z","logger","existsSync","homedir","join","existsSync","readFileSync","homedir","join","err","logger","REQUIRED_NODE_MAJOR","existsSync","readFileSync","join","homedir","writeLine","join","homedir","existsSync"]}
|