@claude-collective/cli 0.13.4 → 0.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +357 -0
- package/README.md +41 -27
- package/config/skills-matrix.yaml +202 -134
- package/config/stacks.yaml +14 -20
- package/dist/chunk-3X5D7RM5.js +69 -0
- package/dist/chunk-3X5D7RM5.js.map +1 -0
- package/dist/chunk-4S4FCAA2.js +100 -0
- package/dist/chunk-4S4FCAA2.js.map +1 -0
- package/dist/chunk-4WGN6SUE.js +197 -0
- package/dist/chunk-4WGN6SUE.js.map +1 -0
- package/dist/{chunk-DHET7RCE.js → chunk-AWKZ5BDL.js} +9 -2
- package/dist/{chunk-DHET7RCE.js.map → chunk-AWKZ5BDL.js.map} +1 -1
- package/dist/{chunk-6Q3Y7KVB.js → chunk-DBRUQQUF.js} +8 -2
- package/dist/chunk-DBRUQQUF.js.map +1 -0
- package/dist/{chunk-Z7G4B5HJ.js → chunk-ETCVEV3S.js} +73 -150
- package/dist/chunk-ETCVEV3S.js.map +1 -0
- package/dist/chunk-F4RD5FYM.js +45 -0
- package/dist/chunk-F4RD5FYM.js.map +1 -0
- package/dist/{chunk-ACNBKXXJ.js → chunk-GGFOD5PK.js} +13 -44
- package/dist/chunk-GGFOD5PK.js.map +1 -0
- package/dist/chunk-H7SSBSPR.js +29 -0
- package/dist/chunk-H7SSBSPR.js.map +1 -0
- package/dist/chunk-HWD32NP7.js +19 -0
- package/dist/chunk-HWD32NP7.js.map +1 -0
- package/dist/{chunk-JIPWV2FX.js → chunk-IAYAE6MG.js} +12 -34
- package/dist/chunk-IAYAE6MG.js.map +1 -0
- package/dist/{chunk-RTE64SJA.js → chunk-IXBCRT3F.js} +2 -2
- package/dist/chunk-IXBCRT3F.js.map +1 -0
- package/dist/chunk-KWYO3M5Q.js +67 -0
- package/dist/chunk-KWYO3M5Q.js.map +1 -0
- package/dist/{chunk-E3FJH4TF.js → chunk-MCTSHLAF.js} +18 -18
- package/dist/chunk-MCTSHLAF.js.map +1 -0
- package/dist/chunk-MH66WDFV.js +251 -0
- package/dist/chunk-MH66WDFV.js.map +1 -0
- package/dist/{chunk-K3NB6DSG.js → chunk-MTPM7BX5.js} +108 -110
- package/dist/chunk-MTPM7BX5.js.map +1 -0
- package/dist/chunk-NQJ47R4N.js +1092 -0
- package/dist/chunk-NQJ47R4N.js.map +1 -0
- package/dist/chunk-NRC7XYCI.js +211 -0
- package/dist/chunk-NRC7XYCI.js.map +1 -0
- package/dist/{chunk-76DWXGQE.js → chunk-O6ZTD7ZI.js} +14 -3
- package/dist/chunk-O6ZTD7ZI.js.map +1 -0
- package/dist/chunk-OBXAY23Y.js +56 -0
- package/dist/chunk-OBXAY23Y.js.map +1 -0
- package/dist/{chunk-XY3XDVMI.js → chunk-QR2EBWL2.js} +3 -3
- package/dist/{chunk-66UDJBF6.js → chunk-REJGRCVQ.js} +2 -2
- package/dist/{chunk-D237EVNB.js → chunk-TMED5DQ2.js} +71 -48
- package/dist/chunk-TMED5DQ2.js.map +1 -0
- package/dist/chunk-U7HFKR74.js +21 -0
- package/dist/chunk-U7HFKR74.js.map +1 -0
- package/dist/chunk-UEMRJI2K.js +146 -0
- package/dist/chunk-UEMRJI2K.js.map +1 -0
- package/dist/{chunk-Z2CWURZ6.js → chunk-UNN7523L.js} +2 -2
- package/dist/chunk-V2ZIH7HV.js +29 -0
- package/dist/chunk-V2ZIH7HV.js.map +1 -0
- package/dist/{chunk-X6QONICW.js → chunk-VVYNZZUX.js} +7 -19
- package/dist/chunk-VVYNZZUX.js.map +1 -0
- package/dist/chunk-WXS4S3MA.js +220 -0
- package/dist/chunk-WXS4S3MA.js.map +1 -0
- package/dist/{chunk-CDX4W4DM.js → chunk-XENOESJZ.js} +53 -33
- package/dist/chunk-XENOESJZ.js.map +1 -0
- package/dist/chunk-YDBSSAJ6.js +4207 -0
- package/dist/chunk-YDBSSAJ6.js.map +1 -0
- package/dist/chunk-ZDREFYD2.js +696 -0
- package/dist/chunk-ZDREFYD2.js.map +1 -0
- package/dist/chunk-ZW2PELOH.js +197 -0
- package/dist/chunk-ZW2PELOH.js.map +1 -0
- package/dist/cli/defaults/agent-mappings.yaml +13 -14
- package/dist/commands/build/marketplace.js +19 -23
- package/dist/commands/build/marketplace.js.map +1 -1
- package/dist/commands/build/plugins.js +13 -240
- package/dist/commands/build/plugins.js.map +1 -1
- package/dist/commands/build/stack.js +13 -25
- package/dist/commands/build/stack.js.map +1 -1
- package/dist/commands/compile.js +45 -82
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/config/get.js +9 -9
- package/dist/commands/config/get.js.map +1 -1
- package/dist/commands/config/index.js +8 -8
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/config/path.js +7 -9
- package/dist/commands/config/path.js.map +1 -1
- package/dist/commands/config/set-project.js +12 -13
- package/dist/commands/config/set-project.js.map +1 -1
- package/dist/commands/config/show.js +7 -7
- package/dist/commands/config/unset-project.js +12 -13
- package/dist/commands/config/unset-project.js.map +1 -1
- package/dist/commands/diff.js +15 -44
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.js +23 -67
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/edit.js +98 -81
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +27 -79
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/import/skill.js +38 -58
- package/dist/commands/import/skill.js.map +1 -1
- package/dist/commands/info.js +17 -24
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/init.js +103 -779
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js +8 -11
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/new/agent.js +11 -16
- package/dist/commands/new/agent.js.map +1 -1
- package/dist/commands/new/skill.js +14 -18
- package/dist/commands/new/skill.js.map +1 -1
- package/dist/commands/outdated.js +16 -97
- package/dist/commands/outdated.js.map +1 -1
- package/dist/commands/search.js +24 -43
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/uninstall.js +22 -30
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +23 -154
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/validate.js +38 -89
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/version/bump.js +12 -28
- package/dist/commands/version/bump.js.map +1 -1
- package/dist/commands/version/index.js +8 -24
- package/dist/commands/version/index.js.map +1 -1
- package/dist/commands/version/set.js +11 -26
- package/dist/commands/version/set.js.map +1 -1
- package/dist/commands/version/show.js +8 -24
- package/dist/commands/version/show.js.map +1 -1
- package/dist/components/common/confirm.js +2 -2
- package/dist/components/common/confirm.test.js +203 -0
- package/dist/components/common/confirm.test.js.map +1 -0
- package/dist/components/common/message.js +3 -7
- package/dist/components/common/message.js.map +1 -1
- package/dist/components/common/spinner.js +1 -1
- package/dist/components/common/spinner.js.map +1 -1
- package/dist/components/skill-search/skill-search.js +3 -3
- package/dist/components/wizard/category-grid.js +2 -2
- package/dist/components/wizard/category-grid.test.js +138 -156
- package/dist/components/wizard/category-grid.test.js.map +1 -1
- package/dist/components/wizard/menu-item.js +9 -0
- package/dist/components/wizard/search-modal.js +9 -0
- package/dist/components/wizard/search-modal.test.js +216 -0
- package/dist/components/wizard/search-modal.test.js.map +1 -0
- package/dist/components/wizard/section-progress.js +2 -2
- package/dist/components/wizard/section-progress.test.js +16 -106
- package/dist/components/wizard/section-progress.test.js.map +1 -1
- package/dist/components/wizard/source-grid.js +10 -0
- package/dist/components/wizard/source-grid.js.map +1 -0
- package/dist/components/wizard/source-grid.test.js +500 -0
- package/dist/components/wizard/source-grid.test.js.map +1 -0
- package/dist/components/wizard/step-approach.js +7 -5
- package/dist/components/wizard/step-approach.test.js +115 -0
- package/dist/components/wizard/step-approach.test.js.map +1 -0
- package/dist/components/wizard/step-build.js +9 -5
- package/dist/components/wizard/step-build.test.js +160 -284
- package/dist/components/wizard/step-build.test.js.map +1 -1
- package/dist/components/wizard/step-confirm.js +3 -3
- package/dist/components/wizard/step-confirm.test.js +364 -0
- package/dist/components/wizard/step-confirm.test.js.map +1 -0
- package/dist/components/wizard/step-refine.js +2 -3
- package/dist/components/wizard/step-refine.test.js +24 -26
- package/dist/components/wizard/step-refine.test.js.map +1 -1
- package/dist/components/wizard/step-settings.js +14 -0
- package/dist/components/wizard/step-settings.js.map +1 -0
- package/dist/components/wizard/step-settings.test.js +240 -0
- package/dist/components/wizard/step-settings.test.js.map +1 -0
- package/dist/components/wizard/step-sources.js +17 -0
- package/dist/components/wizard/step-sources.js.map +1 -0
- package/dist/components/wizard/step-sources.test.js +290 -0
- package/dist/components/wizard/step-sources.test.js.map +1 -0
- package/dist/components/wizard/step-stack.js +7 -4
- package/dist/components/wizard/step-stack.test.js +344 -0
- package/dist/components/wizard/step-stack.test.js.map +1 -0
- package/dist/components/wizard/view-title.js +9 -0
- package/dist/components/wizard/view-title.js.map +1 -0
- package/dist/components/wizard/wizard-layout.js +17 -0
- package/dist/components/wizard/wizard-layout.js.map +1 -0
- package/dist/components/wizard/wizard-tabs.js +2 -2
- package/dist/components/wizard/wizard-tabs.test.js +292 -0
- package/dist/components/wizard/wizard-tabs.test.js.map +1 -0
- package/dist/components/wizard/wizard.js +22 -15
- package/dist/config/skills-matrix.yaml +202 -134
- package/dist/config/stacks.yaml +14 -20
- package/dist/hooks/init.js +6 -8
- package/dist/hooks/init.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/{magic-string.es-RGXYGAW3.js → magic-string.es-PAH2SOTR.js} +2 -2
- package/dist/source-manager-DSYZEVGZ.js +16 -0
- package/dist/source-manager-DSYZEVGZ.js.map +1 -0
- package/dist/src/agents/developer/api-developer/agent.yaml +1 -1
- package/dist/src/agents/developer/cli-developer/agent.yaml +1 -1
- package/dist/src/agents/developer/web-architecture/agent.yaml +1 -1
- package/dist/src/agents/developer/web-developer/agent.yaml +1 -1
- package/dist/src/agents/developer/web-developer/examples.md +1 -6
- package/dist/src/agents/meta/agent-summoner/agent.yaml +1 -1
- package/dist/src/agents/meta/documentor/agent.yaml +1 -1
- package/dist/src/agents/meta/documentor/workflow.md +1 -5
- package/dist/src/agents/meta/skill-summoner/agent.yaml +1 -1
- package/dist/src/agents/migration/cli-migrator/agent.yaml +1 -1
- package/dist/src/agents/migration/cli-migrator/anti-patterns.md +1 -3
- package/dist/src/agents/pattern/pattern-scout/agent.yaml +1 -1
- package/dist/src/agents/pattern/web-pattern-critique/agent.yaml +1 -1
- package/dist/src/agents/planning/web-pm/agent.yaml +1 -1
- package/dist/src/agents/researcher/api-researcher/agent.yaml +1 -1
- package/dist/src/agents/researcher/web-researcher/agent.yaml +1 -1
- package/dist/src/agents/reviewer/api-reviewer/agent.yaml +1 -1
- package/dist/src/agents/reviewer/cli-reviewer/agent.yaml +1 -1
- package/dist/src/agents/reviewer/web-reviewer/agent.yaml +1 -1
- package/dist/src/agents/tester/cli-tester/agent.yaml +1 -1
- package/dist/src/agents/tester/web-tester/agent.yaml +1 -1
- package/dist/src/agents/tester/web-tester/output-format.md +1 -3
- package/dist/stores/wizard-store.js +4 -3
- package/dist/stores/wizard-store.test.js +94 -88
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +5 -3
- package/src/agents/developer/api-developer/agent.yaml +1 -1
- package/src/agents/developer/cli-developer/agent.yaml +1 -1
- package/src/agents/developer/web-architecture/agent.yaml +1 -1
- package/src/agents/developer/web-developer/agent.yaml +1 -1
- package/src/agents/developer/web-developer/examples.md +1 -6
- package/src/agents/meta/agent-summoner/agent.yaml +1 -1
- package/src/agents/meta/documentor/agent.yaml +1 -1
- package/src/agents/meta/documentor/workflow.md +1 -5
- package/src/agents/meta/skill-summoner/agent.yaml +1 -1
- package/src/agents/migration/cli-migrator/agent.yaml +1 -1
- package/src/agents/migration/cli-migrator/anti-patterns.md +1 -3
- package/src/agents/pattern/pattern-scout/agent.yaml +1 -1
- package/src/agents/pattern/web-pattern-critique/agent.yaml +1 -1
- package/src/agents/planning/web-pm/agent.yaml +1 -1
- package/src/agents/researcher/api-researcher/agent.yaml +1 -1
- package/src/agents/researcher/web-researcher/agent.yaml +1 -1
- package/src/agents/reviewer/api-reviewer/agent.yaml +1 -1
- package/src/agents/reviewer/cli-reviewer/agent.yaml +1 -1
- package/src/agents/reviewer/web-reviewer/agent.yaml +1 -1
- package/src/agents/tester/cli-tester/agent.yaml +1 -1
- package/src/agents/tester/web-tester/agent.yaml +1 -1
- package/src/agents/tester/web-tester/output-format.md +1 -3
- package/dist/chunk-3U3R4NCG.js +0 -22
- package/dist/chunk-3U3R4NCG.js.map +0 -1
- package/dist/chunk-4K4ZXQRM.js +0 -317
- package/dist/chunk-4K4ZXQRM.js.map +0 -1
- package/dist/chunk-6Q3Y7KVB.js.map +0 -1
- package/dist/chunk-76DWXGQE.js.map +0 -1
- package/dist/chunk-7Q44DMSP.js +0 -582
- package/dist/chunk-7Q44DMSP.js.map +0 -1
- package/dist/chunk-ACNBKXXJ.js.map +0 -1
- package/dist/chunk-B7CCVP6Q.js +0 -639
- package/dist/chunk-B7CCVP6Q.js.map +0 -1
- package/dist/chunk-BDLUZVKU.js +0 -54
- package/dist/chunk-BDLUZVKU.js.map +0 -1
- package/dist/chunk-CDX4W4DM.js.map +0 -1
- package/dist/chunk-D237EVNB.js.map +0 -1
- package/dist/chunk-DRXPNNPB.js +0 -393
- package/dist/chunk-DRXPNNPB.js.map +0 -1
- package/dist/chunk-E3FJH4TF.js.map +0 -1
- package/dist/chunk-ED4E6Q2T.js +0 -114
- package/dist/chunk-ED4E6Q2T.js.map +0 -1
- package/dist/chunk-EHS3TWWP.js +0 -95
- package/dist/chunk-EHS3TWWP.js.map +0 -1
- package/dist/chunk-GDH553MV.js +0 -91
- package/dist/chunk-GDH553MV.js.map +0 -1
- package/dist/chunk-HLJX2FTL.js +0 -95
- package/dist/chunk-HLJX2FTL.js.map +0 -1
- package/dist/chunk-I2DSLOXZ.js +0 -75
- package/dist/chunk-I2DSLOXZ.js.map +0 -1
- package/dist/chunk-I4TPKIYX.js +0 -493
- package/dist/chunk-I4TPKIYX.js.map +0 -1
- package/dist/chunk-IAUAQJQ2.js +0 -57
- package/dist/chunk-IAUAQJQ2.js.map +0 -1
- package/dist/chunk-IBE7JIAG.js +0 -129
- package/dist/chunk-IBE7JIAG.js.map +0 -1
- package/dist/chunk-IMDW5ZUP.js +0 -132
- package/dist/chunk-IMDW5ZUP.js.map +0 -1
- package/dist/chunk-JIPWV2FX.js.map +0 -1
- package/dist/chunk-K3NB6DSG.js.map +0 -1
- package/dist/chunk-K7EVM5LY.js +0 -141
- package/dist/chunk-K7EVM5LY.js.map +0 -1
- package/dist/chunk-KAAEN2PO.js +0 -57
- package/dist/chunk-KAAEN2PO.js.map +0 -1
- package/dist/chunk-NDY25DTL.js +0 -453
- package/dist/chunk-NDY25DTL.js.map +0 -1
- package/dist/chunk-P26A2K5N.js +0 -64
- package/dist/chunk-P26A2K5N.js.map +0 -1
- package/dist/chunk-RFTSZDHV.js +0 -313
- package/dist/chunk-RFTSZDHV.js.map +0 -1
- package/dist/chunk-RTE64SJA.js.map +0 -1
- package/dist/chunk-SVYPSDWY.js +0 -84
- package/dist/chunk-SVYPSDWY.js.map +0 -1
- package/dist/chunk-TKFPKEV3.js +0 -69
- package/dist/chunk-TKFPKEV3.js.map +0 -1
- package/dist/chunk-UQTEPWU7.js +0 -108
- package/dist/chunk-UQTEPWU7.js.map +0 -1
- package/dist/chunk-V46GGCCI.js +0 -294
- package/dist/chunk-V46GGCCI.js.map +0 -1
- package/dist/chunk-X6QONICW.js.map +0 -1
- package/dist/chunk-Y2LW7R3Y.js +0 -23
- package/dist/chunk-Y2LW7R3Y.js.map +0 -1
- package/dist/chunk-Z7G4B5HJ.js.map +0 -1
- package/dist/chunk-ZENYS6KW.js +0 -90
- package/dist/chunk-ZENYS6KW.js.map +0 -1
- package/dist/chunk-ZFPSUQOU.js +0 -396
- package/dist/chunk-ZFPSUQOU.js.map +0 -1
- package/dist/commands/config/set.js +0 -61
- package/dist/commands/config/set.js.map +0 -1
- package/dist/commands/config/unset.js +0 -57
- package/dist/commands/config/unset.js.map +0 -1
- package/dist/commands/test-imports.js +0 -92
- package/dist/commands/test-imports.js.map +0 -1
- package/dist/components/wizard/step-stack-options.js +0 -11
- package/dist/components/wizard/wizard-footer.js +0 -9
- /package/dist/{chunk-XY3XDVMI.js.map → chunk-QR2EBWL2.js.map} +0 -0
- /package/dist/{chunk-66UDJBF6.js.map → chunk-REJGRCVQ.js.map} +0 -0
- /package/dist/{chunk-Z2CWURZ6.js.map → chunk-UNN7523L.js.map} +0 -0
- /package/dist/components/wizard/{step-stack-options.js.map → menu-item.js.map} +0 -0
- /package/dist/components/wizard/{wizard-footer.js.map → search-modal.js.map} +0 -0
- /package/dist/{magic-string.es-RGXYGAW3.js.map → magic-string.es-PAH2SOTR.js.map} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,354 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.25.1] - 2026-02-13
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- **Code formatting** — Prettier applied across 21 files (wizard components, tests, schemas, docs).
|
|
13
|
+
|
|
14
|
+
## [0.25.0] - 2026-02-12
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- **Multi-source skill selection** — New Sources step between Build and Confirm lets users choose between recommended (public) and custom skill sources per technology. Source grid displays variant cards for each available source with installed indicators. Customize view shows per-skill source options.
|
|
19
|
+
- **Source settings management** — `G` hotkey opens settings panel to add/remove extra skill sources with URL validation. Sources persist to `.claude-src/config.yaml`.
|
|
20
|
+
- **Source switching in `cc edit`** — Edit command detects source changes and applies archive/restore for Local↔Public transitions via `source-switcher.ts`. Shows `~ skillId (From → To)` for source switches.
|
|
21
|
+
- **Bound skill search** — Search pill in source grid triggers immediate search across configured extra marketplaces on Space. Results appear in modal overlay with keyboard navigation. Selected results become bound skills persisted in config.
|
|
22
|
+
- **BoundSkill types and schema** — `BoundSkill`, `BoundSkillCandidate`, `SkillAlias` types with Zod `boundSkillSchema` for config persistence. `boundSkills` field added to `ProjectSourceConfig`.
|
|
23
|
+
- **Multi-source loader** — `tagExtraSources` enriches resolved skills with available sources from configured marketplaces. `searchExtraSources` queries all extra sources for skills matching a subcategory alias.
|
|
24
|
+
- **Installed skill indicators** — Dimmed `✓` prefix on skill tags for already-installed technologies.
|
|
25
|
+
- **Scroll viewport spec** — UX spec for wizard grid navigation with viewport-based scrolling.
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
|
|
29
|
+
- **Uninstall plugin removal resilient** — `claudePluginUninstall` wrapped in inner try-catch so directory removal proceeds even if Claude CLI plugin unregister fails.
|
|
30
|
+
- **Config skills array restored** — Fixed skill-to-agent compilation when `skills` array was missing from project config.
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
|
|
34
|
+
- **SkillId format tightened** — `${SkillIdPrefix}-${string}-${string}` now enforces 3+ segments.
|
|
35
|
+
- **Architecture docs updated** for multi-source features.
|
|
36
|
+
|
|
37
|
+
## [0.24.7] - 2026-02-12
|
|
38
|
+
|
|
39
|
+
### Added
|
|
40
|
+
|
|
41
|
+
- **Sources step in wizard flow** — New step between Build and Confirm lets users choose between recommended skills (verified by Claude Collective) or customizing skill sources per technology. Wizard tabs updated to 5 steps.
|
|
42
|
+
- **Edit command starts at Build step** — `cc edit` now skips Intro/Stack and opens directly at the Build step with currently installed skills pre-populated via new `populateFromSkillIds` store action.
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
|
|
46
|
+
- **Parse boundary error handling hardened across 11 files** — All `verbose()` calls for malformed user-facing data (project config, local skills, default mappings, skill metadata) promoted to `warn()` so errors are visible without `--verbose`. Bare `JSON.parse` in skill import wrapped in try/catch. Empty `catch {}` in permission checker now warns on malformed `settings.json`. Manual frontmatter parsing in `compile.ts` replaced with `parseFrontmatter()` utility. Missing `name` field in project config now falls back to directory name with a warning.
|
|
47
|
+
- **Marketplace list JSON parsing hardened** — `claudePluginMarketplaceList` now validates JSON parse and array type before returning.
|
|
48
|
+
|
|
49
|
+
### Refactored
|
|
50
|
+
|
|
51
|
+
- **Replaced pseudo-agents pattern with `populateFromSkillIds`** — Stack selection no longer constructs fake agent objects to feed into `populateFromStack`. New `populateFromSkillIds` store action maps skill IDs directly to domain/subcategory selections with warnings for missing or unresolvable skills.
|
|
52
|
+
|
|
53
|
+
## [0.24.6] - 2026-02-12
|
|
54
|
+
|
|
55
|
+
### Changed
|
|
56
|
+
|
|
57
|
+
- **Codebase-wide comment cleanup** — Removed AI-generated banner separators (`// ====...`), obvious JSDoc that restated function/variable names, file-level header comments, and verbose multi-line blocks across 150+ files (~5,600 lines removed). Comments explaining WHY, boundary casts, edge cases, and TODOs preserved.
|
|
58
|
+
- **Standardized JSDoc on all type definitions** — All exported types in `src/cli/types/` now use consistent `/** */` JSDoc format. Union grouping comments kept as `//`. Obvious property comments removed, meaningful annotations (`@default`, deprecation, logic notes) preserved.
|
|
59
|
+
- **Unused imports cleaned up** — Removed unused `beforeEach` in `plugin-finder.test.ts` and unused `readdir` in `agent-recompiler.test.ts`.
|
|
60
|
+
|
|
61
|
+
## [0.24.5] - 2026-02-11
|
|
62
|
+
|
|
63
|
+
### Added
|
|
64
|
+
|
|
65
|
+
- **Command tests for all 12 previously untested CLI commands** — ~158 new tests across 9 test files covering config:set-project, config:unset-project, version (index), version:set, version:bump, new:skill, new:agent, import:skill, update, uninstall, init, and edit. Total test count: 1512 passing (up from ~1344).
|
|
66
|
+
- **Vitest auto-mocks for fs and logger** — Manual mock files (`src/cli/utils/__mocks__/fs.ts`, `logger.ts`) replace inline `vi.mock()` factory functions across 15 existing test files. `clearMocks: true` enabled globally.
|
|
67
|
+
- **Vitest test projects** — Config split into 3 projects (`unit`, `integration`, `commands`) for clearer test organization and selective running.
|
|
68
|
+
|
|
69
|
+
### Changed
|
|
70
|
+
|
|
71
|
+
- **`docs/architecture.md` expanded** to comprehensive reference covering project structure, data flow, domain organization, type system, Zod validation, CLI commands, wizard components, test infrastructure, utility patterns, and conventions.
|
|
72
|
+
- **`docs/index.md` updated** with bibles section and UX research section.
|
|
73
|
+
|
|
74
|
+
### Removed
|
|
75
|
+
|
|
76
|
+
- **21 outdated documentation files removed** — Completed migration plans (Commander.js→oclif), implemented feature plans (skill-id normalization, Phase 7 wizard redesign, init refactor), superseded research (integration testing, oclif ecosystem evaluation, CLI improvements), and resolved UX research. `cli-command-testing-plan.md` also removed (all tests implemented). Bibles and active UX research retained.
|
|
77
|
+
|
|
78
|
+
## [0.24.4] - 2026-02-11
|
|
79
|
+
|
|
80
|
+
### Changed
|
|
81
|
+
|
|
82
|
+
- **`lib/` restructured into domain subdirectories** — 62 files moved from flat `lib/` into 8 domain-organized subdirectories: `configuration/`, `loading/`, `matrix/`, `plugins/`, `skills/`, `agents/`, `stacks/`, `installation/`. Each domain has a barrel `index.ts` for clean imports. Cross-cutting files (`compiler`, `resolver`, `schemas`, etc.) remain at `lib/` root. ~140 import paths updated across commands, components, hooks, and tests.
|
|
83
|
+
|
|
84
|
+
## [0.24.3] - 2026-02-11
|
|
85
|
+
|
|
86
|
+
### Changed
|
|
87
|
+
|
|
88
|
+
- **AJV replaced with Zod for all schema validation** — `schema-validator.ts` and `plugin-validator.ts` rewritten to use Zod `.safeParse()`. AJV and ajv-formats dependencies removed (23 packages pruned). Strict validation schemas added for `cc validate`: `metadataValidationSchema`, `stackConfigValidationSchema`, `skillFrontmatterValidationSchema`, `agentFrontmatterValidationSchema`.
|
|
89
|
+
- **JSON Schema files now generated from Zod** — `scripts/generate-json-schemas.ts` uses `z.toJSONSchema()` (Zod v4 native) to generate 10 schema files from Zod source of truth. Hand-maintained JSON schemas and symlinks to claude-subagents removed. New npm scripts: `generate:schemas`, `generate:schemas:check`.
|
|
90
|
+
- **YAML `$schema` references use local relative paths** — All 18 `agent.yaml` files switched from remote `raw.githubusercontent.com` URLs to `# yaml-language-server: $schema=` comments with relative paths. Schema reference added to `config/skills-matrix.yaml`. VS Code YAML validation now works offline.
|
|
91
|
+
|
|
92
|
+
## [0.24.2] - 2026-02-11
|
|
93
|
+
|
|
94
|
+
### Changed
|
|
95
|
+
|
|
96
|
+
- **Type definitions co-located into `src/cli/types/`** — 4 scattered type files (`src/types.ts`, `src/cli/types.ts`, `src/cli/types-matrix.ts`, `src/cli/types-stacks.ts`) consolidated into 6 domain-organized files + barrel index under `src/cli/types/`. All 60+ consumer imports updated. Unused imports cleaned up.
|
|
97
|
+
|
|
98
|
+
## [0.24.1] - 2026-02-11
|
|
99
|
+
|
|
100
|
+
### Fixed
|
|
101
|
+
|
|
102
|
+
- **Stack config now respects user customizations** — `buildLocalConfig` generates stack config from the user's actual skill selections instead of hardcoding the original stack definition. Customizations like swapping `commander` for `oclif` are now preserved.
|
|
103
|
+
- **Subcategory key `cli` corrected to `cli-framework`** in `stacks.yaml` to match the `CategoryPath` format used in production metadata files.
|
|
104
|
+
- **Parse boundaries hardened** — All YAML/JSON parse boundaries now warn or throw with context on failure: `parseFrontmatter` includes file path in warnings, `loadAllAgents`/`loadProjectAgents` catch and warn on invalid `agent.yaml`, `config-saver` uses Zod validation, `versioning` wraps `parseYaml` in try/catch, `matrix-loader` warns on invalid skill alias mappings.
|
|
105
|
+
|
|
106
|
+
### Changed
|
|
107
|
+
|
|
108
|
+
- **Test structure reorganized** — Component tests co-located with source files. Integration tests grouped in `lib/__tests__/integration/`. Compilation pipeline tests rewritten to use `createTestSource()` instead of external repo dependency.
|
|
109
|
+
- **Shared test factories added** — `createMockCategory()`, `createMockResolvedStack()`, `createComprehensiveMatrix()`, `createBasicMatrix()` in `helpers.ts` reduce ~300 lines of duplicate fixture code.
|
|
110
|
+
- **17 previously untested lib files now have unit tests** — compiler, matrix-loader, stacks-loader, defaults-loader, config-saver, skill-plugin-compiler, plugin-info, plugin-finder, plugin-version, output-validator, schema-validator, installation, skill-fetcher, agent-fetcher, skill-metadata, matrix-health-check, stack-installer.
|
|
111
|
+
- **Error path and user journey test coverage expanded** — 12 error path tests for loader functions, 8 edit-recompile journey tests, 17 install-compile journey tests.
|
|
112
|
+
|
|
113
|
+
## [0.24.0] - 2026-02-11
|
|
114
|
+
|
|
115
|
+
### Changed
|
|
116
|
+
|
|
117
|
+
- **Type system rewrite** — All `interface` declarations replaced with `type` aliases. `Skill` now extends `SkillDefinition` via intersection. Agent types composed from `BaseAgentFields` shared base. Inline `//` comments converted to JSDoc on type fields.
|
|
118
|
+
- **`SkillAlias` renamed to `SkillDisplayName`** — `ResolvedSkill.alias` → `displayName`, `CategoryDefinition.name` → `displayName`. `SkillRef` union eliminated — all post-resolution sites use `SkillId` directly.
|
|
119
|
+
- **`stack` is the single source of truth for skill assignment** — `skills` flat list, `agent_skills` per-agent overrides, and `preload_patterns` removed from `ProjectConfig`. When no predefined stack is selected, a stack is auto-generated from wizard selections.
|
|
120
|
+
- **Config always uses `SkillAssignment` objects** — `SkillEntry` union (`string | SkillAssignment`) eliminated. Config YAML `skills` entries are always `{ id }` objects.
|
|
121
|
+
- **`ProjectConfig.agents` narrowed** from `string[]` to `AgentName[]`. `getAgentsForSkill()` return type narrowed to `AgentName[]`.
|
|
122
|
+
- **Remaining `Object.entries`/`Object.keys` replaced** with `typedEntries`/`typedKeys` across all files. `Record<string, X>` narrowed to `Record<SkillId|AgentName|Subcategory, X>` where keys are known.
|
|
123
|
+
- **`loadProjectConfig` renamed** to `loadProjectSourceConfig` in `config.ts` to disambiguate from `project-config.ts` version.
|
|
124
|
+
- **Format functions consolidated** — `formatSourceOrigin`/`formatAgentsSourceOrigin` merged into `formatOrigin(type, origin)`.
|
|
125
|
+
- **`KEY_SUBCATEGORIES` deduplicated** — moved from `resolver.ts` and `stacks-loader.ts` into `consts.ts`.
|
|
126
|
+
|
|
127
|
+
### Removed
|
|
128
|
+
|
|
129
|
+
- **`name` field** from `SkillDefinition`, `Skill`, `ResolvedSkill`, `SkillOption` — `displayName` (formerly alias) replaces it. `extractDisplayName()` removed from `loader.ts`.
|
|
130
|
+
- **`custom_agents` infrastructure** — `custom-agent-resolver.ts` deleted entirely. `CustomAgentConfig` type, validation, resolution, and compilation code paths removed.
|
|
131
|
+
- **`agent_skills` config mechanism** — redundant with `stack`. All read/write/validation paths removed.
|
|
132
|
+
- **`preload_patterns` config field** — redundant with `SkillAssignment.preloaded`.
|
|
133
|
+
- **Dead `ProjectConfig` fields** — `philosophy`, `principles`, `tags`, `framework`, `hooks`.
|
|
134
|
+
- **Dead `SkillFrontmatter` fields** — `agent`, `argument-hint`, `context`, `disable-model-invocation`, `user-invocable`, `allowed-tools`.
|
|
135
|
+
- **Dead `PluginManifest` fields** — `homepage`, `license`, `repository`, `mcpServers`.
|
|
136
|
+
- **`ResolvedSkill.recommendedBy` and `requiredBy`** — unused inverse relationship fields.
|
|
137
|
+
- **`MarketplaceFetchResult.cacheKey`** — set but never read.
|
|
138
|
+
- **`CompileConfig.claude_md`** — always empty string.
|
|
139
|
+
- **`CompileMode` type and `getDirs()` function** — single-value enum.
|
|
140
|
+
- **`LoadedProjectConfig.isLegacy`** — always `false`.
|
|
141
|
+
- **`AgentYamlConfig.skills`** — parsed but never read.
|
|
142
|
+
- **Dead `skill-agent-mappings.ts` code** — ~170 lines of hardcoded fallbacks, `shouldPreloadSkill`, `extractCategoryKey`, `hasAgentSkillsOverride`, `isSkillAssignedToAgent`, `normalizeAgentSkills`, `resolveAgentsForSkill`.
|
|
143
|
+
- **Dead `resolver.ts` functions** — `resolveStackSkills`, `getStackSkillIds`, `flattenAgentSkills`, `expandSkillIdIfDirectory`, `normalizeSkillEntry`, unused interfaces.
|
|
144
|
+
- **Unused `compileAllAgents()` `_config` parameter**.
|
|
145
|
+
- **Dead wizard store actions/state** — `setDomainSelection`, `setSkillSource`, `setCurrentRefineIndex`, `setCurrentDomainIndex`, `toggleShowDescriptions`, `setFocus`, `currentRefineIndex`, `skillSources`.
|
|
146
|
+
- **Dead wizard component code** — `shouldShowSubcategory()` (always true), unused props, redundant computations.
|
|
147
|
+
- **~2,100 lines of redundant test code** for deleted features.
|
|
148
|
+
|
|
149
|
+
## [0.23.0] - 2026-02-10
|
|
150
|
+
|
|
151
|
+
### Added
|
|
152
|
+
|
|
153
|
+
- **Zod runtime validation at all parse boundaries** — 30+ schemas in `schemas.ts` using bridge pattern (`z.ZodType<ExistingType>`) validate every `JSON.parse` and `parseYaml` call in production code. Eliminates all production `as T` casts at deserialization boundaries. Lenient loader schemas use `.passthrough()` at parse boundaries; strict schemas for validation.
|
|
154
|
+
- **Typed object utilities** — `typedEntries<K,V>()` and `typedKeys<K>()` in `typed-object.ts` replace all `Object.entries/keys` boundary casts with type-safe helpers.
|
|
155
|
+
- **Named type aliases** — `SkillRef`, `SubcategorySelections`, `DomainSelections`, `CategoryMap`, `ResolvedSubcategorySkills` in `types-matrix.ts` for recurring composite types.
|
|
156
|
+
- **Scalar union types** — `ModelName` (`"sonnet" | "opus" | "haiku" | "inherit"`) and `PermissionMode` unions added to `types-matrix.ts`.
|
|
157
|
+
- **Testing strategy document** — `testing-strategy.md` with conventions for test categories, co-location rules, Ink component testing, keyboard simulation timing, and fixture organization.
|
|
158
|
+
|
|
159
|
+
### Changed
|
|
160
|
+
|
|
161
|
+
- **Extended type narrowing across 33 library files** — `Record<string, X>` narrowed to `Record<AgentName|SkillId|Subcategory, X>` where keys are known. Function signatures narrowed for `compileAgent`, `compileAgentForPlugin`, `getPluginSkillIds`, `fetchSkills`, `buildStackProperty`, `buildAgentSkills`, `validateBuildStep`, `populateFromStack`. Return types narrowed for `CompiledStackPlugin`, `StackInstallResult`, `RecompileAgentsResult`.
|
|
162
|
+
- **Replaced manual array operations with Remeda utilities** — `unique()`, `uniqueBy()`, `countBy()`, `sumBy()`, `sortBy()`, `indexBy()`, `mapToObj()`, `pipe()`, `flatMap()`, `filter()`, `mapValues()`, `difference()`, `groupBy()` across 20+ files.
|
|
163
|
+
- **`types.ts` interface fields narrowed** — `SkillDefinition.canonicalId` to `SkillId`, `AgentDefinition`/`AgentConfig` model/permission fields to `ModelName`/`PermissionMode`, `ProjectConfig.stack` to `ResolvedSubcategorySkills`. Inline `//` comments converted to JSDoc.
|
|
164
|
+
- **Wizard components and store narrowed** — Store selections use `DomainSelections`/`SubcategorySelections`, components use `typedEntries`/`typedKeys`.
|
|
165
|
+
|
|
166
|
+
### Dependencies
|
|
167
|
+
|
|
168
|
+
- Added `zod` v4.3.6 — runtime schema validation
|
|
169
|
+
- Added `remeda` v2.33.6 — tree-shakeable TypeScript-first utility functions
|
|
170
|
+
|
|
171
|
+
## [0.22.0] - 2026-02-09
|
|
172
|
+
|
|
173
|
+
### Changed
|
|
174
|
+
|
|
175
|
+
- **Union types for skill IDs, categories, agents, and domains** - Added `SkillId`, `CategoryPath`, `SkillAlias`, `AgentName`, `Domain`, `Subcategory` template literal and union types to `types-matrix.ts` as the single source of truth. All interface fields and function parameters across the codebase now use strict union types instead of `string`.
|
|
176
|
+
- **Narrowed production function signatures** - 27 production files updated: `matrix-resolver`, `skill-agent-mappings`, `resolver`, `wizard-store`, `step-build`, `category-grid`, and others. Type assertions (`as SkillId`, etc.) used only at data entry boundaries (YAML parsing, CLI input, `Object.keys()`).
|
|
177
|
+
- **Normalized skill ID format enforced at compile time** - `SkillId` = `` `${SkillIdPrefix}-${string}` `` prevents old-format IDs like `"react (@vince)"` at the type level. All test files updated to use `domain-subcategory-name` format.
|
|
178
|
+
- **Removed test constants** - `TEST_SKILLS`, `TEST_CATEGORIES`, `PLACEHOLDER_SKILLS`, `TEST_AUTHOR` removed from test helpers — union types provide compile-time safety, making string constants redundant.
|
|
179
|
+
- **`CategoryDefinition.id`** narrowed from `string` to `Subcategory`.
|
|
180
|
+
- **`SkillEntry`** narrowed from `string | SkillAssignment` to `SkillId | SkillAssignment`.
|
|
181
|
+
|
|
182
|
+
## [0.21.0] - 2026-02-09
|
|
183
|
+
|
|
184
|
+
### Changed
|
|
185
|
+
|
|
186
|
+
- **Removed refine wizard step** - The 5-step wizard flow (approach → stack → build → refine → confirm) is now 4 steps (approach → stack → build → confirm). The refine step for skill source selection has been removed; `refineAction` state and `setRefineAction` action removed from wizard store.
|
|
187
|
+
- **Build step layout** - Domain tabs header shows all selected domains with active domain highlighted; legend row simplified from positioned overlay to inline flex layout.
|
|
188
|
+
|
|
189
|
+
### Added
|
|
190
|
+
|
|
191
|
+
- **`web-extras` domain** - 8 categories (error-handling, file-upload, files, utilities, realtime, animation, pwa, accessibility) split from `web` into a new `web-extras` domain to reduce vertical height in the build view.
|
|
192
|
+
- **`parent_domain` field** on `CategoryDefinition` - Sub-domains inherit framework-first filtering from their parent domain (e.g., `web-extras` respects `web`'s framework selection).
|
|
193
|
+
- **`parentDomainSelections` prop** on `StepBuild` - Passes parent domain selections for framework compatibility filtering in sub-domains.
|
|
194
|
+
|
|
195
|
+
## [0.20.0] - 2026-02-07
|
|
196
|
+
|
|
197
|
+
### Changed
|
|
198
|
+
|
|
199
|
+
- **Removed `StackConfig` type** - All consumers (compile, agent-recompiler, resolver, stack-plugin-compiler, loader) now operate directly on `ProjectConfig`. The `StackConfig` interface, `loadStack()`, `loadStackSkills()`, `projectConfigToStackLike()`, `resolveAgentSkills()`, and related conversion helpers have been removed.
|
|
200
|
+
- **Removed global config layer** - The `~/.claude-collective/config.yaml` global config is no longer supported. Config resolution simplifies from `flag > env > project > global > default` to `flag > env > project > default`. The `config:set` and `config:unset` commands (which wrote to global config) have been deleted.
|
|
201
|
+
- **Removed legacy StackConfig detection** - `isLegacyStackConfig()`, `normalizeStackConfig()`, and the legacy format migration branch in `loadProjectConfig()` have been removed. `ProjectConfig` is the only supported format.
|
|
202
|
+
- **Removed StackConfig-based generator functions** - `generateConfigFromSkills`, `generateConfigFromStack`, `mergeStackWithSkills`, and `generateProjectConfigFromStack` removed from config-generator.
|
|
203
|
+
- **Removed `suggested_stacks` from skills matrix** - The field on `SkillsMatrixConfig` and the alias-resolution logic in `resolveSuggestedStacks()` have been removed; stacks are defined in `stacks.yaml`.
|
|
204
|
+
- **Removed deprecated frontmatter field warnings** - `category`, `author`, and `version` warnings in skill frontmatter validation removed (metadata comes from `metadata.yaml`).
|
|
205
|
+
- **Removed deprecated skill extraction functions** - `extractSkillName`, `extractCategory`, `extractAuthor` stubs removed from skill-plugin-compiler.
|
|
206
|
+
- **Removed deprecated `skills` field from `AgentDefinition`** - Skills come from stacks, not agent definitions.
|
|
207
|
+
|
|
208
|
+
### Removed
|
|
209
|
+
|
|
210
|
+
- **`config:set` command** - Wrote to removed global config.
|
|
211
|
+
- **`config:unset` command** - Wrote to removed global config.
|
|
212
|
+
- **`test-imports` command** - Hidden debug command no longer needed.
|
|
213
|
+
- **`GlobalConfig` type and helpers** - `loadGlobalConfig`, `saveGlobalConfig`, `getGlobalConfigPath`, `getGlobalConfigDir`.
|
|
214
|
+
- **`"global"` source origin** - Removed from `sourceOrigin` and `AgentsSourceOrigin` union types.
|
|
215
|
+
|
|
216
|
+
## [0.19.0] - 2026-02-07
|
|
217
|
+
|
|
218
|
+
### Changed
|
|
219
|
+
|
|
220
|
+
- **Removed top-level categories from skills matrix** - Top-level categories (`frontend`, `backend`, `setup`, `cli`, `mobile`, `reviewing`, `methodology`, `research`, `shared`, `local`) and the `parent` field on subcategories have been removed. The wizard already operated entirely on the `domain` field; the top-level layer added no value.
|
|
221
|
+
- **Aligned agent mapping patterns with domains** - Category path patterns in skill-agent-mappings renamed: `frontend/*` → `web/*`, `backend/*` → `api/*`, `setup/*` → `infra/*`. YAML defaults and marketplace generator updated to match.
|
|
222
|
+
- **Renamed `frontend/realtime` to `realtime`** - Composite subcategory ID simplified to match the `^[a-z][a-z0-9-]*$` schema pattern.
|
|
223
|
+
- **Stacks alias renamed** - `backend-testing` → `api-testing` in stacks.yaml.
|
|
224
|
+
|
|
225
|
+
### Added
|
|
226
|
+
|
|
227
|
+
- **New web categories** - `animation`, `pwa`, `accessibility`, `web-performance` for skills previously bucketed under the removed `frontend` top-level.
|
|
228
|
+
- **New shared categories** - `methodology`, `research`, `reviewing`, `ci-cd` for meta and infrastructure skills.
|
|
229
|
+
|
|
230
|
+
### Removed
|
|
231
|
+
|
|
232
|
+
- **`parent` field** from `CategoryDefinition` type and JSON schema.
|
|
233
|
+
- **`getSubcategories()` and `getTopLevelCategories()`** from matrix-resolver (unused in production code).
|
|
234
|
+
|
|
235
|
+
## [0.18.0] - 2026-02-07
|
|
236
|
+
|
|
237
|
+
### Added
|
|
238
|
+
|
|
239
|
+
- **Matrix health check** - New `matrix-health-check` module validates referential integrity of the merged skills matrix at load time, surfacing ghost skill IDs, missing domains, unknown categories, and dangling stack references
|
|
240
|
+
- **Diagnostic logging for alias resolution** - `resolveToCanonicalId` in matrix-loader now accepts a context parameter for verbose-level messages when an ID can't be resolved
|
|
241
|
+
- **Logger `warn()` function** - Always-visible warnings (not gated by verbose mode) for issues like unresolved aliases and missing skill categories
|
|
242
|
+
- **Expanded matrix categories** - Top-level categories (methodology, research, shared, local) and new subcategories: error-handling, i18n, file-upload, files, utilities, frontend/realtime, performance, security
|
|
243
|
+
- **New skill aliases** - `tailwind` → `web-styling-tailwind`, `mobx` → `web-state-mobx`, updated `oclif` → `cli-framework-oclif-ink`
|
|
244
|
+
|
|
245
|
+
### Changed
|
|
246
|
+
|
|
247
|
+
- **Dead types removed** - Removed unused types from `types.ts` (`SkillsConfig`, `RegistryConfig`, `AgentsConfig`, `AgentSkillEntry`, `SkillYamlConfig`, `Config`, `PluginCompileOptions`) and `types-matrix.ts` (`WizardState`)
|
|
248
|
+
- **Type disambiguations** - `ProjectConfig` → `ProjectSourceConfig` in config.ts, `SkillPluginOptions`/`StackPluginOptions` → `SkillManifestOptions`/`StackManifestOptions` in plugin-manifest.ts, `ForkedFromMetadata` → `ImportedForkedFromMetadata` in import command, `ValidationResult` → `BuildStepValidation` in step-build
|
|
249
|
+
- **Shared `extractFrontmatter` utility** - Deduplicated three identical copies (output-validator, plugin-validator, schema-validator) into `src/cli/utils/frontmatter.ts`
|
|
250
|
+
- **Shared wizard utilities** - Extracted `getDomainDisplayName` and `getStackName` from wizard.tsx and step-build.tsx into `wizard/utils.ts`
|
|
251
|
+
- **Consolidated `injectForkedFromMetadata`** - Moved from skill-copier.ts and update.tsx into skill-metadata.ts as single source of truth
|
|
252
|
+
- **`parseFrontmatter` import** - skill-plugin-compiler.ts now imports from loader.ts instead of defining its own copy
|
|
253
|
+
- **`LocalResolvedSkill` type** - Extracted named type in local-installer.ts replacing repeated inline object types
|
|
254
|
+
- **Deprecated `WizardResult` removed** - Wizard `onComplete` callback now accepts only `WizardResultV2`
|
|
255
|
+
- **`OutputValidationResult` replaced** - Uses `ValidationResult` from types.ts instead of local duplicate
|
|
256
|
+
- **Matrix alias cleanup** - Removed references to skills not yet created (yargs, clack, inquirer, ink, svelte) from conflicts, alternatives, recommends, and requires
|
|
257
|
+
|
|
258
|
+
## [0.17.0] - 2026-02-07
|
|
259
|
+
|
|
260
|
+
### Added
|
|
261
|
+
|
|
262
|
+
- **Local skill badge in wizard** - Skill tags in the CategoryGrid now show a gray `[L]` badge when the skill has a local override in `.claude/skills/`
|
|
263
|
+
|
|
264
|
+
### Changed
|
|
265
|
+
|
|
266
|
+
- **Extract config-merger module** - Config merging logic (identity fields, skills/agents union, stack deep-merge) extracted from `init.tsx` into dedicated `lib/config-merger.ts` with comprehensive tests
|
|
267
|
+
- **Extract local-installer module** - Local installation orchestration (skill copying, config generation, agent compilation) extracted from `init.tsx` into `lib/local-installer.ts`, reducing the command to a thin orchestrator
|
|
268
|
+
- **Deduplicate getCurrentDate** - Removed duplicate `getCurrentDate()` definitions from `import/skill.ts`, `update.tsx`, and `skill-copier.ts` in favor of the canonical export from `lib/versioning.ts`
|
|
269
|
+
- **Graceful missing skill resolution** - `resolveSkillReference` now returns `null` and logs a verbose message instead of throwing when a skill is not found; callers skip missing skills gracefully
|
|
270
|
+
- **Remove synthetic local categories** - Stop injecting fake `local` and `local/custom` category definitions into the skills matrix; local skills use their declared or inherited category
|
|
271
|
+
|
|
272
|
+
### Fixed
|
|
273
|
+
|
|
274
|
+
- **Wizard skill count mismatch** - Confirm step now uses `getAllSelectedTechnologies()` instead of `getSelectedSkills()` so the count matches the actual technologies shown
|
|
275
|
+
- **Wizard option tracking** - Build step uses `skill.id` instead of alias for `CategoryOption.id` so selection tracking stays consistent
|
|
276
|
+
- **Multi-skill category pre-population** - Stack pre-population now uses per-skill pseudo-agents so categories with multiple skills (e.g. testing: vitest + playwright-e2e) are all preserved instead of the second overwriting the first
|
|
277
|
+
|
|
278
|
+
## [0.16.0] - 2026-02-07
|
|
279
|
+
|
|
280
|
+
### Changed
|
|
281
|
+
|
|
282
|
+
- **Wizard flow simplified** - Removed the intermediate "stack-options" step; selecting a stack now goes directly to the build step with pre-populated technology selections. Flow is now: approach -> stack -> build -> refine -> confirm
|
|
283
|
+
- **ViewTitle component** - Simplified API from `title` string prop to `children` for flexible composition
|
|
284
|
+
- **Build step header** - Replaced domain tab header with ViewTitle showing "Customise your {Domain} stack"
|
|
285
|
+
- **Build step legend** - Simplified color legend from background-colored badges to plain colored text
|
|
286
|
+
- **CategoryGrid styling** - Skill tags now use border-based styling instead of background colors; removed section header underlines
|
|
287
|
+
|
|
288
|
+
### Added
|
|
289
|
+
|
|
290
|
+
- **Accept defaults shortcut** - Press `A` during build step (stack path only) to skip customization and continue with stack defaults
|
|
291
|
+
- **All-domain cycling** - Stack selection now includes all five domains (web, api, cli, mobile, shared) in the build step, even if the stack only covers some
|
|
292
|
+
|
|
293
|
+
### Fixed
|
|
294
|
+
|
|
295
|
+
- **Local skill category preservation** - When a local skill overwrites a remote skill, the remote skill's domain-based category is now preserved instead of falling back to "local/custom"
|
|
296
|
+
|
|
297
|
+
### Removed
|
|
298
|
+
|
|
299
|
+
- **StepStackOptions component** - Eliminated intermediate step between stack selection and technology customization
|
|
300
|
+
|
|
301
|
+
## [0.15.0] - 2026-02-07
|
|
302
|
+
|
|
303
|
+
### Added
|
|
304
|
+
|
|
305
|
+
- **MenuItem component** - Reusable chevron + label menu item with focused/active states for wizard navigation
|
|
306
|
+
- **ViewTitle component** - Yellow-background title banner for consistent wizard step headings
|
|
307
|
+
- **Global keyboard shortcuts** - `E` toggles expert mode, `P` toggles plugin/local install mode, `D` toggles descriptions (on build step) - available from any wizard step
|
|
308
|
+
|
|
309
|
+
### Changed
|
|
310
|
+
|
|
311
|
+
- **Step Approach** - Replaced Select dropdown with custom card-based navigation using arrow keys and Enter
|
|
312
|
+
- **Step Stack** - Replaced Select dropdown with card-based stack selection; Escape for back navigation; focus starts at first stack
|
|
313
|
+
- **Mode toggles** - Expert mode and install mode moved from per-step menu options to persistent global shortcuts shown in layout footer
|
|
314
|
+
- **Build step legend** - Repositioned color legend (active/recommended/discouraged/disabled) above category grid
|
|
315
|
+
|
|
316
|
+
### Removed
|
|
317
|
+
|
|
318
|
+
- **Inline keyboard hints** - Removed per-step keyboard hint text (global footer already provides this)
|
|
319
|
+
- **CategoryGrid header/legend** - Moved toggle indicators and legend out of CategoryGrid to parent components
|
|
320
|
+
|
|
321
|
+
## [0.14.1] - 2026-02-07
|
|
322
|
+
|
|
323
|
+
### Changed
|
|
324
|
+
|
|
325
|
+
- **Extract skill-metadata library** - Deduplicated `readForkedFromMetadata`, `getLocalSkillsWithMetadata`, `computeSourceHash`, and `compareSkills` into shared `lib/skill-metadata.ts`, removing ~254 lines from `update.tsx`, `outdated.ts`, and `diff.ts`
|
|
326
|
+
- **Extract config-saver library** - Deduplicated `saveSourceToProjectConfig` into shared `lib/config-saver.ts`, removing duplication from `init.tsx` and `eject.ts`
|
|
327
|
+
- **Extract plugin-manifest-finder library** - Deduplicated `findPluginManifest` into shared `lib/plugin-manifest-finder.ts`, removing duplication from 4 `version/*` command files
|
|
328
|
+
|
|
329
|
+
### Removed
|
|
330
|
+
|
|
331
|
+
- **Unused step-build props** - Removed `currentDomainIndex` prop, dead code from SectionProgress removal (unused imports, constants, functions)
|
|
332
|
+
|
|
333
|
+
## [0.14.0] - 2026-02-07
|
|
334
|
+
|
|
335
|
+
### Changed
|
|
336
|
+
|
|
337
|
+
- **WizardLayout component** - Extracted layout wrapper that renders WizardTabs (header), children, and WizardFooter consistently across all wizard steps
|
|
338
|
+
- **Wizard tabs** - Simplified to text-only styling (cyan current, dimmed skipped) with horizontal border lines; renamed "Approach" step to "Intro"; version displayed in tab bar
|
|
339
|
+
- **Build step header** - Redesigned with domain tab navigation and inline toggle indicators for descriptions and expert mode
|
|
340
|
+
- **Wizard footer** - Unified keyboard shortcut hints (navigate, select, continue, back, export) displayed on all steps, replacing per-step footer strings
|
|
341
|
+
|
|
342
|
+
### Added
|
|
343
|
+
|
|
344
|
+
- **ASCII art banner** - Init command displays stylized banner on startup
|
|
345
|
+
- **Prettier config** - Added `prettier.config.mjs` for consistent code formatting (printWidth 100)
|
|
346
|
+
|
|
347
|
+
### Removed
|
|
348
|
+
|
|
349
|
+
- **Old WizardFooter component** (`wizard-footer.tsx`) - Replaced by centralized footer in WizardLayout
|
|
350
|
+
- **SectionProgress in build step** - Domain progress replaced by domain tab navigation in header
|
|
351
|
+
|
|
352
|
+
### Fixed
|
|
353
|
+
|
|
354
|
+
- **Version display** - Fixed broken `import { config } from "process"` (Node's build config, not CLI version); version now prop-drilled from oclif `this.config.version`
|
|
355
|
+
|
|
8
356
|
## [0.13.4] - 2026-02-06
|
|
9
357
|
|
|
10
358
|
### Fixed
|
|
@@ -55,6 +403,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
55
403
|
|
|
56
404
|
- Old `search.ts` command - Replaced with dual-mode `search.tsx` (static + interactive)
|
|
57
405
|
|
|
406
|
+
[0.21.0]: https://github.com/claude-collective/cli/releases/tag/v0.21.0
|
|
407
|
+
[0.20.0]: https://github.com/claude-collective/cli/releases/tag/v0.20.0
|
|
408
|
+
[0.19.0]: https://github.com/claude-collective/cli/releases/tag/v0.19.0
|
|
409
|
+
[0.18.0]: https://github.com/claude-collective/cli/releases/tag/v0.18.0
|
|
410
|
+
[0.17.0]: https://github.com/claude-collective/cli/releases/tag/v0.17.0
|
|
411
|
+
[0.16.0]: https://github.com/claude-collective/cli/releases/tag/v0.16.0
|
|
412
|
+
[0.15.0]: https://github.com/claude-collective/cli/releases/tag/v0.15.0
|
|
413
|
+
[0.14.1]: https://github.com/claude-collective/cli/releases/tag/v0.14.1
|
|
414
|
+
[0.14.0]: https://github.com/claude-collective/cli/releases/tag/v0.14.0
|
|
58
415
|
[0.13.4]: https://github.com/claude-collective/cli/releases/tag/v0.13.4
|
|
59
416
|
[0.13.3]: https://github.com/claude-collective/cli/releases/tag/v0.13.3
|
|
60
417
|
[0.13.2]: https://github.com/claude-collective/cli/releases/tag/v0.13.2
|
package/README.md
CHANGED
|
@@ -31,29 +31,31 @@ requires node 18+ and [Claude Code](https://docs.anthropic.com/en/docs/claude-co
|
|
|
31
31
|
|
|
32
32
|
## commands
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
34
|
+
| command | what it does |
|
|
35
|
+
| ------------------- | ------------------------------------------------------------- |
|
|
36
|
+
| `init` | interactive setup - pick skills, configure agents |
|
|
37
|
+
| `edit` | modify your skill selection |
|
|
38
|
+
| `compile` | recompile agents after changes |
|
|
39
|
+
| `update` | update local skills from source |
|
|
40
|
+
| `list` | show what's installed |
|
|
41
|
+
| `doctor` | diagnose setup issues |
|
|
42
|
+
| `search` | search for skills |
|
|
43
|
+
| `info <skill>` | show skill details |
|
|
44
|
+
| `diff` | show skill differences vs source |
|
|
45
|
+
| `outdated` | check for outdated skills |
|
|
46
|
+
| `validate` | check your setup is correct |
|
|
47
|
+
| `new skill` | create a custom skill |
|
|
48
|
+
| `new agent` | create a custom agent |
|
|
49
|
+
| `import skill` | import a skill from a remote source |
|
|
50
|
+
| `eject` | eject skills/agent partials for customization |
|
|
51
|
+
| `uninstall` | remove Claude Collective from project |
|
|
52
|
+
| `config` | manage settings (show, get, set-project, unset-project, path) |
|
|
53
|
+
| `version` | show/manage plugin versions (show, set, bump) |
|
|
54
|
+
| `build marketplace` | generate marketplace.json |
|
|
55
|
+
| `build plugins` | build individual skill plugins |
|
|
56
|
+
| `build stack` | build a stack plugin |
|
|
57
|
+
|
|
58
|
+
every command supports `--dry-run` and `--source` flags. run `npx @claude-collective/cli <command> --help` for full options.
|
|
57
59
|
|
|
58
60
|
## how skills work
|
|
59
61
|
|
|
@@ -90,7 +92,7 @@ each stack includes agents like `web-developer`, `api-developer`, `web-reviewer`
|
|
|
90
92
|
**as a plugin** (recommended for personal use):
|
|
91
93
|
|
|
92
94
|
```bash
|
|
93
|
-
|
|
95
|
+
npx @claude-collective/cli init
|
|
94
96
|
# interactive wizard lets you choose: plugin mode, local mode, or marketplace setup
|
|
95
97
|
# plugin mode installs to ./.claude/plugins/claude-collective/
|
|
96
98
|
```
|
|
@@ -98,7 +100,7 @@ cc init
|
|
|
98
100
|
**locally in your project** (for team sharing):
|
|
99
101
|
|
|
100
102
|
```bash
|
|
101
|
-
|
|
103
|
+
npx @claude-collective/cli init
|
|
102
104
|
# select "local" mode in the wizard
|
|
103
105
|
# installs to ./.claude/ in your repo
|
|
104
106
|
```
|
|
@@ -106,7 +108,7 @@ cc init
|
|
|
106
108
|
**your own marketplace** (for orgs):
|
|
107
109
|
|
|
108
110
|
```bash
|
|
109
|
-
|
|
111
|
+
npx @claude-collective/cli init
|
|
110
112
|
# select "marketplace" mode in the wizard
|
|
111
113
|
# scaffolds a marketplace you can customize and host
|
|
112
114
|
```
|
|
@@ -116,11 +118,23 @@ cc init
|
|
|
116
118
|
if the existing skills don't cover what you need:
|
|
117
119
|
|
|
118
120
|
```bash
|
|
119
|
-
|
|
121
|
+
npx @claude-collective/cli new skill my-custom-skill
|
|
120
122
|
```
|
|
121
123
|
|
|
122
124
|
this scaffolds the structure. a skill is just markdown with examples - no special tooling required.
|
|
123
125
|
|
|
126
|
+
## architecture
|
|
127
|
+
|
|
128
|
+
built with TypeScript (strict mode), oclif for commands, Ink (React) for terminal UI, Zod for runtime validation, and Zustand for wizard state. the core pipeline:
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
source resolution → skill loading → matrix merging → wizard selection → config generation → agent compilation → installation
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
the codebase is organized into domain-driven library modules (`agents/`, `configuration/`, `loading/`, `matrix/`, `plugins/`, `skills/`, `stacks/`, `installation/`) with barrel exports. agents are compiled from YAML definitions + markdown partials through Liquid templates.
|
|
135
|
+
|
|
136
|
+
see [docs/architecture.md](./docs/architecture.md) for the full reference.
|
|
137
|
+
|
|
124
138
|
## links
|
|
125
139
|
|
|
126
140
|
- [skills repository](https://github.com/claude-collective/skills) - all the skills and stacks
|