Elysia-Suite's picture
Upload 24 files
d58d97b verified
raw
history blame
3.45 kB
/*
ELYSIA CODE COMPANION v1.2.2 - Database Layer
IndexedDB via Dexie.js for chat history & cache
*/
import Utils from "./utils.js";
// Initialize Dexie Database
const db = new Dexie("ElysiaCodeCompanion");
db.version(1).stores({
chats: "++id, timestamp, model",
fileCache: "path, content, timestamp"
});
const DB = {
// Chat History
async saveChat(userMessage, assistantMessage, context = {}) {
try {
return await db.chats.add({
timestamp: Date.now(),
userMessage,
assistantMessage,
model: context.model || "unknown",
folderName: context.folderName || null,
fileCount: context.fileCount || 0
});
} catch (err) {
console.error("Failed to save chat:", err);
return null;
}
},
async getChats(limit = 50) {
try {
return await db.chats.orderBy("timestamp").reverse().limit(limit).toArray();
} catch (err) {
console.error("Failed to get chats:", err);
return [];
}
},
async clearChats() {
try {
await db.chats.clear();
Utils.toast.success("Chat history cleared");
return true;
} catch (err) {
console.error("Failed to clear chats:", err);
Utils.toast.error("Failed to clear chat history");
return false;
}
},
async getChat(id) {
try {
return await db.chats.get(id);
} catch (err) {
console.error("Failed to get chat:", err);
return null;
}
},
// File Cache - CURRENTLY UNUSED (FileSystem uses in-memory Map cache instead)
// Kept for potential future feature: persistent cache across browser sessions
// TODO: Consider using this for larger projects or implement cache strategy toggle
/*
async cacheFile(path, content) {
try {
await db.fileCache.put({
path,
content,
timestamp: Date.now()
});
return true;
} catch (err) {
console.error("Failed to cache file:", err);
return false;
}
},
async getCachedFile(path) {
try {
const cached = await db.fileCache.get(path);
// Cache expires after 1 hour
if (cached && Date.now() - cached.timestamp < 3600000) {
return cached.content;
}
return null;
} catch (err) {
console.error("Failed to get cached file:", err);
return null;
}
},
async clearFileCache() {
try {
await db.fileCache.clear();
return true;
} catch (err) {
console.error("Failed to clear file cache:", err);
return false;
}
},
*/
// Stats
async getStats() {
try {
const chatCount = await db.chats.count();
const cacheCount = await db.fileCache.count();
return { chatCount, cacheCount };
} catch (err) {
console.error("Failed to get stats:", err);
return { chatCount: 0, cacheCount: 0 };
}
}
};
export default DB;