@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
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  init_esm_shims
4
- } from "../../chunk-DHET7RCE.js";
4
+ } from "../../chunk-AWKZ5BDL.js";
5
5
 
6
6
  // src/cli/components/common/spinner.tsx
7
7
  init_esm_shims();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cli/components/common/spinner.tsx"],"sourcesContent":["import React from \"react\";\nimport { Spinner as InkSpinner } from \"@inkjs/ui\";\n\ninterface SpinnerProps {\n label: string;\n}\n\nexport const Spinner: React.FC<SpinnerProps> = ({ label }) => <InkSpinner label={label} />;\n"],"mappings":";;;;;;AAAA;AACA,SAAS,WAAW,kBAAkB;AAMwB;AAAvD,IAAM,UAAkC,CAAC,EAAE,MAAM,MAAM,oBAAC,cAAW,OAAc;","names":[]}
1
+ {"version":3,"sources":["../../../src/cli/components/common/spinner.tsx"],"sourcesContent":["import React from \"react\";\nimport { Spinner as InkSpinner } from \"@inkjs/ui\";\n\ntype SpinnerProps = {\n label: string;\n};\n\nexport const Spinner: React.FC<SpinnerProps> = ({ label }) => <InkSpinner label={label} />;\n"],"mappings":";;;;;;AAAA;AACA,SAAS,WAAW,kBAAkB;AAMwB;AAAvD,IAAM,UAAkC,CAAC,EAAE,MAAM,MAAM,oBAAC,cAAW,OAAc;","names":[]}
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  SkillSearch
4
- } from "../../chunk-5KXUDHAB.js";
5
- import "../../chunk-Z2CWURZ6.js";
6
- import "../../chunk-DHET7RCE.js";
4
+ } from "../../chunk-GGFOD5PK.js";
5
+ import "../../chunk-UNN7523L.js";
6
+ import "../../chunk-AWKZ5BDL.js";
7
7
  export {
8
8
  SkillSearch
9
9
  };
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CategoryGrid
4
- } from "../../chunk-OQYYMQJR.js";
5
- import "../../chunk-DHET7RCE.js";
4
+ } from "../../chunk-ETCVEV3S.js";
5
+ import "../../chunk-AWKZ5BDL.js";
6
6
  export {
7
7
  CategoryGrid
8
8
  };
@@ -8,23 +8,23 @@ import {
8
8
  RENDER_DELAY_MS,
9
9
  TAB,
10
10
  delay
11
- } from "../../chunk-6Q3Y7KVB.js";
11
+ } from "../../chunk-DBRUQQUF.js";
12
12
  import {
13
13
  render
14
- } from "../../chunk-66UDJBF6.js";
14
+ } from "../../chunk-REJGRCVQ.js";
15
15
  import {
16
16
  afterEach,
17
17
  describe,
18
18
  globalExpect,
19
19
  it,
20
20
  vi
21
- } from "../../chunk-XY3XDVMI.js";
21
+ } from "../../chunk-QR2EBWL2.js";
22
22
  import {
23
23
  CategoryGrid
24
- } from "../../chunk-OQYYMQJR.js";
24
+ } from "../../chunk-ETCVEV3S.js";
25
25
  import {
26
26
  init_esm_shims
27
- } from "../../chunk-DHET7RCE.js";
27
+ } from "../../chunk-AWKZ5BDL.js";
28
28
 
29
29
  // src/cli/components/wizard/category-grid.test.tsx
30
30
  init_esm_shims();
@@ -36,9 +36,9 @@ var createOption = (id, label, overrides = {}) => ({
36
36
  selected: false,
37
37
  ...overrides
38
38
  });
39
- var createCategory = (id, name, options, overrides = {}) => ({
39
+ var createCategory = (id, displayName, options, overrides = {}) => ({
40
40
  id,
41
- name,
41
+ displayName,
42
42
  required: false,
43
43
  exclusive: true,
44
44
  options,
@@ -49,13 +49,13 @@ var defaultCategories = [
49
49
  "framework",
50
50
  "Framework",
51
51
  [
52
- createOption("react", "React", {
52
+ createOption("web-test-react", "React", {
53
53
  state: "recommended",
54
54
  stateReason: "Popular choice"
55
55
  }),
56
- createOption("vue", "Vue"),
57
- createOption("angular", "Angular"),
58
- createOption("svelte", "Svelte")
56
+ createOption("web-test-vue", "Vue"),
57
+ createOption("web-test-angular", "Angular"),
58
+ createOption("web-test-svelte", "Svelte")
59
59
  ],
60
60
  { required: true }
61
61
  ),
@@ -63,43 +63,43 @@ var defaultCategories = [
63
63
  "styling",
64
64
  "Styling",
65
65
  [
66
- createOption("scss-mod", "SCSS Modules", { selected: true }),
67
- createOption("tailwind", "Tailwind", { state: "recommended" }),
68
- createOption("styled", "Styled Components"),
69
- createOption("vanilla", "Vanilla CSS")
66
+ createOption("web-scss-mod", "SCSS Modules", { selected: true }),
67
+ createOption("web-test-tailwind", "Tailwind", { state: "recommended" }),
68
+ createOption("web-test-styled", "Styled Components"),
69
+ createOption("web-test-vanilla", "Vanilla CSS")
70
70
  ],
71
71
  { required: true }
72
72
  ),
73
73
  createCategory("client-state", "Client State", [
74
- createOption("zustand", "Zustand", { state: "recommended" }),
75
- createOption("jotai", "Jotai"),
76
- createOption("redux", "Redux", {
74
+ createOption("web-test-zustand", "Zustand", { state: "recommended" }),
75
+ createOption("web-test-jotai", "Jotai"),
76
+ createOption("web-test-redux", "Redux", {
77
77
  state: "discouraged",
78
78
  stateReason: "Complex for most apps"
79
79
  }),
80
- createOption("mobx", "MobX")
80
+ createOption("web-test-mobx", "MobX")
81
81
  ]),
82
82
  createCategory("server-state", "Server State", [
83
- createOption("react-query", "React Query", { selected: true }),
84
- createOption("swr", "SWR"),
85
- createOption("apollo", "Apollo")
83
+ createOption("web-react-query", "React Query", { selected: true }),
84
+ createOption("web-test-swr", "SWR"),
85
+ createOption("web-test-apollo", "Apollo")
86
86
  ]),
87
- createCategory("analytics", "Analytics", [createOption("posthog", "PostHog")])
87
+ createCategory("analytics", "Analytics", [createOption("web-test-posthog", "PostHog")])
88
88
  ];
89
89
  var categoriesWithFramework = [
90
90
  createCategory(
91
91
  "framework",
92
92
  "Framework",
93
93
  [
94
- createOption("react", "React", {
94
+ createOption("web-test-react", "React", {
95
95
  state: "recommended",
96
96
  stateReason: "Popular choice",
97
97
  selected: true
98
98
  // Framework selected
99
99
  }),
100
- createOption("vue", "Vue"),
101
- createOption("angular", "Angular"),
102
- createOption("svelte", "Svelte")
100
+ createOption("web-test-vue", "Vue"),
101
+ createOption("web-test-angular", "Angular"),
102
+ createOption("web-test-svelte", "Svelte")
103
103
  ],
104
104
  { required: true }
105
105
  ),
@@ -107,18 +107,18 @@ var categoriesWithFramework = [
107
107
  "styling",
108
108
  "Styling",
109
109
  [
110
- createOption("scss-mod", "SCSS Modules"),
111
- createOption("tailwind", "Tailwind", { state: "recommended" }),
112
- createOption("styled", "Styled Components"),
113
- createOption("vanilla", "Vanilla CSS")
110
+ createOption("web-scss-mod", "SCSS Modules"),
111
+ createOption("web-test-tailwind", "Tailwind", { state: "recommended" }),
112
+ createOption("web-test-styled", "Styled Components"),
113
+ createOption("web-test-vanilla", "Vanilla CSS")
114
114
  ],
115
115
  { required: true }
116
116
  ),
117
117
  createCategory("client-state", "Client State", [
118
- createOption("zustand", "Zustand", { state: "recommended" }),
119
- createOption("jotai", "Jotai"),
120
- createOption("redux", "Redux", { state: "discouraged" }),
121
- createOption("mobx", "MobX")
118
+ createOption("web-test-zustand", "Zustand", { state: "recommended" }),
119
+ createOption("web-test-jotai", "Jotai"),
120
+ createOption("web-test-redux", "Redux", { state: "discouraged" }),
121
+ createOption("web-test-mobx", "MobX")
122
122
  ])
123
123
  ];
124
124
  var defaultProps = {
@@ -139,7 +139,6 @@ describe("CategoryGrid component", () => {
139
139
  afterEach(() => {
140
140
  cleanup?.();
141
141
  cleanup = void 0;
142
- vi.clearAllMocks();
143
142
  });
144
143
  describe("rendering", () => {
145
144
  it("should render all categories as sections", () => {
@@ -217,9 +216,9 @@ describe("CategoryGrid component", () => {
217
216
  });
218
217
  it("should show disabled options with dimmed styling", () => {
219
218
  const categories = [
220
- createCategory("test", "Test", [
221
- createOption("opt1", "Option 1"),
222
- createOption("opt2", "Option 2", { state: "disabled" })
219
+ createCategory("testing", "Test", [
220
+ createOption("web-test-opt1", "Option 1"),
221
+ createOption("web-test-opt2", "Option 2", { state: "disabled" })
223
222
  ])
224
223
  ];
225
224
  const { lastFrame, unmount } = renderGrid({ categories });
@@ -250,10 +249,10 @@ describe("CategoryGrid component", () => {
250
249
  it("should not lock any sections when no framework category exists", () => {
251
250
  const categoriesNoFramework = [
252
251
  createCategory("styling", "Styling", [
253
- createOption("scss", "SCSS"),
254
- createOption("tailwind", "Tailwind")
252
+ createOption("web-test-scss", "SCSS"),
253
+ createOption("web-test-tailwind", "Tailwind")
255
254
  ]),
256
- createCategory("state", "State", [createOption("zustand", "Zustand")])
255
+ createCategory("client-state", "State", [createOption("web-test-zustand", "Zustand")])
257
256
  ];
258
257
  const { lastFrame, unmount } = renderGrid({
259
258
  categories: categoriesNoFramework
@@ -468,7 +467,7 @@ describe("CategoryGrid component", () => {
468
467
  await delay(RENDER_DELAY_MS);
469
468
  await stdin.write(" ");
470
469
  await delay(INPUT_DELAY_MS);
471
- globalExpect(onToggle).toHaveBeenCalledWith("framework", "vue");
470
+ globalExpect(onToggle).toHaveBeenCalledWith("framework", "web-test-vue");
472
471
  });
473
472
  it("should call onToggle when pressing space on a selected option", async () => {
474
473
  const onToggle = vi.fn();
@@ -476,7 +475,10 @@ describe("CategoryGrid component", () => {
476
475
  createCategory(
477
476
  "framework",
478
477
  "Framework",
479
- [createOption("react", "React", { selected: true }), createOption("vue", "Vue")],
478
+ [
479
+ createOption("web-test-react", "React", { selected: true }),
480
+ createOption("web-test-vue", "Vue")
481
+ ],
480
482
  { required: true }
481
483
  )
482
484
  ];
@@ -492,14 +494,14 @@ describe("CategoryGrid component", () => {
492
494
  await delay(RENDER_DELAY_MS);
493
495
  await stdin.write(" ");
494
496
  await delay(INPUT_DELAY_MS);
495
- globalExpect(onToggle).toHaveBeenCalledWith("framework", "react");
497
+ globalExpect(onToggle).toHaveBeenCalledWith("framework", "web-test-react");
496
498
  });
497
499
  it("should NOT call onToggle when pressing space on a disabled option", async () => {
498
500
  const onToggle = vi.fn();
499
501
  const categories = [
500
- createCategory("test", "Test", [
501
- createOption("opt1", "Option 1", { state: "disabled" }),
502
- createOption("opt2", "Option 2")
502
+ createCategory("testing", "Test", [
503
+ createOption("web-test-opt1", "Option 1", { state: "disabled" }),
504
+ createOption("web-test-opt2", "Option 2")
503
505
  ])
504
506
  ];
505
507
  const { stdin, unmount } = renderGrid({
@@ -535,10 +537,10 @@ describe("CategoryGrid component", () => {
535
537
  it("should skip disabled options when navigating right", async () => {
536
538
  const onFocusChange = vi.fn();
537
539
  const categories = [
538
- createCategory("test", "Test", [
539
- createOption("opt1", "Option 1"),
540
- createOption("opt2", "Option 2", { state: "disabled" }),
541
- createOption("opt3", "Option 3")
540
+ createCategory("testing", "Test", [
541
+ createOption("web-test-opt1", "Option 1"),
542
+ createOption("web-test-opt2", "Option 2", { state: "disabled" }),
543
+ createOption("web-test-opt3", "Option 3")
542
544
  ])
543
545
  ];
544
546
  const { stdin, unmount } = renderGrid({
@@ -557,10 +559,10 @@ describe("CategoryGrid component", () => {
557
559
  it("should skip disabled options when navigating left", async () => {
558
560
  const onFocusChange = vi.fn();
559
561
  const categories = [
560
- createCategory("test", "Test", [
561
- createOption("opt1", "Option 1"),
562
- createOption("opt2", "Option 2", { state: "disabled" }),
563
- createOption("opt3", "Option 3")
562
+ createCategory("testing", "Test", [
563
+ createOption("web-test-opt1", "Option 1"),
564
+ createOption("web-test-opt2", "Option 2", { state: "disabled" }),
565
+ createOption("web-test-opt3", "Option 3")
564
566
  ])
565
567
  ];
566
568
  const { stdin, unmount } = renderGrid({
@@ -580,9 +582,9 @@ describe("CategoryGrid component", () => {
580
582
  it("should handle all options disabled in a row", async () => {
581
583
  const onFocusChange = vi.fn();
582
584
  const categories = [
583
- createCategory("test", "Test", [
584
- createOption("opt1", "Option 1", { state: "disabled" }),
585
- createOption("opt2", "Option 2", { state: "disabled" })
585
+ createCategory("testing", "Test", [
586
+ createOption("web-test-opt1", "Option 1", { state: "disabled" }),
587
+ createOption("web-test-opt2", "Option 2", { state: "disabled" })
586
588
  ])
587
589
  ];
588
590
  const { stdin, unmount } = renderGrid({
@@ -694,7 +696,7 @@ describe("CategoryGrid component", () => {
694
696
  describe("edge cases", () => {
695
697
  it("should handle single category", () => {
696
698
  const categories = [
697
- createCategory("single", "Single Category", [createOption("opt1", "Option 1")])
699
+ createCategory("forms", "Single Category", [createOption("web-test-opt1", "Option 1")])
698
700
  ];
699
701
  const { lastFrame, unmount } = renderGrid({ categories });
700
702
  cleanup = unmount;
@@ -704,7 +706,7 @@ describe("CategoryGrid component", () => {
704
706
  });
705
707
  it("should handle single option in category", () => {
706
708
  const categories = [
707
- createCategory("single", "Single", [createOption("only", "Only Option")])
709
+ createCategory("forms", "Single", [createOption("web-test-only", "Only Option")])
708
710
  ];
709
711
  const { lastFrame, unmount } = renderGrid({ categories });
710
712
  cleanup = unmount;
@@ -712,8 +714,11 @@ describe("CategoryGrid component", () => {
712
714
  globalExpect(output).toContain("Only Option");
713
715
  });
714
716
  it("should handle category with many options (flows naturally)", () => {
715
- const options = Array.from({ length: 10 }, (_, i) => createOption(`opt${i}`, `Option ${i}`));
716
- const categories = [createCategory("many", "Many Options", options)];
717
+ const options = Array.from(
718
+ { length: 10 },
719
+ (_, i) => createOption(`web-test-opt${i}`, `Option ${i}`)
720
+ );
721
+ const categories = [createCategory("mocking", "Many Options", options)];
717
722
  const { lastFrame, unmount } = renderGrid({ categories });
718
723
  cleanup = unmount;
719
724
  const output = lastFrame();
@@ -723,9 +728,9 @@ describe("CategoryGrid component", () => {
723
728
  });
724
729
  it("should handle long option labels", () => {
725
730
  const categories = [
726
- createCategory("long", "Long Labels", [
727
- createOption("long1", "Very Long Option Name"),
728
- createOption("long2", "Another Long Name")
731
+ createCategory("i18n", "Long Labels", [
732
+ createOption("web-test-long1", "Very Long Option Name"),
733
+ createOption("web-test-long2", "Another Long Name")
729
734
  ])
730
735
  ];
731
736
  const { lastFrame, unmount } = renderGrid({ categories });
@@ -735,15 +740,15 @@ describe("CategoryGrid component", () => {
735
740
  });
736
741
  it("should handle categories with different option counts", () => {
737
742
  const categories = [
738
- createCategory("cat1", "Category 1", [
739
- createOption("opt1", "Option 1"),
740
- createOption("opt2", "Option 2")
743
+ createCategory("framework", "Category 1", [
744
+ createOption("web-test-opt1", "Option 1"),
745
+ createOption("web-test-opt2", "Option 2")
741
746
  ]),
742
- createCategory("cat2", "Category 2", [createOption("opt3", "Option 3")]),
743
- createCategory("cat3", "Category 3", [
744
- createOption("opt4", "Option 4"),
745
- createOption("opt5", "Option 5"),
746
- createOption("opt6", "Option 6")
747
+ createCategory("styling", "Category 2", [createOption("web-test-opt3", "Option 3")]),
748
+ createCategory("client-state", "Category 3", [
749
+ createOption("web-test-opt4", "Option 4"),
750
+ createOption("web-test-opt5", "Option 5"),
751
+ createOption("web-test-opt6", "Option 6")
747
752
  ])
748
753
  ];
749
754
  const { lastFrame, unmount } = renderGrid({ categories });
@@ -762,14 +767,14 @@ describe("CategoryGrid component", () => {
762
767
  "framework",
763
768
  "Framework",
764
769
  [
765
- createOption("opt1", "Option 1", { selected: true }),
770
+ createOption("web-test-opt1", "Option 1", { selected: true }),
766
771
  // Framework selected
767
- createOption("opt2", "Option 2"),
768
- createOption("opt3", "Option 3")
772
+ createOption("web-test-opt2", "Option 2"),
773
+ createOption("web-test-opt3", "Option 3")
769
774
  ],
770
775
  { required: true }
771
776
  ),
772
- createCategory("cat2", "Category 2", [createOption("opt4", "Option 4")])
777
+ createCategory("styling", "Category 2", [createOption("web-test-opt4", "Option 4")])
773
778
  ];
774
779
  const { stdin, unmount } = renderGrid({
775
780
  categories,
@@ -785,5 +790,54 @@ describe("CategoryGrid component", () => {
785
790
  globalExpect(onFocusChange).toHaveBeenCalledWith(1, 0);
786
791
  });
787
792
  });
793
+ describe("installed indicator", () => {
794
+ it("should show checkmark for installed skill", () => {
795
+ const categories = [
796
+ createCategory("forms", "Forms", [
797
+ createOption("web-test-opt1", "Option 1", { installed: true })
798
+ ])
799
+ ];
800
+ const { lastFrame, unmount } = renderGrid({ categories });
801
+ cleanup = unmount;
802
+ const output = lastFrame();
803
+ globalExpect(output).toContain("\u2713");
804
+ globalExpect(output).toContain("Option 1");
805
+ });
806
+ it("should NOT show checkmark for non-installed skill", () => {
807
+ const categories = [
808
+ createCategory("forms", "Forms", [createOption("web-test-opt1", "Option 1")])
809
+ ];
810
+ const { lastFrame, unmount } = renderGrid({ categories });
811
+ cleanup = unmount;
812
+ const output = lastFrame();
813
+ globalExpect(output).not.toContain("\u2713");
814
+ globalExpect(output).toContain("Option 1");
815
+ });
816
+ it("should show both checkmark and cyan styling when installed and selected", () => {
817
+ const categories = [
818
+ createCategory("forms", "Forms", [
819
+ createOption("web-test-opt1", "Option 1", { installed: true, selected: true })
820
+ ])
821
+ ];
822
+ const { lastFrame, unmount } = renderGrid({ categories });
823
+ cleanup = unmount;
824
+ const output = lastFrame();
825
+ globalExpect(output).toContain("\u2713");
826
+ globalExpect(output).toContain("Option 1");
827
+ });
828
+ it("should show both L badge and checkmark when local and installed", () => {
829
+ const categories = [
830
+ createCategory("forms", "Forms", [
831
+ createOption("web-test-opt1", "Option 1", { local: true, installed: true })
832
+ ])
833
+ ];
834
+ const { lastFrame, unmount } = renderGrid({ categories });
835
+ cleanup = unmount;
836
+ const output = lastFrame();
837
+ globalExpect(output).toContain("L");
838
+ globalExpect(output).toContain("\u2713");
839
+ globalExpect(output).toContain("Option 1");
840
+ });
841
+ });
788
842
  });
789
843
  //# sourceMappingURL=category-grid.test.js.map