Agent-based registry for declared extensions.
Tracks which extensions have been declared in config, their source (path, git, or hex), config options, runtime status, and supervisor pids. Other modules query this registry to list, start, or stop extensions.
Summary
Functions
Returns all registered extensions as a list of {name, entry} tuples.
Returns a specification to start this module under a supervisor.
Returns the entry for a single extension, or :error if not registered.
Registers a path-based extension declaration.
Registers a git-based extension declaration.
Registers a hex-based extension declaration.
Removes all registered extensions.
Starts the extension registry.
Removes an extension from the registry.
Updates fields on an existing extension entry.
Types
@type entry() :: Minga.Extension.Entry.t()
Registry entry for a single extension.
Internal state: extension name → entry.
Functions
Returns all registered extensions as a list of {name, entry} tuples.
@spec all(GenServer.server()) :: [{atom(), entry()}]
Returns a specification to start this module under a supervisor.
See Supervisor.
Returns the entry for a single extension, or :error if not registered.
@spec get(GenServer.server(), atom()) :: {:ok, entry()} | :error
Registers a path-based extension declaration.
Called by the config DSL when extension :name, path: "..." is evaluated.
The extension is not started yet; it's just recorded for later loading.
@spec register(GenServer.server(), atom(), String.t(), keyword()) :: :ok
Registers a git-based extension declaration.
Called by the config DSL when extension :name, git: "..." is evaluated.
@spec register_git(GenServer.server(), atom(), String.t(), keyword()) :: :ok
Registers a hex-based extension declaration.
Called by the config DSL when extension :name, hex: "..." is evaluated.
@spec register_hex(GenServer.server(), atom(), String.t(), keyword()) :: :ok
@spec reset() :: :ok
Removes all registered extensions.
@spec reset(GenServer.server()) :: :ok
@spec start_link(keyword()) :: Agent.on_start()
Starts the extension registry.
@spec unregister(atom()) :: :ok
Removes an extension from the registry.
@spec unregister(GenServer.server(), atom()) :: :ok
Updates fields on an existing extension entry.
@spec update(GenServer.server(), atom(), keyword()) :: :ok