# `Minga.Extension.Registry`
[🔗](https://github.com/jsmestad/minga/blob/main/lib/minga/extension/registry.ex#L1)

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.

# `entry`

```elixir
@type entry() :: Minga.Extension.Entry.t()
```

Registry entry for a single extension.

# `state`

```elixir
@type state() :: %{required(atom()) =&gt; entry()}
```

Internal state: extension name → entry.

# `all`

```elixir
@spec all() :: [{atom(), entry()}]
```

Returns all registered extensions as a list of `{name, entry}` tuples.

# `all`

```elixir
@spec all(GenServer.server()) :: [{atom(), entry()}]
```

# `child_spec`

Returns a specification to start this module under a supervisor.

See `Supervisor`.

# `get`

```elixir
@spec get(atom()) :: {:ok, entry()} | :error
```

Returns the entry for a single extension, or `:error` if not registered.

# `get`

```elixir
@spec get(GenServer.server(), atom()) :: {:ok, entry()} | :error
```

# `register`

```elixir
@spec register(atom(), String.t(), keyword()) :: :ok
```

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.

# `register`

```elixir
@spec register(GenServer.server(), atom(), String.t(), keyword()) :: :ok
```

# `register_git`

```elixir
@spec register_git(atom(), String.t(), keyword()) :: :ok
```

Registers a git-based extension declaration.

Called by the config DSL when `extension :name, git: "..."` is evaluated.

# `register_git`

```elixir
@spec register_git(GenServer.server(), atom(), String.t(), keyword()) :: :ok
```

# `register_hex`

```elixir
@spec register_hex(atom(), String.t(), keyword()) :: :ok
```

Registers a hex-based extension declaration.

Called by the config DSL when `extension :name, hex: "..."` is evaluated.

# `register_hex`

```elixir
@spec register_hex(GenServer.server(), atom(), String.t(), keyword()) :: :ok
```

# `reset`

```elixir
@spec reset() :: :ok
```

Removes all registered extensions.

# `reset`

```elixir
@spec reset(GenServer.server()) :: :ok
```

# `start_link`

```elixir
@spec start_link(keyword()) :: Agent.on_start()
```

Starts the extension registry.

# `unregister`

```elixir
@spec unregister(atom()) :: :ok
```

Removes an extension from the registry.

# `unregister`

```elixir
@spec unregister(GenServer.server(), atom()) :: :ok
```

# `update`

```elixir
@spec update(
  atom(),
  keyword()
) :: :ok
```

Updates fields on an existing extension entry.

# `update`

```elixir
@spec update(GenServer.server(), atom(), keyword()) :: :ok
```

---

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