mirror of
https://github.com/tiennm99/goclaw.git
synced 2026-07-04 17:08:05 +00:00
cd2e407b29
sanitizeHistory now returns dropped count so callers know when orphaned tool_use/tool_result messages were removed. When orphans are found in buildMessages, the full session history is sanitized and persisted, preventing repeated warnings on every request. - Add SetHistory() to SessionStore interface and both implementations - Adapt memoryflush caller to new two-return signature - Change sanitize log level from Warn to Debug
54 lines
1.1 KiB
Go
54 lines
1.1 KiB
Go
package pg
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/nextlevelbuilder/goclaw/internal/providers"
|
|
)
|
|
|
|
func (s *PGSessionStore) TruncateHistory(key string, keepLast int) {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
if data, ok := s.cache[key]; ok {
|
|
if keepLast <= 0 {
|
|
data.Messages = []providers.Message{}
|
|
} else if len(data.Messages) > keepLast {
|
|
data.Messages = data.Messages[len(data.Messages)-keepLast:]
|
|
}
|
|
data.Updated = time.Now()
|
|
}
|
|
}
|
|
|
|
func (s *PGSessionStore) SetHistory(key string, msgs []providers.Message) {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
if data, ok := s.cache[key]; ok {
|
|
data.Messages = msgs
|
|
data.Updated = time.Now()
|
|
}
|
|
}
|
|
|
|
func (s *PGSessionStore) Reset(key string) {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
if data, ok := s.cache[key]; ok {
|
|
data.Messages = []providers.Message{}
|
|
data.Summary = ""
|
|
data.Updated = time.Now()
|
|
}
|
|
}
|
|
|
|
func (s *PGSessionStore) Delete(key string) error {
|
|
s.mu.Lock()
|
|
delete(s.cache, key)
|
|
s.mu.Unlock()
|
|
|
|
// Clean up associated media files before deleting from DB.
|
|
if s.OnDelete != nil {
|
|
s.OnDelete(key)
|
|
}
|
|
|
|
_, err := s.db.Exec("DELETE FROM sessions WHERE session_key = $1", key)
|
|
return err
|
|
}
|