File size: 3,095 Bytes
6a50e97
d8e039b
6a50e97
 
 
 
d8e039b
6a50e97
 
 
d8e039b
6a50e97
 
 
 
 
 
 
 
 
 
 
 
 
 
d8e039b
6a50e97
d8e039b
6a50e97
 
d8e039b
6a50e97
 
 
 
d8e039b
 
6a50e97
 
 
d8e039b
6a50e97
 
d8e039b
 
6a50e97
 
d8e039b
 
6a50e97
 
d8e039b
6a50e97
d8e039b
6a50e97
d8e039b
6a50e97
d8e039b
 
6a50e97
 
 
d8e039b
6a50e97
 
d8e039b
6a50e97
 
 
 
 
d8e039b
6a50e97
 
 
 
 
 
 
 
 
 
 
 
d8e039b
6a50e97
 
 
d8e039b
 
6a50e97
 
 
d8e039b
6a50e97
 
 
d8e039b
 
6a50e97
 
 
d8e039b
6a50e97
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import { ChatSession, Message } from '@/types/chat'

const STORAGE_KEYS = {
  sessions: 'edge-llm-sessions',
  currentSession: 'edge-llm-current-session'
}

function generateId(): string {
  return Math.random().toString(36).substring(2) + Date.now().toString(36)
}

function generateMessageId(): string {
  return generateId()
}

class ChatStorageManager {
  getAllSessions(): ChatSession[] {
    const stored = localStorage.getItem(STORAGE_KEYS.sessions)
    return stored ? JSON.parse(stored) : []
  }

  getSession(sessionId: string): ChatSession | null {
    const sessions = this.getAllSessions()
    return sessions.find(s => s.id === sessionId) || null
  }

  createSession(title?: string, model?: string, systemPrompt?: string): ChatSession {
    const newSession: ChatSession = {
      id: generateId(),
      title: title || `New Chat ${new Date().toLocaleString()}`,
      messages: [],
      model,
      systemPrompt,
      createdAt: Date.now(),
      updatedAt: Date.now()
    }

    const sessions = this.getAllSessions()
    sessions.unshift(newSession)
    localStorage.setItem(STORAGE_KEYS.sessions, JSON.stringify(sessions))
    
    return newSession
  }

  updateSession(sessionId: string, updates: Partial<ChatSession>): void {
    const sessions = this.getAllSessions()
    const sessionIndex = sessions.findIndex(s => s.id === sessionId)
    
    if (sessionIndex !== -1) {
      sessions[sessionIndex] = {
        ...sessions[sessionIndex],
        ...updates,
        updatedAt: Date.now()
      }
      localStorage.setItem(STORAGE_KEYS.sessions, JSON.stringify(sessions))
    }
  }

  deleteSession(sessionId: string): void {
    const sessions = this.getAllSessions()
    const filtered = sessions.filter(s => s.id !== sessionId)
    localStorage.setItem(STORAGE_KEYS.sessions, JSON.stringify(filtered))
    
    if (this.getCurrentSessionId() === sessionId) {
      localStorage.removeItem(STORAGE_KEYS.currentSession)
    }
  }

  addMessageToSession(sessionId: string, message: Omit<Message, 'id' | 'timestamp'>): void {
    const sessions = this.getAllSessions()
    const sessionIndex = sessions.findIndex(s => s.id === sessionId)
    
    if (sessionIndex !== -1) {
      const newMessage: Message = {
        ...message,
        id: generateMessageId(),
        timestamp: Date.now()
      }
      
      sessions[sessionIndex].messages.push(newMessage)
      sessions[sessionIndex].updatedAt = Date.now()
      localStorage.setItem(STORAGE_KEYS.sessions, JSON.stringify(sessions))
    }
  }

  getCurrentSessionId(): string | null {
    return localStorage.getItem(STORAGE_KEYS.currentSession)
  }

  getCurrentSession(): ChatSession | null {
    const currentId = this.getCurrentSessionId()
    return currentId ? this.getSession(currentId) : null
  }

  setCurrentSession(sessionId: string): void {
    localStorage.setItem(STORAGE_KEYS.currentSession, sessionId)
  }

  clear(): void {
    localStorage.removeItem(STORAGE_KEYS.sessions)
    localStorage.removeItem(STORAGE_KEYS.currentSession)
  }
}

export const chatStorage = new ChatStorageManager()