# `MingaAgent.EventLog.Store`
[🔗](https://github.com/jsmestad/minga/blob/main/lib/minga_agent/event_log/store.ex#L1)

SQLite storage backend for durable agent session events.

# `db`

```elixir
@type db() :: Exqlite.Sqlite3.db()
```

# `close`

```elixir
@spec close(db()) :: :ok | {:error, term()}
```

Closes the database connection.

# `count`

```elixir
@spec count(db()) :: {:ok, non_neg_integer()} | {:error, term()}
```

Returns the total number of agent events.

# `delete_before`

```elixir
@spec delete_before(db(), DateTime.t()) :: {:ok, non_neg_integer()} | {:error, term()}
```

Deletes events older than the given wall-clock time.

# `events_after`

```elixir
@spec events_after(db(), String.t(), non_neg_integer(), pos_integer()) ::
  {:ok, [MingaAgent.EventLog.EventRecord.t()]} | {:error, term()}
```

Returns all events for a session with id greater than the cursor, ordered by id.

# `insert`

```elixir
@spec insert(db(), MingaAgent.EventLog.EventRecord.t()) ::
  {:ok, pos_integer()} | {:error, term()}
```

Inserts an append-only event record.

# `integrity_check`

```elixir
@spec integrity_check(db(), :full | :quick) ::
  {:ok, :healthy} | {:error, [String.t()]}
```

Runs a SQLite integrity check.

# `latest_id`

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

Returns the latest event id for a session, or 0 when it has no events.

# `open`

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

Opens or creates the agent event database.

# `open_memory`

```elixir
@spec open_memory() :: {:ok, db()} | {:error, term()}
```

Opens an in-memory database for tests.

---

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