(sessionID string)
| 264 | SessionID: stringFromAny(data["session_id"]), |
| 265 | CreatedAt: floatFromAny(data["created_at"]), |
| 266 | LastUpdated: floatFromAny(data["last_updated"]), |
| 267 | MessageCount: intFromAny(data["message_count"]), |
| 268 | TurnCount: intFromAny(data["turn_count"]), |
| 269 | Pinned: boolFromAny(data["pinned"]), |
| 270 | } |
| 271 | if meta.SessionID == "" { |
| 272 | return nil |
| 273 | } |
| 274 | return meta |
| 275 | } |
| 276 | |
| 277 | func (s *Store) loadSQLiteMessages(sessionID string) []map[string]any { |
| 278 | path := s.sqliteReadPath(sessionID) |
| 279 | if _, err := os.Stat(path); err != nil { |
| 280 | return nil |
| 281 | } |
| 282 | db, err := sql.Open("sqlite", path) |
| 283 | if err != nil { |
| 284 | return nil |
| 285 | } |
| 286 | defer db.Close() |
| 287 | rows, err := db.Query(`SELECT role, content_json FROM messages ORDER BY id`) |
| 288 | if err != nil { |
| 289 | return nil |
| 290 | } |
| 291 | defer rows.Close() |
| 292 | var messages []map[string]any |
| 293 | for rows.Next() { |
| 294 | var role, contentJSON string |
| 295 | if err := rows.Scan(&role, &contentJSON); err != nil { |
| 296 | continue |
| 297 | } |
| 298 | var content any |
| 299 | if err := json.Unmarshal([]byte(contentJSON), &content); err != nil { |
| 300 | continue |
no test coverage detected