rawi
Version:
Rawi (راوي) is the developer-friendly AI CLI that brings the power of 11 major AI providers directly to your terminal. With seamless shell integration, persistent conversations, and 200+ specialized prompt templates, Rawi transforms your command line into
1 lines • 10.8 kB
Source Map (JSON)
{"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"]}