{"version":3,"sources":["/home/mkabumattar/work/withrawi/rawi/dist/chunk-EZDARBSP.cjs","../src/core/database/manager.ts"],"names":["DatabaseManager","#adapter","#initialized","#initPromise","DatabaseAdapter","debugLog","err","#ensureInitialized","error","profile","title","type","sessionId","options","role","content","provider","model","temperature","maxTokens","metadata","limit","sessions","errorMessage","initError","initErrorMessage","days","uuidv4"],"mappings":"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","file":"/home/mkabumattar/work/withrawi/rawi/dist/chunk-EZDARBSP.cjs","sourcesContent":[null,"import {v4 as uuidv4} from 'uuid';\nimport {\n  type ChatHistoryOptions,\n  type ChatMessage,\n  type ChatSession,\n  debugLog,\n  type HistoryStats,\n} from '../shared/index.js';\nimport {DatabaseAdapter} from './adapter.js';\n\nexport class DatabaseManager {\n  #adapter: DatabaseAdapter;\n  #initialized = false;\n  #initPromise: Promise<void> | null = null;\n\n  constructor() {\n    this.#adapter = new DatabaseAdapter();\n\n    this.#initPromise = this.#adapter\n      .ensureDatabaseInitialized()\n      .then(() => {\n        this.#initialized = true;\n        debugLog('Database manager initialization complete');\n      })\n      .catch((err) => {\n        console.error(\n          'Failed to initialize database during construction:',\n          err,\n        );\n      });\n  }\n\n  async #ensureInitialized(): Promise<void> {\n    if (this.#initialized) {\n      return;\n    }\n\n    if (this.#initPromise) {\n      try {\n        await this.#initPromise;\n        return;\n      } catch (_error) {\n        debugLog('Initial initialization failed, trying again');\n      }\n    }\n\n    try {\n      debugLog('Explicitly initializing database');\n      await this.#adapter.ensureDatabaseInitialized();\n      this.#initialized = true;\n    } catch (error) {\n      console.error('Failed to initialize database:', error);\n      throw new Error('Database initialization failed');\n    }\n  }\n\n  async createSession(\n    profile: string,\n    title?: string,\n    type: 'ask' | 'chat' | 'exec' = 'ask',\n  ): Promise<string> {\n    await this.#ensureInitialized();\n    return this.#adapter.createSession(profile, title, type);\n  }\n\n  async getSession(sessionId: string): Promise<ChatSession | null> {\n    await this.#ensureInitialized();\n    return this.#adapter.getSession(sessionId);\n  }\n\n  async getSessions(options: ChatHistoryOptions = {}): Promise<ChatSession[]> {\n    await this.#ensureInitialized();\n    return this.#adapter.getSessions(options);\n  }\n\n  async deleteSession(sessionId: string): Promise<boolean> {\n    await this.#ensureInitialized();\n    return this.#adapter.deleteSession(sessionId);\n  }\n\n  async updateSessionTitle(sessionId: string, title: string): Promise<boolean> {\n    await this.#ensureInitialized();\n    return this.#adapter.updateSessionTitle(sessionId, title);\n  }\n\n  async addMessage(\n    sessionId: string,\n    role: 'user' | 'assistant' | 'system',\n    content: string,\n    provider: string,\n    model: string,\n    temperature?: number,\n    maxTokens?: number,\n    metadata?: any,\n  ): Promise<string> {\n    await this.#ensureInitialized();\n    return this.#adapter.addMessage(\n      sessionId,\n      role,\n      content,\n      provider,\n      model,\n      temperature,\n      maxTokens,\n      metadata,\n    );\n  }\n\n  async getMessages(sessionId: string, limit?: number): Promise<ChatMessage[]> {\n    await this.#ensureInitialized();\n    return this.#adapter.getMessages(sessionId, limit);\n  }\n\n  async searchMessages(\n    options: ChatHistoryOptions = {},\n  ): Promise<ChatMessage[]> {\n    await this.#ensureInitialized();\n    return this.#adapter.searchMessages(options);\n  }\n\n  async getStats(profile?: string): Promise<HistoryStats> {\n    await this.#ensureInitialized();\n    return this.#adapter.getStats(profile);\n  }\n\n  async close(): Promise<void> {\n    await this.#adapter.close();\n  }\n\n  async getCurrentSession(\n    profile: string,\n    type: 'ask' | 'chat' | 'exec' = 'ask',\n  ): Promise<string> {\n    try {\n      await this.#ensureInitialized();\n\n      const sessions = await this.#adapter.getSessions({profile, limit: 1});\n\n      if (sessions.length > 0) {\n        return sessions[0].id;\n      }\n\n      debugLog('No existing sessions found, creating a new one');\n      return this.createSession(profile, undefined, type);\n    } catch (error: unknown) {\n      const errorMessage =\n        error instanceof Error ? error.message : 'Unknown error';\n      debugLog('Error getting current session:', errorMessage);\n\n      try {\n        debugLog(\n          'Attempting to ensure database is initialized before creating new session',\n        );\n        await this.#adapter.ensureDatabaseInitialized();\n        this.#initialized = true;\n\n        debugLog('Creating new session');\n        return this.createSession(profile, undefined, type);\n      } catch (initError: unknown) {\n        const initErrorMessage =\n          initError instanceof Error ? initError.message : 'Unknown error';\n        console.error(\n          'Serious error: Cannot initialize database or create session normally:',\n          initErrorMessage,\n        );\n        debugLog('Attempting emergency session creation');\n\n        return this.createEmergencySession(profile, type);\n      }\n    }\n  }\n\n  async deleteOldSessions(profile: string, days: number): Promise<number> {\n    await this.#ensureInitialized();\n    return this.#adapter.deleteOldSessions(profile, days);\n  }\n\n  async vacuum(): Promise<void> {\n    await this.#ensureInitialized();\n    return this.#adapter.vacuum();\n  }\n\n  async exportChatHistory(options: ChatHistoryOptions = {}): Promise<{\n    sessions: ChatSession[];\n    messages: Record<string, ChatMessage[]>;\n    stats: HistoryStats;\n  }> {\n    await this.#ensureInitialized();\n    return this.#adapter.exportChatHistory(options);\n  }\n\n  async createEmergencySession(\n    profile: string,\n    type: 'ask' | 'chat' | 'exec' = 'ask',\n  ): Promise<string> {\n    try {\n      debugLog('Creating emergency session without database checks');\n      return this.#adapter.createSession(profile, undefined, type);\n    } catch (_error) {\n      const sessionId = uuidv4();\n      debugLog('Generated emergency session ID directly:', sessionId);\n      return sessionId;\n    }\n  }\n}\n"]}