/** * ContextConfigLoader - Loads and validates context configuration * * Handles loading settings from file with mode-based filtering for observation types. */ import path from 'path'; import { homedir } from 'os'; import { SettingsDefaultsManager } from '../../shared/SettingsDefaultsManager.js'; import { ModeManager } from '../domain/ModeManager.js'; import type { ContextConfig } from './types.js'; /** * Load all context configuration settings * Priority: ~/.claude-mem/settings.json > env var > defaults */ export function loadContextConfig(): ContextConfig { const settingsPath = path.join(homedir(), '.claude-mem', 'settings.json'); const settings = SettingsDefaultsManager.loadFromFile(settingsPath); // Always read types/concepts from the active mode definition const mode = ModeManager.getInstance().getActiveMode(); const observationTypes = new Set(mode.observation_types.map(t => t.id)); const observationConcepts = new Set(mode.observation_concepts.map(c => c.id)); return { totalObservationCount: parseInt(settings.CLAUDE_MEM_CONTEXT_OBSERVATIONS, 10), fullObservationCount: parseInt(settings.CLAUDE_MEM_CONTEXT_FULL_COUNT, 10), sessionCount: parseInt(settings.CLAUDE_MEM_CONTEXT_SESSION_COUNT, 10), showReadTokens: settings.CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS === 'true', showWorkTokens: settings.CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS === 'true', showSavingsAmount: settings.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT === 'true', showSavingsPercent: settings.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT === 'true', observationTypes, observationConcepts, fullObservationField: settings.CLAUDE_MEM_CONTEXT_FULL_FIELD as 'narrative' | 'facts', showLastSummary: settings.CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY === 'true', showLastMessage: settings.CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE === 'true', }; }