Foundry.Chat.SessionStore behaviour (foundry v0.2.0)

Copy Markdown

Behaviour for Studio copilot session persistence.

Session stores handle create, read, update, delete, and listing of chat sessions. Each session is scoped to a workspace_id and project_fingerprint combination.

Summary

Callbacks

Create a new session. Requires :id, :workspace_id, :project_fingerprint in attrs.

Delete a session by ID. Returns :ok even if not found.

List all sessions for a workspace and project.

Load a single session by ID. Returns nil if not found.

Rename a session by ID.

Update a session by ID. Merges attrs and bumps :updated_at.

Types

project_fingerprint()

@type project_fingerprint() :: String.t()

session()

@type session() :: map()

session_id()

@type session_id() :: String.t()

workspace_id()

@type workspace_id() :: String.t()

Callbacks

create(attrs)

@callback create(attrs :: map()) :: {:ok, session()} | {:error, term()}

Create a new session. Requires :id, :workspace_id, :project_fingerprint in attrs.

delete(session_id)

@callback delete(session_id :: session_id()) :: :ok | {:error, term()}

Delete a session by ID. Returns :ok even if not found.

list(workspace_id, project_fingerprint)

@callback list(
  workspace_id :: workspace_id(),
  project_fingerprint :: project_fingerprint()
) ::
  {:ok, [session()]} | {:error, term()}

List all sessions for a workspace and project.

load(session_id)

@callback load(session_id :: session_id()) :: {:ok, session() | nil} | {:error, term()}

Load a single session by ID. Returns nil if not found.

rename(session_id, title)

@callback rename(session_id :: session_id(), title :: String.t()) ::
  {:ok, session()} | {:error, term()}

Rename a session by ID.

update(session_id, attrs)

@callback update(session_id :: session_id(), attrs :: map()) ::
  {:ok, session()} | {:error, term()}

Update a session by ID. Merges attrs and bumps :updated_at.