You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix: address PR review feedback for multi-catalog support
- Rename 'org-approved' catalog to 'default'
- Move 'catalogs' command to 'catalog list' for consistency
- Add 'description' field to CatalogEntry dataclass
- Add --description option to 'catalog add' CLI command
- Align install_allowed default to False in _load_catalog_config
- Add user-level config detection in catalog list footer
- Fix _load_catalog_config docstring (document ValidationError)
- Fix test isolation for test_search_by_tag, test_search_by_query,
test_search_verified_only, test_get_extension_info
- Update version to 0.1.14 and CHANGELOG
- Update all docs (RFC, User Guide, API Reference)
Copy file name to clipboardExpand all lines: CHANGELOG.md
+14Lines changed: 14 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,6 +12,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
12
12
### Added
13
13
14
14
- feat: add Tabnine CLI agent support
15
+
-**Multi-Catalog Support (#1707)**: Extension catalog system now supports multiple active catalogs simultaneously via a catalog stack
16
+
- New `specify extension catalog list` command lists all active catalogs with name, URL, priority, and `install_allowed` status
17
+
- New `specify extension catalog add` and `specify extension catalog remove` commands for project-scoped catalog management
18
+
- Default built-in stack includes `catalog.json` (default, installable) and `catalog.community.json` (community, discovery only) — community extensions are now surfaced in search results out of the box
19
+
-`specify extension search` aggregates results across all active catalogs, annotating each result with source catalog
20
+
-`specify extension add` enforces `install_allowed` policy — extensions from discovery-only catalogs cannot be installed directly
21
+
- Project-level `.specify/extension-catalogs.yml` and user-level `~/.specify/extension-catalogs.yml` config files supported, with project-level taking precedence
22
+
-`SPECKIT_CATALOG_URL` environment variable still works for backward compatibility (replaces full stack with single catalog)
23
+
- All catalog URLs require HTTPS (HTTP allowed for localhost development)
24
+
- New `CatalogEntry` dataclass in `extensions.py` for catalog stack representation
25
+
- Per-URL hash-based caching for non-default catalogs; legacy cache preserved for default catalog
26
+
- Higher-priority catalogs win on merge conflicts (same extension id in multiple catalogs)
27
+
- 13 new tests covering catalog stack resolution, merge conflicts, URL validation, and `install_allowed` enforcement
28
+
- Updated RFC, Extension User Guide, and Extension API Reference documentation
A user-level equivalent lives at `~/.specify/extension-catalogs.yml`. Project-level config takes full precedence when present.
485
+
A user-level equivalent lives at `~/.specify/extension-catalogs.yml`. Project-level config takes full precedence when it contains one or more catalog entries. An empty `catalogs: []` list falls back to built-in defaults.
483
486
484
487
## Organization Catalog Customization
485
488
@@ -569,7 +572,7 @@ Add to `.specify/extension-catalogs.yml` in your project:
Copy file name to clipboardExpand all lines: extensions/RFC-EXTENSION-SYSTEM.md
+10-7Lines changed: 10 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -961,7 +961,7 @@ specify extension info jira
961
961
962
962
### Custom Catalogs
963
963
964
-
Spec Kit supports a **catalog stack** — an ordered list of catalogs that the CLI merges and searches across. This allows organizations to benefit from org-approved extensions, an internal catalog, and community discovery all at once.
964
+
Spec Kit supports a **catalog stack** — an ordered list of catalogs that the CLI merges and searches across. This allows organizations to maintain their own org-approved extensions alongside an internal catalog and community discovery, all at once.
965
965
966
966
#### Catalog Stack Resolution
967
967
@@ -978,38 +978,41 @@ When no config file exists, the CLI uses:
| 1 | `catalog.json` (org-approved) | `true` | Extensions your org approves for installation |
981
+
| 1 | `catalog.json` (default) | `true` | Curated extensions available for installation |
982
982
| 2 | `catalog.community.json` (community) | `false` | Discovery only — browse but not install |
983
983
984
-
This means `specify extension search` surfaces community extensions out of the box, while `specify extension add` is still restricted to org-approved entries.
984
+
This means `specify extension search` surfaces community extensions out of the box, while `specify extension add` is still restricted to entries from catalogs with `install_allowed: true`.
A user-level equivalent lives at `~/.specify/extension-catalogs.yml`. When a project-level config is present, it takes full control and the built-in defaults are not applied.
1009
+
A user-level equivalent lives at `~/.specify/extension-catalogs.yml`. When a project-level config is present with one or more catalog entries, it takes full control and the built-in defaults are not applied. An empty `catalogs: []` list is treated the same as no config file, falling back to defaults.
1007
1010
1008
1011
#### Catalog CLI Commands
1009
1012
1010
1013
```bash
1011
1014
# List active catalogs with name, URL, priority, and install_allowed
0 commit comments