{"version":3,"sources":["../src/index.ts","../src/types/core.ts","../src/conversation-history/simple-conversation-history.ts","../src/utils/simple-logger.ts","../src/utils/simple-metrics.ts","../src/utils/simple-prompt-template.ts","../src/chat/chat-instance.ts","../src/state/session-state-machine.ts","../src/constants/error-messages.ts","../src/utils/session-utils.ts","../src/session/session-impl.ts","../src/session-manager/session-manager-impl.ts","../src/session-manager/basic-session-store.ts","../src/system-message/system-message-manager-impl.ts","../src/provider-adapter/multi-provider-adapter-manager.ts","../src/conversation/conversation-service-impl.ts","../src/utils/logger-factory.ts","../src/utils/metrics-collector-factory.ts","../src/conversation-history/enhanced-conversation-history.ts","../src/utils/id.ts"],"names":["SessionState","uuidv4","SessionErrorKey"],"mappings":"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","file":"index.mjs","sourcesContent":["// Core types\nexport * from './types/core';\n\n// Additional interfaces (only those not in core)\nexport * from './interfaces/conversation-history';\nexport * from './interfaces/ai-provider';\nexport * from './interfaces/ai-context';\n\n// Simplified implementations\nexport { SimpleConversationHistory } from './conversation-history/simple-conversation-history';\nexport { SimpleLoggerImpl } from './utils/simple-logger';\nexport { SimpleMetricsCollector } from './utils/simple-metrics';\nexport { SimplePromptTemplate } from './utils/simple-prompt-template';\nexport { SessionManagerImpl } from './session-manager/session-manager-impl';\nexport { BasicSessionStore } from './session-manager/basic-session-store';\nexport { SystemMessageManagerImpl } from './system-message/system-message-manager-impl';\nexport { MultiProviderAdapterManager } from './provider-adapter/multi-provider-adapter-manager';\nexport { ConversationServiceImpl } from './conversation/conversation-service-impl';\n\n// Utilities\nexport { LoggerFactory } from './utils/logger-factory';\nexport { MetricsCollectorFactory } from './utils/metrics-collector-factory';\n\n// Conversation History (kept for backward compatibility)\nexport { ConversationHistory } from './conversation-history/conversation-history';\n\n// Core types\nexport * from './types/core';\n\n// Additional interfaces (only those not in core)\nexport type { Session, SessionMetadata, SessionStats } from './types/session';\nexport type { SessionManager, SessionManagerStats } from './types/session-manager';\nexport type { ChatInstance, ChatMetadata, ChatStats, MessageContent } from './types/chat';\n\n// Simplified implementations\nexport { SessionImpl } from './session/session-impl';\nexport { ChatInstanceImpl } from './chat/chat-instance';\n\n// State Machine\nexport * from './state/session-state-machine';\n\n// Error handling\nexport * from './constants/error-messages';\n\n// Utilities\nexport { generateId } from './utils/id';\nexport * from './utils/session-utils';\n\n// Conversation History (kept for backward compatibility)\nexport { EnhancedConversationHistoryImpl } from './conversation-history/index';\n\n// Storage interfaces will be added later\n// SessionManager implementation will be added later ","// Concise core type definitions\nexport * from '@robota-sdk/core';\n\nexport enum SessionState {\n    ACTIVE = 'active',\n    PAUSED = 'paused',\n    TERMINATED = 'terminated'\n}\n\n// Session related types\nexport interface SessionConfig {\n    name?: string;\n    maxChats?: number;\n}\n\nexport interface SessionInfo {\n    id: string;\n    userId: string;\n    name: string;\n    state: SessionState;\n    chatCount: number;\n    activeChatId?: string;\n    createdAt: Date;\n    lastUsedAt: Date;\n}\n\n// Chat related types\nexport interface ChatConfig {\n    name?: string;\n    robotaConfig?: any;\n}\n\nexport interface ChatInfo {\n    id: string;\n    sessionId: string;\n    name: string;\n    isActive: boolean;\n    messageCount: number;\n    createdAt: Date;\n    lastUsedAt: Date;\n}\n\n// Manager configuration\nexport interface SessionManagerConfig {\n    maxSessions?: number;\n    autoCleanupDays?: number;\n} ","import type { UniversalMessage } from '@robota-sdk/core';\nimport { ConversationHistoryInterface } from '../interfaces/conversation-history';\n\nexport class SimpleConversationHistory implements ConversationHistoryInterface {\n    private messages: UniversalMessage[] = [];\n    private maxMessages?: number;\n\n    constructor(maxMessages?: number) {\n        this.maxMessages = maxMessages;\n    }\n\n    addMessage(message: UniversalMessage): void {\n        this.messages.push(message);\n\n        if (this.maxMessages && this.messages.length > this.maxMessages) {\n            this.messages = this.messages.slice(-this.maxMessages);\n        }\n    }\n\n    getMessages(): UniversalMessage[] {\n        return [...this.messages];\n    }\n\n    getMessageCount(): number {\n        return this.messages.length;\n    }\n\n    clear(): void {\n        this.messages = [];\n    }\n\n    getLastMessage(): UniversalMessage | null {\n        return this.messages.length > 0 ? this.messages[this.messages.length - 1] : null;\n    }\n\n    getLastUserMessage(): UniversalMessage | null {\n        for (let i = this.messages.length - 1; i >= 0; i--) {\n            if (this.messages[i].role === 'user') {\n                return this.messages[i];\n            }\n        }\n        return null;\n    }\n\n    getLastAssistantMessage(): UniversalMessage | null {\n        for (let i = this.messages.length - 1; i >= 0; i--) {\n            if (this.messages[i].role === 'assistant') {\n                return this.messages[i];\n            }\n        }\n        return null;\n    }\n} ","export interface Logger {\n    debug(message: string, ...args: any[]): void;\n    info(message: string, ...args: any[]): void;\n    warn(message: string, ...args: any[]): void;\n    error(message: string, ...args: any[]): void;\n}\n\nexport class SimpleLoggerImpl implements Logger {\n    private prefix: string;\n\n    constructor(prefix: string = 'SessionSDK') {\n        this.prefix = prefix;\n    }\n\n    debug(message: string, ...args: any[]): void {\n        console.debug(`[${this.prefix}:DEBUG] ${message}`, ...args);\n    }\n\n    info(message: string, ...args: any[]): void {\n        console.info(`[${this.prefix}:INFO] ${message}`, ...args);\n    }\n\n    warn(message: string, ...args: any[]): void {\n        console.warn(`[${this.prefix}:WARN] ${message}`, ...args);\n    }\n\n    error(message: string, ...args: any[]): void {\n        console.error(`[${this.prefix}:ERROR] ${message}`, ...args);\n    }\n} ","export interface MetricsCollector {\n    incrementCounter(name: string, value?: number): void;\n    recordGauge(name: string, value: number): void;\n    recordHistogram(name: string, value: number): void;\n    getMetrics(): Record<string, any>;\n    reset(): void;\n}\n\nexport class SimpleMetricsCollector implements MetricsCollector {\n    private counters: Map<string, number> = new Map();\n    private gauges: Map<string, number> = new Map();\n    private histograms: Map<string, number[]> = new Map();\n\n    incrementCounter(name: string, value: number = 1): void {\n        const current = this.counters.get(name) || 0;\n        this.counters.set(name, current + value);\n    }\n\n    recordGauge(name: string, value: number): void {\n        this.gauges.set(name, value);\n    }\n\n    recordHistogram(name: string, value: number): void {\n        const values = this.histograms.get(name) || [];\n        values.push(value);\n        this.histograms.set(name, values);\n    }\n\n    getMetrics(): Record<string, any> {\n        const result: Record<string, any> = {};\n\n        // Add counters\n        for (const [name, value] of this.counters) {\n            result[`counter_${name}`] = value;\n        }\n\n        // Add gauges\n        for (const [name, value] of this.gauges) {\n            result[`gauge_${name}`] = value;\n        }\n\n        // Add histogram summaries\n        for (const [name, values] of this.histograms) {\n            if (values.length > 0) {\n                const sum = values.reduce((a, b) => a + b, 0);\n                result[`histogram_${name}_count`] = values.length;\n                result[`histogram_${name}_sum`] = sum;\n                result[`histogram_${name}_avg`] = sum / values.length;\n                result[`histogram_${name}_min`] = Math.min(...values);\n                result[`histogram_${name}_max`] = Math.max(...values);\n            }\n        }\n\n        return result;\n    }\n\n    reset(): void {\n        this.counters.clear();\n        this.gauges.clear();\n        this.histograms.clear();\n    }\n} ","export interface PromptTemplate {\n    render(variables: Record<string, any>): string;\n    getVariables(): string[];\n}\n\nexport class SimplePromptTemplate implements PromptTemplate {\n    private template: string;\n    private variables: string[];\n\n    constructor(template: string) {\n        this.template = template;\n        this.variables = this.extractVariables(template);\n    }\n\n    render(variables: Record<string, any>): string {\n        let result = this.template;\n\n        for (const [key, value] of Object.entries(variables)) {\n            const placeholder = `{{${key}}}`;\n            result = result.replace(new RegExp(placeholder, 'g'), String(value));\n        }\n\n        return result;\n    }\n\n    getVariables(): string[] {\n        return [...this.variables];\n    }\n\n    private extractVariables(template: string): string[] {\n        const matches = template.match(/\\{\\{([^}]+)\\}\\}/g);\n        if (!matches) return [];\n\n        return matches.map(match => match.slice(2, -2).trim());\n    }\n\n    static create(template: string): SimplePromptTemplate {\n        return new SimplePromptTemplate(template);\n    }\n} ","import { Robota } from '@robota-sdk/core';\nimport type {\n    ChatInstance,\n    ChatConfig,\n    ChatMetadata,\n    ChatStats,\n    MessageContent\n} from '../types/chat';\nimport { v4 as uuidv4 } from 'uuid';\n\nexport class ChatInstanceImpl implements ChatInstance {\n    public readonly metadata: ChatMetadata;\n    public readonly config: ChatConfig;\n    public readonly robota: Robota;\n\n    private _isActive: boolean = false;\n    private _startTime: Date;\n\n    constructor(\n        sessionId: string,\n        config: ChatConfig = {},\n        robotaConfig?: any\n    ) {\n        this._startTime = new Date();\n\n        this.config = {\n            chatName: config.chatName || `Chat ${new Date().getTime()}`,\n            description: config.description,\n            robotaConfig: config.robotaConfig || robotaConfig,\n            autoSave: config.autoSave ?? false,\n            maxHistorySize: config.maxHistorySize || 1000\n        };\n\n        this.metadata = {\n            chatId: uuidv4(),\n            sessionId,\n            chatName: this.config.chatName!,\n            description: this.config.description,\n            createdAt: this._startTime,\n            updatedAt: this._startTime,\n            lastAccessedAt: this._startTime,\n            messageCount: 0,\n            isActive: false\n        };\n\n        this.robota = new Robota({\n            ...this.config.robotaConfig\n        });\n    }\n\n    // Chat Operations\n    async sendMessage(content: MessageContent): Promise<string> {\n        this._updateLastAccessed();\n\n        const messageText = typeof content === 'string' ? content : content.text || '';\n\n        try {\n            const response = await this.robota.run(messageText);\n\n            this.metadata.messageCount = this.robota.limits.getCurrentRequestCount();\n\n            return response;\n        } catch (error) {\n            throw new Error(`Failed to send message: ${error}`);\n        }\n    }\n\n    // State Management\n    activate(): void {\n        this._isActive = true;\n        this.metadata.isActive = true;\n        this._updateLastAccessed();\n    }\n\n    deactivate(): void {\n        this._isActive = false;\n        this.metadata.isActive = false;\n    }\n\n    // History Management\n    clearHistory(): void {\n        this.robota.conversation.clear();\n        this.metadata.messageCount = 0;\n        this._updateLastAccessed();\n    }\n\n    // 간소화된 메서드들\n    async updateRobotaConfig(config: any): Promise<void> {\n        this._updateLastAccessed();\n        this.config.robotaConfig = { ...this.config.robotaConfig, ...config };\n    }\n\n    getRobotaConfig(): any {\n        return this.config.robotaConfig;\n    }\n\n    // 사용하지 않는 복잡한 기능들 제거\n    async regenerateResponse(): Promise<string> {\n        throw new Error('아직 구현되지 않음');\n    }\n\n    async editMessage(messageId: string, newContent: MessageContent): Promise<void> {\n        throw new Error('아직 구현되지 않음');\n    }\n\n    async deleteMessage(messageId: string): Promise<void> {\n        throw new Error('아직 구현되지 않음');\n    }\n\n    async exportHistory(): Promise<string> {\n        throw new Error('아직 구현되지 않음');\n    }\n\n    async importHistory(data: string): Promise<void> {\n        throw new Error('아직 구현되지 않음');\n    }\n\n    // Lifecycle - 일단 비워둠\n    async save(): Promise<void> {\n        this.metadata.updatedAt = new Date();\n    }\n\n    async load(): Promise<void> {\n        // 스토리지 구현 시 추가\n    }\n\n    // Utils\n    getStats(): ChatStats {\n        return {\n            messageCount: this.metadata.messageCount,\n            configurationChanges: 0,\n            memoryUsage: 0,\n            createdAt: this.metadata.createdAt,\n            lastActivity: this.metadata.lastAccessedAt,\n            totalTokens: this.robota.limits.getCurrentTokensUsed(),\n            averageResponseTime: undefined\n        };\n    }\n\n    updateConfig(config: Partial<ChatConfig>): void {\n        Object.assign(this.config, config);\n\n        if (config.chatName) {\n            this.metadata.chatName = config.chatName;\n        }\n        if (config.description !== undefined) {\n            this.metadata.description = config.description;\n        }\n\n        this._updateLastAccessed();\n    }\n\n    private _updateLastAccessed(): void {\n        this.metadata.lastAccessedAt = new Date();\n        this.metadata.updatedAt = new Date();\n    }\n\n    // history 프로퍼티를 위한 getter (호환성)\n    get history() {\n        return {\n            getMessageCount: () => this.robota.limits.getCurrentRequestCount(),\n            clear: () => this.robota.conversation.clear(),\n        } as any;\n    }\n} ","/**\n * Session State Machine\n * \n * @module SessionStateMachine\n * @description\n * Pure functions for managing session state transitions.\n * Uses state machine pattern to ensure valid state transitions.\n */\n\nimport { SessionState } from '../types/session';\n\n/**\n * State transition definition\n */\nexport interface StateTransition {\n    from: SessionState;\n    to: SessionState;\n    action: string;\n    condition?: (context: any) => boolean;\n}\n\n/**\n * State transition result\n */\nexport interface TransitionResult {\n    success: boolean;\n    newState?: SessionState;\n    error?: string;\n}\n\n/**\n * Valid state transitions for session lifecycle\n */\nconst STATE_TRANSITIONS: StateTransition[] = [\n    // From ACTIVE\n    { from: SessionState.ACTIVE, to: SessionState.PAUSED, action: 'pause' },\n    { from: SessionState.ACTIVE, to: SessionState.ARCHIVED, action: 'archive' },\n    { from: SessionState.ACTIVE, to: SessionState.TERMINATED, action: 'terminate' },\n\n    // From PAUSED\n    { from: SessionState.PAUSED, to: SessionState.ACTIVE, action: 'resume' },\n    { from: SessionState.PAUSED, to: SessionState.ARCHIVED, action: 'archive' },\n    { from: SessionState.PAUSED, to: SessionState.TERMINATED, action: 'terminate' },\n\n    // From ARCHIVED\n    { from: SessionState.ARCHIVED, to: SessionState.ACTIVE, action: 'restore' },\n    { from: SessionState.ARCHIVED, to: SessionState.TERMINATED, action: 'terminate' },\n\n    // TERMINATED is final state - no transitions allowed\n];\n\n/**\n * Check if a state transition is valid\n * \n * @param currentState - Current session state\n * @param targetState - Target session state\n * @param action - Action being performed\n * @param context - Optional context for condition checking\n * @returns True if transition is valid\n */\nexport function isValidTransition(\n    currentState: SessionState,\n    targetState: SessionState,\n    action: string,\n    context?: any\n): boolean {\n    // Same state transition is always valid\n    if (currentState === targetState) {\n        return true;\n    }\n\n    const transition = STATE_TRANSITIONS.find(t =>\n        t.from === currentState &&\n        t.to === targetState &&\n        t.action === action\n    );\n\n    if (!transition) {\n        return false;\n    }\n\n    // Check condition if provided\n    if (transition.condition && context) {\n        return transition.condition(context);\n    }\n\n    return true;\n}\n\n/**\n * Attempt to transition to a new state\n * \n * @param currentState - Current session state\n * @param targetState - Target session state\n * @param action - Action being performed\n * @param context - Optional context for condition checking\n * @returns Transition result\n */\nexport function attemptTransition(\n    currentState: SessionState,\n    targetState: SessionState,\n    action: string,\n    context?: any\n): TransitionResult {\n    if (!isValidTransition(currentState, targetState, action, context)) {\n        return {\n            success: false,\n            error: `Invalid state transition: ${currentState} -> ${targetState} (action: ${action})`\n        };\n    }\n\n    return {\n        success: true,\n        newState: targetState\n    };\n}\n\n/**\n * Get all possible next states from current state\n * \n * @param currentState - Current session state\n * @returns Array of possible next states with their actions\n */\nexport function getPossibleTransitions(currentState: SessionState): Array<{ state: SessionState; action: string }> {\n    return STATE_TRANSITIONS\n        .filter(t => t.from === currentState)\n        .map(t => ({ state: t.to, action: t.action }));\n}\n\n/**\n * Check if a state is a final state (no transitions possible)\n * \n * @param state - State to check\n * @returns True if state is final\n */\nexport function isFinalState(state: SessionState): boolean {\n    return state === SessionState.TERMINATED;\n}\n\n/**\n * Check if a state allows active operations\n * \n * @param state - State to check\n * @returns True if state allows active operations\n */\nexport function isActiveState(state: SessionState): boolean {\n    return state === SessionState.ACTIVE;\n}\n\n/**\n * Check if a state allows modifications\n * \n * @param state - State to check\n * @returns True if state allows modifications\n */\nexport function allowsModifications(state: SessionState): boolean {\n    return state === SessionState.ACTIVE || state === SessionState.PAUSED;\n}\n\n/**\n * Get human-readable state description\n * \n * @param state - Session state\n * @returns Human-readable description\n */\nexport function getStateDescription(state: SessionState): string {\n    const descriptions: Record<SessionState, string> = {\n        [SessionState.ACTIVE]: 'Session is active and ready for interactions',\n        [SessionState.PAUSED]: 'Session is paused and can be resumed',\n        [SessionState.ARCHIVED]: 'Session is archived for long-term storage',\n        [SessionState.TERMINATED]: 'Session is permanently terminated'\n    };\n\n    return descriptions[state];\n}\n\n/**\n * Validate state transition chain\n * \n * @param transitions - Array of state transitions to validate\n * @returns Validation result with any errors\n */\nexport function validateTransitionChain(\n    transitions: Array<{ from: SessionState; to: SessionState; action: string }>\n): { valid: boolean; errors: string[] } {\n    const errors: string[] = [];\n\n    for (let i = 0; i < transitions.length; i++) {\n        const transition = transitions[i];\n\n        if (!isValidTransition(transition.from, transition.to, transition.action)) {\n            errors.push(\n                `Step ${i + 1}: Invalid transition ${transition.from} -> ${transition.to} (${transition.action})`\n            );\n        }\n\n        // Check if previous transition's end state matches current start state\n        if (i > 0 && transitions[i - 1].to !== transition.from) {\n            errors.push(\n                `Step ${i + 1}: State mismatch - previous step ended at ${transitions[i - 1].to}, current step starts at ${transition.from}`\n            );\n        }\n    }\n\n    return {\n        valid: errors.length === 0,\n        errors\n    };\n} ","/**\n * Error Messages Constants\n * \n * @module ErrorMessages\n * @description\n * Centralized error messages for consistent error handling.\n * Supports internationalization and message formatting.\n */\n\nimport { SessionState } from '../types/session';\n\n/**\n * Session error message keys\n */\nexport enum SessionErrorKey {\n    MAX_CHATS_REACHED = 'MAX_CHATS_REACHED',\n    CHAT_NOT_FOUND = 'CHAT_NOT_FOUND',\n    INVALID_STATE_TRANSITION = 'INVALID_STATE_TRANSITION',\n    OPERATION_NOT_ALLOWED = 'OPERATION_NOT_ALLOWED',\n    SESSION_TERMINATED = 'SESSION_TERMINATED',\n    INVALID_CONFIG = 'INVALID_CONFIG',\n    SAVE_FAILED = 'SAVE_FAILED',\n    LOAD_FAILED = 'LOAD_FAILED'\n}\n\n/**\n * Error message templates\n */\nconst ERROR_MESSAGES: Record<SessionErrorKey, string> = {\n    [SessionErrorKey.MAX_CHATS_REACHED]: 'Maximum number of chats ({maxChats}) reached',\n    [SessionErrorKey.CHAT_NOT_FOUND]: 'Chat with ID \"{chatId}\" not found',\n    [SessionErrorKey.INVALID_STATE_TRANSITION]: 'Invalid state transition from {currentState} to {targetState}',\n    [SessionErrorKey.OPERATION_NOT_ALLOWED]: 'Operation \"{operation}\" not allowed in state {currentState}',\n    [SessionErrorKey.SESSION_TERMINATED]: 'Session is terminated and cannot be modified',\n    [SessionErrorKey.INVALID_CONFIG]: 'Invalid configuration: {reason}',\n    [SessionErrorKey.SAVE_FAILED]: 'Failed to save session: {reason}',\n    [SessionErrorKey.LOAD_FAILED]: 'Failed to load session: {reason}'\n};\n\n/**\n * Get formatted error message\n * \n * @param key - Error message key\n * @param params - Message parameters for substitution\n * @returns Formatted error message\n */\nexport function getErrorMessage(key: SessionErrorKey, params: Record<string, any> = {}): string {\n    let message = ERROR_MESSAGES[key];\n\n    // Replace placeholders with actual values\n    for (const [paramKey, paramValue] of Object.entries(params)) {\n        message = message.replace(`{${paramKey}}`, String(paramValue));\n    }\n\n    return message;\n}\n\n/**\n * Create session error with formatted message\n * \n * @param key - Error message key\n * @param params - Message parameters\n * @returns Error instance\n */\nexport function createSessionError(key: SessionErrorKey, params: Record<string, any> = {}): Error {\n    const message = getErrorMessage(key, params);\n    const error = new Error(message);\n    error.name = 'SessionError';\n    return error;\n}\n\n/**\n * Session operation error class\n */\nexport class SessionOperationError extends Error {\n    public readonly code: SessionErrorKey;\n    public readonly context: Record<string, any>;\n\n    constructor(code: SessionErrorKey, context: Record<string, any> = {}) {\n        const message = getErrorMessage(code, context);\n        super(message);\n        this.name = 'SessionOperationError';\n        this.code = code;\n        this.context = context;\n    }\n}\n\n/**\n * State transition error class\n */\nexport class StateTransitionError extends SessionOperationError {\n    public readonly currentState: SessionState;\n    public readonly targetState: SessionState;\n    public readonly action: string;\n\n    constructor(\n        currentState: SessionState,\n        targetState: SessionState,\n        action: string\n    ) {\n        super(SessionErrorKey.INVALID_STATE_TRANSITION, {\n            currentState,\n            targetState,\n            action\n        });\n\n        this.currentState = currentState;\n        this.targetState = targetState;\n        this.action = action;\n    }\n}\n\n/**\n * Validation error utilities\n */\nexport class ValidationError extends Error {\n    public readonly field: string;\n    public readonly value: any;\n    public readonly constraint: string;\n\n    constructor(field: string, value: any, constraint: string) {\n        super(`Validation failed for field \"${field}\": ${constraint} (got: ${value})`);\n        this.name = 'ValidationError';\n        this.field = field;\n        this.value = value;\n        this.constraint = constraint;\n    }\n}\n\n/**\n * Common validation constraints\n */\nexport const ValidationConstraints = {\n    required: (field: string) => `${field} is required`,\n    minLength: (field: string, min: number) => `${field} must be at least ${min} characters`,\n    maxLength: (field: string, max: number) => `${field} must be at most ${max} characters`,\n    positive: (field: string) => `${field} must be a positive number`,\n    range: (field: string, min: number, max: number) => `${field} must be between ${min} and ${max}`\n} as const;\n","/**\n * Session Utilities\n * \n * @module SessionUtils\n * @description\n * Pure utility functions for session operations.\n * These functions are stateless and reusable.\n */\n\nimport type { SessionConfig, SessionMetadata, SessionStats } from '../types/session';\nimport { SessionState } from '../types/session';\nimport type { ChatInstance } from '../types/chat';\nimport { ValidationError, ValidationConstraints } from '../constants/error-messages';\n\n/**\n * Internal default configuration type with all required fields\n */\ninterface DefaultSessionConfig {\n    sessionName: string;\n    description?: string;\n    autoSave: boolean;\n    saveInterval: number;\n    maxChats: number;\n    retentionPeriod: number;\n}\n\n/**\n * Default session configuration\n */\nexport const DEFAULT_SESSION_CONFIG: DefaultSessionConfig = {\n    sessionName: '',\n    description: undefined,\n    autoSave: false,\n    saveInterval: 300000, // 5 minutes\n    maxChats: 20,\n    retentionPeriod: 30 // days\n};\n\n/**\n * Generate default session name based on timestamp\n * \n * @param timestamp - Optional timestamp (defaults to current time)\n * @returns Generated session name\n */\nexport function generateDefaultSessionName(timestamp?: Date): string {\n    const time = timestamp || new Date();\n    return `Session ${time.getTime()}`;\n}\n\n/**\n * Validate session configuration\n * \n * @param config - Configuration to validate\n * @returns Validation result\n */\nexport function validateSessionConfig(config: SessionConfig): { valid: boolean; errors: ValidationError[] } {\n    const errors: ValidationError[] = [];\n\n    // Validate sessionName\n    if (config.sessionName !== undefined) {\n        if (typeof config.sessionName !== 'string') {\n            errors.push(new ValidationError('sessionName', config.sessionName, 'must be a string'));\n        } else if (config.sessionName.length === 0) {\n            errors.push(new ValidationError('sessionName', config.sessionName, ValidationConstraints.required('sessionName')));\n        } else if (config.sessionName.length > 100) {\n            errors.push(new ValidationError('sessionName', config.sessionName, ValidationConstraints.maxLength('sessionName', 100)));\n        }\n    }\n\n    // Validate description\n    if (config.description !== undefined && typeof config.description !== 'string') {\n        errors.push(new ValidationError('description', config.description, 'must be a string'));\n    }\n\n    // Validate maxChats\n    if (config.maxChats !== undefined) {\n        if (typeof config.maxChats !== 'number' || !Number.isInteger(config.maxChats)) {\n            errors.push(new ValidationError('maxChats', config.maxChats, 'must be an integer'));\n        } else if (config.maxChats <= 0) {\n            errors.push(new ValidationError('maxChats', config.maxChats, ValidationConstraints.positive('maxChats')));\n        } else if (config.maxChats > 100) {\n            errors.push(new ValidationError('maxChats', config.maxChats, ValidationConstraints.range('maxChats', 1, 100)));\n        }\n    }\n\n    // Validate saveInterval\n    if (config.saveInterval !== undefined) {\n        if (typeof config.saveInterval !== 'number' || !Number.isInteger(config.saveInterval)) {\n            errors.push(new ValidationError('saveInterval', config.saveInterval, 'must be an integer'));\n        } else if (config.saveInterval < 60000) { // minimum 1 minute\n            errors.push(new ValidationError('saveInterval', config.saveInterval, 'must be at least 60000ms (1 minute)'));\n        }\n    }\n\n    // Validate retentionPeriod\n    if (config.retentionPeriod !== undefined) {\n        if (typeof config.retentionPeriod !== 'number' || !Number.isInteger(config.retentionPeriod)) {\n            errors.push(new ValidationError('retentionPeriod', config.retentionPeriod, 'must be an integer'));\n        } else if (config.retentionPeriod <= 0) {\n            errors.push(new ValidationError('retentionPeriod', config.retentionPeriod, ValidationConstraints.positive('retentionPeriod')));\n        }\n    }\n\n    return {\n        valid: errors.length === 0,\n        errors\n    };\n}\n\n/**\n * Merge session configuration with defaults\n * \n * @param config - User provided configuration\n * @returns Merged configuration with all required fields\n */\nexport function mergeWithDefaults(config: SessionConfig): DefaultSessionConfig {\n    const merged = { ...DEFAULT_SESSION_CONFIG, ...config };\n\n    // Generate default session name if not provided\n    if (!merged.sessionName) {\n        merged.sessionName = generateDefaultSessionName();\n    }\n\n    return merged;\n}\n\n/**\n * Create initial session metadata\n * \n * @param sessionId - Unique session ID\n * @param userId - User ID\n * @param config - Session configuration\n * @returns Initial metadata\n */\nexport function createInitialMetadata(\n    sessionId: string,\n    userId: string,\n    config: DefaultSessionConfig\n): SessionMetadata {\n    const now = new Date();\n\n    return {\n        sessionId,\n        userId,\n        sessionName: config.sessionName,\n        description: config.description,\n        createdAt: now,\n        updatedAt: now,\n        lastAccessedAt: now,\n        state: SessionState.ACTIVE,\n        chatCount: 0,\n        activeChatId: undefined\n    };\n}\n\n/**\n * Update metadata timestamps\n * \n * @param metadata - Current metadata\n * @returns Updated metadata with new timestamps\n */\nexport function updateTimestamps(metadata: SessionMetadata): SessionMetadata {\n    const now = new Date();\n    return {\n        ...metadata,\n        lastAccessedAt: now,\n        updatedAt: now\n    };\n}\n\n/**\n * Calculate session statistics\n * \n * @param metadata - Session metadata\n * @param chats - All chat instances\n * @param startTime - Session start time\n * @returns Calculated statistics\n */\nexport function calculateSessionStats(\n    metadata: SessionMetadata,\n    chats: ChatInstance[],\n    startTime: Date\n): SessionStats {\n    let totalMessages = 0;\n\n    for (const chat of chats) {\n        totalMessages += chat.metadata.messageCount;\n    }\n\n    return {\n        chatCount: metadata.chatCount,\n        totalMessages,\n        memoryUsage: 0, // TODO: Implement memory usage calculation\n        diskUsage: 0, // TODO: Implement disk usage calculation\n        createdAt: metadata.createdAt,\n        lastActivity: metadata.lastAccessedAt,\n        uptime: Date.now() - startTime.getTime()\n    };\n}\n\n/**\n * Find next active chat when current one is removed\n * \n * @param chats - Map of chat instances\n * @param removedChatId - ID of chat being removed\n * @param currentActiveChatId - Current active chat ID\n * @returns ID of next chat to activate, or undefined if none\n */\nexport function findNextActiveChat(\n    chats: Map<string, ChatInstance>,\n    removedChatId: string,\n    currentActiveChatId?: string\n): string | undefined {\n    // If removed chat is not active, keep current active chat\n    if (currentActiveChatId !== removedChatId) {\n        return currentActiveChatId;\n    }\n\n    // Find remaining chats\n    const remainingChatIds = Array.from(chats.keys()).filter(id => id !== removedChatId);\n\n    // Return first remaining chat, or undefined if none\n    return remainingChatIds.length > 0 ? remainingChatIds[0] : undefined;\n}\n\n/**\n * Check if chat limit would be exceeded\n * \n * @param currentCount - Current number of chats\n * @param maxChats - Maximum allowed chats\n * @returns True if limit would be exceeded\n */\nexport function wouldExceedChatLimit(currentCount: number, maxChats: number): boolean {\n    return currentCount >= maxChats;\n}\n\n/**\n * Format uptime duration in human-readable format\n * \n * @param uptimeMs - Uptime in milliseconds\n * @returns Formatted duration string\n */\nexport function formatUptime(uptimeMs: number): string {\n    const seconds = Math.floor(uptimeMs / 1000);\n    const minutes = Math.floor(seconds / 60);\n    const hours = Math.floor(minutes / 60);\n    const days = Math.floor(hours / 24);\n\n    if (days > 0) {\n        return `${days}d ${hours % 24}h ${minutes % 60}m`;\n    } else if (hours > 0) {\n        return `${hours}h ${minutes % 60}m`;\n    } else if (minutes > 0) {\n        return `${minutes}m ${seconds % 60}s`;\n    } else {\n        return `${seconds}s`;\n    }\n}\n\n/**\n * Check if session is in a modifiable state\n * \n * @param state - Current session state\n * @returns True if session allows modifications\n */\nexport function isSessionModifiable(state: SessionState): boolean {\n    return state === SessionState.ACTIVE || state === SessionState.PAUSED;\n}\n\n/**\n * Check if session is active and ready for operations\n * \n * @param state - Current session state\n * @returns True if session is active\n */\nexport function isSessionActive(state: SessionState): boolean {\n    return state === SessionState.ACTIVE;\n} ","import type {\n    Session,\n    SessionConfig,\n    SessionMetadata,\n    SessionStats\n} from '../types/session';\nimport { SessionState } from '../types/session';\nimport type { ChatInstance, ChatConfig } from '../types/chat';\nimport { ChatInstanceImpl } from '../chat/chat-instance';\nimport { v4 as uuidv4 } from 'uuid';\n\n// Import state machine and utilities\nimport {\n    attemptTransition,\n    isActiveState,\n    allowsModifications,\n    isFinalState\n} from '../state/session-state-machine';\nimport {\n    SessionErrorKey,\n    SessionOperationError,\n    StateTransitionError\n} from '../constants/error-messages';\nimport {\n    mergeWithDefaults,\n    createInitialMetadata,\n    updateTimestamps,\n    calculateSessionStats,\n    findNextActiveChat,\n    wouldExceedChatLimit,\n    validateSessionConfig,\n    isSessionModifiable\n} from '../utils/session-utils';\n\n/**\n * Improved Session Implementation\n * \n * Uses state machine pattern and pure functions for better maintainability\n */\nexport class SessionImpl implements Session {\n    public readonly metadata: SessionMetadata;\n    public readonly config: SessionConfig;\n\n    private readonly _chats: Map<string, ChatInstance> = new Map();\n    private _activeChatId?: string;\n    private readonly _startTime: Date;\n\n    constructor(\n        userId: string,\n        config: SessionConfig = {}\n    ) {\n        // Validate configuration\n        const validation = validateSessionConfig(config);\n        if (!validation.valid) {\n            throw new SessionOperationError(SessionErrorKey.INVALID_CONFIG, {\n                reason: validation.errors.map(e => e.message).join(', ')\n            });\n        }\n\n        this._startTime = new Date();\n        const mergedConfig = mergeWithDefaults(config);\n\n        this.config = mergedConfig;\n        this.metadata = createInitialMetadata(uuidv4(), userId, mergedConfig);\n    }\n\n    // Chat Management - using pure functions\n    async createNewChat(config?: ChatConfig): Promise<ChatInstance> {\n        this._ensureOperationAllowed('createNewChat');\n        this._updateLastAccessed();\n\n        if (wouldExceedChatLimit(this.metadata.chatCount, this.config.maxChats!)) {\n            throw new SessionOperationError(SessionErrorKey.MAX_CHATS_REACHED, {\n                maxChats: this.config.maxChats\n            });\n        }\n\n        const chat = new ChatInstanceImpl(\n            this.metadata.sessionId,\n            config,\n            config?.robotaConfig\n        );\n\n        this._chats.set(chat.metadata.chatId, chat);\n        this.metadata.chatCount++;\n\n        // Auto-activate first chat\n        if (this.metadata.chatCount === 1) {\n            await this._setActiveChat(chat.metadata.chatId);\n        }\n\n        return chat;\n    }\n\n    getChat(chatId: string): ChatInstance | undefined {\n        return this._chats.get(chatId);\n    }\n\n    getAllChats(): ChatInstance[] {\n        return Array.from(this._chats.values());\n    }\n\n    async switchToChat(chatId: string): Promise<void> {\n        this._ensureOperationAllowed('switchToChat');\n        this._updateLastAccessed();\n\n        const chat = this._chats.get(chatId);\n        if (!chat) {\n            throw new SessionOperationError(SessionErrorKey.CHAT_NOT_FOUND, { chatId });\n        }\n\n        await this._setActiveChat(chatId);\n    }\n\n    async removeChat(chatId: string): Promise<void> {\n        this._ensureOperationAllowed('removeChat');\n        this._updateLastAccessed();\n\n        const chat = this._chats.get(chatId);\n        if (!chat) {\n            throw new SessionOperationError(SessionErrorKey.CHAT_NOT_FOUND, { chatId });\n        }\n\n        // Determine next active chat using pure function\n        const nextActiveChatId = findNextActiveChat(this._chats, chatId, this._activeChatId);\n\n        // Remove the chat\n        this._chats.delete(chatId);\n        this.metadata.chatCount--;\n\n        // Update active chat\n        if (nextActiveChatId) {\n            await this._setActiveChat(nextActiveChatId);\n        } else {\n            this._activeChatId = undefined;\n            this.metadata.activeChatId = undefined;\n        }\n    }\n\n    getActiveChat(): ChatInstance | undefined {\n        if (!this._activeChatId) {\n            return undefined;\n        }\n        return this._chats.get(this._activeChatId);\n    }\n\n    // Session State Management - using state machine\n    async pause(): Promise<void> {\n        await this._transitionState(SessionState.PAUSED, 'pause');\n        this._deactivateAllChats();\n    }\n\n    async resume(): Promise<void> {\n        await this._transitionState(SessionState.ACTIVE, 'resume');\n\n        // Reactivate current chat if available\n        if (this._activeChatId) {\n            const activeChat = this._chats.get(this._activeChatId);\n            if (activeChat) {\n                activeChat.activate();\n            }\n        }\n    }\n\n    async archive(): Promise<void> {\n        await this._transitionState(SessionState.ARCHIVED, 'archive');\n        this._deactivateAllChats();\n    }\n\n    async terminate(): Promise<void> {\n        await this._transitionState(SessionState.TERMINATED, 'terminate');\n\n        // Clean up all resources\n        this._deactivateAllChats();\n        this._chats.clear();\n        this._activeChatId = undefined;\n        this.metadata.activeChatId = undefined;\n        this.metadata.chatCount = 0;\n    }\n\n    // Lifecycle\n    async save(): Promise<void> {\n        this.metadata.updatedAt = new Date();\n        // TODO: Implement persistence layer\n    }\n\n    async load(): Promise<void> {\n        // TODO: Implement persistence layer\n    }\n\n    // Utils - using pure functions\n    getState(): SessionState {\n        return this.metadata.state;\n    }\n\n    updateConfig(config: Partial<SessionConfig>): void {\n        this._ensureOperationAllowed('updateConfig');\n\n        // Validate new configuration\n        const validation = validateSessionConfig(config);\n        if (!validation.valid) {\n            throw new SessionOperationError(SessionErrorKey.INVALID_CONFIG, {\n                reason: validation.errors.map(e => e.message).join(', ')\n            });\n        }\n\n        Object.assign(this.config, config);\n\n        if (config.sessionName) {\n            this.metadata.sessionName = config.sessionName;\n        }\n        if (config.description !== undefined) {\n            this.metadata.description = config.description;\n        }\n\n        this._updateLastAccessed();\n    }\n\n    getStats(): SessionStats {\n        return calculateSessionStats(\n            this.metadata,\n            this.getAllChats(),\n            this._startTime\n        );\n    }\n\n    // Private helper methods\n    private _updateLastAccessed(): void {\n        Object.assign(this.metadata, updateTimestamps(this.metadata));\n    }\n\n    private async _transitionState(targetState: SessionState, action: string): Promise<void> {\n        const result = attemptTransition(this.metadata.state, targetState, action);\n\n        if (!result.success) {\n            throw new StateTransitionError(this.metadata.state, targetState, action);\n        }\n\n        this.metadata.state = targetState;\n        this._updateLastAccessed();\n    }\n\n    private async _setActiveChat(chatId: string): Promise<void> {\n        // Deactivate current active chat\n        if (this._activeChatId) {\n            const currentChat = this._chats.get(this._activeChatId);\n            if (currentChat) {\n                currentChat.deactivate();\n            }\n        }\n\n        // Activate new chat\n        const newChat = this._chats.get(chatId);\n        if (newChat && isActiveState(this.metadata.state)) {\n            newChat.activate();\n        }\n\n        this._activeChatId = chatId;\n        this.metadata.activeChatId = chatId;\n    }\n\n    private _deactivateAllChats(): void {\n        for (const chat of this._chats.values()) {\n            chat.deactivate();\n        }\n    }\n\n    private _ensureOperationAllowed(operation: string): void {\n        if (isFinalState(this.metadata.state)) {\n            throw new SessionOperationError(SessionErrorKey.SESSION_TERMINATED);\n        }\n\n        if (!isSessionModifiable(this.metadata.state)) {\n            throw new SessionOperationError(SessionErrorKey.OPERATION_NOT_ALLOWED, {\n                operation,\n                currentState: this.metadata.state\n            });\n        }\n    }\n} ","import type {\n    SessionManager,\n    SessionManagerConfig,\n    SessionManagerStats\n} from '../types/session-manager';\nimport type { Session, SessionConfig } from '../types/session';\nimport { SessionImpl } from '../session/session-impl';\nimport { v4 as uuidv4 } from 'uuid';\n\nexport class SessionManagerImpl implements SessionManager {\n    private sessions: Map<string, Session> = new Map();\n    private userSessions: Map<string, Set<string>> = new Map();\n    private config: SessionManagerConfig;\n\n    constructor(config: SessionManagerConfig = {}) {\n        this.config = {\n            maxActiveSessions: config.maxActiveSessions || 10, // Reduced from 50 to 10\n            autoCleanup: config.autoCleanup ?? true,\n            cleanupInterval: config.cleanupInterval || 3600000, // Changed to 1 hour\n            memoryThreshold: config.memoryThreshold || 100, // Reduced to 100MB\n            storage: config.storage\n        };\n    }\n\n    async createSession(userId: string, config?: SessionConfig): Promise<Session> {\n        // Check user session count limit\n        const userSessionIds = this.userSessions.get(userId) || new Set();\n        if (userSessionIds.size >= this.config.maxActiveSessions!) {\n            throw new Error(`Maximum session count (${this.config.maxActiveSessions}) reached for user ${userId}`);\n        }\n\n        // Create new session\n        const session = new SessionImpl(userId, config);\n\n        // Save\n        this.sessions.set(session.metadata.sessionId, session);\n\n        // Add to user session list\n        if (!this.userSessions.has(userId)) {\n            this.userSessions.set(userId, new Set());\n        }\n        this.userSessions.get(userId)!.add(session.metadata.sessionId);\n\n        return session;\n    }\n\n    getSession(sessionId: string): Session | undefined {\n        return this.sessions.get(sessionId);\n    }\n\n    getUserSessions(userId: string): Session[] {\n        const sessionIds = this.userSessions.get(userId) || new Set();\n        const sessions: Session[] = [];\n\n        for (const sessionId of sessionIds) {\n            const session = this.sessions.get(sessionId);\n            if (session) {\n                sessions.push(session);\n            }\n        }\n\n        return sessions;\n    }\n\n    async removeSession(sessionId: string): Promise<void> {\n        const session = this.sessions.get(sessionId);\n        if (!session) {\n            return;\n        }\n\n        // End session\n        await session.terminate();\n\n        // Remove from storage\n        this.sessions.delete(sessionId);\n\n        // Remove from user session list\n        const userSessionIds = this.userSessions.get(session.metadata.userId);\n        if (userSessionIds) {\n            userSessionIds.delete(sessionId);\n            if (userSessionIds.size === 0) {\n                this.userSessions.delete(session.metadata.userId);\n            }\n        }\n    }\n\n    async pauseSession(sessionId: string): Promise<void> {\n        const session = this.sessions.get(sessionId);\n        if (session) {\n            await session.pause();\n        }\n    }\n\n    async resumeSession(sessionId: string): Promise<void> {\n        const session = this.sessions.get(sessionId);\n        if (session) {\n            await session.resume();\n        }\n    }\n\n    async archiveSession(sessionId: string): Promise<void> {\n        const session = this.sessions.get(sessionId);\n        if (session) {\n            await session.archive();\n        }\n    }\n\n    getActiveSessionCount(): number {\n        let count = 0;\n        for (const session of this.sessions.values()) {\n            if (session.getState() === 'active') {\n                count++;\n            }\n        }\n        return count;\n    }\n\n    // Simplified cleanup logic\n    async cleanup(): Promise<void> {\n        if (!this.config.autoCleanup) {\n            return;\n        }\n\n        // Remove sessions inactive for more than 7 days (reduced from 30 days)\n        const sevenDaysAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000);\n        const sessionsToRemove: string[] = [];\n\n        for (const [sessionId, session] of this.sessions) {\n            if (session.metadata.lastAccessedAt < sevenDaysAgo) {\n                sessionsToRemove.push(sessionId);\n            }\n        }\n\n        for (const sessionId of sessionsToRemove) {\n            await this.removeSession(sessionId);\n        }\n    }\n\n    async shutdown(): Promise<void> {\n        // Clean up all sessions\n        for (const session of this.sessions.values()) {\n            await session.terminate();\n        }\n\n        this.sessions.clear();\n        this.userSessions.clear();\n    }\n\n    // Simplified statistics\n    getStats(): SessionManagerStats {\n        let activeSessions = 0;\n        let pausedSessions = 0;\n        let archivedSessions = 0;\n\n        for (const session of this.sessions.values()) {\n            switch (session.getState()) {\n                case 'active':\n                    activeSessions++;\n                    break;\n                case 'paused':\n                    pausedSessions++;\n                    break;\n                case 'archived':\n                    archivedSessions++;\n                    break;\n            }\n        }\n\n        return {\n            totalSessions: this.sessions.size,\n            activeSessions,\n            pausedSessions,\n            archivedSessions,\n            memoryUsage: 0 // To be implemented later\n        };\n    }\n} ","import type { SessionInfo } from '../types/core';\n\nexport interface SessionStore {\n    save(session: SessionInfo): Promise<void>;\n    load(sessionId: string): Promise<SessionInfo | null>;\n    delete(sessionId: string): Promise<boolean>;\n    list(userId?: string): Promise<SessionInfo[]>;\n    exists(sessionId: string): Promise<boolean>;\n    clear(): Promise<void>;\n}\n\nexport class BasicSessionStore implements SessionStore {\n    private sessions: Map<string, SessionInfo> = new Map();\n\n    async save(session: SessionInfo): Promise<void> {\n        this.sessions.set(session.id, { ...session });\n    }\n\n    async load(sessionId: string): Promise<SessionInfo | null> {\n        const session = this.sessions.get(sessionId);\n        return session ? { ...session } : null;\n    }\n\n    async delete(sessionId: string): Promise<boolean> {\n        return this.sessions.delete(sessionId);\n    }\n\n    async list(userId?: string): Promise<SessionInfo[]> {\n        const sessions = Array.from(this.sessions.values());\n\n        if (userId) {\n            return sessions.filter(session => session.userId === userId);\n        }\n\n        return sessions;\n    }\n\n    async exists(sessionId: string): Promise<boolean> {\n        return this.sessions.has(sessionId);\n    }\n\n    async clear(): Promise<void> {\n        this.sessions.clear();\n    }\n\n    // Additional utility methods for in-memory store\n    size(): number {\n        return this.sessions.size;\n    }\n\n    getAllSessions(): SessionInfo[] {\n        return Array.from(this.sessions.values());\n    }\n} ","import type { UniversalMessage } from '@robota-sdk/core';\n\nexport interface SystemMessageManager {\n    setSystemPrompt(prompt: string): void;\n    addSystemMessage(content: string): void;\n    getSystemMessages(): UniversalMessage[];\n    clearSystemMessages(): void;\n    hasSystemMessages(): boolean;\n}\n\nexport class SystemMessageManagerImpl implements SystemMessageManager {\n    private systemMessages: UniversalMessage[] = [];\n\n    setSystemPrompt(prompt: string): void {\n        this.systemMessages = [{\n            role: 'system',\n            content: prompt,\n            timestamp: new Date()\n        }];\n    }\n\n    addSystemMessage(content: string): void {\n        this.systemMessages.push({\n            role: 'system',\n            content,\n            timestamp: new Date()\n        });\n    }\n\n    getSystemMessages(): UniversalMessage[] {\n        return [...this.systemMessages];\n    }\n\n    clearSystemMessages(): void {\n        this.systemMessages = [];\n    }\n\n    hasSystemMessages(): boolean {\n        return this.systemMessages.length > 0;\n    }\n} ","// Facade for provider management - delegates to core package\nexport { AIProviderManager } from '@robota-sdk/core';\n\nexport interface IMultiProviderAdapterManager {\n    addProvider(name: string, provider: any): void;\n    getProvider(name: string): any | null;\n    setDefaultProvider(name: string): void;\n    getDefaultProvider(): string | null;\n}\n\n// Simple facade implementation that wraps core functionality\nexport class MultiProviderAdapterManager implements IMultiProviderAdapterManager {\n    private providers: Map<string, any> = new Map();\n    private defaultProvider: string | null = null;\n\n    addProvider(name: string, provider: any): void {\n        this.providers.set(name, provider);\n    }\n\n    getProvider(name: string): any | null {\n        return this.providers.get(name) || null;\n    }\n\n    setDefaultProvider(name: string): void {\n        if (this.providers.has(name)) {\n            this.defaultProvider = name;\n        }\n    }\n\n    getDefaultProvider(): string | null {\n        return this.defaultProvider;\n    }\n} ","// Facade for conversation service - leverages core package\nimport type { UniversalMessage } from '@robota-sdk/core';\nimport { SimpleConversationHistory } from '../conversation-history/simple-conversation-history';\n\nexport interface ConversationService {\n    addMessage(message: UniversalMessage): void;\n    getMessages(): UniversalMessage[];\n    getConversationSummary(): string;\n    clearConversation(): void;\n}\n\n// Lightweight implementation focusing on session-specific conversation management\nexport class ConversationServiceImpl implements ConversationService {\n    private conversationHistory: SimpleConversationHistory;\n\n    constructor(maxMessages?: number) {\n        this.conversationHistory = new SimpleConversationHistory(maxMessages);\n    }\n\n    addMessage(message: UniversalMessage): void {\n        this.conversationHistory.addMessage(message);\n    }\n\n    getMessages(): UniversalMessage[] {\n        return this.conversationHistory.getMessages();\n    }\n\n    getConversationSummary(): string {\n        const messages = this.conversationHistory.getMessages();\n        const messageCount = messages.length;\n        const lastMessage = this.conversationHistory.getLastMessage();\n\n        return `Conversation with ${messageCount} messages. Last message: ${lastMessage ? `${lastMessage.role} - ${lastMessage.content?.slice(0, 50) || 'No content'}...` : 'None'\n            }`;\n    }\n\n    clearConversation(): void {\n        this.conversationHistory.clear();\n    }\n} ","import { SimpleLoggerImpl, Logger } from './simple-logger';\n\nexport class LoggerFactory {\n    private static instances: Map<string, Logger> = new Map();\n\n    static getLogger(name: string): Logger {\n        if (!this.instances.has(name)) {\n            this.instances.set(name, new SimpleLoggerImpl(name));\n        }\n        return this.instances.get(name)!;\n    }\n\n    static createLogger(name: string): Logger {\n        return new SimpleLoggerImpl(name);\n    }\n\n    static clearCache(): void {\n        this.instances.clear();\n    }\n} ","import { SimpleMetricsCollector, MetricsCollector } from './simple-metrics';\n\nexport class MetricsCollectorFactory {\n    private static instances: Map<string, MetricsCollector> = new Map();\n\n    static getCollector(name: string): MetricsCollector {\n        if (!this.instances.has(name)) {\n            this.instances.set(name, new SimpleMetricsCollector());\n        }\n        return this.instances.get(name)!;\n    }\n\n    static createCollector(): MetricsCollector {\n        return new SimpleMetricsCollector();\n    }\n\n    static clearCache(): void {\n        this.instances.clear();\n    }\n\n    static getAllMetrics(): Record<string, any> {\n        const allMetrics: Record<string, any> = {};\n\n        for (const [name, collector] of this.instances) {\n            allMetrics[name] = collector.getMetrics();\n        }\n\n        return allMetrics;\n    }\n} ","import {\n    ConversationHistory,\n    UniversalMessage,\n    UniversalMessageRole\n} from '@robota-sdk/core';\nimport type { EnhancedConversationHistory, ConfigurationChange } from '../types/chat';\nimport { v4 as uuidv4 } from 'uuid';\n\nexport class EnhancedConversationHistoryImpl implements EnhancedConversationHistory {\n    private messages: UniversalMessage[] = [];\n    public configurations: ConfigurationChange[] = [];\n    private maxHistorySize: number;\n\n    constructor(maxHistorySize: number = 1000) {\n        this.maxHistorySize = maxHistorySize;\n    }\n\n    // ConversationHistory interface implementation\n    addMessage(message: UniversalMessage): void {\n        this.messages.push(message);\n        this._enforceMaxSize();\n    }\n\n    addUserMessage(content: string, metadata?: Record<string, any>): void {\n        this.addMessage({\n            role: 'user',\n            content,\n            timestamp: new Date(),\n            metadata\n        });\n    }\n\n    addAssistantMessage(content: string, toolCalls?: { id: string; type: \"function\"; function: { name: string; arguments: string; }; }[], metadata?: Record<string, any>): void {\n        this.addMessage({\n            role: 'assistant',\n            content,\n            toolCalls,\n            timestamp: new Date(),\n            metadata\n        });\n    }\n\n    addSystemMessage(content: string, metadata?: Record<string, any>): void {\n        this.addMessage({\n            role: 'system',\n            content,\n            timestamp: new Date(),\n            metadata\n        });\n    }\n\n    addToolMessage(toolCallId: string, content: string, toolName: string, metadata?: Record<string, any>): void {\n        this.addMessage({\n            role: 'tool',\n            content,\n            name: toolName,\n            toolCallId,\n            timestamp: new Date(),\n            metadata\n        });\n    }\n\n    addToolMessageWithId(content: string, toolCallId: string, toolName: string, metadata?: Record<string, any>): void {\n        this.addMessage({\n            role: 'tool',\n            content,\n            name: toolName,\n            toolCallId,\n            timestamp: new Date(),\n            metadata\n        });\n    }\n\n    getMessages(): UniversalMessage[] {\n        return [...this.messages];\n    }\n\n    getMessagesByRole(role: UniversalMessageRole): UniversalMessage[] {\n        return this.messages.filter(msg => msg.role === role);\n    }\n\n    getRecentMessages(count: number): UniversalMessage[] {\n        return this.messages.slice(-count);\n    }\n\n    clear(): void {\n        this.messages = [];\n        this.configurations = [];\n    }\n\n    getMessageCount(): number {\n        return this.messages.length;\n    }\n\n    // Enhanced functionality for configuration tracking\n    addConfigurationChange(change: ConfigurationChange): void {\n        this.configurations.push({\n            ...change,\n            id: change.id || uuidv4(),\n            timestamp: change.timestamp || new Date()\n        });\n    }\n\n    getConfigurationHistory(): ConfigurationChange[] {\n        return [...this.configurations];\n    }\n\n    clearConfigurationHistory(): void {\n        this.configurations = [];\n    }\n\n    // Additional utility methods\n    updateMessage(index: number, content: string): boolean {\n        if (index >= 0 && index < this.messages.length) {\n            this.messages[index] = {\n                ...this.messages[index],\n                content,\n                timestamp: new Date()\n            };\n            return true;\n        }\n        return false;\n    }\n\n    removeMessage(index: number): boolean {\n        if (index >= 0 && index < this.messages.length) {\n            this.messages.splice(index, 1);\n            return true;\n        }\n        return false;\n    }\n\n    getConfigurationChangeCount(): number {\n        return this.configurations.length;\n    }\n\n    // Export/Import functionality\n    export(): string {\n        return JSON.stringify({\n            messages: this.messages,\n            configurations: this.configurations,\n            exportedAt: new Date()\n        }, null, 2);\n    }\n\n    import(data: string): void {\n        try {\n            const parsed = JSON.parse(data);\n            if (parsed.messages && Array.isArray(parsed.messages)) {\n                this.messages = parsed.messages;\n            }\n            if (parsed.configurations && Array.isArray(parsed.configurations)) {\n                this.configurations = parsed.configurations;\n            }\n        } catch (error) {\n            throw new Error(`Failed to import conversation history: ${error}`);\n        }\n    }\n\n    // Memory management\n    getMemoryUsage(): number {\n        const messagesSize = JSON.stringify(this.messages).length;\n        const configurationsSize = JSON.stringify(this.configurations).length;\n        return (messagesSize + configurationsSize) / (1024 * 1024); // MB\n    }\n\n    private _enforceMaxSize(): void {\n        if (this.messages.length > this.maxHistorySize) {\n            // Remove oldest messages, keeping system messages\n            const systemMessages = this.messages.filter(m => m.role === 'system');\n            const otherMessages = this.messages.filter(m => m.role !== 'system');\n\n            // Keep recent messages within limit\n            const messagesToKeep = this.maxHistorySize - systemMessages.length;\n            const recentMessages = otherMessages.slice(-messagesToKeep);\n\n            this.messages = [...systemMessages, ...recentMessages];\n        }\n    }\n} ","import { v4 as uuidv4 } from 'uuid';\n\nexport function generateId(): string {\n    return uuidv4();\n} "]}