# `MingaEditor.Shell.Entry`
[🔗](https://github.com/jsmestad/minga/blob/main/lib/minga_editor/shell/entry.ex#L1)

Registered shell metadata.

Shell entries are source-owned contributions. The registry keeps this validated shape in `persistent_term` so render and input hot paths can resolve the active shell without sorting or calling extension code.

# `capability`

```elixir
@type capability() :: :gui | :tui
```

# `source`

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

# `t`

```elixir
@type t() :: %MingaEditor.Shell.Entry{
  capabilities: [capability()],
  default?: boolean(),
  description: String.t(),
  display_name: String.t(),
  generation: non_neg_integer(),
  id: atom(),
  module: module(),
  source: source()
}
```

# `builtin!`

```elixir
@spec builtin!(atom(), module(), String.t(), String.t(), boolean()) :: t()
```

Builds a validated built-in shell entry or raises if the shell module is invalid.

# `new`

```elixir
@spec new(keyword() | map()) :: {:ok, t()} | {:error, term()}
```

Builds a validated shell entry.

# `with_generation`

```elixir
@spec with_generation(t(), non_neg_integer()) :: t()
```

Returns an entry with a registry-assigned generation.

---

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