Files
goclaw/internal/store/pg/sessions_ops.go
T
Viet Tran cd2e407b29 fix: auto-persist cleaned history when orphan tool messages detected (#128)
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
2026-03-11 07:57:54 +07:00

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
}