@agents-inc/cli 0.82.0 → 0.82.4

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 (111) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/{chunk-J3ZWLR5Z.js → chunk-35ESNSF5.js} +4 -4
  3. package/dist/{chunk-2E25UBLM.js → chunk-3BDCU5QB.js} +3 -3
  4. package/dist/{chunk-XNHMUPIJ.js → chunk-3MXMYHO3.js} +17 -17
  5. package/dist/{chunk-XNHMUPIJ.js.map → chunk-3MXMYHO3.js.map} +1 -1
  6. package/dist/{chunk-DWIB547V.js → chunk-3PB7KSF7.js} +4 -4
  7. package/dist/{chunk-LKDQLCS3.js → chunk-5AHKXBNC.js} +2 -2
  8. package/dist/{chunk-TJ62CLXB.js → chunk-5BRHJD7Q.js} +2 -2
  9. package/dist/{chunk-K2RQU5HR.js → chunk-63E7LOLB.js} +2 -2
  10. package/dist/{chunk-SXGCCUTH.js → chunk-AAW3PYXA.js} +10 -2
  11. package/dist/chunk-AAW3PYXA.js.map +1 -0
  12. package/dist/{chunk-W642FYQJ.js → chunk-AD2UT2TN.js} +2 -2
  13. package/dist/{chunk-L7SKXTUO.js → chunk-C4I4Q33M.js} +2 -2
  14. package/dist/{chunk-EB5E7IKL.js → chunk-FBLRTXEA.js} +4 -4
  15. package/dist/{chunk-AW7LLMZZ.js → chunk-FIXWR56O.js} +2 -2
  16. package/dist/{chunk-WO433W2G.js → chunk-FS4YWW36.js} +2 -2
  17. package/dist/{chunk-RLKRDDJD.js → chunk-GEU62YD2.js} +2 -2
  18. package/dist/{chunk-Y7GAKUM7.js → chunk-IMO6EQKT.js} +2 -2
  19. package/dist/{chunk-BFLAAMMA.js → chunk-IMP35ETG.js} +17 -17
  20. package/dist/chunk-IMP35ETG.js.map +1 -0
  21. package/dist/{chunk-UXIZK65O.js → chunk-JQDOUNHF.js} +23 -15
  22. package/dist/chunk-JQDOUNHF.js.map +1 -0
  23. package/dist/{chunk-WVLBGBRU.js → chunk-K76AXQ7A.js} +3 -3
  24. package/dist/{chunk-MPTXU4VS.js → chunk-KB6LCTCD.js} +16 -8
  25. package/dist/chunk-KB6LCTCD.js.map +1 -0
  26. package/dist/{chunk-JQNN2SVG.js → chunk-KEW246HB.js} +2 -2
  27. package/dist/{chunk-PY7C6CUI.js → chunk-KZLGBHDZ.js} +3 -3
  28. package/dist/{chunk-HWDEPKIR.js → chunk-LOB3OU2D.js} +5 -5
  29. package/dist/chunk-LOB3OU2D.js.map +1 -0
  30. package/dist/{chunk-2GI4NKKO.js → chunk-LQ3EJBUN.js} +6 -3
  31. package/dist/chunk-LQ3EJBUN.js.map +1 -0
  32. package/dist/{chunk-A5MK4XJB.js → chunk-M2CS5EOK.js} +5 -5
  33. package/dist/{chunk-WYODBBUA.js → chunk-RTXJLZ7A.js} +4 -4
  34. package/dist/commands/build/plugins.js +4 -4
  35. package/dist/commands/build/stack.js +4 -4
  36. package/dist/commands/compile.js +4 -4
  37. package/dist/commands/config/index.js +4 -4
  38. package/dist/commands/config/path.js +3 -3
  39. package/dist/commands/config/show.js +4 -4
  40. package/dist/commands/diff.js +3 -3
  41. package/dist/commands/doctor.js +3 -3
  42. package/dist/commands/edit.js +68 -20
  43. package/dist/commands/edit.js.map +1 -1
  44. package/dist/commands/eject.js +3 -3
  45. package/dist/commands/import/skill.js +3 -3
  46. package/dist/commands/info.js +3 -3
  47. package/dist/commands/init.js +19 -19
  48. package/dist/commands/list.js +3 -3
  49. package/dist/commands/new/agent.js +4 -4
  50. package/dist/commands/new/marketplace.js +4 -4
  51. package/dist/commands/new/skill.js +4 -4
  52. package/dist/commands/outdated.js +3 -3
  53. package/dist/commands/search.js +3 -3
  54. package/dist/commands/uninstall.js +3 -3
  55. package/dist/commands/update.js +4 -4
  56. package/dist/commands/validate.js +3 -3
  57. package/dist/components/wizard/category-grid.js +2 -2
  58. package/dist/components/wizard/category-grid.test.js +8 -8
  59. package/dist/components/wizard/domain-selection.js +6 -6
  60. package/dist/components/wizard/help-modal.js +8 -1
  61. package/dist/components/wizard/source-grid.js +2 -2
  62. package/dist/components/wizard/source-grid.test.js +8 -8
  63. package/dist/components/wizard/stack-selection.js +5 -5
  64. package/dist/components/wizard/step-agents.js +6 -6
  65. package/dist/components/wizard/step-agents.test.js +9 -9
  66. package/dist/components/wizard/step-build.js +6 -6
  67. package/dist/components/wizard/step-build.test.js +9 -9
  68. package/dist/components/wizard/step-confirm.js +3 -3
  69. package/dist/components/wizard/step-confirm.test.js +7 -7
  70. package/dist/components/wizard/step-settings.js +4 -4
  71. package/dist/components/wizard/step-settings.test.js +7 -7
  72. package/dist/components/wizard/step-sources.js +6 -6
  73. package/dist/components/wizard/step-sources.test.js +9 -9
  74. package/dist/components/wizard/step-stack.js +6 -6
  75. package/dist/components/wizard/step-stack.test.js +7 -7
  76. package/dist/components/wizard/wizard-layout.js +7 -7
  77. package/dist/components/wizard/wizard.js +18 -18
  78. package/dist/config-exports.js +1 -1
  79. package/dist/hooks/init.js +19 -19
  80. package/dist/{source-loader-V5MKKNZF.js → source-loader-FMDHHYDQ.js} +4 -4
  81. package/dist/{source-manager-S64CYXPA.js → source-manager-YMJ4Z5UG.js} +4 -4
  82. package/dist/stores/wizard-store.js +4 -4
  83. package/dist/stores/wizard-store.test.js +31 -7
  84. package/dist/stores/wizard-store.test.js.map +1 -1
  85. package/package.json +1 -1
  86. package/dist/chunk-2GI4NKKO.js.map +0 -1
  87. package/dist/chunk-BFLAAMMA.js.map +0 -1
  88. package/dist/chunk-HWDEPKIR.js.map +0 -1
  89. package/dist/chunk-MPTXU4VS.js.map +0 -1
  90. package/dist/chunk-SXGCCUTH.js.map +0 -1
  91. package/dist/chunk-UXIZK65O.js.map +0 -1
  92. /package/dist/{chunk-J3ZWLR5Z.js.map → chunk-35ESNSF5.js.map} +0 -0
  93. /package/dist/{chunk-2E25UBLM.js.map → chunk-3BDCU5QB.js.map} +0 -0
  94. /package/dist/{chunk-DWIB547V.js.map → chunk-3PB7KSF7.js.map} +0 -0
  95. /package/dist/{chunk-LKDQLCS3.js.map → chunk-5AHKXBNC.js.map} +0 -0
  96. /package/dist/{chunk-TJ62CLXB.js.map → chunk-5BRHJD7Q.js.map} +0 -0
  97. /package/dist/{chunk-K2RQU5HR.js.map → chunk-63E7LOLB.js.map} +0 -0
  98. /package/dist/{chunk-W642FYQJ.js.map → chunk-AD2UT2TN.js.map} +0 -0
  99. /package/dist/{chunk-L7SKXTUO.js.map → chunk-C4I4Q33M.js.map} +0 -0
  100. /package/dist/{chunk-EB5E7IKL.js.map → chunk-FBLRTXEA.js.map} +0 -0
  101. /package/dist/{chunk-AW7LLMZZ.js.map → chunk-FIXWR56O.js.map} +0 -0
  102. /package/dist/{chunk-WO433W2G.js.map → chunk-FS4YWW36.js.map} +0 -0
  103. /package/dist/{chunk-RLKRDDJD.js.map → chunk-GEU62YD2.js.map} +0 -0
  104. /package/dist/{chunk-Y7GAKUM7.js.map → chunk-IMO6EQKT.js.map} +0 -0
  105. /package/dist/{chunk-WVLBGBRU.js.map → chunk-K76AXQ7A.js.map} +0 -0
  106. /package/dist/{chunk-JQNN2SVG.js.map → chunk-KEW246HB.js.map} +0 -0
  107. /package/dist/{chunk-PY7C6CUI.js.map → chunk-KZLGBHDZ.js.map} +0 -0
  108. /package/dist/{chunk-A5MK4XJB.js.map → chunk-M2CS5EOK.js.map} +0 -0
  109. /package/dist/{chunk-WYODBBUA.js.map → chunk-RTXJLZ7A.js.map} +0 -0
  110. /package/dist/{source-loader-V5MKKNZF.js.map → source-loader-FMDHHYDQ.js.map} +0 -0
  111. /package/dist/{source-manager-S64CYXPA.js.map → source-manager-YMJ4Z5UG.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/stores/wizard-store.test.ts"],"sourcesContent":["import { describe, it, expect, beforeEach } from \"vitest\";\nimport { useWizardStore } from \"./wizard-store\";\nimport { initializeMatrix } from \"../lib/matrix/matrix-provider\";\nimport { createMockMatrix, SKILLS } from \"../lib/__tests__/helpers\";\nimport { typedKeys } from \"../utils/typed-object\";\nimport {\n ALL_SKILLS_TEST_CATEGORIES_MATRIX,\n ALL_SKILLS_FULLSTACK_CATEGORIES_MATRIX,\n ALL_SKILLS_WEB_AND_API_MATRIX,\n ALL_SKILLS_WEB_PAIR_CATEGORIES_MATRIX,\n ALL_SKILLS_WEB_FRAMEWORK_MATRIX,\n ALL_SKILLS_METHODOLOGY_MATRIX,\n ALL_SKILLS_METHODOLOGY_BARE_MATRIX,\n ALL_SKILLS_MULTI_DOMAIN_MATRIX,\n REACT_HONO_FRAMEWORK_API_MATRIX,\n} from \"../lib/__tests__/mock-data/mock-matrices\";\nimport type { AgentName, SkillAssignment, SkillId, SkillSource } from \"../types\";\n\nfunction sa(id: SkillId, preloaded = false): SkillAssignment {\n return { id, preloaded };\n}\n\ndescribe(\"WizardStore\", () => {\n beforeEach(() => {\n initializeMatrix(ALL_SKILLS_TEST_CATEGORIES_MATRIX);\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 empty skillConfigs\", () => {\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs).toEqual([]);\n });\n\n it(\"should have null focusedSkillId\", () => {\n const { focusedSkillId } = useWizardStore.getState();\n expect(focusedSkillId).toBeNull();\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 and selections\", () => {\n const store = useWizardStore.getState();\n store.selectStack(\"nextjs-fullstack\");\n store.toggleDomain(\"web\");\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.selectStack(null);\n\n const state = useWizardStore.getState();\n expect(state.selectedStackId).toBeNull();\n expect(state.domainSelections).toEqual({});\n expect(state.selectedDomains).toEqual([]);\n expect(state.skillConfigs).toEqual([]);\n expect(state.selectedAgents).toEqual([]);\n expect(state.boundSkills).toEqual([]);\n expect(state.currentDomainIndex).toBe(0);\n expect(state.stackAction).toBeNull();\n });\n\n it(\"should clear previous selections when changing from one stack to another\", () => {\n initializeMatrix(ALL_SKILLS_FULLSTACK_CATEGORIES_MATRIX);\n const store = useWizardStore.getState();\n\n // Simulate selecting a stack and populating\n store.populateFromSkillIds([\"web-framework-react\", \"api-framework-hono\"]);\n\n const stateAfterFirst = useWizardStore.getState();\n expect(Object.keys(stateAfterFirst.domainSelections).length).toBeGreaterThan(0);\n\n // Simulate going back and selecting \"start from scratch\"\n store.selectStack(null);\n\n const stateAfterClear = useWizardStore.getState();\n expect(stateAfterClear.domainSelections).toEqual({});\n expect(stateAfterClear.selectedDomains).toEqual([]);\n expect(stateAfterClear.skillConfigs).toEqual([]);\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 initializeMatrix(ALL_SKILLS_FULLSTACK_CATEGORIES_MATRIX);\n\n store.populateFromStack(stack);\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 initializeMatrix(REACT_HONO_FRAMEWORK_API_MATRIX);\n\n store.populateFromSkillIds([\"web-framework-react\", \"api-framework-hono\"]);\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 initializeMatrix(ALL_SKILLS_WEB_AND_API_MATRIX);\n\n store.populateFromStack(stack);\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\", 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-composition-api\", true);\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web![\"web-framework\"]).toEqual([\"web-framework-vue-composition-api\"]);\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 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(\"skillConfigs and per-skill scope\", () => {\n it(\"should sync skillConfigs when toggling a technology on\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs).toHaveLength(1);\n expect(skillConfigs[0]).toEqual({\n id: \"web-framework-react\",\n scope: \"global\",\n source: \"agents-inc\",\n });\n });\n\n it(\"should remove from skillConfigs when toggling a technology off\", () => {\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 { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs).toHaveLength(0);\n });\n\n it(\"should replace skillConfigs entry 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-composition-api\", true);\n\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs).toHaveLength(1);\n expect(skillConfigs[0].id).toBe(\"web-framework-vue-composition-api\");\n });\n\n it(\"should accumulate skillConfigs 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 { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs).toHaveLength(2);\n expect(skillConfigs.map((sc) => sc.id)).toEqual([\n \"web-testing-vitest\",\n \"web-testing-playwright-e2e\",\n ]);\n });\n\n it(\"should toggle skill scope between global and project\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n store.toggleSkillScope(\"web-framework-react\");\n\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs[0].scope).toBe(\"project\");\n });\n\n it(\"should toggle skill scope back to global\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n store.toggleSkillScope(\"web-framework-react\");\n store.toggleSkillScope(\"web-framework-react\");\n\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs[0].scope).toBe(\"global\");\n });\n\n it(\"should update source via setSkillSource\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n store.setSkillSource(\"web-framework-react\", \"local\");\n\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs[0].source).toBe(\"local\");\n });\n\n it(\"should set and clear focusedSkillId\", () => {\n const store = useWizardStore.getState();\n\n store.setFocusedSkillId(\"web-framework-react\");\n expect(useWizardStore.getState().focusedSkillId).toBe(\"web-framework-react\");\n\n store.setFocusedSkillId(null);\n expect(useWizardStore.getState().focusedSkillId).toBeNull();\n });\n\n it(\"should update source via setSourceSelection on skillConfigs\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n store.setSourceSelection(\"web-framework-react\", \"local\");\n\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs[0].source).toBe(\"local\");\n });\n\n it(\"should populate skillConfigs from 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 },\n };\n initializeMatrix(ALL_SKILLS_WEB_PAIR_CATEGORIES_MATRIX);\n\n store.populateFromStack(stack);\n\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs).toHaveLength(2);\n expect(skillConfigs.map((sc) => sc.id)).toEqual([\"web-framework-react\", \"web-state-zustand\"]);\n expect(skillConfigs.every((sc) => sc.scope === \"global\")).toBe(true);\n expect(skillConfigs.every((sc) => sc.source === \"agents-inc\")).toBe(true);\n });\n\n it(\"should populate skillConfigs from populateFromSkillIds\", () => {\n const store = useWizardStore.getState();\n\n initializeMatrix(REACT_HONO_FRAMEWORK_API_MATRIX);\n\n store.populateFromSkillIds([\"web-framework-react\", \"api-framework-hono\"]);\n\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs).toHaveLength(2);\n expect(skillConfigs.map((sc) => sc.id)).toEqual([\n \"web-framework-react\",\n \"api-framework-hono\",\n ]);\n });\n\n it(\"should remove skillConfigs when domain is deselected\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n expect(useWizardStore.getState().skillConfigs).toHaveLength(1);\n\n store.toggleDomain(\"web\");\n\n expect(useWizardStore.getState().skillConfigs).toHaveLength(0);\n });\n\n it(\"should restore skillConfigs when domain is re-toggled after populateFromStack\", () => {\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 initializeMatrix(ALL_SKILLS_WEB_FRAMEWORK_MATRIX);\n\n store.populateFromStack(stack);\n expect(useWizardStore.getState().skillConfigs).toHaveLength(1);\n\n store.toggleDomain(\"web\");\n expect(useWizardStore.getState().skillConfigs).toHaveLength(0);\n\n store.toggleDomain(\"web\");\n expect(useWizardStore.getState().skillConfigs).toHaveLength(1);\n expect(useWizardStore.getState().skillConfigs[0].id).toBe(\"web-framework-react\");\n });\n\n it(\"should reset skillConfigs and focusedSkillId on reset\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.setFocusedSkillId(\"web-framework-react\");\n\n store.reset();\n\n const state = useWizardStore.getState();\n expect(state.skillConfigs).toEqual([]);\n expect(state.focusedSkillId).toBeNull();\n });\n\n it(\"should set all sources to local via setAllSourcesLocal\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"api\", \"api-api\", \"api-framework-hono\", true);\n\n store.setAllSourcesLocal();\n\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs.every((sc) => sc.source === \"local\")).toBe(true);\n });\n\n it(\"should set all sources to plugin via setAllSourcesPlugin\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.setSourceSelection(\"web-framework-react\", \"local\");\n\n initializeMatrix(\n createMockMatrix({\n ...SKILLS.react,\n availableSources: [{ name: \"Acme Corp\", type: \"private\", installed: false }],\n }),\n );\n\n store.setAllSourcesPlugin();\n\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs[0].source).toBe(\"Acme Corp\");\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 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 category 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.history).toEqual([]);\n });\n });\n\n describe(\"populateFromStack\", () => {\n it(\"should set selectedDomains to only domains present in 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 initializeMatrix(ALL_SKILLS_WEB_FRAMEWORK_MATRIX);\n\n store.populateFromStack(stack);\n\n const { selectedDomains, domainSelections } = useWizardStore.getState();\n\n expect(selectedDomains).toEqual([\"web\"]);\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 initializeMatrix(ALL_SKILLS_FULLSTACK_CATEGORIES_MATRIX);\n\n store.populateFromStack(stack);\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: { \"meta-reviewing\": [sa(\"meta-methodology-vitest\" as SkillId)] },\n },\n };\n initializeMatrix(ALL_SKILLS_METHODOLOGY_BARE_MATRIX);\n\n store.populateFromStack(stack);\n\n const { domainSelections } = useWizardStore.getState();\n\n expect(typedKeys(domainSelections)).toHaveLength(0);\n });\n\n it(\"should populate multiple skills from array-valued categories\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n \"pattern-scout\": {\n \"meta-reviewing\": [\n sa(\"meta-methodology-research-methodology\", true),\n sa(\"meta-reviewing-reviewing\", true),\n sa(\"meta-reviewing-cli-reviewing\", true),\n ],\n },\n },\n };\n initializeMatrix(ALL_SKILLS_METHODOLOGY_MATRIX);\n\n store.populateFromStack(stack);\n\n const { domainSelections } = useWizardStore.getState();\n\n expect(domainSelections.meta![\"meta-reviewing\"]).toEqual([\n \"meta-methodology-research-methodology\",\n \"meta-reviewing-reviewing\",\n \"meta-reviewing-cli-reviewing\",\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 \"meta-reviewing\": [\n sa(\"meta-methodology-research-methodology\", true),\n sa(\"meta-reviewing-reviewing\", true),\n ],\n },\n api: { \"api-api\": [sa(\"api-framework-hono\", true)] },\n },\n };\n initializeMatrix(ALL_SKILLS_MULTI_DOMAIN_MATRIX);\n\n store.populateFromStack(stack);\n\n const { domainSelections } = useWizardStore.getState();\n\n expect(domainSelections.web![\"web-framework\"]).toEqual([\"web-framework-react\"]);\n expect(domainSelections.meta![\"meta-reviewing\"]).toEqual([\n \"meta-methodology-research-methodology\",\n \"meta-reviewing-reviewing\",\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 \"meta-reviewing\": [\n sa(\"meta-methodology-research-methodology\", true),\n sa(\"meta-reviewing-reviewing\", true),\n ],\n },\n agent2: {\n \"meta-reviewing\": [\n sa(\"meta-reviewing-reviewing\", true),\n sa(\"meta-reviewing-cli-reviewing\", true),\n ],\n },\n },\n };\n initializeMatrix(ALL_SKILLS_METHODOLOGY_MATRIX);\n\n store.populateFromStack(stack);\n\n const { domainSelections } = useWizardStore.getState();\n\n // Should deduplicate: anti-over-engineering appears in both agents\n expect(domainSelections.meta![\"meta-reviewing\"]).toEqual([\n \"meta-methodology-research-methodology\",\n \"meta-reviewing-reviewing\",\n \"meta-reviewing-cli-reviewing\",\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 ...SKILLS.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 initializeMatrix(createMockMatrix(skill));\n\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n const rows = store.buildSourceRows();\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 ...SKILLS.react,\n availableSources: [\n makeSource({ name: \"agents-inc\", type: \"public\" }),\n makeSource({ name: \"Acme Corp\", type: \"private\", primary: true }),\n ],\n };\n\n initializeMatrix(createMockMatrix(skill));\n\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n const rows = store.buildSourceRows();\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 expect(rows[0].options[2].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 ...SKILLS.react,\n availableSources: [\n makeSource({ name: \"Extra Corp\", type: \"private\" }),\n makeSource({ name: \"agents-inc\", type: \"public\" }),\n ],\n };\n\n initializeMatrix(createMockMatrix(skill));\n\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n const rows = store.buildSourceRows();\n expect(rows).toHaveLength(1);\n expect(rows[0].options[0].id).toBe(\"local\");\n expect(rows[0].options[1].id).toBe(\"agents-inc\");\n expect(rows[0].options[2].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 ...SKILLS.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 initializeMatrix(createMockMatrix(skill));\n\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n const rows = store.buildSourceRows();\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(\"agentConfigs and scope management\", () => {\n it(\"should have empty agentConfigs initially\", () => {\n const { agentConfigs } = useWizardStore.getState();\n expect(agentConfigs).toEqual([]);\n });\n\n it(\"should sync agentConfigs when toggleAgent is called\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n\n const { agentConfigs } = useWizardStore.getState();\n expect(agentConfigs).toEqual([{ name: \"web-developer\", scope: \"global\" }]);\n });\n\n it(\"should remove from agentConfigs when agent is toggled off\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n store.toggleAgent(\"web-developer\");\n\n const { agentConfigs } = useWizardStore.getState();\n expect(agentConfigs).toEqual([]);\n });\n\n it(\"should toggle agent scope between global and project\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n store.toggleAgentScope(\"web-developer\");\n\n const { agentConfigs } = useWizardStore.getState();\n expect(agentConfigs).toEqual([{ name: \"web-developer\", scope: \"project\" }]);\n\n store.toggleAgentScope(\"web-developer\");\n expect(useWizardStore.getState().agentConfigs).toEqual([\n { name: \"web-developer\", scope: \"global\" },\n ]);\n });\n\n it(\"should set and clear focusedAgentId\", () => {\n const store = useWizardStore.getState();\n store.setFocusedAgentId(\"web-developer\");\n\n expect(useWizardStore.getState().focusedAgentId).toBe(\"web-developer\");\n\n store.setFocusedAgentId(null);\n expect(useWizardStore.getState().focusedAgentId).toBeNull();\n });\n\n it(\"should not toggle locked agents\", () => {\n useWizardStore.setState({ lockedAgentNames: [\"web-developer\"] as AgentName[] });\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n\n const { selectedAgents, agentConfigs } = useWizardStore.getState();\n expect(selectedAgents).toEqual([]);\n expect(agentConfigs).toEqual([]);\n });\n\n it(\"should not toggle scope of locked agents\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n useWizardStore.setState({ lockedAgentNames: [\"web-developer\"] as AgentName[] });\n\n store.toggleAgentScope(\"web-developer\");\n const { agentConfigs } = useWizardStore.getState();\n expect(agentConfigs).toEqual([{ name: \"web-developer\", scope: \"global\" }]);\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(\"scribe\");\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(\"scribe\");\n store.toggleDomain(\"web\");\n store.preselectAgentsFromDomains();\n\n const { selectedAgents } = useWizardStore.getState();\n // preselectAgentsFromDomains replaces the array entirely\n expect(selectedAgents).not.toContain(\"scribe\");\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(\"domains\");\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(\"stack\");\n expect(completedSteps).toContain(\"domains\");\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(\"domains\");\n store.setStep(\"build\");\n store.setStep(\"sources\");\n store.setStep(\"agents\");\n\n const { completedSteps } = store.getStepProgress();\n expect(completedSteps).toContain(\"stack\");\n expect(completedSteps).toContain(\"domains\");\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 describe(\"deriveInstallMode\", () => {\n it(\"should return 'plugin' when all skills have default marketplace source\", () => {\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\n const result = store.deriveInstallMode();\n expect(result).toBe(\"plugin\");\n });\n\n it(\"should return 'local' when all skills are set to local\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"api\", \"api-api\", \"api-framework-hono\", true);\n store.setSourceSelection(\"web-framework-react\", \"local\");\n store.setSourceSelection(\"api-framework-hono\", \"local\");\n\n const result = store.deriveInstallMode();\n expect(result).toBe(\"local\");\n });\n\n it(\"should return 'mixed' when some skills are local and some are not\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"api\", \"api-api\", \"api-framework-hono\", true);\n store.setSourceSelection(\"web-framework-react\", \"local\");\n store.setSourceSelection(\"api-framework-hono\", \"agents-inc\");\n\n const result = store.deriveInstallMode();\n expect(result).toBe(\"mixed\");\n });\n\n it(\"should return 'local' when no skills are configured\", () => {\n const store = useWizardStore.getState();\n\n const result = store.deriveInstallMode();\n expect(result).toBe(\"local\");\n });\n\n it(\"should handle single skill as local\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.setSourceSelection(\"web-framework-react\", \"local\");\n\n const result = store.deriveInstallMode();\n expect(result).toBe(\"local\");\n });\n\n it(\"should handle single skill as plugin\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n const result = store.deriveInstallMode();\n expect(result).toBe(\"plugin\");\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 } from \"vitest\";\nimport { useWizardStore } from \"./wizard-store\";\nimport { initializeMatrix } from \"../lib/matrix/matrix-provider\";\nimport { createMockMatrix, SKILLS } from \"../lib/__tests__/helpers\";\nimport { typedKeys } from \"../utils/typed-object\";\nimport {\n ALL_SKILLS_TEST_CATEGORIES_MATRIX,\n ALL_SKILLS_FULLSTACK_CATEGORIES_MATRIX,\n ALL_SKILLS_WEB_AND_API_MATRIX,\n ALL_SKILLS_WEB_PAIR_CATEGORIES_MATRIX,\n ALL_SKILLS_WEB_FRAMEWORK_MATRIX,\n ALL_SKILLS_METHODOLOGY_MATRIX,\n ALL_SKILLS_METHODOLOGY_BARE_MATRIX,\n ALL_SKILLS_MULTI_DOMAIN_MATRIX,\n REACT_HONO_FRAMEWORK_API_MATRIX,\n} from \"../lib/__tests__/mock-data/mock-matrices\";\nimport type { AgentName, SkillAssignment, SkillId, SkillSource } from \"../types\";\n\nfunction sa(id: SkillId, preloaded = false): SkillAssignment {\n return { id, preloaded };\n}\n\ndescribe(\"WizardStore\", () => {\n beforeEach(() => {\n initializeMatrix(ALL_SKILLS_TEST_CATEGORIES_MATRIX);\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 empty skillConfigs\", () => {\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs).toEqual([]);\n });\n\n it(\"should have null focusedSkillId\", () => {\n const { focusedSkillId } = useWizardStore.getState();\n expect(focusedSkillId).toBeNull();\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 and selections\", () => {\n const store = useWizardStore.getState();\n store.selectStack(\"nextjs-fullstack\");\n store.toggleDomain(\"web\");\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.selectStack(null);\n\n const state = useWizardStore.getState();\n expect(state.selectedStackId).toBeNull();\n expect(state.domainSelections).toEqual({});\n expect(state.selectedDomains).toEqual([]);\n expect(state.skillConfigs).toEqual([]);\n expect(state.selectedAgents).toEqual([]);\n expect(state.boundSkills).toEqual([]);\n expect(state.currentDomainIndex).toBe(0);\n expect(state.stackAction).toBeNull();\n });\n\n it(\"should clear previous selections when changing from one stack to another\", () => {\n initializeMatrix(ALL_SKILLS_FULLSTACK_CATEGORIES_MATRIX);\n const store = useWizardStore.getState();\n\n // Simulate selecting a stack and populating\n store.populateFromSkillIds([\"web-framework-react\", \"api-framework-hono\"]);\n\n const stateAfterFirst = useWizardStore.getState();\n expect(Object.keys(stateAfterFirst.domainSelections).length).toBeGreaterThan(0);\n\n // Simulate going back and selecting \"start from scratch\"\n store.selectStack(null);\n\n const stateAfterClear = useWizardStore.getState();\n expect(stateAfterClear.domainSelections).toEqual({});\n expect(stateAfterClear.selectedDomains).toEqual([]);\n expect(stateAfterClear.skillConfigs).toEqual([]);\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 initializeMatrix(ALL_SKILLS_FULLSTACK_CATEGORIES_MATRIX);\n\n store.populateFromStack(stack);\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 initializeMatrix(REACT_HONO_FRAMEWORK_API_MATRIX);\n\n store.populateFromSkillIds([\"web-framework-react\", \"api-framework-hono\"]);\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 initializeMatrix(ALL_SKILLS_WEB_AND_API_MATRIX);\n\n store.populateFromStack(stack);\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\", 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-composition-api\", true);\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web![\"web-framework\"]).toEqual([\"web-framework-vue-composition-api\"]);\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 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(\"skillConfigs and per-skill scope\", () => {\n it(\"should sync skillConfigs when toggling a technology on\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs).toHaveLength(1);\n expect(skillConfigs[0]).toEqual({\n id: \"web-framework-react\",\n scope: \"global\",\n source: \"agents-inc\",\n });\n });\n\n it(\"should remove from skillConfigs when toggling a technology off\", () => {\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 { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs).toHaveLength(0);\n });\n\n it(\"should replace skillConfigs entry 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-composition-api\", true);\n\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs).toHaveLength(1);\n expect(skillConfigs[0].id).toBe(\"web-framework-vue-composition-api\");\n });\n\n it(\"should accumulate skillConfigs 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 { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs).toHaveLength(2);\n expect(skillConfigs.map((sc) => sc.id)).toEqual([\n \"web-testing-vitest\",\n \"web-testing-playwright-e2e\",\n ]);\n });\n\n it(\"should toggle skill scope between global and project\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n store.toggleSkillScope(\"web-framework-react\");\n\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs[0].scope).toBe(\"project\");\n });\n\n it(\"should toggle skill scope back to global\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n store.toggleSkillScope(\"web-framework-react\");\n store.toggleSkillScope(\"web-framework-react\");\n\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs[0].scope).toBe(\"global\");\n });\n\n it(\"should not toggle scope of locked skills\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n useWizardStore.setState({ lockedSkillIds: [\"web-framework-react\"] as SkillId[] });\n\n store.toggleSkillScope(\"web-framework-react\");\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs[0].scope).toBe(\"global\");\n });\n\n it(\"should not toggle skill scope when isEditingFromGlobalScope is true\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n useWizardStore.setState({ isEditingFromGlobalScope: true });\n\n store.toggleSkillScope(\"web-framework-react\");\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs[0].scope).toBe(\"global\");\n });\n\n it(\"should update source via setSkillSource\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n store.setSkillSource(\"web-framework-react\", \"local\");\n\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs[0].source).toBe(\"local\");\n });\n\n it(\"should set and clear focusedSkillId\", () => {\n const store = useWizardStore.getState();\n\n store.setFocusedSkillId(\"web-framework-react\");\n expect(useWizardStore.getState().focusedSkillId).toBe(\"web-framework-react\");\n\n store.setFocusedSkillId(null);\n expect(useWizardStore.getState().focusedSkillId).toBeNull();\n });\n\n it(\"should update source via setSourceSelection on skillConfigs\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n store.setSourceSelection(\"web-framework-react\", \"local\");\n\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs[0].source).toBe(\"local\");\n });\n\n it(\"should populate skillConfigs from 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 },\n };\n initializeMatrix(ALL_SKILLS_WEB_PAIR_CATEGORIES_MATRIX);\n\n store.populateFromStack(stack);\n\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs).toHaveLength(2);\n expect(skillConfigs.map((sc) => sc.id)).toEqual([\"web-framework-react\", \"web-state-zustand\"]);\n expect(skillConfigs.every((sc) => sc.scope === \"global\")).toBe(true);\n expect(skillConfigs.every((sc) => sc.source === \"agents-inc\")).toBe(true);\n });\n\n it(\"should populate skillConfigs from populateFromSkillIds\", () => {\n const store = useWizardStore.getState();\n\n initializeMatrix(REACT_HONO_FRAMEWORK_API_MATRIX);\n\n store.populateFromSkillIds([\"web-framework-react\", \"api-framework-hono\"]);\n\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs).toHaveLength(2);\n expect(skillConfigs.map((sc) => sc.id)).toEqual([\n \"web-framework-react\",\n \"api-framework-hono\",\n ]);\n });\n\n it(\"should remove skillConfigs when domain is deselected\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n expect(useWizardStore.getState().skillConfigs).toHaveLength(1);\n\n store.toggleDomain(\"web\");\n\n expect(useWizardStore.getState().skillConfigs).toHaveLength(0);\n });\n\n it(\"should restore skillConfigs when domain is re-toggled after populateFromStack\", () => {\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 initializeMatrix(ALL_SKILLS_WEB_FRAMEWORK_MATRIX);\n\n store.populateFromStack(stack);\n expect(useWizardStore.getState().skillConfigs).toHaveLength(1);\n\n store.toggleDomain(\"web\");\n expect(useWizardStore.getState().skillConfigs).toHaveLength(0);\n\n store.toggleDomain(\"web\");\n expect(useWizardStore.getState().skillConfigs).toHaveLength(1);\n expect(useWizardStore.getState().skillConfigs[0].id).toBe(\"web-framework-react\");\n });\n\n it(\"should reset skillConfigs and focusedSkillId on reset\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.setFocusedSkillId(\"web-framework-react\");\n\n store.reset();\n\n const state = useWizardStore.getState();\n expect(state.skillConfigs).toEqual([]);\n expect(state.focusedSkillId).toBeNull();\n });\n\n it(\"should set all sources to local via setAllSourcesLocal\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"api\", \"api-api\", \"api-framework-hono\", true);\n\n store.setAllSourcesLocal();\n\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs.every((sc) => sc.source === \"local\")).toBe(true);\n });\n\n it(\"should set all sources to plugin via setAllSourcesPlugin\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.setSourceSelection(\"web-framework-react\", \"local\");\n\n initializeMatrix(\n createMockMatrix({\n ...SKILLS.react,\n availableSources: [{ name: \"Acme Corp\", type: \"private\", installed: false }],\n }),\n );\n\n store.setAllSourcesPlugin();\n\n const { skillConfigs } = useWizardStore.getState();\n expect(skillConfigs[0].source).toBe(\"Acme Corp\");\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 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 category 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.history).toEqual([]);\n });\n });\n\n describe(\"populateFromStack\", () => {\n it(\"should set selectedDomains to only domains present in 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 initializeMatrix(ALL_SKILLS_WEB_FRAMEWORK_MATRIX);\n\n store.populateFromStack(stack);\n\n const { selectedDomains, domainSelections } = useWizardStore.getState();\n\n expect(selectedDomains).toEqual([\"web\"]);\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 initializeMatrix(ALL_SKILLS_FULLSTACK_CATEGORIES_MATRIX);\n\n store.populateFromStack(stack);\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: { \"meta-reviewing\": [sa(\"meta-methodology-vitest\" as SkillId)] },\n },\n };\n initializeMatrix(ALL_SKILLS_METHODOLOGY_BARE_MATRIX);\n\n store.populateFromStack(stack);\n\n const { domainSelections } = useWizardStore.getState();\n\n expect(typedKeys(domainSelections)).toHaveLength(0);\n });\n\n it(\"should populate multiple skills from array-valued categories\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n \"pattern-scout\": {\n \"meta-reviewing\": [\n sa(\"meta-methodology-research-methodology\", true),\n sa(\"meta-reviewing-reviewing\", true),\n sa(\"meta-reviewing-cli-reviewing\", true),\n ],\n },\n },\n };\n initializeMatrix(ALL_SKILLS_METHODOLOGY_MATRIX);\n\n store.populateFromStack(stack);\n\n const { domainSelections } = useWizardStore.getState();\n\n expect(domainSelections.meta![\"meta-reviewing\"]).toEqual([\n \"meta-methodology-research-methodology\",\n \"meta-reviewing-reviewing\",\n \"meta-reviewing-cli-reviewing\",\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 \"meta-reviewing\": [\n sa(\"meta-methodology-research-methodology\", true),\n sa(\"meta-reviewing-reviewing\", true),\n ],\n },\n api: { \"api-api\": [sa(\"api-framework-hono\", true)] },\n },\n };\n initializeMatrix(ALL_SKILLS_MULTI_DOMAIN_MATRIX);\n\n store.populateFromStack(stack);\n\n const { domainSelections } = useWizardStore.getState();\n\n expect(domainSelections.web![\"web-framework\"]).toEqual([\"web-framework-react\"]);\n expect(domainSelections.meta![\"meta-reviewing\"]).toEqual([\n \"meta-methodology-research-methodology\",\n \"meta-reviewing-reviewing\",\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 \"meta-reviewing\": [\n sa(\"meta-methodology-research-methodology\", true),\n sa(\"meta-reviewing-reviewing\", true),\n ],\n },\n agent2: {\n \"meta-reviewing\": [\n sa(\"meta-reviewing-reviewing\", true),\n sa(\"meta-reviewing-cli-reviewing\", true),\n ],\n },\n },\n };\n initializeMatrix(ALL_SKILLS_METHODOLOGY_MATRIX);\n\n store.populateFromStack(stack);\n\n const { domainSelections } = useWizardStore.getState();\n\n // Should deduplicate: anti-over-engineering appears in both agents\n expect(domainSelections.meta![\"meta-reviewing\"]).toEqual([\n \"meta-methodology-research-methodology\",\n \"meta-reviewing-reviewing\",\n \"meta-reviewing-cli-reviewing\",\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 ...SKILLS.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 initializeMatrix(createMockMatrix(skill));\n\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n const rows = store.buildSourceRows();\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 ...SKILLS.react,\n availableSources: [\n makeSource({ name: \"agents-inc\", type: \"public\" }),\n makeSource({ name: \"Acme Corp\", type: \"private\", primary: true }),\n ],\n };\n\n initializeMatrix(createMockMatrix(skill));\n\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n const rows = store.buildSourceRows();\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 expect(rows[0].options[2].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 ...SKILLS.react,\n availableSources: [\n makeSource({ name: \"Extra Corp\", type: \"private\" }),\n makeSource({ name: \"agents-inc\", type: \"public\" }),\n ],\n };\n\n initializeMatrix(createMockMatrix(skill));\n\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n const rows = store.buildSourceRows();\n expect(rows).toHaveLength(1);\n expect(rows[0].options[0].id).toBe(\"local\");\n expect(rows[0].options[1].id).toBe(\"agents-inc\");\n expect(rows[0].options[2].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 ...SKILLS.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 initializeMatrix(createMockMatrix(skill));\n\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n const rows = store.buildSourceRows();\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(\"agentConfigs and scope management\", () => {\n it(\"should have empty agentConfigs initially\", () => {\n const { agentConfigs } = useWizardStore.getState();\n expect(agentConfigs).toEqual([]);\n });\n\n it(\"should sync agentConfigs when toggleAgent is called\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n\n const { agentConfigs } = useWizardStore.getState();\n expect(agentConfigs).toEqual([{ name: \"web-developer\", scope: \"global\" }]);\n });\n\n it(\"should remove from agentConfigs when agent is toggled off\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n store.toggleAgent(\"web-developer\");\n\n const { agentConfigs } = useWizardStore.getState();\n expect(agentConfigs).toEqual([]);\n });\n\n it(\"should toggle agent scope between global and project\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n store.toggleAgentScope(\"web-developer\");\n\n const { agentConfigs } = useWizardStore.getState();\n expect(agentConfigs).toEqual([{ name: \"web-developer\", scope: \"project\" }]);\n\n store.toggleAgentScope(\"web-developer\");\n expect(useWizardStore.getState().agentConfigs).toEqual([\n { name: \"web-developer\", scope: \"global\" },\n ]);\n });\n\n it(\"should set and clear focusedAgentId\", () => {\n const store = useWizardStore.getState();\n store.setFocusedAgentId(\"web-developer\");\n\n expect(useWizardStore.getState().focusedAgentId).toBe(\"web-developer\");\n\n store.setFocusedAgentId(null);\n expect(useWizardStore.getState().focusedAgentId).toBeNull();\n });\n\n it(\"should not toggle locked agents\", () => {\n useWizardStore.setState({ lockedAgentNames: [\"web-developer\"] as AgentName[] });\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n\n const { selectedAgents, agentConfigs } = useWizardStore.getState();\n expect(selectedAgents).toEqual([]);\n expect(agentConfigs).toEqual([]);\n });\n\n it(\"should not toggle scope of locked agents\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n useWizardStore.setState({ lockedAgentNames: [\"web-developer\"] as AgentName[] });\n\n store.toggleAgentScope(\"web-developer\");\n const { agentConfigs } = useWizardStore.getState();\n expect(agentConfigs).toEqual([{ name: \"web-developer\", scope: \"global\" }]);\n });\n\n it(\"should not toggle agent scope when isEditingFromGlobalScope is true\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n useWizardStore.setState({ isEditingFromGlobalScope: true });\n\n store.toggleAgentScope(\"web-developer\");\n const { agentConfigs } = useWizardStore.getState();\n expect(agentConfigs).toStrictEqual([{ name: \"web-developer\", scope: \"global\" }]);\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(\"scribe\");\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(\"scribe\");\n store.toggleDomain(\"web\");\n store.preselectAgentsFromDomains();\n\n const { selectedAgents } = useWizardStore.getState();\n // preselectAgentsFromDomains replaces the array entirely\n expect(selectedAgents).not.toContain(\"scribe\");\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(\"domains\");\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(\"stack\");\n expect(completedSteps).toContain(\"domains\");\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(\"domains\");\n store.setStep(\"build\");\n store.setStep(\"sources\");\n store.setStep(\"agents\");\n\n const { completedSteps } = store.getStepProgress();\n expect(completedSteps).toContain(\"stack\");\n expect(completedSteps).toContain(\"domains\");\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 describe(\"deriveInstallMode\", () => {\n it(\"should return 'plugin' when all skills have default marketplace source\", () => {\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\n const result = store.deriveInstallMode();\n expect(result).toBe(\"plugin\");\n });\n\n it(\"should return 'local' when all skills are set to local\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"api\", \"api-api\", \"api-framework-hono\", true);\n store.setSourceSelection(\"web-framework-react\", \"local\");\n store.setSourceSelection(\"api-framework-hono\", \"local\");\n\n const result = store.deriveInstallMode();\n expect(result).toBe(\"local\");\n });\n\n it(\"should return 'mixed' when some skills are local and some are not\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"api\", \"api-api\", \"api-framework-hono\", true);\n store.setSourceSelection(\"web-framework-react\", \"local\");\n store.setSourceSelection(\"api-framework-hono\", \"agents-inc\");\n\n const result = store.deriveInstallMode();\n expect(result).toBe(\"mixed\");\n });\n\n it(\"should return 'local' when no skills are configured\", () => {\n const store = useWizardStore.getState();\n\n const result = store.deriveInstallMode();\n expect(result).toBe(\"local\");\n });\n\n it(\"should handle single skill as local\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n store.setSourceSelection(\"web-framework-react\", \"local\");\n\n const result = store.deriveInstallMode();\n expect(result).toBe(\"local\");\n });\n\n it(\"should handle single skill as plugin\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"web-framework\", \"web-framework-react\", true);\n\n const result = store.deriveInstallMode();\n expect(result).toBe(\"plugin\");\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.82.0",
3
+ "version": "0.82.4",
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",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/stores/wizard-store.ts"],"sourcesContent":["import { unique } from \"remeda\";\nimport { create } from \"zustand\";\nimport { BUILT_IN_DOMAIN_ORDER, DEFAULT_PUBLIC_SOURCE_NAME } from \"../consts.js\";\nimport type { InstallMode } from \"../lib/installation/index.js\";\nimport { deriveInstallMode as sharedDeriveInstallMode } from \"../lib/installation/installation.js\";\nimport type { AgentScopeConfig, SkillConfig } from \"../types/config.js\";\nimport { resolveAlias } from \"../lib/matrix/index.js\";\nimport { matrix, getSkillById, getCategoryDomain } from \"../lib/matrix/matrix-provider.js\";\nimport type {\n AgentName,\n BoundSkill,\n Domain,\n DomainSelections,\n ResolvedSkill,\n SkillAlias,\n SkillAssignment,\n SkillId,\n SkillSource,\n Category,\n CategoryDomainMap,\n} from \"../types/index.js\";\nimport type { SourceOption } from \"../components/wizard/source-grid.js\";\nimport { warn } from \"../utils/logger.js\";\nimport { typedEntries, typedKeys } from \"../utils/typed-object.js\";\n\nconst BUILT_IN_DOMAINS: Domain[] = [\"web\", \"api\", \"cli\", \"mobile\", \"shared\"];\n\nfunction createDefaultSkillConfig(id: SkillId): SkillConfig {\n const skill = matrix.skills[id];\n const primarySource = skill?.availableSources?.find((s) => s.primary)?.name;\n return { id, scope: \"global\", source: primarySource ?? DEFAULT_PUBLIC_SOURCE_NAME };\n}\n\n/** Derive all unique domains from a categories map, preserving built-in order then appending custom. */\nfunction getAllDomainsFromCategories(categories: CategoryDomainMap): Domain[] {\n const allDomains = unique(\n Object.values(categories)\n .map((cat) => cat?.domain)\n .filter((d): d is Domain => d != null),\n );\n return [...BUILT_IN_DOMAINS, ...allDomains.filter((d) => !BUILT_IN_DOMAINS.includes(d))];\n}\n\n/** Sort domains into canonical order: custom domains first (alphabetically), then built-in domains per BUILT_IN_DOMAIN_ORDER. */\nfunction sortDomainsCanonically(domains: Domain[]): Domain[] {\n const builtInSet = new Set<Domain>(BUILT_IN_DOMAIN_ORDER);\n return [\n ...domains.filter((d) => !builtInSet.has(d)).sort(),\n ...BUILT_IN_DOMAIN_ORDER.filter((d) => domains.includes(d)),\n ];\n}\n\n/** Built-in agent names grouped by domain prefix. Custom domains return no preselected agents. */\nconst DOMAIN_AGENTS: Partial<Record<string, AgentName[]>> = {\n web: [\n \"web-developer\",\n \"web-reviewer\",\n \"web-researcher\",\n \"web-tester\",\n \"web-pm\",\n \"web-architecture\",\n ],\n api: [\"api-developer\", \"api-reviewer\", \"api-researcher\"],\n cli: [\"cli-developer\", \"cli-tester\", \"cli-reviewer\"],\n};\n\n/**\n * Fixed source sort tiers (lower = higher priority):\n * 1 = local/global (installed on disk -- type \"local\" or installed via plugin)\n * 2 = scoped marketplace (primary source from --source flag)\n * 3 = default public marketplace (Agents Inc)\n * 4 = third-party marketplaces (extra configured sources)\n */\nconst SOURCE_SORT_TIER_LOCAL = 1;\nconst SOURCE_SORT_TIER_SCOPED = 2;\nconst SOURCE_SORT_TIER_PUBLIC = 3;\nconst SOURCE_SORT_TIER_THIRD_PARTY = 4;\n\nfunction getSourceSortTier(source: SkillSource): number {\n if (source.type === \"local\") return SOURCE_SORT_TIER_LOCAL;\n if (source.primary) return SOURCE_SORT_TIER_SCOPED;\n if (source.type === \"public\") return SOURCE_SORT_TIER_PUBLIC;\n return SOURCE_SORT_TIER_THIRD_PARTY;\n}\n\nexport type SkillLookupEntry = Pick<ResolvedSkill, \"category\" | \"displayName\">;\n\nfunction resolveSkillForPopulation(\n skillId: SkillId,\n): { domain: Domain; subcat: Category; techId: SkillId } | null {\n const { skills } = matrix;\n const skill = skills[skillId];\n if (!skill?.category) {\n warn(\n `Installed skill '${skillId}' is missing from the marketplace — it may have been removed or renamed`,\n );\n return null;\n }\n\n const domain = getCategoryDomain(skill.category);\n if (!domain) {\n warn(`Installed skill '${skillId}' has unknown category '${skill.category}' — skipping`);\n return null;\n }\n\n // Boundary cast: domain lookup confirmed category exists in matrix\n const subcat = skill.category as Category;\n return { domain, subcat, techId: skillId };\n}\n\nfunction buildBoundSkillOptions(\n boundSkills: BoundSkill[],\n alias: SkillAlias,\n selectedSource: string,\n): SourceOption[] {\n return boundSkills\n .filter((b) => b.boundTo === alias)\n .map((bound) => ({\n id: bound.sourceName,\n selected: selectedSource === bound.sourceName,\n installed: false,\n }));\n}\n\n/**\n * Wizard step identifiers for the multi-step init/edit flow.\n *\n * Progression: stack -> domains -> build -> sources -> agents -> confirm\n * The \"stack\" step shows all stacks + \"Start from scratch\" in a unified list.\n * The \"domains\" step shows domain selection (web, api, cli, mobile, shared).\n * Navigation is tracked via the `history` stack for goBack() support.\n */\nexport type WizardStep =\n | \"stack\" // Select stack or \"Start from scratch\"\n | \"domains\" // Select domains to configure\n | \"build\" // CategoryGrid for technology selection\n | \"sources\" // Choose skill sources (recommended vs custom)\n | \"agents\" // Select which agents to compile\n | \"confirm\"; // Final confirmation\n\n/**\n * Wizard store state and actions.\n *\n * The store uses a composition pattern: small, focused actions that each mutate\n * one or two state fields. Wizard step components compose these actions to build\n * up the full selection state incrementally (domains -> categories -> skills -> sources).\n *\n * State flow: stack/scratch selection -> domain selection -> per-domain skill\n * selection (build step) -> source customization -> agent selection -> confirmation.\n */\nexport type WizardState = {\n step: WizardStep;\n\n approach: \"stack\" | \"scratch\" | null;\n selectedStackId: string | null;\n stackAction: \"defaults\" | \"customize\" | null;\n\n selectedDomains: Domain[];\n\n currentDomainIndex: number;\n domainSelections: DomainSelections;\n /** Snapshot of stack-provided domain selections for restoration on domain re-toggle */\n _stackDomainSelections: DomainSelections | null;\n\n showLabels: boolean;\n filterIncompatible: boolean;\n\n skillConfigs: SkillConfig[];\n focusedSkillId: SkillId | null;\n\n customizeSources: boolean;\n\n showSettings: boolean;\n showHelp: boolean;\n enabledSources: Record<string, boolean>;\n\n selectedAgents: AgentName[];\n agentConfigs: AgentScopeConfig[];\n focusedAgentId: AgentName | null;\n\n boundSkills: BoundSkill[];\n\n /** Skill IDs that cannot be toggled or removed (D9: existing global items in project context) */\n lockedSkillIds: SkillId[];\n /** Agent names that cannot be toggled or removed (D9: existing global agents in project context) */\n lockedAgentNames: AgentName[];\n\n history: WizardStep[];\n\n /**\n * Navigate to a wizard step, pushing the current step onto history.\n * @param step - Target step to navigate to\n *\n * Side effects: sets `step`, appends previous step to `history`\n */\n setStep: (step: WizardStep) => void;\n /**\n * Set the wizard approach (stack-based or build-from-scratch).\n * @param approach - \"stack\" to use a pre-built template, \"scratch\" to select skills manually, null to reset\n *\n * Side effects: sets `approach`\n */\n setApproach: (approach: \"stack\" | \"scratch\" | null) => void;\n /**\n * Select a stack by ID, or null to deselect.\n * @param stackId - Stack identifier from suggestedStacks, or null to clear\n *\n * Side effects: sets `selectedStackId`\n */\n selectStack: (stackId: string | null) => void;\n /**\n * Set how to apply the selected stack.\n * @param action - \"defaults\" to use stack as-is, \"customize\" to enter the build step\n *\n * Side effects: sets `stackAction`\n */\n setStackAction: (action: \"defaults\" | \"customize\") => void;\n /**\n * Pre-populate domainSelections from a stack's agent-to-skill mappings.\n *\n * Iterates all agents in the stack, resolving each category's skill assignments\n * to the appropriate domain. Enables all domains and deduplicates skill IDs.\n *\n * @param stack - Stack definition with agent-level skill assignments\n * @param stack.agents - Record of agent name to `{ category: SkillAssignment[] }` mappings\n * @param categories - Category definitions used to resolve category -> domain mapping\n *\n * Side effects: sets `domainSelections`, sets `selectedDomains` to ALL_DOMAINS\n */\n populateFromStack: (stack: {\n agents: Record<string, Partial<Record<Category, SkillAssignment[]>>>;\n }) => void;\n /**\n * Pre-populate domainSelections from a flat list of installed skill IDs.\n *\n * Used by `agentsinc edit` to restore wizard state from existing project config.\n * Looks up each skill's category and domain, warns for unresolvable skills.\n *\n * @param skillIds - Flat array of currently installed skill IDs\n * @param skills - Skill lookup providing category and displayName per skill ID\n * @param categories - Category definitions used to resolve category -> domain mapping\n *\n * Side effects: sets `domainSelections`, sets `selectedDomains` to domains found in the provided skill IDs\n */\n populateFromSkillIds: (skillIds: SkillId[], savedConfigs?: SkillConfig[]) => void;\n /**\n * Toggle a domain on or off in the selectedDomains list.\n * @param domain - Domain to toggle\n *\n * Side effects: adds or removes from `selectedDomains`\n */\n toggleDomain: (domain: Domain) => void;\n /**\n * Toggle a skill selection within a domain's category.\n *\n * When exclusive is true (radio behavior), selecting a new skill replaces any\n * existing selection in that category. When false (checkbox behavior),\n * the skill is added to or removed from the selection array.\n *\n * @param domain - Domain containing the category\n * @param category - Category within the domain\n * @param technology - Skill ID to toggle\n * @param exclusive - If true, only one skill can be selected per category (radio)\n *\n * Side effects: updates `domainSelections[domain][category]`\n */\n toggleTechnology: (\n domain: Domain,\n category: Category,\n technology: SkillId,\n exclusive: boolean,\n ) => void;\n /**\n * Advance to the next domain in the build step.\n * @returns true if advanced, false if already at the last domain\n *\n * Side effects: increments `currentDomainIndex`\n */\n nextDomain: () => boolean;\n /**\n * Go back to the previous domain in the build step.\n * @returns true if moved back, false if already at the first domain\n *\n * Side effects: decrements `currentDomainIndex`\n */\n prevDomain: () => boolean;\n /**\n * Set the current domain index directly.\n * @param index - Index to set (0-based, must be within selectedDomains range)\n *\n * Side effects: sets `currentDomainIndex` if index is valid, otherwise no-op\n */\n setCurrentDomainIndex: (index: number) => void;\n /** Toggle compatibility label visibility on skill tags in the build step grid. */\n toggleShowLabels: () => void;\n /** Toggle filtering of incompatible skills in the build step grid. */\n toggleFilterIncompatible: () => void;\n /**\n * Derive the install mode from skillConfigs source values.\n * If all skills use \"local\" source, returns \"local\". If all use non-local, returns \"plugin\".\n * If mixed, returns \"mixed\". Returns \"local\" when no skills are configured.\n */\n deriveInstallMode: () => InstallMode;\n /**\n * Toggle the scope of a specific skill between \"project\" and \"global\".\n * @param skillId - Skill to toggle scope for\n *\n * Side effects: updates `skillConfigs` entry for the skill\n */\n toggleSkillScope: (skillId: SkillId) => void;\n /**\n * Update the source for a specific skill in skillConfigs.\n * @param skillId - Skill to update\n * @param source - Source identifier (e.g., \"local\", marketplace name)\n *\n * Side effects: updates `skillConfigs` entry for the skill\n */\n setSkillSource: (skillId: SkillId, source: string) => void;\n /**\n * Set the currently focused skill ID in the build step (for S hotkey).\n * @param id - Skill ID to focus, or null to clear\n *\n * Side effects: sets `focusedSkillId`\n */\n setFocusedSkillId: (id: SkillId | null) => void;\n /**\n * Set which source provides a specific skill.\n * @param skillId - Skill to configure the source for\n * @param sourceId - Source identifier (e.g., \"public\", \"local\", marketplace name)\n *\n * Side effects: updates `skillConfigs` entry for the skill. No-op with warning if either param is empty.\n */\n setSourceSelection: (skillId: SkillId, sourceId: string) => void;\n /**\n * Enable or disable source customization on the sources step.\n * @param customize - true to show per-skill source pickers\n *\n * Side effects: sets `customizeSources`\n */\n setCustomizeSources: (customize: boolean) => void;\n /** Toggle the settings overlay (source management). */\n toggleSettings: () => void;\n /** Toggle the help overlay (hotkey reference). */\n toggleHelp: () => void;\n /**\n * Replace the full set of enabled/disabled sources.\n * @param sources - Record of source name to enabled boolean. Empty-string keys are filtered out.\n *\n * Side effects: sets `enabledSources`\n */\n setEnabledSources: (sources: Record<string, boolean>) => void;\n /**\n * Add a bound skill from search to the wizard's bound skills list.\n * Duplicates (same id + sourceUrl) are silently skipped with a warning.\n *\n * @param skill - Bound skill to add (foreign skill tied to a category alias)\n *\n * Side effects: appends to `boundSkills`\n */\n bindSkill: (skill: BoundSkill) => void;\n /**\n * Navigate to the previous wizard step using the history stack.\n * Falls back to \"stack\" if history is empty.\n *\n * Side effects: pops from `history`, sets `step` to the popped value\n */\n goBack: () => void;\n /**\n * Toggle an agent on or off in the selectedAgents list.\n * @param agent - Agent name to toggle\n *\n * Side effects: adds or removes from `selectedAgents`, syncs `agentConfigs`\n */\n toggleAgent: (agent: AgentName) => void;\n /**\n * Toggle the scope of a specific agent between \"project\" and \"global\".\n * @param agentName - Agent to toggle scope for\n *\n * Side effects: updates `agentConfigs` entry for the agent\n */\n toggleAgentScope: (agentName: AgentName) => void;\n /**\n * Set the currently focused agent ID in the agents step (for S hotkey).\n * @param id - Agent name to focus, or null to clear\n *\n * Side effects: sets `focusedAgentId`\n */\n setFocusedAgentId: (id: AgentName | null) => void;\n /**\n * Preselect agents based on selected domains from the first wizard step.\n * Matches domains against DOMAIN_AGENTS mapping.\n * Optional agents (meta/pattern) are excluded.\n *\n * Side effects: replaces `selectedAgents` with computed preselection\n */\n preselectAgentsFromDomains: () => void;\n /** Reset all wizard state to initial values. */\n reset: () => void;\n\n /**\n * Collect all selected skill IDs across all domains and categories.\n * @returns Flat array of every selected SkillId (may contain duplicates if shared across domains)\n */\n getAllSelectedTechnologies: () => SkillId[];\n /**\n * Group selected skill IDs by domain.\n * @returns Partial record mapping each domain with selections to its skill ID array\n */\n getSelectedTechnologiesPerDomain: () => Partial<Record<Domain, SkillId[]>>;\n /**\n * Get the domain currently visible in the build step.\n * @returns The domain at currentDomainIndex, or null if no domains are selected\n */\n getCurrentDomain: () => Domain | null;\n /**\n * Count total selected technologies across all domains.\n * @returns Number of selected skill IDs\n */\n getTechnologyCount: () => number;\n /**\n * Compute which wizard steps are completed and which are skipped.\n * Used by WizardTabs to render step progress indicators.\n * @returns Object with completedSteps and skippedSteps string arrays\n */\n getStepProgress: () => { completedSteps: WizardStep[]; skippedSteps: WizardStep[] };\n /** @returns true if there is a next domain after the current one */\n canGoToNextDomain: () => boolean;\n /** @returns true if there is a previous domain before the current one */\n canGoToPreviousDomain: () => boolean;\n /** Set all selected skills to \"local\" source. */\n setAllSourcesLocal: () => void;\n /** Set all selected skills to their first non-local (marketplace) source. */\n setAllSourcesPlugin: () => void;\n\n /**\n * Build the source selection rows for the sources step UI.\n *\n * For each selected technology, resolves the canonical skill ID, looks up available\n * sources from the matrix, merges in any bound skills from search, and determines\n * which source is currently selected. Sources are sorted: local first, then public,\n * then private/other.\n *\n * @returns Array of row objects, one per selected technology, each containing:\n * - `skillId` - Canonical resolved skill ID\n * - `options` - Available sources with selection state and install status\n */\n buildSourceRows: () => {\n skillId: SkillId;\n options: SourceOption[];\n }[];\n};\n\n/** State-only fields from WizardState (excludes actions/getters). Used to type createInitialState(). */\ntype WizardStateData = Pick<\n WizardState,\n | \"step\"\n | \"approach\"\n | \"selectedStackId\"\n | \"stackAction\"\n | \"selectedDomains\"\n | \"currentDomainIndex\"\n | \"domainSelections\"\n | \"_stackDomainSelections\"\n | \"showLabels\"\n | \"filterIncompatible\"\n | \"skillConfigs\"\n | \"focusedSkillId\"\n | \"customizeSources\"\n | \"showSettings\"\n | \"showHelp\"\n | \"enabledSources\"\n | \"selectedAgents\"\n | \"agentConfigs\"\n | \"focusedAgentId\"\n | \"boundSkills\"\n | \"lockedSkillIds\"\n | \"lockedAgentNames\"\n | \"history\"\n>;\n\nconst createInitialState = (): WizardStateData => ({\n step: \"stack\",\n approach: null,\n selectedStackId: null,\n stackAction: null,\n selectedDomains: [],\n currentDomainIndex: 0,\n domainSelections: {},\n /** Snapshot of domainSelections from populateFromStack/populateFromSkillIds, used to restore on domain re-toggle */\n _stackDomainSelections: null,\n showLabels: false,\n filterIncompatible: false,\n skillConfigs: [],\n focusedSkillId: null,\n customizeSources: false,\n showSettings: false,\n showHelp: false,\n enabledSources: {},\n selectedAgents: [],\n agentConfigs: [],\n focusedAgentId: null,\n boundSkills: [],\n lockedSkillIds: [],\n lockedAgentNames: [],\n history: [],\n});\n\nexport const useWizardStore = create<WizardState>((set, get) => ({\n ...createInitialState(),\n\n setStep: (step) =>\n set((state) => ({\n step,\n history: [...state.history, state.step],\n })),\n\n setApproach: (approach) => set({ approach }),\n\n selectStack: (stackId) =>\n set({\n selectedStackId: stackId,\n domainSelections: {},\n _stackDomainSelections: null,\n selectedDomains: [],\n skillConfigs: [],\n selectedAgents: [],\n agentConfigs: [],\n boundSkills: [],\n currentDomainIndex: 0,\n stackAction: null,\n }),\n\n setStackAction: (action) => set({ stackAction: action }),\n\n populateFromStack: (stack) =>\n set(() => {\n const { categories } = matrix;\n const domainSelections: DomainSelections = {};\n const domains = new Set<Domain>();\n const allSkillIds = new Set<SkillId>();\n\n for (const agentConfig of Object.values(stack.agents)) {\n for (const [subcat, assignments] of typedEntries<Category, SkillAssignment[]>(\n agentConfig,\n )) {\n const category = categories[subcat];\n const domain = category?.domain;\n\n if (!domain || !assignments) {\n continue;\n }\n\n domains.add(domain);\n\n if (!domainSelections[domain]) {\n domainSelections[domain] = {};\n }\n\n if (!domainSelections[domain][subcat]) {\n domainSelections[domain][subcat] = [];\n }\n\n for (const assignment of assignments) {\n if (!domainSelections[domain][subcat].includes(assignment.id)) {\n domainSelections[domain][subcat].push(assignment.id);\n allSkillIds.add(assignment.id);\n }\n }\n }\n }\n\n const skillConfigs: SkillConfig[] = [...allSkillIds].map(createDefaultSkillConfig);\n\n return {\n domainSelections,\n _stackDomainSelections: structuredClone(domainSelections),\n selectedDomains: sortDomainsCanonically([...domains]),\n skillConfigs,\n };\n }),\n\n populateFromSkillIds: (skillIds, savedConfigs) =>\n set(() => {\n const domainSelections: DomainSelections = {};\n const resolvedSkillIds: SkillId[] = [];\n let skippedCount = 0;\n\n for (const skillId of skillIds) {\n const resolved = resolveSkillForPopulation(skillId);\n if (!resolved) {\n skippedCount++;\n continue;\n }\n\n const { domain, subcat, techId } = resolved;\n if (!domainSelections[domain]) domainSelections[domain] = {};\n if (!domainSelections[domain][subcat]) domainSelections[domain][subcat] = [];\n\n if (!domainSelections[domain][subcat].includes(techId)) {\n domainSelections[domain][subcat].push(techId);\n resolvedSkillIds.push(techId);\n }\n }\n\n if (skippedCount > 0) {\n warn(`${skippedCount} installed skill(s) could not be resolved and were skipped`);\n }\n\n const selectedDomains = sortDomainsCanonically(typedKeys<Domain>(domainSelections));\n\n const skillConfigs: SkillConfig[] = resolvedSkillIds.map((id) => {\n const saved = savedConfigs?.find((sc) => sc.id === id);\n const skill = matrix.skills[id];\n const primarySource = skill?.availableSources?.find((s) => s.primary)?.name;\n return {\n id,\n scope: saved?.scope ?? \"global\",\n source: saved?.source ?? primarySource ?? DEFAULT_PUBLIC_SOURCE_NAME,\n };\n });\n\n return {\n domainSelections,\n _stackDomainSelections: structuredClone(domainSelections),\n selectedDomains,\n skillConfigs,\n };\n }),\n\n toggleDomain: (domain) =>\n set((state) => {\n const isSelected = state.selectedDomains.includes(domain);\n if (isSelected) {\n const { [domain]: _removed, ...remainingSelections } = state.domainSelections;\n\n // Collect all skill IDs being removed from this domain\n const removedSkillIds = new Set<SkillId>();\n if (_removed) {\n for (const skills of Object.values(_removed)) {\n if (skills) {\n for (const id of skills) {\n removedSkillIds.add(id);\n }\n }\n }\n }\n\n return {\n selectedDomains: state.selectedDomains.filter((d) => d !== domain),\n domainSelections: remainingSelections,\n skillConfigs: state.skillConfigs.filter((sc) => !removedSkillIds.has(sc.id)),\n };\n }\n\n // Restore stack selections for this domain if a stack snapshot exists\n const stackSelections = state._stackDomainSelections?.[domain];\n if (stackSelections) {\n // Also restore skillConfigs for the restored skills\n const restoredSkillIds: SkillId[] = [];\n for (const skills of Object.values(stackSelections)) {\n if (skills) restoredSkillIds.push(...skills);\n }\n const existingIds = new Set(state.skillConfigs.map((sc) => sc.id));\n const newConfigs = restoredSkillIds\n .filter((id) => !existingIds.has(id))\n .map(createDefaultSkillConfig);\n\n return {\n selectedDomains: sortDomainsCanonically([...state.selectedDomains, domain]),\n domainSelections: {\n ...state.domainSelections,\n [domain]: structuredClone(stackSelections),\n },\n skillConfigs: [...state.skillConfigs, ...newConfigs],\n };\n }\n\n return {\n selectedDomains: sortDomainsCanonically([...state.selectedDomains, domain]),\n };\n }),\n\n toggleTechnology: (domain, category, technology, exclusive) =>\n set((state) => {\n // D9: locked skills cannot be toggled\n if (state.lockedSkillIds.includes(technology)) return state;\n\n const currentSelections = state.domainSelections[domain]?.[category] || [];\n const isSelected = currentSelections.includes(technology);\n\n let newSelections: SkillId[];\n if (exclusive) {\n newSelections = isSelected ? [] : [technology];\n } else {\n newSelections = isSelected\n ? currentSelections.filter((t) => t !== technology)\n : [...currentSelections, technology];\n }\n\n // Sync skillConfigs: add entries for newly selected, remove entries for deselected\n const removed = currentSelections.filter((id) => !newSelections.includes(id));\n const added = newSelections.filter((id) => !currentSelections.includes(id));\n\n let updatedConfigs = state.skillConfigs.filter((sc) => !removed.includes(sc.id));\n for (const id of added) {\n if (!updatedConfigs.some((sc) => sc.id === id)) {\n updatedConfigs = [...updatedConfigs, createDefaultSkillConfig(id)];\n }\n }\n\n return {\n skillConfigs: updatedConfigs,\n domainSelections: {\n ...state.domainSelections,\n [domain]: {\n ...state.domainSelections[domain],\n [category]: newSelections,\n },\n },\n };\n }),\n\n nextDomain: () => {\n const state = get();\n if (state.currentDomainIndex < state.selectedDomains.length - 1) {\n set({\n currentDomainIndex: state.currentDomainIndex + 1,\n });\n return true;\n }\n return false;\n },\n\n prevDomain: () => {\n const state = get();\n if (state.currentDomainIndex > 0) {\n set({\n currentDomainIndex: state.currentDomainIndex - 1,\n });\n return true;\n }\n return false;\n },\n\n setCurrentDomainIndex: (index) => {\n const state = get();\n if (index >= 0 && index < state.selectedDomains.length) {\n set({ currentDomainIndex: index });\n }\n },\n\n toggleShowLabels: () => set((state) => ({ showLabels: !state.showLabels })),\n toggleFilterIncompatible: () =>\n set((state) => ({ filterIncompatible: !state.filterIncompatible })),\n\n deriveInstallMode: (): InstallMode => {\n const { skillConfigs } = get();\n return sharedDeriveInstallMode(skillConfigs);\n },\n\n toggleSkillScope: (skillId) =>\n set((state) => {\n // D9: locked skills cannot have their scope toggled\n if (state.lockedSkillIds.includes(skillId)) return state;\n return {\n skillConfigs: state.skillConfigs.map((sc) =>\n sc.id === skillId ? { ...sc, scope: sc.scope === \"project\" ? \"global\" : \"project\" } : sc,\n ),\n };\n }),\n\n setSkillSource: (skillId, source) =>\n set((state) => ({\n skillConfigs: state.skillConfigs.map((sc) => (sc.id === skillId ? { ...sc, source } : sc)),\n })),\n\n setFocusedSkillId: (id) => set({ focusedSkillId: id }),\n\n setSourceSelection: (skillId, sourceId) =>\n set((state) => {\n if (!skillId) {\n warn(\"Ignoring setSourceSelection call with empty skillId\");\n return state;\n }\n if (!sourceId) {\n warn(`Ignoring setSourceSelection call with empty sourceId for skill '${skillId}'`);\n return state;\n }\n return {\n skillConfigs: state.skillConfigs.map((sc) =>\n sc.id === skillId ? { ...sc, source: sourceId } : sc,\n ),\n };\n }),\n\n setCustomizeSources: (customize) => set({ customizeSources: customize }),\n\n toggleSettings: () => set((state) => ({ showSettings: !state.showSettings })),\n\n toggleHelp: () => set((state) => ({ showHelp: !state.showHelp })),\n\n setEnabledSources: (sources) => {\n const invalidKeys = Object.keys(sources).filter((key) => !key.trim());\n if (invalidKeys.length > 0) {\n warn(\"Ignoring setEnabledSources call with empty source name(s)\");\n }\n const validSources = Object.fromEntries(Object.entries(sources).filter(([key]) => key.trim()));\n return set({ enabledSources: validSources });\n },\n\n bindSkill: (skill) =>\n set((state) => {\n const exists = state.boundSkills.some(\n (b) => b.id === skill.id && b.sourceUrl === skill.sourceUrl,\n );\n if (exists) {\n warn(`Skill '${skill.id}' from '${skill.sourceUrl}' is already bound — skipping duplicate`);\n return state;\n }\n return { boundSkills: [...state.boundSkills, skill] };\n }),\n\n goBack: () =>\n set((state) => {\n const history = [...state.history];\n const previousStep = history.pop();\n return {\n step: previousStep || \"stack\",\n history,\n };\n }),\n\n toggleAgent: (agent) =>\n set((state) => {\n // D9: locked agents cannot be toggled\n if (state.lockedAgentNames.includes(agent)) return state;\n\n const isSelected = state.selectedAgents.includes(agent);\n if (isSelected) {\n return {\n selectedAgents: state.selectedAgents.filter((a) => a !== agent),\n agentConfigs: state.agentConfigs.filter((ac) => ac.name !== agent),\n };\n }\n return {\n selectedAgents: [...state.selectedAgents, agent],\n agentConfigs: [...state.agentConfigs, { name: agent, scope: \"global\" as const }],\n };\n }),\n\n toggleAgentScope: (agentName) =>\n set((state) => {\n // D9: locked agents cannot have their scope toggled\n if (state.lockedAgentNames.includes(agentName)) return state;\n return {\n agentConfigs: state.agentConfigs.map((ac) =>\n ac.name === agentName\n ? { ...ac, scope: ac.scope === \"project\" ? (\"global\" as const) : (\"project\" as const) }\n : ac,\n ),\n };\n }),\n\n setFocusedAgentId: (id) => set({ focusedAgentId: id }),\n\n preselectAgentsFromDomains: () =>\n set(() => {\n const agents: AgentName[] = [];\n for (const domain of get().selectedDomains) {\n const domainAgents = DOMAIN_AGENTS[domain];\n if (domainAgents) {\n agents.push(...domainAgents);\n }\n }\n const sorted = agents.sort();\n return {\n selectedAgents: sorted,\n agentConfigs: sorted.map((name) => ({ name, scope: \"global\" as const })),\n };\n }),\n\n reset: () => set(createInitialState()),\n\n getAllSelectedTechnologies: () => {\n const state = get();\n const technologies: SkillId[] = [];\n for (const domain of typedKeys<Domain>(state.domainSelections)) {\n const domainSel = state.domainSelections[domain];\n if (!domainSel) continue;\n for (const category of typedKeys<Category>(domainSel)) {\n const techs = domainSel[category];\n if (techs) technologies.push(...techs);\n }\n }\n return technologies;\n },\n\n getSelectedTechnologiesPerDomain: () => {\n const state = get();\n const result: Partial<Record<Domain, SkillId[]>> = {};\n for (const domain of typedKeys<Domain>(state.domainSelections)) {\n const domainSel = state.domainSelections[domain];\n if (!domainSel) continue;\n const techs: SkillId[] = [];\n for (const category of typedKeys<Category>(domainSel)) {\n const subTechs = domainSel[category];\n if (subTechs) techs.push(...subTechs);\n }\n if (techs.length > 0) {\n result[domain] = techs;\n }\n }\n return result;\n },\n\n getCurrentDomain: () => {\n const state = get();\n return state.selectedDomains[state.currentDomainIndex] || null;\n },\n\n getTechnologyCount: () => {\n return get().getAllSelectedTechnologies().length;\n },\n\n getStepProgress: () => {\n const state = get();\n const completed: WizardStep[] = [];\n const skipped: WizardStep[] = [];\n\n if (state.step !== \"stack\" && state.step !== \"domains\") {\n completed.push(\"stack\");\n completed.push(\"domains\");\n } else if (state.step === \"domains\") {\n completed.push(\"stack\");\n }\n\n if (state.approach === \"stack\" && state.selectedStackId && state.stackAction === \"defaults\") {\n skipped.push(\"build\");\n skipped.push(\"sources\");\n skipped.push(\"agents\");\n } else if (state.step === \"confirm\") {\n completed.push(\"build\");\n completed.push(\"sources\");\n completed.push(\"agents\");\n } else if (state.step === \"agents\") {\n completed.push(\"build\");\n completed.push(\"sources\");\n } else if (state.step === \"sources\") {\n completed.push(\"build\");\n }\n\n return { completedSteps: completed, skippedSteps: skipped };\n },\n\n canGoToNextDomain: () => {\n const state = get();\n return state.currentDomainIndex < state.selectedDomains.length - 1;\n },\n\n canGoToPreviousDomain: () => {\n const state = get();\n return state.currentDomainIndex > 0;\n },\n\n setAllSourcesLocal: () => {\n set((state) => ({\n skillConfigs: state.skillConfigs.map((sc) => ({ ...sc, source: \"local\" })),\n }));\n },\n\n setAllSourcesPlugin: () => {\n set((state) => ({\n skillConfigs: state.skillConfigs.map((sc) => {\n const skill = getSkillById(sc.id);\n if (skill.availableSources) {\n const marketplaceSource = skill.availableSources.find((s) => s.type !== \"local\");\n if (marketplaceSource) {\n return { ...sc, source: marketplaceSource.name };\n }\n }\n return sc;\n }),\n }));\n },\n\n buildSourceRows: () => {\n const state = get();\n const selectedTechnologies = get().getAllSelectedTechnologies();\n const { skillConfigs, boundSkills } = state;\n\n return selectedTechnologies.map((tech) => {\n const skillId = resolveAlias(tech);\n const skill = getSkillById(skillId);\n const configEntry = skillConfigs.find((sc) => sc.id === skillId);\n const primarySource = skill.availableSources?.find((s) => s.primary)?.name;\n const selectedSource =\n configEntry?.source ||\n skill.activeSource?.name ||\n primarySource ||\n DEFAULT_PUBLIC_SOURCE_NAME;\n const slug = skill.slug;\n\n const sortedSources = [...(skill.availableSources || [])].sort(\n (a, b) => getSourceSortTier(a) - getSourceSortTier(b),\n );\n\n const options =\n sortedSources.length > 0\n ? sortedSources.map((source) => ({\n id: source.name,\n selected: selectedSource === source.name,\n installed: source.installed,\n }))\n : [\n {\n id: DEFAULT_PUBLIC_SOURCE_NAME,\n selected: selectedSource === DEFAULT_PUBLIC_SOURCE_NAME,\n installed: false,\n },\n ];\n\n if (!options.some((o) => o.id === \"local\")) {\n options.unshift({\n id: \"local\",\n selected: selectedSource === \"local\",\n installed: false,\n });\n }\n\n options.push(...buildBoundSkillOptions(boundSkills, slug, selectedSource));\n\n return { skillId, options };\n });\n },\n}));\n"],"mappings":"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","names":[]}