defmodule AgentSea.Memory do
@moduledoc """
Conversation memory. Adapters (buffer, summary, vector) implement this
behaviour. `search/2` is optional (only vector-backed stores implement it).
"""
@type conversation_id :: String.t()
@type message :: AgentSea.Provider.message()
@callback save(conversation_id(), [message()]) :: :ok
@callback load(conversation_id()) :: [message()]
@callback clear(conversation_id()) :: :ok
@callback search(query :: String.t(), limit :: pos_integer()) :: [message()]
@optional_callbacks search: 2
end