Documentation
¶
Index ¶
- Variables
- type Backend
- type Checkpoint
- type FileState
- type FileStateCache
- type FilesystemBackend
- func (b *FilesystemBackend) AppendTranscriptEntries(sessionID types.SessionID, entries []types.TranscriptEntry) error
- func (b *FilesystemBackend) DeleteSession(sessionID types.SessionID) error
- func (b *FilesystemBackend) ListSessions() ([]types.SessionID, error)
- func (b *FilesystemBackend) LoadCheckpoint(sessionID types.SessionID) (*Checkpoint, error)
- func (b *FilesystemBackend) LoadSession(sessionID types.SessionID) (*types.SessionMetadata, error)
- func (b *FilesystemBackend) LoadTranscript(sessionID types.SessionID) ([]types.TranscriptEntry, error)
- func (b *FilesystemBackend) ReplaceTranscript(sessionID types.SessionID, entries []types.TranscriptEntry) error
- func (b *FilesystemBackend) SaveCheckpoint(sessionID types.SessionID, checkpoint *Checkpoint) error
- func (b *FilesystemBackend) SaveSession(sessionID types.SessionID, metadata *types.SessionMetadata) error
- func (b *FilesystemBackend) SearchTranscriptsByContent(needle string, limit int) ([]types.SessionID, error)
- type MemoryBackend
- func (b *MemoryBackend) AppendTranscriptEntries(sessionID types.SessionID, entries []types.TranscriptEntry) error
- func (b *MemoryBackend) DeleteSession(sessionID types.SessionID) error
- func (b *MemoryBackend) ListSessions() ([]types.SessionID, error)
- func (b *MemoryBackend) LoadCheckpoint(sessionID types.SessionID) (*Checkpoint, error)
- func (b *MemoryBackend) LoadSession(sessionID types.SessionID) (*types.SessionMetadata, error)
- func (b *MemoryBackend) LoadTranscript(sessionID types.SessionID) ([]types.TranscriptEntry, error)
- func (b *MemoryBackend) ReplaceTranscript(sessionID types.SessionID, entries []types.TranscriptEntry) error
- func (b *MemoryBackend) SaveCheckpoint(sessionID types.SessionID, checkpoint *Checkpoint) error
- func (b *MemoryBackend) SaveSession(sessionID types.SessionID, metadata *types.SessionMetadata) error
- func (b *MemoryBackend) SearchTranscriptsByContent(needle string, limit int) ([]types.SessionID, error)
- type SQLiteBackend
- func (b *SQLiteBackend) AppendTranscriptEntries(sessionID types.SessionID, entries []types.TranscriptEntry) error
- func (b *SQLiteBackend) Close() error
- func (b *SQLiteBackend) DeleteSession(sessionID types.SessionID) error
- func (b *SQLiteBackend) ListSessions() ([]types.SessionID, error)
- func (b *SQLiteBackend) LoadCheckpoint(sessionID types.SessionID) (*Checkpoint, error)
- func (b *SQLiteBackend) LoadSession(sessionID types.SessionID) (*types.SessionMetadata, error)
- func (b *SQLiteBackend) LoadTranscript(sessionID types.SessionID) ([]types.TranscriptEntry, error)
- func (b *SQLiteBackend) ReplaceTranscript(sessionID types.SessionID, entries []types.TranscriptEntry) error
- func (b *SQLiteBackend) SaveCheckpoint(sessionID types.SessionID, checkpoint *Checkpoint) error
- func (b *SQLiteBackend) SaveSession(sessionID types.SessionID, metadata *types.SessionMetadata) error
- func (b *SQLiteBackend) SearchTranscriptsByContent(needle string, limit int) ([]types.SessionID, error)
- type SessionInfo
- type Store
- func (s *Store) AppendTranscriptEntries(sessionID types.SessionID, entries []types.TranscriptEntry) error
- func (s *Store) AppendTranscriptEntry(sessionID types.SessionID, entry types.TranscriptEntry) error
- func (s *Store) CleanupOldSessions(maxAge int64) (int, error)
- func (s *Store) Close() error
- func (s *Store) DeleteSession(sessionID types.SessionID) error
- func (s *Store) GetAllSessionsInfo() ([]*SessionInfo, error)
- func (s *Store) GetSessionInfo(sessionID types.SessionID) (*SessionInfo, error)
- func (s *Store) ListSessions() ([]types.SessionID, error)
- func (s *Store) LoadCanonicalMessages(sessionID types.SessionID) ([]types.Message, error)
- func (s *Store) LoadCheckpoint(sessionID types.SessionID) (*Checkpoint, error)
- func (s *Store) LoadSession(sessionID types.SessionID) (*types.SessionMetadata, error)
- func (s *Store) LoadTranscript(sessionID types.SessionID) ([]types.TranscriptEntry, error)
- func (s *Store) ReplaceTranscript(sessionID types.SessionID, entries []types.TranscriptEntry) error
- func (s *Store) RestoreSessionState(sessionID types.SessionID) (*types.SessionMetadata, []types.Message, error)
- func (s *Store) SaveCanonicalMessages(sessionID types.SessionID, messages []types.Message) error
- func (s *Store) SaveCheckpoint(sessionID types.SessionID, checkpoint *Checkpoint) error
- func (s *Store) SaveSession(sessionID types.SessionID, metadata *types.SessionMetadata) error
- func (s *Store) SaveSessionState(sessionID types.SessionID, metadata *types.SessionMetadata, ...) error
- func (s *Store) SyncTranscriptMessages(sessionID types.SessionID, previousMessages []types.Message, ...) error
- func (s *Store) UpdateSessionTitle(sessionID types.SessionID, title string) error
Constants ¶
This section is empty.
Variables ¶
var ErrMalformedTranscriptEntry = errors.New("malformed transcript entry")
ErrMalformedTranscriptEntry indicates a persisted transcript entry could not be decoded and the session state cannot be restored safely.
Functions ¶
This section is empty.
Types ¶
type Backend ¶
type Backend interface {
SaveSession(sessionID types.SessionID, metadata *types.SessionMetadata) error
LoadSession(sessionID types.SessionID) (*types.SessionMetadata, error)
DeleteSession(sessionID types.SessionID) error
ListSessions() ([]types.SessionID, error)
AppendTranscriptEntries(sessionID types.SessionID, entries []types.TranscriptEntry) error
ReplaceTranscript(sessionID types.SessionID, entries []types.TranscriptEntry) error
LoadTranscript(sessionID types.SessionID) ([]types.TranscriptEntry, error)
SaveCheckpoint(sessionID types.SessionID, checkpoint *Checkpoint) error
LoadCheckpoint(sessionID types.SessionID) (*Checkpoint, error)
// SearchTranscriptsByContent returns IDs of sessions whose transcript JSON
// contains needle (case-insensitive). limit <= 0 means no cap.
// This replaces the N+1 pattern of ListSessions + LoadTranscript per session.
SearchTranscriptsByContent(needle string, limit int) ([]types.SessionID, error)
}
Backend persists session artifacts independently from the higher-level store logic so Seshat can support filesystem, in-memory, or database-backed implementations behind the same restore/save contract.
type Checkpoint ¶
type Checkpoint struct {
SessionID types.SessionID `json:"session_id"`
TurnNumber int `json:"turn_number"`
MessagesHash string `json:"messages_hash"`
Timestamp int64 `json:"timestamp"`
Metadata map[string]any `json:"metadata,omitempty"`
}
Checkpoint represents a session checkpoint for recovery.
type FileStateCache ¶
type FileStateCache struct {
// contains filtered or unexported fields
}
FileStateCache provides thread-safe file state caching
func NewFileStateCache ¶
func NewFileStateCache() *FileStateCache
NewFileStateCache creates a new file state cache
func (*FileStateCache) Delete ¶
func (c *FileStateCache) Delete(path string)
Delete removes file state from cache
func (*FileStateCache) Get ¶
func (c *FileStateCache) Get(path string) (*FileState, bool)
Get retrieves cached file state
func (*FileStateCache) Set ¶
func (c *FileStateCache) Set(path string, state FileState)
Set stores file state in cache
type FilesystemBackend ¶
type FilesystemBackend struct {
// contains filtered or unexported fields
}
FilesystemBackend stores each session as a directory with metadata, transcript, and checkpoint files.
func NewFilesystemBackend ¶
func NewFilesystemBackend(baseDir string) (*FilesystemBackend, error)
NewFilesystemBackend creates the default filesystem-backed session backend.
func (*FilesystemBackend) AppendTranscriptEntries ¶
func (b *FilesystemBackend) AppendTranscriptEntries(sessionID types.SessionID, entries []types.TranscriptEntry) error
func (*FilesystemBackend) DeleteSession ¶
func (b *FilesystemBackend) DeleteSession(sessionID types.SessionID) error
func (*FilesystemBackend) ListSessions ¶
func (b *FilesystemBackend) ListSessions() ([]types.SessionID, error)
func (*FilesystemBackend) LoadCheckpoint ¶
func (b *FilesystemBackend) LoadCheckpoint(sessionID types.SessionID) (*Checkpoint, error)
func (*FilesystemBackend) LoadSession ¶
func (b *FilesystemBackend) LoadSession(sessionID types.SessionID) (*types.SessionMetadata, error)
func (*FilesystemBackend) LoadTranscript ¶
func (b *FilesystemBackend) LoadTranscript(sessionID types.SessionID) ([]types.TranscriptEntry, error)
func (*FilesystemBackend) ReplaceTranscript ¶
func (b *FilesystemBackend) ReplaceTranscript(sessionID types.SessionID, entries []types.TranscriptEntry) error
func (*FilesystemBackend) SaveCheckpoint ¶
func (b *FilesystemBackend) SaveCheckpoint(sessionID types.SessionID, checkpoint *Checkpoint) error
func (*FilesystemBackend) SaveSession ¶
func (b *FilesystemBackend) SaveSession(sessionID types.SessionID, metadata *types.SessionMetadata) error
func (*FilesystemBackend) SearchTranscriptsByContent ¶
func (b *FilesystemBackend) SearchTranscriptsByContent(needle string, limit int) ([]types.SessionID, error)
SearchTranscriptsByContent scans transcript files for needle (grep-style). This is O(sessions × file_size) but avoids full JSON deserialization.
type MemoryBackend ¶
type MemoryBackend struct {
// contains filtered or unexported fields
}
MemoryBackend is a simple in-memory backend useful for tests and as a reference implementation for future database adapters.
func NewMemoryBackend ¶
func NewMemoryBackend() *MemoryBackend
func (*MemoryBackend) AppendTranscriptEntries ¶
func (b *MemoryBackend) AppendTranscriptEntries(sessionID types.SessionID, entries []types.TranscriptEntry) error
func (*MemoryBackend) DeleteSession ¶
func (b *MemoryBackend) DeleteSession(sessionID types.SessionID) error
func (*MemoryBackend) ListSessions ¶
func (b *MemoryBackend) ListSessions() ([]types.SessionID, error)
func (*MemoryBackend) LoadCheckpoint ¶
func (b *MemoryBackend) LoadCheckpoint(sessionID types.SessionID) (*Checkpoint, error)
func (*MemoryBackend) LoadSession ¶
func (b *MemoryBackend) LoadSession(sessionID types.SessionID) (*types.SessionMetadata, error)
func (*MemoryBackend) LoadTranscript ¶
func (b *MemoryBackend) LoadTranscript(sessionID types.SessionID) ([]types.TranscriptEntry, error)
func (*MemoryBackend) ReplaceTranscript ¶
func (b *MemoryBackend) ReplaceTranscript(sessionID types.SessionID, entries []types.TranscriptEntry) error
func (*MemoryBackend) SaveCheckpoint ¶
func (b *MemoryBackend) SaveCheckpoint(sessionID types.SessionID, checkpoint *Checkpoint) error
func (*MemoryBackend) SaveSession ¶
func (b *MemoryBackend) SaveSession(sessionID types.SessionID, metadata *types.SessionMetadata) error
func (*MemoryBackend) SearchTranscriptsByContent ¶
func (b *MemoryBackend) SearchTranscriptsByContent(needle string, limit int) ([]types.SessionID, error)
SearchTranscriptsByContent scans in-memory transcripts for needle.
type SQLiteBackend ¶
type SQLiteBackend struct {
// contains filtered or unexported fields
}
SQLiteBackend persists session state in a shared application database.
func NewSQLiteBackend ¶
func NewSQLiteBackend(database *dbpkg.DB) (*SQLiteBackend, error)
NewSQLiteBackend creates a session-state backend on top of a shared DB handle. The DB schema must already be initialized, which db.Open handles when AutoMigrate is enabled.
func OpenSQLiteBackend ¶
func OpenSQLiteBackend(path string) (*SQLiteBackend, error)
OpenSQLiteBackend opens a SQLite database with the shared DB module and wraps it as a session-state backend.
func (*SQLiteBackend) AppendTranscriptEntries ¶
func (b *SQLiteBackend) AppendTranscriptEntries(sessionID types.SessionID, entries []types.TranscriptEntry) error
func (*SQLiteBackend) Close ¶
func (b *SQLiteBackend) Close() error
Close releases the owned database handle.
func (*SQLiteBackend) DeleteSession ¶
func (b *SQLiteBackend) DeleteSession(sessionID types.SessionID) error
func (*SQLiteBackend) ListSessions ¶
func (b *SQLiteBackend) ListSessions() ([]types.SessionID, error)
func (*SQLiteBackend) LoadCheckpoint ¶
func (b *SQLiteBackend) LoadCheckpoint(sessionID types.SessionID) (*Checkpoint, error)
func (*SQLiteBackend) LoadSession ¶
func (b *SQLiteBackend) LoadSession(sessionID types.SessionID) (*types.SessionMetadata, error)
func (*SQLiteBackend) LoadTranscript ¶
func (b *SQLiteBackend) LoadTranscript(sessionID types.SessionID) ([]types.TranscriptEntry, error)
func (*SQLiteBackend) ReplaceTranscript ¶
func (b *SQLiteBackend) ReplaceTranscript(sessionID types.SessionID, entries []types.TranscriptEntry) error
func (*SQLiteBackend) SaveCheckpoint ¶
func (b *SQLiteBackend) SaveCheckpoint(sessionID types.SessionID, checkpoint *Checkpoint) error
func (*SQLiteBackend) SaveSession ¶
func (b *SQLiteBackend) SaveSession(sessionID types.SessionID, metadata *types.SessionMetadata) error
func (*SQLiteBackend) SearchTranscriptsByContent ¶
func (b *SQLiteBackend) SearchTranscriptsByContent(needle string, limit int) ([]types.SessionID, error)
SearchTranscriptsByContent returns IDs of sessions whose stored transcript JSON contains needle. Uses the session_transcript_fts FTS5 index when available (O(log n)); falls back to a LIKE full scan on older databases.
type SessionInfo ¶
type SessionInfo struct {
ID types.SessionID `json:"id"`
Status types.SessionStatus `json:"status"`
CreatedAt int64 `json:"created_at"`
UpdatedAt int64 `json:"updated_at"`
TotalTurns int `json:"total_turns"`
TotalTokens int `json:"total_tokens"`
// Title is the human-readable name assigned at creation (e.g. "untitled_session_1").
// Empty for sessions created before this field was introduced.
Title string `json:"title,omitempty"`
// Preview is the first user message text, truncated to ~120 runes.
// Empty for sessions saved before this field was introduced.
Preview string `json:"preview,omitempty"`
}
SessionInfo contains basic information about a session.
type Store ¶
type Store struct {
// contains filtered or unexported fields
}
Store manages session persistence
func NewStoreWithBackend ¶
NewStoreWithBackend creates a store using a custom backend so callers can plug alternative persistence layers such as SQL or document databases.
func (*Store) AppendTranscriptEntries ¶
func (s *Store) AppendTranscriptEntries(sessionID types.SessionID, entries []types.TranscriptEntry) error
AppendTranscriptEntries appends multiple transcript entries atomically.
func (*Store) AppendTranscriptEntry ¶
AppendTranscriptEntry appends an entry to the transcript
func (*Store) CleanupOldSessions ¶
CleanupOldSessions removes sessions older than the specified duration
func (*Store) Close ¶
Close releases backend-owned resources when the configured backend supports explicit shutdown.
func (*Store) DeleteSession ¶
DeleteSession deletes a session from disk
func (*Store) GetAllSessionsInfo ¶
func (s *Store) GetAllSessionsInfo() ([]*SessionInfo, error)
GetAllSessionsInfo gets information about all sessions
func (*Store) GetSessionInfo ¶
func (s *Store) GetSessionInfo(sessionID types.SessionID) (*SessionInfo, error)
GetSessionInfo gets basic information about a session
func (*Store) ListSessions ¶
ListSessions lists all sessions
func (*Store) LoadCanonicalMessages ¶
LoadCanonicalMessages restores the canonical message list for a session.
func (*Store) LoadCheckpoint ¶
func (s *Store) LoadCheckpoint(sessionID types.SessionID) (*Checkpoint, error)
LoadCheckpoint loads the latest checkpoint for a session
func (*Store) LoadSession ¶
LoadSession loads session metadata from disk
func (*Store) LoadTranscript ¶
LoadTranscript loads the transcript for a session
func (*Store) ReplaceTranscript ¶
ReplaceTranscript replaces the transcript file with the provided entries.
func (*Store) RestoreSessionState ¶
func (s *Store) RestoreSessionState(sessionID types.SessionID) (*types.SessionMetadata, []types.Message, error)
RestoreSessionState reloads both metadata and canonical messages together so SDK/session callers do not reimplement transcript restoration piecemeal.
func (*Store) SaveCanonicalMessages ¶
SaveCanonicalMessages replaces the transcript with the canonical message list.
func (*Store) SaveCheckpoint ¶
func (s *Store) SaveCheckpoint(sessionID types.SessionID, checkpoint *Checkpoint) error
SaveCheckpoint saves a checkpoint for recovery
func (*Store) SaveSession ¶
SaveSession saves a session to disk
func (*Store) SaveSessionState ¶
func (s *Store) SaveSessionState(sessionID types.SessionID, metadata *types.SessionMetadata, previousMessages []types.Message, currentMessages []types.Message) error
SaveSessionState persists metadata and the canonical transcript together.
func (*Store) SyncTranscriptMessages ¶
func (s *Store) SyncTranscriptMessages( sessionID types.SessionID, previousMessages []types.Message, currentMessages []types.Message, ) error
SyncTranscriptMessages persists the current canonical message list. It appends only the new suffix when the previous messages are a prefix of the current messages, and falls back to a full replace when the runtime rewrote history.