Behaviour for artifact storage backends.
Artifacts are versioned binary/text files associated with a session.
Filenames starting with "user:" are user-scoped (shared across sessions).
Summary
Callbacks
Deletes an artifact. Version 0 or nil deletes all versions.
Lists artifact filenames for a session (includes user-scoped artifacts).
Loads an artifact part. Version 0 or nil loads the latest.
Saves a part as an artifact. Returns {:ok, version} on success.
Returns version numbers for a specific artifact, descending.
Types
@type opts() :: keyword()
Callbacks
@callback delete(server :: GenServer.server(), opts()) :: :ok | {:error, term()}
Deletes an artifact. Version 0 or nil deletes all versions.
Options: :app_name, :user_id, :session_id, :filename, :version.
@callback list(server :: GenServer.server(), opts()) :: {:ok, [String.t()]} | {:error, term()}
Lists artifact filenames for a session (includes user-scoped artifacts).
Options: :app_name, :user_id, :session_id.
@callback load(server :: GenServer.server(), opts()) :: {:ok, ADK.Types.Part.t()} | {:error, term()}
Loads an artifact part. Version 0 or nil loads the latest.
Options: :app_name, :user_id, :session_id, :filename, :version.
@callback save(server :: GenServer.server(), opts()) :: {:ok, non_neg_integer()} | {:error, term()}
Saves a part as an artifact. Returns {:ok, version} on success.
Options: :app_name, :user_id, :session_id, :filename, :part.
Optionally :version to overwrite a specific version.
@callback versions(server :: GenServer.server(), opts()) :: {:ok, [non_neg_integer()]} | {:error, term()}
Returns version numbers for a specific artifact, descending.
Options: :app_name, :user_id, :session_id, :filename.