mirror of
https://github.com/aaif-goose/goose.git
synced 2026-07-03 14:10:03 +02:00
77 lines
1.9 KiB
TypeScript
77 lines
1.9 KiB
TypeScript
interface StoredMessage {
|
|
content: string;
|
|
timestamp: number;
|
|
}
|
|
|
|
const STORAGE_KEY = 'goose-chat-history';
|
|
const MAX_MESSAGES = 500;
|
|
const EXPIRY_DAYS = 30;
|
|
|
|
export class LocalMessageStorage {
|
|
private static getStoredMessages(): StoredMessage[] {
|
|
try {
|
|
const stored = localStorage.getItem(STORAGE_KEY);
|
|
if (!stored) return [];
|
|
|
|
const messages = JSON.parse(stored) as StoredMessage[];
|
|
const now = Date.now();
|
|
const expiryTime = now - EXPIRY_DAYS * 24 * 60 * 60 * 1000;
|
|
|
|
// Filter out expired messages and limit to max count
|
|
const validMessages = messages
|
|
.filter((msg) => msg.timestamp > expiryTime)
|
|
.slice(-MAX_MESSAGES);
|
|
|
|
// If we filtered any messages, update storage
|
|
if (validMessages.length !== messages.length) {
|
|
this.setStoredMessages(validMessages);
|
|
}
|
|
|
|
return validMessages;
|
|
} catch (error) {
|
|
console.error('Error reading message history:', error);
|
|
return [];
|
|
}
|
|
}
|
|
|
|
private static setStoredMessages(messages: StoredMessage[]) {
|
|
try {
|
|
localStorage.setItem(STORAGE_KEY, JSON.stringify(messages));
|
|
} catch (error) {
|
|
console.error('Error saving message history:', error);
|
|
}
|
|
}
|
|
|
|
static addMessage(content: string) {
|
|
if (!content.trim()) return;
|
|
|
|
const messages = this.getStoredMessages();
|
|
const now = Date.now();
|
|
|
|
// Don't add duplicate of last message
|
|
if (messages.length > 0 && messages[messages.length - 1].content === content) {
|
|
return;
|
|
}
|
|
|
|
messages.push({
|
|
content,
|
|
timestamp: now,
|
|
});
|
|
|
|
// Keep only the most recent MAX_MESSAGES
|
|
const validMessages = messages.slice(-MAX_MESSAGES);
|
|
|
|
this.setStoredMessages(validMessages);
|
|
}
|
|
|
|
static getRecentMessages(): string[] {
|
|
return this.getStoredMessages()
|
|
.map((msg) => msg.content)
|
|
.reverse(); // Most recent first
|
|
}
|
|
|
|
static clearHistory() {
|
|
localStorage.removeItem(STORAGE_KEY);
|
|
}
|
|
}
|