# `Vibe.Session.Store`
[🔗](https://github.com/elixir-vibe/vibe/blob/v0.2.3/lib/vibe/session/store.ex#L1)

Durable SQLite-backed sessions for dialogs, tool events, eval state, and usage.

# `all_events`

```elixir
@spec all_events() :: [Vibe.Trajectory.t()]
```

# `append`

```elixir
@spec append(Vibe.Trajectory.t()) :: :ok | {:error, term()}
```

# `append_eval_state`

```elixir
@spec append_eval_state(Code.binding(), Macro.Env.t(), keyword()) ::
  :ok | {:error, term()}
```

# `append_event`

```elixir
@spec append_event(Vibe.Event.t(), non_neg_integer()) :: :ok | {:error, term()}
```

# `append_events`

```elixir
@spec append_events(
  [{non_neg_integer(), Vibe.Event.t()}],
  keyword()
) :: :ok | {:error, term()}
```

# `append_trajectory`

```elixir
@spec append_trajectory(atom(), map(), keyword()) :: Vibe.Trajectory.t()
```

# `branch`

```elixir
@spec branch(String.t(), non_neg_integer(), String.t()) :: :ok | {:error, term()}
```

# `clear`

```elixir
@spec clear() :: :ok
```

# `delete`

```elixir
@spec delete(String.t()) :: :ok | {:error, :live}
```

# `delete_many`

```elixir
@spec delete_many([String.t()]) :: %{
  deleted: [String.t()],
  skipped: [{String.t(), term()}]
}
```

# `dir`

```elixir
@spec dir() :: String.t()
```

# `ensure_session`

```elixir
@spec ensure_session(String.t(), DateTime.t(), keyword()) :: :ok
```

# `eval_state`

```elixir
@spec eval_state(String.t()) :: %{binding: Code.binding(), env: Macro.Env.t()} | nil
```

# `events`

```elixir
@spec events(String.t()) :: [Vibe.Trajectory.t()]
```

# `events_path`

```elixir
@spec events_path(String.t()) :: String.t()
```

# `info`

```elixir
@spec info(String.t()) :: map() | nil
```

Intentional facade for the public Vibe API boundary.

# `list`

```elixir
@spec list() :: [map()]
```

Intentional facade for the public Vibe API boundary.

# `log_path`

```elixir
@spec log_path(String.t()) :: String.t()
```

# `new_id`

```elixir
@spec new_id() :: String.t()
```

# `path`

```elixir
@spec path(String.t()) :: String.t()
```

# `prune_empty`

```elixir
@spec prune_empty() :: [String.t()]
```

# `session_events`

```elixir
@spec session_events(String.t()) :: [{non_neg_integer(), Vibe.Event.t()}]
```

# `session_events_after`

```elixir
@spec session_events_after(String.t(), non_neg_integer()) :: [
  {non_neg_integer(), Vibe.Event.t()}
]
```

# `trajectory`

```elixir
@spec trajectory(keyword()) :: [Vibe.Trajectory.t()]
```

---

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