# description
Closed catalog of input-types for plugin settings. The plugin author declares each user-configurable setting in the manifest's `settings` map by picking an `input-type` from this catalog; the kernel knows the schema for each type, the UI ships a generated form per type, and the CLI's `sm plugins config <id>` command exposes the same surface. Plugin authors NEVER write JSON Schema for settings, they pick a type by name and supply per-type parameters (label, default, min/max, options for enums, etc.). Closed catalog by design: every new input-type requires spec + UI form + CLI prompter + tests. Versioned via the manifest field `catalogCompat` (semver against the catalog as a whole). For the rationale and open issues, see ROADMAP.md §UI contribution system.

# $defs.InputTypeName.oneOf[].description
Sensitive string, forced into project-local storage (gitignored), not encrypted.

# $defs.InputTypeName.oneOf[].description
List of match entries, each literal (exact equality), regex (unanchored test), or glob (gitignore-style).

# $defs.InputTypeName.description
Closed enum of input-type identifiers. Adding an entry requires the full spec/UI/CLI/tests round-trip. Removing or renaming an entry is a catalog-major-bump and triggers `sm plugins upgrade` migration. Each member's `description` is the catalog summary surfaced by `sm plugins slots list` and is the single source of truth for the generated kernel + CLI mirrors (see `scripts/generate-view-catalog.js`).

# $defs.ISettingDeclaration.description
Manifest-side declaration of a single setting, keyed in `IPluginManifest.settings[<settingId>]`. Discriminated by `type`; per-type parameters live in the `oneOf` branches below. The plugin author NEVER writes JSON Schema, `type` is a name from `InputTypeName`, the kernel validates the user-supplied value against the per-type value schema.

# $defs._Common.properties.label.description
Short human-readable label shown above the form control. English-only per AGENTS.md.

# $defs._Common.properties.description.description
Optional helper text shown below the control. English-only.

# $defs.Setting_StringList.properties.min.description
Minimum item count required to validate.

# $defs.Setting_StringList.description
Array of free-form strings. Renders as a tag input. Use for keyword lists, ignore patterns, allow-lists. Value type at runtime: `string[]`.

# $defs.Setting_SingleString.properties.pattern.description
Optional ECMAScript regex (no flags) the value must match. Validated at form submit AND at extractor invocation.

# $defs.Setting_SingleString.description
Single text input. Use for short identifiers, URLs, names. Value type at runtime: `string`.

# $defs.Setting_BooleanFlag.description
On/off toggle. Renders as PrimeNG `<p-toggleswitch>`. Value type at runtime: `boolean`.

# $defs.Setting_Integer.description
Integer input with optional bounds. Renders as PrimeNG `<p-inputnumber>` with spinner. Value type at runtime: `number` (always integer).

# $defs.Setting_Number.description
Decimal number input with optional bounds (a threshold like 0.3, a ratio, a confidence floor). Renders as PrimeNG `<p-inputnumber>` with `mode="decimal"`. Value type at runtime: `number` (whole OR fractional accepted; pick `integer` instead when the value must be a whole number). Validation rejects `NaN` / `Infinity`.

# $defs.Setting_EnumPick.description
Pick one from a closed set. Renders as PrimeNG `<p-select>` (≤ 7 options) or `<p-radiobutton>` group (≤ 4 options). Value type at runtime: `string` (the picked option's `value`).

# $defs.Setting_EnumMultipick.description
Pick zero or more from a closed set. Renders as PrimeNG `<p-multiselect>` or checkbox group. Value type at runtime: `string[]`.

# $defs.Setting_PathGlob.properties.multiple.description
When true, accepts `string[]` of glob patterns; when false (default), single `string`.

# $defs.Setting_PathGlob.description
Glob pattern (POSIX-style, `**` / `*` / `?`). Validated against the project's installed glob library at form submit. Value type at runtime: `string` (when `multiple: false`) or `string[]`.

# $defs.Setting_Regex.properties.flags.description
ECMAScript regex flags allowed. Subset: `g`, `i`, `m`, `s`, `u`, `y`. Author chooses which flags the user-supplied pattern compiles with, the user supplies only the body.

# $defs.Setting_Regex.description
ECMAScript regex pattern (the body, no `/` delimiters). Validated by attempting `new RegExp(value, flags)` at form submit and again at extension invocation. Compilation failure → form error at write time; at runtime the resolver falls back to the declared `default` and warns, it never aborts the scan. Value type at runtime: `string`.

# $defs.Setting_Secret.properties.envVar.description
Optional env var name the kernel checks first; if set in the process environment, that value wins over any stored value, letting CI inject the secret without writing it to disk at all.

# $defs.Setting_Secret.description
Sensitive string (token, password, API key). Renders as `<input type="password">` with reveal toggle. **Stored in project-local `settings.local.json` (gitignored), never in the committed `settings.json`**: the protection is that the value never travels via the shared repo, NOT encryption, it is kept as plain text on the local machine. The kernel routes any `secret`-typed setting to the project-local layer automatically, the dynamic equivalent of `PROJECT_LOCAL_ONLY_KEYS` (the destination follows the declared type, not a fixed key list), so `sm plugins config` writes a secret to `settings.local.json` even without an explicit local flag. Logged as `<redacted>` in CLI output. Value type at runtime: `string`.

# $defs.Setting_KeyValueList.description
Editable mapping of strings to strings. Renders as a small editable table. Use for custom translations, alias maps, header overrides. Value type at runtime: `Array<{ key: string, value: string }>`.

# $defs.Setting_MatchList.properties.default.items.properties.value.description
The match expression. Single line, no ASCII control or DEL characters (bans ANSI escape injection at the source).

# $defs.Setting_MatchList.description
List of match entries tested against a candidate string, each entry one of three kinds: `literal` (exact equality with the candidate, case-sensitive), `regex` (ECMAScript pattern body, no `/` delimiters, no flags; unanchored `RegExp.test`, so the author anchors with `^` / `$` when exactness is wanted; compiled at form submit and again at extension invocation, like `regex`), or `glob` (gitignore-style pattern matched by the implementation's ignore engine, the same semantics as `.skillmapignore`: `docs/x/` matches the whole subtree, `*.draft.md` matches at any depth; no compile concept, like `path-glob`). Renders as a list editor: per-entry kind selector plus value input to add, removable rows to prune. An invalid stored value (wrong shape, oversize, uncompilable regex entry) makes the resolver fall back to the declared `default` with a warning, it never aborts the scan. Value type at runtime: `Array<{ type: 'literal' | 'regex' | 'glob', value: string }>`.