@agents-inc/cli 0.46.0 → 0.47.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 (157) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/{chunk-G2WNOT3R.js → chunk-2RQYJFKA.js} +2 -2
  3. package/dist/{chunk-CD64ZNYI.js → chunk-3APMMQUA.js} +11 -3
  4. package/dist/chunk-3APMMQUA.js.map +1 -0
  5. package/dist/{chunk-DO5OZHSS.js → chunk-B4QYXVPZ.js} +2 -2
  6. package/dist/{chunk-5QRJUBK7.js → chunk-C4QI54PN.js} +20 -11
  7. package/dist/chunk-C4QI54PN.js.map +1 -0
  8. package/dist/{chunk-QBUOZVNZ.js → chunk-CJFWO46A.js} +2 -2
  9. package/dist/{chunk-VH3PI43B.js → chunk-DC333ZDC.js} +4 -4
  10. package/dist/{chunk-GVLYNP2I.js → chunk-DVW6ASTO.js} +4 -4
  11. package/dist/{chunk-NMXNHRAK.js → chunk-EZ46ZTAQ.js} +3 -3
  12. package/dist/{chunk-FUEZQ2H6.js → chunk-FMQ3A7W4.js} +4 -4
  13. package/dist/{chunk-74HSA7C4.js → chunk-FTD5Z6QD.js} +3 -1
  14. package/dist/{chunk-74HSA7C4.js.map → chunk-FTD5Z6QD.js.map} +1 -1
  15. package/dist/{chunk-KWQ2BQXF.js → chunk-FXQYEXLS.js} +3 -3
  16. package/dist/{chunk-RT6IBH37.js → chunk-GFDGYQ6M.js} +55 -21
  17. package/dist/chunk-GFDGYQ6M.js.map +1 -0
  18. package/dist/{chunk-CDGHSTB6.js → chunk-HLTJK3XB.js} +7 -5
  19. package/dist/chunk-HLTJK3XB.js.map +1 -0
  20. package/dist/{chunk-72GS6PIH.js → chunk-HPJP3HFD.js} +7 -7
  21. package/dist/{chunk-J64CA4V6.js → chunk-INKJBMPJ.js} +2 -2
  22. package/dist/{chunk-YVMYQSED.js → chunk-IRJADQM7.js} +2 -2
  23. package/dist/{chunk-PZLUO4OY.js → chunk-JTTTXGHX.js} +4 -4
  24. package/dist/{chunk-4C7PDDLY.js → chunk-JZHIF3K7.js} +5 -5
  25. package/dist/{chunk-D7JTL3DJ.js → chunk-KQ27IDYL.js} +2 -2
  26. package/dist/{chunk-SGXUMZWL.js → chunk-LJ5E4GXC.js} +2 -2
  27. package/dist/{chunk-LFZXMQOH.js → chunk-LNA6M2IE.js} +2 -2
  28. package/dist/{chunk-ODQ2BKWU.js → chunk-M4P5YJ45.js} +3 -3
  29. package/dist/{chunk-TOWP4T5L.js → chunk-MVEYK55V.js} +2 -2
  30. package/dist/{chunk-5M6JI76P.js → chunk-N5OCAAXY.js} +2 -2
  31. package/dist/{chunk-RWR56UVK.js → chunk-NRCKIHND.js} +11 -2
  32. package/dist/chunk-NRCKIHND.js.map +1 -0
  33. package/dist/{chunk-FKBCYT7B.js → chunk-OEJDFGAF.js} +5 -5
  34. package/dist/{chunk-I26YP2Q3.js → chunk-QR2TM4OY.js} +5 -5
  35. package/dist/{chunk-UK3AMBR7.js → chunk-SPSGZWTZ.js} +13 -6
  36. package/dist/{chunk-UK3AMBR7.js.map → chunk-SPSGZWTZ.js.map} +1 -1
  37. package/dist/{chunk-XE6RTHUD.js → chunk-TBB3THSL.js} +38 -3
  38. package/dist/chunk-TBB3THSL.js.map +1 -0
  39. package/dist/{chunk-7LDSHHKN.js → chunk-TWDVLTU6.js} +3 -3
  40. package/dist/{chunk-YT7UHV67.js → chunk-VAQJLHUW.js} +11 -9
  41. package/dist/chunk-VAQJLHUW.js.map +1 -0
  42. package/dist/{chunk-C7BO2ASM.js → chunk-VSZ5GDET.js} +2 -2
  43. package/dist/{chunk-CTQHZELA.js → chunk-XTRPYUWK.js} +14 -14
  44. package/dist/{chunk-HM3DHMW7.js → chunk-YTRFL3MR.js} +8 -8
  45. package/dist/chunk-YTRFL3MR.js.map +1 -0
  46. package/dist/{chunk-3WKFSTG6.js → chunk-ZWAL2ZY7.js} +2 -2
  47. package/dist/commands/build/marketplace.js +4 -4
  48. package/dist/commands/build/plugins.js +5 -5
  49. package/dist/commands/build/stack.js +5 -5
  50. package/dist/commands/compile.js +6 -6
  51. package/dist/commands/config/get.js +4 -4
  52. package/dist/commands/config/index.js +5 -5
  53. package/dist/commands/config/path.js +4 -4
  54. package/dist/commands/config/set-project.js +4 -4
  55. package/dist/commands/config/show.js +5 -5
  56. package/dist/commands/config/unset-project.js +4 -4
  57. package/dist/commands/diff.js +4 -4
  58. package/dist/commands/doctor.js +4 -4
  59. package/dist/commands/edit.js +29 -29
  60. package/dist/commands/eject.js +4 -4
  61. package/dist/commands/import/skill.js +5 -5
  62. package/dist/commands/info.js +5 -5
  63. package/dist/commands/init.js +28 -28
  64. package/dist/commands/list.js +4 -4
  65. package/dist/commands/new/agent.js +6 -6
  66. package/dist/commands/new/marketplace.js +5 -5
  67. package/dist/commands/new/skill.js +9 -6
  68. package/dist/commands/new/skill.js.map +1 -1
  69. package/dist/commands/outdated.js +4 -4
  70. package/dist/commands/search.js +7 -7
  71. package/dist/commands/uninstall.js +6 -6
  72. package/dist/commands/update.js +6 -6
  73. package/dist/commands/validate.js +229 -19
  74. package/dist/commands/validate.js.map +1 -1
  75. package/dist/components/skill-search/skill-search.js +3 -3
  76. package/dist/components/wizard/category-grid.js +2 -2
  77. package/dist/components/wizard/category-grid.test.js +122 -2
  78. package/dist/components/wizard/category-grid.test.js.map +1 -1
  79. package/dist/components/wizard/checkbox-grid.js +3 -3
  80. package/dist/components/wizard/checkbox-grid.test.js +3 -3
  81. package/dist/components/wizard/domain-selection.js +9 -9
  82. package/dist/components/wizard/help-modal.js +2 -2
  83. package/dist/components/wizard/menu-item.js +1 -1
  84. package/dist/components/wizard/search-modal.js +2 -2
  85. package/dist/components/wizard/search-modal.test.js +2 -2
  86. package/dist/components/wizard/section-progress.js +2 -2
  87. package/dist/components/wizard/section-progress.test.js +2 -2
  88. package/dist/components/wizard/selection-card.js +2 -2
  89. package/dist/components/wizard/source-grid.js +3 -3
  90. package/dist/components/wizard/source-grid.test.js +3 -3
  91. package/dist/components/wizard/stack-selection.js +8 -8
  92. package/dist/components/wizard/step-agents.js +8 -8
  93. package/dist/components/wizard/step-agents.test.js +9 -9
  94. package/dist/components/wizard/step-build.js +8 -8
  95. package/dist/components/wizard/step-build.test.js +78 -46
  96. package/dist/components/wizard/step-build.test.js.map +1 -1
  97. package/dist/components/wizard/step-confirm.js +4 -4
  98. package/dist/components/wizard/step-confirm.test.js +8 -8
  99. package/dist/components/wizard/step-refine.js +2 -2
  100. package/dist/components/wizard/step-refine.test.js +2 -2
  101. package/dist/components/wizard/step-settings.js +5 -5
  102. package/dist/components/wizard/step-settings.test.js +8 -8
  103. package/dist/components/wizard/step-sources.js +10 -10
  104. package/dist/components/wizard/step-sources.test.js +11 -11
  105. package/dist/components/wizard/step-stack.js +12 -12
  106. package/dist/components/wizard/step-stack.test.js +13 -13
  107. package/dist/components/wizard/view-title.js +2 -2
  108. package/dist/components/wizard/wizard-layout.js +8 -8
  109. package/dist/components/wizard/wizard-tabs.js +2 -2
  110. package/dist/components/wizard/wizard-tabs.test.js +2 -2
  111. package/dist/components/wizard/wizard.js +25 -25
  112. package/dist/hooks/init.js +3 -3
  113. package/dist/{source-manager-6QZ2GDUA.js → source-manager-Q34LTUVM.js} +4 -4
  114. package/dist/src/agents/meta/documentor/examples.md +35 -36
  115. package/dist/src/agents/meta/documentor/workflow.md +91 -105
  116. package/dist/stores/wizard-store.js +5 -5
  117. package/dist/stores/wizard-store.test.js +48 -6
  118. package/dist/stores/wizard-store.test.js.map +1 -1
  119. package/package.json +1 -1
  120. package/src/agents/meta/documentor/examples.md +35 -36
  121. package/src/agents/meta/documentor/workflow.md +91 -105
  122. package/src/schemas/agent.schema.json +3 -0
  123. package/src/schemas/metadata.schema.json +3 -0
  124. package/dist/chunk-5QRJUBK7.js.map +0 -1
  125. package/dist/chunk-CD64ZNYI.js.map +0 -1
  126. package/dist/chunk-CDGHSTB6.js.map +0 -1
  127. package/dist/chunk-HM3DHMW7.js.map +0 -1
  128. package/dist/chunk-RT6IBH37.js.map +0 -1
  129. package/dist/chunk-RWR56UVK.js.map +0 -1
  130. package/dist/chunk-XE6RTHUD.js.map +0 -1
  131. package/dist/chunk-YT7UHV67.js.map +0 -1
  132. /package/dist/{chunk-G2WNOT3R.js.map → chunk-2RQYJFKA.js.map} +0 -0
  133. /package/dist/{chunk-DO5OZHSS.js.map → chunk-B4QYXVPZ.js.map} +0 -0
  134. /package/dist/{chunk-QBUOZVNZ.js.map → chunk-CJFWO46A.js.map} +0 -0
  135. /package/dist/{chunk-VH3PI43B.js.map → chunk-DC333ZDC.js.map} +0 -0
  136. /package/dist/{chunk-GVLYNP2I.js.map → chunk-DVW6ASTO.js.map} +0 -0
  137. /package/dist/{chunk-NMXNHRAK.js.map → chunk-EZ46ZTAQ.js.map} +0 -0
  138. /package/dist/{chunk-FUEZQ2H6.js.map → chunk-FMQ3A7W4.js.map} +0 -0
  139. /package/dist/{chunk-KWQ2BQXF.js.map → chunk-FXQYEXLS.js.map} +0 -0
  140. /package/dist/{chunk-72GS6PIH.js.map → chunk-HPJP3HFD.js.map} +0 -0
  141. /package/dist/{chunk-J64CA4V6.js.map → chunk-INKJBMPJ.js.map} +0 -0
  142. /package/dist/{chunk-YVMYQSED.js.map → chunk-IRJADQM7.js.map} +0 -0
  143. /package/dist/{chunk-PZLUO4OY.js.map → chunk-JTTTXGHX.js.map} +0 -0
  144. /package/dist/{chunk-4C7PDDLY.js.map → chunk-JZHIF3K7.js.map} +0 -0
  145. /package/dist/{chunk-D7JTL3DJ.js.map → chunk-KQ27IDYL.js.map} +0 -0
  146. /package/dist/{chunk-SGXUMZWL.js.map → chunk-LJ5E4GXC.js.map} +0 -0
  147. /package/dist/{chunk-LFZXMQOH.js.map → chunk-LNA6M2IE.js.map} +0 -0
  148. /package/dist/{chunk-ODQ2BKWU.js.map → chunk-M4P5YJ45.js.map} +0 -0
  149. /package/dist/{chunk-TOWP4T5L.js.map → chunk-MVEYK55V.js.map} +0 -0
  150. /package/dist/{chunk-5M6JI76P.js.map → chunk-N5OCAAXY.js.map} +0 -0
  151. /package/dist/{chunk-FKBCYT7B.js.map → chunk-OEJDFGAF.js.map} +0 -0
  152. /package/dist/{chunk-I26YP2Q3.js.map → chunk-QR2TM4OY.js.map} +0 -0
  153. /package/dist/{chunk-7LDSHHKN.js.map → chunk-TWDVLTU6.js.map} +0 -0
  154. /package/dist/{chunk-C7BO2ASM.js.map → chunk-VSZ5GDET.js.map} +0 -0
  155. /package/dist/{chunk-CTQHZELA.js.map → chunk-XTRPYUWK.js.map} +0 -0
  156. /package/dist/{chunk-3WKFSTG6.js.map → chunk-ZWAL2ZY7.js.map} +0 -0
  157. /package/dist/{source-manager-6QZ2GDUA.js.map → source-manager-Q34LTUVM.js.map} +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\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 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":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agents-inc/cli",
3
- "version": "0.46.0",
3
+ "version": "0.47.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",
@@ -19,10 +19,10 @@
19
19
 
20
20
  **Action:**
21
21
 
22
- 1. Glob to find all stores: `**/*Store.ts`
22
+ 1. Glob to find all stores: `**/stores/*.ts` (kebab-case files)
23
23
  2. Read each store file completely
24
- 3. Identify patterns (MobX? Redux? Context?)
25
- 4. Map relationships between stores
24
+ 3. Identify patterns (Zustand `create<State>()`? Context? Other?)
25
+ 4. Map relationships between stores and consuming components
26
26
  5. Create `store-map.md` using template
27
27
  6. Update `DOCUMENTATION_MAP.md` marking stores as complete
28
28
 
@@ -52,30 +52,29 @@
52
52
 
53
53
  ## State Management Library
54
54
 
55
- **Library:** MobX
56
- **Pattern:** Root store with individual stores
55
+ **Library:** Zustand
56
+ **Pattern:** `create<State>()` stores with selectors
57
57
 
58
58
  ## Stores
59
59
 
60
- | Store | File Path | Purpose | Key Actions |
61
- | ----------- | ---------------------------- | ------------ | ---------------------- |
62
- | EditorStore | `/src/stores/EditorStore.ts` | Editor state | `addLayer()`, `undo()` |
63
- | UserStore | `/src/stores/UserStore.ts` | User session | `login()`, `logout()` |
60
+ | Store | File Path | Purpose | Key Actions |
61
+ | ----------- | -------------------------------- | ----------------- | -------------------------------- |
62
+ | WizardStore | `src/cli/stores/wizard-store.ts` | Wizard flow state | `toggleSkill()`, `resetWizard()` |
64
63
 
65
64
  ## Store Relationships
66
65
 
67
- - RootStore: `/src/stores/RootStore.ts` - Initializes all stores
68
- - EditorStore imports LayerStore for layer management
66
+ - WizardStore consumed by wizard step components (`step-build.tsx`, `step-stack.tsx`, etc.)
67
+ - No root store pattern; each store is independent
69
68
 
70
69
  ## Usage Pattern
71
70
 
72
71
  ```typescript
73
- import { useStore } from "@/contexts/StoreContext";
74
- const { editorStore } = useStore();
72
+ import { useWizardStore } from "../../stores/wizard-store.js";
73
+ const domains = useWizardStore((s) => s.domains);
75
74
  ```
76
75
  ````
77
76
 
78
- **Example files:** `/src/components/Editor/EditorCanvas.tsx:15`
77
+ **Example files:** `src/cli/components/wizard/step-build.tsx`
79
78
 
80
79
  ````
81
80
 
@@ -90,20 +89,21 @@ const { editorStore } = useStore();
90
89
 
91
90
  ## State Management
92
91
 
93
- ### Direct Store Mutation
92
+ ### Inline Test Data Construction
94
93
 
95
- **What:** Mutating store state directly without actions
94
+ **What:** Constructing test configs, matrices, or skills inline instead of using factories
96
95
 
97
- **Where:** `/src/legacy/OldEditor.tsx:123`
96
+ **Where:** [document actual locations found]
98
97
 
99
- **Why wrong:** Breaks MobX reactivity, no undo support
98
+ **Why wrong:** Violates project convention; bypasses shared test helpers; leads to stale/inconsistent test data
100
99
 
101
100
  **Do instead:**
102
101
  ```typescript
103
- editorStore.addLayer(newLayer) // Use store actions
102
+ import { createMockSkill, createMockMatrix } from "../__tests__/helpers.js";
103
+ const skill = createMockSkill("web-framework-react", "web/framework");
104
104
  ````
105
105
 
106
- **Correct pattern:** `/src/components/Editor/EditorCanvas.tsx`
106
+ **Correct pattern:** `src/cli/lib/__tests__/helpers.ts` (factory functions)
107
107
 
108
108
  ````
109
109
 
@@ -118,30 +118,29 @@ editorStore.addLayer(newLayer) // Use store actions
118
118
 
119
119
  ## Overview
120
120
 
121
- **Purpose:** Image editing with layers, tools, and export
122
- **Route:** `/editor/:imageId`
123
- **Main Component:** `/src/features/editor/EditorPage.tsx`
121
+ **Purpose:** Interactive wizard for configuring agent/skill stacks
122
+ **Entry Point:** `src/cli/commands/init.ts` (oclif command)
123
+ **Main Component:** `src/cli/components/wizard/wizard.tsx`
124
124
 
125
125
  ## File Structure
126
126
 
127
127
  ````
128
128
 
129
- src/features/editor/
130
- ├── components/
131
- ├── EditorCanvas.tsx # Main canvas
132
- └── Toolbar.tsx # Tool selection
133
- ├── hooks/
134
- └── useEditorState.ts # State management
135
- └── stores/
136
- └── EditorStore.ts # MobX store
129
+ src/cli/components/wizard/
130
+ ├── wizard.tsx # Main wizard orchestrator
131
+ ├── step-stack.tsx # Stack selection step
132
+ ├── step-build.tsx # Build configuration step
133
+ ├── step-sources.tsx # Source selection step
134
+ ├── step-confirm.tsx # Confirmation step
135
+ └── utils.ts # Wizard utility functions
137
136
 
138
137
  ```
139
138
 
140
139
  ## Key Files
141
140
 
142
- | File | Lines | Purpose |
143
- | ------------------ | ----- | ---------------- |
144
- | `EditorPage.tsx` | 234 | Main page |
145
- | `EditorCanvas.tsx` | 456 | Rendering engine |
146
- | `EditorStore.ts` | 189 | State management |
141
+ | File | Lines | Purpose |
142
+ | ------------------ | ----- | -------------------- |
143
+ | `wizard.tsx` | ~200 | Step orchestration |
144
+ | `step-build.tsx` | ~300 | Skill selection UI |
145
+ | `wizard-store.ts` | ~500 | Zustand state store |
147
146
  ```