# `MingaAgent.Skills.Registry`
[🔗](https://github.com/jsmestad/minga/blob/main/lib/minga_agent/skills/registry.ex#L1)

Source-owned registry for extension-contributed skill paths.

Global and project-local skills remain filesystem-discovered. Extension skill declarations are stored here so extension disable and reload can remove stale skill paths without rescanning running manifests.

# `entry`

```elixir
@type entry() :: %{source: source(), id: String.t(), path: String.t()}
```

Registry entry for one skill path.

# `source`

```elixir
@type source() :: Minga.Extension.ContributionCleanup.contribution_source()
```

Source that contributed skill paths.

# `state`

```elixir
@type state() :: [entry()]
```

# `entries`

```elixir
@spec entries() :: [entry()]
```

Returns registered entries in deterministic registration order.

# `paths`

```elixir
@spec paths() :: [String.t()]
```

Returns registered skill paths in deterministic registration order.

# `register_many`

```elixir
@spec register_many(source(), [String.t()], keyword()) :: :ok
```

Registers a source-owned batch of skill paths. Same-source batches replace prior entries.

# `start_link`

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

Starts the skill registry.

# `unregister_source`

```elixir
@spec unregister_source(source()) :: :ok
```

Removes all skill paths owned by a source.

---

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