jido_ecto provides an Ecto-backed Jido.Storage adapter and a migration
helper for provisioning the required tables.
1. Add dependency
Until the first Hex release, depend on GitHub:
def deps do
[
{:jido_ecto, github: "agentjido/jido_ecto", branch: "main"}
]
end2. Add the storage tables
Generate a migration in your application:
mix ecto.gen.migration create_jido_storage
Then update that migration to provision the checkpoint, thread, and thread entry tables:
defmodule MyApp.Repo.Migrations.CreateJidoStorage do
use Ecto.Migration
def change do
require Jido.Ecto.Migrations
Jido.Ecto.Migrations.create_storage_tables(version: 1)
end
endPass an explicit schema version so the migration remains reproducible even if future package releases add newer storage layouts.
For PostgreSQL schemas, pass a prefix and jido_ecto will create it if needed:
def change do
require Jido.Ecto.Migrations
Jido.Ecto.Migrations.create_storage_tables(version: 1, prefix: "jido")
end3. Configure Jido storage
Point your Jido instance at an Ecto.Repo:
defmodule MyApp.Jido do
use Jido,
otp_app: :my_app,
storage: {Jido.Ecto.Storage, repo: MyApp.Repo}
end4. Persist with Jido.Persist
Explicit persistence flows use the same storage tuple:
Jido.Persist.hibernate({Jido.Ecto.Storage, repo: MyApp.Repo}, agent)5. Concurrency semantics
append_thread/3 supports :expected_rev for optimistic concurrency. When the
expected revision does not match the stored revision, the adapter returns
{:error, :conflict}.