Anubis.Server.Registry behaviour (anubis_mcp v1.0.0)

Copy Markdown

Behaviour for pluggable session registries and deterministic naming utilities.

The registry is responsible for mapping session IDs to PIDs. Different transports have different needs:

  • STDIO: single session, no registry needed (Registry.None)
  • HTTP: multiple sessions, need lookup by session ID (Registry.Local)

Naming Utilities

The module also provides deterministic atom naming for internal processes. These are safe because server modules are compile-time bounded.

Summary

Types

session_id()

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

Callbacks

child_spec(keyword)

@callback child_spec(keyword()) :: Supervisor.child_spec() | :ignore

lookup_session(name, session_id)

@callback lookup_session(name :: term(), session_id()) ::
  {:ok, pid()} | {:error, :not_found}

register_session(name, session_id, pid)

@callback register_session(name :: term(), session_id(), pid()) :: :ok | {:error, term()}

unregister_session(name, session_id)

@callback unregister_session(name :: term(), session_id()) :: :ok

Functions

registry_name(server)

@spec registry_name(module()) :: atom()

session_name(server, session_id)

@spec session_name(module(), String.t()) :: atom()

session_supervisor_name(server)

@spec session_supervisor_name(module()) :: atom()

stdio_session_name(server)

@spec stdio_session_name(module()) :: atom()

supervisor_name(server)

@spec supervisor_name(module()) :: atom()

task_supervisor_name(server)

@spec task_supervisor_name(module()) :: atom()

transport_name(server, type)

@spec transport_name(module(), atom()) :: atom()