@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.
Files changed (314) hide show
  1. package/CHANGELOG.md +357 -0
  2. package/README.md +41 -27
  3. package/config/skills-matrix.yaml +202 -134
  4. package/config/stacks.yaml +14 -20
  5. package/dist/chunk-3X5D7RM5.js +69 -0
  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-Z7G4B5HJ.js → chunk-ETCVEV3S.js} +73 -150
  16. package/dist/chunk-ETCVEV3S.js.map +1 -0
  17. package/dist/chunk-F4RD5FYM.js +45 -0
  18. package/dist/chunk-F4RD5FYM.js.map +1 -0
  19. package/dist/{chunk-ACNBKXXJ.js → chunk-GGFOD5PK.js} +13 -44
  20. package/dist/chunk-GGFOD5PK.js.map +1 -0
  21. package/dist/chunk-H7SSBSPR.js +29 -0
  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-JIPWV2FX.js → chunk-IAYAE6MG.js} +12 -34
  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-KWYO3M5Q.js +67 -0
  30. package/dist/chunk-KWYO3M5Q.js.map +1 -0
  31. package/dist/{chunk-E3FJH4TF.js → chunk-MCTSHLAF.js} +18 -18
  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-K3NB6DSG.js → chunk-MTPM7BX5.js} +108 -110
  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-76DWXGQE.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-D237EVNB.js → chunk-TMED5DQ2.js} +71 -48
  48. package/dist/chunk-TMED5DQ2.js.map +1 -0
  49. package/dist/chunk-U7HFKR74.js +21 -0
  50. package/dist/chunk-U7HFKR74.js.map +1 -0
  51. package/dist/chunk-UEMRJI2K.js +146 -0
  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-X6QONICW.js → chunk-VVYNZZUX.js} +7 -19
  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-CDX4W4DM.js → chunk-XENOESJZ.js} +53 -33
  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 +13 -14
  69. package/dist/commands/build/marketplace.js +19 -23
  70. package/dist/commands/build/marketplace.js.map +1 -1
  71. package/dist/commands/build/plugins.js +13 -240
  72. package/dist/commands/build/plugins.js.map +1 -1
  73. package/dist/commands/build/stack.js +13 -25
  74. package/dist/commands/build/stack.js.map +1 -1
  75. package/dist/commands/compile.js +45 -82
  76. package/dist/commands/compile.js.map +1 -1
  77. package/dist/commands/config/get.js +9 -9
  78. package/dist/commands/config/get.js.map +1 -1
  79. package/dist/commands/config/index.js +8 -8
  80. package/dist/commands/config/index.js.map +1 -1
  81. package/dist/commands/config/path.js +7 -9
  82. package/dist/commands/config/path.js.map +1 -1
  83. package/dist/commands/config/set-project.js +12 -13
  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 +12 -13
  87. package/dist/commands/config/unset-project.js.map +1 -1
  88. package/dist/commands/diff.js +15 -44
  89. package/dist/commands/diff.js.map +1 -1
  90. package/dist/commands/doctor.js +23 -67
  91. package/dist/commands/doctor.js.map +1 -1
  92. package/dist/commands/edit.js +98 -81
  93. package/dist/commands/edit.js.map +1 -1
  94. package/dist/commands/eject.js +27 -79
  95. package/dist/commands/eject.js.map +1 -1
  96. package/dist/commands/import/skill.js +38 -58
  97. package/dist/commands/import/skill.js.map +1 -1
  98. package/dist/commands/info.js +17 -24
  99. package/dist/commands/info.js.map +1 -1
  100. package/dist/commands/init.js +103 -779
  101. package/dist/commands/init.js.map +1 -1
  102. package/dist/commands/list.js +8 -11
  103. package/dist/commands/list.js.map +1 -1
  104. package/dist/commands/new/agent.js +11 -16
  105. package/dist/commands/new/agent.js.map +1 -1
  106. package/dist/commands/new/skill.js +14 -18
  107. package/dist/commands/new/skill.js.map +1 -1
  108. package/dist/commands/outdated.js +16 -97
  109. package/dist/commands/outdated.js.map +1 -1
  110. package/dist/commands/search.js +24 -43
  111. package/dist/commands/search.js.map +1 -1
  112. package/dist/commands/uninstall.js +22 -30
  113. package/dist/commands/uninstall.js.map +1 -1
  114. package/dist/commands/update.js +23 -154
  115. package/dist/commands/update.js.map +1 -1
  116. package/dist/commands/validate.js +38 -89
  117. package/dist/commands/validate.js.map +1 -1
  118. package/dist/commands/version/bump.js +12 -28
  119. package/dist/commands/version/bump.js.map +1 -1
  120. package/dist/commands/version/index.js +8 -24
  121. package/dist/commands/version/index.js.map +1 -1
  122. package/dist/commands/version/set.js +11 -26
  123. package/dist/commands/version/set.js.map +1 -1
  124. package/dist/commands/version/show.js +8 -24
  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 +3 -7
  130. package/dist/components/common/message.js.map +1 -1
  131. package/dist/components/common/spinner.js +1 -1
  132. package/dist/components/common/spinner.js.map +1 -1
  133. package/dist/components/skill-search/skill-search.js +3 -3
  134. package/dist/components/wizard/category-grid.js +2 -2
  135. package/dist/components/wizard/category-grid.test.js +138 -156
  136. package/dist/components/wizard/category-grid.test.js.map +1 -1
  137. package/dist/components/wizard/menu-item.js +9 -0
  138. package/dist/components/wizard/search-modal.js +9 -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 +16 -106
  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 -5
  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 -5
  152. package/dist/components/wizard/step-build.test.js +160 -284
  153. package/dist/components/wizard/step-build.test.js.map +1 -1
  154. package/dist/components/wizard/step-confirm.js +3 -3
  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 -3
  158. package/dist/components/wizard/step-refine.test.js +24 -26
  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 -4
  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 +9 -0
  172. package/dist/components/wizard/view-title.js.map +1 -0
  173. package/dist/components/wizard/wizard-layout.js +17 -0
  174. package/dist/components/wizard/wizard-layout.js.map +1 -0
  175. package/dist/components/wizard/wizard-tabs.js +2 -2
  176. package/dist/components/wizard/wizard-tabs.test.js +292 -0
  177. package/dist/components/wizard/wizard-tabs.test.js.map +1 -0
  178. package/dist/components/wizard/wizard.js +22 -15
  179. package/dist/config/skills-matrix.yaml +202 -134
  180. package/dist/config/stacks.yaml +14 -20
  181. package/dist/hooks/init.js +6 -8
  182. package/dist/hooks/init.js.map +1 -1
  183. package/dist/index.js +1 -1
  184. package/dist/index.js.map +1 -1
  185. package/dist/{magic-string.es-RGXYGAW3.js → magic-string.es-PAH2SOTR.js} +2 -2
  186. package/dist/source-manager-DSYZEVGZ.js +16 -0
  187. package/dist/source-manager-DSYZEVGZ.js.map +1 -0
  188. package/dist/src/agents/developer/api-developer/agent.yaml +1 -1
  189. package/dist/src/agents/developer/cli-developer/agent.yaml +1 -1
  190. package/dist/src/agents/developer/web-architecture/agent.yaml +1 -1
  191. package/dist/src/agents/developer/web-developer/agent.yaml +1 -1
  192. package/dist/src/agents/developer/web-developer/examples.md +1 -6
  193. package/dist/src/agents/meta/agent-summoner/agent.yaml +1 -1
  194. package/dist/src/agents/meta/documentor/agent.yaml +1 -1
  195. package/dist/src/agents/meta/documentor/workflow.md +1 -5
  196. package/dist/src/agents/meta/skill-summoner/agent.yaml +1 -1
  197. package/dist/src/agents/migration/cli-migrator/agent.yaml +1 -1
  198. package/dist/src/agents/migration/cli-migrator/anti-patterns.md +1 -3
  199. package/dist/src/agents/pattern/pattern-scout/agent.yaml +1 -1
  200. package/dist/src/agents/pattern/web-pattern-critique/agent.yaml +1 -1
  201. package/dist/src/agents/planning/web-pm/agent.yaml +1 -1
  202. package/dist/src/agents/researcher/api-researcher/agent.yaml +1 -1
  203. package/dist/src/agents/researcher/web-researcher/agent.yaml +1 -1
  204. package/dist/src/agents/reviewer/api-reviewer/agent.yaml +1 -1
  205. package/dist/src/agents/reviewer/cli-reviewer/agent.yaml +1 -1
  206. package/dist/src/agents/reviewer/web-reviewer/agent.yaml +1 -1
  207. package/dist/src/agents/tester/cli-tester/agent.yaml +1 -1
  208. package/dist/src/agents/tester/web-tester/agent.yaml +1 -1
  209. package/dist/src/agents/tester/web-tester/output-format.md +1 -3
  210. package/dist/stores/wizard-store.js +4 -3
  211. package/dist/stores/wizard-store.test.js +94 -88
  212. package/dist/stores/wizard-store.test.js.map +1 -1
  213. package/package.json +5 -3
  214. package/src/agents/developer/api-developer/agent.yaml +1 -1
  215. package/src/agents/developer/cli-developer/agent.yaml +1 -1
  216. package/src/agents/developer/web-architecture/agent.yaml +1 -1
  217. package/src/agents/developer/web-developer/agent.yaml +1 -1
  218. package/src/agents/developer/web-developer/examples.md +1 -6
  219. package/src/agents/meta/agent-summoner/agent.yaml +1 -1
  220. package/src/agents/meta/documentor/agent.yaml +1 -1
  221. package/src/agents/meta/documentor/workflow.md +1 -5
  222. package/src/agents/meta/skill-summoner/agent.yaml +1 -1
  223. package/src/agents/migration/cli-migrator/agent.yaml +1 -1
  224. package/src/agents/migration/cli-migrator/anti-patterns.md +1 -3
  225. package/src/agents/pattern/pattern-scout/agent.yaml +1 -1
  226. package/src/agents/pattern/web-pattern-critique/agent.yaml +1 -1
  227. package/src/agents/planning/web-pm/agent.yaml +1 -1
  228. package/src/agents/researcher/api-researcher/agent.yaml +1 -1
  229. package/src/agents/researcher/web-researcher/agent.yaml +1 -1
  230. package/src/agents/reviewer/api-reviewer/agent.yaml +1 -1
  231. package/src/agents/reviewer/cli-reviewer/agent.yaml +1 -1
  232. package/src/agents/reviewer/web-reviewer/agent.yaml +1 -1
  233. package/src/agents/tester/cli-tester/agent.yaml +1 -1
  234. package/src/agents/tester/web-tester/agent.yaml +1 -1
  235. package/src/agents/tester/web-tester/output-format.md +1 -3
  236. package/dist/chunk-3U3R4NCG.js +0 -22
  237. package/dist/chunk-3U3R4NCG.js.map +0 -1
  238. package/dist/chunk-4K4ZXQRM.js +0 -317
  239. package/dist/chunk-4K4ZXQRM.js.map +0 -1
  240. package/dist/chunk-6Q3Y7KVB.js.map +0 -1
  241. package/dist/chunk-76DWXGQE.js.map +0 -1
  242. package/dist/chunk-7Q44DMSP.js +0 -582
  243. package/dist/chunk-7Q44DMSP.js.map +0 -1
  244. package/dist/chunk-ACNBKXXJ.js.map +0 -1
  245. package/dist/chunk-B7CCVP6Q.js +0 -639
  246. package/dist/chunk-B7CCVP6Q.js.map +0 -1
  247. package/dist/chunk-BDLUZVKU.js +0 -54
  248. package/dist/chunk-BDLUZVKU.js.map +0 -1
  249. package/dist/chunk-CDX4W4DM.js.map +0 -1
  250. package/dist/chunk-D237EVNB.js.map +0 -1
  251. package/dist/chunk-DRXPNNPB.js +0 -393
  252. package/dist/chunk-DRXPNNPB.js.map +0 -1
  253. package/dist/chunk-E3FJH4TF.js.map +0 -1
  254. package/dist/chunk-ED4E6Q2T.js +0 -114
  255. package/dist/chunk-ED4E6Q2T.js.map +0 -1
  256. package/dist/chunk-EHS3TWWP.js +0 -95
  257. package/dist/chunk-EHS3TWWP.js.map +0 -1
  258. package/dist/chunk-GDH553MV.js +0 -91
  259. package/dist/chunk-GDH553MV.js.map +0 -1
  260. package/dist/chunk-HLJX2FTL.js +0 -95
  261. package/dist/chunk-HLJX2FTL.js.map +0 -1
  262. package/dist/chunk-I2DSLOXZ.js +0 -75
  263. package/dist/chunk-I2DSLOXZ.js.map +0 -1
  264. package/dist/chunk-I4TPKIYX.js +0 -493
  265. package/dist/chunk-I4TPKIYX.js.map +0 -1
  266. package/dist/chunk-IAUAQJQ2.js +0 -57
  267. package/dist/chunk-IAUAQJQ2.js.map +0 -1
  268. package/dist/chunk-IBE7JIAG.js +0 -129
  269. package/dist/chunk-IBE7JIAG.js.map +0 -1
  270. package/dist/chunk-IMDW5ZUP.js +0 -132
  271. package/dist/chunk-IMDW5ZUP.js.map +0 -1
  272. package/dist/chunk-JIPWV2FX.js.map +0 -1
  273. package/dist/chunk-K3NB6DSG.js.map +0 -1
  274. package/dist/chunk-K7EVM5LY.js +0 -141
  275. package/dist/chunk-K7EVM5LY.js.map +0 -1
  276. package/dist/chunk-KAAEN2PO.js +0 -57
  277. package/dist/chunk-KAAEN2PO.js.map +0 -1
  278. package/dist/chunk-NDY25DTL.js +0 -453
  279. package/dist/chunk-NDY25DTL.js.map +0 -1
  280. package/dist/chunk-P26A2K5N.js +0 -64
  281. package/dist/chunk-P26A2K5N.js.map +0 -1
  282. package/dist/chunk-RFTSZDHV.js +0 -313
  283. package/dist/chunk-RFTSZDHV.js.map +0 -1
  284. package/dist/chunk-RTE64SJA.js.map +0 -1
  285. package/dist/chunk-SVYPSDWY.js +0 -84
  286. package/dist/chunk-SVYPSDWY.js.map +0 -1
  287. package/dist/chunk-TKFPKEV3.js +0 -69
  288. package/dist/chunk-TKFPKEV3.js.map +0 -1
  289. package/dist/chunk-UQTEPWU7.js +0 -108
  290. package/dist/chunk-UQTEPWU7.js.map +0 -1
  291. package/dist/chunk-V46GGCCI.js +0 -294
  292. package/dist/chunk-V46GGCCI.js.map +0 -1
  293. package/dist/chunk-X6QONICW.js.map +0 -1
  294. package/dist/chunk-Y2LW7R3Y.js +0 -23
  295. package/dist/chunk-Y2LW7R3Y.js.map +0 -1
  296. package/dist/chunk-Z7G4B5HJ.js.map +0 -1
  297. package/dist/chunk-ZENYS6KW.js +0 -90
  298. package/dist/chunk-ZENYS6KW.js.map +0 -1
  299. package/dist/chunk-ZFPSUQOU.js +0 -396
  300. package/dist/chunk-ZFPSUQOU.js.map +0 -1
  301. package/dist/commands/config/set.js +0 -61
  302. package/dist/commands/config/set.js.map +0 -1
  303. package/dist/commands/config/unset.js +0 -57
  304. package/dist/commands/config/unset.js.map +0 -1
  305. package/dist/commands/test-imports.js +0 -92
  306. package/dist/commands/test-imports.js.map +0 -1
  307. package/dist/components/wizard/step-stack-options.js +0 -11
  308. package/dist/components/wizard/wizard-footer.js +0 -9
  309. /package/dist/{chunk-XY3XDVMI.js.map → chunk-QR2EBWL2.js.map} +0 -0
  310. /package/dist/{chunk-66UDJBF6.js.map → chunk-REJGRCVQ.js.map} +0 -0
  311. /package/dist/{chunk-Z2CWURZ6.js.map → chunk-UNN7523L.js.map} +0 -0
  312. /package/dist/components/wizard/{step-stack-options.js.map → menu-item.js.map} +0 -0
  313. /package/dist/components/wizard/{wizard-footer.js.map → search-modal.js.map} +0 -0
  314. /package/dist/{magic-string.es-RGXYGAW3.js.map → magic-string.es-PAH2SOTR.js.map} +0 -0
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  resolveSource
4
- } from "../chunk-V46GGCCI.js";
5
- import "../chunk-3U3R4NCG.js";
6
- import "../chunk-TKFPKEV3.js";
7
- import "../chunk-76DWXGQE.js";
4
+ } from "../chunk-YDBSSAJ6.js";
5
+ import "../chunk-ZDREFYD2.js";
6
+ import "../chunk-HWD32NP7.js";
7
+ import "../chunk-O6ZTD7ZI.js";
8
8
  import {
9
9
  init_esm_shims
10
- } from "../chunk-DHET7RCE.js";
10
+ } from "../chunk-AWKZ5BDL.js";
11
11
 
12
12
  // src/cli/hooks/init.ts
13
13
  init_esm_shims();
@@ -18,9 +18,7 @@ var hook = async function(options) {
18
18
  if (sourceArgIndex !== -1 && sourceArgIndex + 1 < options.argv.length) {
19
19
  sourceFlag = options.argv[sourceArgIndex + 1];
20
20
  } else {
21
- const sourceFlagWithEquals = options.argv.find(
22
- (arg) => arg.startsWith("--source=")
23
- );
21
+ const sourceFlagWithEquals = options.argv.find((arg) => arg.startsWith("--source="));
24
22
  if (sourceFlagWithEquals) {
25
23
  sourceFlag = sourceFlagWithEquals.split("=")[1];
26
24
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/hooks/init.ts"],"sourcesContent":["// Init hook - runs before each command\nimport { Hook } from \"@oclif/core\";\nimport { resolveSource } from \"../lib/config.js\";\n\nconst hook: Hook<\"init\"> = async function (options) {\n // Detect project directory (current working directory)\n const projectDir = process.cwd();\n\n // Get the --source flag value if provided\n // The flag value will be available in the command's flags after parse()\n // but during init hook we need to check argv manually\n let sourceFlag: string | undefined;\n const sourceArgIndex = options.argv.indexOf(\"--source\");\n if (sourceArgIndex !== -1 && sourceArgIndex + 1 < options.argv.length) {\n sourceFlag = options.argv[sourceArgIndex + 1];\n } else {\n const sourceFlagWithEquals = options.argv.find((arg) =>\n arg.startsWith(\"--source=\"),\n );\n if (sourceFlagWithEquals) {\n sourceFlag = sourceFlagWithEquals.split(\"=\")[1];\n }\n }\n\n // Short form -s\n const sArgIndex = options.argv.indexOf(\"-s\");\n if (sArgIndex !== -1 && sArgIndex + 1 < options.argv.length) {\n sourceFlag = options.argv[sArgIndex + 1];\n }\n\n // Resolve configuration\n try {\n const resolvedConfig = await resolveSource(sourceFlag, projectDir);\n\n // Store resolved config in the oclif Config object\n // This will be available to commands via this.sourceConfig getter in BaseCommand\n (options.config as any).sourceConfig = resolvedConfig;\n } catch (error) {\n // If config loading fails, we let the command handle it\n // This ensures commands can still run even if config is invalid\n // The command can check if config.sourceConfig is undefined and handle accordingly\n }\n};\n\nexport default hook;\n"],"mappings":";;;;;;;;;;;;AAAA;AAIA,IAAM,OAAqB,eAAgB,SAAS;AAElD,QAAM,aAAa,QAAQ,IAAI;AAK/B,MAAI;AACJ,QAAM,iBAAiB,QAAQ,KAAK,QAAQ,UAAU;AACtD,MAAI,mBAAmB,MAAM,iBAAiB,IAAI,QAAQ,KAAK,QAAQ;AACrE,iBAAa,QAAQ,KAAK,iBAAiB,CAAC;AAAA,EAC9C,OAAO;AACL,UAAM,uBAAuB,QAAQ,KAAK;AAAA,MAAK,CAAC,QAC9C,IAAI,WAAW,WAAW;AAAA,IAC5B;AACA,QAAI,sBAAsB;AACxB,mBAAa,qBAAqB,MAAM,GAAG,EAAE,CAAC;AAAA,IAChD;AAAA,EACF;AAGA,QAAM,YAAY,QAAQ,KAAK,QAAQ,IAAI;AAC3C,MAAI,cAAc,MAAM,YAAY,IAAI,QAAQ,KAAK,QAAQ;AAC3D,iBAAa,QAAQ,KAAK,YAAY,CAAC;AAAA,EACzC;AAGA,MAAI;AACF,UAAM,iBAAiB,MAAM,cAAc,YAAY,UAAU;AAIjE,IAAC,QAAQ,OAAe,eAAe;AAAA,EACzC,SAAS,OAAO;AAAA,EAIhB;AACF;AAEA,IAAO,eAAQ;","names":[]}
1
+ {"version":3,"sources":["../../src/cli/hooks/init.ts"],"sourcesContent":["import { Hook } from \"@oclif/core\";\nimport { resolveSource } from \"../lib/configuration/index.js\";\n\nconst hook: Hook<\"init\"> = async function (options) {\n const projectDir = process.cwd();\n\n // Extract --source flag from argv (not yet parsed by oclif at this point)\n let sourceFlag: string | undefined;\n const sourceArgIndex = options.argv.indexOf(\"--source\");\n if (sourceArgIndex !== -1 && sourceArgIndex + 1 < options.argv.length) {\n sourceFlag = options.argv[sourceArgIndex + 1];\n } else {\n const sourceFlagWithEquals = options.argv.find((arg) => arg.startsWith(\"--source=\"));\n if (sourceFlagWithEquals) {\n sourceFlag = sourceFlagWithEquals.split(\"=\")[1];\n }\n }\n\n // Short form -s\n const sArgIndex = options.argv.indexOf(\"-s\");\n if (sArgIndex !== -1 && sArgIndex + 1 < options.argv.length) {\n sourceFlag = options.argv[sArgIndex + 1];\n }\n\n try {\n const resolvedConfig = await resolveSource(sourceFlag, projectDir);\n // Available to commands via this.sourceConfig getter in BaseCommand\n (options.config as any).sourceConfig = resolvedConfig;\n } catch (error) {\n // Let the command handle config failures - commands can check if sourceConfig is undefined\n }\n};\n\nexport default hook;\n"],"mappings":";;;;;;;;;;;;AAAA;AAGA,IAAM,OAAqB,eAAgB,SAAS;AAClD,QAAM,aAAa,QAAQ,IAAI;AAG/B,MAAI;AACJ,QAAM,iBAAiB,QAAQ,KAAK,QAAQ,UAAU;AACtD,MAAI,mBAAmB,MAAM,iBAAiB,IAAI,QAAQ,KAAK,QAAQ;AACrE,iBAAa,QAAQ,KAAK,iBAAiB,CAAC;AAAA,EAC9C,OAAO;AACL,UAAM,uBAAuB,QAAQ,KAAK,KAAK,CAAC,QAAQ,IAAI,WAAW,WAAW,CAAC;AACnF,QAAI,sBAAsB;AACxB,mBAAa,qBAAqB,MAAM,GAAG,EAAE,CAAC;AAAA,IAChD;AAAA,EACF;AAGA,QAAM,YAAY,QAAQ,KAAK,QAAQ,IAAI;AAC3C,MAAI,cAAc,MAAM,YAAY,IAAI,QAAQ,KAAK,QAAQ;AAC3D,iBAAa,QAAQ,KAAK,YAAY,CAAC;AAAA,EACzC;AAEA,MAAI;AACF,UAAM,iBAAiB,MAAM,cAAc,YAAY,UAAU;AAEjE,IAAC,QAAQ,OAAe,eAAe;AAAA,EACzC,SAAS,OAAO;AAAA,EAEhB;AACF;AAEA,IAAO,eAAQ;","names":[]}
package/dist/index.js CHANGED
@@ -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/index.ts
7
7
  init_esm_shims();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/index.ts"],"sourcesContent":["// oclif entry point - to be implemented\nimport { run, flush, Errors } from \"@oclif/core\";\n\nrun(undefined, import.meta.url)\n .then(() => flush())\n .catch((error) => Errors.handle(error));\n"],"mappings":";;;;;;AAAA;AACA,SAAS,KAAK,OAAO,cAAc;AAEnC,IAAI,QAAW,YAAY,GAAG,EAC3B,KAAK,MAAM,MAAM,CAAC,EAClB,MAAM,CAAC,UAAU,OAAO,OAAO,KAAK,CAAC;","names":[]}
1
+ {"version":3,"sources":["../src/cli/index.ts"],"sourcesContent":["import { run, flush, Errors } from \"@oclif/core\";\n\nrun(undefined, import.meta.url)\n .then(() => flush())\n .catch((error) => Errors.handle(error));\n"],"mappings":";;;;;;AAAA;AAAA,SAAS,KAAK,OAAO,cAAc;AAEnC,IAAI,QAAW,YAAY,GAAG,EAC3B,KAAK,MAAM,MAAM,CAAC,EAClB,MAAM,CAAC,UAAU,OAAO,OAAO,KAAK,CAAC;","names":[]}
@@ -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
  // node_modules/magic-string/dist/magic-string.es.mjs
7
7
  init_esm_shims();
@@ -1313,4 +1313,4 @@ export {
1313
1313
  SourceMap,
1314
1314
  MagicString as default
1315
1315
  };
1316
- //# sourceMappingURL=magic-string.es-RGXYGAW3.js.map
1316
+ //# sourceMappingURL=magic-string.es-PAH2SOTR.js.map
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ addSource,
4
+ getSourceSummary,
5
+ removeSource
6
+ } from "./chunk-YDBSSAJ6.js";
7
+ import "./chunk-ZDREFYD2.js";
8
+ import "./chunk-HWD32NP7.js";
9
+ import "./chunk-O6ZTD7ZI.js";
10
+ import "./chunk-AWKZ5BDL.js";
11
+ export {
12
+ addSource,
13
+ getSourceSummary,
14
+ removeSource
15
+ };
16
+ //# sourceMappingURL=source-manager-DSYZEVGZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,4 +1,4 @@
1
- $schema: https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
1
+ # yaml-language-server: $schema=../../../schemas/agent.schema.json
2
2
  id: api-developer
3
3
  title: API Developer Agent
4
4
  description: Implements backend features from detailed specs - API routes, database operations, server utilities, authentication, middleware - surgical execution following existing patterns - invoke AFTER web-pm creates spec
@@ -1,4 +1,4 @@
1
- $schema: https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
1
+ # yaml-language-server: $schema=../../../schemas/agent.schema.json
2
2
  id: cli-developer
3
3
  title: CLI Developer Agent
4
4
  description: Implements CLI features from detailed specs - CLI commands, interactive prompts, option parsing, config hierarchies, exit codes - surgical execution following existing patterns - invoke AFTER pm creates spec
@@ -1,4 +1,4 @@
1
- $schema: https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
1
+ # yaml-language-server: $schema=../../../schemas/agent.schema.json
2
2
  id: web-architecture
3
3
  title: Web Architecture Agent
4
4
  description: Scaffolds new applications in the monorepo with all foundational patterns (authentication, database, API, analytics, observability, CI/CD)
@@ -1,4 +1,4 @@
1
- $schema: https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
1
+ # yaml-language-server: $schema=../../../schemas/agent.schema.json
2
2
  id: web-developer
3
3
  title: Web Developer Agent
4
4
  description: Implements frontend features from detailed specs - UI components, TypeScript, styling, client state - surgical execution following existing patterns - invoke AFTER web-pm creates spec
@@ -53,12 +53,7 @@ import { useThemeStore } from "../stores/ThemeStore";
53
53
  export function DarkModeToggle({ className }: { className?: string }) {
54
54
  const { darkMode, toggleDarkMode } = useThemeStore();
55
55
  return (
56
- <Switch
57
- label="Dark mode"
58
- checked={darkMode}
59
- onChange={toggleDarkMode}
60
- className={className}
61
- />
56
+ <Switch label="Dark mode" checked={darkMode} onChange={toggleDarkMode} className={className} />
62
57
  );
63
58
  }
64
59
  ```
@@ -1,4 +1,4 @@
1
- $schema: https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
1
+ # yaml-language-server: $schema=../../../schemas/agent.schema.json
2
2
  id: agent-summoner
3
3
  title: Agent Summoner Agent
4
4
  description: Expert in creating agents and skills - understands agent architecture deeply - invoke when you need to create, improve, or analyze agents/skills
@@ -1,4 +1,4 @@
1
- $schema: https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
1
+ # yaml-language-server: $schema=../../../schemas/agent.schema.json
2
2
  id: documentor
3
3
  title: Documentor Agent
4
4
  description: Creates AI-focused documentation that helps other agents understand where and how to implement features. Works incrementally, tracking progress over time.
@@ -562,11 +562,7 @@ export type ButtonProps = React.ComponentProps<"button"> & {
562
562
  size?: "sm" | "lg";
563
563
  };
564
564
 
565
- export const Button = ({
566
- variant = "primary",
567
- size = "sm",
568
- ...props
569
- }: ButtonProps) => {
565
+ export const Button = ({ variant = "primary", size = "sm", ...props }: ButtonProps) => {
570
566
  // ...
571
567
  };
572
568
  ```
@@ -1,4 +1,4 @@
1
- $schema: https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
1
+ # yaml-language-server: $schema=../../../schemas/agent.schema.json
2
2
  id: skill-summoner
3
3
  title: Skill Summoner Agent
4
4
  description: Creates technology-specific skills by researching best practices and comparing with codebase standards - use for state management, styling, API frameworks, and other technology skills
@@ -1,4 +1,4 @@
1
- $schema: https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
1
+ # yaml-language-server: $schema=../../../schemas/agent.schema.json
2
2
  id: cli-migrator
3
3
  title: CLI Migration Specialist
4
4
  description: Converts Commander.js + @clack/prompts CLI code to oclif + Ink - TEMPORARY agent for migration effort
@@ -92,9 +92,7 @@ export class Init extends Command {
92
92
 
93
93
  ```tsx
94
94
  // BAD
95
- const Component = () => (
96
- <Box>Hello World {/* Error: text outside Text component */}</Box>
97
- );
95
+ const Component = () => <Box>Hello World {/* Error: text outside Text component */}</Box>;
98
96
 
99
97
  // GOOD
100
98
  const Component = () => (
@@ -1,4 +1,4 @@
1
- $schema: https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
1
+ # yaml-language-server: $schema=../../../schemas/agent.schema.json
2
2
  id: pattern-scout
3
3
  title: Pattern Scout Agent
4
4
  description: Extracts ALL patterns from monorepo (15+ categories - code, architecture, testing, design, build, CI/CD, env, security) - creates comprehensive standards - invoke for new codebases
@@ -1,4 +1,4 @@
1
- $schema: https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
1
+ # yaml-language-server: $schema=../../../schemas/agent.schema.json
2
2
  id: web-pattern-critique
3
3
  title: Web Pattern Critique Agent
4
4
  description: Critiques extracted patterns against industry standards (Airbnb, Stripe, Meta, Vercel) - frontend architecture focus - invoke AFTER pattern-scout extracts patterns
@@ -1,4 +1,4 @@
1
- $schema: https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
1
+ # yaml-language-server: $schema=../../../schemas/agent.schema.json
2
2
  id: web-pm
3
3
  title: Web PM and Architect Agent
4
4
  description: Creates detailed implementation specs by researching codebase patterns - architectural planning and requirements gathering - invoke BEFORE developer for any new feature
@@ -1,4 +1,4 @@
1
- $schema: https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
1
+ # yaml-language-server: $schema=../../../schemas/agent.schema.json
2
2
  id: api-researcher
3
3
  title: API Researcher Agent
4
4
  description: Read-only backend research specialist - discovers API route patterns, understands database schemas and ORM patterns, catalogs middleware and authentication flows, finds similar service implementations - produces structured findings for api-developer - invoke for backend research before implementation
@@ -1,4 +1,4 @@
1
- $schema: https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
1
+ # yaml-language-server: $schema=../../../schemas/agent.schema.json
2
2
  id: web-researcher
3
3
  title: Web Researcher Agent
4
4
  description: Read-only frontend research specialist - discovers UI component patterns, catalogs design systems, understands styling methodology and tokens, finds similar component implementations - produces structured findings for web-developer - invoke for frontend research before implementation
@@ -1,4 +1,4 @@
1
- $schema: https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
1
+ # yaml-language-server: $schema=../../../schemas/agent.schema.json
2
2
  id: api-reviewer
3
3
  title: API Reviewer Agent
4
4
  description: Reviews non-component code - API routes, server utils, configs (*.config.*), build tooling, CI/CD (*.yml), security, env management - defers UI components to web-reviewer
@@ -1,4 +1,4 @@
1
- $schema: https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
1
+ # yaml-language-server: $schema=../../../schemas/agent.schema.json
2
2
  id: cli-reviewer
3
3
  title: CLI Reviewer Agent
4
4
  description: Reviews CLI code ONLY - CLI commands, interactive prompts, exit codes, SIGINT handling, error messages, user feedback patterns - defers non-CLI code to api-reviewer
@@ -1,4 +1,4 @@
1
- $schema: https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
1
+ # yaml-language-server: $schema=../../../schemas/agent.schema.json
2
2
  id: web-reviewer
3
3
  title: Web Reviewer Agent
4
4
  description: Reviews UI component code ONLY (*.tsx/*.jsx with JSX) - components, hooks, props, state, performance, a11y patterns - NOT for API routes, configs, or server code (use api-reviewer)
@@ -1,4 +1,4 @@
1
- $schema: https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
1
+ # yaml-language-server: $schema=../../../schemas/agent.schema.json
2
2
  id: cli-tester
3
3
  title: CLI Tester Agent
4
4
  description: Tests CLI applications - wizard flows, commands, keyboard interactions, file system outputs - invoke BEFORE or AFTER cli-developer implements features
@@ -1,4 +1,4 @@
1
- $schema: https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
1
+ # yaml-language-server: $schema=../../../schemas/agent.schema.json
2
2
  id: web-tester
3
3
  title: Web Tester Agent
4
4
  description: Writes tests BEFORE implementation - all test types (*.test.*, *.spec.*, E2E) - Tester red-green-refactor - invoke BEFORE developer implements feature
@@ -154,9 +154,7 @@ describe("[Feature/Component Name]", () => {
154
154
  const mockApi = {
155
155
  success: { data: { id: 1, name: "Test" } },
156
156
  error: { error: { message: "Failed" } },
157
- timeout: new Promise((_, reject) =>
158
- setTimeout(() => reject(new Error("Timeout")), 100),
159
- ),
157
+ timeout: new Promise((_, reject) => setTimeout(() => reject(new Error("Timeout")), 100)),
160
158
  };
161
159
  ```
162
160
 
@@ -1,9 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  useWizardStore
4
- } from "../chunk-D237EVNB.js";
5
- import "../chunk-76DWXGQE.js";
6
- import "../chunk-DHET7RCE.js";
4
+ } from "../chunk-TMED5DQ2.js";
5
+ import "../chunk-HWD32NP7.js";
6
+ import "../chunk-O6ZTD7ZI.js";
7
+ import "../chunk-AWKZ5BDL.js";
7
8
  export {
8
9
  useWizardStore
9
10
  };
@@ -4,16 +4,17 @@ import {
4
4
  describe,
5
5
  globalExpect,
6
6
  it
7
- } from "../chunk-XY3XDVMI.js";
7
+ } from "../chunk-QR2EBWL2.js";
8
8
  import {
9
9
  useWizardStore
10
- } from "../chunk-D237EVNB.js";
10
+ } from "../chunk-TMED5DQ2.js";
11
+ import "../chunk-HWD32NP7.js";
11
12
  import {
12
13
  DEFAULT_PRESELECTED_SKILLS
13
- } from "../chunk-76DWXGQE.js";
14
+ } from "../chunk-O6ZTD7ZI.js";
14
15
  import {
15
16
  init_esm_shims
16
- } from "../chunk-DHET7RCE.js";
17
+ } from "../chunk-AWKZ5BDL.js";
17
18
 
18
19
  // src/cli/stores/wizard-store.test.ts
19
20
  init_esm_shims();
@@ -150,57 +151,44 @@ describe("WizardStore", () => {
150
151
  describe("technology selection", () => {
151
152
  it("should toggle technology in exclusive mode", () => {
152
153
  const store = useWizardStore.getState();
153
- store.toggleTechnology("web", "framework", "react", true);
154
+ store.toggleTechnology("web", "framework", "web-framework-react", true);
154
155
  const { domainSelections } = useWizardStore.getState();
155
- globalExpect(domainSelections.web.framework).toEqual(["react"]);
156
+ globalExpect(domainSelections.web.framework).toEqual(["web-framework-react"]);
156
157
  });
157
158
  it("should replace technology in exclusive mode", () => {
158
159
  const store = useWizardStore.getState();
159
- store.toggleTechnology("web", "framework", "react", true);
160
- store.toggleTechnology("web", "framework", "vue", true);
160
+ store.toggleTechnology("web", "framework", "web-framework-react", true);
161
+ store.toggleTechnology("web", "framework", "web-framework-vue", true);
161
162
  const { domainSelections } = useWizardStore.getState();
162
- globalExpect(domainSelections.web.framework).toEqual(["vue"]);
163
+ globalExpect(domainSelections.web.framework).toEqual(["web-framework-vue"]);
163
164
  });
164
165
  it("should toggle off technology in exclusive mode", () => {
165
166
  const store = useWizardStore.getState();
166
- store.toggleTechnology("web", "framework", "react", true);
167
- store.toggleTechnology("web", "framework", "react", true);
167
+ store.toggleTechnology("web", "framework", "web-framework-react", true);
168
+ store.toggleTechnology("web", "framework", "web-framework-react", true);
168
169
  const { domainSelections } = useWizardStore.getState();
169
170
  globalExpect(domainSelections.web.framework).toEqual([]);
170
171
  });
171
172
  it("should allow multiple selections in non-exclusive mode", () => {
172
173
  const store = useWizardStore.getState();
173
- store.toggleTechnology("web", "testing", "vitest", false);
174
- store.toggleTechnology("web", "testing", "jest", false);
174
+ store.toggleTechnology("web", "testing", "web-testing-vitest", false);
175
+ store.toggleTechnology("web", "testing", "web-testing-playwright-e2e", false);
175
176
  const { domainSelections } = useWizardStore.getState();
176
- globalExpect(domainSelections.web.testing).toEqual(["vitest", "jest"]);
177
+ globalExpect(domainSelections.web.testing).toEqual([
178
+ "web-testing-vitest",
179
+ "web-testing-playwright-e2e"
180
+ ]);
177
181
  });
178
182
  it("should toggle off technology in non-exclusive mode", () => {
179
183
  const store = useWizardStore.getState();
180
- store.toggleTechnology("web", "testing", "vitest", false);
181
- store.toggleTechnology("web", "testing", "jest", false);
182
- store.toggleTechnology("web", "testing", "vitest", false);
184
+ store.toggleTechnology("web", "testing", "web-testing-vitest", false);
185
+ store.toggleTechnology("web", "testing", "web-testing-playwright-e2e", false);
186
+ store.toggleTechnology("web", "testing", "web-testing-vitest", false);
183
187
  const { domainSelections } = useWizardStore.getState();
184
- globalExpect(domainSelections.web.testing).toEqual(["jest"]);
188
+ globalExpect(domainSelections.web.testing).toEqual(["web-testing-playwright-e2e"]);
185
189
  });
186
190
  });
187
191
  describe("domain navigation", () => {
188
- it("should set current domain index", () => {
189
- const store = useWizardStore.getState();
190
- store.toggleDomain("web");
191
- store.toggleDomain("api");
192
- store.setCurrentDomainIndex(1);
193
- const { currentDomainIndex } = useWizardStore.getState();
194
- globalExpect(currentDomainIndex).toBe(1);
195
- });
196
- it("should reset focus when changing domain index", () => {
197
- const store = useWizardStore.getState();
198
- store.setFocus(2, 3);
199
- store.setCurrentDomainIndex(1);
200
- const { focusedRow, focusedCol } = useWizardStore.getState();
201
- globalExpect(focusedRow).toBe(0);
202
- globalExpect(focusedCol).toBe(0);
203
- });
204
192
  it("should move to next domain", () => {
205
193
  const store = useWizardStore.getState();
206
194
  store.toggleDomain("web");
@@ -220,7 +208,7 @@ describe("WizardStore", () => {
220
208
  const store = useWizardStore.getState();
221
209
  store.toggleDomain("web");
222
210
  store.toggleDomain("api");
223
- store.setCurrentDomainIndex(1);
211
+ store.nextDomain();
224
212
  const result = store.prevDomain();
225
213
  const { currentDomainIndex } = useWizardStore.getState();
226
214
  globalExpect(result).toBe(true);
@@ -236,7 +224,7 @@ describe("WizardStore", () => {
236
224
  const store = useWizardStore.getState();
237
225
  store.toggleDomain("web");
238
226
  store.toggleDomain("api");
239
- store.setCurrentDomainIndex(1);
227
+ store.nextDomain();
240
228
  const domain = store.getCurrentDomain();
241
229
  globalExpect(domain).toBe("api");
242
230
  });
@@ -280,47 +268,23 @@ describe("WizardStore", () => {
280
268
  globalExpect(showDescriptions).toBe(true);
281
269
  });
282
270
  });
283
- describe("refine step", () => {
284
- it("should set refine action", () => {
285
- const store = useWizardStore.getState();
286
- store.setRefineAction("all-recommended");
287
- const { refineAction } = useWizardStore.getState();
288
- globalExpect(refineAction).toBe("all-recommended");
289
- });
290
- it("should set skill source", () => {
291
- const store = useWizardStore.getState();
292
- store.setSkillSource("react", "react (@vince)");
293
- const { skillSources } = useWizardStore.getState();
294
- globalExpect(skillSources.react).toBe("react (@vince)");
295
- });
296
- it("should set current refine index", () => {
297
- const store = useWizardStore.getState();
298
- store.setCurrentRefineIndex(3);
299
- const { currentRefineIndex } = useWizardStore.getState();
300
- globalExpect(currentRefineIndex).toBe(3);
301
- });
302
- });
303
271
  describe("computed getters", () => {
304
272
  it("should get all selected technologies", () => {
305
273
  const store = useWizardStore.getState();
306
- store.toggleTechnology("web", "framework", "react", true);
307
- store.toggleTechnology("web", "styling", "scss", true);
308
- store.toggleTechnology("api", "api-framework", "hono", true);
274
+ store.toggleTechnology("web", "framework", "web-framework-react", true);
275
+ store.toggleTechnology("web", "styling", "web-styling-scss-modules", true);
276
+ store.toggleTechnology("api", "api", "api-framework-hono", true);
309
277
  const technologies = store.getAllSelectedTechnologies();
310
- globalExpect(technologies).toContain("react");
311
- globalExpect(technologies).toContain("scss");
312
- globalExpect(technologies).toContain("hono");
278
+ globalExpect(technologies).toContain("web-framework-react");
279
+ globalExpect(technologies).toContain("web-styling-scss-modules");
280
+ globalExpect(technologies).toContain("api-framework-hono");
313
281
  });
314
282
  it("should get selected skills including preselected", () => {
315
283
  const store = useWizardStore.getState();
316
- store.setSkillSource("react", "react (@vince)");
317
- store.setSkillSource("scss", "scss-modules (@vince)");
318
284
  const skills = store.getSelectedSkills();
319
285
  for (const skill of DEFAULT_PRESELECTED_SKILLS) {
320
286
  globalExpect(skills).toContain(skill);
321
287
  }
322
- globalExpect(skills).toContain("react (@vince)");
323
- globalExpect(skills).toContain("scss-modules (@vince)");
324
288
  });
325
289
  });
326
290
  describe("reset", () => {
@@ -342,29 +306,73 @@ describe("WizardStore", () => {
342
306
  globalExpect(state.history).toEqual([]);
343
307
  });
344
308
  });
309
+ describe("populateFromStack", () => {
310
+ it("should set selectedDomains to all domains regardless of stack contents", () => {
311
+ const store = useWizardStore.getState();
312
+ const stack = {
313
+ agents: {
314
+ web: { framework: "react" }
315
+ }
316
+ };
317
+ const categories = {
318
+ framework: { domain: "web" }
319
+ };
320
+ store.populateFromStack(stack, categories);
321
+ const { selectedDomains, domainSelections } = useWizardStore.getState();
322
+ globalExpect(selectedDomains).toEqual(["web", "web-extras", "api", "cli", "mobile", "shared"]);
323
+ globalExpect(domainSelections.web).toBeDefined();
324
+ globalExpect(domainSelections.web.framework).toEqual(["react"]);
325
+ globalExpect(domainSelections.api).toBeUndefined();
326
+ });
327
+ it("should populate domainSelections from stack agents", () => {
328
+ const store = useWizardStore.getState();
329
+ const stack = {
330
+ agents: {
331
+ web: { framework: "react", "client-state": "zustand" },
332
+ api: { api: "hono" }
333
+ }
334
+ };
335
+ const categories = {
336
+ framework: { domain: "web" },
337
+ "client-state": { domain: "web" },
338
+ api: { domain: "api" }
339
+ };
340
+ store.populateFromStack(stack, categories);
341
+ const { domainSelections } = useWizardStore.getState();
342
+ globalExpect(domainSelections.web.framework).toEqual(["react"]);
343
+ globalExpect(domainSelections.web["client-state"]).toEqual(["zustand"]);
344
+ globalExpect(domainSelections.api.api).toEqual(["hono"]);
345
+ });
346
+ it("should skip entries without a domain", () => {
347
+ const store = useWizardStore.getState();
348
+ const stack = {
349
+ agents: {
350
+ misc: { methodology: "vitest" }
351
+ }
352
+ };
353
+ const categories = {
354
+ methodology: {}
355
+ };
356
+ store.populateFromStack(stack, categories);
357
+ const { domainSelections } = useWizardStore.getState();
358
+ globalExpect(Object.keys(domainSelections)).toHaveLength(0);
359
+ });
360
+ });
345
361
  describe("complex flows", () => {
346
362
  it("should handle complete stack selection flow", () => {
347
363
  const store = useWizardStore.getState();
348
364
  store.setApproach("stack");
349
365
  store.setStep("stack");
350
366
  store.selectStack("nextjs-fullstack");
351
- store.setStep("stack-options");
352
- store.setStackAction("defaults");
353
- store.setStep("refine");
354
- store.setRefineAction("all-recommended");
367
+ store.setStackAction("customize");
368
+ store.setStep("build");
355
369
  store.setStep("confirm");
356
370
  const state = useWizardStore.getState();
357
371
  globalExpect(state.step).toBe("confirm");
358
372
  globalExpect(state.approach).toBe("stack");
359
373
  globalExpect(state.selectedStackId).toBe("nextjs-fullstack");
360
- globalExpect(state.stackAction).toBe("defaults");
361
- globalExpect(state.refineAction).toBe("all-recommended");
362
- globalExpect(state.history).toEqual([
363
- "approach",
364
- "stack",
365
- "stack-options",
366
- "refine"
367
- ]);
374
+ globalExpect(state.stackAction).toBe("customize");
375
+ globalExpect(state.history).toEqual(["approach", "stack", "build"]);
368
376
  });
369
377
  it("should handle complete scratch flow", () => {
370
378
  const store = useWizardStore.getState();
@@ -373,19 +381,17 @@ describe("WizardStore", () => {
373
381
  store.toggleDomain("web");
374
382
  store.toggleDomain("api");
375
383
  store.setStep("build");
376
- store.toggleTechnology("web", "framework", "react", true);
377
- store.toggleTechnology("web", "styling", "scss", true);
378
- store.toggleTechnology("api", "api-framework", "hono", true);
379
- store.setStep("refine");
380
- store.setRefineAction("all-recommended");
384
+ store.toggleTechnology("web", "framework", "web-framework-react", true);
385
+ store.toggleTechnology("web", "styling", "web-styling-scss-modules", true);
386
+ store.toggleTechnology("api", "api", "api-framework-hono", true);
381
387
  store.setStep("confirm");
382
388
  const state = useWizardStore.getState();
383
389
  globalExpect(state.step).toBe("confirm");
384
390
  globalExpect(state.approach).toBe("scratch");
385
391
  globalExpect(state.selectedDomains).toEqual(["web", "api"]);
386
- globalExpect(state.domainSelections.web.framework).toEqual(["react"]);
387
- globalExpect(state.domainSelections.web.styling).toEqual(["scss"]);
388
- globalExpect(state.domainSelections.api["api-framework"]).toEqual(["hono"]);
392
+ globalExpect(state.domainSelections.web.framework).toEqual(["web-framework-react"]);
393
+ globalExpect(state.domainSelections.web.styling).toEqual(["web-styling-scss-modules"]);
394
+ globalExpect(state.domainSelections.api.api).toEqual(["api-framework-hono"]);
389
395
  });
390
396
  it("should preserve selections when going back", () => {
391
397
  const store = useWizardStore.getState();
@@ -393,12 +399,12 @@ describe("WizardStore", () => {
393
399
  store.setStep("stack");
394
400
  store.toggleDomain("web");
395
401
  store.setStep("build");
396
- store.toggleTechnology("web", "framework", "react", true);
402
+ store.toggleTechnology("web", "framework", "web-framework-react", true);
397
403
  store.goBack();
398
404
  store.goBack();
399
405
  const state = useWizardStore.getState();
400
406
  globalExpect(state.selectedDomains).toContain("web");
401
- globalExpect(state.domainSelections.web.framework).toEqual(["react"]);
407
+ globalExpect(state.domainSelections.web.framework).toEqual(["web-framework-react"]);
402
408
  });
403
409
  });
404
410
  });