@claude-collective/cli 0.21.0 → 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.
Files changed (292) hide show
  1. package/CHANGELOG.md +174 -0
  2. package/README.md +41 -27
  3. package/config/skills-matrix.yaml +38 -37
  4. package/config/stacks.yaml +8 -14
  5. package/dist/{chunk-ZNIDWLL5.js → chunk-3X5D7RM5.js} +4 -3
  6. package/dist/chunk-3X5D7RM5.js.map +1 -0
  7. package/dist/chunk-4S4FCAA2.js +100 -0
  8. package/dist/chunk-4S4FCAA2.js.map +1 -0
  9. package/dist/chunk-4WGN6SUE.js +197 -0
  10. package/dist/chunk-4WGN6SUE.js.map +1 -0
  11. package/dist/{chunk-DHET7RCE.js → chunk-AWKZ5BDL.js} +9 -2
  12. package/dist/{chunk-DHET7RCE.js.map → chunk-AWKZ5BDL.js.map} +1 -1
  13. package/dist/{chunk-6Q3Y7KVB.js → chunk-DBRUQQUF.js} +8 -2
  14. package/dist/chunk-DBRUQQUF.js.map +1 -0
  15. package/dist/{chunk-OQYYMQJR.js → chunk-ETCVEV3S.js} +8 -11
  16. package/dist/chunk-ETCVEV3S.js.map +1 -0
  17. package/dist/{chunk-ZSVMS677.js → chunk-F4RD5FYM.js} +2 -2
  18. package/dist/chunk-F4RD5FYM.js.map +1 -0
  19. package/dist/{chunk-5KXUDHAB.js → chunk-GGFOD5PK.js} +6 -9
  20. package/dist/chunk-GGFOD5PK.js.map +1 -0
  21. package/dist/{chunk-UMORK7OK.js → chunk-H7SSBSPR.js} +2 -2
  22. package/dist/chunk-H7SSBSPR.js.map +1 -0
  23. package/dist/chunk-HWD32NP7.js +19 -0
  24. package/dist/chunk-HWD32NP7.js.map +1 -0
  25. package/dist/{chunk-HGCBZUH5.js → chunk-IAYAE6MG.js} +9 -10
  26. package/dist/chunk-IAYAE6MG.js.map +1 -0
  27. package/dist/{chunk-RTE64SJA.js → chunk-IXBCRT3F.js} +2 -2
  28. package/dist/chunk-IXBCRT3F.js.map +1 -0
  29. package/dist/{chunk-WFEFICFM.js → chunk-KWYO3M5Q.js} +5 -5
  30. package/dist/chunk-KWYO3M5Q.js.map +1 -0
  31. package/dist/{chunk-HEOHU5EZ.js → chunk-MCTSHLAF.js} +22 -11
  32. package/dist/chunk-MCTSHLAF.js.map +1 -0
  33. package/dist/chunk-MH66WDFV.js +251 -0
  34. package/dist/chunk-MH66WDFV.js.map +1 -0
  35. package/dist/{chunk-2LSGX6R4.js → chunk-MTPM7BX5.js} +83 -25
  36. package/dist/chunk-MTPM7BX5.js.map +1 -0
  37. package/dist/chunk-NQJ47R4N.js +1092 -0
  38. package/dist/chunk-NQJ47R4N.js.map +1 -0
  39. package/dist/chunk-NRC7XYCI.js +211 -0
  40. package/dist/chunk-NRC7XYCI.js.map +1 -0
  41. package/dist/{chunk-FJFEKPXF.js → chunk-O6ZTD7ZI.js} +14 -3
  42. package/dist/chunk-O6ZTD7ZI.js.map +1 -0
  43. package/dist/chunk-OBXAY23Y.js +56 -0
  44. package/dist/chunk-OBXAY23Y.js.map +1 -0
  45. package/dist/{chunk-XY3XDVMI.js → chunk-QR2EBWL2.js} +3 -3
  46. package/dist/{chunk-66UDJBF6.js → chunk-REJGRCVQ.js} +2 -2
  47. package/dist/{chunk-CBLPAMZO.js → chunk-TMED5DQ2.js} +68 -42
  48. package/dist/chunk-TMED5DQ2.js.map +1 -0
  49. package/dist/{chunk-Q3J43SF3.js → chunk-U7HFKR74.js} +2 -2
  50. package/dist/chunk-U7HFKR74.js.map +1 -0
  51. package/dist/{chunk-3EHUF54X.js → chunk-UEMRJI2K.js} +17 -4
  52. package/dist/chunk-UEMRJI2K.js.map +1 -0
  53. package/dist/{chunk-Z2CWURZ6.js → chunk-UNN7523L.js} +2 -2
  54. package/dist/chunk-V2ZIH7HV.js +29 -0
  55. package/dist/chunk-V2ZIH7HV.js.map +1 -0
  56. package/dist/{chunk-ZEI3ZUDU.js → chunk-VVYNZZUX.js} +7 -15
  57. package/dist/chunk-VVYNZZUX.js.map +1 -0
  58. package/dist/chunk-WXS4S3MA.js +220 -0
  59. package/dist/chunk-WXS4S3MA.js.map +1 -0
  60. package/dist/{chunk-A46TPNBJ.js → chunk-XENOESJZ.js} +7 -16
  61. package/dist/chunk-XENOESJZ.js.map +1 -0
  62. package/dist/chunk-YDBSSAJ6.js +4207 -0
  63. package/dist/chunk-YDBSSAJ6.js.map +1 -0
  64. package/dist/chunk-ZDREFYD2.js +696 -0
  65. package/dist/chunk-ZDREFYD2.js.map +1 -0
  66. package/dist/chunk-ZW2PELOH.js +197 -0
  67. package/dist/chunk-ZW2PELOH.js.map +1 -0
  68. package/dist/cli/defaults/agent-mappings.yaml +0 -1
  69. package/dist/commands/build/marketplace.js +15 -13
  70. package/dist/commands/build/marketplace.js.map +1 -1
  71. package/dist/commands/build/plugins.js +13 -229
  72. package/dist/commands/build/plugins.js.map +1 -1
  73. package/dist/commands/build/stack.js +11 -18
  74. package/dist/commands/build/stack.js.map +1 -1
  75. package/dist/commands/compile.js +36 -58
  76. package/dist/commands/compile.js.map +1 -1
  77. package/dist/commands/config/get.js +8 -8
  78. package/dist/commands/config/get.js.map +1 -1
  79. package/dist/commands/config/index.js +7 -7
  80. package/dist/commands/config/index.js.map +1 -1
  81. package/dist/commands/config/path.js +6 -6
  82. package/dist/commands/config/path.js.map +1 -1
  83. package/dist/commands/config/set-project.js +8 -8
  84. package/dist/commands/config/set-project.js.map +1 -1
  85. package/dist/commands/config/show.js +7 -7
  86. package/dist/commands/config/unset-project.js +8 -8
  87. package/dist/commands/config/unset-project.js.map +1 -1
  88. package/dist/commands/diff.js +10 -16
  89. package/dist/commands/diff.js.map +1 -1
  90. package/dist/commands/doctor.js +18 -51
  91. package/dist/commands/doctor.js.map +1 -1
  92. package/dist/commands/edit.js +87 -57
  93. package/dist/commands/edit.js.map +1 -1
  94. package/dist/commands/eject.js +17 -49
  95. package/dist/commands/eject.js.map +1 -1
  96. package/dist/commands/import/skill.js +26 -26
  97. package/dist/commands/import/skill.js.map +1 -1
  98. package/dist/commands/info.js +15 -17
  99. package/dist/commands/info.js.map +1 -1
  100. package/dist/commands/init.js +45 -722
  101. package/dist/commands/init.js.map +1 -1
  102. package/dist/commands/list.js +8 -87
  103. package/dist/commands/list.js.map +1 -1
  104. package/dist/commands/new/agent.js +8 -12
  105. package/dist/commands/new/agent.js.map +1 -1
  106. package/dist/commands/new/skill.js +6 -6
  107. package/dist/commands/new/skill.js.map +1 -1
  108. package/dist/commands/outdated.js +15 -19
  109. package/dist/commands/outdated.js.map +1 -1
  110. package/dist/commands/search.js +21 -34
  111. package/dist/commands/search.js.map +1 -1
  112. package/dist/commands/uninstall.js +15 -14
  113. package/dist/commands/uninstall.js.map +1 -1
  114. package/dist/commands/update.js +13 -24
  115. package/dist/commands/update.js.map +1 -1
  116. package/dist/commands/validate.js +44 -487
  117. package/dist/commands/validate.js.map +1 -1
  118. package/dist/commands/version/bump.js +11 -11
  119. package/dist/commands/version/bump.js.map +1 -1
  120. package/dist/commands/version/index.js +9 -10
  121. package/dist/commands/version/index.js.map +1 -1
  122. package/dist/commands/version/set.js +10 -8
  123. package/dist/commands/version/set.js.map +1 -1
  124. package/dist/commands/version/show.js +9 -10
  125. package/dist/commands/version/show.js.map +1 -1
  126. package/dist/components/common/confirm.js +2 -2
  127. package/dist/components/common/confirm.test.js +203 -0
  128. package/dist/components/common/confirm.test.js.map +1 -0
  129. package/dist/components/common/message.js +1 -1
  130. package/dist/components/common/spinner.js +1 -1
  131. package/dist/components/common/spinner.js.map +1 -1
  132. package/dist/components/skill-search/skill-search.js +3 -3
  133. package/dist/components/wizard/category-grid.js +2 -2
  134. package/dist/components/wizard/category-grid.test.js +132 -78
  135. package/dist/components/wizard/category-grid.test.js.map +1 -1
  136. package/dist/components/wizard/menu-item.js +2 -2
  137. package/dist/components/wizard/search-modal.js +9 -0
  138. package/dist/components/wizard/search-modal.js.map +1 -0
  139. package/dist/components/wizard/search-modal.test.js +216 -0
  140. package/dist/components/wizard/search-modal.test.js.map +1 -0
  141. package/dist/components/wizard/section-progress.js +2 -2
  142. package/dist/components/wizard/section-progress.test.js +4 -4
  143. package/dist/components/wizard/section-progress.test.js.map +1 -1
  144. package/dist/components/wizard/source-grid.js +10 -0
  145. package/dist/components/wizard/source-grid.js.map +1 -0
  146. package/dist/components/wizard/source-grid.test.js +500 -0
  147. package/dist/components/wizard/source-grid.test.js.map +1 -0
  148. package/dist/components/wizard/step-approach.js +7 -6
  149. package/dist/components/wizard/step-approach.test.js +115 -0
  150. package/dist/components/wizard/step-approach.test.js.map +1 -0
  151. package/dist/components/wizard/step-build.js +9 -4
  152. package/dist/components/wizard/step-build.test.js +103 -122
  153. package/dist/components/wizard/step-build.test.js.map +1 -1
  154. package/dist/components/wizard/step-confirm.js +3 -2
  155. package/dist/components/wizard/step-confirm.test.js +364 -0
  156. package/dist/components/wizard/step-confirm.test.js.map +1 -0
  157. package/dist/components/wizard/step-refine.js +2 -2
  158. package/dist/components/wizard/step-refine.test.js +19 -13
  159. package/dist/components/wizard/step-refine.test.js.map +1 -1
  160. package/dist/components/wizard/step-settings.js +14 -0
  161. package/dist/components/wizard/step-settings.js.map +1 -0
  162. package/dist/components/wizard/step-settings.test.js +240 -0
  163. package/dist/components/wizard/step-settings.test.js.map +1 -0
  164. package/dist/components/wizard/step-sources.js +17 -0
  165. package/dist/components/wizard/step-sources.js.map +1 -0
  166. package/dist/components/wizard/step-sources.test.js +290 -0
  167. package/dist/components/wizard/step-sources.test.js.map +1 -0
  168. package/dist/components/wizard/step-stack.js +7 -6
  169. package/dist/components/wizard/step-stack.test.js +344 -0
  170. package/dist/components/wizard/step-stack.test.js.map +1 -0
  171. package/dist/components/wizard/view-title.js +2 -2
  172. package/dist/components/wizard/wizard-layout.js +6 -5
  173. package/dist/components/wizard/wizard-tabs.js +2 -2
  174. package/dist/components/wizard/wizard-tabs.test.js +292 -0
  175. package/dist/components/wizard/wizard-tabs.test.js.map +1 -0
  176. package/dist/components/wizard/wizard.js +22 -14
  177. package/dist/config/skills-matrix.yaml +38 -37
  178. package/dist/config/stacks.yaml +8 -14
  179. package/dist/hooks/init.js +5 -5
  180. package/dist/hooks/init.js.map +1 -1
  181. package/dist/index.js +1 -1
  182. package/dist/index.js.map +1 -1
  183. package/dist/{magic-string.es-RGXYGAW3.js → magic-string.es-PAH2SOTR.js} +2 -2
  184. package/dist/source-manager-DSYZEVGZ.js +16 -0
  185. package/dist/source-manager-DSYZEVGZ.js.map +1 -0
  186. package/dist/src/agents/developer/api-developer/agent.yaml +1 -1
  187. package/dist/src/agents/developer/cli-developer/agent.yaml +1 -1
  188. package/dist/src/agents/developer/web-architecture/agent.yaml +1 -1
  189. package/dist/src/agents/developer/web-developer/agent.yaml +1 -1
  190. package/dist/src/agents/meta/agent-summoner/agent.yaml +1 -1
  191. package/dist/src/agents/meta/documentor/agent.yaml +1 -1
  192. package/dist/src/agents/meta/skill-summoner/agent.yaml +1 -1
  193. package/dist/src/agents/migration/cli-migrator/agent.yaml +1 -1
  194. package/dist/src/agents/pattern/pattern-scout/agent.yaml +1 -1
  195. package/dist/src/agents/pattern/web-pattern-critique/agent.yaml +1 -1
  196. package/dist/src/agents/planning/web-pm/agent.yaml +1 -1
  197. package/dist/src/agents/researcher/api-researcher/agent.yaml +1 -1
  198. package/dist/src/agents/researcher/web-researcher/agent.yaml +1 -1
  199. package/dist/src/agents/reviewer/api-reviewer/agent.yaml +1 -1
  200. package/dist/src/agents/reviewer/cli-reviewer/agent.yaml +1 -1
  201. package/dist/src/agents/reviewer/web-reviewer/agent.yaml +1 -1
  202. package/dist/src/agents/tester/cli-tester/agent.yaml +1 -1
  203. package/dist/src/agents/tester/web-tester/agent.yaml +1 -1
  204. package/dist/stores/wizard-store.js +4 -3
  205. package/dist/stores/wizard-store.test.js +51 -82
  206. package/dist/stores/wizard-store.test.js.map +1 -1
  207. package/package.json +5 -3
  208. package/src/agents/developer/api-developer/agent.yaml +1 -1
  209. package/src/agents/developer/cli-developer/agent.yaml +1 -1
  210. package/src/agents/developer/web-architecture/agent.yaml +1 -1
  211. package/src/agents/developer/web-developer/agent.yaml +1 -1
  212. package/src/agents/meta/agent-summoner/agent.yaml +1 -1
  213. package/src/agents/meta/documentor/agent.yaml +1 -1
  214. package/src/agents/meta/skill-summoner/agent.yaml +1 -1
  215. package/src/agents/migration/cli-migrator/agent.yaml +1 -1
  216. package/src/agents/pattern/pattern-scout/agent.yaml +1 -1
  217. package/src/agents/pattern/web-pattern-critique/agent.yaml +1 -1
  218. package/src/agents/planning/web-pm/agent.yaml +1 -1
  219. package/src/agents/researcher/api-researcher/agent.yaml +1 -1
  220. package/src/agents/researcher/web-researcher/agent.yaml +1 -1
  221. package/src/agents/reviewer/api-reviewer/agent.yaml +1 -1
  222. package/src/agents/reviewer/cli-reviewer/agent.yaml +1 -1
  223. package/src/agents/reviewer/web-reviewer/agent.yaml +1 -1
  224. package/src/agents/tester/cli-tester/agent.yaml +1 -1
  225. package/src/agents/tester/web-tester/agent.yaml +1 -1
  226. package/dist/chunk-2LSGX6R4.js.map +0 -1
  227. package/dist/chunk-2OKUEELH.js +0 -32
  228. package/dist/chunk-2OKUEELH.js.map +0 -1
  229. package/dist/chunk-374JNMR6.js +0 -212
  230. package/dist/chunk-374JNMR6.js.map +0 -1
  231. package/dist/chunk-3EHUF54X.js.map +0 -1
  232. package/dist/chunk-3XR4PALU.js +0 -529
  233. package/dist/chunk-3XR4PALU.js.map +0 -1
  234. package/dist/chunk-5K2ZLUO5.js +0 -57
  235. package/dist/chunk-5K2ZLUO5.js.map +0 -1
  236. package/dist/chunk-5KXUDHAB.js.map +0 -1
  237. package/dist/chunk-6Q3Y7KVB.js.map +0 -1
  238. package/dist/chunk-7SLV7CMF.js +0 -615
  239. package/dist/chunk-7SLV7CMF.js.map +0 -1
  240. package/dist/chunk-A46TPNBJ.js.map +0 -1
  241. package/dist/chunk-AL74GBW4.js +0 -69
  242. package/dist/chunk-AL74GBW4.js.map +0 -1
  243. package/dist/chunk-BQX23RBV.js +0 -191
  244. package/dist/chunk-BQX23RBV.js.map +0 -1
  245. package/dist/chunk-CA4LH4LI.js +0 -132
  246. package/dist/chunk-CA4LH4LI.js.map +0 -1
  247. package/dist/chunk-CBLPAMZO.js.map +0 -1
  248. package/dist/chunk-CKPQHGXR.js +0 -417
  249. package/dist/chunk-CKPQHGXR.js.map +0 -1
  250. package/dist/chunk-CXOFOJCN.js +0 -80
  251. package/dist/chunk-CXOFOJCN.js.map +0 -1
  252. package/dist/chunk-EHGD7HIE.js +0 -104
  253. package/dist/chunk-EHGD7HIE.js.map +0 -1
  254. package/dist/chunk-EHS3TWWP.js +0 -95
  255. package/dist/chunk-EHS3TWWP.js.map +0 -1
  256. package/dist/chunk-FJFEKPXF.js.map +0 -1
  257. package/dist/chunk-HEOHU5EZ.js.map +0 -1
  258. package/dist/chunk-HGCBZUH5.js.map +0 -1
  259. package/dist/chunk-HPGFY5ZN.js +0 -114
  260. package/dist/chunk-HPGFY5ZN.js.map +0 -1
  261. package/dist/chunk-INJ2EFRW.js +0 -127
  262. package/dist/chunk-INJ2EFRW.js.map +0 -1
  263. package/dist/chunk-IOBFMF6X.js +0 -61
  264. package/dist/chunk-IOBFMF6X.js.map +0 -1
  265. package/dist/chunk-KH3HA7J7.js +0 -116
  266. package/dist/chunk-KH3HA7J7.js.map +0 -1
  267. package/dist/chunk-N6JNE326.js +0 -261
  268. package/dist/chunk-N6JNE326.js.map +0 -1
  269. package/dist/chunk-NAGU7TVZ.js +0 -36
  270. package/dist/chunk-NAGU7TVZ.js.map +0 -1
  271. package/dist/chunk-OQYYMQJR.js.map +0 -1
  272. package/dist/chunk-PLZOUVDD.js +0 -419
  273. package/dist/chunk-PLZOUVDD.js.map +0 -1
  274. package/dist/chunk-Q3J43SF3.js.map +0 -1
  275. package/dist/chunk-RTE64SJA.js.map +0 -1
  276. package/dist/chunk-T25OEQFI.js +0 -26
  277. package/dist/chunk-T25OEQFI.js.map +0 -1
  278. package/dist/chunk-UMORK7OK.js.map +0 -1
  279. package/dist/chunk-VFHWU7JU.js +0 -287
  280. package/dist/chunk-VFHWU7JU.js.map +0 -1
  281. package/dist/chunk-VS4GVTZE.js +0 -91
  282. package/dist/chunk-VS4GVTZE.js.map +0 -1
  283. package/dist/chunk-WFEFICFM.js.map +0 -1
  284. package/dist/chunk-WG6KIAPK.js +0 -54
  285. package/dist/chunk-WG6KIAPK.js.map +0 -1
  286. package/dist/chunk-ZEI3ZUDU.js.map +0 -1
  287. package/dist/chunk-ZNIDWLL5.js.map +0 -1
  288. package/dist/chunk-ZSVMS677.js.map +0 -1
  289. /package/dist/{chunk-XY3XDVMI.js.map → chunk-QR2EBWL2.js.map} +0 -0
  290. /package/dist/{chunk-66UDJBF6.js.map → chunk-REJGRCVQ.js.map} +0 -0
  291. /package/dist/{chunk-Z2CWURZ6.js.map → chunk-UNN7523L.js.map} +0 -0
  292. /package/dist/{magic-string.es-RGXYGAW3.js.map → magic-string.es-PAH2SOTR.js.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -5,6 +5,180 @@ 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
+
8
182
  ## [0.21.0] - 2026-02-09
9
183
 
10
184
  ### Changed
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
- ```bash
35
- cc init # interactive setup - pick skills, configure agents
36
- cc edit # modify your skill selection
37
- cc compile # recompile agents after changes
38
- cc list # show what's installed
39
- cc config # manage settings
40
- cc validate # check your setup is correct
41
- cc new skill # create a custom skill
42
- cc new agent # create a custom agent
43
- cc import skill # import a skill from a remote source
44
- cc update # update local skills from source
45
- cc uninstall # remove Claude Collective from project
46
- cc doctor # diagnose setup issues
47
- cc eject # eject skills/agent partials for customization
48
- cc build marketplace # generate marketplace.json
49
- cc build plugins # build plugins
50
- cc build stack # build stacks
51
- cc version # show/manage versions
52
- cc diff # show skill differences
53
- cc search # search for skills
54
- cc info # show skill information
55
- cc outdated # check outdated skills
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
- cc init
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
- cc init
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
- cc init
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
- cc new skill my-custom-skill
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
@@ -1,3 +1,4 @@
1
+ # yaml-language-server: $schema=../src/schemas/skills-matrix.schema.json
1
2
  # =============================================================================
2
3
  # skills-matrix.yaml
3
4
  # Full skills matrix for CLI data-driven architecture
@@ -18,7 +19,7 @@ categories:
18
19
  # ─────────────────────────────────────────────────────────────────
19
20
  framework:
20
21
  id: framework
21
- name: Framework
22
+ displayName: Framework
22
23
  description: Core UI framework (React, Vue, Angular, SolidJS)
23
24
  domain: web
24
25
  exclusive: true
@@ -27,7 +28,7 @@ categories:
27
28
 
28
29
  meta-framework:
29
30
  id: meta-framework
30
- name: Meta-Framework
31
+ displayName: Meta-Framework
31
32
  description: Full-stack framework (Next.js, Remix, Nuxt)
32
33
  domain: web
33
34
  exclusive: true
@@ -36,7 +37,7 @@ categories:
36
37
 
37
38
  styling:
38
39
  id: styling
39
- name: Styling
40
+ displayName: Styling
40
41
  description: CSS approach (SCSS Modules, Tailwind)
41
42
  domain: web
42
43
  exclusive: true
@@ -45,7 +46,7 @@ categories:
45
46
 
46
47
  client-state:
47
48
  id: client-state
48
- name: Client State Management
49
+ displayName: Client State Management
49
50
  description: UI state, forms, local data (Zustand, Redux, MobX)
50
51
  domain: web
51
52
  exclusive: true
@@ -54,7 +55,7 @@ categories:
54
55
 
55
56
  server-state:
56
57
  id: server-state
57
- name: Server State / Data Fetching
58
+ displayName: Server State / Data Fetching
58
59
  description: API data caching (React Query, SWR)
59
60
  domain: web
60
61
  exclusive: true
@@ -63,7 +64,7 @@ categories:
63
64
 
64
65
  forms:
65
66
  id: forms
66
- name: Forms & Validation
67
+ displayName: Forms & Validation
67
68
  description: Form handling and schema validation
68
69
  domain: web
69
70
  exclusive: false
@@ -72,7 +73,7 @@ categories:
72
73
 
73
74
  testing:
74
75
  id: testing
75
- name: Testing
76
+ displayName: Testing
76
77
  description: Unit, integration, and E2E testing
77
78
  domain: web
78
79
  exclusive: false
@@ -81,7 +82,7 @@ categories:
81
82
 
82
83
  ui-components:
83
84
  id: ui-components
84
- name: UI Component Library
85
+ displayName: UI Component Library
85
86
  description: Pre-built component systems (Radix, shadcn)
86
87
  domain: web
87
88
  exclusive: false
@@ -90,7 +91,7 @@ categories:
90
91
 
91
92
  mocking:
92
93
  id: mocking
93
- name: API Mocking
94
+ displayName: API Mocking
94
95
  description: Mock Service Worker for development and testing
95
96
  domain: web
96
97
  exclusive: false
@@ -99,7 +100,7 @@ categories:
99
100
 
100
101
  error-handling:
101
102
  id: error-handling
102
- name: Error Handling
103
+ displayName: Error Handling
103
104
  description: Error boundaries, result types, and error patterns
104
105
  domain: web-extras
105
106
  parent_domain: web
@@ -109,7 +110,7 @@ categories:
109
110
 
110
111
  i18n:
111
112
  id: i18n
112
- name: Internationalization
113
+ displayName: Internationalization
113
114
  description: i18n libraries (next-intl, react-intl, vue-i18n)
114
115
  domain: web
115
116
  exclusive: true
@@ -118,7 +119,7 @@ categories:
118
119
 
119
120
  file-upload:
120
121
  id: file-upload
121
- name: File Upload
122
+ displayName: File Upload
122
123
  description: File upload patterns and handling
123
124
  domain: web-extras
124
125
  parent_domain: web
@@ -128,7 +129,7 @@ categories:
128
129
 
129
130
  files:
130
131
  id: files
131
- name: Files & Images
132
+ displayName: Files & Images
132
133
  description: Image handling and file processing
133
134
  domain: web-extras
134
135
  parent_domain: web
@@ -138,7 +139,7 @@ categories:
138
139
 
139
140
  utilities:
140
141
  id: utilities
141
- name: Utilities
142
+ displayName: Utilities
142
143
  description: Utility libraries (date-fns, native JS patterns)
143
144
  domain: web-extras
144
145
  parent_domain: web
@@ -148,7 +149,7 @@ categories:
148
149
 
149
150
  realtime:
150
151
  id: realtime
151
- name: Realtime
152
+ displayName: Realtime
152
153
  description: WebSockets, SSE, and real-time communication
153
154
  domain: web-extras
154
155
  parent_domain: web
@@ -158,7 +159,7 @@ categories:
158
159
 
159
160
  animation:
160
161
  id: animation
161
- name: Animation
162
+ displayName: Animation
162
163
  description: Animation libraries and CSS animations
163
164
  domain: web-extras
164
165
  parent_domain: web
@@ -168,7 +169,7 @@ categories:
168
169
 
169
170
  pwa:
170
171
  id: pwa
171
- name: Progressive Web App
172
+ displayName: Progressive Web App
172
173
  description: Service workers, offline-first patterns, and PWA features
173
174
  domain: web-extras
174
175
  parent_domain: web
@@ -178,7 +179,7 @@ categories:
178
179
 
179
180
  accessibility:
180
181
  id: accessibility
181
- name: Accessibility
182
+ displayName: Accessibility
182
183
  description: WCAG compliance, ARIA, and keyboard navigation
183
184
  domain: web-extras
184
185
  parent_domain: web
@@ -188,7 +189,7 @@ categories:
188
189
 
189
190
  web-performance:
190
191
  id: web-performance
191
- name: Web Performance
192
+ displayName: Web Performance
192
193
  description: Bundle optimization, render performance, and code splitting
193
194
  domain: web
194
195
  exclusive: false
@@ -200,7 +201,7 @@ categories:
200
201
  # ─────────────────────────────────────────────────────────────────
201
202
  api:
202
203
  id: api
203
- name: API Framework
204
+ displayName: API Framework
204
205
  description: Backend framework (Hono, Express, Fastify)
205
206
  domain: api
206
207
  exclusive: true
@@ -209,7 +210,7 @@ categories:
209
210
 
210
211
  database:
211
212
  id: database
212
- name: Database ORM
213
+ displayName: Database ORM
213
214
  description: Database access layer (Drizzle, Prisma)
214
215
  domain: api
215
216
  exclusive: true
@@ -218,7 +219,7 @@ categories:
218
219
 
219
220
  auth:
220
221
  id: auth
221
- name: Authentication
222
+ displayName: Authentication
222
223
  description: Auth solution (Better Auth, Auth.js)
223
224
  domain: api
224
225
  exclusive: true
@@ -227,7 +228,7 @@ categories:
227
228
 
228
229
  observability:
229
230
  id: observability
230
- name: Observability
231
+ displayName: Observability
231
232
  description: Logging, monitoring, error tracking
232
233
  domain: api
233
234
  exclusive: false
@@ -236,7 +237,7 @@ categories:
236
237
 
237
238
  analytics:
238
239
  id: analytics
239
- name: Analytics
240
+ displayName: Analytics
240
241
  description: Product analytics and tracking
241
242
  domain: api
242
243
  exclusive: false
@@ -245,7 +246,7 @@ categories:
245
246
 
246
247
  email:
247
248
  id: email
248
- name: Email
249
+ displayName: Email
249
250
  description: Transactional email (Resend, Sendgrid)
250
251
  domain: api
251
252
  exclusive: true
@@ -254,7 +255,7 @@ categories:
254
255
 
255
256
  performance:
256
257
  id: performance
257
- name: Performance
258
+ displayName: Performance
258
259
  description: API performance patterns and optimization
259
260
  domain: api
260
261
  exclusive: false
@@ -266,7 +267,7 @@ categories:
266
267
  # ─────────────────────────────────────────────────────────────────
267
268
  mobile-framework:
268
269
  id: mobile-framework
269
- name: Mobile Framework
270
+ displayName: Mobile Framework
270
271
  description: Native mobile framework (React Native, Expo)
271
272
  domain: mobile
272
273
  exclusive: true
@@ -278,7 +279,7 @@ categories:
278
279
  # ─────────────────────────────────────────────────────────────────
279
280
  monorepo:
280
281
  id: monorepo
281
- name: Monorepo
282
+ displayName: Monorepo
282
283
  description: Monorepo tooling (Turborepo, Nx)
283
284
  domain: shared
284
285
  exclusive: true
@@ -287,7 +288,7 @@ categories:
287
288
 
288
289
  tooling:
289
290
  id: tooling
290
- name: Build Tooling
291
+ displayName: Build Tooling
291
292
  description: ESLint, Prettier, TypeScript, Vite
292
293
  domain: shared
293
294
  exclusive: false
@@ -296,7 +297,7 @@ categories:
296
297
 
297
298
  security:
298
299
  id: security
299
- name: Security
300
+ displayName: Security
300
301
  description: Authentication security patterns and best practices
301
302
  domain: shared
302
303
  exclusive: false
@@ -305,7 +306,7 @@ categories:
305
306
 
306
307
  methodology:
307
308
  id: methodology
308
- name: Methodology
309
+ displayName: Methodology
309
310
  description: Development methodology and engineering principles
310
311
  domain: shared
311
312
  exclusive: false
@@ -314,7 +315,7 @@ categories:
314
315
 
315
316
  research:
316
317
  id: research
317
- name: Research
318
+ displayName: Research
318
319
  description: Codebase investigation and research methodology
319
320
  domain: shared
320
321
  exclusive: false
@@ -323,7 +324,7 @@ categories:
323
324
 
324
325
  reviewing:
325
326
  id: reviewing
326
- name: Code Review
327
+ displayName: Code Review
327
328
  description: Code review patterns and guidance
328
329
  domain: shared
329
330
  exclusive: false
@@ -332,7 +333,7 @@ categories:
332
333
 
333
334
  ci-cd:
334
335
  id: ci-cd
335
- name: CI/CD
336
+ displayName: CI/CD
336
337
  description: Continuous integration and deployment pipelines
337
338
  domain: shared
338
339
  exclusive: false
@@ -344,7 +345,7 @@ categories:
344
345
  # ─────────────────────────────────────────────────────────────────
345
346
  cli-framework:
346
347
  id: cli-framework
347
- name: CLI Framework
348
+ displayName: CLI Framework
348
349
  description: CLI application framework (Commander, oclif)
349
350
  domain: cli
350
351
  exclusive: true
@@ -353,7 +354,7 @@ categories:
353
354
 
354
355
  cli-prompts:
355
356
  id: cli-prompts
356
- name: CLI Prompts
357
+ displayName: CLI Prompts
357
358
  description: Interactive prompts and UI
358
359
  domain: cli
359
360
  exclusive: true
@@ -362,7 +363,7 @@ categories:
362
363
 
363
364
  cli-testing:
364
365
  id: cli-testing
365
- name: CLI Testing
366
+ displayName: CLI Testing
366
367
  description: CLI testing utilities
367
368
  domain: cli
368
369
  exclusive: false