@agents-inc/cli 0.47.0 → 0.50.0

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 (261) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +113 -118
  3. package/config/skill-categories.yaml +344 -0
  4. package/config/skill-rules.yaml +740 -0
  5. package/config/stacks.yaml +0 -1
  6. package/dist/{chunk-CJFWO46A.js → chunk-26MXZUHU.js} +2 -2
  7. package/dist/{chunk-KQ27IDYL.js → chunk-2BWCR762.js} +2 -3
  8. package/dist/chunk-2BWCR762.js.map +1 -0
  9. package/dist/chunk-3VOL4WEG.js +31 -0
  10. package/dist/chunk-3VOL4WEG.js.map +1 -0
  11. package/dist/chunk-4QWDB2MD.js +571 -0
  12. package/dist/chunk-4QWDB2MD.js.map +1 -0
  13. package/dist/{chunk-LJ5E4GXC.js → chunk-4R52TQ3K.js} +2 -2
  14. package/dist/{chunk-SPSGZWTZ.js → chunk-5FCHJLM7.js} +34 -16
  15. package/dist/chunk-5FCHJLM7.js.map +1 -0
  16. package/dist/chunk-5FPIKTSA.js +40 -0
  17. package/dist/chunk-5FPIKTSA.js.map +1 -0
  18. package/dist/{chunk-HLTJK3XB.js → chunk-5L724R4C.js} +5 -6
  19. package/dist/{chunk-HLTJK3XB.js.map → chunk-5L724R4C.js.map} +1 -1
  20. package/dist/{chunk-JTTTXGHX.js → chunk-7LV4V6A4.js} +4 -4
  21. package/dist/{chunk-FTD5Z6QD.js → chunk-AWP5A6IM.js} +15 -7
  22. package/dist/chunk-AWP5A6IM.js.map +1 -0
  23. package/dist/chunk-C3Q43WLC.js +118 -0
  24. package/dist/chunk-C3Q43WLC.js.map +1 -0
  25. package/dist/{chunk-B4QYXVPZ.js → chunk-CMNKHDOX.js} +2 -2
  26. package/dist/{chunk-TBB3THSL.js → chunk-D72AFYQR.js} +8 -13
  27. package/dist/chunk-D72AFYQR.js.map +1 -0
  28. package/dist/{chunk-QR2TM4OY.js → chunk-DCE423KO.js} +46 -30
  29. package/dist/chunk-DCE423KO.js.map +1 -0
  30. package/dist/chunk-GBOW6FUW.js +74 -0
  31. package/dist/chunk-GBOW6FUW.js.map +1 -0
  32. package/dist/{chunk-GFDGYQ6M.js → chunk-HMSHB5EQ.js} +569 -269
  33. package/dist/chunk-HMSHB5EQ.js.map +1 -0
  34. package/dist/{chunk-NRCKIHND.js → chunk-HYEUETIC.js} +2 -2
  35. package/dist/{chunk-OEJDFGAF.js → chunk-I6IOGZSZ.js} +61 -52
  36. package/dist/chunk-I6IOGZSZ.js.map +1 -0
  37. package/dist/{chunk-3APMMQUA.js → chunk-JFF7P4LC.js} +30 -93
  38. package/dist/chunk-JFF7P4LC.js.map +1 -0
  39. package/dist/{chunk-N5OCAAXY.js → chunk-JWYRXE6C.js} +2 -2
  40. package/dist/{chunk-TWDVLTU6.js → chunk-KAO3LKB5.js} +3 -3
  41. package/dist/{chunk-XTRPYUWK.js → chunk-KQOU4POU.js} +26 -28
  42. package/dist/chunk-KQOU4POU.js.map +1 -0
  43. package/dist/{chunk-YTRFL3MR.js → chunk-M3GQ2R3E.js} +29 -28
  44. package/dist/chunk-M3GQ2R3E.js.map +1 -0
  45. package/dist/{chunk-LNA6M2IE.js → chunk-PGY5XROM.js} +2 -2
  46. package/dist/chunk-PGY5XROM.js.map +1 -0
  47. package/dist/{chunk-VAQJLHUW.js → chunk-QB5HHTAA.js} +8 -19
  48. package/dist/chunk-QB5HHTAA.js.map +1 -0
  49. package/dist/{chunk-VSZ5GDET.js → chunk-QYLCINGC.js} +2 -2
  50. package/dist/{chunk-IRJADQM7.js → chunk-RA2IPRO2.js} +2 -2
  51. package/dist/{chunk-DC333ZDC.js → chunk-RDWGYKDY.js} +4 -4
  52. package/dist/{chunk-FXQYEXLS.js → chunk-RFKDGJAJ.js} +26 -57
  53. package/dist/chunk-RFKDGJAJ.js.map +1 -0
  54. package/dist/{chunk-HPJP3HFD.js → chunk-SPFHPHYL.js} +7 -7
  55. package/dist/{chunk-EZ46ZTAQ.js → chunk-U2W5SENM.js} +3 -3
  56. package/dist/{chunk-MVEYK55V.js → chunk-U7X4V4HE.js} +2 -2
  57. package/dist/{chunk-INKJBMPJ.js → chunk-UAD3SC27.js} +4 -12
  58. package/dist/chunk-UAD3SC27.js.map +1 -0
  59. package/dist/{chunk-C4QI54PN.js → chunk-WBHPCBVN.js} +57 -34
  60. package/dist/chunk-WBHPCBVN.js.map +1 -0
  61. package/dist/chunk-WFFV254H.js +314 -0
  62. package/dist/chunk-WFFV254H.js.map +1 -0
  63. package/dist/{chunk-ZWAL2ZY7.js → chunk-WJHFV6RI.js} +3 -2
  64. package/dist/chunk-WJHFV6RI.js.map +1 -0
  65. package/dist/{chunk-2RQYJFKA.js → chunk-WLZHCM7O.js} +2 -2
  66. package/dist/{chunk-DVW6ASTO.js → chunk-XDSVV5GZ.js} +4 -4
  67. package/dist/{chunk-JZHIF3K7.js → chunk-YDYRAXSY.js} +57 -27
  68. package/dist/chunk-YDYRAXSY.js.map +1 -0
  69. package/dist/commands/build/marketplace.js +4 -4
  70. package/dist/commands/build/plugins.js +5 -5
  71. package/dist/commands/build/stack.js +5 -5
  72. package/dist/commands/compile.js +11 -9
  73. package/dist/commands/compile.js.map +1 -1
  74. package/dist/commands/config/get.js +4 -4
  75. package/dist/commands/config/index.js +5 -5
  76. package/dist/commands/config/path.js +4 -4
  77. package/dist/commands/config/set-project.js +4 -4
  78. package/dist/commands/config/show.js +5 -5
  79. package/dist/commands/config/unset-project.js +4 -4
  80. package/dist/commands/diff.js +4 -4
  81. package/dist/commands/doctor.js +4 -4
  82. package/dist/commands/edit.js +58 -52
  83. package/dist/commands/edit.js.map +1 -1
  84. package/dist/commands/eject.js +4 -4
  85. package/dist/commands/import/skill.js +7 -8
  86. package/dist/commands/import/skill.js.map +1 -1
  87. package/dist/commands/info.js +5 -5
  88. package/dist/commands/init.js +40 -435
  89. package/dist/commands/init.js.map +1 -1
  90. package/dist/commands/list.js +4 -4
  91. package/dist/commands/new/agent.js +11 -10
  92. package/dist/commands/new/agent.js.map +1 -1
  93. package/dist/commands/new/marketplace.js +24 -5
  94. package/dist/commands/new/marketplace.js.map +1 -1
  95. package/dist/commands/new/skill.js +15 -209
  96. package/dist/commands/new/skill.js.map +1 -1
  97. package/dist/commands/outdated.js +11 -7
  98. package/dist/commands/outdated.js.map +1 -1
  99. package/dist/commands/search.js +7 -8
  100. package/dist/commands/search.js.map +1 -1
  101. package/dist/commands/uninstall.js +6 -6
  102. package/dist/commands/update.js +6 -6
  103. package/dist/commands/validate.js +62 -250
  104. package/dist/commands/validate.js.map +1 -1
  105. package/dist/components/skill-search/skill-search.js +3 -3
  106. package/dist/components/wizard/category-grid.js +3 -2
  107. package/dist/components/wizard/category-grid.test.js +112 -58
  108. package/dist/components/wizard/category-grid.test.js.map +1 -1
  109. package/dist/components/wizard/checkbox-grid.js +5 -3
  110. package/dist/components/wizard/checkbox-grid.test.js +5 -4
  111. package/dist/components/wizard/checkbox-grid.test.js.map +1 -1
  112. package/dist/components/wizard/domain-selection.js +11 -9
  113. package/dist/components/wizard/help-modal.js +2 -2
  114. package/dist/components/wizard/menu-item.js +1 -1
  115. package/dist/components/wizard/search-modal.js +2 -2
  116. package/dist/components/wizard/search-modal.test.js +2 -2
  117. package/dist/components/wizard/section-progress.js +2 -2
  118. package/dist/components/wizard/section-progress.test.js +2 -2
  119. package/dist/components/wizard/selection-card.js +2 -2
  120. package/dist/components/wizard/source-grid.js +4 -3
  121. package/dist/components/wizard/source-grid.test.js +4 -3
  122. package/dist/components/wizard/source-grid.test.js.map +1 -1
  123. package/dist/components/wizard/stack-selection.js +8 -8
  124. package/dist/components/wizard/step-agents.js +10 -8
  125. package/dist/components/wizard/step-agents.test.js +18 -17
  126. package/dist/components/wizard/step-agents.test.js.map +1 -1
  127. package/dist/components/wizard/step-build.js +9 -8
  128. package/dist/components/wizard/step-build.test.js +17 -35
  129. package/dist/components/wizard/step-build.test.js.map +1 -1
  130. package/dist/components/wizard/step-confirm.js +4 -4
  131. package/dist/components/wizard/step-confirm.test.js +8 -8
  132. package/dist/components/wizard/step-refine.js +2 -2
  133. package/dist/components/wizard/step-refine.test.js +2 -2
  134. package/dist/components/wizard/step-settings.js +7 -5
  135. package/dist/components/wizard/step-settings.test.js +10 -8
  136. package/dist/components/wizard/step-settings.test.js.map +1 -1
  137. package/dist/components/wizard/step-sources.js +11 -10
  138. package/dist/components/wizard/step-sources.test.js +12 -11
  139. package/dist/components/wizard/step-sources.test.js.map +1 -1
  140. package/dist/components/wizard/step-stack.js +15 -12
  141. package/dist/components/wizard/step-stack.test.js +16 -13
  142. package/dist/components/wizard/step-stack.test.js.map +1 -1
  143. package/dist/components/wizard/view-title.js +2 -2
  144. package/dist/components/wizard/wizard-layout.js +8 -8
  145. package/dist/components/wizard/wizard-tabs.js +2 -2
  146. package/dist/components/wizard/wizard-tabs.test.js +2 -2
  147. package/dist/components/wizard/wizard.js +27 -25
  148. package/dist/config/skill-categories.yaml +344 -0
  149. package/dist/config/skill-rules.yaml +740 -0
  150. package/dist/config/stacks.yaml +0 -1
  151. package/dist/hooks/init.js +55 -3
  152. package/dist/hooks/init.js.map +1 -1
  153. package/dist/{source-manager-Q34LTUVM.js → source-manager-BVB2SG73.js} +4 -4
  154. package/dist/src/agents/meta/agent-summoner/critical-reminders.md +1 -1
  155. package/dist/src/agents/meta/agent-summoner/critical-requirements.md +1 -1
  156. package/dist/src/agents/meta/agent-summoner/examples.md +2 -2
  157. package/dist/src/agents/meta/agent-summoner/output-format.md +1 -1
  158. package/dist/src/agents/meta/agent-summoner/workflow.md +5 -7
  159. package/{src/agents/meta/documentor/agent.yaml → dist/src/agents/meta/documentor/metadata.yaml} +1 -0
  160. package/dist/stores/wizard-store.js +5 -5
  161. package/dist/stores/wizard-store.test.js +79 -27
  162. package/dist/stores/wizard-store.test.js.map +1 -1
  163. package/package.json +5 -1
  164. package/src/agents/meta/agent-summoner/critical-reminders.md +1 -1
  165. package/src/agents/meta/agent-summoner/critical-requirements.md +1 -1
  166. package/src/agents/meta/agent-summoner/examples.md +2 -2
  167. package/src/agents/meta/agent-summoner/output-format.md +1 -1
  168. package/src/agents/meta/agent-summoner/workflow.md +5 -7
  169. package/{dist/src/agents/meta/documentor/agent.yaml → src/agents/meta/documentor/metadata.yaml} +1 -0
  170. package/src/schemas/agent.schema.json +1 -1
  171. package/src/schemas/metadata.schema.json +2 -5
  172. package/src/schemas/project-config.schema.json +0 -3
  173. package/src/schemas/project-source-config.schema.json +4 -1
  174. package/config/skills-matrix.yaml +0 -918
  175. package/dist/chunk-3APMMQUA.js.map +0 -1
  176. package/dist/chunk-C4QI54PN.js.map +0 -1
  177. package/dist/chunk-FMQ3A7W4.js +0 -29
  178. package/dist/chunk-FMQ3A7W4.js.map +0 -1
  179. package/dist/chunk-FTD5Z6QD.js.map +0 -1
  180. package/dist/chunk-FXQYEXLS.js.map +0 -1
  181. package/dist/chunk-GFDGYQ6M.js.map +0 -1
  182. package/dist/chunk-INKJBMPJ.js.map +0 -1
  183. package/dist/chunk-JZHIF3K7.js.map +0 -1
  184. package/dist/chunk-KQ27IDYL.js.map +0 -1
  185. package/dist/chunk-LNA6M2IE.js.map +0 -1
  186. package/dist/chunk-M4P5YJ45.js +0 -99
  187. package/dist/chunk-M4P5YJ45.js.map +0 -1
  188. package/dist/chunk-OEJDFGAF.js.map +0 -1
  189. package/dist/chunk-QR2TM4OY.js.map +0 -1
  190. package/dist/chunk-SPSGZWTZ.js.map +0 -1
  191. package/dist/chunk-TBB3THSL.js.map +0 -1
  192. package/dist/chunk-VAQJLHUW.js.map +0 -1
  193. package/dist/chunk-XTRPYUWK.js.map +0 -1
  194. package/dist/chunk-YTRFL3MR.js.map +0 -1
  195. package/dist/chunk-ZWAL2ZY7.js.map +0 -1
  196. package/dist/config/skills-matrix.yaml +0 -918
  197. package/dist/src/agents/migration/cli-migrator/agent.yaml +0 -12
  198. package/dist/src/agents/migration/cli-migrator/anti-patterns.md +0 -158
  199. package/dist/src/agents/migration/cli-migrator/conversion-mappings.md +0 -63
  200. package/dist/src/agents/migration/cli-migrator/critical-reminders.md +0 -17
  201. package/dist/src/agents/migration/cli-migrator/critical-requirements.md +0 -13
  202. package/dist/src/agents/migration/cli-migrator/intro.md +0 -15
  203. package/dist/src/agents/migration/cli-migrator/output-format.md +0 -164
  204. package/dist/src/agents/migration/cli-migrator/workflow.md +0 -230
  205. package/src/agents/migration/cli-migrator/agent.yaml +0 -12
  206. package/src/agents/migration/cli-migrator/anti-patterns.md +0 -158
  207. package/src/agents/migration/cli-migrator/conversion-mappings.md +0 -63
  208. package/src/agents/migration/cli-migrator/critical-reminders.md +0 -17
  209. package/src/agents/migration/cli-migrator/critical-requirements.md +0 -13
  210. package/src/agents/migration/cli-migrator/intro.md +0 -15
  211. package/src/agents/migration/cli-migrator/output-format.md +0 -164
  212. package/src/agents/migration/cli-migrator/workflow.md +0 -230
  213. package/src/schemas/skills-matrix.schema.json +0 -179
  214. /package/dist/{chunk-CJFWO46A.js.map → chunk-26MXZUHU.js.map} +0 -0
  215. /package/dist/{chunk-LJ5E4GXC.js.map → chunk-4R52TQ3K.js.map} +0 -0
  216. /package/dist/{chunk-JTTTXGHX.js.map → chunk-7LV4V6A4.js.map} +0 -0
  217. /package/dist/{chunk-B4QYXVPZ.js.map → chunk-CMNKHDOX.js.map} +0 -0
  218. /package/dist/{chunk-NRCKIHND.js.map → chunk-HYEUETIC.js.map} +0 -0
  219. /package/dist/{chunk-N5OCAAXY.js.map → chunk-JWYRXE6C.js.map} +0 -0
  220. /package/dist/{chunk-TWDVLTU6.js.map → chunk-KAO3LKB5.js.map} +0 -0
  221. /package/dist/{chunk-VSZ5GDET.js.map → chunk-QYLCINGC.js.map} +0 -0
  222. /package/dist/{chunk-IRJADQM7.js.map → chunk-RA2IPRO2.js.map} +0 -0
  223. /package/dist/{chunk-DC333ZDC.js.map → chunk-RDWGYKDY.js.map} +0 -0
  224. /package/dist/{chunk-HPJP3HFD.js.map → chunk-SPFHPHYL.js.map} +0 -0
  225. /package/dist/{chunk-EZ46ZTAQ.js.map → chunk-U2W5SENM.js.map} +0 -0
  226. /package/dist/{chunk-MVEYK55V.js.map → chunk-U7X4V4HE.js.map} +0 -0
  227. /package/dist/{chunk-2RQYJFKA.js.map → chunk-WLZHCM7O.js.map} +0 -0
  228. /package/dist/{chunk-DVW6ASTO.js.map → chunk-XDSVV5GZ.js.map} +0 -0
  229. /package/dist/{source-manager-Q34LTUVM.js.map → source-manager-BVB2SG73.js.map} +0 -0
  230. /package/dist/src/agents/developer/api-developer/{agent.yaml → metadata.yaml} +0 -0
  231. /package/dist/src/agents/developer/cli-developer/{agent.yaml → metadata.yaml} +0 -0
  232. /package/dist/src/agents/developer/web-architecture/{agent.yaml → metadata.yaml} +0 -0
  233. /package/dist/src/agents/developer/web-developer/{agent.yaml → metadata.yaml} +0 -0
  234. /package/dist/src/agents/meta/agent-summoner/{agent.yaml → metadata.yaml} +0 -0
  235. /package/dist/src/agents/meta/skill-summoner/{agent.yaml → metadata.yaml} +0 -0
  236. /package/dist/src/agents/pattern/pattern-scout/{agent.yaml → metadata.yaml} +0 -0
  237. /package/dist/src/agents/pattern/web-pattern-critique/{agent.yaml → metadata.yaml} +0 -0
  238. /package/dist/src/agents/planning/web-pm/{agent.yaml → metadata.yaml} +0 -0
  239. /package/dist/src/agents/researcher/api-researcher/{agent.yaml → metadata.yaml} +0 -0
  240. /package/dist/src/agents/researcher/web-researcher/{agent.yaml → metadata.yaml} +0 -0
  241. /package/dist/src/agents/reviewer/api-reviewer/{agent.yaml → metadata.yaml} +0 -0
  242. /package/dist/src/agents/reviewer/cli-reviewer/{agent.yaml → metadata.yaml} +0 -0
  243. /package/dist/src/agents/reviewer/web-reviewer/{agent.yaml → metadata.yaml} +0 -0
  244. /package/dist/src/agents/tester/cli-tester/{agent.yaml → metadata.yaml} +0 -0
  245. /package/dist/src/agents/tester/web-tester/{agent.yaml → metadata.yaml} +0 -0
  246. /package/src/agents/developer/api-developer/{agent.yaml → metadata.yaml} +0 -0
  247. /package/src/agents/developer/cli-developer/{agent.yaml → metadata.yaml} +0 -0
  248. /package/src/agents/developer/web-architecture/{agent.yaml → metadata.yaml} +0 -0
  249. /package/src/agents/developer/web-developer/{agent.yaml → metadata.yaml} +0 -0
  250. /package/src/agents/meta/agent-summoner/{agent.yaml → metadata.yaml} +0 -0
  251. /package/src/agents/meta/skill-summoner/{agent.yaml → metadata.yaml} +0 -0
  252. /package/src/agents/pattern/pattern-scout/{agent.yaml → metadata.yaml} +0 -0
  253. /package/src/agents/pattern/web-pattern-critique/{agent.yaml → metadata.yaml} +0 -0
  254. /package/src/agents/planning/web-pm/{agent.yaml → metadata.yaml} +0 -0
  255. /package/src/agents/researcher/api-researcher/{agent.yaml → metadata.yaml} +0 -0
  256. /package/src/agents/researcher/web-researcher/{agent.yaml → metadata.yaml} +0 -0
  257. /package/src/agents/reviewer/api-reviewer/{agent.yaml → metadata.yaml} +0 -0
  258. /package/src/agents/reviewer/cli-reviewer/{agent.yaml → metadata.yaml} +0 -0
  259. /package/src/agents/reviewer/web-reviewer/{agent.yaml → metadata.yaml} +0 -0
  260. /package/src/agents/tester/cli-tester/{agent.yaml → metadata.yaml} +0 -0
  261. /package/src/agents/tester/web-tester/{agent.yaml → metadata.yaml} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/stores/wizard-store.test.ts"],"sourcesContent":["import { describe, it, expect, beforeEach, afterEach } from \"vitest\";\nimport { useWizardStore } from \"./wizard-store\";\nimport { DEFAULT_PRESELECTED_SKILLS } from \"../consts\";\nimport { createMockMatrix, getTestSkill } from \"../lib/__tests__/helpers\";\nimport { typedKeys } from \"../utils/typed-object\";\nimport type {\n AgentName,\n Domain,\n SkillAssignment,\n SkillId,\n SkillSource,\n Subcategory,\n} from \"../types\";\n\nfunction sa(id: SkillId, preloaded = false): SkillAssignment {\n return { id, preloaded };\n}\n\ndescribe(\"WizardStore\", () => {\n beforeEach(() => {\n useWizardStore.getState().reset();\n });\n\n describe(\"initial state\", () => {\n it(\"should start at stack step\", () => {\n const { step } = useWizardStore.getState();\n expect(step).toBe(\"stack\");\n });\n\n it(\"should have no approach selected\", () => {\n const { approach } = useWizardStore.getState();\n expect(approach).toBeNull();\n });\n\n it(\"should have no selected stack\", () => {\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBeNull();\n });\n\n it(\"should have expert mode off\", () => {\n const { expertMode } = useWizardStore.getState();\n expect(expertMode).toBe(false);\n });\n\n it(\"should default to local install mode\", () => {\n const { installMode } = useWizardStore.getState();\n expect(installMode).toBe(\"local\");\n });\n\n it(\"should have empty navigation history\", () => {\n const { history } = useWizardStore.getState();\n expect(history).toEqual([]);\n });\n\n it(\"should have empty selected domains\", () => {\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).toEqual([]);\n });\n\n it(\"should have empty domain selections\", () => {\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections).toEqual({});\n });\n });\n\n describe(\"step navigation\", () => {\n it(\"should update step with setStep\", () => {\n const store = useWizardStore.getState();\n store.setStep(\"stack\");\n\n const { step } = useWizardStore.getState();\n expect(step).toBe(\"stack\");\n });\n\n it(\"should track navigation history when setting step\", () => {\n const store = useWizardStore.getState();\n\n store.setStep(\"build\");\n store.setStep(\"confirm\");\n\n const { history } = useWizardStore.getState();\n expect(history).toEqual([\"stack\", \"build\"]);\n });\n\n it(\"should go back through history\", () => {\n const store = useWizardStore.getState();\n\n store.setStep(\"build\");\n store.setStep(\"confirm\");\n store.goBack();\n\n const { step, history } = useWizardStore.getState();\n expect(step).toBe(\"build\");\n expect(history).toEqual([\"stack\"]);\n });\n\n it(\"when goBack is called with empty history, should return to stack step\", () => {\n const store = useWizardStore.getState();\n\n store.setStep(\"build\");\n store.goBack();\n store.goBack();\n\n const { step } = useWizardStore.getState();\n expect(step).toBe(\"stack\");\n });\n });\n\n describe(\"approach selection\", () => {\n it(\"should set approach to stack\", () => {\n const store = useWizardStore.getState();\n store.setApproach(\"stack\");\n\n const { approach } = useWizardStore.getState();\n expect(approach).toBe(\"stack\");\n });\n\n it(\"should set approach to scratch\", () => {\n const store = useWizardStore.getState();\n store.setApproach(\"scratch\");\n\n const { approach } = useWizardStore.getState();\n expect(approach).toBe(\"scratch\");\n });\n });\n\n describe(\"stack selection\", () => {\n it(\"should select stack by id\", () => {\n const store = useWizardStore.getState();\n store.selectStack(\"nextjs-fullstack\");\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBe(\"nextjs-fullstack\");\n });\n\n it(\"when selectStack is called with null, should clear previously selected stack\", () => {\n const store = useWizardStore.getState();\n store.selectStack(\"nextjs-fullstack\");\n store.selectStack(null);\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBeNull();\n });\n });\n\n describe(\"domain selection\", () => {\n it(\"should toggle domain on\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).toContain(\"web\");\n });\n\n it(\"should toggle domain off\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"web\");\n\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).not.toContain(\"web\");\n });\n\n it(\"should allow multiple domain selection\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.toggleDomain(\"cli\");\n\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).toEqual([\"web\", \"api\", \"cli\"]);\n });\n\n it(\"should remove skills from deselected domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"web-styling\", \"web-styling-scss-modules\", true);\n\n store.toggleDomain(\"web\");\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web).toBeUndefined();\n expect(store.getAllSelectedTechnologies()).toEqual([]);\n expect(store.getTechnologyCount()).toBe(0);\n });\n\n it(\"should not affect skills in other domains when deselecting a domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"api\", \"api-api\", \"api-framework-hono\", true);\n\n store.toggleDomain(\"web\");\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web).toBeUndefined();\n expect(domainSelections.api![\"api-api\"]).toEqual([\"api-framework-hono\"]);\n expect(store.getAllSelectedTechnologies()).toEqual([\"api-framework-hono\"]);\n });\n\n it(\"should not auto-select skills when toggling domain on\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web).toBeUndefined();\n expect(store.getAllSelectedTechnologies()).toEqual([]);\n });\n\n it(\"should reflect correct technology count after domain deselection\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"web-styling\", \"web-styling-scss-modules\", true);\n store.toggleTechnology(\"api\", \"api-api\", \"api-framework-hono\", true);\n\n expect(store.getTechnologyCount()).toBe(3);\n\n store.toggleDomain(\"web\");\n\n expect(store.getTechnologyCount()).toBe(1);\n expect(store.getAllSelectedTechnologies()).toEqual([\"api-framework-hono\"]);\n });\n });\n\n describe(\"technology selection\", () => {\n it(\"should toggle technology in exclusive mode\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web![\"web-framework\"]).toEqual([\"web-framework-react\"]);\n });\n\n it(\"should replace technology in exclusive mode\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-vue\", true);\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web![\"web-framework\"]).toEqual([\"web-framework-vue\"]);\n });\n\n it(\"should toggle off technology in exclusive mode\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web![\"web-framework\"]).toEqual([]);\n });\n\n it(\"should allow multiple selections in non-exclusive mode\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-testing\", \"web-testing-vitest\", false);\n store.toggleTechnology(\"web\", \"web-testing\", \"web-testing-playwright-e2e\", false);\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web![\"web-testing\"]).toEqual([\n \"web-testing-vitest\",\n \"web-testing-playwright-e2e\",\n ]);\n });\n\n it(\"should toggle off technology in non-exclusive mode\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-testing\", \"web-testing-vitest\", false);\n store.toggleTechnology(\"web\", \"web-testing\", \"web-testing-playwright-e2e\", false);\n store.toggleTechnology(\"web\", \"web-testing\", \"web-testing-vitest\", false);\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web![\"web-testing\"]).toEqual([\"web-testing-playwright-e2e\"]);\n });\n });\n\n describe(\"domain navigation\", () => {\n it(\"should move to next domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n\n const result = store.nextDomain();\n\n const { currentDomainIndex } = useWizardStore.getState();\n expect(result).toBe(true);\n expect(currentDomainIndex).toBe(1);\n });\n\n it(\"when already at the last domain, should return false from nextDomain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n\n const result = store.nextDomain();\n\n expect(result).toBe(false);\n });\n\n it(\"should move to previous domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.nextDomain();\n\n const result = store.prevDomain();\n\n const { currentDomainIndex } = useWizardStore.getState();\n expect(result).toBe(true);\n expect(currentDomainIndex).toBe(0);\n });\n\n it(\"when already at the first domain, should return false from prevDomain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n\n const result = store.prevDomain();\n\n expect(result).toBe(false);\n });\n\n it(\"should get current domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.nextDomain();\n\n const domain = store.getCurrentDomain();\n expect(domain).toBe(\"api\");\n });\n\n it(\"should return null when no domains selected\", () => {\n const store = useWizardStore.getState();\n const domain = store.getCurrentDomain();\n expect(domain).toBeNull();\n });\n });\n\n describe(\"mode toggles\", () => {\n it(\"should toggle expert mode on\", () => {\n const store = useWizardStore.getState();\n\n store.toggleExpertMode();\n\n const { expertMode } = useWizardStore.getState();\n expect(expertMode).toBe(true);\n });\n\n it(\"should toggle expert mode off\", () => {\n const store = useWizardStore.getState();\n\n store.toggleExpertMode();\n store.toggleExpertMode();\n\n const { expertMode } = useWizardStore.getState();\n expect(expertMode).toBe(false);\n });\n\n it(\"should toggle install mode to plugin\", () => {\n const store = useWizardStore.getState();\n\n store.toggleInstallMode();\n\n const { installMode } = useWizardStore.getState();\n expect(installMode).toBe(\"plugin\");\n });\n\n it(\"should toggle install mode back to local\", () => {\n const store = useWizardStore.getState();\n\n store.toggleInstallMode();\n store.toggleInstallMode();\n\n const { installMode } = useWizardStore.getState();\n expect(installMode).toBe(\"local\");\n });\n\n it(\"should toggle show labels\", () => {\n const store = useWizardStore.getState();\n\n store.toggleShowLabels();\n\n const { showLabels } = useWizardStore.getState();\n expect(showLabels).toBe(true);\n });\n\n it(\"should toggle help on\", () => {\n const store = useWizardStore.getState();\n\n store.toggleHelp();\n\n const { showHelp } = useWizardStore.getState();\n expect(showHelp).toBe(true);\n });\n\n it(\"should toggle help off (show then hide)\", () => {\n const store = useWizardStore.getState();\n\n store.toggleHelp();\n store.toggleHelp();\n\n const { showHelp } = useWizardStore.getState();\n expect(showHelp).toBe(false);\n });\n\n it(\"should toggle settings on\", () => {\n const store = useWizardStore.getState();\n\n store.toggleSettings();\n\n const { showSettings } = useWizardStore.getState();\n expect(showSettings).toBe(true);\n });\n\n it(\"should toggle settings off (show then hide)\", () => {\n const store = useWizardStore.getState();\n\n store.toggleSettings();\n store.toggleSettings();\n\n const { showSettings } = useWizardStore.getState();\n expect(showSettings).toBe(false);\n });\n\n it(\"should start with showHelp false\", () => {\n const { showHelp } = useWizardStore.getState();\n expect(showHelp).toBe(false);\n });\n\n it(\"should start with showSettings false\", () => {\n const { showSettings } = useWizardStore.getState();\n expect(showSettings).toBe(false);\n });\n\n it(\"should reset showHelp to false after reset\", () => {\n const store = useWizardStore.getState();\n store.toggleHelp();\n store.reset();\n\n const { showHelp } = useWizardStore.getState();\n expect(showHelp).toBe(false);\n });\n\n it(\"should reset showSettings to false after reset\", () => {\n const store = useWizardStore.getState();\n store.toggleSettings();\n store.reset();\n\n const { showSettings } = useWizardStore.getState();\n expect(showSettings).toBe(false);\n });\n });\n\n describe(\"install mode auto-defaulting\", () => {\n it(\"should default installMode to plugin when set via setState (marketplace available)\", () => {\n // Simulates what Wizard component does when initialInstallMode=\"plugin\"\n useWizardStore.setState({ installMode: \"plugin\" });\n\n const { installMode } = useWizardStore.getState();\n expect(installMode).toBe(\"plugin\");\n });\n\n it(\"should keep installMode as local when set via setState (no marketplace)\", () => {\n // Simulates what Wizard component does when initialInstallMode=\"local\"\n useWizardStore.setState({ installMode: \"local\" });\n\n const { installMode } = useWizardStore.getState();\n expect(installMode).toBe(\"local\");\n });\n\n it(\"should allow toggling installMode after auto-defaulting to plugin\", () => {\n // Simulates: marketplace sets plugin, then user presses P to switch back\n useWizardStore.setState({ installMode: \"plugin\" });\n useWizardStore.getState().toggleInstallMode();\n\n const { installMode } = useWizardStore.getState();\n expect(installMode).toBe(\"local\");\n });\n\n it(\"should reset installMode to local after reset even if previously set to plugin\", () => {\n useWizardStore.setState({ installMode: \"plugin\" });\n useWizardStore.getState().reset();\n\n const { installMode } = useWizardStore.getState();\n expect(installMode).toBe(\"local\");\n });\n });\n\n describe(\"computed getters\", () => {\n it(\"should get all selected technologies\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"web-styling\", \"web-styling-scss-modules\", true);\n store.toggleTechnology(\"api\", \"api-api\", \"api-framework-hono\", true);\n\n const technologies = store.getAllSelectedTechnologies();\n expect(technologies).toContain(\"web-framework-react\");\n expect(technologies).toContain(\"web-styling-scss-modules\");\n expect(technologies).toContain(\"api-framework-hono\");\n });\n\n it(\"should get default methodology skills\", () => {\n const store = useWizardStore.getState();\n\n const skills = store.getDefaultMethodologySkills();\n\n for (const skill of DEFAULT_PRESELECTED_SKILLS) {\n expect(skills).toContain(skill);\n }\n });\n\n it(\"should get selected technologies per domain\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"web-styling\", \"web-styling-scss-modules\", true);\n store.toggleTechnology(\"api\", \"api-api\", \"api-framework-hono\", true);\n\n const perDomain = store.getSelectedTechnologiesPerDomain();\n expect(perDomain.web).toEqual([\"web-framework-react\", \"web-styling-scss-modules\"]);\n expect(perDomain.api).toEqual([\"api-framework-hono\"]);\n expect(perDomain.cli).toBeUndefined();\n });\n\n it(\"should return empty object for getSelectedTechnologiesPerDomain with no selections\", () => {\n const store = useWizardStore.getState();\n const perDomain = store.getSelectedTechnologiesPerDomain();\n expect(perDomain).toEqual({});\n });\n\n it(\"should omit domains with empty subcategory arrays from getSelectedTechnologiesPerDomain\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true); // toggle off\n\n const perDomain = store.getSelectedTechnologiesPerDomain();\n expect(perDomain.web).toBeUndefined();\n });\n\n it(\"should get technology count\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"web-styling\", \"web-styling-scss-modules\", true);\n store.toggleTechnology(\"api\", \"api-api\", \"api-framework-hono\", true);\n\n expect(store.getTechnologyCount()).toBe(3);\n });\n\n it(\"should return 0 for getTechnologyCount with no selections\", () => {\n const store = useWizardStore.getState();\n expect(store.getTechnologyCount()).toBe(0);\n });\n });\n\n describe(\"navigation guards\", () => {\n it(\"canGoToNextDomain should return true when not at last domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n\n expect(store.canGoToNextDomain()).toBe(true);\n });\n\n it(\"canGoToNextDomain should return false when at last domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n\n expect(store.canGoToNextDomain()).toBe(false);\n });\n\n it(\"canGoToNextDomain should return false with no domains\", () => {\n const store = useWizardStore.getState();\n expect(store.canGoToNextDomain()).toBe(false);\n });\n\n it(\"canGoToPreviousDomain should return false when at first domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n\n expect(store.canGoToPreviousDomain()).toBe(false);\n });\n\n it(\"canGoToPreviousDomain should return true when past first domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.nextDomain();\n\n expect(store.canGoToPreviousDomain()).toBe(true);\n });\n\n it(\"canGoToPreviousDomain should return false with no domains\", () => {\n const store = useWizardStore.getState();\n expect(store.canGoToPreviousDomain()).toBe(false);\n });\n });\n\n describe(\"reset\", () => {\n it(\"should reset to initial state\", () => {\n const store = useWizardStore.getState();\n\n store.setStep(\"stack\");\n store.setApproach(\"scratch\");\n store.selectStack(\"nextjs-fullstack\");\n store.toggleDomain(\"web\");\n store.toggleExpertMode();\n\n store.reset();\n\n const state = useWizardStore.getState();\n expect(state.step).toBe(\"stack\");\n expect(state.approach).toBeNull();\n expect(state.selectedStackId).toBeNull();\n expect(state.selectedDomains).toEqual([]);\n expect(state.expertMode).toBe(false);\n expect(state.installMode).toBe(\"local\");\n expect(state.history).toEqual([]);\n });\n });\n\n describe(\"populateFromStack\", () => {\n it(\"should set selectedDomains to all domains regardless of stack contents\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n web: { \"web-framework\": [sa(\"web-framework-react\", true)] },\n },\n };\n const categories: Partial<Record<Subcategory, { domain?: Domain }>> = {\n \"web-framework\": { domain: \"web\" },\n };\n\n store.populateFromStack(stack, categories);\n\n const { selectedDomains, domainSelections } = useWizardStore.getState();\n\n expect(selectedDomains).toEqual([\"web\", \"api\", \"cli\", \"mobile\", \"shared\"]);\n\n expect(domainSelections.web).toBeDefined();\n expect(domainSelections.web![\"web-framework\"]).toEqual([\"web-framework-react\"]);\n expect(domainSelections.api).toBeUndefined();\n });\n\n it(\"should populate domainSelections from stack agents\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n web: {\n \"web-framework\": [sa(\"web-framework-react\", true)],\n \"web-client-state\": [sa(\"web-state-zustand\")],\n },\n api: { \"api-api\": [sa(\"api-framework-hono\", true)] },\n },\n };\n const categories: Partial<Record<Subcategory, { domain?: Domain }>> = {\n \"web-framework\": { domain: \"web\" },\n \"web-client-state\": { domain: \"web\" },\n \"api-api\": { domain: \"api\" },\n };\n\n store.populateFromStack(stack, categories);\n\n const { domainSelections } = useWizardStore.getState();\n\n expect(domainSelections.web![\"web-framework\"]).toEqual([\"web-framework-react\"]);\n expect(domainSelections.web![\"web-client-state\"]).toEqual([\"web-state-zustand\"]);\n expect(domainSelections.api![\"api-api\"]).toEqual([\"api-framework-hono\"]);\n });\n\n it(\"should skip entries without a domain\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n misc: { \"shared-methodology\": [sa(\"meta-methodology-vitest\" as SkillId)] },\n },\n };\n const categories: Partial<Record<Subcategory, { domain?: Domain }>> = {\n \"shared-methodology\": {},\n };\n\n store.populateFromStack(stack, categories);\n\n const { domainSelections } = useWizardStore.getState();\n\n expect(typedKeys(domainSelections)).toHaveLength(0);\n });\n\n it(\"should populate multiple skills from array-valued subcategories\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n \"pattern-scout\": {\n \"shared-methodology\": [\n sa(\"meta-methodology-investigation-requirements\", true),\n sa(\"meta-methodology-anti-over-engineering\", true),\n sa(\"meta-methodology-success-criteria\", true),\n ],\n },\n },\n };\n const categories: Partial<Record<Subcategory, { domain?: Domain }>> = {\n \"shared-methodology\": { domain: \"shared\" },\n };\n\n store.populateFromStack(stack, categories);\n\n const { domainSelections } = useWizardStore.getState();\n\n expect(domainSelections.shared![\"shared-methodology\"]).toEqual([\n \"meta-methodology-investigation-requirements\",\n \"meta-methodology-anti-over-engineering\",\n \"meta-methodology-success-criteria\",\n ]);\n });\n\n it(\"should handle single-element and multi-element arrays across agents\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n web: {\n \"web-framework\": [sa(\"web-framework-react\", true)],\n \"shared-methodology\": [\n sa(\"meta-methodology-investigation-requirements\", true),\n sa(\"meta-methodology-anti-over-engineering\", true),\n ],\n },\n api: { \"api-api\": [sa(\"api-framework-hono\", true)] },\n },\n };\n const categories: Partial<Record<Subcategory, { domain?: Domain }>> = {\n \"web-framework\": { domain: \"web\" },\n \"shared-methodology\": { domain: \"shared\" },\n \"api-api\": { domain: \"api\" },\n };\n\n store.populateFromStack(stack, categories);\n\n const { domainSelections } = useWizardStore.getState();\n\n expect(domainSelections.web![\"web-framework\"]).toEqual([\"web-framework-react\"]);\n expect(domainSelections.shared![\"shared-methodology\"]).toEqual([\n \"meta-methodology-investigation-requirements\",\n \"meta-methodology-anti-over-engineering\",\n ]);\n expect(domainSelections.api![\"api-api\"]).toEqual([\"api-framework-hono\"]);\n });\n\n it(\"should deduplicate skills from arrays across multiple agents\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n agent1: {\n \"shared-methodology\": [\n sa(\"meta-methodology-investigation-requirements\", true),\n sa(\"meta-methodology-anti-over-engineering\", true),\n ],\n },\n agent2: {\n \"shared-methodology\": [\n sa(\"meta-methodology-anti-over-engineering\", true),\n sa(\"meta-methodology-success-criteria\", true),\n ],\n },\n },\n };\n const categories: Partial<Record<Subcategory, { domain?: Domain }>> = {\n \"shared-methodology\": { domain: \"shared\" },\n };\n\n store.populateFromStack(stack, categories);\n\n const { domainSelections } = useWizardStore.getState();\n\n // Should deduplicate: anti-over-engineering appears in both agents\n expect(domainSelections.shared![\"shared-methodology\"]).toEqual([\n \"meta-methodology-investigation-requirements\",\n \"meta-methodology-anti-over-engineering\",\n \"meta-methodology-success-criteria\",\n ]);\n });\n });\n\n describe(\"complex flows\", () => {\n it(\"should handle complete stack selection flow\", () => {\n const store = useWizardStore.getState();\n\n store.setApproach(\"stack\");\n store.selectStack(\"nextjs-fullstack\");\n store.setStackAction(\"customize\");\n store.setStep(\"build\");\n\n store.setStep(\"confirm\");\n\n const state = useWizardStore.getState();\n expect(state.step).toBe(\"confirm\");\n expect(state.approach).toBe(\"stack\");\n expect(state.selectedStackId).toBe(\"nextjs-fullstack\");\n expect(state.stackAction).toBe(\"customize\");\n expect(state.history).toEqual([\"stack\", \"build\"]);\n });\n\n it(\"should handle complete scratch flow\", () => {\n const store = useWizardStore.getState();\n\n store.setApproach(\"scratch\");\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.setStep(\"build\");\n\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"web-styling\", \"web-styling-scss-modules\", true);\n store.toggleTechnology(\"api\", \"api-api\", \"api-framework-hono\", true);\n store.setStep(\"confirm\");\n\n const state = useWizardStore.getState();\n expect(state.step).toBe(\"confirm\");\n expect(state.approach).toBe(\"scratch\");\n expect(state.selectedDomains).toEqual([\"web\", \"api\"]);\n expect(state.domainSelections.web![\"web-framework\"]).toEqual([\"web-framework-react\"]);\n expect(state.domainSelections.web![\"web-styling\"]).toEqual([\"web-styling-scss-modules\"]);\n expect(state.domainSelections.api![\"api-api\"]).toEqual([\"api-framework-hono\"]);\n });\n\n it(\"should preserve selections when going back\", () => {\n const store = useWizardStore.getState();\n\n store.setApproach(\"scratch\");\n store.toggleDomain(\"web\");\n store.setStep(\"build\");\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n store.goBack();\n\n const state = useWizardStore.getState();\n expect(state.selectedDomains).toContain(\"web\");\n expect(state.domainSelections.web![\"web-framework\"]).toEqual([\"web-framework-react\"]);\n });\n });\n\n describe(\"buildSourceRows sort order\", () => {\n function makeSource(overrides: Partial<SkillSource> & { name: string }): SkillSource {\n return {\n type: \"private\",\n installed: false,\n ...overrides,\n };\n }\n\n it(\"should sort local sources before scoped marketplace sources\", () => {\n const store = useWizardStore.getState();\n\n const skill = {\n ...getTestSkill(\"react\"),\n availableSources: [\n makeSource({ name: \"Acme Corp\", type: \"private\", primary: true }),\n makeSource({ name: \"local\", type: \"local\", installed: true, installMode: \"local\" }),\n ],\n };\n\n const matrix = createMockMatrix({ \"web-framework-react\": skill });\n\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\" as SkillId, true);\n\n const rows = store.buildSourceRows(matrix);\n expect(rows).toHaveLength(1);\n expect(rows[0].options[0].id).toBe(\"local\");\n expect(rows[0].options[1].id).toBe(\"Acme Corp\");\n });\n\n it(\"should sort scoped marketplace before default public marketplace\", () => {\n const store = useWizardStore.getState();\n\n const skill = {\n ...getTestSkill(\"react\"),\n availableSources: [\n makeSource({ name: \"Agents Inc\", type: \"public\" }),\n makeSource({ name: \"Acme Corp\", type: \"private\", primary: true }),\n ],\n };\n\n const matrix = createMockMatrix({ \"web-framework-react\": skill });\n\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\" as SkillId, true);\n\n const rows = store.buildSourceRows(matrix);\n expect(rows).toHaveLength(1);\n expect(rows[0].options[0].id).toBe(\"Acme Corp\");\n expect(rows[0].options[1].id).toBe(\"Agents Inc\");\n });\n\n it(\"should sort default public marketplace before third-party sources\", () => {\n const store = useWizardStore.getState();\n\n const skill = {\n ...getTestSkill(\"react\"),\n availableSources: [\n makeSource({ name: \"Extra Corp\", type: \"private\" }),\n makeSource({ name: \"Agents Inc\", type: \"public\" }),\n ],\n };\n\n const matrix = createMockMatrix({ \"web-framework-react\": skill });\n\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\" as SkillId, true);\n\n const rows = store.buildSourceRows(matrix);\n expect(rows).toHaveLength(1);\n expect(rows[0].options[0].id).toBe(\"Agents Inc\");\n expect(rows[0].options[1].id).toBe(\"Extra Corp\");\n });\n\n it(\"should sort all four tiers in correct order\", () => {\n const store = useWizardStore.getState();\n\n const skill = {\n ...getTestSkill(\"react\"),\n availableSources: [\n makeSource({ name: \"Extra Corp\", type: \"private\" }),\n makeSource({ name: \"Agents Inc\", type: \"public\" }),\n makeSource({ name: \"Acme Corp\", type: \"private\", primary: true }),\n makeSource({ name: \"local\", type: \"local\", installed: true, installMode: \"local\" }),\n ],\n };\n\n const matrix = createMockMatrix({ \"web-framework-react\": skill });\n\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\" as SkillId, true);\n\n const rows = store.buildSourceRows(matrix);\n expect(rows).toHaveLength(1);\n\n const sourceNames = rows[0].options.map((opt) => opt.id);\n expect(sourceNames).toEqual([\"local\", \"Acme Corp\", \"Agents Inc\", \"Extra Corp\"]);\n });\n });\n\n describe(\"agent selection\", () => {\n it(\"should start with empty selectedAgents\", () => {\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).toEqual([]);\n });\n\n it(\"should toggle agent on\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).toContain(\"web-developer\");\n });\n\n it(\"should toggle agent off\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n store.toggleAgent(\"web-developer\");\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).not.toContain(\"web-developer\");\n });\n\n it(\"should allow multiple agents to be selected\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n store.toggleAgent(\"api-developer\");\n store.toggleAgent(\"web-reviewer\");\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).toEqual([\"web-developer\", \"api-developer\", \"web-reviewer\"]);\n });\n\n it(\"should reset selectedAgents on reset\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n store.reset();\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).toEqual([]);\n });\n });\n\n describe(\"preselectAgentsFromDomains\", () => {\n it(\"should preselect web-related agents when web domain is selected\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.preselectAgentsFromDomains();\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).toContain(\"web-developer\");\n expect(selectedAgents).toContain(\"web-reviewer\");\n expect(selectedAgents).toContain(\"web-researcher\");\n expect(selectedAgents).toContain(\"web-tester\");\n expect(selectedAgents).toContain(\"web-pm\");\n expect(selectedAgents).toContain(\"web-architecture\");\n });\n\n it(\"should preselect api-related agents when api domain is selected\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"api\");\n store.preselectAgentsFromDomains();\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).toContain(\"api-developer\");\n expect(selectedAgents).toContain(\"api-reviewer\");\n expect(selectedAgents).toContain(\"api-researcher\");\n expect(selectedAgents).not.toContain(\"web-developer\");\n });\n\n it(\"should preselect cli agents when cli domain is selected\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"cli\");\n store.preselectAgentsFromDomains();\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).toContain(\"cli-developer\");\n expect(selectedAgents).toContain(\"cli-tester\");\n expect(selectedAgents).toContain(\"cli-reviewer\");\n expect(selectedAgents).toContain(\"cli-migrator\");\n });\n\n it(\"should never include optional agents regardless of domains\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.toggleDomain(\"cli\");\n store.preselectAgentsFromDomains();\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).not.toContain(\"agent-summoner\");\n expect(selectedAgents).not.toContain(\"skill-summoner\");\n expect(selectedAgents).not.toContain(\"documentor\");\n expect(selectedAgents).not.toContain(\"pattern-scout\");\n expect(selectedAgents).not.toContain(\"web-pattern-critique\");\n });\n\n it(\"should return empty agents when no domains are selected\", () => {\n const store = useWizardStore.getState();\n store.preselectAgentsFromDomains();\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).toEqual([]);\n });\n\n it(\"should produce union of agents for multiple domains\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.preselectAgentsFromDomains();\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).toContain(\"web-developer\");\n expect(selectedAgents).toContain(\"api-developer\");\n expect(selectedAgents).toContain(\"web-reviewer\");\n expect(selectedAgents).toContain(\"api-reviewer\");\n });\n\n it(\"should not preselect api agents when only web domain is selected\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.preselectAgentsFromDomains();\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).toContain(\"web-developer\");\n expect(selectedAgents).not.toContain(\"api-developer\");\n expect(selectedAgents).not.toContain(\"api-reviewer\");\n });\n\n it(\"should return sorted agents\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.preselectAgentsFromDomains();\n\n const { selectedAgents } = useWizardStore.getState();\n const sorted = [...selectedAgents].sort();\n expect(selectedAgents).toEqual(sorted);\n });\n\n it(\"should replace previous agent selection\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"documentor\");\n store.toggleDomain(\"web\");\n store.preselectAgentsFromDomains();\n\n const { selectedAgents } = useWizardStore.getState();\n // preselectAgentsFromDomains replaces the array entirely\n expect(selectedAgents).not.toContain(\"documentor\");\n });\n });\n\n describe(\"step progress with agents step\", () => {\n it(\"should include agents in completed steps when on confirm\", () => {\n const store = useWizardStore.getState();\n store.setApproach(\"scratch\");\n store.setStep(\"build\");\n store.setStep(\"sources\");\n store.setStep(\"agents\");\n store.setStep(\"confirm\");\n\n const { completedSteps } = store.getStepProgress();\n expect(completedSteps).toContain(\"agents\");\n expect(completedSteps).toContain(\"sources\");\n expect(completedSteps).toContain(\"build\");\n });\n\n it(\"should include sources in completed steps when on agents step\", () => {\n const store = useWizardStore.getState();\n store.setApproach(\"scratch\");\n store.setStep(\"build\");\n store.setStep(\"sources\");\n store.setStep(\"agents\");\n\n const { completedSteps } = store.getStepProgress();\n expect(completedSteps).toContain(\"build\");\n expect(completedSteps).toContain(\"sources\");\n expect(completedSteps).not.toContain(\"agents\");\n });\n\n it(\"should skip agents step when using stack defaults\", () => {\n const store = useWizardStore.getState();\n store.setApproach(\"stack\");\n store.selectStack(\"nextjs-fullstack\");\n store.setStackAction(\"defaults\");\n store.setStep(\"confirm\");\n\n const { skippedSteps } = store.getStepProgress();\n expect(skippedSteps).toContain(\"agents\");\n expect(skippedSteps).toContain(\"build\");\n expect(skippedSteps).toContain(\"sources\");\n });\n });\n});\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/cli/stores/wizard-store.test.ts"],"sourcesContent":["import { describe, it, expect, beforeEach, afterEach } from \"vitest\";\nimport { useWizardStore } from \"./wizard-store\";\nimport { DEFAULT_PRESELECTED_SKILLS } from \"../consts\";\nimport { createMockMatrix, getTestSkill } from \"../lib/__tests__/helpers\";\nimport { typedKeys } from \"../utils/typed-object\";\nimport type {\n AgentName,\n Domain,\n SkillAssignment,\n SkillId,\n SkillSource,\n Subcategory,\n} from \"../types\";\n\nfunction sa(id: SkillId, preloaded = false): SkillAssignment {\n return { id, preloaded };\n}\n\ndescribe(\"WizardStore\", () => {\n beforeEach(() => {\n useWizardStore.getState().reset();\n });\n\n describe(\"initial state\", () => {\n it(\"should start at stack step\", () => {\n const { step } = useWizardStore.getState();\n expect(step).toBe(\"stack\");\n });\n\n it(\"should have no approach selected\", () => {\n const { approach } = useWizardStore.getState();\n expect(approach).toBeNull();\n });\n\n it(\"should have no selected stack\", () => {\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBeNull();\n });\n\n it(\"should default to local install mode\", () => {\n const { installMode } = useWizardStore.getState();\n expect(installMode).toBe(\"local\");\n });\n\n it(\"should have empty navigation history\", () => {\n const { history } = useWizardStore.getState();\n expect(history).toEqual([]);\n });\n\n it(\"should have empty selected domains\", () => {\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).toEqual([]);\n });\n\n it(\"should have empty domain selections\", () => {\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections).toEqual({});\n });\n });\n\n describe(\"step navigation\", () => {\n it(\"should update step with setStep\", () => {\n const store = useWizardStore.getState();\n store.setStep(\"stack\");\n\n const { step } = useWizardStore.getState();\n expect(step).toBe(\"stack\");\n });\n\n it(\"should track navigation history when setting step\", () => {\n const store = useWizardStore.getState();\n\n store.setStep(\"build\");\n store.setStep(\"confirm\");\n\n const { history } = useWizardStore.getState();\n expect(history).toEqual([\"stack\", \"build\"]);\n });\n\n it(\"should go back through history\", () => {\n const store = useWizardStore.getState();\n\n store.setStep(\"build\");\n store.setStep(\"confirm\");\n store.goBack();\n\n const { step, history } = useWizardStore.getState();\n expect(step).toBe(\"build\");\n expect(history).toEqual([\"stack\"]);\n });\n\n it(\"when goBack is called with empty history, should return to stack step\", () => {\n const store = useWizardStore.getState();\n\n store.setStep(\"build\");\n store.goBack();\n store.goBack();\n\n const { step } = useWizardStore.getState();\n expect(step).toBe(\"stack\");\n });\n });\n\n describe(\"approach selection\", () => {\n it(\"should set approach to stack\", () => {\n const store = useWizardStore.getState();\n store.setApproach(\"stack\");\n\n const { approach } = useWizardStore.getState();\n expect(approach).toBe(\"stack\");\n });\n\n it(\"should set approach to scratch\", () => {\n const store = useWizardStore.getState();\n store.setApproach(\"scratch\");\n\n const { approach } = useWizardStore.getState();\n expect(approach).toBe(\"scratch\");\n });\n });\n\n describe(\"stack selection\", () => {\n it(\"should select stack by id\", () => {\n const store = useWizardStore.getState();\n store.selectStack(\"nextjs-fullstack\");\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBe(\"nextjs-fullstack\");\n });\n\n it(\"when selectStack is called with null, should clear previously selected stack\", () => {\n const store = useWizardStore.getState();\n store.selectStack(\"nextjs-fullstack\");\n store.selectStack(null);\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBeNull();\n });\n });\n\n describe(\"domain selection\", () => {\n it(\"should toggle domain on\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).toContain(\"web\");\n });\n\n it(\"should toggle domain off\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"web\");\n\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).not.toContain(\"web\");\n });\n\n it(\"should allow multiple domain selection\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.toggleDomain(\"cli\");\n\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).toEqual([\"web\", \"api\", \"cli\"]);\n });\n\n it(\"should remove skills from deselected domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"web-styling\", \"web-styling-scss-modules\", true);\n\n store.toggleDomain(\"web\");\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web).toBeUndefined();\n expect(store.getAllSelectedTechnologies()).toEqual([]);\n expect(store.getTechnologyCount()).toBe(0);\n });\n\n it(\"should not affect skills in other domains when deselecting a domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"api\", \"api-api\", \"api-framework-hono\", true);\n\n store.toggleDomain(\"web\");\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web).toBeUndefined();\n expect(domainSelections.api![\"api-api\"]).toEqual([\"api-framework-hono\"]);\n expect(store.getAllSelectedTechnologies()).toEqual([\"api-framework-hono\"]);\n });\n\n it(\"should not auto-select skills when toggling domain on\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web).toBeUndefined();\n expect(store.getAllSelectedTechnologies()).toEqual([]);\n });\n\n it(\"should reflect correct technology count after domain deselection\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"web-styling\", \"web-styling-scss-modules\", true);\n store.toggleTechnology(\"api\", \"api-api\", \"api-framework-hono\", true);\n\n expect(store.getTechnologyCount()).toBe(3);\n\n store.toggleDomain(\"web\");\n\n expect(store.getTechnologyCount()).toBe(1);\n expect(store.getAllSelectedTechnologies()).toEqual([\"api-framework-hono\"]);\n });\n\n it(\"should restore stack skills when re-toggling a domain ON after populateFromStack\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n web: {\n \"web-framework\": [sa(\"web-framework-react\", true)],\n \"web-client-state\": [sa(\"web-state-zustand\")],\n },\n api: { \"api-api\": [sa(\"api-framework-hono\", true)] },\n },\n };\n const categories: Partial<Record<Subcategory, { domain?: Domain }>> = {\n \"web-framework\": { domain: \"web\" },\n \"web-client-state\": { domain: \"web\" },\n \"api-api\": { domain: \"api\" },\n };\n\n store.populateFromStack(stack, categories);\n\n // Deselect web domain (clears its skills)\n store.toggleDomain(\"web\");\n expect(useWizardStore.getState().domainSelections.web).toBeUndefined();\n\n // Re-select web domain (should restore stack skills)\n store.toggleDomain(\"web\");\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web![\"web-framework\"]).toEqual([\"web-framework-react\"]);\n expect(domainSelections.web![\"web-client-state\"]).toEqual([\"web-state-zustand\"]);\n });\n\n it(\"should restore stack skills when re-toggling a domain ON after populateFromSkillIds\", () => {\n const store = useWizardStore.getState();\n\n const skills: Partial<Record<SkillId, { category: string; displayName?: string }>> = {\n \"web-framework-react\": { category: \"web-framework\", displayName: \"React\" },\n \"api-framework-hono\": { category: \"api-api\", displayName: \"Hono\" },\n };\n const categories: Partial<Record<Subcategory, { domain?: Domain }>> = {\n \"web-framework\": { domain: \"web\" },\n \"api-api\": { domain: \"api\" },\n };\n\n store.populateFromSkillIds([\"web-framework-react\", \"api-framework-hono\"], skills, categories);\n\n // Deselect web domain (clears its skills)\n store.toggleDomain(\"web\");\n expect(useWizardStore.getState().domainSelections.web).toBeUndefined();\n\n // Re-select web domain (should restore stack skills)\n store.toggleDomain(\"web\");\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web![\"web-framework\"]).toEqual([\"web-framework-react\"]);\n });\n\n it(\"should not restore skills when no stack was populated\", () => {\n const store = useWizardStore.getState();\n\n // Manually toggle domain and add skills (no stack)\n store.toggleDomain(\"web\");\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n // Deselect web domain\n store.toggleDomain(\"web\");\n\n // Re-select web domain — no stack snapshot, so no restoration\n store.toggleDomain(\"web\");\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web).toBeUndefined();\n expect(store.getAllSelectedTechnologies()).toEqual([]);\n });\n\n it(\"should not affect other domains when restoring stack skills for one domain\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n web: { \"web-framework\": [sa(\"web-framework-react\", true)] },\n api: { \"api-api\": [sa(\"api-framework-hono\", true)] },\n },\n };\n const categories: Partial<Record<Subcategory, { domain?: Domain }>> = {\n \"web-framework\": { domain: \"web\" },\n \"api-api\": { domain: \"api\" },\n };\n\n store.populateFromStack(stack, categories);\n\n // Manually change api skills\n store.toggleTechnology(\"api\", \"api-api\", \"api-framework-hono\", true); // deselect\n store.toggleTechnology(\"api\", \"api-api\", \"api-framework-express\" as SkillId, true); // select new\n\n // Toggle web off then on\n store.toggleDomain(\"web\");\n store.toggleDomain(\"web\");\n\n // Web should be restored from stack, api should keep manual changes\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web![\"web-framework\"]).toEqual([\"web-framework-react\"]);\n expect(domainSelections.api![\"api-api\"]).toEqual([\"api-framework-express\"]);\n });\n });\n\n describe(\"technology selection\", () => {\n it(\"should toggle technology in exclusive mode\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web![\"web-framework\"]).toEqual([\"web-framework-react\"]);\n });\n\n it(\"should replace technology in exclusive mode\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-vue\", true);\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web![\"web-framework\"]).toEqual([\"web-framework-vue\"]);\n });\n\n it(\"should toggle off technology in exclusive mode\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web![\"web-framework\"]).toEqual([]);\n });\n\n it(\"should allow multiple selections in non-exclusive mode\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-testing\", \"web-testing-vitest\", false);\n store.toggleTechnology(\"web\", \"web-testing\", \"web-testing-playwright-e2e\", false);\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web![\"web-testing\"]).toEqual([\n \"web-testing-vitest\",\n \"web-testing-playwright-e2e\",\n ]);\n });\n\n it(\"should toggle off technology in non-exclusive mode\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-testing\", \"web-testing-vitest\", false);\n store.toggleTechnology(\"web\", \"web-testing\", \"web-testing-playwright-e2e\", false);\n store.toggleTechnology(\"web\", \"web-testing\", \"web-testing-vitest\", false);\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web![\"web-testing\"]).toEqual([\"web-testing-playwright-e2e\"]);\n });\n });\n\n describe(\"domain navigation\", () => {\n it(\"should move to next domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n\n const result = store.nextDomain();\n\n const { currentDomainIndex } = useWizardStore.getState();\n expect(result).toBe(true);\n expect(currentDomainIndex).toBe(1);\n });\n\n it(\"when already at the last domain, should return false from nextDomain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n\n const result = store.nextDomain();\n\n expect(result).toBe(false);\n });\n\n it(\"should move to previous domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.nextDomain();\n\n const result = store.prevDomain();\n\n const { currentDomainIndex } = useWizardStore.getState();\n expect(result).toBe(true);\n expect(currentDomainIndex).toBe(0);\n });\n\n it(\"when already at the first domain, should return false from prevDomain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n\n const result = store.prevDomain();\n\n expect(result).toBe(false);\n });\n\n it(\"should get current domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.nextDomain();\n\n const domain = store.getCurrentDomain();\n expect(domain).toBe(\"api\");\n });\n\n it(\"should return null when no domains selected\", () => {\n const store = useWizardStore.getState();\n const domain = store.getCurrentDomain();\n expect(domain).toBeNull();\n });\n });\n\n describe(\"mode toggles\", () => {\n it(\"should toggle install mode to plugin\", () => {\n const store = useWizardStore.getState();\n\n store.toggleInstallMode();\n\n const { installMode } = useWizardStore.getState();\n expect(installMode).toBe(\"plugin\");\n });\n\n it(\"should toggle install mode back to local\", () => {\n const store = useWizardStore.getState();\n\n store.toggleInstallMode();\n store.toggleInstallMode();\n\n const { installMode } = useWizardStore.getState();\n expect(installMode).toBe(\"local\");\n });\n\n it(\"should toggle show labels\", () => {\n const store = useWizardStore.getState();\n\n store.toggleShowLabels();\n\n const { showLabels } = useWizardStore.getState();\n expect(showLabels).toBe(true);\n });\n\n it(\"should toggle help on\", () => {\n const store = useWizardStore.getState();\n\n store.toggleHelp();\n\n const { showHelp } = useWizardStore.getState();\n expect(showHelp).toBe(true);\n });\n\n it(\"should toggle help off (show then hide)\", () => {\n const store = useWizardStore.getState();\n\n store.toggleHelp();\n store.toggleHelp();\n\n const { showHelp } = useWizardStore.getState();\n expect(showHelp).toBe(false);\n });\n\n it(\"should toggle settings on\", () => {\n const store = useWizardStore.getState();\n\n store.toggleSettings();\n\n const { showSettings } = useWizardStore.getState();\n expect(showSettings).toBe(true);\n });\n\n it(\"should toggle settings off (show then hide)\", () => {\n const store = useWizardStore.getState();\n\n store.toggleSettings();\n store.toggleSettings();\n\n const { showSettings } = useWizardStore.getState();\n expect(showSettings).toBe(false);\n });\n\n it(\"should start with showHelp false\", () => {\n const { showHelp } = useWizardStore.getState();\n expect(showHelp).toBe(false);\n });\n\n it(\"should start with showSettings false\", () => {\n const { showSettings } = useWizardStore.getState();\n expect(showSettings).toBe(false);\n });\n\n it(\"should reset showHelp to false after reset\", () => {\n const store = useWizardStore.getState();\n store.toggleHelp();\n store.reset();\n\n const { showHelp } = useWizardStore.getState();\n expect(showHelp).toBe(false);\n });\n\n it(\"should reset showSettings to false after reset\", () => {\n const store = useWizardStore.getState();\n store.toggleSettings();\n store.reset();\n\n const { showSettings } = useWizardStore.getState();\n expect(showSettings).toBe(false);\n });\n });\n\n describe(\"install mode auto-defaulting\", () => {\n it(\"should default installMode to plugin when set via setState (marketplace available)\", () => {\n // Simulates what Wizard component does when initialInstallMode=\"plugin\"\n useWizardStore.setState({ installMode: \"plugin\" });\n\n const { installMode } = useWizardStore.getState();\n expect(installMode).toBe(\"plugin\");\n });\n\n it(\"should keep installMode as local when set via setState (no marketplace)\", () => {\n // Simulates what Wizard component does when initialInstallMode=\"local\"\n useWizardStore.setState({ installMode: \"local\" });\n\n const { installMode } = useWizardStore.getState();\n expect(installMode).toBe(\"local\");\n });\n\n it(\"should allow toggling installMode after auto-defaulting to plugin\", () => {\n // Simulates: marketplace sets plugin, then user presses P to switch back\n useWizardStore.setState({ installMode: \"plugin\" });\n useWizardStore.getState().toggleInstallMode();\n\n const { installMode } = useWizardStore.getState();\n expect(installMode).toBe(\"local\");\n });\n\n it(\"should reset installMode to local after reset even if previously set to plugin\", () => {\n useWizardStore.setState({ installMode: \"plugin\" });\n useWizardStore.getState().reset();\n\n const { installMode } = useWizardStore.getState();\n expect(installMode).toBe(\"local\");\n });\n });\n\n describe(\"computed getters\", () => {\n it(\"should get all selected technologies\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"web-styling\", \"web-styling-scss-modules\", true);\n store.toggleTechnology(\"api\", \"api-api\", \"api-framework-hono\", true);\n\n const technologies = store.getAllSelectedTechnologies();\n expect(technologies).toContain(\"web-framework-react\");\n expect(technologies).toContain(\"web-styling-scss-modules\");\n expect(technologies).toContain(\"api-framework-hono\");\n });\n\n it(\"should get default methodology skills\", () => {\n const store = useWizardStore.getState();\n\n const skills = store.getDefaultMethodologySkills();\n\n for (const skill of DEFAULT_PRESELECTED_SKILLS) {\n expect(skills).toContain(skill);\n }\n });\n\n it(\"should get selected technologies per domain\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"web-styling\", \"web-styling-scss-modules\", true);\n store.toggleTechnology(\"api\", \"api-api\", \"api-framework-hono\", true);\n\n const perDomain = store.getSelectedTechnologiesPerDomain();\n expect(perDomain.web).toEqual([\"web-framework-react\", \"web-styling-scss-modules\"]);\n expect(perDomain.api).toEqual([\"api-framework-hono\"]);\n expect(perDomain.cli).toBeUndefined();\n });\n\n it(\"should return empty object for getSelectedTechnologiesPerDomain with no selections\", () => {\n const store = useWizardStore.getState();\n const perDomain = store.getSelectedTechnologiesPerDomain();\n expect(perDomain).toEqual({});\n });\n\n it(\"should omit domains with empty subcategory arrays from getSelectedTechnologiesPerDomain\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true); // toggle off\n\n const perDomain = store.getSelectedTechnologiesPerDomain();\n expect(perDomain.web).toBeUndefined();\n });\n\n it(\"should get technology count\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"web-styling\", \"web-styling-scss-modules\", true);\n store.toggleTechnology(\"api\", \"api-api\", \"api-framework-hono\", true);\n\n expect(store.getTechnologyCount()).toBe(3);\n });\n\n it(\"should return 0 for getTechnologyCount with no selections\", () => {\n const store = useWizardStore.getState();\n expect(store.getTechnologyCount()).toBe(0);\n });\n });\n\n describe(\"navigation guards\", () => {\n it(\"canGoToNextDomain should return true when not at last domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n\n expect(store.canGoToNextDomain()).toBe(true);\n });\n\n it(\"canGoToNextDomain should return false when at last domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n\n expect(store.canGoToNextDomain()).toBe(false);\n });\n\n it(\"canGoToNextDomain should return false with no domains\", () => {\n const store = useWizardStore.getState();\n expect(store.canGoToNextDomain()).toBe(false);\n });\n\n it(\"canGoToPreviousDomain should return false when at first domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n\n expect(store.canGoToPreviousDomain()).toBe(false);\n });\n\n it(\"canGoToPreviousDomain should return true when past first domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.nextDomain();\n\n expect(store.canGoToPreviousDomain()).toBe(true);\n });\n\n it(\"canGoToPreviousDomain should return false with no domains\", () => {\n const store = useWizardStore.getState();\n expect(store.canGoToPreviousDomain()).toBe(false);\n });\n });\n\n describe(\"reset\", () => {\n it(\"should reset to initial state\", () => {\n const store = useWizardStore.getState();\n\n store.setStep(\"stack\");\n store.setApproach(\"scratch\");\n store.selectStack(\"nextjs-fullstack\");\n store.toggleDomain(\"web\");\n\n store.reset();\n\n const state = useWizardStore.getState();\n expect(state.step).toBe(\"stack\");\n expect(state.approach).toBeNull();\n expect(state.selectedStackId).toBeNull();\n expect(state.selectedDomains).toEqual([]);\n expect(state.installMode).toBe(\"local\");\n expect(state.history).toEqual([]);\n });\n });\n\n describe(\"populateFromStack\", () => {\n it(\"should set selectedDomains to all domains regardless of stack contents\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n web: { \"web-framework\": [sa(\"web-framework-react\", true)] },\n },\n };\n const categories: Partial<Record<Subcategory, { domain?: Domain }>> = {\n \"web-framework\": { domain: \"web\" },\n };\n\n store.populateFromStack(stack, categories);\n\n const { selectedDomains, domainSelections } = useWizardStore.getState();\n\n expect(selectedDomains).toEqual([\"web\", \"api\", \"mobile\", \"cli\", \"shared\"]);\n\n expect(domainSelections.web).toBeDefined();\n expect(domainSelections.web![\"web-framework\"]).toEqual([\"web-framework-react\"]);\n expect(domainSelections.api).toBeUndefined();\n });\n\n it(\"should populate domainSelections from stack agents\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n web: {\n \"web-framework\": [sa(\"web-framework-react\", true)],\n \"web-client-state\": [sa(\"web-state-zustand\")],\n },\n api: { \"api-api\": [sa(\"api-framework-hono\", true)] },\n },\n };\n const categories: Partial<Record<Subcategory, { domain?: Domain }>> = {\n \"web-framework\": { domain: \"web\" },\n \"web-client-state\": { domain: \"web\" },\n \"api-api\": { domain: \"api\" },\n };\n\n store.populateFromStack(stack, categories);\n\n const { domainSelections } = useWizardStore.getState();\n\n expect(domainSelections.web![\"web-framework\"]).toEqual([\"web-framework-react\"]);\n expect(domainSelections.web![\"web-client-state\"]).toEqual([\"web-state-zustand\"]);\n expect(domainSelections.api![\"api-api\"]).toEqual([\"api-framework-hono\"]);\n });\n\n it(\"should skip entries without a domain\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n misc: { \"shared-methodology\": [sa(\"meta-methodology-vitest\" as SkillId)] },\n },\n };\n const categories: Partial<Record<Subcategory, { domain?: Domain }>> = {\n \"shared-methodology\": {},\n };\n\n store.populateFromStack(stack, categories);\n\n const { domainSelections } = useWizardStore.getState();\n\n expect(typedKeys(domainSelections)).toHaveLength(0);\n });\n\n it(\"should populate multiple skills from array-valued subcategories\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n \"pattern-scout\": {\n \"shared-methodology\": [\n sa(\"meta-methodology-investigation-requirements\", true),\n sa(\"meta-methodology-anti-over-engineering\", true),\n sa(\"meta-methodology-success-criteria\", true),\n ],\n },\n },\n };\n const categories: Partial<Record<Subcategory, { domain?: Domain }>> = {\n \"shared-methodology\": { domain: \"shared\" },\n };\n\n store.populateFromStack(stack, categories);\n\n const { domainSelections } = useWizardStore.getState();\n\n expect(domainSelections.shared![\"shared-methodology\"]).toEqual([\n \"meta-methodology-investigation-requirements\",\n \"meta-methodology-anti-over-engineering\",\n \"meta-methodology-success-criteria\",\n ]);\n });\n\n it(\"should handle single-element and multi-element arrays across agents\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n web: {\n \"web-framework\": [sa(\"web-framework-react\", true)],\n \"shared-methodology\": [\n sa(\"meta-methodology-investigation-requirements\", true),\n sa(\"meta-methodology-anti-over-engineering\", true),\n ],\n },\n api: { \"api-api\": [sa(\"api-framework-hono\", true)] },\n },\n };\n const categories: Partial<Record<Subcategory, { domain?: Domain }>> = {\n \"web-framework\": { domain: \"web\" },\n \"shared-methodology\": { domain: \"shared\" },\n \"api-api\": { domain: \"api\" },\n };\n\n store.populateFromStack(stack, categories);\n\n const { domainSelections } = useWizardStore.getState();\n\n expect(domainSelections.web![\"web-framework\"]).toEqual([\"web-framework-react\"]);\n expect(domainSelections.shared![\"shared-methodology\"]).toEqual([\n \"meta-methodology-investigation-requirements\",\n \"meta-methodology-anti-over-engineering\",\n ]);\n expect(domainSelections.api![\"api-api\"]).toEqual([\"api-framework-hono\"]);\n });\n\n it(\"should deduplicate skills from arrays across multiple agents\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n agent1: {\n \"shared-methodology\": [\n sa(\"meta-methodology-investigation-requirements\", true),\n sa(\"meta-methodology-anti-over-engineering\", true),\n ],\n },\n agent2: {\n \"shared-methodology\": [\n sa(\"meta-methodology-anti-over-engineering\", true),\n sa(\"meta-methodology-success-criteria\", true),\n ],\n },\n },\n };\n const categories: Partial<Record<Subcategory, { domain?: Domain }>> = {\n \"shared-methodology\": { domain: \"shared\" },\n };\n\n store.populateFromStack(stack, categories);\n\n const { domainSelections } = useWizardStore.getState();\n\n // Should deduplicate: anti-over-engineering appears in both agents\n expect(domainSelections.shared![\"shared-methodology\"]).toEqual([\n \"meta-methodology-investigation-requirements\",\n \"meta-methodology-anti-over-engineering\",\n \"meta-methodology-success-criteria\",\n ]);\n });\n });\n\n describe(\"complex flows\", () => {\n it(\"should handle complete stack selection flow\", () => {\n const store = useWizardStore.getState();\n\n store.setApproach(\"stack\");\n store.selectStack(\"nextjs-fullstack\");\n store.setStackAction(\"customize\");\n store.setStep(\"build\");\n\n store.setStep(\"confirm\");\n\n const state = useWizardStore.getState();\n expect(state.step).toBe(\"confirm\");\n expect(state.approach).toBe(\"stack\");\n expect(state.selectedStackId).toBe(\"nextjs-fullstack\");\n expect(state.stackAction).toBe(\"customize\");\n expect(state.history).toEqual([\"stack\", \"build\"]);\n });\n\n it(\"should handle complete scratch flow\", () => {\n const store = useWizardStore.getState();\n\n store.setApproach(\"scratch\");\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.setStep(\"build\");\n\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"web-styling\", \"web-styling-scss-modules\", true);\n store.toggleTechnology(\"api\", \"api-api\", \"api-framework-hono\", true);\n store.setStep(\"confirm\");\n\n const state = useWizardStore.getState();\n expect(state.step).toBe(\"confirm\");\n expect(state.approach).toBe(\"scratch\");\n expect(state.selectedDomains).toEqual([\"web\", \"api\"]);\n expect(state.domainSelections.web![\"web-framework\"]).toEqual([\"web-framework-react\"]);\n expect(state.domainSelections.web![\"web-styling\"]).toEqual([\"web-styling-scss-modules\"]);\n expect(state.domainSelections.api![\"api-api\"]).toEqual([\"api-framework-hono\"]);\n });\n\n it(\"should preserve selections when going back\", () => {\n const store = useWizardStore.getState();\n\n store.setApproach(\"scratch\");\n store.toggleDomain(\"web\");\n store.setStep(\"build\");\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n store.goBack();\n\n const state = useWizardStore.getState();\n expect(state.selectedDomains).toContain(\"web\");\n expect(state.domainSelections.web![\"web-framework\"]).toEqual([\"web-framework-react\"]);\n });\n });\n\n describe(\"buildSourceRows sort order\", () => {\n function makeSource(overrides: Partial<SkillSource> & { name: string }): SkillSource {\n return {\n type: \"private\",\n installed: false,\n ...overrides,\n };\n }\n\n it(\"should sort local sources before scoped marketplace sources\", () => {\n const store = useWizardStore.getState();\n\n const skill = {\n ...getTestSkill(\"react\"),\n availableSources: [\n makeSource({ name: \"Acme Corp\", type: \"private\", primary: true }),\n makeSource({ name: \"local\", type: \"local\", installed: true, installMode: \"local\" }),\n ],\n };\n\n const matrix = createMockMatrix({ \"web-framework-react\": skill });\n\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\" as SkillId, true);\n\n const rows = store.buildSourceRows(matrix);\n expect(rows).toHaveLength(1);\n expect(rows[0].options[0].id).toBe(\"local\");\n expect(rows[0].options[1].id).toBe(\"Acme Corp\");\n });\n\n it(\"should sort scoped marketplace before default public marketplace\", () => {\n const store = useWizardStore.getState();\n\n const skill = {\n ...getTestSkill(\"react\"),\n availableSources: [\n makeSource({ name: \"Agents Inc\", type: \"public\" }),\n makeSource({ name: \"Acme Corp\", type: \"private\", primary: true }),\n ],\n };\n\n const matrix = createMockMatrix({ \"web-framework-react\": skill });\n\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\" as SkillId, true);\n\n const rows = store.buildSourceRows(matrix);\n expect(rows).toHaveLength(1);\n expect(rows[0].options[0].id).toBe(\"Acme Corp\");\n expect(rows[0].options[1].id).toBe(\"Agents Inc\");\n });\n\n it(\"should sort default public marketplace before third-party sources\", () => {\n const store = useWizardStore.getState();\n\n const skill = {\n ...getTestSkill(\"react\"),\n availableSources: [\n makeSource({ name: \"Extra Corp\", type: \"private\" }),\n makeSource({ name: \"Agents Inc\", type: \"public\" }),\n ],\n };\n\n const matrix = createMockMatrix({ \"web-framework-react\": skill });\n\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\" as SkillId, true);\n\n const rows = store.buildSourceRows(matrix);\n expect(rows).toHaveLength(1);\n expect(rows[0].options[0].id).toBe(\"Agents Inc\");\n expect(rows[0].options[1].id).toBe(\"Extra Corp\");\n });\n\n it(\"should sort all four tiers in correct order\", () => {\n const store = useWizardStore.getState();\n\n const skill = {\n ...getTestSkill(\"react\"),\n availableSources: [\n makeSource({ name: \"Extra Corp\", type: \"private\" }),\n makeSource({ name: \"Agents Inc\", type: \"public\" }),\n makeSource({ name: \"Acme Corp\", type: \"private\", primary: true }),\n makeSource({ name: \"local\", type: \"local\", installed: true, installMode: \"local\" }),\n ],\n };\n\n const matrix = createMockMatrix({ \"web-framework-react\": skill });\n\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\" as SkillId, true);\n\n const rows = store.buildSourceRows(matrix);\n expect(rows).toHaveLength(1);\n\n const sourceNames = rows[0].options.map((opt) => opt.id);\n expect(sourceNames).toEqual([\"local\", \"Acme Corp\", \"Agents Inc\", \"Extra Corp\"]);\n });\n });\n\n describe(\"agent selection\", () => {\n it(\"should start with empty selectedAgents\", () => {\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).toEqual([]);\n });\n\n it(\"should toggle agent on\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).toContain(\"web-developer\");\n });\n\n it(\"should toggle agent off\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n store.toggleAgent(\"web-developer\");\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).not.toContain(\"web-developer\");\n });\n\n it(\"should allow multiple agents to be selected\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n store.toggleAgent(\"api-developer\");\n store.toggleAgent(\"web-reviewer\");\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).toEqual([\"web-developer\", \"api-developer\", \"web-reviewer\"]);\n });\n\n it(\"should reset selectedAgents on reset\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n store.reset();\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).toEqual([]);\n });\n });\n\n describe(\"preselectAgentsFromDomains\", () => {\n it(\"should preselect web-related agents when web domain is selected\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.preselectAgentsFromDomains();\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).toContain(\"web-developer\");\n expect(selectedAgents).toContain(\"web-reviewer\");\n expect(selectedAgents).toContain(\"web-researcher\");\n expect(selectedAgents).toContain(\"web-tester\");\n expect(selectedAgents).toContain(\"web-pm\");\n expect(selectedAgents).toContain(\"web-architecture\");\n });\n\n it(\"should preselect api-related agents when api domain is selected\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"api\");\n store.preselectAgentsFromDomains();\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).toContain(\"api-developer\");\n expect(selectedAgents).toContain(\"api-reviewer\");\n expect(selectedAgents).toContain(\"api-researcher\");\n expect(selectedAgents).not.toContain(\"web-developer\");\n });\n\n it(\"should preselect cli agents when cli domain is selected\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"cli\");\n store.preselectAgentsFromDomains();\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).toContain(\"cli-developer\");\n expect(selectedAgents).toContain(\"cli-tester\");\n expect(selectedAgents).toContain(\"cli-reviewer\");\n });\n\n it(\"should never include optional agents regardless of domains\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.toggleDomain(\"cli\");\n store.preselectAgentsFromDomains();\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).not.toContain(\"agent-summoner\");\n expect(selectedAgents).not.toContain(\"skill-summoner\");\n expect(selectedAgents).not.toContain(\"documentor\");\n expect(selectedAgents).not.toContain(\"pattern-scout\");\n expect(selectedAgents).not.toContain(\"web-pattern-critique\");\n });\n\n it(\"should return empty agents when no domains are selected\", () => {\n const store = useWizardStore.getState();\n store.preselectAgentsFromDomains();\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).toEqual([]);\n });\n\n it(\"should produce union of agents for multiple domains\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.preselectAgentsFromDomains();\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).toContain(\"web-developer\");\n expect(selectedAgents).toContain(\"api-developer\");\n expect(selectedAgents).toContain(\"web-reviewer\");\n expect(selectedAgents).toContain(\"api-reviewer\");\n });\n\n it(\"should not preselect api agents when only web domain is selected\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.preselectAgentsFromDomains();\n\n const { selectedAgents } = useWizardStore.getState();\n expect(selectedAgents).toContain(\"web-developer\");\n expect(selectedAgents).not.toContain(\"api-developer\");\n expect(selectedAgents).not.toContain(\"api-reviewer\");\n });\n\n it(\"should return sorted agents\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.preselectAgentsFromDomains();\n\n const { selectedAgents } = useWizardStore.getState();\n const sorted = [...selectedAgents].sort();\n expect(selectedAgents).toEqual(sorted);\n });\n\n it(\"should replace previous agent selection\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"documentor\");\n store.toggleDomain(\"web\");\n store.preselectAgentsFromDomains();\n\n const { selectedAgents } = useWizardStore.getState();\n // preselectAgentsFromDomains replaces the array entirely\n expect(selectedAgents).not.toContain(\"documentor\");\n });\n });\n\n describe(\"step progress with agents step\", () => {\n it(\"should include agents in completed steps when on confirm\", () => {\n const store = useWizardStore.getState();\n store.setApproach(\"scratch\");\n store.setStep(\"build\");\n store.setStep(\"sources\");\n store.setStep(\"agents\");\n store.setStep(\"confirm\");\n\n const { completedSteps } = store.getStepProgress();\n expect(completedSteps).toContain(\"agents\");\n expect(completedSteps).toContain(\"sources\");\n expect(completedSteps).toContain(\"build\");\n });\n\n it(\"should include sources in completed steps when on agents step\", () => {\n const store = useWizardStore.getState();\n store.setApproach(\"scratch\");\n store.setStep(\"build\");\n store.setStep(\"sources\");\n store.setStep(\"agents\");\n\n const { completedSteps } = store.getStepProgress();\n expect(completedSteps).toContain(\"build\");\n expect(completedSteps).toContain(\"sources\");\n expect(completedSteps).not.toContain(\"agents\");\n });\n\n it(\"should skip agents step when using stack defaults\", () => {\n const store = useWizardStore.getState();\n store.setApproach(\"stack\");\n store.selectStack(\"nextjs-fullstack\");\n store.setStackAction(\"defaults\");\n store.setStep(\"confirm\");\n\n const { skippedSteps } = store.getStepProgress();\n expect(skippedSteps).toContain(\"agents\");\n expect(skippedSteps).toContain(\"build\");\n expect(skippedSteps).toContain(\"sources\");\n });\n });\n});\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agents-inc/cli",
3
- "version": "0.47.0",
3
+ "version": "0.50.0",
4
4
  "description": "CLI for managing Agents Inc. skills, stacks, and agents for Claude Code",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -69,6 +69,7 @@
69
69
  "agentsinc": "node dist/index.js",
70
70
  "agentsinc:dev": "bun src/cli/index.ts",
71
71
  "test": "vitest run",
72
+ "test:e2e": "vitest --config e2e/vitest.config.ts --run",
72
73
  "test:watch": "vitest",
73
74
  "test:coverage": "vitest run --coverage",
74
75
  "format": "prettier --write .",
@@ -116,16 +117,19 @@
116
117
  "zustand": "^5.0.0"
117
118
  },
118
119
  "devDependencies": {
120
+ "@lydell/node-pty": "^1.2.0-beta.3",
119
121
  "@oclif/test": "^4.0.0",
120
122
  "@types/diff": "^8.0.0",
121
123
  "@types/fs-extra": "^11.0.0",
122
124
  "@types/node": "^22.0.0",
123
125
  "@types/react": "^18.2.0",
124
126
  "@vitest/coverage-v8": "^4.0.18",
127
+ "@xterm/headless": "^6.0.0",
125
128
  "husky": "^9.1.7",
126
129
  "ink-testing-library": "^4.0.0",
127
130
  "lint-staged": "^15.2.0",
128
131
  "prettier": "^3.2.0",
132
+ "tree-kill": "^1.2.2",
129
133
  "tsup": "^8.0.0",
130
134
  "typescript": "^5.7.0",
131
135
  "vitest": "^4.0.18"
@@ -8,7 +8,7 @@
8
8
 
9
9
  **(You MUST verify all edits were actually written by re-reading files after editing)**
10
10
 
11
- **(You MUST create agents as directories at `src/agents/{category}/{agent-name}/` with all required files: agent.yaml, intro.md, workflow.md, critical-requirements.md, critical-reminders.md, output-format.md, examples.md - NEVER in `.claude/agents/`)**
11
+ **(You MUST create agents as directories at `src/agents/{category}/{agent-name}/` with all required files: metadata.yaml, intro.md, workflow.md, critical-requirements.md, critical-reminders.md, output-format.md, examples.md - NEVER in `.claude/agents/`)**
12
12
 
13
13
  **(You MUST add agent configuration to `.claude-src/config.yaml`)**
14
14
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  **(You MUST verify all edits were actually written by re-reading files after editing)**
10
10
 
11
- **(You MUST create agents as directories at `src/agents/{category}/{agent-name}/` with all required files: agent.yaml, intro.md, workflow.md, critical-requirements.md, critical-reminders.md, output-format.md, examples.md - NEVER in `.claude/agents/`)**
11
+ **(You MUST create agents as directories at `src/agents/{category}/{agent-name}/` with all required files: metadata.yaml, intro.md, workflow.md, critical-requirements.md, critical-reminders.md, output-format.md, examples.md - NEVER in `.claude/agents/`)**
12
12
 
13
13
  **(You MUST add agent configuration to `.claude-src/config.yaml` - agents won't compile without config entries)**
14
14
 
@@ -89,10 +89,10 @@ Your job is **surgical implementation**: read the spec, examine the patterns, im
89
89
  **Failure to follow these rules will produce inconsistent code.**
90
90
  ```
91
91
 
92
- ### Step 6: Create agent.yaml
92
+ ### Step 6: Create metadata.yaml
93
93
 
94
94
  ```yaml
95
- # src/agents/developer/example-developer/agent.yaml
95
+ # src/agents/developer/example-developer/metadata.yaml
96
96
  $schema: ../../../schemas/agent.schema.json
97
97
  id: example-developer
98
98
  title: Example Developer Agent
@@ -10,7 +10,7 @@ Provide your agent definition in this structure:
10
10
  **Category:** [developer | reviewer | researcher | planning | pattern | meta | tester]
11
11
  **Purpose:** [one sentence]
12
12
 
13
- ### agent.yaml
13
+ ### metadata.yaml
14
14
 
15
15
  ```yaml
16
16
  $schema: ../../../schemas/agent.schema.json
@@ -250,7 +250,7 @@ The system compiles modular source files into standalone agent markdown using Ty
250
250
  ```
251
251
  src/
252
252
  ├── agents/{category}/{agent-name}/ # Agent source files (organized by category)
253
- │ ├── agent.yaml # REQUIRED: Agent metadata (id, title, description, model, tools)
253
+ │ ├── metadata.yaml # REQUIRED: Agent metadata (id, title, description, model, tools)
254
254
  │ ├── intro.md # REQUIRED: Role definition (NO <role> tags - template adds them)
255
255
  │ ├── workflow.md # REQUIRED: Agent-specific workflow and processes
256
256
  │ ├── critical-requirements.md # REQUIRED: Top-of-file MUST rules (NO XML wrapper - template adds it)
@@ -426,7 +426,7 @@ Boundaries:
426
426
  **Directory Structure Rules:**
427
427
 
428
428
  - **Source directory:** `src/agents/{category}/{agent-name}/` (relative to project root)
429
- - **Required files:** `agent.yaml`, `intro.md`, `workflow.md`, `critical-requirements.md`, `critical-reminders.md`, `output-format.md`, `examples.md`
429
+ - **Required files:** `metadata.yaml`, `intro.md`, `workflow.md`, `critical-requirements.md`, `critical-reminders.md`, `output-format.md`, `examples.md`
430
430
  - **DO NOT create files in `.claude/agents/`** - That directory is for compiled output only
431
431
 
432
432
  **Agent Categories:**
@@ -438,7 +438,6 @@ Boundaries:
438
438
  - `pattern/` - Pattern discovery agents (pattern-scout, web-pattern-critique)
439
439
  - `meta/` - Meta-level agents (agent-summoner, skill-summoner, documentor)
440
440
  - `tester/` - Testing agents (web-tester, cli-tester)
441
- - `migration/` - Migration agents (cli-migrator)
442
441
 
443
442
  **Directory structure:**
444
443
 
@@ -1252,7 +1251,7 @@ stack:
1252
1251
  <creation_checklist>
1253
1252
  **Directory and Files:**
1254
1253
  - [ ] Agent directory created at `src/agents/{category}/{agent-name}/`
1255
- - [ ] Has `agent.yaml` with metadata (REQUIRED)
1254
+ - [ ] Has `metadata.yaml` with metadata (REQUIRED)
1256
1255
  - [ ] Has `intro.md` with expansion modifiers (REQUIRED - NO <role> tags)
1257
1256
  - [ ] Has `workflow.md` with semantic XML sections (REQUIRED)
1258
1257
  - [ ] Has `critical-requirements.md` (REQUIRED - NO XML wrapper tags)
@@ -1265,7 +1264,7 @@ stack:
1265
1264
  - [ ] Skill assignments added to `.claude-src/config.yaml` under agent name
1266
1265
 
1267
1266
  **Source File Content:**
1268
- - [ ] `agent.yaml` has id, title, description, model, tools
1267
+ - [ ] `metadata.yaml` has id, title, description, model, tools
1269
1268
  - [ ] `intro.md` has expansion modifiers ("comprehensive and thorough")
1270
1269
  - [ ] `intro.md` has NO `<role>` tags (template adds them)
1271
1270
  - [ ] `workflow.md` has `<self_correction_triggers>` section
@@ -1449,7 +1448,7 @@ Result: Wrong location or old format.
1449
1448
  ```markdown
1450
1449
  mkdir -p src/agents/{category}/my-agent/
1451
1450
 
1452
- # Then create required files: agent.yaml, intro.md, workflow.md
1451
+ # Then create required files: metadata.yaml, intro.md, workflow.md
1453
1452
 
1454
1453
  # Then create required files: critical-requirements.md, critical-reminders.md, output-format.md, examples.md
1455
1454
  ```
@@ -1503,7 +1502,6 @@ Output formats are determined by the file system with cascading resolution:
1503
1502
  | tester | web-tester, cli-tester |
1504
1503
  | pattern | pattern-scout, web-pattern-critique |
1505
1504
  | meta | documentor, agent-summoner, skill-summoner |
1506
- | migration | cli-migrator |
1507
1505
 
1508
1506
  ---
1509
1507
 
@@ -6,6 +6,7 @@ model: opus
6
6
  tools:
7
7
  - Read
8
8
  - Write
9
+ - Edit
9
10
  - Glob
10
11
  - Grep
11
12
  - Bash
@@ -2,7 +2,7 @@
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "schemas/agent.schema.json",
4
4
  "title": "Agent Definition",
5
- "description": "Schema for agent.yaml files defining Claude Code agents.",
5
+ "description": "Schema for agent metadata.yaml files defining Claude Code agents.",
6
6
  "type": "object",
7
7
  "properties": {
8
8
  "$schema": {
@@ -8,14 +8,11 @@
8
8
  "category": {
9
9
  "type": "string"
10
10
  },
11
- "categoryExclusive": {
12
- "type": "boolean"
13
- },
14
11
  "author": {
15
12
  "type": "string",
16
13
  "pattern": "^@[a-z][a-z0-9-]*$"
17
14
  },
18
- "cliName": {
15
+ "displayName": {
19
16
  "type": "string",
20
17
  "minLength": 1,
21
18
  "maxLength": 30
@@ -109,6 +106,6 @@
109
106
  "type": "boolean"
110
107
  }
111
108
  },
112
- "required": ["category", "author", "cliName", "cliDescription", "usageGuidance"],
109
+ "required": ["category", "author", "displayName", "cliDescription", "usageGuidance"],
113
110
  "additionalProperties": false
114
111
  }
@@ -35,9 +35,6 @@
35
35
  "type": "string",
36
36
  "enum": ["local", "plugin"]
37
37
  },
38
- "expertMode": {
39
- "type": "boolean"
40
- },
41
38
  "domains": {
42
39
  "type": "array",
43
40
  "items": {
@@ -85,7 +85,10 @@
85
85
  "stacksFile": {
86
86
  "type": "string"
87
87
  },
88
- "matrixFile": {
88
+ "categoriesFile": {
89
+ "type": "string"
90
+ },
91
+ "rulesFile": {
89
92
  "type": "string"
90
93
  }
91
94
  },