This guide summarizes the breaking changes between v0.7 and v0.8 and the required updates for custom persistence integrations.
Breaking Changes
- Removed modules:
DurableStoreport,NoopStoreadapter,SessionStoreBridgeadapter, andSQLiteSessionStore. SessionStorenew callbacks:append_events/2andflush/2are now required by the port.- Event pipeline rename:
EventEmitterwas renamed toEventBuilder. - Query/Maintenance refs:
EctoQueryAPIandEctoMaintenanceare now module-backed refs ({Module, Repo}), not dedicated GenServers. - Optional deps: Ecto and ExAws are now optional dependencies; adapters are conditionally compiled.
Required Updates for Custom Session Stores
1. Implement append_events/2
EventPipeline.process_batch/3 persists batches via append_events/2. If your
store does not support true batch writes, call your single-event append in a
loop, but keep ordering and idempotency guarantees.
2. Implement flush/2
SessionManager calls flush/2 at run finalization to persist the final
session/run state (and any buffered events) atomically. If your backend supports
transactions, wrap the full write in one. At minimum, ensure all three
components are persisted and failures are surfaced as {:error, %Error{}}.
Expected payload shape:
%{
session: %Session{},
run: %Run{},
events: [%Event{}],
provider_metadata: %{}
}3. Verify sequencing and idempotency
append_event_with_sequence/2 and get_latest_sequence/2 remain required. If
you changed sequencing in v0.7, re-run the contract tests in
test/agent_session_manager/ports/session_store_contract_test.exs.
Ecto Users
- Apply the consolidated migration (
Migration) that includes provider fields, soft delete, and artifact metadata tables. - Replace GenServer usage with module-backed refs:
query = {EctoQueryAPI, MyApp.Repo}
maint = {EctoMaintenance, MyApp.Repo}Optional Dependencies
If you use Ecto-backed stores or S3 artifacts, ensure the corresponding deps
are present in your mix.exs. Without them, those adapters compile to stubs
that return a structured missing-dependency error.