# `ADK.Artifact.Store`
[🔗](https://github.com/zeroasterisk/adk-elixir/blob/main/lib/adk/artifact/store.ex#L1)

Behaviour for pluggable artifact storage backends.

Mirrors Python ADK's `BaseArtifactService`. Artifacts are binary blobs
(files, images, etc.) attached to a session, keyed by filename with
versioning support.

# `artifact`

```elixir
@type artifact() :: %{data: binary(), content_type: String.t(), metadata: map()}
```

# `delete`

```elixir
@callback delete(
  app_name :: String.t(),
  user_id :: String.t(),
  session_id :: String.t(),
  filename :: String.t(),
  opts :: keyword()
) :: :ok | {:error, term()}
```

Delete an artifact by filename.

# `list`

```elixir
@callback list(
  app_name :: String.t(),
  user_id :: String.t(),
  session_id :: String.t(),
  opts :: keyword()
) :: {:ok, [String.t()]} | {:error, term()}
```

List artifact filenames for a session.

# `load`

```elixir
@callback load(
  app_name :: String.t(),
  user_id :: String.t(),
  session_id :: String.t(),
  filename :: String.t(),
  opts :: keyword()
) :: {:ok, artifact()} | :not_found | {:error, term()}
```

Load an artifact by filename and optional version.

# `save`

```elixir
@callback save(
  app_name :: String.t(),
  user_id :: String.t(),
  session_id :: String.t(),
  filename :: String.t(),
  artifact :: artifact(),
  opts :: keyword()
) :: {:ok, non_neg_integer()} | {:error, term()}
```

Save an artifact, returning the new version number.

---

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