class LittleGhost::SessionStore

SessionStore connects LittleGhost conversations to application persistence. Subclass it to keep sessions in a database, remote service, or other durable store.

class DatabaseSessionStore < LittleGhost::SessionStore
  def load(id, actor_id: nil)
    Conversation.find_by(external_id: id, actor_id:)&.snapshot
  end

  def append(id, messages:, state:, metadata:, expected_count:, actor_id: nil)
    Conversation.append!(
      id, messages:, state:, metadata:, expected_count:, actor_id:
    )
  end

  def replace(id, messages:, state:, metadata:, actor_id: nil)
    Conversation.replace!(id, messages:, state:, metadata:, actor_id:)
  end
end

A snapshot contains :messages, :state, and :metadata. Implementations provide load, append, and replace; append must check expected_count atomically so two writers cannot silently lose a turn.

Actor identity always comes from the caller. A store must not infer it from ambient process state.