@agents-inc/cli 0.48.0 → 0.60.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 (306) hide show
  1. package/CHANGELOG.md +181 -5
  2. package/README.md +1 -2
  3. package/dist/{chunk-2DNDAXF6.js → chunk-52M2XF3W.js} +57 -27
  4. package/dist/chunk-52M2XF3W.js.map +1 -0
  5. package/dist/{chunk-WSGKCBY5.js → chunk-52XO4ULK.js} +6 -9
  6. package/dist/chunk-52XO4ULK.js.map +1 -0
  7. package/dist/{chunk-AMNCCZSG.js → chunk-6G3KZSO4.js} +82 -63
  8. package/dist/chunk-6G3KZSO4.js.map +1 -0
  9. package/dist/{chunk-LESHL6SM.js → chunk-6OWHQ7HM.js} +21 -13
  10. package/dist/chunk-6OWHQ7HM.js.map +1 -0
  11. package/dist/{chunk-X3SZIBVW.js → chunk-7FMEMXJ4.js} +71 -71
  12. package/dist/chunk-7FMEMXJ4.js.map +1 -0
  13. package/dist/{chunk-I52THVF6.js → chunk-AJJJE7F7.js} +2 -2
  14. package/dist/{chunk-ZML3OCYA.js → chunk-AX3SZZWA.js} +2 -2
  15. package/dist/{chunk-NJVJ7VO5.js → chunk-BFD5NZQ4.js} +5 -4
  16. package/dist/chunk-BFD5NZQ4.js.map +1 -0
  17. package/dist/{chunk-GSPPOXMG.js → chunk-BKJHAJQW.js} +2 -2
  18. package/dist/{chunk-GSPPOXMG.js.map → chunk-BKJHAJQW.js.map} +1 -1
  19. package/dist/{chunk-FPTUCWBY.js → chunk-BMJZBLP7.js} +46 -30
  20. package/dist/chunk-BMJZBLP7.js.map +1 -0
  21. package/dist/chunk-BNQ5O6LE.js +74 -0
  22. package/dist/chunk-BNQ5O6LE.js.map +1 -0
  23. package/dist/{chunk-W62XVWXB.js → chunk-C577AJE7.js} +3 -3
  24. package/dist/chunk-CIG7IKX3.js +118 -0
  25. package/dist/chunk-CIG7IKX3.js.map +1 -0
  26. package/dist/chunk-EC3UJRKZ.js +1534 -0
  27. package/dist/chunk-EC3UJRKZ.js.map +1 -0
  28. package/dist/{chunk-IS7GP6XC.js → chunk-EMIUPGPL.js} +57 -52
  29. package/dist/chunk-EMIUPGPL.js.map +1 -0
  30. package/dist/chunk-G6WHCALR.js +593 -0
  31. package/dist/chunk-G6WHCALR.js.map +1 -0
  32. package/dist/{chunk-OTTITQ7C.js → chunk-H7WJK7NJ.js} +48 -95
  33. package/dist/chunk-H7WJK7NJ.js.map +1 -0
  34. package/dist/chunk-HGTC76BX.js +16 -0
  35. package/dist/chunk-HGTC76BX.js.map +1 -0
  36. package/dist/{chunk-G5OZQ376.js → chunk-K6OLORQL.js} +6 -6
  37. package/dist/{chunk-OHDEJEYB.js → chunk-KIWFEBKH.js} +41 -11
  38. package/dist/chunk-KIWFEBKH.js.map +1 -0
  39. package/dist/{chunk-YMUWTPOM.js → chunk-LWXRUR6B.js} +92 -100
  40. package/dist/chunk-LWXRUR6B.js.map +1 -0
  41. package/dist/{chunk-U2AEK4ZL.js → chunk-MGNYPVOJ.js} +2 -2
  42. package/dist/chunk-MKCHLXMY.js +40 -0
  43. package/dist/chunk-MKCHLXMY.js.map +1 -0
  44. package/dist/{chunk-37QYD33C.js → chunk-MMFQNJPE.js} +2 -2
  45. package/dist/{chunk-DG2U2WY3.js → chunk-MR6OBL3B.js} +3 -11
  46. package/dist/{chunk-DG2U2WY3.js.map → chunk-MR6OBL3B.js.map} +1 -1
  47. package/dist/{chunk-7IAKVZL5.js → chunk-O6BA7Q2B.js} +28 -59
  48. package/dist/chunk-O6BA7Q2B.js.map +1 -0
  49. package/dist/chunk-OCEFD7V6.js +201 -0
  50. package/dist/chunk-OCEFD7V6.js.map +1 -0
  51. package/dist/{chunk-YZTWZVGX.js → chunk-PUT7X3GA.js} +1 -1
  52. package/dist/chunk-PUT7X3GA.js.map +1 -0
  53. package/dist/chunk-RO6LX3UV.js +342 -0
  54. package/dist/chunk-RO6LX3UV.js.map +1 -0
  55. package/dist/{chunk-34BP5BC4.js → chunk-SDKCQXWE.js} +2 -2
  56. package/dist/{chunk-VBAAATPU.js → chunk-SEJF7CGJ.js} +41 -28
  57. package/dist/chunk-SEJF7CGJ.js.map +1 -0
  58. package/dist/{chunk-5O6GKXAN.js → chunk-SZRK3VOR.js} +24 -14
  59. package/dist/chunk-SZRK3VOR.js.map +1 -0
  60. package/dist/{chunk-5MN5S3DV.js → chunk-TC3NHO34.js} +22 -17
  61. package/dist/chunk-TC3NHO34.js.map +1 -0
  62. package/dist/{chunk-SPVSWDFM.js → chunk-TGLRDEEL.js} +8 -14
  63. package/dist/chunk-TGLRDEEL.js.map +1 -0
  64. package/dist/{chunk-P2SFRDWI.js → chunk-TZXYBG3R.js} +3634 -2875
  65. package/dist/chunk-TZXYBG3R.js.map +1 -0
  66. package/dist/{chunk-2BVZOYJP.js → chunk-VR3CDXDT.js} +2 -6
  67. package/dist/chunk-VR3CDXDT.js.map +1 -0
  68. package/dist/{chunk-KPJJOLAQ.js → chunk-WF6RM73R.js} +272 -40
  69. package/dist/chunk-WF6RM73R.js.map +1 -0
  70. package/dist/chunk-WYVDNGJB.js +31 -0
  71. package/dist/chunk-WYVDNGJB.js.map +1 -0
  72. package/dist/{chunk-F7KTUFGU.js → chunk-X5EG4EFP.js} +3 -2
  73. package/dist/chunk-X5EG4EFP.js.map +1 -0
  74. package/dist/{chunk-FHKNG3UA.js → chunk-XUDTFI4M.js} +2 -2
  75. package/dist/{chunk-AXV7NFFJ.js → chunk-YHCYKUA3.js} +14 -10
  76. package/dist/chunk-YHCYKUA3.js.map +1 -0
  77. package/dist/commands/build/marketplace.js +4 -4
  78. package/dist/commands/build/plugins.js +9 -7
  79. package/dist/commands/build/plugins.js.map +1 -1
  80. package/dist/commands/build/stack.js +13 -10
  81. package/dist/commands/build/stack.js.map +1 -1
  82. package/dist/commands/compile.js +45 -72
  83. package/dist/commands/compile.js.map +1 -1
  84. package/dist/commands/config/index.js +7 -5
  85. package/dist/commands/config/index.js.map +1 -1
  86. package/dist/commands/config/path.js +8 -6
  87. package/dist/commands/config/path.js.map +1 -1
  88. package/dist/commands/config/show.js +7 -5
  89. package/dist/commands/diff.js +9 -7
  90. package/dist/commands/diff.js.map +1 -1
  91. package/dist/commands/doctor.js +20 -16
  92. package/dist/commands/doctor.js.map +1 -1
  93. package/dist/commands/edit.js +196 -94
  94. package/dist/commands/edit.js.map +1 -1
  95. package/dist/commands/eject.js +20 -41
  96. package/dist/commands/eject.js.map +1 -1
  97. package/dist/commands/import/skill.js +10 -18
  98. package/dist/commands/import/skill.js.map +1 -1
  99. package/dist/commands/info.js +21 -20
  100. package/dist/commands/info.js.map +1 -1
  101. package/dist/commands/init.js +41 -435
  102. package/dist/commands/init.js.map +1 -1
  103. package/dist/commands/list.js +8 -6
  104. package/dist/commands/list.js.map +1 -1
  105. package/dist/commands/new/agent.js +28 -15
  106. package/dist/commands/new/agent.js.map +1 -1
  107. package/dist/commands/new/marketplace.js +67 -31
  108. package/dist/commands/new/marketplace.js.map +1 -1
  109. package/dist/commands/new/skill.js +17 -208
  110. package/dist/commands/new/skill.js.map +1 -1
  111. package/dist/commands/outdated.js +16 -10
  112. package/dist/commands/outdated.js.map +1 -1
  113. package/dist/commands/search.js +45 -35
  114. package/dist/commands/search.js.map +1 -1
  115. package/dist/commands/uninstall.js +93 -123
  116. package/dist/commands/uninstall.js.map +1 -1
  117. package/dist/commands/update.js +11 -9
  118. package/dist/commands/update.js.map +1 -1
  119. package/dist/commands/validate.js +42 -267
  120. package/dist/commands/validate.js.map +1 -1
  121. package/dist/components/common/confirm.test.js +4 -4
  122. package/dist/components/skill-search/skill-search.js +3 -3
  123. package/dist/components/wizard/category-grid.js +3 -2
  124. package/dist/components/wizard/category-grid.test.js +113 -59
  125. package/dist/components/wizard/category-grid.test.js.map +1 -1
  126. package/dist/components/wizard/checkbox-grid.js +5 -3
  127. package/dist/components/wizard/checkbox-grid.test.js +6 -5
  128. package/dist/components/wizard/checkbox-grid.test.js.map +1 -1
  129. package/dist/components/wizard/domain-selection.js +12 -9
  130. package/dist/components/wizard/help-modal.js +2 -2
  131. package/dist/components/wizard/menu-item.js +1 -1
  132. package/dist/components/wizard/search-modal.js +2 -2
  133. package/dist/components/wizard/search-modal.test.js +3 -3
  134. package/dist/components/wizard/search-modal.test.js.map +1 -1
  135. package/dist/components/wizard/section-progress.js +2 -2
  136. package/dist/components/wizard/section-progress.test.js +4 -4
  137. package/dist/components/wizard/section-progress.test.js.map +1 -1
  138. package/dist/components/wizard/selection-card.js +2 -2
  139. package/dist/components/wizard/source-grid.js +4 -3
  140. package/dist/components/wizard/source-grid.test.js +5 -4
  141. package/dist/components/wizard/source-grid.test.js.map +1 -1
  142. package/dist/components/wizard/stack-selection.js +9 -8
  143. package/dist/components/wizard/step-agents.js +11 -8
  144. package/dist/components/wizard/step-agents.test.js +20 -18
  145. package/dist/components/wizard/step-agents.test.js.map +1 -1
  146. package/dist/components/wizard/step-build.js +11 -8
  147. package/dist/components/wizard/step-build.test.js +18 -36
  148. package/dist/components/wizard/step-build.test.js.map +1 -1
  149. package/dist/components/wizard/step-confirm.js +4 -4
  150. package/dist/components/wizard/step-confirm.test.js +83 -23
  151. package/dist/components/wizard/step-confirm.test.js.map +1 -1
  152. package/dist/components/wizard/step-refine.js +2 -2
  153. package/dist/components/wizard/step-refine.test.js +3 -3
  154. package/dist/components/wizard/step-settings.js +9 -5
  155. package/dist/components/wizard/step-settings.test.js +13 -9
  156. package/dist/components/wizard/step-settings.test.js.map +1 -1
  157. package/dist/components/wizard/step-sources.js +13 -10
  158. package/dist/components/wizard/step-sources.test.js +19 -16
  159. package/dist/components/wizard/step-sources.test.js.map +1 -1
  160. package/dist/components/wizard/step-stack.js +16 -12
  161. package/dist/components/wizard/step-stack.test.js +18 -14
  162. package/dist/components/wizard/step-stack.test.js.map +1 -1
  163. package/dist/components/wizard/view-title.js +2 -2
  164. package/dist/components/wizard/wizard-layout.js +10 -8
  165. package/dist/components/wizard/wizard-tabs.js +2 -2
  166. package/dist/components/wizard/wizard-tabs.test.js +2 -2
  167. package/dist/components/wizard/wizard.js +29 -25
  168. package/dist/config-exports.js +20 -0
  169. package/dist/config-exports.js.map +1 -0
  170. package/dist/hooks/init.js +56 -3
  171. package/dist/hooks/init.js.map +1 -1
  172. package/dist/loader-2O32KKAQ.js +19 -0
  173. package/dist/source-loader-A6B3NDI4.js +16 -0
  174. package/dist/source-loader-A6B3NDI4.js.map +1 -0
  175. package/dist/source-manager-Q7IQSGIX.js +18 -0
  176. package/dist/source-manager-Q7IQSGIX.js.map +1 -0
  177. package/dist/src/agents/meta/agent-summoner/critical-reminders.md +1 -1
  178. package/dist/src/agents/meta/agent-summoner/critical-requirements.md +1 -1
  179. package/dist/src/agents/meta/agent-summoner/examples.md +2 -2
  180. package/dist/src/agents/meta/agent-summoner/output-format.md +1 -1
  181. package/dist/src/agents/meta/agent-summoner/workflow.md +8 -10
  182. package/{src/agents/meta/documentor/agent.yaml → dist/src/agents/meta/documentor/metadata.yaml} +1 -0
  183. package/dist/src/agents/meta/skill-summoner/critical-reminders.md +2 -2
  184. package/dist/src/agents/meta/skill-summoner/critical-requirements.md +1 -1
  185. package/dist/src/agents/meta/skill-summoner/intro.md +1 -1
  186. package/dist/src/agents/meta/skill-summoner/output-format.md +3 -3
  187. package/dist/src/agents/meta/skill-summoner/workflow.md +8 -8
  188. package/dist/stores/wizard-store.js +6 -5
  189. package/dist/stores/wizard-store.test.js +367 -75
  190. package/dist/stores/wizard-store.test.js.map +1 -1
  191. package/package.json +5 -1
  192. package/src/agents/meta/agent-summoner/critical-reminders.md +1 -1
  193. package/src/agents/meta/agent-summoner/critical-requirements.md +1 -1
  194. package/src/agents/meta/agent-summoner/examples.md +2 -2
  195. package/src/agents/meta/agent-summoner/output-format.md +1 -1
  196. package/src/agents/meta/agent-summoner/workflow.md +8 -10
  197. package/{dist/src/agents/meta/documentor/agent.yaml → src/agents/meta/documentor/metadata.yaml} +1 -0
  198. package/src/agents/meta/skill-summoner/critical-reminders.md +2 -2
  199. package/src/agents/meta/skill-summoner/critical-requirements.md +1 -1
  200. package/src/agents/meta/skill-summoner/intro.md +1 -1
  201. package/src/agents/meta/skill-summoner/output-format.md +3 -3
  202. package/src/agents/meta/skill-summoner/workflow.md +8 -8
  203. package/src/schemas/agent.schema.json +1 -1
  204. package/src/schemas/metadata.schema.json +6 -0
  205. package/src/schemas/project-config.schema.json +0 -3
  206. package/src/schemas/stacks.schema.json +1 -1
  207. package/config/skill-categories.yaml +0 -344
  208. package/config/skill-rules.yaml +0 -740
  209. package/config/stacks.yaml +0 -1865
  210. package/dist/chunk-2BVZOYJP.js.map +0 -1
  211. package/dist/chunk-2DNDAXF6.js.map +0 -1
  212. package/dist/chunk-5MN5S3DV.js.map +0 -1
  213. package/dist/chunk-5O6GKXAN.js.map +0 -1
  214. package/dist/chunk-7IAKVZL5.js.map +0 -1
  215. package/dist/chunk-AMNCCZSG.js.map +0 -1
  216. package/dist/chunk-AXV7NFFJ.js.map +0 -1
  217. package/dist/chunk-AXZNJ5PN.js +0 -99
  218. package/dist/chunk-AXZNJ5PN.js.map +0 -1
  219. package/dist/chunk-C7DLY64D.js +0 -115
  220. package/dist/chunk-C7DLY64D.js.map +0 -1
  221. package/dist/chunk-F7KTUFGU.js.map +0 -1
  222. package/dist/chunk-FPTUCWBY.js.map +0 -1
  223. package/dist/chunk-IS7GP6XC.js.map +0 -1
  224. package/dist/chunk-KPJJOLAQ.js.map +0 -1
  225. package/dist/chunk-LESHL6SM.js.map +0 -1
  226. package/dist/chunk-NJVJ7VO5.js.map +0 -1
  227. package/dist/chunk-OHDEJEYB.js.map +0 -1
  228. package/dist/chunk-OTTITQ7C.js.map +0 -1
  229. package/dist/chunk-P2SFRDWI.js.map +0 -1
  230. package/dist/chunk-PY2XZUBF.js +0 -29
  231. package/dist/chunk-PY2XZUBF.js.map +0 -1
  232. package/dist/chunk-SPVSWDFM.js.map +0 -1
  233. package/dist/chunk-VBAAATPU.js.map +0 -1
  234. package/dist/chunk-WSGKCBY5.js.map +0 -1
  235. package/dist/chunk-X3SZIBVW.js.map +0 -1
  236. package/dist/chunk-YDASDMTH.js +0 -183
  237. package/dist/chunk-YDASDMTH.js.map +0 -1
  238. package/dist/chunk-YMUWTPOM.js.map +0 -1
  239. package/dist/chunk-YZTWZVGX.js.map +0 -1
  240. package/dist/commands/config/get.js +0 -61
  241. package/dist/commands/config/get.js.map +0 -1
  242. package/dist/commands/config/set-project.js +0 -61
  243. package/dist/commands/config/set-project.js.map +0 -1
  244. package/dist/commands/config/unset-project.js +0 -57
  245. package/dist/commands/config/unset-project.js.map +0 -1
  246. package/dist/config/skill-categories.yaml +0 -344
  247. package/dist/config/skill-rules.yaml +0 -740
  248. package/dist/config/stacks.yaml +0 -1865
  249. package/dist/source-manager-Y7R6WPOW.js +0 -16
  250. package/dist/src/agents/migration/cli-migrator/agent.yaml +0 -12
  251. package/dist/src/agents/migration/cli-migrator/anti-patterns.md +0 -158
  252. package/dist/src/agents/migration/cli-migrator/conversion-mappings.md +0 -63
  253. package/dist/src/agents/migration/cli-migrator/critical-reminders.md +0 -17
  254. package/dist/src/agents/migration/cli-migrator/critical-requirements.md +0 -13
  255. package/dist/src/agents/migration/cli-migrator/intro.md +0 -15
  256. package/dist/src/agents/migration/cli-migrator/output-format.md +0 -164
  257. package/dist/src/agents/migration/cli-migrator/workflow.md +0 -230
  258. package/src/agents/migration/cli-migrator/agent.yaml +0 -12
  259. package/src/agents/migration/cli-migrator/anti-patterns.md +0 -158
  260. package/src/agents/migration/cli-migrator/conversion-mappings.md +0 -63
  261. package/src/agents/migration/cli-migrator/critical-reminders.md +0 -17
  262. package/src/agents/migration/cli-migrator/critical-requirements.md +0 -13
  263. package/src/agents/migration/cli-migrator/intro.md +0 -15
  264. package/src/agents/migration/cli-migrator/output-format.md +0 -164
  265. package/src/agents/migration/cli-migrator/workflow.md +0 -230
  266. /package/dist/{chunk-I52THVF6.js.map → chunk-AJJJE7F7.js.map} +0 -0
  267. /package/dist/{chunk-ZML3OCYA.js.map → chunk-AX3SZZWA.js.map} +0 -0
  268. /package/dist/{chunk-W62XVWXB.js.map → chunk-C577AJE7.js.map} +0 -0
  269. /package/dist/{chunk-G5OZQ376.js.map → chunk-K6OLORQL.js.map} +0 -0
  270. /package/dist/{chunk-U2AEK4ZL.js.map → chunk-MGNYPVOJ.js.map} +0 -0
  271. /package/dist/{chunk-37QYD33C.js.map → chunk-MMFQNJPE.js.map} +0 -0
  272. /package/dist/{chunk-34BP5BC4.js.map → chunk-SDKCQXWE.js.map} +0 -0
  273. /package/dist/{chunk-FHKNG3UA.js.map → chunk-XUDTFI4M.js.map} +0 -0
  274. /package/dist/{source-manager-Y7R6WPOW.js.map → loader-2O32KKAQ.js.map} +0 -0
  275. /package/dist/src/agents/developer/api-developer/{agent.yaml → metadata.yaml} +0 -0
  276. /package/dist/src/agents/developer/cli-developer/{agent.yaml → metadata.yaml} +0 -0
  277. /package/dist/src/agents/developer/web-architecture/{agent.yaml → metadata.yaml} +0 -0
  278. /package/dist/src/agents/developer/web-developer/{agent.yaml → metadata.yaml} +0 -0
  279. /package/dist/src/agents/meta/agent-summoner/{agent.yaml → metadata.yaml} +0 -0
  280. /package/dist/src/agents/meta/skill-summoner/{agent.yaml → metadata.yaml} +0 -0
  281. /package/dist/src/agents/pattern/pattern-scout/{agent.yaml → metadata.yaml} +0 -0
  282. /package/dist/src/agents/pattern/web-pattern-critique/{agent.yaml → metadata.yaml} +0 -0
  283. /package/dist/src/agents/planning/web-pm/{agent.yaml → metadata.yaml} +0 -0
  284. /package/dist/src/agents/researcher/api-researcher/{agent.yaml → metadata.yaml} +0 -0
  285. /package/dist/src/agents/researcher/web-researcher/{agent.yaml → metadata.yaml} +0 -0
  286. /package/dist/src/agents/reviewer/api-reviewer/{agent.yaml → metadata.yaml} +0 -0
  287. /package/dist/src/agents/reviewer/cli-reviewer/{agent.yaml → metadata.yaml} +0 -0
  288. /package/dist/src/agents/reviewer/web-reviewer/{agent.yaml → metadata.yaml} +0 -0
  289. /package/dist/src/agents/tester/cli-tester/{agent.yaml → metadata.yaml} +0 -0
  290. /package/dist/src/agents/tester/web-tester/{agent.yaml → metadata.yaml} +0 -0
  291. /package/src/agents/developer/api-developer/{agent.yaml → metadata.yaml} +0 -0
  292. /package/src/agents/developer/cli-developer/{agent.yaml → metadata.yaml} +0 -0
  293. /package/src/agents/developer/web-architecture/{agent.yaml → metadata.yaml} +0 -0
  294. /package/src/agents/developer/web-developer/{agent.yaml → metadata.yaml} +0 -0
  295. /package/src/agents/meta/agent-summoner/{agent.yaml → metadata.yaml} +0 -0
  296. /package/src/agents/meta/skill-summoner/{agent.yaml → metadata.yaml} +0 -0
  297. /package/src/agents/pattern/pattern-scout/{agent.yaml → metadata.yaml} +0 -0
  298. /package/src/agents/pattern/web-pattern-critique/{agent.yaml → metadata.yaml} +0 -0
  299. /package/src/agents/planning/web-pm/{agent.yaml → metadata.yaml} +0 -0
  300. /package/src/agents/researcher/api-researcher/{agent.yaml → metadata.yaml} +0 -0
  301. /package/src/agents/researcher/web-researcher/{agent.yaml → metadata.yaml} +0 -0
  302. /package/src/agents/reviewer/api-reviewer/{agent.yaml → metadata.yaml} +0 -0
  303. /package/src/agents/reviewer/cli-reviewer/{agent.yaml → metadata.yaml} +0 -0
  304. /package/src/agents/reviewer/web-reviewer/{agent.yaml → metadata.yaml} +0 -0
  305. /package/src/agents/tester/cli-tester/{agent.yaml → metadata.yaml} +0 -0
  306. /package/src/agents/tester/web-tester/{agent.yaml → metadata.yaml} +0 -0
@@ -1,8 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
+ TEST_CATEGORIES,
4
+ TEST_SKILLS,
3
5
  createMockMatrix,
4
6
  getTestSkill
5
- } from "../chunk-X3SZIBVW.js";
7
+ } from "../chunk-7FMEMXJ4.js";
6
8
  import {
7
9
  beforeEach,
8
10
  describe,
@@ -11,16 +13,17 @@ import {
11
13
  } from "../chunk-XY3XDVMI.js";
12
14
  import {
13
15
  useWizardStore
14
- } from "../chunk-KPJJOLAQ.js";
15
- import "../chunk-C7DLY64D.js";
16
- import "../chunk-P2SFRDWI.js";
16
+ } from "../chunk-WF6RM73R.js";
17
+ import "../chunk-TZXYBG3R.js";
18
+ import "../chunk-OCEFD7V6.js";
17
19
  import {
18
20
  typedKeys
19
21
  } from "../chunk-T4EXUIBY.js";
20
- import "../chunk-YMUWTPOM.js";
22
+ import "../chunk-LWXRUR6B.js";
21
23
  import {
22
24
  DEFAULT_PRESELECTED_SKILLS
23
- } from "../chunk-LESHL6SM.js";
25
+ } from "../chunk-6OWHQ7HM.js";
26
+ import "../chunk-EC3UJRKZ.js";
24
27
  import {
25
28
  init_esm_shims
26
29
  } from "../chunk-DHET7RCE.js";
@@ -47,13 +50,13 @@ describe("WizardStore", () => {
47
50
  const { selectedStackId } = useWizardStore.getState();
48
51
  globalExpect(selectedStackId).toBeNull();
49
52
  });
50
- it("should have expert mode off", () => {
51
- const { expertMode } = useWizardStore.getState();
52
- globalExpect(expertMode).toBe(false);
53
+ it("should have empty skillConfigs", () => {
54
+ const { skillConfigs } = useWizardStore.getState();
55
+ globalExpect(skillConfigs).toEqual([]);
53
56
  });
54
- it("should default to local install mode", () => {
55
- const { installMode } = useWizardStore.getState();
56
- globalExpect(installMode).toBe("local");
57
+ it("should have null focusedSkillId", () => {
58
+ const { focusedSkillId } = useWizardStore.getState();
59
+ globalExpect(focusedSkillId).toBeNull();
57
60
  });
58
61
  it("should have empty navigation history", () => {
59
62
  const { history } = useWizardStore.getState();
@@ -193,6 +196,78 @@ describe("WizardStore", () => {
193
196
  globalExpect(store.getTechnologyCount()).toBe(1);
194
197
  globalExpect(store.getAllSelectedTechnologies()).toEqual(["api-framework-hono"]);
195
198
  });
199
+ it("should restore stack skills when re-toggling a domain ON after populateFromStack", () => {
200
+ const store = useWizardStore.getState();
201
+ const stack = {
202
+ agents: {
203
+ web: {
204
+ "web-framework": [sa("web-framework-react", true)],
205
+ "web-client-state": [sa("web-state-zustand")]
206
+ },
207
+ api: { "api-api": [sa("api-framework-hono", true)] }
208
+ }
209
+ };
210
+ const categories = {
211
+ "web-framework": { domain: "web" },
212
+ "web-client-state": { domain: "web" },
213
+ "api-api": { domain: "api" }
214
+ };
215
+ store.populateFromStack(stack, categories);
216
+ store.toggleDomain("web");
217
+ globalExpect(useWizardStore.getState().domainSelections.web).toBeUndefined();
218
+ store.toggleDomain("web");
219
+ const { domainSelections } = useWizardStore.getState();
220
+ globalExpect(domainSelections.web["web-framework"]).toEqual(["web-framework-react"]);
221
+ globalExpect(domainSelections.web["web-client-state"]).toEqual(["web-state-zustand"]);
222
+ });
223
+ it("should restore stack skills when re-toggling a domain ON after populateFromSkillIds", () => {
224
+ const store = useWizardStore.getState();
225
+ const skills = {
226
+ "web-framework-react": TEST_SKILLS.react,
227
+ "api-framework-hono": TEST_SKILLS.hono
228
+ };
229
+ const categories = {
230
+ "web-framework": TEST_CATEGORIES.framework,
231
+ "api-api": TEST_CATEGORIES.api
232
+ };
233
+ store.populateFromSkillIds(["web-framework-react", "api-framework-hono"], skills, categories);
234
+ store.toggleDomain("web");
235
+ globalExpect(useWizardStore.getState().domainSelections.web).toBeUndefined();
236
+ store.toggleDomain("web");
237
+ const { domainSelections } = useWizardStore.getState();
238
+ globalExpect(domainSelections.web["web-framework"]).toEqual(["web-framework-react"]);
239
+ });
240
+ it("should not restore skills when no stack was populated", () => {
241
+ const store = useWizardStore.getState();
242
+ store.toggleDomain("web");
243
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
244
+ store.toggleDomain("web");
245
+ store.toggleDomain("web");
246
+ const { domainSelections } = useWizardStore.getState();
247
+ globalExpect(domainSelections.web).toBeUndefined();
248
+ globalExpect(store.getAllSelectedTechnologies()).toEqual([]);
249
+ });
250
+ it("should not affect other domains when restoring stack skills for one domain", () => {
251
+ const store = useWizardStore.getState();
252
+ const stack = {
253
+ agents: {
254
+ web: { "web-framework": [sa("web-framework-react", true)] },
255
+ api: { "api-api": [sa("api-framework-hono", true)] }
256
+ }
257
+ };
258
+ const categories = {
259
+ "web-framework": { domain: "web" },
260
+ "api-api": { domain: "api" }
261
+ };
262
+ store.populateFromStack(stack, categories);
263
+ store.toggleTechnology("api", "api-api", "api-framework-hono", true);
264
+ store.toggleTechnology("api", "api-api", "api-framework-express", true);
265
+ store.toggleDomain("web");
266
+ store.toggleDomain("web");
267
+ const { domainSelections } = useWizardStore.getState();
268
+ globalExpect(domainSelections.web["web-framework"]).toEqual(["web-framework-react"]);
269
+ globalExpect(domainSelections.api["api-api"]).toEqual(["api-framework-express"]);
270
+ });
196
271
  });
197
272
  describe("technology selection", () => {
198
273
  it("should toggle technology in exclusive mode", () => {
@@ -281,32 +356,6 @@ describe("WizardStore", () => {
281
356
  });
282
357
  });
283
358
  describe("mode toggles", () => {
284
- it("should toggle expert mode on", () => {
285
- const store = useWizardStore.getState();
286
- store.toggleExpertMode();
287
- const { expertMode } = useWizardStore.getState();
288
- globalExpect(expertMode).toBe(true);
289
- });
290
- it("should toggle expert mode off", () => {
291
- const store = useWizardStore.getState();
292
- store.toggleExpertMode();
293
- store.toggleExpertMode();
294
- const { expertMode } = useWizardStore.getState();
295
- globalExpect(expertMode).toBe(false);
296
- });
297
- it("should toggle install mode to plugin", () => {
298
- const store = useWizardStore.getState();
299
- store.toggleInstallMode();
300
- const { installMode } = useWizardStore.getState();
301
- globalExpect(installMode).toBe("plugin");
302
- });
303
- it("should toggle install mode back to local", () => {
304
- const store = useWizardStore.getState();
305
- store.toggleInstallMode();
306
- store.toggleInstallMode();
307
- const { installMode } = useWizardStore.getState();
308
- globalExpect(installMode).toBe("local");
309
- });
310
359
  it("should toggle show labels", () => {
311
360
  const store = useWizardStore.getState();
312
361
  store.toggleShowLabels();
@@ -362,28 +411,175 @@ describe("WizardStore", () => {
362
411
  globalExpect(showSettings).toBe(false);
363
412
  });
364
413
  });
365
- describe("install mode auto-defaulting", () => {
366
- it("should default installMode to plugin when set via setState (marketplace available)", () => {
367
- useWizardStore.setState({ installMode: "plugin" });
368
- const { installMode } = useWizardStore.getState();
369
- globalExpect(installMode).toBe("plugin");
370
- });
371
- it("should keep installMode as local when set via setState (no marketplace)", () => {
372
- useWizardStore.setState({ installMode: "local" });
373
- const { installMode } = useWizardStore.getState();
374
- globalExpect(installMode).toBe("local");
375
- });
376
- it("should allow toggling installMode after auto-defaulting to plugin", () => {
377
- useWizardStore.setState({ installMode: "plugin" });
378
- useWizardStore.getState().toggleInstallMode();
379
- const { installMode } = useWizardStore.getState();
380
- globalExpect(installMode).toBe("local");
381
- });
382
- it("should reset installMode to local after reset even if previously set to plugin", () => {
383
- useWizardStore.setState({ installMode: "plugin" });
384
- useWizardStore.getState().reset();
385
- const { installMode } = useWizardStore.getState();
386
- globalExpect(installMode).toBe("local");
414
+ describe("skillConfigs and per-skill scope", () => {
415
+ it("should sync skillConfigs when toggling a technology on", () => {
416
+ const store = useWizardStore.getState();
417
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
418
+ const { skillConfigs } = useWizardStore.getState();
419
+ globalExpect(skillConfigs).toHaveLength(1);
420
+ globalExpect(skillConfigs[0]).toEqual({
421
+ id: "web-framework-react",
422
+ scope: "project",
423
+ source: "agents-inc"
424
+ });
425
+ });
426
+ it("should remove from skillConfigs when toggling a technology off", () => {
427
+ const store = useWizardStore.getState();
428
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
429
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
430
+ const { skillConfigs } = useWizardStore.getState();
431
+ globalExpect(skillConfigs).toHaveLength(0);
432
+ });
433
+ it("should replace skillConfigs entry in exclusive mode", () => {
434
+ const store = useWizardStore.getState();
435
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
436
+ store.toggleTechnology("web", "web-framework", "web-framework-vue", true);
437
+ const { skillConfigs } = useWizardStore.getState();
438
+ globalExpect(skillConfigs).toHaveLength(1);
439
+ globalExpect(skillConfigs[0].id).toBe("web-framework-vue");
440
+ });
441
+ it("should accumulate skillConfigs in non-exclusive mode", () => {
442
+ const store = useWizardStore.getState();
443
+ store.toggleTechnology("web", "web-testing", "web-testing-vitest", false);
444
+ store.toggleTechnology("web", "web-testing", "web-testing-playwright-e2e", false);
445
+ const { skillConfigs } = useWizardStore.getState();
446
+ globalExpect(skillConfigs).toHaveLength(2);
447
+ globalExpect(skillConfigs.map((sc) => sc.id)).toEqual([
448
+ "web-testing-vitest",
449
+ "web-testing-playwright-e2e"
450
+ ]);
451
+ });
452
+ it("should toggle skill scope between project and global", () => {
453
+ const store = useWizardStore.getState();
454
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
455
+ store.toggleSkillScope("web-framework-react");
456
+ const { skillConfigs } = useWizardStore.getState();
457
+ globalExpect(skillConfigs[0].scope).toBe("global");
458
+ });
459
+ it("should toggle skill scope back to project", () => {
460
+ const store = useWizardStore.getState();
461
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
462
+ store.toggleSkillScope("web-framework-react");
463
+ store.toggleSkillScope("web-framework-react");
464
+ const { skillConfigs } = useWizardStore.getState();
465
+ globalExpect(skillConfigs[0].scope).toBe("project");
466
+ });
467
+ it("should update source via setSkillSource", () => {
468
+ const store = useWizardStore.getState();
469
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
470
+ store.setSkillSource("web-framework-react", "local");
471
+ const { skillConfigs } = useWizardStore.getState();
472
+ globalExpect(skillConfigs[0].source).toBe("local");
473
+ });
474
+ it("should set and clear focusedSkillId", () => {
475
+ const store = useWizardStore.getState();
476
+ store.setFocusedSkillId("web-framework-react");
477
+ globalExpect(useWizardStore.getState().focusedSkillId).toBe("web-framework-react");
478
+ store.setFocusedSkillId(null);
479
+ globalExpect(useWizardStore.getState().focusedSkillId).toBeNull();
480
+ });
481
+ it("should update source via setSourceSelection on skillConfigs", () => {
482
+ const store = useWizardStore.getState();
483
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
484
+ store.setSourceSelection("web-framework-react", "local");
485
+ const { skillConfigs } = useWizardStore.getState();
486
+ globalExpect(skillConfigs[0].source).toBe("local");
487
+ });
488
+ it("should populate skillConfigs from populateFromStack", () => {
489
+ const store = useWizardStore.getState();
490
+ const stack = {
491
+ agents: {
492
+ web: {
493
+ "web-framework": [sa("web-framework-react", true)],
494
+ "web-client-state": [sa("web-state-zustand")]
495
+ }
496
+ }
497
+ };
498
+ const categories = {
499
+ "web-framework": { domain: "web" },
500
+ "web-client-state": { domain: "web" }
501
+ };
502
+ store.populateFromStack(stack, categories);
503
+ const { skillConfigs } = useWizardStore.getState();
504
+ globalExpect(skillConfigs).toHaveLength(2);
505
+ globalExpect(skillConfigs.map((sc) => sc.id)).toEqual(["web-framework-react", "web-state-zustand"]);
506
+ globalExpect(skillConfigs.every((sc) => sc.scope === "project")).toBe(true);
507
+ globalExpect(skillConfigs.every((sc) => sc.source === "agents-inc")).toBe(true);
508
+ });
509
+ it("should populate skillConfigs from populateFromSkillIds", () => {
510
+ const store = useWizardStore.getState();
511
+ const skills = {
512
+ "web-framework-react": TEST_SKILLS.react,
513
+ "api-framework-hono": TEST_SKILLS.hono
514
+ };
515
+ const categories = {
516
+ "web-framework": TEST_CATEGORIES.framework,
517
+ "api-api": TEST_CATEGORIES.api
518
+ };
519
+ store.populateFromSkillIds(["web-framework-react", "api-framework-hono"], skills, categories);
520
+ const { skillConfigs } = useWizardStore.getState();
521
+ globalExpect(skillConfigs).toHaveLength(2);
522
+ globalExpect(skillConfigs.map((sc) => sc.id)).toEqual([
523
+ "web-framework-react",
524
+ "api-framework-hono"
525
+ ]);
526
+ });
527
+ it("should remove skillConfigs when domain is deselected", () => {
528
+ const store = useWizardStore.getState();
529
+ store.toggleDomain("web");
530
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
531
+ globalExpect(useWizardStore.getState().skillConfigs).toHaveLength(1);
532
+ store.toggleDomain("web");
533
+ globalExpect(useWizardStore.getState().skillConfigs).toHaveLength(0);
534
+ });
535
+ it("should restore skillConfigs when domain is re-toggled after populateFromStack", () => {
536
+ const store = useWizardStore.getState();
537
+ const stack = {
538
+ agents: {
539
+ web: { "web-framework": [sa("web-framework-react", true)] }
540
+ }
541
+ };
542
+ const categories = {
543
+ "web-framework": { domain: "web" }
544
+ };
545
+ store.populateFromStack(stack, categories);
546
+ globalExpect(useWizardStore.getState().skillConfigs).toHaveLength(1);
547
+ store.toggleDomain("web");
548
+ globalExpect(useWizardStore.getState().skillConfigs).toHaveLength(0);
549
+ store.toggleDomain("web");
550
+ globalExpect(useWizardStore.getState().skillConfigs).toHaveLength(1);
551
+ globalExpect(useWizardStore.getState().skillConfigs[0].id).toBe("web-framework-react");
552
+ });
553
+ it("should reset skillConfigs and focusedSkillId on reset", () => {
554
+ const store = useWizardStore.getState();
555
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
556
+ store.setFocusedSkillId("web-framework-react");
557
+ store.reset();
558
+ const state = useWizardStore.getState();
559
+ globalExpect(state.skillConfigs).toEqual([]);
560
+ globalExpect(state.focusedSkillId).toBeNull();
561
+ });
562
+ it("should set all sources to local via setAllSourcesLocal", () => {
563
+ const store = useWizardStore.getState();
564
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
565
+ store.toggleTechnology("api", "api-api", "api-framework-hono", true);
566
+ store.setAllSourcesLocal();
567
+ const { skillConfigs } = useWizardStore.getState();
568
+ globalExpect(skillConfigs.every((sc) => sc.source === "local")).toBe(true);
569
+ });
570
+ it("should set all sources to plugin via setAllSourcesPlugin", () => {
571
+ const store = useWizardStore.getState();
572
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
573
+ store.setSourceSelection("web-framework-react", "local");
574
+ const matrix = createMockMatrix({
575
+ "web-framework-react": {
576
+ ...getTestSkill("react"),
577
+ availableSources: [{ name: "Acme Corp", type: "private", installed: false }]
578
+ }
579
+ });
580
+ store.setAllSourcesPlugin(matrix);
581
+ const { skillConfigs } = useWizardStore.getState();
582
+ globalExpect(skillConfigs[0].source).toBe("Acme Corp");
387
583
  });
388
584
  });
389
585
  describe("computed getters", () => {
@@ -419,7 +615,7 @@ describe("WizardStore", () => {
419
615
  const perDomain = store.getSelectedTechnologiesPerDomain();
420
616
  globalExpect(perDomain).toEqual({});
421
617
  });
422
- it("should omit domains with empty subcategory arrays from getSelectedTechnologiesPerDomain", () => {
618
+ it("should omit domains with empty category arrays from getSelectedTechnologiesPerDomain", () => {
423
619
  const store = useWizardStore.getState();
424
620
  store.toggleTechnology("web", "web-framework", "web-framework-react", true);
425
621
  store.toggleTechnology("web", "web-framework", "web-framework-react", true);
@@ -479,15 +675,12 @@ describe("WizardStore", () => {
479
675
  store.setApproach("scratch");
480
676
  store.selectStack("nextjs-fullstack");
481
677
  store.toggleDomain("web");
482
- store.toggleExpertMode();
483
678
  store.reset();
484
679
  const state = useWizardStore.getState();
485
680
  globalExpect(state.step).toBe("stack");
486
681
  globalExpect(state.approach).toBeNull();
487
682
  globalExpect(state.selectedStackId).toBeNull();
488
683
  globalExpect(state.selectedDomains).toEqual([]);
489
- globalExpect(state.expertMode).toBe(false);
490
- globalExpect(state.installMode).toBe("local");
491
684
  globalExpect(state.history).toEqual([]);
492
685
  });
493
686
  });
@@ -504,7 +697,7 @@ describe("WizardStore", () => {
504
697
  };
505
698
  store.populateFromStack(stack, categories);
506
699
  const { selectedDomains, domainSelections } = useWizardStore.getState();
507
- globalExpect(selectedDomains).toEqual(["web", "api", "cli", "mobile", "shared"]);
700
+ globalExpect(selectedDomains).toEqual(["web", "api", "mobile", "cli", "shared"]);
508
701
  globalExpect(domainSelections.web).toBeDefined();
509
702
  globalExpect(domainSelections.web["web-framework"]).toEqual(["web-framework-react"]);
510
703
  globalExpect(domainSelections.api).toBeUndefined();
@@ -545,7 +738,7 @@ describe("WizardStore", () => {
545
738
  const { domainSelections } = useWizardStore.getState();
546
739
  globalExpect(typedKeys(domainSelections)).toHaveLength(0);
547
740
  });
548
- it("should populate multiple skills from array-valued subcategories", () => {
741
+ it("should populate multiple skills from array-valued categories", () => {
549
742
  const store = useWizardStore.getState();
550
743
  const stack = {
551
744
  agents: {
@@ -701,7 +894,7 @@ describe("WizardStore", () => {
701
894
  const skill = {
702
895
  ...getTestSkill("react"),
703
896
  availableSources: [
704
- makeSource({ name: "Agents Inc", type: "public" }),
897
+ makeSource({ name: "agents-inc", type: "public" }),
705
898
  makeSource({ name: "Acme Corp", type: "private", primary: true })
706
899
  ]
707
900
  };
@@ -709,8 +902,9 @@ describe("WizardStore", () => {
709
902
  store.toggleTechnology("web", "web-framework", "web-framework-react", true);
710
903
  const rows = store.buildSourceRows(matrix);
711
904
  globalExpect(rows).toHaveLength(1);
712
- globalExpect(rows[0].options[0].id).toBe("Acme Corp");
713
- globalExpect(rows[0].options[1].id).toBe("Agents Inc");
905
+ globalExpect(rows[0].options[0].id).toBe("local");
906
+ globalExpect(rows[0].options[1].id).toBe("Acme Corp");
907
+ globalExpect(rows[0].options[2].id).toBe("agents-inc");
714
908
  });
715
909
  it("should sort default public marketplace before third-party sources", () => {
716
910
  const store = useWizardStore.getState();
@@ -718,15 +912,16 @@ describe("WizardStore", () => {
718
912
  ...getTestSkill("react"),
719
913
  availableSources: [
720
914
  makeSource({ name: "Extra Corp", type: "private" }),
721
- makeSource({ name: "Agents Inc", type: "public" })
915
+ makeSource({ name: "agents-inc", type: "public" })
722
916
  ]
723
917
  };
724
918
  const matrix = createMockMatrix({ "web-framework-react": skill });
725
919
  store.toggleTechnology("web", "web-framework", "web-framework-react", true);
726
920
  const rows = store.buildSourceRows(matrix);
727
921
  globalExpect(rows).toHaveLength(1);
728
- globalExpect(rows[0].options[0].id).toBe("Agents Inc");
729
- globalExpect(rows[0].options[1].id).toBe("Extra Corp");
922
+ globalExpect(rows[0].options[0].id).toBe("local");
923
+ globalExpect(rows[0].options[1].id).toBe("agents-inc");
924
+ globalExpect(rows[0].options[2].id).toBe("Extra Corp");
730
925
  });
731
926
  it("should sort all four tiers in correct order", () => {
732
927
  const store = useWizardStore.getState();
@@ -734,7 +929,7 @@ describe("WizardStore", () => {
734
929
  ...getTestSkill("react"),
735
930
  availableSources: [
736
931
  makeSource({ name: "Extra Corp", type: "private" }),
737
- makeSource({ name: "Agents Inc", type: "public" }),
932
+ makeSource({ name: "agents-inc", type: "public" }),
738
933
  makeSource({ name: "Acme Corp", type: "private", primary: true }),
739
934
  makeSource({ name: "local", type: "local", installed: true, installMode: "local" })
740
935
  ]
@@ -744,7 +939,7 @@ describe("WizardStore", () => {
744
939
  const rows = store.buildSourceRows(matrix);
745
940
  globalExpect(rows).toHaveLength(1);
746
941
  const sourceNames = rows[0].options.map((opt) => opt.id);
747
- globalExpect(sourceNames).toEqual(["local", "Acme Corp", "Agents Inc", "Extra Corp"]);
942
+ globalExpect(sourceNames).toEqual(["local", "Acme Corp", "agents-inc", "Extra Corp"]);
748
943
  });
749
944
  });
750
945
  describe("agent selection", () => {
@@ -781,6 +976,59 @@ describe("WizardStore", () => {
781
976
  globalExpect(selectedAgents).toEqual([]);
782
977
  });
783
978
  });
979
+ describe("agentConfigs and scope management", () => {
980
+ it("should have empty agentConfigs initially", () => {
981
+ const { agentConfigs } = useWizardStore.getState();
982
+ globalExpect(agentConfigs).toEqual([]);
983
+ });
984
+ it("should sync agentConfigs when toggleAgent is called", () => {
985
+ const store = useWizardStore.getState();
986
+ store.toggleAgent("web-developer");
987
+ const { agentConfigs } = useWizardStore.getState();
988
+ globalExpect(agentConfigs).toEqual([{ name: "web-developer", scope: "project" }]);
989
+ });
990
+ it("should remove from agentConfigs when agent is toggled off", () => {
991
+ const store = useWizardStore.getState();
992
+ store.toggleAgent("web-developer");
993
+ store.toggleAgent("web-developer");
994
+ const { agentConfigs } = useWizardStore.getState();
995
+ globalExpect(agentConfigs).toEqual([]);
996
+ });
997
+ it("should toggle agent scope between project and global", () => {
998
+ const store = useWizardStore.getState();
999
+ store.toggleAgent("web-developer");
1000
+ store.toggleAgentScope("web-developer");
1001
+ const { agentConfigs } = useWizardStore.getState();
1002
+ globalExpect(agentConfigs).toEqual([{ name: "web-developer", scope: "global" }]);
1003
+ store.toggleAgentScope("web-developer");
1004
+ globalExpect(useWizardStore.getState().agentConfigs).toEqual([
1005
+ { name: "web-developer", scope: "project" }
1006
+ ]);
1007
+ });
1008
+ it("should set and clear focusedAgentId", () => {
1009
+ const store = useWizardStore.getState();
1010
+ store.setFocusedAgentId("web-developer");
1011
+ globalExpect(useWizardStore.getState().focusedAgentId).toBe("web-developer");
1012
+ store.setFocusedAgentId(null);
1013
+ globalExpect(useWizardStore.getState().focusedAgentId).toBeNull();
1014
+ });
1015
+ it("should not toggle locked agents", () => {
1016
+ useWizardStore.setState({ lockedAgentNames: ["web-developer"] });
1017
+ const store = useWizardStore.getState();
1018
+ store.toggleAgent("web-developer");
1019
+ const { selectedAgents, agentConfigs } = useWizardStore.getState();
1020
+ globalExpect(selectedAgents).toEqual([]);
1021
+ globalExpect(agentConfigs).toEqual([]);
1022
+ });
1023
+ it("should not toggle scope of locked agents", () => {
1024
+ const store = useWizardStore.getState();
1025
+ store.toggleAgent("web-developer");
1026
+ useWizardStore.setState({ lockedAgentNames: ["web-developer"] });
1027
+ store.toggleAgentScope("web-developer");
1028
+ const { agentConfigs } = useWizardStore.getState();
1029
+ globalExpect(agentConfigs).toEqual([{ name: "web-developer", scope: "project" }]);
1030
+ });
1031
+ });
784
1032
  describe("preselectAgentsFromDomains", () => {
785
1033
  it("should preselect web-related agents when web domain is selected", () => {
786
1034
  const store = useWizardStore.getState();
@@ -812,7 +1060,6 @@ describe("WizardStore", () => {
812
1060
  globalExpect(selectedAgents).toContain("cli-developer");
813
1061
  globalExpect(selectedAgents).toContain("cli-tester");
814
1062
  globalExpect(selectedAgents).toContain("cli-reviewer");
815
- globalExpect(selectedAgents).toContain("cli-migrator");
816
1063
  });
817
1064
  it("should never include optional agents regardless of domains", () => {
818
1065
  const store = useWizardStore.getState();
@@ -907,5 +1154,50 @@ describe("WizardStore", () => {
907
1154
  globalExpect(skippedSteps).toContain("sources");
908
1155
  });
909
1156
  });
1157
+ describe("deriveInstallMode", () => {
1158
+ it("should return 'plugin' when all skills have default marketplace source", () => {
1159
+ const store = useWizardStore.getState();
1160
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
1161
+ store.toggleTechnology("web", "web-styling", "web-styling-scss-modules", true);
1162
+ const result = store.deriveInstallMode();
1163
+ globalExpect(result).toBe("plugin");
1164
+ });
1165
+ it("should return 'local' when all skills are set to local", () => {
1166
+ const store = useWizardStore.getState();
1167
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
1168
+ store.toggleTechnology("api", "api-api", "api-framework-hono", true);
1169
+ store.setSourceSelection("web-framework-react", "local");
1170
+ store.setSourceSelection("api-framework-hono", "local");
1171
+ const result = store.deriveInstallMode();
1172
+ globalExpect(result).toBe("local");
1173
+ });
1174
+ it("should return 'mixed' when some skills are local and some are not", () => {
1175
+ const store = useWizardStore.getState();
1176
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
1177
+ store.toggleTechnology("api", "api-api", "api-framework-hono", true);
1178
+ store.setSourceSelection("web-framework-react", "local");
1179
+ store.setSourceSelection("api-framework-hono", "agents-inc");
1180
+ const result = store.deriveInstallMode();
1181
+ globalExpect(result).toBe("mixed");
1182
+ });
1183
+ it("should return 'local' when no skills are configured", () => {
1184
+ const store = useWizardStore.getState();
1185
+ const result = store.deriveInstallMode();
1186
+ globalExpect(result).toBe("local");
1187
+ });
1188
+ it("should handle single skill as local", () => {
1189
+ const store = useWizardStore.getState();
1190
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
1191
+ store.setSourceSelection("web-framework-react", "local");
1192
+ const result = store.deriveInstallMode();
1193
+ globalExpect(result).toBe("local");
1194
+ });
1195
+ it("should handle single skill as plugin", () => {
1196
+ const store = useWizardStore.getState();
1197
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
1198
+ const result = store.deriveInstallMode();
1199
+ globalExpect(result).toBe("plugin");
1200
+ });
1201
+ });
910
1202
  });
911
1203
  //# sourceMappingURL=wizard-store.test.js.map