# `ADK.Session.Service`
[🔗](https://github.com/JohnSmall/adk_ex/blob/v0.2.0/lib/adk/session/service.ex#L1)

Behaviour for session storage backends.

Implementations manage session lifecycle (create, get, list, delete)
and event persistence (append_event). The InMemorySessionService
provides the default implementation.

# `opts`

```elixir
@type opts() :: keyword()
```

# `append_event`

```elixir
@callback append_event(server :: GenServer.server(), ADK.Session.t(), ADK.Event.t()) ::
  :ok | {:error, term()}
```

Appends an event to a session.

# `create`

```elixir
@callback create(server :: GenServer.server(), opts()) ::
  {:ok, ADK.Session.t()} | {:error, term()}
```

Creates a new session.

# `delete`

```elixir
@callback delete(server :: GenServer.server(), opts()) :: :ok | {:error, term()}
```

Deletes a session.

# `get`

```elixir
@callback get(server :: GenServer.server(), opts()) ::
  {:ok, ADK.Session.t()} | {:error, term()}
```

Retrieves a session by identity.

# `list`

```elixir
@callback list(server :: GenServer.server(), opts()) ::
  {:ok, [ADK.Session.t()]} | {:error, term()}
```

Lists sessions matching criteria.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
